From 7221b14f0829f0989d09d587958de3147b18b22c Mon Sep 17 00:00:00 2001 From: Serge Poltavski Date: Wed, 1 Feb 2023 03:00:33 +0300 Subject: [PATCH] Devel (#182) prepare 2023.01 --- src/.dir-locals.el => .dir-locals.el | 6 +- .editorconfig | 38 + .github/workflows/puredata.yml | 16 + .gitignore | 2 + .gitmodules | 12 + .travis.yml | 64 - CHANGELOG.md | 16 + CMakeLists.txt | 19 +- README.translators.md | 69 + README.txt | 10 +- build/mac/coverage/cmake_single.sh | 8 + build/mac/debug/cmake_single.sh | 12 +- build/mac/release/cmake_double.sh | 10 +- build/mac/release/cmake_single.sh | 11 + build/win/release/64/config_double.sh | 4 +- build/win/release/64/config_single.sh | 4 +- ceammc/CHANGELOG.md | 130 +- ceammc/CMakeLists.txt | 29 +- ceammc/dev_info_Darwin.txt | 4 + ceammc/dev_info_Linux.txt | 7 + ceammc/dev_info_Windows.txt | 4 + ceammc/distrib/CMakeLists.txt | 27 +- ceammc/distrib/bashrc_tests | 7 + ceammc/distrib/check_doc_external.py | 648 +- ceammc/distrib/dev_sync_pd.sh | 16 + ceammc/distrib/dev_sync_tcl.sh | 12 + ceammc/distrib/linux/CMakeLists.txt | 9 +- ceammc/distrib/linux/snapcraft.yaml.in | 2 + ceammc/distrib/mac/CMakeLists.txt | 24 + ceammc/distrib/mac/install_deps.sh | 26 + .../mac/macdylibbundler/src/Dependency.cpp | 2 +- .../mac/macdylibbundler/src/DylibBundler.cpp | 5 +- .../distrib/mac/macdylibbundler/src/Utils.cpp | 4 +- ceammc/distrib/mac/make_bundle.sh | 501 + ceammc/distrib/mac/make_lib_mac.sh | 19 +- ceammc/distrib/mac/shellrc | 7 + ceammc/distrib/release_0.9.5.pd | 127 + ceammc/distrib/release_0.9.6.pd | 127 + ceammc/distrib/release_text_0.9.5.txt | 110 + ceammc/distrib/tcl/CMakeLists.txt | 19 + ceammc/distrib/tcl/tkdnd | 1 + ceammc/distrib/template_release_0.9.5.pd | 127 + ceammc/distrib/template_release_0.9.6.pd | 127 + ceammc/distrib/win/CMakeLists.txt | 4 + ceammc/distrib/win/fix_dll_deps.sh | 6 +- ceammc/distrib/win/pd.iss | 1 + ceammc/ext/abstractions/abstractions.txt | 15 +- ceammc/ext/abstractions/gdyn.comp2~.pd | 130 +- ceammc/ext/abstractions/gdyn.comp~.pd | 126 +- ceammc/ext/abstractions/gdyn.gate2~.pd | 108 +- ceammc/ext/abstractions/gdyn.gate~.pd | 104 +- ceammc/ext/abstractions/gflt.bpf12~.pd | 84 +- ceammc/ext/abstractions/gflt.bpf24~.pd | 84 +- ceammc/ext/abstractions/gflt.eq10~.pd | 164 +- ceammc/ext/abstractions/gflt.eq_peak_cq~.pd | 94 +- ceammc/ext/abstractions/gflt.eq_peak~.pd | 94 +- ceammc/ext/abstractions/gflt.fb_comb~.pd | 59 + ceammc/ext/abstractions/gflt.fbank5x1~.pd | 124 +- ceammc/ext/abstractions/gflt.ff_comb~.pd | 59 + ceammc/ext/abstractions/gflt.highshelf~.pd | 84 +- ceammc/ext/abstractions/gflt.hpf12~.pd | 62 +- ceammc/ext/abstractions/gflt.hpf24~.pd | 62 +- ceammc/ext/abstractions/gflt.lowshelf~.pd | 84 +- ceammc/ext/abstractions/gflt.lpf12~.pd | 62 +- ceammc/ext/abstractions/gflt.lpf24~.pd | 62 +- ceammc/ext/abstractions/gflt.moog_vcf~.pd | 62 +- ceammc/ext/abstractions/gflt.notch~.pd | 84 +- ceammc/ext/abstractions/gflt.resonbp~.pd | 84 +- ceammc/ext/abstractions/gflt.resonhp~.pd | 70 + ceammc/ext/abstractions/gflt.resonlp~.pd | 70 + ceammc/ext/abstractions/gfx.bitdown~.pd | 96 +- ceammc/ext/abstractions/gfx.chorus~.pd | 115 +- ceammc/ext/abstractions/gfx.dattorro~.pd | 173 + ceammc/ext/abstractions/gfx.distortion1~.pd | 310 +- ceammc/ext/abstractions/gfx.distortion2~.pd | 190 +- ceammc/ext/abstractions/gfx.distortion3~.pd | 125 +- ceammc/ext/abstractions/gfx.distortion~.pd | 104 +- ceammc/ext/abstractions/gfx.drive~.pd | 74 +- ceammc/ext/abstractions/gfx.drone_box~.pd | 104 +- ceammc/ext/abstractions/gfx.echo2~.pd | 115 +- ceammc/ext/abstractions/gfx.echo~.pd | 104 +- ceammc/ext/abstractions/gfx.flanger~.pd | 154 +- ceammc/ext/abstractions/gfx.freeverb2~.pd | 174 +- ceammc/ext/abstractions/gfx.freeverb~.pd | 154 +- ceammc/ext/abstractions/gfx.granulator~.pd | 98 +- ceammc/ext/abstractions/gfx.greyhole~.pd | 154 +- ceammc/ext/abstractions/gfx.jcrev~.pd | 70 + ceammc/ext/abstractions/gfx.pitchshift~.pd | 104 +- ceammc/ext/abstractions/gfx.recho~.pd | 104 +- ceammc/ext/abstractions/gfx.satrev~.pd | 66 + ceammc/ext/abstractions/gfx.sdelay~.pd | 115 +- ceammc/ext/abstractions/gfx.secho~.pd | 104 +- ceammc/ext/abstractions/gfx.tapiir~.pd | 849 +- ceammc/ext/abstractions/gfx.vocoder~.pd | 94 +- ceammc/ext/abstractions/gfx.wahwah~.pd | 116 +- ceammc/ext/abstractions/gfx.zita_rev1~.pd | 203 +- ceammc/ext/abstractions/gfx_reverb_duck~.pd | 87 - ceammc/ext/abstractions/gfx_room~.pd | 125 +- ceammc/ext/abstractions/gfx_shimmer~.pd | 197 +- ceammc/ext/abstractions/gnoise.chua~.pd | 102 + ceammc/ext/abstractions/gnoise.colored~.pd | 55 + ceammc/ext/abstractions/gnoise.crackle~.pd | 62 +- ceammc/ext/abstractions/gnoise.lfreq0~.pd | 62 +- ceammc/ext/abstractions/gnoise.lfreq~.pd | 62 +- ceammc/ext/abstractions/gspat.pan4~.pd | 92 +- ceammc/ext/abstractions/gspat.pan8~.pd | 100 +- ceammc/ext/abstractions/gspat.zita8~.pd | 150 +- ceammc/ext/abstractions/gsynth.birds~.pd | 94 +- .../ext/abstractions/gsynth.church_bell~.pd | 148 +- ceammc/ext/abstractions/gsynth.clap~.pd | 87 + ceammc/ext/abstractions/gsynth.dubdub~.pd | 114 +- ceammc/ext/abstractions/gsynth.dx7~.pd | 609 +- ceammc/ext/abstractions/gsynth.eguitar~.pd | 124 +- .../ext/abstractions/gsynth.english_bell~.pd | 148 +- .../ext/abstractions/gsynth.french_bell~.pd | 148 +- .../ext/abstractions/gsynth.german_bell~.pd | 148 +- ceammc/ext/abstractions/gsynth.glass_harm~.pd | 249 +- .../ext/abstractions/gsynth.harpsichord~.pd | 160 +- ceammc/ext/abstractions/gsynth.hat~.pd | 100 + ceammc/ext/abstractions/gsynth.kick2~.pd | 114 + ceammc/ext/abstractions/gsynth.kick~.pd | 114 +- ceammc/ext/abstractions/gsynth.ks~.pd | 168 +- ceammc/ext/abstractions/gsynth.marimba~.pd | 145 +- ceammc/ext/abstractions/gsynth.piano~.pd | 188 +- ceammc/ext/abstractions/gsynth.risset_arp~.pd | 179 +- .../ext/abstractions/gsynth.risset_bell~.pd | 114 +- .../ext/abstractions/gsynth.risset_tone~.pd | 94 +- .../ext/abstractions/gsynth.russian_bell~.pd | 148 +- ceammc/ext/abstractions/gsynth.snare~.pd | 114 +- .../ext/abstractions/gsynth.standard_bell~.pd | 148 +- ceammc/ext/abstractions/gsynth.voice_fofc~.pd | 166 + ceammc/ext/abstractions/gsynth.voice_fofs~.pd | 166 + ceammc/ext/benchmark/CMakeLists.txt | 51 +- ceammc/ext/benchmark/bm_atomlist.cpp | 8 +- ceammc/ext/benchmark/bm_core.cpp | 13 +- ceammc/ext/benchmark/bm_dataptr.cpp | 14 +- ceammc/ext/benchmark/bm_grain_expr.cpp | 18 +- ceammc/ext/benchmark/bm_lowlevel.cpp | 45 +- ceammc/ext/benchmark/bm_parse.cpp | 97 + ceammc/ext/ceammc_objects.txt | 79 + .../modules/matrix/iface_matrix.h | 4 +- .../modules/numeric/iface_numeric.h | 28 +- .../ext/class-wrapper/src/class_constructor.h | 18 +- ceammc/ext/class-wrapper/src/class_method.h | 14 +- .../class-wrapper/src/class_static_method.h | 16 +- ceammc/ext/class-wrapper/src/data_iface.h | 19 +- .../class-wrapper/src/wrapper_datatype.cpp | 24 +- .../ext/class-wrapper/src/wrapper_datatype.h | 32 +- ceammc/ext/class-wrapper/src/wrapper_tuple.h | 154 +- ceammc/ext/core_objects.txt | 18 + ceammc/ext/doc/CMakeLists.txt | 2 + ceammc/ext/doc/an.onset-help.pd | 112 +- ceammc/ext/doc/an.onset.pddoc | 11 +- ceammc/ext/doc/an.onset~-help.pd | 126 +- ceammc/ext/doc/an.onset~.pddoc | 12 +- ceammc/ext/doc/an.pitchtrack~-help.pd | 75 +- ceammc/ext/doc/an.pitchtrack~.pddoc | 8 +- ceammc/ext/doc/an.rms~-help.pd | 44 +- ceammc/ext/doc/an.rms~.pddoc | 7 +- ceammc/ext/doc/an.tempo~-help.pd | 18 +- ceammc/ext/doc/an.tempo~.pddoc | 9 +- ceammc/ext/doc/an.zero~-help.pd | 92 + ceammc/ext/doc/an.zero~.pddoc | 73 + ceammc/ext/doc/array.bpm-help.pd | 4 +- ceammc/ext/doc/array.circular-help.pd | 85 + ceammc/ext/doc/array.circular.pddoc | 50 + ceammc/ext/doc/array.circular~-help.pd | 73 +- ceammc/ext/doc/array.circular~.pddoc | 5 +- ceammc/ext/doc/array.convolve-help.pd | 93 + ceammc/ext/doc/array.convolve.pddoc | 60 + ceammc/ext/doc/array.copy-help.pd | 6 +- ceammc/ext/doc/array.copy.pddoc | 4 +- ceammc/ext/doc/array.do-help.pd | 65 +- ceammc/ext/doc/array.do.pddoc | 6 +- ceammc/ext/doc/array.each-help.pd | 14 +- ceammc/ext/doc/array.each.pddoc | 7 +- ceammc/ext/doc/array.fill-help.pd | 155 +- ceammc/ext/doc/array.fill.pddoc | 6 +- ceammc/ext/doc/array.grainer~-help.pd | 256 +- ceammc/ext/doc/array.grainer~.pddoc | 73 +- ceammc/ext/doc/array.hist-help.pd | 8 +- ceammc/ext/doc/array.hist.pddoc | 2 +- ceammc/ext/doc/array.mean-help.pd | 8 +- ceammc/ext/doc/array.mean.pddoc | 2 +- ceammc/ext/doc/array.minmax-help.pd | 8 +- ceammc/ext/doc/array.minmax.pddoc | 2 +- ceammc/ext/doc/array.p2s-help.pd | 8 +- ceammc/ext/doc/array.p2s.pddoc | 2 +- ceammc/ext/doc/array.play~-help.pd | 10 +- ceammc/ext/doc/array.play~.pddoc | 6 +- ceammc/ext/doc/array.plot-help.pd | 85 +- ceammc/ext/doc/array.plot.pddoc | 11 +- ceammc/ext/doc/array.plot~-help.pd | 73 +- ceammc/ext/doc/array.plot~.pddoc | 9 +- ceammc/ext/doc/array.resample-help.pd | 4 +- ceammc/ext/doc/array.risset_rythm~-help.pd | 78 + ceammc/ext/doc/array.risset_rythm~.pddoc | 51 + ceammc/ext/doc/array.rms-help.pd | 8 +- ceammc/ext/doc/array.rms.pddoc | 2 +- ceammc/ext/doc/array.s2p-help.pd | 8 +- ceammc/ext/doc/array.s2p.pddoc | 2 +- ceammc/ext/doc/array.set-help.pd | 36 +- ceammc/ext/doc/array.set.pddoc | 8 +- ceammc/ext/doc/array.stddev-help.pd | 8 +- ceammc/ext/doc/array.stddev.pddoc | 2 +- ceammc/ext/doc/array.stretch-help.pd | 9 +- ceammc/ext/doc/array.stretch.pddoc | 4 +- ceammc/ext/doc/array.sum-help.pd | 8 +- ceammc/ext/doc/array.sum.pddoc | 2 +- ceammc/ext/doc/array.sum2-help.pd | 8 +- ceammc/ext/doc/array.sum2.pddoc | 2 +- ceammc/ext/doc/array.variance-help.pd | 8 +- ceammc/ext/doc/array.variance.pddoc | 2 +- ceammc/ext/doc/array.vplay-help.pd | 14 +- ceammc/ext/doc/array.vplay.pddoc | 16 +- ceammc/ext/doc/array.window-help.pd | 115 +- ceammc/ext/doc/array.window.pddoc | 10 +- ceammc/ext/doc/canvas.current-help.pd | 10 +- ceammc/ext/doc/canvas.current.pddoc | 36 +- ceammc/ext/doc/canvas.dir-help.pd | 4 +- ceammc/ext/doc/canvas.name-help.pd | 4 +- ceammc/ext/doc/canvas.path-help.pd | 4 +- ceammc/ext/doc/canvas.top-help.pd | 4 +- ceammc/ext/doc/canvas.top.pddoc | 19 +- ceammc/ext/doc/ceammc-help.pd | 3087 +- ceammc/ext/doc/ceammc.an-help.pd | 2 + ceammc/ext/doc/ceammc.array-help.pd | 116 +- ceammc/ext/doc/ceammc.base-help.pd | 6 +- ceammc/ext/doc/ceammc.conv-help.pd | 68 +- ceammc/ext/doc/ceammc.db | 141 +- ceammc/ext/doc/ceammc.flow-help.pd | 55 +- ceammc/ext/doc/ceammc.flt-help.pd | 144 +- ceammc/ext/doc/ceammc.fx-help.pd | 124 +- ceammc/ext/doc/ceammc.hw-help.pd | 6 +- ceammc/ext/doc/ceammc.lang-help.pd | 6 +- ceammc/ext/doc/ceammc.list-help.pd | 170 +- ceammc/ext/doc/ceammc.midi-help.pd | 78 +- ceammc/ext/doc/ceammc.misc-help.pd | 14 +- ceammc/ext/doc/ceammc.net-help.pd | 14 +- ceammc/ext/doc/ceammc.noise-help.pd | 87 +- ceammc/ext/doc/ceammc.path-help.pd | 26 +- ceammc/ext/doc/ceammc.predicates-help.pd | 6 +- ceammc/ext/doc/ceammc.proto-help.pd | 38 +- ceammc/ext/doc/ceammc.search-help.pd | 6 +- ceammc/ext/doc/ceammc.search.pddoc | 2 +- ceammc/ext/doc/ceammc.string-help.pd | 2 +- ceammc/ext/doc/ceammc.synth-help.pd | 114 +- ceammc/ext/doc/ceammc_deken_objlist.txt | 112 +- ceammc/ext/doc/ceammc_lib.xml | 184 +- ceammc/ext/doc/chaos.gbman0-help.pd | 6 +- ceammc/ext/doc/chaos.gbman0.pddoc | 2 +- ceammc/ext/doc/chaos.gbman0~-help.pd | 6 +- ceammc/ext/doc/chaos.gbman0~.pddoc | 2 +- ceammc/ext/doc/chaos.jong-help.pd | 4 +- ceammc/ext/doc/chaos.logistic-help.pd | 4 +- ceammc/ext/doc/chaos.std0-help.pd | 31 +- ceammc/ext/doc/chaos.std0.pddoc | 5 +- ceammc/ext/doc/chaos.std0~-help.pd | 6 +- ceammc/ext/doc/chaos.std0~.pddoc | 2 +- ceammc/ext/doc/click~-help.pd | 4 +- ceammc/ext/doc/conv.amp2dbfs-help.pd | 4 +- ceammc/ext/doc/conv.amp2dbfs~-help.pd | 4 +- ceammc/ext/doc/conv.bits2bang-help.pd | 53 +- ceammc/ext/doc/conv.bits2bang.pddoc | 13 +- ceammc/ext/doc/conv.bits2int-help.pd | 26 +- ceammc/ext/doc/conv.bits2int.pddoc | 2 +- ceammc/ext/doc/conv.bits2note-help.pd | 6 +- ceammc/ext/doc/conv.bits2note.pddoc | 7 +- ceammc/ext/doc/conv.bits2pos-help.pd | 26 +- ceammc/ext/doc/conv.bits2pos.pddoc | 2 +- ceammc/ext/doc/conv.bpm2hz-help.pd | 12 +- ceammc/ext/doc/conv.bpm2hz.pddoc | 6 +- ceammc/ext/doc/conv.bpm2ms-help.pd | 4 +- ceammc/ext/doc/conv.bpm2sec-help.pd | 4 +- ceammc/ext/doc/conv.car2pol-help.pd | 8 +- ceammc/ext/doc/conv.car2pol.pddoc | 4 +- ceammc/ext/doc/conv.cc2amp-help.pd | 4 +- ceammc/ext/doc/conv.dbfs2amp-help.pd | 4 +- ceammc/ext/doc/conv.dbfs2amp~-help.pd | 4 +- ceammc/ext/doc/conv.degree2key-help.pd | 79 +- ceammc/ext/doc/conv.degree2key.pddoc | 9 +- ceammc/ext/doc/conv.edge2bang-help.pd | 4 +- ceammc/ext/doc/conv.hex2int-help.pd | 4 +- ceammc/ext/doc/conv.hex2int.pddoc | 2 +- ceammc/ext/doc/conv.int2bits-help.pd | 51 +- ceammc/ext/doc/conv.int2bits.pddoc | 6 +- ceammc/ext/doc/conv.lin2curve-help.pd | 40 +- ceammc/ext/doc/conv.lin2curve.pddoc | 9 +- ceammc/ext/doc/conv.lin2exp-help.pd | 42 +- ceammc/ext/doc/conv.lin2exp.pddoc | 9 +- ceammc/ext/doc/conv.lin2lin-help.pd | 20 +- ceammc/ext/doc/conv.lin2lin.pddoc | 8 +- ceammc/ext/doc/conv.lin2lin~-help.pd | 20 +- ceammc/ext/doc/conv.lin2lin~.pddoc | 8 +- ceammc/ext/doc/conv.list2props-help.pd | 4 +- ceammc/ext/doc/conv.midi2freq-help.pd | 8 +- ceammc/ext/doc/conv.midi2freq.pddoc | 6 +- ceammc/ext/doc/conv.ms2bpm-help.pd | 4 +- ceammc/ext/doc/conv.ms2samp-help.pd | 4 +- ceammc/ext/doc/conv.ms2samp~-help.pd | 4 +- ceammc/ext/doc/conv.note2guido-help.pd | 80 + ceammc/ext/doc/conv.note2guido.inscore.pd | 12 + ceammc/ext/doc/conv.note2guido.pddoc | 77 + ceammc/ext/doc/conv.phase2rad-help.pd | 4 +- ceammc/ext/doc/conv.phase2rad~-help.pd | 4 +- ceammc/ext/doc/conv.pitch2midi-help.pd | 4 +- ceammc/ext/doc/conv.pol2car-help.pd | 4 +- ceammc/ext/doc/conv.rad2phase-help.pd | 4 +- ceammc/ext/doc/conv.rad2phase~-help.pd | 4 +- ceammc/ext/doc/conv.samp2ms-help.pd | 4 +- ceammc/ext/doc/conv.samp2ms~-help.pd | 4 +- ceammc/ext/doc/conv.samp2sec-help.pd | 4 +- ceammc/ext/doc/conv.sec2bpm-help.pd | 4 +- ceammc/ext/doc/conv.sec2samp-help.pd | 4 +- ceammc/ext/doc/conv.sec2str-help.pd | 4 +- ceammc/ext/doc/conv.sec2str.pddoc | 7 +- ceammc/ext/doc/conv.sig2float~-help.pd | 36 +- ceammc/ext/doc/conv.sig2float~.pddoc | 12 +- ceammc/ext/doc/conv.str2sec-help.pd | 4 +- ceammc/ext/doc/data.copy-help.pd | 4 +- ceammc/ext/doc/data.dict-help.pd | 137 +- ceammc/ext/doc/data.dict.pddoc | 13 +- ceammc/ext/doc/data.fifo-help.pd | 12 +- ceammc/ext/doc/data.fifo.pddoc | 8 +- ceammc/ext/doc/data.float-help.pd | 8 +- ceammc/ext/doc/data.float.pddoc | 4 +- ceammc/ext/doc/data.int-help.pd | 8 +- ceammc/ext/doc/data.int.pddoc | 5 +- ceammc/ext/doc/data.list-help.pd | 143 +- ceammc/ext/doc/data.list.pddoc | 15 +- ceammc/ext/doc/data.mlist-help.pd | 166 +- ceammc/ext/doc/data.mlist.pddoc | 14 +- ceammc/ext/doc/data.set-help.pd | 92 +- ceammc/ext/doc/data.set.pddoc | 8 +- ceammc/ext/doc/data.set2list-help.pd | 48 +- ceammc/ext/doc/data.set2list.pddoc | 8 +- ceammc/ext/doc/dict.contains-help.pd | 8 +- ceammc/ext/doc/dict.contains.pddoc | 4 +- ceammc/ext/doc/dict.each-help.pd | 4 +- ceammc/ext/doc/dict.from_list-help.pd | 4 +- ceammc/ext/doc/dict.get-help.pd | 49 +- ceammc/ext/doc/dict.get.pddoc | 7 +- ceammc/ext/doc/dict.keys-help.pd | 4 +- ceammc/ext/doc/dict.pass-help.pd | 4 +- ceammc/ext/doc/dict.pass.pddoc | 2 +- ceammc/ext/doc/dict.reject-help.pd | 4 +- ceammc/ext/doc/dict.reject.pddoc | 2 +- ceammc/ext/doc/dict.size-help.pd | 4 +- ceammc/ext/doc/dict.to_list-help.pd | 4 +- ceammc/ext/doc/dict.values-help.pd | 4 +- ceammc/ext/doc/docs.cmake | 171 +- ceammc/ext/doc/dyn.comp2~-help.pd | 127 +- ceammc/ext/doc/dyn.comp2~.pddoc | 36 +- ceammc/ext/doc/dyn.comp~-help.pd | 118 +- ceammc/ext/doc/dyn.comp~.pddoc | 28 +- ceammc/ext/doc/dyn.gate2~-help.pd | 84 +- ceammc/ext/doc/dyn.gate2~.pddoc | 12 +- ceammc/ext/doc/dyn.gate~-help.pd | 76 +- ceammc/ext/doc/dyn.gate~.pddoc | 12 +- ceammc/ext/doc/dyn.limit2~-help.pd | 44 +- ceammc/ext/doc/dyn.limit2~.pddoc | 3 +- ceammc/ext/doc/dyn.limit~-help.pd | 36 +- ceammc/ext/doc/dyn.limit~.pddoc | 3 +- ceammc/ext/doc/dyn.softclip~-help.pd | 30 +- ceammc/ext/doc/dyn.softclip~.pddoc | 3 +- ceammc/ext/doc/env.adsr~-help.pd | 95 +- ceammc/ext/doc/env.adsr~.pddoc | 21 +- ceammc/ext/doc/env.ar~-help.pd | 90 +- ceammc/ext/doc/env.ar~.pddoc | 16 +- ceammc/ext/doc/env.asr~-help.pd | 148 +- ceammc/ext/doc/env.asr~.pddoc | 23 +- ceammc/ext/doc/env.concat-help.pd | 4 +- ceammc/ext/doc/env.follow~-help.pd | 52 +- ceammc/ext/doc/env.follow~.pddoc | 19 +- ceammc/ext/doc/env.mix-help.pd | 4 +- ceammc/ext/doc/env.smooth~-help.pd | 66 +- ceammc/ext/doc/env.smooth~.pddoc | 17 +- ceammc/ext/doc/env.smooth~.plot.pd | 18 +- ceammc/ext/doc/env.tscale-help.pd | 6 +- ceammc/ext/doc/env.tscale.pddoc | 2 +- ceammc/ext/doc/env.tshift-help.pd | 4 +- ceammc/ext/doc/env.vscale-help.pd | 4 +- ceammc/ext/doc/env2array-help.pd | 8 +- ceammc/ext/doc/env2array.pddoc | 5 +- ceammc/ext/doc/env2vline-help.pd | 8 +- ceammc/ext/doc/env2vline.pddoc | 4 +- ceammc/ext/doc/envelope-help.pd | 4 +- ceammc/ext/doc/envelope.pddoc | 14 +- ceammc/ext/doc/expand_env-help.pd | 4 +- ceammc/ext/doc/expand_env.pddoc | 4 +- ceammc/ext/doc/faust/blow.dsp | 10 + ceammc/ext/doc/faust/ex2.dsp | 6 + ceammc/ext/doc/faust/ks.dsp | 23 + ceammc/ext/doc/faust/xfm.dsp | 21 + ceammc/ext/doc/file.size-help.pd | 39 +- ceammc/ext/doc/file.size.pddoc | 2 +- ceammc/ext/doc/flow.append-help.pd | 6 +- ceammc/ext/doc/flow.append.pddoc | 2 +- ceammc/ext/doc/flow.change-help.pd | 4 +- ceammc/ext/doc/flow.change.pddoc | 3 +- ceammc/ext/doc/flow.count-help.pd | 31 +- ceammc/ext/doc/flow.count.pddoc | 11 +- ceammc/ext/doc/flow.delay-help.pd | 10 +- ceammc/ext/doc/flow.delay.pddoc | 8 +- ceammc/ext/doc/flow.demultiplex-help.pd | 4 +- ceammc/ext/doc/flow.demultiplex2~-help.pd | 4 +- ceammc/ext/doc/flow.demultiplex~-help.pd | 4 +- ceammc/ext/doc/flow.dollar-help.pd | 4 +- ceammc/ext/doc/flow.dup-help.pd | 4 +- ceammc/ext/doc/flow.float-help.pd | 4 +- ceammc/ext/doc/flow.gate-help.pd | 14 +- ceammc/ext/doc/flow.gate.pddoc | 12 +- ceammc/ext/doc/flow.greater-help.pd | 12 +- ceammc/ext/doc/flow.greater.pddoc | 6 +- ceammc/ext/doc/flow.greater_eq-help.pd | 12 +- ceammc/ext/doc/flow.greater_eq.pddoc | 6 +- ceammc/ext/doc/flow.group-help.pd | 4 +- ceammc/ext/doc/flow.group.pddoc | 2 +- ceammc/ext/doc/flow.interval-help.pd | 4 +- ceammc/ext/doc/flow.less-help.pd | 14 +- ceammc/ext/doc/flow.less.pddoc | 6 +- ceammc/ext/doc/flow.less_eq-help.pd | 14 +- ceammc/ext/doc/flow.less_eq.pddoc | 6 +- ceammc/ext/doc/flow.list2many-help.pd | 4 +- ceammc/ext/doc/flow.match-help.pd | 15 +- ceammc/ext/doc/flow.match.pddoc | 8 +- ceammc/ext/doc/flow.mem-help.pd | 77 +- ceammc/ext/doc/flow.mem.pddoc | 9 +- ceammc/ext/doc/flow.multiplex-help.pd | 4 +- ceammc/ext/doc/flow.multiplex2~-help.pd | 4 +- ceammc/ext/doc/flow.multiplex~-help.pd | 4 +- ceammc/ext/doc/flow.once-help.pd | 4 +- ceammc/ext/doc/flow.pack-help.pd | 16 +- ceammc/ext/doc/flow.pack.pddoc | 11 +- ceammc/ext/doc/flow.pass-help.pd | 69 +- ceammc/ext/doc/flow.pass.pddoc | 5 +- ceammc/ext/doc/flow.pass_if-help.pd | 4 +- ceammc/ext/doc/flow.pipe-help.pd | 10 +- ceammc/ext/doc/flow.pipe.pddoc | 8 +- ceammc/ext/doc/flow.queue-help.pd | 65 +- ceammc/ext/doc/flow.queue.pddoc | 7 +- ceammc/ext/doc/flow.record-help.pd | 10 +- ceammc/ext/doc/flow.record.pddoc | 10 +- ceammc/ext/doc/flow.reject-help.pd | 10 +- ceammc/ext/doc/flow.reject.pddoc | 6 +- ceammc/ext/doc/flow.reject_if-help.pd | 4 +- ceammc/ext/doc/flow.ring-help.pd | 12 +- ceammc/ext/doc/flow.ring.pddoc | 6 +- ceammc/ext/doc/flow.route-help.pd | 4 +- ceammc/ext/doc/flow.select-help.pd | 9 +- ceammc/ext/doc/flow.select.pddoc | 8 +- ceammc/ext/doc/flow.seqdelay-help.pd | 127 + ceammc/ext/doc/flow.seqdelay.pddoc | 89 + ceammc/ext/doc/flow.space-help.pd | 120 +- ceammc/ext/doc/flow.space.done.pd | 2 +- ceammc/ext/doc/flow.space.pddoc | 13 +- ceammc/ext/doc/flow.speedlim-help.pd | 8 +- ceammc/ext/doc/flow.speedlim.pddoc | 3 +- ceammc/ext/doc/flow.split-help.pd | 4 +- ceammc/ext/doc/flow.stack-help.pd | 12 +- ceammc/ext/doc/flow.stack.pddoc | 18 +- ceammc/ext/doc/flow.sync-help.pd | 4 +- ceammc/ext/doc/flow.sync_pack-help.pd | 16 +- ceammc/ext/doc/flow.sync_pack.pddoc | 11 +- ceammc/ext/doc/flow.tee~-help.pd | 4 +- ceammc/ext/doc/flt.a-weight-help.pd | 72 + ceammc/ext/doc/flt.a-weight.pddoc | 44 + ceammc/ext/doc/flt.biquad~-help.pd | 64 +- ceammc/ext/doc/flt.biquad~.pddoc | 3 +- ceammc/ext/doc/flt.bpf12~-help.pd | 58 +- ceammc/ext/doc/flt.bpf12~.pddoc | 9 +- ceammc/ext/doc/flt.bpf24~-help.pd | 64 +- ceammc/ext/doc/flt.bpf24~.pddoc | 11 +- ceammc/ext/doc/flt.c_apf-help.pd | 8 +- ceammc/ext/doc/flt.c_apf.pddoc | 8 +- ceammc/ext/doc/flt.c_bpf~-help.pd | 66 +- ceammc/ext/doc/flt.c_bpf~.pddoc | 9 +- ceammc/ext/doc/flt.c_highshelf~-help.pd | 64 +- ceammc/ext/doc/flt.c_highshelf~.pddoc | 10 +- ceammc/ext/doc/flt.c_hpf-help.pd | 8 +- ceammc/ext/doc/flt.c_hpf.pddoc | 8 +- ceammc/ext/doc/flt.c_hpf~-help.pd | 64 +- ceammc/ext/doc/flt.c_hpf~.pddoc | 9 +- ceammc/ext/doc/flt.c_lowshelf~-help.pd | 64 +- ceammc/ext/doc/flt.c_lowshelf~.pddoc | 10 +- ceammc/ext/doc/flt.c_lpf-help.pd | 8 +- ceammc/ext/doc/flt.c_lpf.pddoc | 8 +- ceammc/ext/doc/flt.c_lpf~-help.pd | 64 +- ceammc/ext/doc/flt.c_lpf~.pddoc | 9 +- ceammc/ext/doc/flt.c_notch-help.pd | 8 +- ceammc/ext/doc/flt.c_notch.pddoc | 8 +- ceammc/ext/doc/flt.c_notch~-help.pd | 66 +- ceammc/ext/doc/flt.c_notch~.pddoc | 9 +- ceammc/ext/doc/flt.c_peak~-help.pd | 70 +- ceammc/ext/doc/flt.c_peak~.pddoc | 11 +- ceammc/ext/doc/flt.c_pole-help.pd | 6 +- ceammc/ext/doc/flt.c_pole.pddoc | 6 +- ceammc/ext/doc/flt.dcblock2~-help.pd | 42 +- ceammc/ext/doc/flt.dcblock2~.pddoc | 3 +- ceammc/ext/doc/flt.dcblock~-help.pd | 34 +- ceammc/ext/doc/flt.dcblock~.pddoc | 3 +- ceammc/ext/doc/flt.eq10~-help.pd | 86 +- ceammc/ext/doc/flt.eq10~.pddoc | 3 +- ceammc/ext/doc/flt.eq_peak_cq~-help.pd | 52 +- ceammc/ext/doc/flt.eq_peak_cq~.pddoc | 13 +- ceammc/ext/doc/flt.eq_peak~-help.pd | 58 +- ceammc/ext/doc/flt.eq_peak~.pddoc | 13 +- ceammc/ext/doc/flt.fb_comb~-help.pd | 50 +- ceammc/ext/doc/flt.fb_comb~.pddoc | 5 +- ceammc/ext/doc/flt.fbank5x1~-help.pd | 88 +- ceammc/ext/doc/flt.fbank5x1~.pddoc | 13 +- ceammc/ext/doc/flt.ff_comb~-help.pd | 52 +- ceammc/ext/doc/flt.ff_comb~.pddoc | 5 +- ceammc/ext/doc/flt.freqz-help.pd | 8 +- ceammc/ext/doc/flt.freqz.pddoc | 7 +- ceammc/ext/doc/flt.freqz~-help.pd | 12 +- ceammc/ext/doc/flt.freqz~.pddoc | 9 +- ceammc/ext/doc/flt.highshelf~-help.pd | 48 +- ceammc/ext/doc/flt.highshelf~.pddoc | 11 +- ceammc/ext/doc/flt.hpf12~-help.pd | 47 +- ceammc/ext/doc/flt.hpf12~.pddoc | 10 +- ceammc/ext/doc/flt.hpf24~-help.pd | 47 +- ceammc/ext/doc/flt.hpf24~.pddoc | 10 +- ceammc/ext/doc/flt.lowshelf~-help.pd | 48 +- ceammc/ext/doc/flt.lowshelf~.pddoc | 9 +- ceammc/ext/doc/flt.lpf12~-help.pd | 47 +- ceammc/ext/doc/flt.lpf12~.pddoc | 10 +- ceammc/ext/doc/flt.lpf24~-help.pd | 47 +- ceammc/ext/doc/flt.lpf24~.pddoc | 10 +- ceammc/ext/doc/flt.median-help.pd | 4 +- ceammc/ext/doc/flt.moog_vcf~-help.pd | 50 +- ceammc/ext/doc/flt.moog_vcf~.pddoc | 5 +- ceammc/ext/doc/flt.notch~-help.pd | 53 +- ceammc/ext/doc/flt.notch~.pddoc | 13 +- ceammc/ext/doc/flt.resonbp~-help.pd | 53 +- ceammc/ext/doc/flt.resonbp~.pddoc | 16 +- ceammc/ext/doc/flt.resonhp~-help.pd | 108 + ceammc/ext/doc/flt.resonhp~.pddoc | 77 + ceammc/ext/doc/flt.resonlp~-help.pd | 99 + ceammc/ext/doc/flt.resonlp~.pddoc | 70 + ceammc/ext/doc/fluid~-help.pd | 403 +- ceammc/ext/doc/fluid~.pddoc | 22 +- ceammc/ext/doc/function-help.pd | 4 +- ceammc/ext/doc/function.call-help.pd | 4 +- ceammc/ext/doc/fx.bitdown~-help.pd | 50 +- ceammc/ext/doc/fx.bitdown~.pddoc | 11 +- ceammc/ext/doc/fx.chorus~-help.pd | 60 +- ceammc/ext/doc/fx.chorus~.pddoc | 9 +- ceammc/ext/doc/fx.dattorro~-help.pd | 145 + ceammc/ext/doc/fx.dattorro~.pddoc | 94 + ceammc/ext/doc/fx.distortion1~-help.pd | 135 +- ceammc/ext/doc/fx.distortion1~.pddoc | 26 +- ceammc/ext/doc/fx.distortion2~-help.pd | 93 +- ceammc/ext/doc/fx.distortion2~.pddoc | 20 +- ceammc/ext/doc/fx.distortion3~-help.pd | 64 +- ceammc/ext/doc/fx.distortion3~.pddoc | 11 +- ceammc/ext/doc/fx.distortion~-help.pd | 54 +- ceammc/ext/doc/fx.distortion~.pddoc | 11 +- ceammc/ext/doc/fx.drive~-help.pd | 40 +- ceammc/ext/doc/fx.drive~.pddoc | 7 +- ceammc/ext/doc/fx.drone_box~-help.pd | 50 +- ceammc/ext/doc/fx.drone_box~.pddoc | 9 +- ceammc/ext/doc/fx.echo2~-help.pd | 80 +- ceammc/ext/doc/fx.echo2~.pddoc | 11 +- ceammc/ext/doc/fx.echo~-help.pd | 68 +- ceammc/ext/doc/fx.echo~.pddoc | 11 +- ceammc/ext/doc/fx.flanger~-help.pd | 62 +- ceammc/ext/doc/fx.flanger~.pddoc | 13 +- ceammc/ext/doc/fx.freeverb2~-help.pd | 86 +- ceammc/ext/doc/fx.freeverb2~.pddoc | 10 +- ceammc/ext/doc/fx.freeverb~-help.pd | 78 +- ceammc/ext/doc/fx.freeverb~.pddoc | 10 +- ceammc/ext/doc/fx.freqshift~-help.pd | 38 +- ceammc/ext/doc/fx.freqshift~.pddoc | 3 +- ceammc/ext/doc/fx.granulator~-help.pd | 54 +- ceammc/ext/doc/fx.granulator~.pddoc | 3 +- ceammc/ext/doc/fx.greyhole~-help.pd | 88 +- ceammc/ext/doc/fx.greyhole~.pddoc | 7 +- ceammc/ext/doc/fx.infrev~-help.pd | 6 +- ceammc/ext/doc/fx.infrev~.pddoc | 4 +- ceammc/ext/doc/fx.jcrev~-help.pd | 120 + ceammc/ext/doc/fx.jcrev~.pddoc | 73 + ceammc/ext/doc/fx.looper~-help.pd | 12 +- ceammc/ext/doc/fx.looper~.pddoc | 13 +- ceammc/ext/doc/fx.pitchshift_s~-help.pd | 60 +- ceammc/ext/doc/fx.pitchshift_s~.pddoc | 7 +- ceammc/ext/doc/fx.pitchshift~-help.pd | 66 +- ceammc/ext/doc/fx.pitchshift~.pddoc | 7 +- ceammc/ext/doc/fx.rb_pitchshift~-help.pd | 53 +- ceammc/ext/doc/fx.rb_pitchshift~.pddoc | 36 +- ceammc/ext/doc/fx.recho~-help.pd | 66 +- ceammc/ext/doc/fx.recho~.pddoc | 11 +- ceammc/ext/doc/fx.room~-help.pd | 116 +- ceammc/ext/doc/fx.room~.pddoc | 38 +- ceammc/ext/doc/fx.satrev~-help.pd | 108 + ceammc/ext/doc/fx.satrev~.pddoc | 66 + ceammc/ext/doc/fx.sdelay~-help.pd | 72 +- ceammc/ext/doc/fx.sdelay~.pddoc | 11 +- ceammc/ext/doc/fx.secho~-help.pd | 70 +- ceammc/ext/doc/fx.secho~.pddoc | 11 +- ceammc/ext/doc/fx.shimmer~-help.pd | 121 +- ceammc/ext/doc/fx.shimmer~.pddoc | 21 +- ceammc/ext/doc/fx.stutter~-help.pd | 99 + ceammc/ext/doc/fx.stutter~.pddoc | 64 + ceammc/ext/doc/fx.tapiir~-help.pd | 482 +- ceammc/ext/doc/fx.tapiir~.pddoc | 31 +- ceammc/ext/doc/fx.vocoder~-help.pd | 46 +- ceammc/ext/doc/fx.vocoder~.pddoc | 3 +- ceammc/ext/doc/fx.wahwah~-help.pd | 64 +- ceammc/ext/doc/fx.wahwah~.pddoc | 12 +- ceammc/ext/doc/fx.zita_rev1~-help.pd | 123 +- ceammc/ext/doc/fx.zita_rev1~.pddoc | 28 +- ceammc/ext/doc/gain~-help.pd | 4 +- ceammc/ext/doc/global.dict-help.pd | 147 +- ceammc/ext/doc/global.dict.pddoc | 13 +- ceammc/ext/doc/global.float-help.pd | 4 +- ceammc/ext/doc/global.float.pddoc | 2 +- ceammc/ext/doc/global.int-help.pd | 4 +- ceammc/ext/doc/global.int.pddoc | 3 +- ceammc/ext/doc/global.list-help.pd | 163 +- ceammc/ext/doc/global.list.pddoc | 13 +- ceammc/ext/doc/global.mlist-help.pd | 174 +- ceammc/ext/doc/global.mlist.pddoc | 14 +- ceammc/ext/doc/global.set-help.pd | 120 +- ceammc/ext/doc/global.set.abs.pd | 6 + ceammc/ext/doc/global.set.pddoc | 23 +- ceammc/ext/doc/hoa.2d.decoder~-help.pd | 30 +- ceammc/ext/doc/hoa.2d.decoder~.pddoc | 30 +- ceammc/ext/doc/hoa.2d.encoder~-help.pd | 8 +- ceammc/ext/doc/hoa.2d.encoder~.pddoc | 2 +- ceammc/ext/doc/hoa.2d.map~-help.pd | 99 +- ceammc/ext/doc/hoa.2d.map~.pddoc | 7 +- ceammc/ext/doc/hoa.2d.optim~-help.pd | 12 +- ceammc/ext/doc/hoa.2d.optim~.pddoc | 5 +- ceammc/ext/doc/hoa.2d.projector~-help.pd | 12 +- ceammc/ext/doc/hoa.2d.projector~.pddoc | 6 +- ceammc/ext/doc/hoa.2d.recomposer~-help.pd | 14 +- ceammc/ext/doc/hoa.2d.recomposer~.pddoc | 19 +- ceammc/ext/doc/hoa.2d.rotate~-help.pd | 8 +- ceammc/ext/doc/hoa.2d.rotate~.pddoc | 2 +- ceammc/ext/doc/hoa.2d.wider~-help.pd | 8 +- ceammc/ext/doc/hoa.2d.wider~.pddoc | 2 +- ceammc/ext/doc/hoa.@process-help.pd | 4 +- ceammc/ext/doc/hoa.@process.pddoc | 16 +- ceammc/ext/doc/hoa.in-help.pd | 4 +- ceammc/ext/doc/hoa.in~-help.pd | 6 +- ceammc/ext/doc/hoa.in~.pddoc | 2 +- ceammc/ext/doc/hoa.out-help.pd | 4 +- ceammc/ext/doc/hoa.out~-help.pd | 8 +- ceammc/ext/doc/hoa.out~.pddoc | 10 +- ceammc/ext/doc/hoa.process~-help.pd | 102 +- ceammc/ext/doc/hoa.process~.pddoc | 16 +- ceammc/ext/doc/hoa.scope~-help.pd | 139 +- ceammc/ext/doc/hoa.scope~.pddoc | 19 +- ceammc/ext/doc/hw.apple_smc-help.pd | 4 +- ceammc/ext/doc/hw.apple_smc.pddoc | 2 +- ceammc/ext/doc/hw.apple_sms-help.pd | 32 +- ceammc/ext/doc/hw.apple_sms.pddoc | 2 +- ceammc/ext/doc/hw.arduino-help.pd | 94 +- ceammc/ext/doc/hw.arduino.pddoc | 30 +- ceammc/ext/doc/hw.cpu_temp-help.pd | 4 +- ceammc/ext/doc/hw.display-help.pd | 4 +- ceammc/ext/doc/hw.kbd_light-help.pd | 4 +- ceammc/ext/doc/hw.motu.avb-help.pd | 287 + ceammc/ext/doc/hw.motu.avb.pddoc | 179 + ceammc/ext/doc/hw.serial-help.pd | 52 +- ceammc/ext/doc/hw.serial.pddoc | 12 +- ceammc/ext/doc/is_any-help.pd | 4 +- ceammc/ext/doc/is_bang-help.pd | 4 +- ceammc/ext/doc/is_data-help.pd | 6 +- ceammc/ext/doc/is_data.pddoc | 4 +- ceammc/ext/doc/is_dict-help.pd | 4 +- ceammc/ext/doc/is_even-help.pd | 4 +- ceammc/ext/doc/is_file-help.pd | 6 +- ceammc/ext/doc/is_file.pddoc | 1 + ceammc/ext/doc/is_float-help.pd | 4 +- ceammc/ext/doc/is_list-help.pd | 4 +- ceammc/ext/doc/is_odd-help.pd | 4 +- ceammc/ext/doc/is_pointer-help.pd | 4 +- ceammc/ext/doc/is_prop-help.pd | 78 + ceammc/ext/doc/is_prop.pddoc | 56 + ceammc/ext/doc/is_symbol-help.pd | 4 +- ceammc/ext/doc/lang.faust~-help.pd | 129 +- ceammc/ext/doc/lang.faust~.pddoc | 15 +- ceammc/ext/doc/lang.lua-help.pd | 122 + ceammc/ext/doc/lang.lua.pddoc | 74 + ceammc/ext/doc/lfo.+pulse~-help.pd | 70 +- ceammc/ext/doc/lfo.+pulse~.pddoc | 9 +- ceammc/ext/doc/lfo.+saw~-help.pd | 74 +- ceammc/ext/doc/lfo.+saw~.pddoc | 11 +- ceammc/ext/doc/lfo.+square~-help.pd | 64 +- ceammc/ext/doc/lfo.+square~.pddoc | 7 +- ceammc/ext/doc/lfo.+tri~-help.pd | 64 +- ceammc/ext/doc/lfo.+tri~.pddoc | 7 +- ceammc/ext/doc/lfo.impulse~-help.pd | 33 +- ceammc/ext/doc/lfo.impulse~.pddoc | 8 +- ceammc/ext/doc/lfo.mosc~-help.pd | 90 +- ceammc/ext/doc/lfo.mosc~.pddoc | 9 +- ceammc/ext/doc/lfo.pulse~-help.pd | 75 +- ceammc/ext/doc/lfo.pulse~.pddoc | 11 +- ceammc/ext/doc/lfo.saw~-help.pd | 74 +- ceammc/ext/doc/lfo.saw~.pddoc | 12 +- ceammc/ext/doc/lfo.square~-help.pd | 64 +- ceammc/ext/doc/lfo.square~.pddoc | 7 +- ceammc/ext/doc/lfo.tri~-help.pd | 64 +- ceammc/ext/doc/lfo.tri~.pddoc | 7 +- ceammc/ext/doc/list.^at-help.pd | 10 +- ceammc/ext/doc/list.^at.pddoc | 6 +- ceammc/ext/doc/list.^contains-help.pd | 8 +- ceammc/ext/doc/list.^contains.pddoc | 4 +- ceammc/ext/doc/list.^search-help.pd | 8 +- ceammc/ext/doc/list.^search.pddoc | 4 +- ceammc/ext/doc/list.all_of-help.pd | 4 +- ceammc/ext/doc/list.any_of-help.pd | 4 +- ceammc/ext/doc/list.append-help.pd | 8 +- ceammc/ext/doc/list.append.pddoc | 4 +- ceammc/ext/doc/list.apply_to-help.pd | 70 +- ceammc/ext/doc/list.apply_to.pddoc | 8 +- ceammc/ext/doc/list.at-help.pd | 70 +- ceammc/ext/doc/list.at.pddoc | 6 +- ceammc/ext/doc/list.choice-help.pd | 39 +- ceammc/ext/doc/list.choice.pddoc | 6 +- ceammc/ext/doc/list.contains-help.pd | 4 +- ceammc/ext/doc/list.contains.pddoc | 16 +- ceammc/ext/doc/list.convolve-help.pd | 4 +- ceammc/ext/doc/list.convolve.pddoc | 4 +- ceammc/ext/doc/list.correlate-help.pd | 4 +- ceammc/ext/doc/list.correlate.pddoc | 4 +- ceammc/ext/doc/list.count-help.pd | 10 +- ceammc/ext/doc/list.count.pddoc | 2 +- ceammc/ext/doc/list.count_if-help.pd | 67 +- ceammc/ext/doc/list.count_if.pddoc | 7 +- ceammc/ext/doc/list.delta-help.pd | 4 +- ceammc/ext/doc/list.distribution-help.pd | 36 +- ceammc/ext/doc/list.distribution.pddoc | 3 +- ceammc/ext/doc/list.do-help.pd | 4 +- ceammc/ext/doc/list.each-help.pd | 8 +- ceammc/ext/doc/list.each.pddoc | 2 +- ceammc/ext/doc/list.enumerate-help.pd | 49 +- ceammc/ext/doc/list.enumerate.pddoc | 9 +- ceammc/ext/doc/list.equal-help.pd | 8 +- ceammc/ext/doc/list.equal.pddoc | 4 +- ceammc/ext/doc/list.first-help.pd | 4 +- ceammc/ext/doc/list.gen-help.pd | 9 +- ceammc/ext/doc/list.gen.pddoc | 2 +- ceammc/ext/doc/list.histogram-help.pd | 50 +- ceammc/ext/doc/list.histogram.pddoc | 11 +- ceammc/ext/doc/list.insert-help.pd | 10 +- ceammc/ext/doc/list.insert.pddoc | 4 +- ceammc/ext/doc/list.integrator-help.pd | 78 +- ceammc/ext/doc/list.integrator.pddoc | 4 +- ceammc/ext/doc/list.last-help.pd | 4 +- ceammc/ext/doc/list.length-help.pd | 4 +- ceammc/ext/doc/list.map-help.pd | 86 + ceammc/ext/doc/list.map.pddoc | 62 + ceammc/ext/doc/list.max-help.pd | 4 +- ceammc/ext/doc/list.mean-help.pd | 4 +- ceammc/ext/doc/list.min-help.pd | 4 +- ceammc/ext/doc/list.none_of-help.pd | 4 +- ceammc/ext/doc/list.normalize-help.pd | 63 +- ceammc/ext/doc/list.normalize.pddoc | 7 +- ceammc/ext/doc/list.pass-help.pd | 84 + ceammc/ext/doc/list.pass.pddoc | 55 + ceammc/ext/doc/list.pass_if-help.pd | 84 +- ceammc/ext/doc/list.pass_if.pddoc | 8 +- ceammc/ext/doc/list.prepend-help.pd | 70 +- ceammc/ext/doc/list.prepend.pddoc | 8 +- ceammc/ext/doc/list.product-help.pd | 4 +- ceammc/ext/doc/list.range-help.pd | 87 +- ceammc/ext/doc/list.range.pddoc | 37 +- ceammc/ext/doc/list.reduce-help.pd | 4 +- ceammc/ext/doc/list.reject-help.pd | 84 + ceammc/ext/doc/list.reject.pddoc | 56 + ceammc/ext/doc/list.remove-help.pd | 4 +- ceammc/ext/doc/list.remove.pddoc | 2 +- ceammc/ext/doc/list.remove_if-help.pd | 40 +- ceammc/ext/doc/list.remove_if.pddoc | 18 +- ceammc/ext/doc/list.repack-help.pd | 6 +- ceammc/ext/doc/list.repack.pddoc | 3 +- ceammc/ext/doc/list.repeat-help.pd | 6 +- ceammc/ext/doc/list.repeat.pddoc | 2 +- ceammc/ext/doc/list.resample-help.pd | 6 +- ceammc/ext/doc/list.resample.pddoc | 2 +- ceammc/ext/doc/list.resize-help.pd | 25 +- ceammc/ext/doc/list.resize.pddoc | 3 + ceammc/ext/doc/list.reverse-help.pd | 4 +- ceammc/ext/doc/list.rldecode-help.pd | 8 +- ceammc/ext/doc/list.rldecode.pddoc | 4 +- ceammc/ext/doc/list.rlencode-help.pd | 4 +- ceammc/ext/doc/list.rotate-help.pd | 4 +- ceammc/ext/doc/list.route-help.pd | 170 +- ceammc/ext/doc/list.route.pddoc | 29 +- ceammc/ext/doc/list.rundiff-help.pd | 4 +- ceammc/ext/doc/list.runsum-help.pd | 4 +- ceammc/ext/doc/list.search-help.pd | 4 +- ceammc/ext/doc/list.separate-help.pd | 8 +- ceammc/ext/doc/list.separate.pddoc | 4 +- ceammc/ext/doc/list.seq-help.pd | 4 +- ceammc/ext/doc/list.seq.pddoc | 4 +- ceammc/ext/doc/list.set-help.pd | 12 +- ceammc/ext/doc/list.set.pddoc | 4 +- ceammc/ext/doc/list.shift-help.pd | 8 +- ceammc/ext/doc/list.shift.pddoc | 2 +- ceammc/ext/doc/list.shuffle-help.pd | 4 +- ceammc/ext/doc/list.slice-help.pd | 112 +- ceammc/ext/doc/list.slice.pddoc | 10 +- ceammc/ext/doc/list.sort-help.pd | 28 +- ceammc/ext/doc/list.sort.pddoc | 8 +- ceammc/ext/doc/list.sort_with-help.pd | 4 +- ceammc/ext/doc/list.split-help.pd | 73 +- ceammc/ext/doc/list.split.pddoc | 10 +- ceammc/ext/doc/list.stretch-help.pd | 11 +- ceammc/ext/doc/list.stretch.pddoc | 8 +- ceammc/ext/doc/list.sum-help.pd | 4 +- ceammc/ext/doc/list.unique-help.pd | 42 +- ceammc/ext/doc/list.unique.pddoc | 8 +- ceammc/ext/doc/list.unpack-help.pd | 4 +- ceammc/ext/doc/list.unzip-help.pd | 70 +- ceammc/ext/doc/list.unzip.pddoc | 4 +- ceammc/ext/doc/list.walk-help.pd | 24 +- ceammc/ext/doc/list.walk.pddoc | 13 +- ceammc/ext/doc/list.zip-help.pd | 8 +- ceammc/ext/doc/list.zip.pddoc | 8 +- ceammc/ext/doc/live.capture~-help.pd | 61 +- ceammc/ext/doc/live.capture~.pddoc | 8 +- ceammc/ext/doc/loadexpr-help.pd | 4 +- ceammc/ext/doc/local.dict-help.pd | 147 +- ceammc/ext/doc/local.dict.pddoc | 13 +- ceammc/ext/doc/local.float-help.pd | 4 +- ceammc/ext/doc/local.float.pddoc | 2 +- ceammc/ext/doc/local.int-help.pd | 4 +- ceammc/ext/doc/local.int.pddoc | 3 +- ceammc/ext/doc/local.list-help.pd | 163 +- ceammc/ext/doc/local.list.pddoc | 13 +- ceammc/ext/doc/local.mlist-help.pd | 174 +- ceammc/ext/doc/local.mlist.pddoc | 14 +- ceammc/ext/doc/local.set-help.pd | 111 +- ceammc/ext/doc/local.set.pddoc | 10 +- ceammc/ext/doc/logger-help.pd | 8 +- ceammc/ext/doc/logger.pddoc | 4 +- ceammc/ext/doc/ls_missing_doc.py | 6 +- ceammc/ext/doc/lua/CMakeLists.txt | 10 + ceammc/ext/doc/lua/basic.lua | 29 + ceammc/ext/doc/math.abs-help.pd | 32 +- ceammc/ext/doc/math.abs.pddoc | 4 +- ceammc/ext/doc/math.abs~-help.pd | 4 +- ceammc/ext/doc/math.acos-help.pd | 32 +- ceammc/ext/doc/math.acos.pddoc | 4 +- ceammc/ext/doc/math.acosh-help.pd | 46 +- ceammc/ext/doc/math.acosh.pddoc | 4 +- ceammc/ext/doc/math.acosh~-help.pd | 4 +- ceammc/ext/doc/math.acos~-help.pd | 4 +- ceammc/ext/doc/math.and-help.pd | 70 +- ceammc/ext/doc/math.and.pddoc | 11 +- ceammc/ext/doc/math.approx-help.pd | 14 +- ceammc/ext/doc/math.approx.pddoc | 10 +- ceammc/ext/doc/math.asin-help.pd | 4 +- ceammc/ext/doc/math.asinh-help.pd | 4 +- ceammc/ext/doc/math.asinh~-help.pd | 4 +- ceammc/ext/doc/math.asin~-help.pd | 4 +- ceammc/ext/doc/math.atan-help.pd | 4 +- ceammc/ext/doc/math.atanh-help.pd | 4 +- ceammc/ext/doc/math.atanh~-help.pd | 4 +- ceammc/ext/doc/math.atan~-help.pd | 4 +- ceammc/ext/doc/math.binomial-help.pd | 4 +- ceammc/ext/doc/math.cabs~-help.pd | 4 +- ceammc/ext/doc/math.carg~-help.pd | 4 +- ceammc/ext/doc/math.cbrt-help.pd | 4 +- ceammc/ext/doc/math.cbrt~-help.pd | 4 +- ceammc/ext/doc/math.cdiv~-help.pd | 4 +- ceammc/ext/doc/math.ceil-help.pd | 4 +- ceammc/ext/doc/math.ceil~-help.pd | 4 +- ceammc/ext/doc/math.cexp~-help.pd | 4 +- ceammc/ext/doc/math.cmul~-help.pd | 4 +- ceammc/ext/doc/math.cos-help.pd | 4 +- ceammc/ext/doc/math.cosh-help.pd | 4 +- ceammc/ext/doc/math.cosh~-help.pd | 4 +- ceammc/ext/doc/math.cos~-help.pd | 4 +- ceammc/ext/doc/math.div-help.pd | 64 +- ceammc/ext/doc/math.div.pddoc | 4 +- ceammc/ext/doc/math.e-help.pd | 4 +- ceammc/ext/doc/math.erf-help.pd | 4 +- ceammc/ext/doc/math.erf~-help.pd | 4 +- ceammc/ext/doc/math.exp-help.pd | 4 +- ceammc/ext/doc/math.exp2-help.pd | 4 +- ceammc/ext/doc/math.exp2~-help.pd | 4 +- ceammc/ext/doc/math.expr-help.pd | 4 +- ceammc/ext/doc/math.exp~-help.pd | 4 +- ceammc/ext/doc/math.floor-help.pd | 32 +- ceammc/ext/doc/math.floor.pddoc | 4 +- ceammc/ext/doc/math.floor~-help.pd | 4 +- ceammc/ext/doc/math.gamma-help.pd | 4 +- ceammc/ext/doc/math.gamma~-help.pd | 4 +- ceammc/ext/doc/math.gcd-help.pd | 4 +- ceammc/ext/doc/math.inf-help.pd | 4 +- ceammc/ext/doc/math.inf~-help.pd | 4 +- ceammc/ext/doc/math.lcm-help.pd | 4 +- ceammc/ext/doc/math.lgamma-help.pd | 4 +- ceammc/ext/doc/math.lgamma~-help.pd | 4 +- ceammc/ext/doc/math.log-help.pd | 4 +- ceammc/ext/doc/math.log10-help.pd | 4 +- ceammc/ext/doc/math.log10~-help.pd | 4 +- ceammc/ext/doc/math.log2-help.pd | 4 +- ceammc/ext/doc/math.log2~-help.pd | 4 +- ceammc/ext/doc/math.log~-help.pd | 4 +- ceammc/ext/doc/math.mul-help.pd | 64 +- ceammc/ext/doc/math.mul.pddoc | 4 +- ceammc/ext/doc/math.nan-help.pd | 4 +- ceammc/ext/doc/math.nan~-help.pd | 4 +- ceammc/ext/doc/math.neg-help.pd | 32 +- ceammc/ext/doc/math.neg.pddoc | 4 +- ceammc/ext/doc/math.or-help.pd | 71 +- ceammc/ext/doc/math.or.pddoc | 13 +- ceammc/ext/doc/math.pi-help.pd | 41 +- ceammc/ext/doc/math.pi.pddoc | 4 +- ceammc/ext/doc/math.pi~-help.pd | 34 +- ceammc/ext/doc/math.pi~.pddoc | 7 +- ceammc/ext/doc/math.polyeval-help.pd | 8 +- ceammc/ext/doc/math.polyeval.pddoc | 4 +- ceammc/ext/doc/math.reciprocal-help.pd | 12 +- ceammc/ext/doc/math.reciprocal.pddoc | 8 +- ceammc/ext/doc/math.reciprocal~-help.pd | 4 +- ceammc/ext/doc/math.round-help.pd | 38 +- ceammc/ext/doc/math.round.pddoc | 8 +- ceammc/ext/doc/math.round~-help.pd | 17 +- ceammc/ext/doc/math.round~.pddoc | 5 +- ceammc/ext/doc/math.sign-help.pd | 4 +- ceammc/ext/doc/math.sin-help.pd | 4 +- ceammc/ext/doc/math.sinh-help.pd | 4 +- ceammc/ext/doc/math.sinh~-help.pd | 4 +- ceammc/ext/doc/math.sin~-help.pd | 4 +- ceammc/ext/doc/math.sqrt-help.pd | 4 +- ceammc/ext/doc/math.sqrt~-help.pd | 4 +- ceammc/ext/doc/math.squared-help.pd | 32 +- ceammc/ext/doc/math.squared.pddoc | 4 +- ceammc/ext/doc/math.squared~-help.pd | 4 +- ceammc/ext/doc/math.squared~.pddoc | 2 +- ceammc/ext/doc/math.sync_add-help.pd | 4 +- ceammc/ext/doc/math.sync_add.pddoc | 3 +- ceammc/ext/doc/math.sync_and-help.pd | 4 +- ceammc/ext/doc/math.sync_div-help.pd | 4 +- ceammc/ext/doc/math.sync_div.pddoc | 3 +- ceammc/ext/doc/math.sync_eq-help.pd | 4 +- ceammc/ext/doc/math.sync_ge-help.pd | 4 +- ceammc/ext/doc/math.sync_gt-help.pd | 4 +- ceammc/ext/doc/math.sync_le-help.pd | 4 +- ceammc/ext/doc/math.sync_lshift-help.pd | 4 +- ceammc/ext/doc/math.sync_lt-help.pd | 4 +- ceammc/ext/doc/math.sync_mod-help.pd | 4 +- ceammc/ext/doc/math.sync_mod.pddoc | 3 +- ceammc/ext/doc/math.sync_mul-help.pd | 4 +- ceammc/ext/doc/math.sync_mul.pddoc | 3 +- ceammc/ext/doc/math.sync_ne-help.pd | 4 +- ceammc/ext/doc/math.sync_or-help.pd | 4 +- ceammc/ext/doc/math.sync_rshift-help.pd | 4 +- ceammc/ext/doc/math.sync_sub-help.pd | 4 +- ceammc/ext/doc/math.sync_sub.pddoc | 3 +- ceammc/ext/doc/math.sync_xor-help.pd | 4 +- ceammc/ext/doc/math.tan-help.pd | 4 +- ceammc/ext/doc/math.tanh-help.pd | 4 +- ceammc/ext/doc/math.tanh~-help.pd | 4 +- ceammc/ext/doc/math.tan~-help.pd | 4 +- ceammc/ext/doc/math.trunc-help.pd | 4 +- ceammc/ext/doc/math.trunc.pddoc | 4 +- ceammc/ext/doc/math.trunc~-help.pd | 4 +- ceammc/ext/doc/matrix~-help.pd | 4 +- ceammc/ext/doc/matrix~.pddoc | 4 +- ceammc/ext/doc/metro.pattern-help.pd | 49 +- ceammc/ext/doc/metro.pattern.pddoc | 9 +- ceammc/ext/doc/metro.random-help.pd | 4 +- ceammc/ext/doc/metro.seq-help.pd | 8 +- ceammc/ext/doc/metro.seq.pddoc | 8 +- ceammc/ext/doc/midi.arp-help.pd | 139 + ceammc/ext/doc/midi.arp.pddoc | 86 + ceammc/ext/doc/midi.cc-help.pd | 4 +- ceammc/ext/doc/midi.clock-help.pd | 4 +- ceammc/ext/doc/midi.ctl2str-help.pd | 36 +- ceammc/ext/doc/midi.ctl2str.pddoc | 8 +- ceammc/ext/doc/midi.event2ctl-help.pd | 36 +- ceammc/ext/doc/midi.event2ctl.pddoc | 4 +- ceammc/ext/doc/midi.event2note-help.pd | 77 +- ceammc/ext/doc/midi.event2note.pddoc | 29 +- ceammc/ext/doc/midi.event2prg-help.pd | 28 +- ceammc/ext/doc/midi.event2prg.pddoc | 7 +- ceammc/ext/doc/midi.file-help.pd | 81 +- ceammc/ext/doc/midi.file.pddoc | 17 +- ceammc/ext/doc/midi.kbd-help.pd | 55 +- ceammc/ext/doc/midi.kbd.pddoc | 4 +- ceammc/ext/doc/midi.key2str-help.pd | 46 +- ceammc/ext/doc/midi.key2str.pddoc | 10 +- ceammc/ext/doc/midi.modus-help.pd | 113 + ceammc/ext/doc/midi.modus.pddoc | 62 + ceammc/ext/doc/midi.oct-help.pd | 6 +- ceammc/ext/doc/midi.oct.pddoc | 4 +- ceammc/ext/doc/midi.prg2str-help.pd | 50 +- ceammc/ext/doc/midi.prg2str.pddoc | 12 +- ceammc/ext/doc/midi.split-help.pd | 83 + ceammc/ext/doc/midi.split.pddoc | 63 + ceammc/ext/doc/midi.sustain-help.pd | 39 +- ceammc/ext/doc/midi.sustain.pddoc | 4 +- ceammc/ext/doc/midi.sysex-help.pd | 4 +- ceammc/ext/doc/midi.track-help.pd | 125 +- ceammc/ext/doc/midi.track.pddoc | 32 +- ceammc/ext/doc/midi.tuning-help.pd | 4 +- ceammc/ext/doc/midi.vramp-help.pd | 59 +- ceammc/ext/doc/midi.vramp.pddoc | 4 +- ceammc/ext/doc/midi.vrand-help.pd | 4 +- ceammc/ext/doc/midi/CMakeLists.txt | 10 + ceammc/ext/doc/midi/bach-wtk2-prelude2.mid | Bin 0 -> 6127 bytes ceammc/ext/doc/mix~-help.pd | 4 +- ceammc/ext/doc/mlist.flatten-help.pd | 4 +- ceammc/ext/doc/modplug~-help.pd | 59 +- ceammc/ext/doc/modplug~.pddoc | 6 +- ceammc/ext/doc/msg-help.pd | 4 +- ceammc/ext/doc/msg.after-help.pd | 4 +- ceammc/ext/doc/msg.onload-help.pd | 4 +- ceammc/ext/doc/msg.sched-help.pd | 18 +- ceammc/ext/doc/msg.sched.pddoc | 14 +- ceammc/ext/doc/music.dur2time-help.pd | 30 +- ceammc/ext/doc/music.dur2time.pddoc | 2 +- ceammc/ext/doc/music.voice2midi-help.pd | 4 +- ceammc/ext/doc/net.artnet.send-help.pd | 109 + ceammc/ext/doc/net.artnet.send.pddoc | 83 + ceammc/ext/doc/net.host2ip-help.pd | 74 +- ceammc/ext/doc/net.host2ip.pddoc | 18 +- ceammc/ext/doc/net.http.send-help.pd | 97 + ceammc/ext/doc/net.http.send.pddoc | 62 + ceammc/ext/doc/net.osc.receive-help.pd | 101 + ceammc/ext/doc/net.osc.receive.pddoc | 63 + ceammc/ext/doc/net.osc.send-help.pd | 205 + ceammc/ext/doc/net.osc.send.pddoc | 134 + ceammc/ext/doc/net.osc.server-help.pd | 120 + ceammc/ext/doc/net.osc.server.pddoc | 82 + ceammc/ext/doc/noise.baker-help.pd | 10 +- ceammc/ext/doc/noise.baker.pddoc | 4 +- ceammc/ext/doc/noise.clifford-help.pd | 288 +- ceammc/ext/doc/noise.clifford.pddoc | 82 +- ceammc/ext/doc/noise.collatz-help.pd | 10 +- ceammc/ext/doc/noise.collatz.pddoc | 6 +- ceammc/ext/doc/noise.colored~-help.pd | 87 + ceammc/ext/doc/noise.colored~.pddoc | 62 + ceammc/ext/doc/noise.crackle~-help.pd | 42 +- ceammc/ext/doc/noise.crackle~.pddoc | 9 +- ceammc/ext/doc/noise.duffing-help.pd | 205 +- ceammc/ext/doc/noise.duffing.pddoc | 16 +- ceammc/ext/doc/noise.ginger-help.pd | 4 +- ceammc/ext/doc/noise.henon-help.pd | 165 +- ceammc/ext/doc/noise.henon.pddoc | 16 +- ceammc/ext/doc/noise.henon_heilles-help.pd | 180 +- ceammc/ext/doc/noise.henon_heilles.pddoc | 17 +- ceammc/ext/doc/noise.henon_phase-help.pd | 172 +- ceammc/ext/doc/noise.henon_phase.pddoc | 19 +- ceammc/ext/doc/noise.henonf-help.pd | 170 +- ceammc/ext/doc/noise.henonf.pddoc | 18 +- ceammc/ext/doc/noise.ikeda-help.pd | 243 +- ceammc/ext/doc/noise.ikeda.pddoc | 39 +- ceammc/ext/doc/noise.lfreq0~-help.pd | 51 +- ceammc/ext/doc/noise.lfreq0~.pddoc | 8 +- ceammc/ext/doc/noise.lfreq~-help.pd | 51 +- ceammc/ext/doc/noise.lfreq~.pddoc | 8 +- ceammc/ext/doc/noise.lorenz-help.pd | 261 +- ceammc/ext/doc/noise.lorenz.pddoc | 24 +- ceammc/ext/doc/noise.lyapunov-help.pd | 225 +- ceammc/ext/doc/noise.lyapunov.pddoc | 38 +- ceammc/ext/doc/noise.navier_stokes-help.pd | 50 +- ceammc/ext/doc/noise.navier_stokes.pddoc | 22 +- ceammc/ext/doc/noise.pink~-help.pd | 42 +- ceammc/ext/doc/noise.pink~.pddoc | 19 +- ceammc/ext/doc/noise.rossler-help.pd | 259 +- ceammc/ext/doc/noise.rossler.pddoc | 25 +- ceammc/ext/doc/noise.stein-help.pd | 10 +- ceammc/ext/doc/noise.stein.pddoc | 4 +- ceammc/ext/doc/noise.torus-help.pd | 171 +- ceammc/ext/doc/noise.torus.pddoc | 16 +- ceammc/ext/doc/noise.verhulst-help.pd | 10 +- ceammc/ext/doc/noise.verhulst.pddoc | 4 +- ceammc/ext/doc/noise.white~-help.pd | 42 +- ceammc/ext/doc/noise.white~.pddoc | 19 +- ceammc/ext/doc/nsig~-help.pd | 18 +- ceammc/ext/doc/nsig~.pddoc | 12 +- ceammc/ext/doc/obj.props-help.pd | 4 +- ceammc/ext/doc/osc.blit~-help.pd | 53 +- ceammc/ext/doc/osc.blit~.pddoc | 4 +- ceammc/ext/doc/osc.impulse~-help.pd | 48 +- ceammc/ext/doc/osc.impulse~.pddoc | 5 +- ceammc/ext/doc/osc.pulse~-help.pd | 50 +- ceammc/ext/doc/osc.pulse~.pddoc | 7 +- ceammc/ext/doc/osc.saw4~-help.pd | 54 +- ceammc/ext/doc/osc.saw4~.pddoc | 5 +- ceammc/ext/doc/osc.saw~-help.pd | 50 +- ceammc/ext/doc/osc.saw~.pddoc | 5 +- ceammc/ext/doc/osc.sinfb~-help.pd | 46 +- ceammc/ext/doc/osc.sinfb~.pddoc | 9 +- ceammc/ext/doc/osc.sin~-help.pd | 48 +- ceammc/ext/doc/osc.sin~.pddoc | 5 +- ceammc/ext/doc/osc.square~-help.pd | 48 +- ceammc/ext/doc/osc.square~.pddoc | 5 +- ceammc/ext/doc/osc.tri~-help.pd | 46 +- ceammc/ext/doc/osc.tri~.pddoc | 5 +- ceammc/ext/doc/pan.cos~-help.pd | 44 +- ceammc/ext/doc/pan.cos~.pddoc | 2 +- ceammc/ext/doc/pan.linsig~-help.pd | 4 +- ceammc/ext/doc/pan.lin~-help.pd | 44 +- ceammc/ext/doc/pan.lin~.pddoc | 2 +- ceammc/ext/doc/pan.spread~-help.pd | 59 +- ceammc/ext/doc/pan.spread~.pddoc | 11 +- ceammc/ext/doc/pan.sqrt~-help.pd | 44 +- ceammc/ext/doc/pan.sqrt~.pddoc | 2 +- ceammc/ext/doc/patch.args-help.pd | 49 +- ceammc/ext/doc/patch.args.pddoc | 3 + ceammc/ext/doc/patch.deps-help.pd | 6 +- ceammc/ext/doc/patch.deps.pddoc | 2 +- ceammc/ext/doc/patch.props-help.pd | 4 +- ceammc/ext/doc/patch.tree-help.pd | 6 +- ceammc/ext/doc/patch.tree.pddoc | 2 +- ceammc/ext/doc/path.basename-help.pd | 4 +- ceammc/ext/doc/path.dirname-help.pd | 4 +- ceammc/ext/doc/path.exists-help.pd | 4 +- ceammc/ext/doc/path.file-help.pd | 139 + ceammc/ext/doc/path.file.pddoc | 82 + ceammc/ext/doc/path.is_dir-help.pd | 4 +- ceammc/ext/doc/path.lsdir-help.pd | 8 +- ceammc/ext/doc/path.lsdir.pddoc | 2 +- ceammc/ext/doc/path.monitor-help.pd | 71 + ceammc/ext/doc/path.monitor.pddoc | 49 + ceammc/ext/doc/path.normalize-help.pd | 4 +- ceammc/ext/doc/path.pattern-help.pd | 87 + ceammc/ext/doc/path.pattern.pddoc | 61 + ceammc/ext/doc/path.search-help.pd | 12 +- ceammc/ext/doc/path.search.pddoc | 11 +- ceammc/ext/doc/path.split-help.pd | 4 +- ceammc/ext/doc/plot.geomspace~-help.pd | 98 +- ceammc/ext/doc/plot.geomspace~.pddoc | 9 +- ceammc/ext/doc/plot.hist~-help.pd | 61 +- ceammc/ext/doc/plot.hist~.pddoc | 7 +- ceammc/ext/doc/plot.linspace~-help.pd | 96 +- ceammc/ext/doc/plot.linspace~.pddoc | 19 +- ceammc/ext/doc/plot.logspace~-help.pd | 101 +- ceammc/ext/doc/plot.logspace~.pddoc | 21 +- ceammc/ext/doc/plot.response~-help.pd | 53 +- ceammc/ext/doc/plot.response~.pddoc | 10 +- ceammc/ext/doc/preset.float-help.pd | 74 +- ceammc/ext/doc/preset.float.pddoc | 16 +- ceammc/ext/doc/preset.list-help.pd | 10 +- ceammc/ext/doc/preset.list.pddoc | 15 +- ceammc/ext/doc/preset.storage-help.pd | 4 +- ceammc/ext/doc/preset.storage.pddoc | 4 +- ceammc/ext/doc/preset.symbol-help.pd | 12 +- ceammc/ext/doc/preset.symbol.pddoc | 15 +- ceammc/ext/doc/prop-help.pd | 4 +- ceammc/ext/doc/prop.declare-help.pd | 18 +- ceammc/ext/doc/prop.declare.pddoc | 15 +- ceammc/ext/doc/prop.get-help.pd | 4 +- ceammc/ext/doc/prop.get~-help.pd | 28 +- ceammc/ext/doc/prop.get~.pddoc | 2 + ceammc/ext/doc/prop.join-help.pd | 4 +- ceammc/ext/doc/prop.random-help.pd | 4 +- ceammc/ext/doc/prop.set-help.pd | 4 +- ceammc/ext/doc/prop.split-help.pd | 30 +- ceammc/ext/doc/prop.split.pddoc | 2 + ceammc/ext/doc/proto.feelworld-help.pd | 74 + ceammc/ext/doc/proto.feelworld.pddoc | 52 + ceammc/ext/doc/proto.firmata-help.pd | 138 +- ceammc/ext/doc/proto.firmata.pddoc | 6 +- ceammc/ext/doc/proto.inscore-help.pd | 260 + ceammc/ext/doc/proto.inscore.pddoc | 157 + ceammc/ext/doc/proto.midi-help.pd | 4 +- ceammc/ext/doc/proto.midi.casio-help.pd | 94 + ceammc/ext/doc/proto.midi.casio.pddoc | 67 + ceammc/ext/doc/proto.midi.cc-help.pd | 412 +- ceammc/ext/doc/proto.midi.cc.pddoc | 7 +- ceammc/ext/doc/proto.midi.sysex-help.pd | 4 +- ceammc/ext/doc/proto.moppy-help.pd | 130 + ceammc/ext/doc/proto.moppy.pddoc | 86 + ceammc/ext/doc/proto.mpv-help.pd | 4 +- ceammc/ext/doc/proto.sp.alpaca-help.pd | 6 +- ceammc/ext/doc/proto.sp.alpaca.pddoc | 2 +- ceammc/ext/doc/proto.vlc-help.pd | 158 + ceammc/ext/doc/proto.vlc.pddoc | 91 + ceammc/ext/doc/proto.whammy-help.pd | 146 + ceammc/ext/doc/proto.whammy.pddoc | 80 + ceammc/ext/doc/proto.xtouch_ext-help.pd | 387 +- ceammc/ext/doc/proto.xtouch_ext.pddoc | 13 +- ceammc/ext/doc/radio-help.pd | 8 +- ceammc/ext/doc/radio.pddoc | 4 +- ceammc/ext/doc/random.atom-help.pd | 123 +- ceammc/ext/doc/random.atom.pddoc | 24 +- ceammc/ext/doc/random.discrete-help.pd | 9 +- ceammc/ext/doc/random.discrete.pddoc | 5 +- ceammc/ext/doc/random.float-help.pd | 4 +- ceammc/ext/doc/random.gauss-help.pd | 4 +- ceammc/ext/doc/random.int-help.pd | 4 +- ceammc/ext/doc/random.linear-help.pd | 4 +- ceammc/ext/doc/random.pw_const-help.pd | 6 +- ceammc/ext/doc/random.pw_const.pddoc | 10 +- ceammc/ext/doc/random.pw_lin-help.pd | 6 +- ceammc/ext/doc/random.pw_lin.pddoc | 10 +- ceammc/ext/doc/replace-help.pd | 9 +- ceammc/ext/doc/replace.pddoc | 4 +- ceammc/ext/doc/risset.gliss-help.pd | 110 + ceammc/ext/doc/risset.gliss.osc~.pd | 16 + ceammc/ext/doc/risset.gliss.pddoc | 77 + ceammc/ext/doc/route.any-help.pd | 84 + ceammc/ext/doc/route.any.pddoc | 56 + ceammc/ext/doc/route.bang-help.pd | 96 + ceammc/ext/doc/route.bang.pddoc | 66 + ceammc/ext/doc/route.float-help.pd | 12 +- ceammc/ext/doc/route.float.pddoc | 8 +- ceammc/ext/doc/route.list-help.pd | 83 + ceammc/ext/doc/route.list.pddoc | 58 + ceammc/ext/doc/route.prop-help.pd | 84 + ceammc/ext/doc/route.prop.pddoc | 60 + ceammc/ext/doc/route.random-help.pd | 98 + ceammc/ext/doc/route.random.chord.pd | 33 + ceammc/ext/doc/route.random.pddoc | 92 + ceammc/ext/doc/route.symbol-help.pd | 81 + ceammc/ext/doc/route.symbol.pddoc | 58 + ceammc/ext/doc/rtree.to_list-help.pd | 4 +- ceammc/ext/doc/samp.time~-help.pd | 4 +- ceammc/ext/doc/samp.time~.pddoc | 2 +- ceammc/ext/doc/seq.arp-help.pd | 158 +- ceammc/ext/doc/seq.arp.pddoc | 16 +- ceammc/ext/doc/seq.bangs-help.pd | 4 +- ceammc/ext/doc/seq.bangs.pddoc | 9 +- ceammc/ext/doc/seq.counter-help.pd | 164 +- ceammc/ext/doc/seq.counter.pddoc | 35 +- ceammc/ext/doc/seq.life-help.pd | 4 +- ceammc/ext/doc/seq.life.pddoc | 2 +- ceammc/ext/doc/seq.matrix-help.pd | 52 +- ceammc/ext/doc/seq.matrix.pddoc | 30 +- ceammc/ext/doc/seq.nbangs-help.pd | 96 +- ceammc/ext/doc/seq.nbangs.pddoc | 4 +- ceammc/ext/doc/seq.phasor-help.pd | 82 +- ceammc/ext/doc/seq.phasor.pddoc | 14 +- ceammc/ext/doc/seq.toggles-help.pd | 116 +- ceammc/ext/doc/seq.toggles.pddoc | 16 +- ceammc/ext/doc/sequencer-help.pd | 4 +- ceammc/ext/doc/sequencer.pddoc | 8 +- ceammc/ext/doc/set.contains-help.pd | 11 +- ceammc/ext/doc/set.contains.pddoc | 4 +- ceammc/ext/doc/set.diff-help.pd | 4 +- ceammc/ext/doc/set.equal-help.pd | 8 +- ceammc/ext/doc/set.equal.pddoc | 2 +- ceammc/ext/doc/set.intersect-help.pd | 4 +- ceammc/ext/doc/set.size-help.pd | 4 +- ceammc/ext/doc/set.symdiff-help.pd | 4 +- ceammc/ext/doc/set.union-help.pd | 4 +- ceammc/ext/doc/sfizz~-help.pd | 111 +- ceammc/ext/doc/sfizz~.pddoc | 27 +- ceammc/ext/doc/snd.file-help.pd | 8 +- ceammc/ext/doc/snd.file.pddoc | 19 +- ceammc/ext/doc/spat.pan4~-help.pd | 58 +- ceammc/ext/doc/spat.pan4~.pddoc | 3 +- ceammc/ext/doc/spat.pan8~-help.pd | 74 +- ceammc/ext/doc/spat.pan8~.pddoc | 3 +- ceammc/ext/doc/spat.zita6x8~-help.pd | 182 +- ceammc/ext/doc/spat.zita6x8~.pddoc | 3 +- ceammc/ext/doc/spat.zita8~-help.pd | 98 +- ceammc/ext/doc/spat.zita8~.pddoc | 13 +- ceammc/ext/doc/speech.flite-help.pd | 4 +- ceammc/ext/doc/speech.flite~-help.pd | 4 +- ceammc/ext/doc/speech.rhvoice~-help.pd | 118 + ceammc/ext/doc/speech.rhvoice~.pddoc | 94 + ceammc/ext/doc/speech.rhvoice~.voices.pd | 11 + ceammc/ext/doc/spring-help.pd | 79 +- ceammc/ext/doc/spring.pddoc | 5 +- ceammc/ext/doc/string-help.pd | 8 +- ceammc/ext/doc/string.contains-help.pd | 8 +- ceammc/ext/doc/string.contains.pddoc | 2 +- ceammc/ext/doc/string.ends_with-help.pd | 4 +- ceammc/ext/doc/string.equal-help.pd | 8 +- ceammc/ext/doc/string.equal.pddoc | 2 +- ceammc/ext/doc/string.format-help.pd | 10 +- ceammc/ext/doc/string.format.pddoc | 9 +- ceammc/ext/doc/string.join-help.pd | 90 +- ceammc/ext/doc/string.join.pddoc | 14 +- ceammc/ext/doc/string.length-help.pd | 4 +- ceammc/ext/doc/string.match-help.pd | 8 +- ceammc/ext/doc/string.match.pddoc | 2 +- ceammc/ext/doc/string.pddoc | 6 +- ceammc/ext/doc/string.remove-help.pd | 4 +- ceammc/ext/doc/string.replace-help.pd | 4 +- ceammc/ext/doc/string.split-help.pd | 29 +- ceammc/ext/doc/string.split.pddoc | 8 +- ceammc/ext/doc/string.starts_with-help.pd | 4 +- ceammc/ext/doc/string.substr-help.pd | 10 +- ceammc/ext/doc/string.substr.pddoc | 2 +- ceammc/ext/doc/string2symbol-help.pd | 4 +- ceammc/ext/doc/symbol.equal-help.pd | 4 +- ceammc/ext/doc/symbol.length-help.pd | 4 +- ceammc/ext/doc/symbol.num_compare-help.pd | 4 +- ceammc/ext/doc/symbol2any-help.pd | 4 +- ceammc/ext/doc/symbol2intlist-help.pd | 4 +- ceammc/ext/doc/sync-help.pd | 4 +- ceammc/ext/doc/synth.bee3~-help.pd | 4 +- ceammc/ext/doc/synth.bee3~.pddoc | 2 +- ceammc/ext/doc/synth.birds~-help.pd | 73 +- ceammc/ext/doc/synth.birds~.pddoc | 16 +- ceammc/ext/doc/synth.church_bell~-help.pd | 72 +- ceammc/ext/doc/synth.church_bell~.pddoc | 5 +- ceammc/ext/doc/synth.clap~-help.pd | 118 + ceammc/ext/doc/synth.clap~.pddoc | 73 + ceammc/ext/doc/synth.dubdub~-help.pd | 68 +- ceammc/ext/doc/synth.dubdub~.pddoc | 6 +- ceammc/ext/doc/synth.dx7~-help.pd | 4 +- ceammc/ext/doc/synth.dx7~.pddoc | 2 +- ceammc/ext/doc/synth.eguitar~-help.pd | 72 +- ceammc/ext/doc/synth.eguitar~.pddoc | 6 +- ceammc/ext/doc/synth.english_bell~-help.pd | 72 +- ceammc/ext/doc/synth.english_bell~.pddoc | 5 +- ceammc/ext/doc/synth.fgrain~-help.pd | 4 +- ceammc/ext/doc/synth.french_bell~-help.pd | 72 +- ceammc/ext/doc/synth.french_bell~.pddoc | 5 +- ceammc/ext/doc/synth.german_bell~-help.pd | 72 +- ceammc/ext/doc/synth.german_bell~.pddoc | 5 +- ceammc/ext/doc/synth.glass_harm~-help.pd | 112 +- ceammc/ext/doc/synth.glass_harm~.pddoc | 8 +- ceammc/ext/doc/synth.glitch~-help.pd | 6 +- ceammc/ext/doc/synth.glitch~.pddoc | 7 +- ceammc/ext/doc/synth.harpsichord~-help.pd | 96 +- ceammc/ext/doc/synth.harpsichord~.pddoc | 8 +- ceammc/ext/doc/synth.hat~-help.pd | 124 + ceammc/ext/doc/synth.hat~.pddoc | 75 + ceammc/ext/doc/synth.kick2~-help.pd | 127 + ceammc/ext/doc/synth.kick2~.pddoc | 78 + ceammc/ext/doc/synth.kick~-help.pd | 77 +- ceammc/ext/doc/synth.kick~.pddoc | 11 +- ceammc/ext/doc/synth.ks~-help.pd | 84 +- ceammc/ext/doc/synth.ks~.pddoc | 6 +- ceammc/ext/doc/synth.marimba~-help.pd | 74 +- ceammc/ext/doc/synth.marimba~.pddoc | 6 +- ceammc/ext/doc/synth.piano~-help.pd | 100 +- ceammc/ext/doc/synth.piano~.pddoc | 6 +- ceammc/ext/doc/synth.rhodey~-help.pd | 4 +- ceammc/ext/doc/synth.rhodey~.pddoc | 2 +- ceammc/ext/doc/synth.risset_arp~-help.pd | 79 +- ceammc/ext/doc/synth.risset_arp~.pddoc | 5 +- ceammc/ext/doc/synth.risset_bell~-help.pd | 64 +- ceammc/ext/doc/synth.risset_bell~.pddoc | 11 +- ceammc/ext/doc/synth.risset_tone~-help.pd | 52 +- ceammc/ext/doc/synth.risset_tone~.pddoc | 3 +- ceammc/ext/doc/synth.russian_bell~-help.pd | 72 +- ceammc/ext/doc/synth.russian_bell~.pddoc | 5 +- ceammc/ext/doc/synth.shakers~-help.pd | 4 +- ceammc/ext/doc/synth.shakers~.pddoc | 2 +- ceammc/ext/doc/synth.sitar~-help.pd | 4 +- ceammc/ext/doc/synth.sitar~.pddoc | 2 +- ceammc/ext/doc/synth.snare~-help.pd | 75 +- ceammc/ext/doc/synth.snare~.pddoc | 7 +- ceammc/ext/doc/synth.standard_bell~-help.pd | 72 +- ceammc/ext/doc/synth.standard_bell~.pddoc | 5 +- ceammc/ext/doc/synth.tube_bell~-help.pd | 6 +- ceammc/ext/doc/synth.tube_bell~.pddoc | 4 +- ceammc/ext/doc/synth.voice_fofc~-help.pd | 148 + ceammc/ext/doc/synth.voice_fofc~.pddoc | 96 + ceammc/ext/doc/synth.voice_fofs~-help.pd | 144 + ceammc/ext/doc/synth.voice_fofs~.pddoc | 92 + ceammc/ext/doc/synth.wurley~-help.pd | 4 +- ceammc/ext/doc/synth.wurley~.pddoc | 2 +- ceammc/ext/doc/system.colorpanel-help.pd | 6 +- ceammc/ext/doc/system.colorpanel.pddoc | 2 +- ceammc/ext/doc/system.cursor-help.pd | 102 +- ceammc/ext/doc/system.cursor.1.pd | 6 + ceammc/ext/doc/system.cursor.abs.pd | 32 + ceammc/ext/doc/system.cursor.osc~.pd | 21 + ceammc/ext/doc/system.cursor.pddoc | 79 +- ceammc/ext/doc/system.exec-help.pd | 70 +- ceammc/ext/doc/system.exec.pddoc | 9 +- ceammc/ext/doc/system.exit-help.pd | 60 +- ceammc/ext/doc/system.exit.pddoc | 10 +- ceammc/ext/doc/system.getenv-help.pd | 43 +- ceammc/ext/doc/system.getenv.pddoc | 5 +- ceammc/ext/doc/system.hostname-help.pd | 4 +- ceammc/ext/doc/system.memsize-help.pd | 4 +- ceammc/ext/doc/system.memused-help.pd | 4 +- ceammc/ext/doc/system.screen_size-help.pd | 4 +- ceammc/ext/doc/tl.bang-help.pd | 50 +- ceammc/ext/doc/tl.bang.pddoc | 6 +- ceammc/ext/doc/tl.cue-help.pd | 64 +- ceammc/ext/doc/tl.cue.pddoc | 15 +- ceammc/ext/doc/tl.timeline-help.pd | 127 +- ceammc/ext/doc/tl.timeline.pddoc | 20 +- ceammc/ext/doc/tl.toggle-help.pd | 4 +- ceammc/ext/doc/tl.toggle.pddoc | 2 +- ceammc/ext/doc/tl.transport-help.pd | 4 +- ceammc/ext/doc/ui.aview-help.pd | 150 +- ceammc/ext/doc/ui.aview.pddoc | 28 +- ceammc/ext/doc/ui.bang-help.pd | 91 +- ceammc/ext/doc/ui.bang.pddoc | 18 +- ceammc/ext/doc/ui.button-help.pd | 79 +- ceammc/ext/doc/ui.button.pddoc | 14 +- ceammc/ext/doc/ui.colorpanel-help.pd | 37 +- ceammc/ext/doc/ui.colorpanel.pddoc | 20 +- ceammc/ext/doc/ui.display-help.pd | 119 +- ceammc/ext/doc/ui.display.pddoc | 26 +- ceammc/ext/doc/ui.dsp~-help.pd | 69 +- ceammc/ext/doc/ui.dsp~.pddoc | 14 +- ceammc/ext/doc/ui.env-help.pd | 411 +- ceammc/ext/doc/ui.env.pddoc | 15 +- ceammc/ext/doc/ui.faust~-help.pd | 125 +- ceammc/ext/doc/ui.faust~.extra.pd | 14 + ceammc/ext/doc/ui.faust~.pddoc | 46 +- ceammc/ext/doc/ui.filter-help.pd | 139 +- ceammc/ext/doc/ui.filter.pddoc | 18 +- ceammc/ext/doc/ui.filter~-help.pd | 149 +- ceammc/ext/doc/ui.filter~.pddoc | 35 +- ceammc/ext/doc/ui.gain2~-help.pd | 53 +- ceammc/ext/doc/ui.gain2~.pddoc | 35 +- ceammc/ext/doc/ui.gain~-help.pd | 53 +- ceammc/ext/doc/ui.gain~.pddoc | 35 +- ceammc/ext/doc/ui.icon-help.pd | 130 +- ceammc/ext/doc/ui.icon.pddoc | 16 +- ceammc/ext/doc/ui.incdec-help.pd | 127 +- ceammc/ext/doc/ui.incdec.pddoc | 10 +- ceammc/ext/doc/ui.keyboard-help.pd | 87 +- ceammc/ext/doc/ui.keyboard.pddoc | 12 +- ceammc/ext/doc/ui.knob-help.pd | 271 +- ceammc/ext/doc/ui.knob.pddoc | 39 +- ceammc/ext/doc/ui.label-help.pd | 93 +- ceammc/ext/doc/ui.label.pddoc | 10 +- ceammc/ext/doc/ui.link-help.pd | 44 +- ceammc/ext/doc/ui.link.pddoc | 13 +- ceammc/ext/doc/ui.matrix-help.pd | 253 +- ceammc/ext/doc/ui.matrix.pddoc | 14 +- ceammc/ext/doc/ui.menu-help.pd | 50 +- ceammc/ext/doc/ui.menu.pddoc | 18 +- ceammc/ext/doc/ui.meter~-help.pd | 67 +- ceammc/ext/doc/ui.meter~.pddoc | 14 +- ceammc/ext/doc/ui.midi-help.pd | 126 +- ceammc/ext/doc/ui.midi.pddoc | 31 +- ceammc/ext/doc/ui.mouse_filter-help.pd | 28 +- ceammc/ext/doc/ui.mouse_filter.pddoc | 12 +- ceammc/ext/doc/ui.mouse_route-help.pd | 28 +- ceammc/ext/doc/ui.mouse_route.pddoc | 12 +- ceammc/ext/doc/ui.number-help.pd | 167 +- ceammc/ext/doc/ui.number.pddoc | 10 +- ceammc/ext/doc/ui.number~-help.pd | 97 +- ceammc/ext/doc/ui.number~.pddoc | 12 +- ceammc/ext/doc/ui.plot~-help.pd | 198 +- ceammc/ext/doc/ui.plot~.pddoc | 40 +- ceammc/ext/doc/ui.polar-help.pd | 184 +- ceammc/ext/doc/ui.polar.pddoc | 29 +- ceammc/ext/doc/ui.preset-help.pd | 152 +- ceammc/ext/doc/ui.preset.pddoc | 13 +- ceammc/ext/doc/ui.radio-help.pd | 247 +- ceammc/ext/doc/ui.radio.pddoc | 33 +- ceammc/ext/doc/ui.rslider-help.pd | 136 +- ceammc/ext/doc/ui.rslider.pddoc | 27 +- ceammc/ext/doc/ui.scope~-help.pd | 102 +- ceammc/ext/doc/ui.scope~.pddoc | 13 +- ceammc/ext/doc/ui.slider-help.pd | 190 +- ceammc/ext/doc/ui.slider.pddoc | 38 +- ceammc/ext/doc/ui.slider2d-help.pd | 291 +- ceammc/ext/doc/ui.slider2d.pddoc | 52 +- ceammc/ext/doc/ui.sliders-help.pd | 78 +- ceammc/ext/doc/ui.sliders.pddoc | 32 +- ceammc/ext/doc/ui.spectroscope~-help.pd | 93 +- ceammc/ext/doc/ui.spectroscope~.pddoc | 17 +- ceammc/ext/doc/ui.tab-help.pd | 268 +- ceammc/ext/doc/ui.tab.pddoc | 64 +- ceammc/ext/doc/ui.toggle-help.pd | 123 +- ceammc/ext/doc/ui.toggle.pddoc | 14 +- ceammc/ext/doc/vline2env-help.pd | 4 +- ceammc/ext/doc/window-help.pd | 12 +- ceammc/ext/doc/window.pddoc | 4 +- ceammc/ext/doc/xdac~-help.pd | 72 +- ceammc/ext/doc/xdac~.map.pd | 24 + ceammc/ext/doc/xdac~.pddoc | 38 + ceammc/ext/doc/xfade2~-help.pd | 88 +- ceammc/ext/doc/xfade2~.pddoc | 4 + ceammc/ext/doc/xfade~-help.pd | 70 +- ceammc/ext/doc/xfade~.pddoc | 6 +- ceammc/ext/doc/z~-help.pd | 84 + ceammc/ext/doc/z~.pddoc | 74 + ceammc/ext/extra_objects.txt | 15 +- ceammc/ext/src/CMakeLists.txt | 1 - ceammc/ext/src/an/CMakeLists.txt | 1 + ceammc/ext/src/an/an_aubio_onset.cpp | 10 - ceammc/ext/src/an/an_aubio_onset.h | 1 - ceammc/ext/src/an/an_aubio_onset_tilde.cpp | 7 +- ceammc/ext/src/an/an_aubio_onset_tilde.h | 5 +- ceammc/ext/src/an/an_pitchtrack.cpp | 2 + ceammc/ext/src/an/an_rms.cpp | 2 +- ceammc/ext/src/an/an_rms.h | 322 +- ceammc/ext/src/an/an_zero_tilde.cpp | 154 + ceammc/ext/src/an/an_zero_tilde.h | 48 + ceammc/ext/src/an/aubio_base.h | 21 +- ceammc/ext/src/an/mod_analyze.cpp | 4 +- ceammc/ext/src/array/CMakeLists.txt | 6 +- ceammc/ext/src/array/array_base.cpp | 2 +- ceammc/ext/src/array/array_base.h | 16 +- ceammc/ext/src/array/array_circular.cpp | 41 + ceammc/ext/src/array/array_circular.h | 27 + ceammc/ext/src/array/array_circular_tilde.cpp | 8 +- ceammc/ext/src/array/array_convolve.cpp | 11 +- ceammc/ext/src/array/array_convolve.h | 1 + ceammc/ext/src/array/array_copy.cpp | 56 +- ceammc/ext/src/array/array_copy.h | 4 +- ceammc/ext/src/array/array_fill.cpp | 22 +- ceammc/ext/src/array/array_fill.h | 21 +- ceammc/ext/src/array/array_grainer.cpp | 256 +- ceammc/ext/src/array/array_grainer.h | 25 +- ceammc/ext/src/array/array_hist.cpp | 15 +- ceammc/ext/src/array/array_p2s.cpp | 10 +- ceammc/ext/src/array/array_p2s.h | 2 +- ceammc/ext/src/array/array_play_tilde.cpp | 62 +- ceammc/ext/src/array/array_play_tilde.h | 2 +- ceammc/ext/src/array/array_plot.cpp | 8 +- ceammc/ext/src/array/array_plot.h | 2 +- .../src/array/array_risset_rythm_tilde.cpp | 124 + .../ext/src/array/array_risset_rythm_tilde.h | 37 + ceammc/ext/src/array/array_s2p.cpp | 7 +- ceammc/ext/src/array/array_s2p.h | 2 +- ceammc/ext/src/array/array_set.cpp | 20 +- ceammc/ext/src/array/array_set.h | 6 +- ceammc/ext/src/array/array_vline_play.h | 6 +- ceammc/ext/src/array/grain.cpp | 113 +- ceammc/ext/src/array/grain.h | 100 +- ceammc/ext/src/array/grain_cloud.cpp | 252 +- ceammc/ext/src/array/grain_cloud.h | 24 +- ceammc/ext/src/array/grain_expr.y | 3 + ceammc/ext/src/array/grain_expr_lemon.h | 736 +- ceammc/ext/src/array/grain_expr_parser.cpp | 7294 +++- ceammc/ext/src/array/grain_random.h | 2 + ceammc/ext/src/array/mod_array.cpp | 6 +- ceammc/ext/src/array/plot_geomspace_tilde.cpp | 5 +- ceammc/ext/src/array/plot_linspace_tilde.cpp | 1 - ceammc/ext/src/base/CMakeLists.txt | 3 + ceammc/ext/src/base/base_clone.cpp | 1439 + ceammc/ext/src/base/base_clone.h | 191 + ceammc/ext/src/base/base_dac.cpp | 83 + ceammc/ext/src/base/base_dac.h | 9 + ceammc/ext/src/base/base_log.cpp | 4 +- ceammc/ext/src/base/base_log.h | 2 +- ceammc/ext/src/base/base_z_tilde.cpp | 54 + ceammc/ext/src/base/base_z_tilde.h | 36 + ceammc/ext/src/base/expand_env.cpp | 19 +- ceammc/ext/src/base/expand_env.h | 4 +- ceammc/ext/src/base/function.cpp | 6 +- ceammc/ext/src/base/function.h | 4 +- ceammc/ext/src/base/function_call.cpp | 4 +- ceammc/ext/src/base/function_call.h | 2 +- ceammc/ext/src/base/gain.cpp | 99 +- ceammc/ext/src/base/gain.h | 33 +- ceammc/ext/src/base/is_any.cpp | 3 +- ceammc/ext/src/base/is_bang.cpp | 3 +- ceammc/ext/src/base/is_data.cpp | 8 +- ceammc/ext/src/base/is_data.h | 4 +- ceammc/ext/src/base/is_even.cpp | 2 +- ceammc/ext/src/base/is_float.cpp | 3 +- ceammc/ext/src/base/is_list.cpp | 3 +- ceammc/ext/src/base/is_odd.cpp | 6 +- ceammc/ext/src/base/is_pointer.cpp | 3 +- ceammc/ext/src/base/is_prop.cpp | 69 + ceammc/ext/src/base/is_symbol.cpp | 3 +- ceammc/ext/src/base/matrix.cpp | 16 +- ceammc/ext/src/base/matrix.h | 8 +- ceammc/ext/src/base/metro_pattern.cpp | 16 +- ceammc/ext/src/base/metro_pattern.h | 2 +- ceammc/ext/src/base/metro_random.h | 2 +- ceammc/ext/src/base/metro_seq.cpp | 8 +- ceammc/ext/src/base/mix.cpp | 58 +- ceammc/ext/src/base/mix.h | 14 +- ceammc/ext/src/base/mod_base.cpp | 6 + ceammc/ext/src/base/msg.cpp | 18 +- ceammc/ext/src/base/msg.h | 6 +- ceammc/ext/src/base/msg_after.cpp | 6 +- ceammc/ext/src/base/msg_after.h | 4 +- ceammc/ext/src/base/msg_sched.cpp | 13 +- ceammc/ext/src/base/msg_sched.h | 4 +- ceammc/ext/src/base/nsig_tilde.cpp | 18 +- ceammc/ext/src/base/nsig_tilde.h | 2 +- ceammc/ext/src/base/patch_props.h | 2 +- ceammc/ext/src/base/prop.cpp | 44 +- ceammc/ext/src/base/prop.h | 2 +- ceammc/ext/src/base/prop_declare.cpp | 9 +- ceammc/ext/src/base/prop_get.cpp | 2 +- ceammc/ext/src/base/prop_get_tilde.cpp | 6 +- ceammc/ext/src/base/prop_split.cpp | 8 +- ceammc/ext/src/base/replace.cpp | 23 +- ceammc/ext/src/base/replace.h | 7 +- ceammc/ext/src/base/snd_file.cpp | 25 +- ceammc/ext/src/base/snd_file.h | 4 +- ceammc/ext/src/base/test_data.cpp | 2 +- ceammc/ext/src/base/test_expect.cpp | 6 +- ceammc/ext/src/base/xfade_tilde.cpp | 87 +- ceammc/ext/src/base/xfade_tilde.h | 9 +- ceammc/ext/src/ceammc_lib_dumpjson.cpp | 53 +- ceammc/ext/src/ceammc_lib_external.cpp | 17 +- ceammc/ext/src/ceammc_lib_listprops.cpp | 4 +- ceammc/ext/src/ceammc_pd.cmake | 2 + ceammc/ext/src/conv/CMakeLists.txt | 1 + ceammc/ext/src/conv/conv_amp2dbfs.cpp | 7 +- ceammc/ext/src/conv/conv_amp2dbfs.h | 2 +- ceammc/ext/src/conv/conv_angles.cpp | 29 +- ceammc/ext/src/conv/conv_angles.h | 4 +- ceammc/ext/src/conv/conv_bits2bang.cpp | 12 +- ceammc/ext/src/conv/conv_bits2bang.h | 2 +- ceammc/ext/src/conv/conv_bits2int.cpp | 14 +- ceammc/ext/src/conv/conv_bits2int.h | 2 +- ceammc/ext/src/conv/conv_bits2note.cpp | 8 +- ceammc/ext/src/conv/conv_bits2note.h | 2 +- ceammc/ext/src/conv/conv_bits2pos.cpp | 23 +- ceammc/ext/src/conv/conv_bits2pos.h | 2 +- ceammc/ext/src/conv/conv_bpm2hz.cpp | 10 +- ceammc/ext/src/conv/conv_bpm2hz.h | 2 +- ceammc/ext/src/conv/conv_bpm2ms.cpp | 7 +- ceammc/ext/src/conv/conv_bpm2ms.h | 2 +- ceammc/ext/src/conv/conv_bpm2sec.cpp | 7 +- ceammc/ext/src/conv/conv_bpm2sec.h | 2 +- ceammc/ext/src/conv/conv_dbfs2amp.cpp | 14 +- ceammc/ext/src/conv/conv_dbfs2amp.h | 2 +- ceammc/ext/src/conv/conv_degree2key.cpp | 26 +- ceammc/ext/src/conv/conv_degree2key.h | 2 +- ceammc/ext/src/conv/conv_hex2int.cpp | 6 +- ceammc/ext/src/conv/conv_hex2int.h | 2 +- ceammc/ext/src/conv/conv_lin2curve.cpp | 26 + ceammc/ext/src/conv/conv_lin2curve.h | 1 + ceammc/ext/src/conv/conv_lin2exp.cpp | 25 + ceammc/ext/src/conv/conv_lin2exp.h | 1 + ceammc/ext/src/conv/conv_lin2lin.cpp | 10 +- ceammc/ext/src/conv/conv_lin2lin.h | 2 +- ceammc/ext/src/conv/conv_list2props.cpp | 44 +- ceammc/ext/src/conv/conv_list2props.h | 6 +- ceammc/ext/src/conv/conv_midi2freq.cpp | 18 +- ceammc/ext/src/conv/conv_midi2freq.h | 2 +- ceammc/ext/src/conv/conv_ms2samp.cpp | 10 +- ceammc/ext/src/conv/conv_ms2samp.h | 2 +- ceammc/ext/src/conv/conv_note2guido.cpp | 108 + ceammc/ext/src/conv/conv_note2guido.h | 39 + ceammc/ext/src/conv/conv_pitch2midi.cpp | 15 +- ceammc/ext/src/conv/conv_pitch2midi.h | 2 +- ceammc/ext/src/conv/conv_samp2ms.cpp | 10 +- ceammc/ext/src/conv/conv_samp2ms.h | 2 +- ceammc/ext/src/conv/conv_samp2sec.cpp | 10 +- ceammc/ext/src/conv/conv_samp2sec.h | 2 +- ceammc/ext/src/conv/conv_sec2samp.cpp | 10 +- ceammc/ext/src/conv/conv_sec2samp.h | 2 +- ceammc/ext/src/conv/mod_conv.cpp | 4 + ceammc/ext/src/conv/simple_converter.h | 15 +- ceammc/ext/src/data/CMakeLists.txt | 16 +- ceammc/ext/src/data/data_dict.cpp | 8 +- ceammc/ext/src/data/data_dict.h | 14 +- ceammc/ext/src/data/data_fifo.cpp | 96 +- ceammc/ext/src/data/data_fifo.h | 17 +- ceammc/ext/src/data/data_list.cpp | 7 +- ceammc/ext/src/data/data_list.h | 6 +- ceammc/ext/src/data/data_mlist.cpp | 6 +- ceammc/ext/src/data/data_mlist.h | 12 +- ceammc/ext/src/data/data_protocol.h | 207 +- ceammc/ext/src/data/data_set.cpp | 13 +- ceammc/ext/src/data/data_set.h | 9 +- ceammc/ext/src/data/dataset_iface.h | 24 +- ceammc/ext/src/data/dict_base.cpp | 2 +- ceammc/ext/src/data/dict_contains.cpp | 20 +- ceammc/ext/src/data/dict_contains.h | 2 +- ceammc/ext/src/data/dict_each.h | 2 +- ceammc/ext/src/data/dict_from_list.cpp | 4 +- ceammc/ext/src/data/dict_from_list.h | 2 +- ceammc/ext/src/data/dict_get.cpp | 15 +- ceammc/ext/src/data/dict_iface.h | 49 +- ceammc/ext/src/data/dict_is.cpp | 2 +- ceammc/ext/src/data/dict_is.h | 2 +- ceammc/ext/src/data/dict_reject.h | 2 +- ceammc/ext/src/data/editor_data.cpp | 185 + ceammc/ext/src/data/editor_data.h | 76 + ceammc/ext/src/data/editor_list.h | 66 + ceammc/ext/src/data/global_base.h | 2 + ceammc/ext/src/data/global_dict.cpp | 12 + ceammc/ext/src/data/global_dict.h | 9 +- ceammc/ext/src/data/global_list.cpp | 16 +- ceammc/ext/src/data/global_list.h | 8 +- ceammc/ext/src/data/global_mlist.cpp | 8 + ceammc/ext/src/data/global_mlist.h | 9 +- ceammc/ext/src/data/global_set.cpp | 10 + ceammc/ext/src/data/global_set.h | 8 +- ceammc/ext/src/data/list_iface.h | 63 +- ceammc/ext/src/data/local_base.cpp | 33 + ceammc/ext/src/data/local_base.h | 14 +- ceammc/ext/src/data/local_dict.cpp | 12 + ceammc/ext/src/data/local_dict.h | 9 +- ceammc/ext/src/data/local_list.cpp | 14 + ceammc/ext/src/data/local_list.h | 6 +- ceammc/ext/src/data/local_mlist.cpp | 8 + ceammc/ext/src/data/local_mlist.h | 8 +- ceammc/ext/src/data/local_set.cpp | 14 +- ceammc/ext/src/data/local_set.h | 12 +- ceammc/ext/src/data/mlist_flatten.cpp | 4 +- ceammc/ext/src/data/mlist_flatten.h | 2 +- ceammc/ext/src/data/mlist_iface.h | 65 +- ceammc/ext/src/data/rtree_to_list.cpp | 7 +- ceammc/ext/src/data/set_contains.cpp | 4 +- ceammc/ext/src/data/set_contains.h | 4 +- ceammc/ext/src/data/set_difference.cpp | 12 +- ceammc/ext/src/data/set_difference.h | 4 +- ceammc/ext/src/data/set_equal.cpp | 16 +- ceammc/ext/src/data/set_equal.h | 4 +- ceammc/ext/src/data/set_intersection.cpp | 12 +- ceammc/ext/src/data/set_intersection.h | 4 +- ceammc/ext/src/data/set_size.cpp | 4 +- ceammc/ext/src/data/set_size.h | 4 +- ceammc/ext/src/data/set_symdiff.cpp | 12 +- ceammc/ext/src/data/set_symdiff.h | 4 +- ceammc/ext/src/data/set_union.cpp | 12 +- ceammc/ext/src/data/set_union.h | 4 +- ceammc/ext/src/dyn/dyn_comp.h | 390 +- ceammc/ext/src/dyn/dyn_comp2.h | 396 +- ceammc/ext/src/dyn/dyn_gate.h | 401 +- ceammc/ext/src/dyn/dyn_gate2.h | 403 +- ceammc/ext/src/dyn/dyn_limit.h | 337 +- ceammc/ext/src/dyn/dyn_limit2.h | 343 +- ceammc/ext/src/dyn/dyn_softclip.h | 304 +- ceammc/ext/src/env/CMakeLists.txt | 3 + ceammc/ext/src/env/datatype_env.cpp | 520 +- ceammc/ext/src/env/datatype_env.h | 87 +- ceammc/ext/src/env/env_adsr.cpp | 8 +- ceammc/ext/src/env/env_adsr.h | 362 +- ceammc/ext/src/env/env_ar.cpp | 27 +- ceammc/ext/src/env/env_ar.h | 334 +- ceammc/ext/src/env/env_asr.cpp | 62 +- ceammc/ext/src/env/env_asr.h | 350 +- ceammc/ext/src/env/env_concat.h | 2 +- ceammc/ext/src/env/env_env.cpp | 227 +- ceammc/ext/src/env/env_env.h | 50 +- ceammc/ext/src/env/env_faust_play.h | 15 +- ceammc/ext/src/env/env_follow.h | 343 +- ceammc/ext/src/env/env_mix.h | 2 +- ceammc/ext/src/env/env_smooth.h | 324 +- ceammc/ext/src/env/env_to_vline.cpp | 8 +- ceammc/ext/src/env/vline_to_env.cpp | 10 +- ceammc/ext/src/env/vline_to_env.h | 2 +- ceammc/ext/src/flow/CMakeLists.txt | 7 + ceammc/ext/src/flow/flow_append.cpp | 6 +- ceammc/ext/src/flow/flow_append.h | 4 +- ceammc/ext/src/flow/flow_change.cpp | 8 +- ceammc/ext/src/flow/flow_change.h | 2 +- ceammc/ext/src/flow/flow_count.cpp | 44 +- ceammc/ext/src/flow/flow_count.h | 4 +- ceammc/ext/src/flow/flow_delay.cpp | 10 +- ceammc/ext/src/flow/flow_delay.h | 6 +- ceammc/ext/src/flow/flow_demultiplex.cpp | 4 +- ceammc/ext/src/flow/flow_demultiplex.h | 4 +- .../ext/src/flow/flow_demultiplex_tilde.cpp | 16 +- ceammc/ext/src/flow/flow_demultiplex_tilde.h | 6 +- ceammc/ext/src/flow/flow_dollar.cpp | 26 +- ceammc/ext/src/flow/flow_dollar.h | 2 +- ceammc/ext/src/flow/flow_dup.cpp | 6 +- ceammc/ext/src/flow/flow_dup.h | 2 +- ceammc/ext/src/flow/flow_gate.cpp | 10 +- ceammc/ext/src/flow/flow_gate.h | 6 +- ceammc/ext/src/flow/flow_group.cpp | 10 +- ceammc/ext/src/flow/flow_group.h | 4 +- ceammc/ext/src/flow/flow_interval.cpp | 2 +- ceammc/ext/src/flow/flow_interval.h | 4 +- ceammc/ext/src/flow/flow_list2many.cpp | 2 +- ceammc/ext/src/flow/flow_list2many.h | 2 +- ceammc/ext/src/flow/flow_loop.cpp | 6 +- ceammc/ext/src/flow/flow_loop.h | 4 +- ceammc/ext/src/flow/flow_match.h | 2 +- ceammc/ext/src/flow/flow_mem.cpp | 17 +- ceammc/ext/src/flow/flow_mem.h | 2 +- ceammc/ext/src/flow/flow_multiplex.cpp | 16 +- ceammc/ext/src/flow/flow_multiplex.h | 6 +- ceammc/ext/src/flow/flow_multiplex_tilde.cpp | 16 +- ceammc/ext/src/flow/flow_multiplex_tilde.h | 6 +- ceammc/ext/src/flow/flow_once.cpp | 4 +- ceammc/ext/src/flow/flow_once.h | 2 +- ceammc/ext/src/flow/flow_pack.cpp | 10 +- ceammc/ext/src/flow/flow_pack.h | 2 +- ceammc/ext/src/flow/flow_pass.cpp | 8 +- ceammc/ext/src/flow/flow_pass.h | 2 +- ceammc/ext/src/flow/flow_pass_float.h | 2 +- ceammc/ext/src/flow/flow_pass_if.cpp | 6 +- ceammc/ext/src/flow/flow_pass_if.h | 2 +- ceammc/ext/src/flow/flow_pipe.cpp | 19 +- ceammc/ext/src/flow/flow_pipe.h | 6 +- ceammc/ext/src/flow/flow_queue.cpp | 10 +- ceammc/ext/src/flow/flow_queue.h | 4 +- ceammc/ext/src/flow/flow_record.cpp | 6 +- ceammc/ext/src/flow/flow_record.h | 4 +- ceammc/ext/src/flow/flow_reject.cpp | 8 +- ceammc/ext/src/flow/flow_reject.h | 2 +- ceammc/ext/src/flow/flow_reject_if.cpp | 6 +- ceammc/ext/src/flow/flow_reject_if.h | 2 +- ceammc/ext/src/flow/flow_ring.cpp | 6 +- ceammc/ext/src/flow/flow_ring.h | 4 +- ceammc/ext/src/flow/flow_route.cpp | 12 +- ceammc/ext/src/flow/flow_route.h | 2 +- ceammc/ext/src/flow/flow_select.cpp | 20 +- ceammc/ext/src/flow/flow_select.h | 2 +- ceammc/ext/src/flow/flow_seqdelay.cpp | 189 + ceammc/ext/src/flow/flow_seqdelay.h | 49 + ceammc/ext/src/flow/flow_space.cpp | 47 +- ceammc/ext/src/flow/flow_space.h | 6 +- ceammc/ext/src/flow/flow_speedlim.cpp | 13 +- ceammc/ext/src/flow/flow_speedlim.h | 9 +- ceammc/ext/src/flow/flow_split.cpp | 6 +- ceammc/ext/src/flow/flow_split.h | 2 +- ceammc/ext/src/flow/flow_stack.cpp | 18 +- ceammc/ext/src/flow/flow_stack.h | 4 +- ceammc/ext/src/flow/flow_sync.cpp | 18 +- ceammc/ext/src/flow/flow_sync.h | 4 +- ceammc/ext/src/flow/flow_tee_tilde.cpp | 4 +- ceammc/ext/src/flow/flow_tee_tilde.h | 2 +- ceammc/ext/src/flow/mod_flow.cpp | 14 + ceammc/ext/src/flow/route_any.cpp | 55 + ceammc/ext/src/flow/route_any.h | 33 + ceammc/ext/src/flow/route_bang.cpp | 63 + ceammc/ext/src/flow/route_bang.h | 35 + ceammc/ext/src/flow/route_float.cpp | 8 +- ceammc/ext/src/flow/route_float.h | 2 +- ceammc/ext/src/flow/route_list.cpp | 56 + ceammc/ext/src/flow/route_list.h | 33 + ceammc/ext/src/flow/route_prop.cpp | 55 + ceammc/ext/src/flow/route_prop.h | 33 + ceammc/ext/src/flow/route_random.cpp | 68 + ceammc/ext/src/flow/route_random.h | 41 + ceammc/ext/src/flow/route_symbol.cpp | 56 + ceammc/ext/src/flow/route_symbol.h | 33 + ceammc/ext/src/flow/seq_arp.cpp | 1 + ceammc/ext/src/flow/seq_base.cpp | 34 +- ceammc/ext/src/flow/seq_base.h | 2 + ceammc/ext/src/flow/seq_counter.cpp | 259 +- ceammc/ext/src/flow/seq_counter.h | 25 +- ceammc/ext/src/flow/seq_nbangs.cpp | 12 +- ceammc/ext/src/flow/seq_nbangs.h | 2 +- ceammc/ext/src/flt/CMakeLists.txt | 9 +- ceammc/ext/src/flt/flt_a_weight.cpp | 76 + ceammc/ext/src/flt/flt_a_weight.h | 35 + ceammc/ext/src/flt/flt_biquad.h | 300 +- ceammc/ext/src/flt/flt_bpf12.h | 356 +- ceammc/ext/src/flt/flt_bpf24.h | 405 +- ceammc/ext/src/flt/flt_c_bpf.h | 334 +- ceammc/ext/src/flt/flt_c_highshelf.h | 348 +- ceammc/ext/src/flt/flt_c_hpf.h | 330 +- ceammc/ext/src/flt/flt_c_lowshelf.h | 348 +- ceammc/ext/src/flt/flt_c_lpf.h | 330 +- ceammc/ext/src/flt/flt_c_notch.h | 328 +- ceammc/ext/src/flt/flt_c_peak.h | 344 +- ceammc/ext/src/flt/flt_dcblock.h | 300 +- ceammc/ext/src/flt/flt_dcblock2.h | 306 +- ceammc/ext/src/flt/flt_eq10.cpp | 58 +- ceammc/ext/src/flt/flt_eq10.h | 1624 +- ceammc/ext/src/flt/flt_eq_peak.h | 362 +- ceammc/ext/src/flt/flt_eq_peak_cq.h | 370 +- ceammc/ext/src/flt/flt_fb_comb.h | 348 +- ceammc/ext/src/flt/flt_ff_comb.h | 340 +- ceammc/ext/src/flt/flt_filterbank5x1.cpp | 50 +- ceammc/ext/src/flt/flt_filterbank5x1.h | 606 +- ceammc/ext/src/flt/flt_freqz.cpp | 19 +- ceammc/ext/src/flt/flt_freqz_tilde.cpp | 4 +- ceammc/ext/src/flt/flt_highshelf.h | 336 +- ceammc/ext/src/flt/flt_hpf12.cpp | 11 + ceammc/ext/src/flt/flt_hpf12.h | 326 +- ceammc/ext/src/flt/flt_hpf24.cpp | 11 + ceammc/ext/src/flt/flt_hpf24.h | 336 +- ceammc/ext/src/flt/flt_lowshelf.h | 336 +- ceammc/ext/src/flt/flt_lpf12.cpp | 11 + ceammc/ext/src/flt/flt_lpf12.h | 326 +- ceammc/ext/src/flt/flt_lpf24.cpp | 11 + ceammc/ext/src/flt/flt_lpf24.h | 334 +- ceammc/ext/src/flt/flt_moog_vcf.h | 390 +- ceammc/ext/src/flt/flt_notch.h | 342 +- ceammc/ext/src/flt/flt_resonbp.cpp | 24 +- ceammc/ext/src/flt/flt_resonbp.h | 358 +- ceammc/ext/src/flt/flt_resonhp.cpp | 39 + ceammc/ext/src/flt/flt_resonhp.h | 806 + ceammc/ext/src/flt/flt_resonlp.cpp | 39 + ceammc/ext/src/flt/flt_resonlp.h | 802 + ceammc/ext/src/flt/mod_flt.cpp | 6 + ceammc/ext/src/fx/CMakeLists.txt | 4 + ceammc/ext/src/fx/fx_bitdown.cpp | 4 +- ceammc/ext/src/fx/fx_bitdown.h | 318 +- ceammc/ext/src/fx/fx_chorus.h | 386 +- ceammc/ext/src/fx/fx_dattorro.cpp | 34 + ceammc/ext/src/fx/fx_dattorro.h | 1036 + ceammc/ext/src/fx/fx_distortion.h | 342 +- ceammc/ext/src/fx/fx_distortion1.h | 867 +- ceammc/ext/src/fx/fx_distortion2.h | 513 +- ceammc/ext/src/fx/fx_distortion3.h | 404 +- ceammc/ext/src/fx/fx_drive.h | 310 +- ceammc/ext/src/fx/fx_drone_box.h | 408 +- ceammc/ext/src/fx/fx_echo.h | 343 +- ceammc/ext/src/fx/fx_echo2.h | 381 +- ceammc/ext/src/fx/fx_flanger.h | 370 +- ceammc/ext/src/fx/fx_freeverb.h | 590 +- ceammc/ext/src/fx/fx_freeverb2.h | 756 +- ceammc/ext/src/fx/fx_freqshift.h | 350 +- ceammc/ext/src/fx/fx_granulator.h | 1532 +- ceammc/ext/src/fx/fx_greyhole.h | 1237 +- ceammc/ext/src/fx/fx_jcrev.cpp | 43 + ceammc/ext/src/fx/fx_jcrev.h | 923 + ceammc/ext/src/fx/fx_looper.cpp | 18 +- ceammc/ext/src/fx/fx_looper.h | 6 +- ceammc/ext/src/fx/fx_pitchshift.h | 356 +- ceammc/ext/src/fx/fx_pitchshift_sig.h | 348 +- ceammc/ext/src/fx/fx_recho.h | 427 +- ceammc/ext/src/fx/fx_room.cpp | 14 + ceammc/ext/src/fx/fx_room.h | 1171 +- ceammc/ext/src/fx/fx_satrev.cpp | 33 + ceammc/ext/src/fx/fx_satrev.h | 913 + ceammc/ext/src/fx/fx_sdelay.h | 371 +- ceammc/ext/src/fx/fx_secho.h | 359 +- ceammc/ext/src/fx/fx_shimmer.h | 1113 +- ceammc/ext/src/fx/fx_stutter.cpp | 248 + ceammc/ext/src/fx/fx_stutter.h | 42 + ceammc/ext/src/fx/fx_tapiir.cpp | 174 +- ceammc/ext/src/fx/fx_tapiir.h | 592 +- ceammc/ext/src/fx/fx_tapiir_priv.h | 7 +- ceammc/ext/src/fx/fx_vocoder.h | 2086 +- ceammc/ext/src/fx/fx_wahwah.h | 397 +- ceammc/ext/src/fx/fx_zita_rev1.cpp | 5 +- ceammc/ext/src/fx/fx_zita_rev1.h | 926 +- ceammc/ext/src/fx/mod_fx.cpp | 10 +- ceammc/ext/src/hw/CMakeLists.txt | 32 +- ceammc/ext/src/hw/arduino/CMakeLists.txt | 10 +- ceammc/ext/src/hw/arduino/arduino.cpp | 9 +- ceammc/ext/src/hw/arduino/arduino.h | 8 +- .../hw/arduino/arduino_connection_storage.cpp | 13 +- .../hw/arduino/arduino_connection_storage.h | 7 +- ceammc/ext/src/hw/arduino/arduino_thread.cpp | 49 +- ceammc/ext/src/hw/hw_apple_smc.cpp | 8 +- ceammc/ext/src/hw/hw_apple_smc.h | 2 +- ceammc/ext/src/hw/hw_apple_sms.cpp | 8 +- ceammc/ext/src/hw/hw_apple_sms.h | 2 +- ceammc/ext/src/hw/hw_arduino.cpp | 26 +- ceammc/ext/src/hw/hw_arduino.h | 2 +- ceammc/ext/src/hw/hw_display.cpp | 8 +- ceammc/ext/src/hw/hw_display.h | 2 +- ceammc/ext/src/hw/hw_kbd_light.cpp | 8 +- ceammc/ext/src/hw/hw_kbd_light.h | 2 +- ceammc/ext/src/hw/hw_motu_avb.cpp | 613 + ceammc/ext/src/hw/hw_motu_avb.h | 73 + ceammc/ext/src/hw/hw_serial.cpp | 22 +- ceammc/ext/src/hw/hw_serial.h | 2 +- ceammc/ext/src/hw/hw_udmx.cpp | 14 +- ceammc/ext/src/hw/hw_udmx.h | 10 +- ceammc/ext/src/hw/mod_hw.cpp | 16 +- ceammc/ext/src/lang/CMakeLists.txt | 103 +- ceammc/ext/src/lang/lang_faust_tilde.cpp | 14 +- ceammc/ext/src/lang/lang_faust_tilde.h | 10 + ceammc/ext/src/lang/lang_faust_tilde_stub.cpp | 19 +- ceammc/ext/src/lang/lang_faust_ui_tilde.cpp | 32 +- ceammc/ext/src/lang/lang_faust_ui_tilde.h | 20 +- .../ext/src/lang/lang_faust_ui_tilde_stub.cpp | 19 +- ceammc/ext/src/lang/lang_luajit.cpp | 577 + ceammc/ext/src/lang/lang_luajit.h | 97 + ceammc/ext/src/lang/lua_cmd.cpp | 90 + ceammc/ext/src/lang/lua_cmd.h | 143 + ceammc/ext/src/lang/lua_func.cpp | 769 + ceammc/ext/src/lang/lua_func.h | 73 + ceammc/ext/src/lang/lua_interp.cpp | 306 + ceammc/ext/src/lang/lua_interp.h | 54 + ceammc/ext/src/lang/lua_stack_guard.h | 57 + ceammc/ext/src/lang/mod_lang.cpp | 17 + ceammc/ext/src/lfo/lfo_impulse.h | 302 +- ceammc/ext/src/lfo/lfo_mosc.h | 421 +- ceammc/ext/src/lfo/lfo_pulse.cpp | 15 +- ceammc/ext/src/lfo/lfo_pulse.h | 306 +- ceammc/ext/src/lfo/lfo_pulse_pos.cpp | 4 +- ceammc/ext/src/lfo/lfo_pulse_pos.h | 306 +- ceammc/ext/src/lfo/lfo_saw.h | 306 +- ceammc/ext/src/lfo/lfo_saw_pos.cpp | 4 +- ceammc/ext/src/lfo/lfo_saw_pos.h | 310 +- ceammc/ext/src/lfo/lfo_square.h | 304 +- ceammc/ext/src/lfo/lfo_square_pos.h | 304 +- ceammc/ext/src/lfo/lfo_tri.h | 304 +- ceammc/ext/src/lfo/lfo_tri_pos.h | 304 +- ceammc/ext/src/lib/CMakeLists.txt | 98 +- ceammc/ext/src/lib/args/argcheck2.cpp | 4477 +++ ceammc/ext/src/lib/args/argcheck2.h | 57 + ceammc/ext/src/lib/args/argcheck2.rl | 883 + ceammc/ext/src/lib/ceammc_abstractdata.cpp | 114 +- ceammc/ext/src/lib/ceammc_abstractdata.h | 112 +- ceammc/ext/src/lib/ceammc_array.cpp | 31 +- ceammc/ext/src/lib/ceammc_array.h | 5 +- ceammc/ext/src/lib/ceammc_atom.cpp | 24 +- ceammc/ext/src/lib/ceammc_atom.h | 10 + ceammc/ext/src/lib/ceammc_atomlist.cpp | 158 - ceammc/ext/src/lib/ceammc_atomlist.h | 94 +- ceammc/ext/src/lib/ceammc_atomlist_view.cpp | 98 +- ceammc/ext/src/lib/ceammc_atomlist_view.h | 197 +- ceammc/ext/src/lib/ceammc_base64.cpp | 36 + ceammc/ext/src/lib/ceammc_base64.h | 25 + ceammc/ext/src/lib/ceammc_canvas.cpp | 59 +- ceammc/ext/src/lib/ceammc_canvas.h | 16 +- ceammc/ext/src/lib/ceammc_cicm.cpp | 20 +- ceammc/ext/src/lib/ceammc_cicm.h | 11 +- ceammc/ext/src/lib/ceammc_containers.h | 107 +- ceammc/ext/src/lib/ceammc_convert.h | 1 + ceammc/ext/src/lib/ceammc_crc32.h | 52 +- ceammc/ext/src/lib/ceammc_data.cpp | 53 +- ceammc/ext/src/lib/ceammc_data.h | 2 +- ceammc/ext/src/lib/ceammc_datastorage.cpp | 32 +- ceammc/ext/src/lib/ceammc_datastorage.h | 52 +- ceammc/ext/src/lib/ceammc_datatypes.h | 31 +- ceammc/ext/src/lib/ceammc_deprecated.cpp | 45 + ceammc/ext/src/lib/ceammc_deprecated.h | 32 + ceammc/ext/src/lib/ceammc_dsp.cpp | 37 + ceammc/ext/src/lib/ceammc_dsp.h | 201 + ceammc/ext/src/lib/ceammc_editor_object.cpp | 282 + ceammc/ext/src/lib/ceammc_editor_object.h | 225 + ceammc/ext/src/lib/ceammc_externals.cpp | 8 +- ceammc/ext/src/lib/ceammc_externals.h | 2 +- ceammc/ext/src/lib/ceammc_factory.h | 7 +- ceammc/ext/src/lib/ceammc_faust.cpp | 36 +- ceammc/ext/src/lib/ceammc_faust.h | 2 +- ceammc/ext/src/lib/ceammc_fn_list.cpp | 126 +- ceammc/ext/src/lib/ceammc_fn_list.h | 89 +- ceammc/ext/src/lib/ceammc_format.cpp | 103 +- ceammc/ext/src/lib/ceammc_format.h | 13 +- ceammc/ext/src/lib/ceammc_function.cpp | 44 +- ceammc/ext/src/lib/ceammc_function.h | 4 +- ceammc/ext/src/lib/ceammc_globaldata.h | 13 +- ceammc/ext/src/lib/ceammc_impl.cpp | 93 +- ceammc/ext/src/lib/ceammc_impl.h | 18 + ceammc/ext/src/lib/ceammc_inlet.cpp | 149 + ceammc/ext/src/lib/ceammc_inlet.h | 54 + ceammc/ext/src/lib/ceammc_json.cpp | 53 +- ceammc/ext/src/lib/ceammc_json.h | 15 +- .../src/lib/ceammc_loader_coreaudio_impl.m | 4 +- ceammc/ext/src/lib/ceammc_loader_minimp3.cpp | 147 +- ceammc/ext/src/lib/ceammc_log.cpp | 4 +- ceammc/ext/src/lib/ceammc_message.cpp | 2 +- ceammc/ext/src/lib/ceammc_music_scale.cpp | 287 +- ceammc/ext/src/lib/ceammc_music_scale.h | 35 +- ceammc/ext/src/lib/ceammc_music_theory.cpp | 10 +- ceammc/ext/src/lib/ceammc_music_theory.h | 18 +- .../ext/src/lib/ceammc_music_theory_names.cpp | 2 +- .../lib/ceammc_music_theory_pitch_class.cpp | 21 + .../src/lib/ceammc_music_theory_pitch_class.h | 2 + ceammc/ext/src/lib/ceammc_notify.h | 28 + ceammc/ext/src/lib/ceammc_object.cpp | 149 +- ceammc/ext/src/lib/ceammc_object.h | 51 +- ceammc/ext/src/lib/ceammc_outlet.cpp | 116 + ceammc/ext/src/lib/ceammc_outlet.h | 68 + ceammc/ext/src/lib/ceammc_output.cpp | 47 +- ceammc/ext/src/lib/ceammc_output.h | 5 +- ceammc/ext/src/lib/ceammc_pd.cpp | 30 +- ceammc/ext/src/lib/ceammc_pipe_dispatcher.cpp | 88 + ceammc/ext/src/lib/ceammc_pipe_dispatcher.h | 38 + ceammc/ext/src/lib/ceammc_platform.cpp | 3 - ceammc/ext/src/lib/ceammc_platform.h | 4 +- ceammc/ext/src/lib/ceammc_poll_dispatcher.cpp | 99 + ceammc/ext/src/lib/ceammc_poll_dispatcher.h | 75 + ceammc/ext/src/lib/ceammc_pollfd.h | 8 +- ceammc/ext/src/lib/ceammc_pollthread_object.h | 174 + ceammc/ext/src/lib/ceammc_preset.cpp | 60 +- ceammc/ext/src/lib/ceammc_property.cpp | 144 +- ceammc/ext/src/lib/ceammc_property.h | 40 +- .../ext/src/lib/ceammc_property_callback.cpp | 84 + ceammc/ext/src/lib/ceammc_property_callback.h | 10 +- ceammc/ext/src/lib/ceammc_property_enum.h | 10 +- ceammc/ext/src/lib/ceammc_property_info.cpp | 282 +- ceammc/ext/src/lib/ceammc_property_info.h | 5 + ceammc/ext/src/lib/ceammc_proxy.h | 142 +- ceammc/ext/src/lib/ceammc_random.cpp | 67 + ceammc/ext/src/lib/ceammc_random.h | 51 + ceammc/ext/src/lib/ceammc_save_object.h | 100 + .../ext/src/lib/ceammc_socket_dispatcher.cpp | 125 + ceammc/ext/src/lib/ceammc_socket_dispatcher.h | 39 + ceammc/ext/src/lib/ceammc_sound.h | 2 +- ceammc/ext/src/lib/ceammc_sound_external.cpp | 4 +- ceammc/ext/src/lib/ceammc_string.cpp | 910 +- ceammc/ext/src/lib/ceammc_string.h | 278 +- ceammc/ext/src/lib/ceammc_string_split.cpp | 42 + ceammc/ext/src/lib/ceammc_string_split.h | 19 + ceammc/ext/src/lib/ceammc_string_types.h | 18 + ceammc/ext/src/lib/ceammc_stub.h | 58 + ceammc/ext/src/lib/ceammc_syms.h | 69 + ceammc/ext/src/lib/ceammc_thread.cpp | 121 +- ceammc/ext/src/lib/ceammc_thread.h | 98 +- ceammc/ext/src/lib/ceammc_ui.h | 618 +- ceammc/ext/src/lib/ceammc_ui_object.cpp | 147 +- ceammc/ext/src/lib/ceammc_ui_object.h | 2 +- .../ext/src/lib/cicm/Sources/cicm_common.tcl | 32 +- .../src/lib/cicm/Sources/cicm_common.tcl.h | 28 +- ceammc/ext/src/lib/cicm/Sources/ebox.cpp | 251 +- ceammc/ext/src/lib/cicm/Sources/ebox.h | 34 +- ceammc/ext/src/lib/cicm/Sources/eclass.cpp | 592 +- ceammc/ext/src/lib/cicm/Sources/eclass.h | 27 +- ceammc/ext/src/lib/cicm/Sources/ecommon.cpp | 4 +- ceammc/ext/src/lib/cicm/Sources/edefine.h | 302 +- ceammc/ext/src/lib/cicm/Sources/egraphics.cpp | 39 +- ceammc/ext/src/lib/cicm/Sources/egraphics.h | 2 +- ceammc/ext/src/lib/cicm/Sources/eobj.cpp | 39 +- ceammc/ext/src/lib/cicm/Sources/eobj.h | 8 +- ceammc/ext/src/lib/cicm/Sources/epopup.cpp | 6 +- ceammc/ext/src/lib/datatype_dict.cpp | 289 +- ceammc/ext/src/lib/datatype_dict.h | 33 +- ceammc/ext/src/lib/datatype_json.cpp | 121 + ceammc/ext/src/lib/datatype_json.h | 24 + ceammc/ext/src/lib/datatype_mlist.cpp | 114 +- ceammc/ext/src/lib/datatype_mlist.h | 40 +- ceammc/ext/src/lib/datatype_property.cpp | 29 +- ceammc/ext/src/lib/datatype_property.h | 15 +- ceammc/ext/src/{data => lib}/datatype_set.cpp | 132 +- ceammc/ext/src/{data => lib}/datatype_set.h | 56 +- ceammc/ext/src/lib/datatype_string.cpp | 122 +- ceammc/ext/src/lib/datatype_string.h | 42 +- .../src/lib/extra/boost_intrusive_pool.hpp | 857 + ceammc/ext/src/lib/image_detect.h | 3 +- ceammc/ext/src/lib/json/json.hpp | 32125 +++++++++------- ceammc/ext/src/lib/lex/data_string.l | 139 - ceammc/ext/src/lib/lex/data_string.lexer.cpp | 1731 - ceammc/ext/src/lib/lex/data_string.lexer.h | 122 - .../ext/src/lib/lex/data_string.location.hpp | 2 +- ceammc/ext/src/lib/lex/data_string.parser.cpp | 1407 - ceammc/ext/src/lib/lex/data_string.parser.hpp | 1752 - ceammc/ext/src/lib/lex/data_string.y | 202 - .../ext/src/lib/lex/data_string_location2.h | 306 + ceammc/ext/src/lib/lex/lemon.c | 5893 +++ .../src/lib/lex/lemon_data_parser_impl.cpp | 1711 + .../ext/src/lib/lex/lemon_data_parser_impl.h | 23 + ceammc/ext/src/lib/lex/lemon_data_string.h | 14 + ceammc/ext/src/lib/lex/lemon_data_string.y | 366 + .../src/lib/lex/lemon_data_string_parser.cpp | 9316 +++++ .../src/lib/lex/lemon_data_string_parser.h | 77 + .../src/lib/lex/lemon_data_string_parser.rl | 365 + ceammc/ext/src/lib/lex/lempar.c | 1068 + ceammc/ext/src/lib/lex/parser_clone.cpp | 3361 ++ ceammc/ext/src/lib/lex/parser_clone.h | 60 + ceammc/ext/src/lib/lex/parser_clone.rl | 120 + ceammc/ext/src/lib/lex/parser_color.cpp | 696 +- ceammc/ext/src/lib/lex/parser_color.rl | 26 - ceammc/ext/src/lib/lex/parser_music.cpp | 7575 +++- ceammc/ext/src/lib/lex/parser_music.h | 45 +- ceammc/ext/src/lib/lex/parser_music.rl | 67 +- ceammc/ext/src/lib/lex/parser_numeric.cpp | 3990 +- ceammc/ext/src/lib/lex/parser_numeric.h | 30 +- ceammc/ext/src/lib/lex/parser_numeric.rl | 62 +- ceammc/ext/src/lib/lex/parser_props.cpp | 1818 +- ceammc/ext/src/lib/lex/parser_props.rl | 17 + ceammc/ext/src/lib/lex/parser_strings.cpp | 1668 + ceammc/ext/src/lib/lex/parser_strings.h | 132 + ceammc/ext/src/lib/lex/parser_strings.rl | 413 + ceammc/ext/src/lib/lex/parser_units.cpp | 9215 +++-- ceammc/ext/src/lib/lex/parser_units.h | 6 +- ceammc/ext/src/lib/lex/parser_units.rl | 28 +- .../ext/src/lib/lex/quoted_atomlist_lexer.h | 88 - .../ext/src/lib/lex/quoted_string.parser.cpp | 1172 - .../ext/src/lib/lex/quoted_string.parser.hpp | 793 - ceammc/ext/src/lib/lex/quoted_string.y | 96 - ceammc/ext/src/lib/lex/ragel_common.h | 34 + ceammc/ext/src/lib/lex/ragel_music.rl | 9 +- ceammc/ext/src/lib/lex/ragel_numeric.rl | 94 +- ceammc/ext/src/lib/lex/ragel_strings.rl | 51 + ceammc/ext/src/lib/lex/ragel_units.rl | 50 +- ceammc/ext/src/lib/nui/factory.cpp | 20 - ceammc/ext/src/lib/nui/factory.h | 38 +- ceammc/ext/src/lib/nui/property.cpp | 9 +- ceammc/ext/src/lib/nui/property.h | 2 +- ceammc/ext/src/lib/nui/widget.h | 56 +- ceammc/ext/src/lib/tcl/CMakeLists.txt | 4 + .../rnd_gen.cpp => lib/tcl/ceammc_tcl.cpp} | 21 +- ceammc/ext/src/lib/tcl/ceammc_tcl.h | 21 + ceammc/ext/src/lib/tcl/ceammc_texteditor.h | 17 + ceammc/ext/src/lib/tcl/ceammc_texteditor.tcl | 306 + ceammc/ext/src/list/CMakeLists.txt | 3 + ceammc/ext/src/list/list_all_of.cpp | 16 +- ceammc/ext/src/list/list_all_of.h | 4 +- ceammc/ext/src/list/list_any_of.cpp | 21 +- ceammc/ext/src/list/list_any_of.h | 4 +- ceammc/ext/src/list/list_append.cpp | 16 +- ceammc/ext/src/list/list_append.h | 4 +- ceammc/ext/src/list/list_apply_to.cpp | 34 +- ceammc/ext/src/list/list_apply_to.h | 8 +- ceammc/ext/src/list/list_at.cpp | 77 +- ceammc/ext/src/list/list_at.h | 6 +- ceammc/ext/src/list/list_choice.cpp | 17 +- ceammc/ext/src/list/list_choice.h | 2 +- ceammc/ext/src/list/list_contains.cpp | 26 +- ceammc/ext/src/list/list_contains.h | 4 +- ceammc/ext/src/list/list_convolve_base.cpp | 4 +- ceammc/ext/src/list/list_convolve_base.h | 4 +- ceammc/ext/src/list/list_count.cpp | 7 +- ceammc/ext/src/list/list_count.h | 2 +- ceammc/ext/src/list/list_count_if.cpp | 4 +- ceammc/ext/src/list/list_count_if.h | 2 +- ceammc/ext/src/list/list_delta.cpp | 49 +- ceammc/ext/src/list/list_distribution.cpp | 4 +- ceammc/ext/src/list/list_distribution.h | 2 +- ceammc/ext/src/list/list_do.cpp | 16 +- ceammc/ext/src/list/list_do.h | 2 +- ceammc/ext/src/list/list_each.cpp | 20 +- ceammc/ext/src/list/list_each.h | 6 +- ceammc/ext/src/list/list_enumerate.cpp | 4 +- ceammc/ext/src/list/list_enumerate.h | 2 +- ceammc/ext/src/list/list_equal.cpp | 9 +- ceammc/ext/src/list/list_equal.h | 4 +- ceammc/ext/src/list/list_first.cpp | 6 +- ceammc/ext/src/list/list_first.h | 2 +- ceammc/ext/src/list/list_gen.cpp | 4 +- ceammc/ext/src/list/list_gen.h | 2 +- ceammc/ext/src/list/list_histogram.cpp | 15 +- ceammc/ext/src/list/list_histogram.h | 4 +- ceammc/ext/src/list/list_insert.cpp | 29 +- ceammc/ext/src/list/list_insert.h | 4 +- ceammc/ext/src/list/list_integrator.cpp | 47 +- ceammc/ext/src/list/list_last.cpp | 8 +- ceammc/ext/src/list/list_last.h | 2 +- ceammc/ext/src/list/list_length.cpp | 19 +- ceammc/ext/src/list/list_length.h | 3 + ceammc/ext/src/list/list_map.cpp | 127 + ceammc/ext/src/list/list_map.h | 25 + ceammc/ext/src/list/list_max.cpp | 39 +- ceammc/ext/src/list/list_max.h | 2 +- ceammc/ext/src/list/list_mean.cpp | 6 +- ceammc/ext/src/list/list_mean.h | 2 +- ceammc/ext/src/list/list_min.cpp | 39 +- ceammc/ext/src/list/list_min.h | 2 +- ceammc/ext/src/list/list_none_of.cpp | 18 +- ceammc/ext/src/list/list_none_of.h | 2 +- ceammc/ext/src/list/list_normalize.cpp | 27 +- ceammc/ext/src/list/list_normalize.h | 2 +- ceammc/ext/src/list/list_pass.cpp | 86 + ceammc/ext/src/list/list_pass.h | 27 + ceammc/ext/src/list/list_pass_if.cpp | 20 +- ceammc/ext/src/list/list_pass_if.h | 2 +- ceammc/ext/src/list/list_prepend.cpp | 48 +- ceammc/ext/src/list/list_prepend.h | 8 +- ceammc/ext/src/list/list_product.cpp | 4 +- ceammc/ext/src/list/list_product.h | 2 +- ceammc/ext/src/list/list_range.cpp | 55 +- ceammc/ext/src/list/list_range.h | 5 +- ceammc/ext/src/list/list_reduce.cpp | 21 +- ceammc/ext/src/list/list_reduce.h | 4 +- ceammc/ext/src/list/list_reject.cpp | 86 + ceammc/ext/src/list/list_reject.h | 27 + ceammc/ext/src/list/list_remove.cpp | 33 +- ceammc/ext/src/list/list_remove.h | 6 +- ceammc/ext/src/list/list_remove_if.cpp | 19 +- ceammc/ext/src/list/list_remove_if.h | 4 +- ceammc/ext/src/list/list_repack.cpp | 3 +- ceammc/ext/src/list/list_repeat.cpp | 7 +- ceammc/ext/src/list/list_repeat.h | 2 +- ceammc/ext/src/list/list_resample.cpp | 8 +- ceammc/ext/src/list/list_resample.h | 4 +- ceammc/ext/src/list/list_resize.cpp | 8 +- ceammc/ext/src/list/list_resize.h | 2 +- ceammc/ext/src/list/list_reverse.cpp | 11 +- ceammc/ext/src/list/list_reverse.h | 2 +- ceammc/ext/src/list/list_rldecode.cpp | 12 +- ceammc/ext/src/list/list_rldecode.h | 2 +- ceammc/ext/src/list/list_rlencode.cpp | 16 +- ceammc/ext/src/list/list_rlencode.h | 2 +- ceammc/ext/src/list/list_rotate.cpp | 4 +- ceammc/ext/src/list/list_rotate.h | 2 +- ceammc/ext/src/list/list_route.cpp | 12 +- ceammc/ext/src/list/list_route.h | 2 +- ceammc/ext/src/list/list_running_diff.cpp | 14 +- ceammc/ext/src/list/list_running_diff.h | 2 +- ceammc/ext/src/list/list_running_sum.cpp | 11 +- ceammc/ext/src/list/list_running_sum.h | 2 +- ceammc/ext/src/list/list_search.cpp | 9 +- ceammc/ext/src/list/list_search.h | 4 +- ceammc/ext/src/list/list_separate.cpp | 21 +- ceammc/ext/src/list/list_separate.h | 2 +- ceammc/ext/src/list/list_seq.cpp | 16 +- ceammc/ext/src/list/list_seq.h | 2 +- ceammc/ext/src/list/list_set.cpp | 10 +- ceammc/ext/src/list/list_set.h | 4 +- ceammc/ext/src/list/list_shift.cpp | 8 +- ceammc/ext/src/list/list_shift.h | 4 +- ceammc/ext/src/list/list_shuffle.cpp | 16 +- ceammc/ext/src/list/list_shuffle.h | 2 +- ceammc/ext/src/list/list_slice.cpp | 3 +- ceammc/ext/src/list/list_slice.h | 2 +- ceammc/ext/src/list/list_sort.cpp | 12 +- ceammc/ext/src/list/list_sort.h | 2 +- ceammc/ext/src/list/list_sort_with.cpp | 19 +- ceammc/ext/src/list/list_sort_with.h | 2 +- ceammc/ext/src/list/list_split.cpp | 17 +- ceammc/ext/src/list/list_split.h | 2 +- ceammc/ext/src/list/list_stretch.cpp | 10 +- ceammc/ext/src/list/list_stretch.h | 4 +- ceammc/ext/src/list/list_sum.cpp | 4 +- ceammc/ext/src/list/list_sum.h | 2 +- ceammc/ext/src/list/list_unique.cpp | 6 +- ceammc/ext/src/list/list_unique.h | 2 +- ceammc/ext/src/list/list_unpack.cpp | 7 +- ceammc/ext/src/list/list_unpack.h | 2 +- ceammc/ext/src/list/list_unzip.cpp | 6 +- ceammc/ext/src/list/list_unzip.h | 2 +- ceammc/ext/src/list/list_walk.cpp | 75 +- ceammc/ext/src/list/list_walk.h | 8 +- ceammc/ext/src/list/list_xat.cpp | 17 +- ceammc/ext/src/list/list_xat.h | 4 +- ceammc/ext/src/list/list_xcontains.cpp | 18 +- ceammc/ext/src/list/list_xcontains.h | 4 +- ceammc/ext/src/list/list_xsearch.cpp | 26 +- ceammc/ext/src/list/list_xsearch.h | 4 +- ceammc/ext/src/list/list_zip.cpp | 4 +- ceammc/ext/src/list/list_zip.h | 2 +- ceammc/ext/src/list/mod_list.cpp | 6 + ceammc/ext/src/math/math_abs.cpp | 54 +- ceammc/ext/src/math/math_acos.cpp | 54 +- ceammc/ext/src/math/math_acosh.cpp | 54 +- ceammc/ext/src/math/math_and.cpp | 2 +- ceammc/ext/src/math/math_approx.cpp | 24 +- ceammc/ext/src/math/math_approx.h | 4 +- ceammc/ext/src/math/math_asin.cpp | 54 +- ceammc/ext/src/math/math_asinh.cpp | 54 +- ceammc/ext/src/math/math_atan.cpp | 54 +- ceammc/ext/src/math/math_atanh.cpp | 54 +- ceammc/ext/src/math/math_binomial.cpp | 10 +- ceammc/ext/src/math/math_binomial.h | 2 +- ceammc/ext/src/math/math_bool_op.cpp | 37 +- ceammc/ext/src/math/math_bool_op.h | 13 +- ceammc/ext/src/math/math_cbrt.cpp | 54 +- ceammc/ext/src/math/math_ceil.cpp | 54 +- ceammc/ext/src/math/math_cos.cpp | 54 +- ceammc/ext/src/math/math_cosh.cpp | 54 +- ceammc/ext/src/math/math_div.cpp | 14 +- ceammc/ext/src/math/math_div.h | 4 +- ceammc/ext/src/math/math_erf.cpp | 54 +- ceammc/ext/src/math/math_exp.cpp | 54 +- ceammc/ext/src/math/math_exp2.cpp | 54 +- ceammc/ext/src/math/math_expr.cpp | 14 +- ceammc/ext/src/math/math_expr.h | 4 +- ceammc/ext/src/math/math_expr_ast.cpp | 3 + ceammc/ext/src/math/math_floor.cpp | 54 +- ceammc/ext/src/math/math_gamma.cpp | 54 +- ceammc/ext/src/math/math_gcd.cpp | 12 +- ceammc/ext/src/math/math_gcd.h | 2 +- ceammc/ext/src/math/math_lcm.cpp | 12 +- ceammc/ext/src/math/math_lcm.h | 2 +- ceammc/ext/src/math/math_lgamma.cpp | 54 +- ceammc/ext/src/math/math_log.cpp | 54 +- ceammc/ext/src/math/math_log10.cpp | 54 +- ceammc/ext/src/math/math_log2.cpp | 54 +- ceammc/ext/src/math/math_mul.cpp | 19 +- ceammc/ext/src/math/math_mul.h | 4 +- ceammc/ext/src/math/math_neg.cpp | 10 +- ceammc/ext/src/math/math_or.cpp | 2 +- ceammc/ext/src/math/math_pi.cpp | 24 +- ceammc/ext/src/math/math_pi.h | 2 +- ceammc/ext/src/math/math_polyeval.cpp | 27 +- ceammc/ext/src/math/math_polyeval.h | 6 +- ceammc/ext/src/math/math_reciprocal.cpp | 7 +- ceammc/ext/src/math/math_round.cpp | 57 +- ceammc/ext/src/math/math_sign.cpp | 9 +- ceammc/ext/src/math/math_sin.cpp | 54 +- ceammc/ext/src/math/math_sinh.cpp | 54 +- ceammc/ext/src/math/math_sqrt.cpp | 54 +- ceammc/ext/src/math/math_squared.cpp | 7 +- ceammc/ext/src/math/math_sync_base.cpp | 28 +- ceammc/ext/src/math/math_sync_base.h | 8 +- ceammc/ext/src/math/math_tan.cpp | 54 +- ceammc/ext/src/math/math_tanh.cpp | 54 +- ceammc/ext/src/math/math_trunc.cpp | 54 +- ceammc/ext/src/midi/CMakeLists.txt | 8 +- ceammc/ext/src/midi/datatype_midistream.cpp | 39 +- ceammc/ext/src/midi/datatype_midistream.h | 11 +- ceammc/ext/src/midi/datatype_miditrack.cpp | 21 +- ceammc/ext/src/midi/datatype_miditrack.h | 11 +- ceammc/ext/src/midi/midi_arp.cpp | 282 + ceammc/ext/src/midi/midi_arp.h | 67 + ceammc/ext/src/midi/midi_cc.cpp | 14 +- ceammc/ext/src/midi/midi_cc.h | 2 +- ceammc/ext/src/midi/midi_clock.cpp | 7 +- ceammc/ext/src/midi/midi_common.cpp | 513 +- ceammc/ext/src/midi/midi_common.h | 13 +- ceammc/ext/src/midi/midi_ctl2str.cpp | 11 +- ceammc/ext/src/midi/midi_event.cpp | 93 +- ceammc/ext/src/midi/midi_event.h | 23 +- ceammc/ext/src/midi/midi_kbd.cpp | 56 +- ceammc/ext/src/midi/midi_key2str.cpp | 8 +- ceammc/ext/src/midi/midi_key2str.h | 2 +- ceammc/ext/src/midi/midi_modus.cpp | 133 + ceammc/ext/src/midi/midi_modus.h | 49 + ceammc/ext/src/midi/midi_octave.cpp | 51 +- ceammc/ext/src/midi/midi_octave.h | 2 +- ceammc/ext/src/midi/midi_prg2str.cpp | 6 +- ceammc/ext/src/midi/midi_split.cpp | 98 + ceammc/ext/src/midi/midi_split.h | 35 + ceammc/ext/src/midi/midi_sustain.cpp | 25 +- ceammc/ext/src/midi/midi_sustain.h | 2 +- ceammc/ext/src/midi/midi_sysex.cpp | 15 +- ceammc/ext/src/midi/midi_track.cpp | 51 +- ceammc/ext/src/midi/midi_track.h | 5 +- ceammc/ext/src/midi/midi_tuning.cpp | 30 +- ceammc/ext/src/midi/midi_tuning.h | 2 +- ceammc/ext/src/midi/midi_velocity_ramp.cpp | 13 +- ceammc/ext/src/midi/midi_velocity_ramp.h | 2 +- ceammc/ext/src/midi/midi_vrand.cpp | 106 +- ceammc/ext/src/midi/midi_vrand.h | 2 +- ceammc/ext/src/midi/mod_midi.cpp | 6 + ceammc/ext/src/midi/property_pitch.cpp | 74 + ceammc/ext/src/midi/property_pitch.h | 34 + ceammc/ext/src/misc/CMakeLists.txt | 38 +- ceammc/ext/src/misc/RHVoice.conf | 11 + ceammc/ext/src/misc/fluid.cpp | 92 +- ceammc/ext/src/misc/fluid.h | 8 +- ceammc/ext/src/misc/live_capture.cpp | 12 +- ceammc/ext/src/misc/live_capture.h | 372 +- ceammc/ext/src/misc/mod_misc.cpp | 12 +- ceammc/ext/src/misc/risset_glissando.cpp | 155 + ceammc/ext/src/misc/risset_glissando.h | 66 + ceammc/ext/src/misc/sfizz_tilde.cpp | 62 +- ceammc/ext/src/misc/sfizz_tilde.h | 1 + ceammc/ext/src/misc/speech_flite.cpp | 4 +- ceammc/ext/src/misc/speech_flite.h | 2 +- ceammc/ext/src/misc/speech_flite_tilde.cpp | 6 +- ceammc/ext/src/misc/speech_flite_tilde.h | 8 +- ceammc/ext/src/misc/speech_rhvoice_tilde.cpp | 448 + ceammc/ext/src/misc/speech_rhvoice_tilde.h | 88 + .../src/misc/speech_rhvoice_tilde_stub.cpp | 4 + ceammc/ext/src/mod_init.cpp | 14 + ceammc/ext/src/music/bpm_property.cpp | 20 +- ceammc/ext/src/music/bpm_property.h | 2 +- ceammc/ext/src/music/duration_to_time.cpp | 6 +- ceammc/ext/src/music/duration_to_time.h | 2 +- ceammc/ext/src/music/voice_to_midi.cpp | 14 +- ceammc/ext/src/music/voice_to_midi.h | 2 +- ceammc/ext/src/net/CMakeLists.txt | 51 +- ceammc/ext/src/net/mod_net.cpp | 11 + ceammc/ext/src/net/net_artnet_send.cpp | 307 + ceammc/ext/src/net/net_artnet_send.h | 30 + ceammc/ext/src/net/net_host.cpp | 173 +- ceammc/ext/src/net/net_host.h | 34 +- ceammc/ext/src/net/net_http_send.cpp | 131 + ceammc/ext/src/net/net_http_send.h | 50 + ceammc/ext/src/net/net_osc_lo_cxx.h | 32 + ceammc/ext/src/net/net_osc_receive.cpp | 246 + ceammc/ext/src/net/net_osc_receive.h | 71 + ceammc/ext/src/net/net_osc_send.cpp | 579 + ceammc/ext/src/net/net_osc_send.h | 53 + ceammc/ext/src/net/net_osc_server.cpp | 651 + ceammc/ext/src/net/net_osc_server.h | 235 + ceammc/ext/src/net/osc_common.h | 18 + ceammc/ext/src/net/osc_property.cpp | 90 + ceammc/ext/src/net/osc_property.h | 38 + ceammc/ext/src/net/parser_osc.cpp | 615 + ceammc/ext/src/net/parser_osc.h | 41 + ceammc/ext/src/net/parser_osc.rl | 88 + ceammc/ext/src/noise/CMakeLists.txt | 7 + ceammc/ext/src/noise/mod_noise.cpp | 9 +- ceammc/ext/src/noise/noise_chua.cpp | 48 + ceammc/ext/src/noise/noise_chua.h | 945 + ceammc/ext/src/noise/noise_colored.cpp | 24 + ceammc/ext/src/noise/noise_colored.h | 1081 + ceammc/ext/src/noise/noise_crackle.h | 328 +- ceammc/ext/src/noise/noise_henon_heilles.c | 4 +- ceammc/ext/src/noise/noise_lfreq.h | 380 +- ceammc/ext/src/noise/noise_lfreq0.h | 322 +- ceammc/ext/src/noise/noise_pink.h | 306 +- ceammc/ext/src/noise/noise_white.h | 296 +- ceammc/ext/src/osc/osc_impulse.h | 324 +- ceammc/ext/src/osc/osc_pulse.h | 353 +- ceammc/ext/src/osc/osc_saw.h | 312 +- ceammc/ext/src/osc/osc_saw4.h | 367 +- ceammc/ext/src/osc/osc_sin.h | 328 +- ceammc/ext/src/osc/osc_sinfb.h | 360 +- ceammc/ext/src/osc/osc_square.h | 341 +- ceammc/ext/src/osc/osc_tri.h | 344 +- ceammc/ext/src/path/CMakeLists.txt | 25 +- ceammc/ext/src/path/datatype_path.cpp | 19 +- ceammc/ext/src/path/datatype_path.h | 13 +- ceammc/ext/src/path/dmon.h | 1591 + ceammc/ext/src/path/filesystem.hpp | 432 +- ceammc/ext/src/path/mod_path.cpp | 6 + ceammc/ext/src/path/new_file_pattern.cpp | 4511 +++ ceammc/ext/src/path/new_file_pattern.h | 36 + ceammc/ext/src/path/new_file_pattern.rl | 160 + ceammc/ext/src/path/parser_bytes.cpp | 417 + ceammc/ext/src/path/parser_bytes.h | 29 + ceammc/ext/src/path/parser_bytes.rl | 111 + ceammc/ext/src/path/path_exists.cpp | 7 +- ceammc/ext/src/path/path_exists.h | 2 +- ceammc/ext/src/path/path_file.cpp | 393 + ceammc/ext/src/path/path_file.h | 41 + ceammc/ext/src/path/path_listdir.cpp | 2 +- ceammc/ext/src/path/path_monitor.cpp | 191 + ceammc/ext/src/path/path_monitor.h | 41 + ceammc/ext/src/path/path_pattern.cpp | 139 + ceammc/ext/src/path/path_pattern.h | 34 + ceammc/ext/src/path/path_search.cpp | 6 +- ceammc/ext/src/preset/preset_list.cpp | 4 +- ceammc/ext/src/preset/preset_list.h | 2 +- ceammc/ext/src/proto/CMakeLists.txt | 27 +- ceammc/ext/src/proto/firmata/firmata_pin.cpp | 12 +- ceammc/ext/src/proto/mod_proto.cpp | 10 + ceammc/ext/src/proto/parser_vlc.cpp | 285 + ceammc/ext/src/proto/parser_vlc.h | 13 + ceammc/ext/src/proto/parser_vlc.rl | 41 + ceammc/ext/src/proto/parser_whammy.cpp | 1893 + ceammc/ext/src/proto/parser_whammy.rl | 56 + ceammc/ext/src/proto/parser_whammy_common.h | 45 + ceammc/ext/src/proto/proto_feelworld.cpp | 84 + ceammc/ext/src/proto/proto_feelworld.h | 18 + ceammc/ext/src/proto/proto_firmata.cpp | 265 +- ceammc/ext/src/proto/proto_firmata.h | 2 +- ceammc/ext/src/proto/proto_inscore.cpp | 670 + ceammc/ext/src/proto/proto_inscore.h | 67 + ceammc/ext/src/proto/proto_midi.cpp | 147 +- ceammc/ext/src/proto/proto_midi.h | 2 +- ceammc/ext/src/proto/proto_midi_casio.cpp | 7 +- ceammc/ext/src/proto/proto_midi_cc.cpp | 14 +- ceammc/ext/src/proto/proto_midi_cc.h | 2 +- ceammc/ext/src/proto/proto_midi_sysex.cpp | 4 +- ceammc/ext/src/proto/proto_midi_sysex.h | 2 +- ceammc/ext/src/proto/proto_moppy.cpp | 338 + ceammc/ext/src/proto/proto_moppy.h | 32 + ceammc/ext/src/proto/proto_vlc.cpp | 367 + ceammc/ext/src/proto/proto_vlc.h | 79 + ceammc/ext/src/proto/proto_whammy.cpp | 305 + ceammc/ext/src/proto/proto_whammy.h | 67 + ceammc/ext/src/proto/proto_xtouch_ext.cpp | 1 - ceammc/ext/src/random/CMakeLists.txt | 2 +- ceammc/ext/src/random/random_atom.cpp | 103 +- ceammc/ext/src/random/random_atom.h | 24 +- ceammc/ext/src/random/random_discrete.cpp | 64 +- ceammc/ext/src/random/random_discrete.h | 12 +- ceammc/ext/src/random/random_float.cpp | 7 +- ceammc/ext/src/random/random_float.h | 5 +- ceammc/ext/src/random/random_gauss.cpp | 8 +- ceammc/ext/src/random/random_gauss.h | 5 +- ceammc/ext/src/random/random_int.cpp | 7 +- ceammc/ext/src/random/random_int.h | 5 +- ceammc/ext/src/random/random_linear.cpp | 5 +- ceammc/ext/src/random/random_linear.h | 5 +- ceammc/ext/src/random/random_pwconst.cpp | 15 +- ceammc/ext/src/random/random_pwconst.h | 9 +- ceammc/ext/src/random/random_pwlin.cpp | 15 +- ceammc/ext/src/random/random_pwlin.h | 9 +- ceammc/ext/src/rtmidi/CMakeLists.txt | 29 - ceammc/ext/src/rtmidi/RtMidi.cpp | 2888 -- ceammc/ext/src/rtmidi/RtMidi.h | 763 - ceammc/ext/src/rtmidi/midi_in.cpp | 173 - ceammc/ext/src/rtmidi/midi_in.h | 61 - ceammc/ext/src/rtmidi/midi_listin.cpp | 58 - ceammc/ext/src/rtmidi/midi_listout.cpp | 63 - ceammc/ext/src/rtmidi/midi_out.cpp | 112 - ceammc/ext/src/rtmidi/midiin_cc.cpp | 74 - ceammc/ext/src/spat/hoa_2d_scope.cpp | 6 +- ceammc/ext/src/spat/hoa_common.h | 3 - ceammc/ext/src/spat/hoa_connections.cpp | 8 +- ceammc/ext/src/spat/hoa_connections.h | 6 +- ceammc/ext/src/spat/hoa_decoder.cpp | 12 +- ceammc/ext/src/spat/hoa_decoder.h | 3 +- ceammc/ext/src/spat/hoa_map.cpp | 5 +- ceammc/ext/src/spat/hoa_optim.h | 1 + ceammc/ext/src/spat/hoa_process.cpp | 38 +- ceammc/ext/src/spat/hoa_process.h | 20 +- ceammc/ext/src/spat/hoa_process_instance.cpp | 11 +- ceammc/ext/src/spat/hoa_process_props.cpp | 18 +- ceammc/ext/src/spat/hoa_process_props.h | 2 +- ceammc/ext/src/spat/hoa_recomposer.h | 5 +- ceammc/ext/src/spat/pan_spread.cpp | 2 +- ceammc/ext/src/spat/spat_pan2.cpp | 12 - ceammc/ext/src/spat/spat_pan2.h | 1116 - ceammc/ext/src/spat/spat_pan4.cpp | 26 +- ceammc/ext/src/spat/spat_pan4.h | 331 +- ceammc/ext/src/spat/spat_pan8.h | 362 +- ceammc/ext/src/spat/spat_zita6x8.h | 2951 +- ceammc/ext/src/spat/spat_zita8.h | 880 +- ceammc/ext/src/string/string_format.cpp | 18 +- ceammc/ext/src/string/string_format.h | 4 +- ceammc/ext/src/string/string_join.cpp | 58 +- ceammc/ext/src/string/string_join.h | 13 +- ceammc/ext/src/string/string_match.cpp | 10 +- ceammc/ext/src/string/string_match.h | 4 +- ceammc/ext/src/string/string_property.cpp | 29 +- ceammc/ext/src/string/string_property.h | 2 +- ceammc/ext/src/string/string_split.cpp | 18 +- ceammc/ext/src/string/string_str.cpp | 34 +- ceammc/ext/src/string/string_str.h | 10 +- ceammc/ext/src/string/symbol_equal.cpp | 10 +- ceammc/ext/src/string/symbol_equal.h | 2 +- ceammc/ext/src/string/symbol_num_compare.cpp | 8 +- ceammc/ext/src/string/symbol_num_compare.h | 2 +- ceammc/ext/src/string/symbol_to_int.cpp | 4 +- ceammc/ext/src/synth/CMakeLists.txt | 19 +- ceammc/ext/src/synth/fx_risset_tone.h | 1284 - ceammc/ext/src/synth/mod_synth.cpp | 19 +- ceammc/ext/src/synth/stksynth.cpp | 16 +- ceammc/ext/src/synth/stksynth.h | 10 +- ceammc/ext/src/synth/synth_birds.cpp | 6 +- ceammc/ext/src/synth/synth_birds.h | 871 +- ceammc/ext/src/synth/synth_church_bell.h | 1000 +- ceammc/ext/src/synth/synth_clap.cpp | 123 + ceammc/ext/src/synth/synth_clap.h | 863 + ceammc/ext/src/synth/synth_dubdub.cpp | 2 - ceammc/ext/src/synth/synth_dubdub.h | 377 +- ceammc/ext/src/synth/synth_dx7.cpp | 2 - ceammc/ext/src/synth/synth_dx7.h | 2491 +- ceammc/ext/src/synth/synth_eguitar.cpp | 2 - ceammc/ext/src/synth/synth_eguitar.h | 536 +- ceammc/ext/src/synth/synth_english_bell.h | 1000 +- ceammc/ext/src/synth/synth_faust_with_freq.h | 35 +- ceammc/ext/src/synth/synth_fgrain.cpp | 4 +- ceammc/ext/src/synth/synth_fgrain.h | 2 +- ceammc/ext/src/synth/synth_french_bell.h | 1000 +- ceammc/ext/src/synth/synth_german_bell.h | 998 +- ceammc/ext/src/synth/synth_glass_harm.cpp | 2 - ceammc/ext/src/synth/synth_glass_harm.h | 1548 +- ceammc/ext/src/synth/synth_glitch.cpp | 30 +- ceammc/ext/src/synth/synth_harpsichord.cpp | 2 - ceammc/ext/src/synth/synth_harpsichord.h | 1411 +- ceammc/ext/src/synth/synth_hat.cpp | 123 + ceammc/ext/src/synth/synth_hat.h | 889 + ceammc/ext/src/synth/synth_kick.cpp | 14 +- ceammc/ext/src/synth/synth_kick.h | 504 +- ceammc/ext/src/synth/synth_kick2.cpp | 123 + ceammc/ext/src/synth/synth_kick2.h | 902 + ceammc/ext/src/synth/synth_ks.cpp | 2 - ceammc/ext/src/synth/synth_ks.h | 522 +- ceammc/ext/src/synth/synth_marimba.cpp | 2 - ceammc/ext/src/synth/synth_marimba.h | 1228 +- ceammc/ext/src/synth/synth_piano.cpp | 2 - ceammc/ext/src/synth/synth_piano.h | 1897 +- ceammc/ext/src/synth/synth_risset_arp.h | 664 +- ceammc/ext/src/synth/synth_risset_bell.cpp | 12 +- ceammc/ext/src/synth/synth_risset_bell.h | 576 +- ceammc/ext/src/synth/synth_risset_tone.h | 452 +- ceammc/ext/src/synth/synth_russian_bell.h | 1000 +- ceammc/ext/src/synth/synth_snare.cpp | 10 +- ceammc/ext/src/synth/synth_snare.h | 480 +- ceammc/ext/src/synth/synth_standard_bell.h | 1000 +- ceammc/ext/src/synth/synth_voice_fofc.cpp | 52 + ceammc/ext/src/synth/synth_voice_fofc.h | 2866 ++ ceammc/ext/src/synth/synth_voice_fofs.cpp | 52 + ceammc/ext/src/synth/synth_voice_fofs.h | 1196 + ceammc/ext/src/system/system_colorpanel.cpp | 4 +- ceammc/ext/src/system/system_colorpanel.h | 4 +- ceammc/ext/src/system/system_cursor.cpp | 117 +- ceammc/ext/src/system/system_cursor.h | 7 +- ceammc/ext/src/system/system_cursor.tcl | 51 +- ceammc/ext/src/system/system_cursor.tcl.h | 45 +- ceammc/ext/src/system/system_exec.cpp | 12 +- ceammc/ext/src/system/system_exec.h | 2 +- ceammc/ext/src/system/system_getenv.cpp | 16 +- ceammc/ext/src/system/system_getenv.h | 3 +- ceammc/ext/src/tl/tl_cue_new.cpp | 14 +- ceammc/ext/src/tl/tl_cue_new.h | 2 +- ceammc/ext/src/tl/tl_timeline.cpp | 48 +- ceammc/ext/src/tl/tl_timeline.h | 20 +- ceammc/ext/src/ui/CMakeLists.txt | 96 +- ceammc/ext/src/ui/mod_ui.cpp | 8 + ceammc/ext/src/ui/nui_bang.cpp | 45 + ceammc/ext/src/ui/nui_bang.h | 58 + ceammc/ext/src/ui/nui_toggle.cpp | 81 + ceammc/ext/src/ui/nui_toggle.h | 59 + ceammc/ext/src/ui/touchosc/CMakeLists.txt | 9 + ceammc/ext/src/ui/touchosc/control.cpp | 126 + ceammc/ext/src/ui/touchosc/control.h | 57 + ceammc/ext/src/ui/touchosc/layout.cpp | 161 + ceammc/ext/src/ui/touchosc/layout.h | 79 + ceammc/ext/src/ui/touchosc/push_button.cpp | 28 + ceammc/ext/src/ui/touchosc/push_button.h | 30 + ceammc/ext/src/ui/touchosc/tabpage.cpp | 91 + ceammc/ext/src/ui/touchosc/tabpage.h | 57 + ceammc/ext/src/ui/touchosc/xmlnode.cpp | 119 + ceammc/ext/src/ui/touchosc/xmlnode.h | 80 + ceammc/ext/src/ui/ui_arrayview.cpp | 96 +- ceammc/ext/src/ui/ui_bang.cpp | 6 +- ceammc/ext/src/ui/ui_bang.h | 4 +- ceammc/ext/src/ui/ui_colorpanel.cpp | 63 +- ceammc/ext/src/ui/ui_colorpanel.h | 1 + ceammc/ext/src/ui/ui_display.cpp | 94 +- ceammc/ext/src/ui/ui_display.h | 1 + ceammc/ext/src/ui/ui_dsp.cpp | 4 +- ceammc/ext/src/ui/ui_dsp.h | 2 +- ceammc/ext/src/ui/ui_env.cpp | 99 +- ceammc/ext/src/ui/ui_env.h | 37 +- ceammc/ext/src/ui/ui_gain.cpp | 16 +- ceammc/ext/src/ui/ui_gain.h | 2 +- ceammc/ext/src/ui/ui_gain2.cpp | 4 +- ceammc/ext/src/ui/ui_icon.cpp | 84 +- ceammc/ext/src/ui/ui_incdec.cpp | 35 +- ceammc/ext/src/ui/ui_keyboard.cpp | 2 +- ceammc/ext/src/ui/ui_knob.cpp | 39 +- ceammc/ext/src/ui/ui_knob.h | 4 +- ceammc/ext/src/ui/ui_label.cpp | 19 +- ceammc/ext/src/ui/ui_link.cpp | 14 +- ceammc/ext/src/ui/ui_matrix.cpp | 33 +- ceammc/ext/src/ui/ui_matrix.h | 4 +- ceammc/ext/src/ui/ui_menu.cpp | 3 +- ceammc/ext/src/ui/ui_meter.cpp | 42 +- ceammc/ext/src/ui/ui_meter.tcl | 166 +- ceammc/ext/src/ui/ui_meter.tcl.h | 153 +- ceammc/ext/src/ui/ui_mouse_filter.cpp | 4 +- ceammc/ext/src/ui/ui_mouse_filter.h | 2 +- ceammc/ext/src/ui/ui_mouse_route.cpp | 51 +- ceammc/ext/src/ui/ui_mouse_route.h | 2 +- ceammc/ext/src/ui/ui_number.cpp | 21 +- ceammc/ext/src/ui/ui_number.h | 1 + ceammc/ext/src/ui/ui_number_tilde.cpp | 4 +- ceammc/ext/src/ui/ui_plot_tilde.cpp | 29 +- ceammc/ext/src/ui/ui_preset.cpp | 2 +- ceammc/ext/src/ui/ui_radio.cpp | 100 +- ceammc/ext/src/ui/ui_radio.h | 4 +- ceammc/ext/src/ui/ui_rslider.cpp | 1 + ceammc/ext/src/ui/ui_scope.cpp | 14 +- ceammc/ext/src/ui/ui_single_value.cpp | 17 +- ceammc/ext/src/ui/ui_single_value.h | 6 +- ceammc/ext/src/ui/ui_slider.cpp | 13 +- ceammc/ext/src/ui/ui_slider.h | 4 + ceammc/ext/src/ui/ui_slider2d.cpp | 147 +- ceammc/ext/src/ui/ui_slider2d.h | 8 +- ceammc/ext/src/ui/ui_slider2d.tcl | 136 + ceammc/ext/src/ui/ui_slider2d.tcl.h | 117 + ceammc/ext/src/ui/ui_sliders.cpp | 49 +- ceammc/ext/src/ui/ui_sliders.h | 8 +- ceammc/ext/src/ui/ui_spectroscope.cpp | 42 +- ceammc/ext/src/ui/ui_spectroscope.h | 6 +- ceammc/ext/src/ui/ui_tab.cpp | 131 +- ceammc/ext/src/ui/ui_tab.h | 8 + ceammc/ext/src/ui/ui_toggle.cpp | 25 +- ceammc/ext/src/ui/ui_toggle.h | 6 +- ceammc/ext/src/ui/ui_touchosc.cpp | 351 + ceammc/ext/src/ui/ui_touchosc.h | 45 + ceammc/ext/src/window/window.cpp | 8 +- ceammc/ext/src/window/window.h | 2 +- ceammc/ext/tests/CMakeLists.txt | 11 +- ceammc/ext/tests/Catch2/catch.hpp | 1112 +- ceammc/ext/tests/an/CMakeLists.txt | 1 + ceammc/ext/tests/an/test_an_zero_tilde.cpp | 149 + .../ext/tests/array/test_array_grain_expr.cpp | 41 +- ceammc/ext/tests/array/test_array_grainer.cpp | 354 +- .../ext/tests/array/test_array_play_tilde.cpp | 17 + .../ext/tests/array/test_array_plot_tilde.cpp | 2 +- ceammc/ext/tests/base/CMakeLists.txt | 1 + ceammc/ext/tests/base/test_base_dac.cpp | 87 + ceammc/ext/tests/base/test_base_msg_sched.cpp | 2 +- ceammc/ext/tests/base/test_base_obj_props.cpp | 5 +- ceammc/ext/tests/base/test_base_xfade.cpp | 24 +- ceammc/ext/tests/base/test_base_xfade2.cpp | 7 + ceammc/ext/tests/base/test_base_z_tilde.cpp | 71 + ceammc/ext/tests/cells/CMakeLists.txt | 7 + ceammc/ext/tests/cells/test_args2.cpp | 337 + ceammc/ext/tests/cells/test_array.cpp | 36 + ceammc/ext/tests/cells/test_atom2.cpp | 10 +- ceammc/ext/tests/cells/test_atomlist.cpp | 71 - ceammc/ext/tests/cells/test_atomlist2.cpp | 125 - ceammc/ext/tests/cells/test_atomlist_view.cpp | 185 +- .../cells/test_base64.cpp} | 34 +- ceammc/ext/tests/cells/test_data.cpp | 3 +- ceammc/ext/tests/cells/test_datatype_dict.cpp | 359 +- .../ext/tests/cells/test_datatype_mlist.cpp | 160 +- ceammc/ext/tests/cells/test_datatype_set.cpp | 235 + .../ext/tests/cells/test_datatype_string.cpp | 94 +- ceammc/ext/tests/cells/test_dsp.cpp | 61 + ceammc/ext/tests/cells/test_fn_list2.cpp | 44 +- ceammc/ext/tests/cells/test_format.cpp | 37 +- ceammc/ext/tests/cells/test_json.cpp | 62 +- ceammc/ext/tests/cells/test_parser_clone.cpp | 265 + .../tests/cells/test_parser_data_string.cpp | 75 +- .../tests/cells/test_parser_data_string3.cpp | 204 + ceammc/ext/tests/cells/test_parser_music.cpp | 118 +- .../ext/tests/cells/test_parser_numeric.cpp | 2 + ceammc/ext/tests/cells/test_parser_units.cpp | 18 + ceammc/ext/tests/cells/test_platform.cpp | 2 +- .../ext/tests/cells/test_property_float.cpp | 11 +- ceammc/ext/tests/cells/test_random.cpp | 74 + ceammc/ext/tests/cells/test_string.cpp | 466 +- ceammc/ext/tests/conv/CMakeLists.txt | 2 +- ceammc/ext/tests/conv/test_conv_lin2exp.cpp | 14 +- .../ext/tests/conv/test_conv_note2guido.cpp | 72 + ceammc/ext/tests/data/test_data_dict.cpp | 6 +- ceammc/ext/tests/data/test_data_dict_pass.cpp | 4 +- .../ext/tests/data/test_data_dict_reject.cpp | 6 +- .../ext/tests/data/test_data_global_list.cpp | 68 +- .../ext/tests/data/test_data_local_list.cpp | 3 +- ceammc/ext/tests/data/test_data_mlist.cpp | 4 +- ceammc/ext/tests/data/test_data_set.cpp | 9 +- ceammc/ext/tests/env/test_env_asr.cpp | 2 +- ceammc/ext/tests/env/test_env_to_vline.cpp | 22 +- ceammc/ext/tests/flow/CMakeLists.txt | 6 + ceammc/ext/tests/flow/test_flow_count.cpp | 24 + ceammc/ext/tests/flow/test_flow_pack.cpp | 4 +- ceammc/ext/tests/flow/test_flow_speedlim.cpp | 6 +- ceammc/ext/tests/flow/test_route_any.cpp | 90 + ceammc/ext/tests/flow/test_route_bang.cpp | 98 + ceammc/ext/tests/flow/test_route_list.cpp | 96 + ceammc/ext/tests/flow/test_route_prop.cpp | 94 + ceammc/ext/tests/flow/test_route_random.cpp | 71 + ceammc/ext/tests/flow/test_route_symbol.cpp | 93 + ceammc/ext/tests/flow/test_seq_counter.cpp | 176 +- ceammc/ext/tests/flow/test_seq_toggles.cpp | 19 + ceammc/ext/tests/flt/CMakeLists.txt | 2 + ceammc/ext/tests/flt/test_flt_eq10.cpp | 83 + .../ext/tests/flt/test_flt_filterbank5x1.cpp | 84 + ceammc/ext/tests/fx/test_fx_tapiir.cpp | 20 + ceammc/ext/tests/lang/CMakeLists.txt | 32 + .../lang/test_lang_base.cpp} | 22 +- ceammc/ext/tests/lang/test_lang_base.h | 14 + ceammc/ext/tests/lang/test_lang_luajit.cpp | 152 + ceammc/ext/tests/list/CMakeLists.txt | 3 + ceammc/ext/tests/list/test_list_count.cpp | 2 +- ceammc/ext/tests/list/test_list_equal.cpp | 2 +- ceammc/ext/tests/list/test_list_map.cpp | 147 + ceammc/ext/tests/list/test_list_pass.cpp | 103 + ceammc/ext/tests/list/test_list_prepend.cpp | 2 +- ceammc/ext/tests/list/test_list_range.cpp | 81 +- ceammc/ext/tests/list/test_list_reject.cpp | 99 + ceammc/ext/tests/list/test_list_remove.cpp | 6 + ceammc/ext/tests/list/test_list_repeat.cpp | 30 +- ceammc/ext/tests/list/test_list_xcontains.cpp | 14 +- ceammc/ext/tests/math/test_math_and.cpp | 2 +- ceammc/ext/tests/math/test_math_or.cpp | 2 +- ceammc/ext/tests/midi/CMakeLists.txt | 3 + ceammc/ext/tests/midi/test_midi_arp.cpp | 363 + ceammc/ext/tests/midi/test_midi_modus.cpp | 266 + .../ext/tests/midi/test_midi_prg_to_str.cpp | 2 +- ceammc/ext/tests/midi/test_midi_prop.cpp | 46 + ceammc/ext/tests/misc/test_misc_fluid.cpp | 14 +- ceammc/ext/tests/music/test_music_scale.cpp | 119 +- ceammc/ext/tests/music/test_music_theory.cpp | 10 +- .../music/test_music_theory_pitch_class.cpp | 12 +- ceammc/ext/tests/net/CMakeLists.txt | 8 +- ceammc/ext/tests/net/test_net_osc_receive.cpp | 179 + ceammc/ext/tests/net/test_net_osc_send.cpp | 236 + ceammc/ext/tests/net/test_net_osc_server.cpp | 154 + ceammc/ext/tests/path/CMakeLists.txt | 7 + ceammc/ext/tests/path/test_path_file.cpp | 398 + ceammc/ext/tests/path/test_path_lsdir.cpp | 4 +- ceammc/ext/tests/path/test_path_monitor.cpp | 119 + ceammc/ext/tests/path/test_path_pattern.cpp | 100 + ceammc/ext/tests/path/test_path_search.cpp | 11 +- ceammc/ext/tests/preset/test_preset_lib.cpp | 10 +- .../ext/tests/preset/test_preset_symbol.cpp | 27 +- ceammc/ext/tests/random/test_random_atom.cpp | 56 +- .../ext/tests/spat/test_spat_hoa_process.cpp | 2 +- .../ext/tests/spat/test_spat_pan_spread.cpp | 26 +- .../ext/tests/string/test_string_contains.cpp | 2 +- .../ext/tests/string/test_string_format.cpp | 6 +- ceammc/ext/tests/string/test_string_join.cpp | 48 +- .../ext/tests/string/test_string_replace.cpp | 4 +- ceammc/ext/tests/string/test_string_split.cpp | 8 +- ceammc/ext/tests/string/test_string_str.cpp | 63 +- ceammc/ext/tests/test0.lua | 22 + ceammc/ext/tests/test1.lua | 8 + ceammc/ext/tests/test_arduino_thread.cpp | 2 +- ceammc/ext/tests/test_base.h | 33 +- ceammc/ext/tests/test_baseobject.cpp | 26 +- ceammc/ext/tests/test_datatype_env.cpp | 120 +- ceammc/ext/tests/test_datatype_property.cpp | 4 +- ceammc/ext/tests/test_datatypes.cpp | 37 +- ceammc/ext/tests/test_datatypes.h | 18 +- ceammc/ext/tests/test_external.h | 23 +- ceammc/ext/tests/test_factory.cpp | 4 +- ceammc/ext/tests/test_macro.h | 5 + ceammc/ext/tests/test_sound.h | 90 +- ceammc/ext/tests/test_sound_minimp3.cpp | 26 + ceammc/ext/tests/tests_main.cpp | 2 + ceammc/ext/tests/ui/CMakeLists.txt | 8 +- ceammc/ext/tests/ui/test_ui_aview.cpp | 6 +- ceammc/ext/tests/ui/test_ui_bang.cpp | 41 +- ceammc/ext/tests/ui/test_ui_colorpanel.cpp | 8 +- ceammc/ext/tests/ui/test_ui_factory.cpp | 4 +- ceammc/ext/tests/ui/test_ui_knob.cpp | 18 +- ceammc/ext/tests/ui/test_ui_radio.cpp | 2 +- ceammc/ext/tests/ui/test_ui_sliders.cpp | 10 +- ceammc/ext/tests/ui/test_ui_tab.cpp | 153 + ceammc/ext/tests/wrapper/test_wrapper_base.h | 10 +- .../ext/tests/wrapper/test_wrapper_class.cpp | 31 +- .../wrapper/test_wrapper_static_method.cpp | 23 +- ceammc/external_version.cmake | 2 +- ceammc/extra/CMakeLists.txt | 18 +- ceammc/extra/SoundTouch/pd/soundtouch-help.pd | 29 +- ceammc/extra/SoundTouch/pd/soundtouch_lib.xml | 4 +- .../extra/SoundTouch/pd/soundtouch_tilde.cpp | 3 +- .../extra/SoundTouch/pd/soundtouch~-help.pd | 106 +- ceammc/extra/SoundTouch/pd/soundtouch~.pddoc | 1 - ceammc/extra/airwindows/Infinity/Infinity.cpp | 2 + ceammc/extra/artnet/CMakeLists.txt | 1 + ceammc/extra/artnet/libartnet | 1 + ceammc/extra/aubio/aubio | 2 +- ceammc/extra/faust/CMakeLists.txt | 45 +- ceammc/extra/flext/xsample/xsample | 2 +- ceammc/extra/httplib/CMakeLists.txt | 2 + ceammc/extra/httplib/cpp-httplib | 1 + ceammc/extra/miniz/CMakeLists.txt | 1 + ceammc/extra/miniz/miniz | 1 + ceammc/extra/muparser/CMakeLists.txt | 26 +- ceammc/extra/muparser/muparser | 2 +- ceammc/extra/reflex/RE-flex | 2 +- ceammc/extra/serial/CMakeLists.txt | 6 +- ceammc/extra/serial/serial | 2 +- ceammc/extra/soxr/CMakeLists.txt | 6 +- ceammc/extra/stk/CMakeLists.txt | 9 + ceammc/extra/stk/stk | 2 +- ceammc/extra/subprocess/tiny-process-library | 2 +- ceammc/extra/tcltk/CMakeLists.txt | 3 + ceammc/extra/tcltk/ctext/ctext.tcl | 1113 + ceammc/extra/tcltk/ctext/pkgIndex.tcl | 1 + ceammc/faust/an_rms.dsp | 2 +- ceammc/faust/dyn_comp.dsp | 3 +- ceammc/faust/dyn_comp.dsp.json | 36 +- ceammc/faust/dyn_comp2.dsp | 3 +- ceammc/faust/dyn_comp2.dsp.json | 36 +- ceammc/faust/dyn_gate.dsp.json | 19 +- ceammc/faust/dyn_gate2.dsp.json | 19 +- ceammc/faust/dyn_limit.dsp | 2 + ceammc/faust/dyn_limit2.dsp | 2 + ceammc/faust/dyn_softclip.dsp | 4 +- ceammc/faust/env_adsr.dsp | 2 + ceammc/faust/env_ar.dsp | 2 + ceammc/faust/env_asr.dsp | 2 + ceammc/faust/env_follow.dsp | 6 +- ceammc/faust/env_smooth.dsp | 2 + ceammc/faust/flt_biquad.dsp | 2 + ceammc/faust/flt_bpf12.dsp.json | 10 +- ceammc/faust/flt_bpf24.dsp.json | 10 +- ceammc/faust/flt_c_bpf.dsp.json | 10 +- ceammc/faust/flt_c_highshelf.dsp.json | 11 +- ceammc/faust/flt_c_hpf.dsp.json | 10 +- ceammc/faust/flt_c_lowshelf.dsp.json | 11 +- ceammc/faust/flt_c_lpf.dsp.json | 10 +- ceammc/faust/flt_c_notch.dsp.json | 10 +- ceammc/faust/flt_c_peak.dsp.json | 11 +- ceammc/faust/flt_dcblock.dsp | 2 + ceammc/faust/flt_dcblock2.dsp | 2 + ceammc/faust/flt_eq10.dsp.json | 22 +- ceammc/faust/flt_eq_peak.dsp.json | 13 +- ceammc/faust/flt_eq_peak_cq.dsp.json | 13 +- ceammc/faust/flt_fb_comb.dsp | 2 + ceammc/faust/flt_fb_comb.dsp.json | 19 +- ceammc/faust/flt_ff_comb.dsp | 2 + ceammc/faust/flt_ff_comb.dsp.json | 19 +- ceammc/faust/flt_filterbank5x1.dsp.json | 17 +- ceammc/faust/flt_highshelf.dsp.json | 10 +- ceammc/faust/flt_hpf12.dsp.json | 9 +- ceammc/faust/flt_hpf24.dsp.json | 9 +- ceammc/faust/flt_lowshelf.dsp.json | 10 +- ceammc/faust/flt_lpf12.dsp.json | 9 +- ceammc/faust/flt_lpf24.dsp.json | 9 +- ceammc/faust/flt_moog_vcf.dsp.json | 11 +- ceammc/faust/flt_notch.dsp.json | 10 +- ceammc/faust/flt_resonbp.dsp.json | 10 +- ceammc/faust/flt_resonhp.dsp | 8 + ceammc/faust/flt_resonhp.dsp.json | 76 + ceammc/faust/flt_resonlp.dsp | 8 + ceammc/faust/flt_resonlp.dsp.json | 73 + ceammc/faust/fx_bitdown.dsp | 2 +- ceammc/faust/fx_bitdown.dsp.json | 14 +- ceammc/faust/fx_chorus.dsp.json | 16 +- ceammc/faust/fx_dattorro.dsp | 44 + ceammc/faust/fx_dattorro.dsp.json | 146 + ceammc/faust/fx_distortion.dsp.json | 15 +- ceammc/faust/fx_distortion1.dsp.json | 34 +- ceammc/faust/fx_distortion2.dsp.json | 25 +- ceammc/faust/fx_distortion3.dsp.json | 17 +- ceammc/faust/fx_drive.dsp.json | 13 +- ceammc/faust/fx_drone_box.dsp.json | 15 +- ceammc/faust/fx_echo.dsp.json | 16 +- ceammc/faust/fx_echo2.dsp.json | 16 +- ceammc/faust/fx_flanger.dsp.json | 20 +- ceammc/faust/fx_freeverb.dsp.json | 20 +- ceammc/faust/fx_freeverb2.dsp.json | 24 +- ceammc/faust/fx_freqshift.dsp | 2 +- ceammc/faust/fx_granulator.dsp.json | 13 +- ceammc/faust/fx_greyhole.dsp.json | 25 +- ceammc/faust/fx_jcrev.dsp | 15 + ceammc/faust/fx_jcrev.dsp.json | 74 + ceammc/faust/fx_pitchshift.dsp.json | 16 +- ceammc/faust/fx_pitchshift_sig.dsp.json | 15 +- ceammc/faust/fx_recho.dsp.json | 22 +- ceammc/faust/fx_reverb_duck.dsp.json | 125 - ceammc/faust/fx_room.dsp | 8 +- ceammc/faust/fx_room.dsp.json | 21 +- ceammc/faust/fx_satrev.dsp | 8 + ceammc/faust/fx_satrev.dsp.json | 79 + ceammc/faust/fx_sdelay.dsp.json | 16 +- ceammc/faust/fx_secho.dsp.json | 15 +- ceammc/faust/fx_shimmer.dsp.json | 35 +- ceammc/faust/fx_tapiir.dsp.json | 88 +- ceammc/faust/fx_vocoder.dsp.json | 21 +- ceammc/faust/fx_wahwah.dsp.json | 17 +- ceammc/faust/fx_zita_rev1.dsp | 2 +- ceammc/faust/fx_zita_rev1.dsp.json | 51 +- ceammc/faust/live_capture.dsp | 12 +- ceammc/faust/noise_chua.dsp | 25 + ceammc/faust/noise_chua.dsp.json | 130 + ceammc/faust/noise_colored.dsp | 8 + ceammc/faust/noise_colored.dsp.json | 68 + ceammc/faust/noise_crackle.dsp.json | 15 +- ceammc/faust/noise_lfreq.dsp.json | 17 +- ceammc/faust/noise_lfreq0.dsp.json | 13 +- ceammc/faust/noise_pink.dsp.json | 10 +- ceammc/faust/noise_white.dsp.json | 8 +- ceammc/faust/spat_pan2.dsp | 6 - ceammc/faust/spat_pan4.dsp.json | 11 +- ceammc/faust/spat_pan8.dsp.json | 10 +- ceammc/faust/spat_zita6x8.dsp.json | 43 +- ceammc/faust/spat_zita8.dsp.json | 18 +- ceammc/faust/synth_birds.dsp | 2 +- ceammc/faust/synth_birds.dsp.json | 24 +- ceammc/faust/synth_church_bell.dsp.json | 22 +- ceammc/faust/synth_clap.dsp | 14 + ceammc/faust/synth_clap.dsp.json | 108 + ceammc/faust/synth_dubdub.dsp.json | 22 +- ceammc/faust/synth_dx7.dsp.json | 102 +- ceammc/faust/synth_eguitar.dsp.json | 23 +- ceammc/faust/synth_english_bell.dsp.json | 22 +- ceammc/faust/synth_french_bell.dsp.json | 22 +- ceammc/faust/synth_german_bell.dsp.json | 20 +- ceammc/faust/synth_glass_harm.dsp.json | 28 +- ceammc/faust/synth_harpsichord.dsp.json | 31 +- ceammc/faust/synth_hat.dsp | 16 + ceammc/faust/synth_hat.dsp.json | 121 + ceammc/faust/synth_kick.dsp | 2 +- ceammc/faust/synth_kick.dsp.json | 18 +- ceammc/faust/synth_kick2.dsp | 17 + ceammc/faust/synth_kick2.dsp.json | 115 + ceammc/faust/synth_ks.dsp | 18 +- ceammc/faust/synth_ks.dsp.json | 32 +- ceammc/faust/synth_marimba.dsp.json | 24 +- ceammc/faust/synth_piano.dsp.json | 25 +- ceammc/faust/synth_risset_arp.dsp.json | 23 +- ceammc/faust/synth_risset_bell.dsp | 3 +- ceammc/faust/synth_risset_bell.dsp.json | 18 +- ceammc/faust/synth_risset_tone.dsp.json | 13 +- ceammc/faust/synth_russian_bell.dsp.json | 22 +- ceammc/faust/synth_snare.dsp.json | 16 +- ceammc/faust/synth_standard_bell.dsp.json | 22 +- ceammc/faust/synth_voice_fofc.dsp | 42 + ceammc/faust/synth_voice_fofc.dsp.json | 192 + ceammc/faust/synth_voice_fofs.dsp | 41 + ceammc/faust/synth_voice_fofs.dsp.json | 187 + ceammc/gui/icons/CMakeLists.txt | 9 +- .../buttonbar/cyan/{bng.gif => bang.gif} | Bin ceammc/gui/icons/buttonbar/cyan/bpfunc.gif | Bin 809 -> 0 bytes .../buttonbar/cyan/{hradio.gif => hrd.gif} | Bin .../buttonbar/cyan/{hslider.gif => hsl.gif} | Bin ceammc/gui/icons/buttonbar/cyan/listbox.gif | Bin 0 -> 200 bytes .../buttonbar/cyan/{numbox.gif => number.gif} | Bin .../buttonbar/cyan/{vradio.gif => vrd.gif} | Bin .../buttonbar/cyan/{vslider.gif => vsl.gif} | Bin ceammc/gui/icons/buttonbar/cyan/vumeter.gif | Bin 177 -> 0 bytes ceammc/gui/icons/buttonbar/dark/bang.png | Bin 0 -> 298 bytes ceammc/gui/icons/buttonbar/dark/bang.xcf | Bin 0 -> 1170 bytes ceammc/gui/icons/buttonbar/dark/display.png | Bin 0 -> 172 bytes ceammc/gui/icons/buttonbar/dark/display.xcf | Bin 0 -> 2410 bytes ceammc/gui/icons/buttonbar/dark/dsp.png | Bin 0 -> 215 bytes ceammc/gui/icons/buttonbar/dark/dsp.xcf | Bin 0 -> 2358 bytes ceammc/gui/icons/buttonbar/dark/env.png | Bin 0 -> 287 bytes ceammc/gui/icons/buttonbar/dark/env.xcf | Bin 0 -> 2944 bytes ceammc/gui/icons/buttonbar/dark/floatatom.png | Bin 0 -> 271 bytes ceammc/gui/icons/buttonbar/dark/floatatom.xcf | Bin 0 -> 1318 bytes ceammc/gui/icons/buttonbar/dark/hrd.png | Bin 0 -> 158 bytes ceammc/gui/icons/buttonbar/dark/hrd.xcf | Bin 0 -> 1448 bytes ceammc/gui/icons/buttonbar/dark/hsl.png | Bin 0 -> 170 bytes ceammc/gui/icons/buttonbar/dark/hsl.xcf | Bin 0 -> 2353 bytes ceammc/gui/icons/buttonbar/dark/keyboard.png | Bin 0 -> 176 bytes ceammc/gui/icons/buttonbar/dark/keyboard.xcf | Bin 0 -> 2113 bytes ceammc/gui/icons/buttonbar/dark/knob.png | Bin 0 -> 507 bytes ceammc/gui/icons/buttonbar/dark/knob.xcf | Bin 0 -> 1582 bytes ceammc/gui/icons/buttonbar/dark/listbox.png | Bin 0 -> 319 bytes ceammc/gui/icons/buttonbar/dark/listbox.xcf | Bin 0 -> 1354 bytes ceammc/gui/icons/buttonbar/dark/menuarray.png | Bin 0 -> 479 bytes ceammc/gui/icons/buttonbar/dark/menuarray.xcf | Bin 0 -> 1582 bytes ceammc/gui/icons/buttonbar/dark/msg.png | Bin 0 -> 161 bytes ceammc/gui/icons/buttonbar/dark/msg.xcf | Bin 0 -> 1072 bytes ceammc/gui/icons/buttonbar/dark/mycnv.png | Bin 0 -> 118 bytes ceammc/gui/icons/buttonbar/dark/mycnv.xcf | Bin 0 -> 844 bytes ceammc/gui/icons/buttonbar/dark/number.png | Bin 0 -> 276 bytes ceammc/gui/icons/buttonbar/dark/number.xcf | Bin 0 -> 1501 bytes ceammc/gui/icons/buttonbar/dark/obj.png | Bin 0 -> 176 bytes ceammc/gui/icons/buttonbar/dark/obj.xcf | Bin 0 -> 1198 bytes ceammc/gui/icons/buttonbar/dark/preset.png | Bin 0 -> 636 bytes ceammc/gui/icons/buttonbar/dark/preset.xcf | Bin 0 -> 1930 bytes ceammc/gui/icons/buttonbar/dark/scope.png | Bin 0 -> 407 bytes ceammc/gui/icons/buttonbar/dark/scope.xcf | Bin 0 -> 1804 bytes ceammc/gui/icons/buttonbar/dark/slider2d.png | Bin 0 -> 204 bytes ceammc/gui/icons/buttonbar/dark/slider2d.xcf | Bin 0 -> 1366 bytes ceammc/gui/icons/buttonbar/dark/sliders.png | Bin 0 -> 220 bytes ceammc/gui/icons/buttonbar/dark/sliders.xcf | Bin 0 -> 1780 bytes .../gui/icons/buttonbar/dark/spectroscope.png | Bin 0 -> 490 bytes .../gui/icons/buttonbar/dark/spectroscope.xcf | Bin 0 -> 2277 bytes .../gui/icons/buttonbar/dark/symbolatom.png | Bin 0 -> 343 bytes .../gui/icons/buttonbar/dark/symbolatom.xcf | Bin 0 -> 1486 bytes ceammc/gui/icons/buttonbar/dark/text.png | Bin 0 -> 220 bytes ceammc/gui/icons/buttonbar/dark/text.xcf | Bin 0 -> 1120 bytes ceammc/gui/icons/buttonbar/dark/toggle.png | Bin 0 -> 250 bytes ceammc/gui/icons/buttonbar/dark/toggle.xcf | Bin 0 -> 1354 bytes ceammc/gui/icons/buttonbar/dark/vrd.png | Bin 0 -> 157 bytes ceammc/gui/icons/buttonbar/dark/vrd.xcf | Bin 0 -> 1360 bytes ceammc/gui/icons/buttonbar/dark/vsl.png | Bin 0 -> 161 bytes ceammc/gui/icons/buttonbar/dark/vsl.xcf | Bin 0 -> 1276 bytes ceammc/gui/icons/make_icons.sh | 9 +- ceammc/gui/icons/pd_ceammc.icns | Bin 96545 -> 96385 bytes ceammc/gui/icons/pd_ceammc.svg | 444 - ceammc/gui/icons/pd_ceammc2.svg | 426 - ceammc/gui/icons/pd_ceammc3.svg | 428 - ceammc/gui/icons/pd_ceammc5.svg | 93 +- ceammc/gui/icons/pd_ceammc_win.ico | Bin 75003 -> 75044 bytes ceammc/gui/icons/pd_ceammc_win_16.svg | 117 +- ceammc/gui/icons/pd_ceammc_win_32.svg | 173 +- ceammc/gui/icons/pd_ceammc_win_48.svg | 210 +- ceammc/gui/icons/pd_ceammc_win_64.svg | 196 +- ceammc/gui/icons/pd_doc.icns | Bin 251942 -> 260541 bytes ceammc/gui/icons/puredata-ceammc.png | Bin 11886 -> 11872 bytes ceammc/gui/icons/puredata-ceammc_win.png | Bin 5062 -> 5093 bytes ceammc/gui/plugins/CMakeLists.txt | 5 +- ceammc/gui/plugins/buttonbar.tmpl.tcl | 93 +- .../gui/plugins/ceammc_buttonbar-plugin.tcl | 286 +- ceammc/gui/plugins/ceammc_dnd-plugin.tcl | 236 + ceammc/gui/plugins/ceammc_editmode-plugin.tcl | 7 +- .../gui/plugins/ceammc_popup_menu_ceammc.tcl | 120 +- ceammc/gui/plugins/ceammc_popup_menu_tree.tcl | 120 +- .../completion-plugin/completion-plugin.tcl | 87 +- .../gui/plugins/generate_buttonbar_plugin.sh | 8 +- ceammc/license_template.txt | 13 + ceammc/py/ceammc/cppexternal.py | 116 +- ceammc/py/ceammc/template.py | 42 +- ceammc/py/extension_generator.py | 10 +- ceammc/py/generate_math.py | 4 +- ceammc/scripts/CMakeLists.txt | 3 + ceammc/scripts/list_faust_targets.cmake | 5 + ceammc/scripts/travis_before_install.sh | 17 - ceammc/scripts/travis_configure.sh | 28 - ceammc/scripts/travis_coveralls.sh | 12 - ceammc/scripts/travis_package.sh | 11 - ceammc/scripts/vanilla_diff_src_files.sh | 34 + cmake/CheckLSBTypes.cmake | 57 +- cmake/FindLibSamplerate.cmake | 27 + cmake/FindRAGEL.cmake | 2 +- cmake/FindRHVoice.cmake | 66 + cmake/Findliblo.cmake | 68 + cmake/PdPlatform.cmake | 20 +- cmake/TargetArch.cmake | 6 + cmake/build_options.cmake | 12 +- cmake/cmake_build_mac.cmake | 1 - cmake/package.cmake | 2 - cmake/summary.cmake | 79 +- cmake/version.cmake | 51 +- doc/1.manual/deken.gif | Bin 0 -> 158852 bytes doc/1.manual/favicon.ico | Bin 0 -> 15406 bytes doc/1.manual/fig1.2.jpg | Bin 4361 -> 5802 bytes doc/1.manual/fig1.3.jpg | Bin 1056 -> 1476 bytes doc/1.manual/fig1.4.png | Bin 1154 -> 4528 bytes doc/1.manual/fig1.5.jpg | Bin 6187 -> 7900 bytes doc/1.manual/fig3.1.jpg | Bin 1201 -> 1739 bytes doc/1.manual/fig3.10.jpg | Bin 2884 -> 3681 bytes doc/1.manual/fig3.2.jpg | Bin 2932 -> 3653 bytes doc/1.manual/fig3.3.jpg | Bin 2177 -> 2954 bytes doc/1.manual/fig3.4.jpg | Bin 2359 -> 3226 bytes doc/1.manual/fig3.5.jpg | Bin 2029 -> 2838 bytes doc/1.manual/fig3.6.jpg | Bin 2977 -> 3383 bytes doc/1.manual/fig3.7.jpg | Bin 2846 -> 4312 bytes doc/1.manual/fig3.8.jpg | Bin 1267 -> 1815 bytes doc/1.manual/fig3.9.jpg | Bin 5708 -> 7867 bytes doc/1.manual/fig7.1.jpg | Bin 2410 -> 4225 bytes doc/1.manual/fig7.2.jpg | Bin 7327 -> 17523 bytes doc/1.manual/fig7.3.jpg | Bin 2588 -> 4908 bytes doc/1.manual/fig7.4.jpg | Bin 3245 -> 6095 bytes doc/1.manual/fig7.5.jpg | Bin 2490 -> 4982 bytes doc/1.manual/fig7.6.jpg | Bin 7758 -> 20680 bytes doc/1.manual/fig8.1.jpg | Bin 2551 -> 4919 bytes doc/1.manual/fig8.2.jpg | Bin 2414 -> 4950 bytes doc/1.manual/fig8.3.jpg | Bin 2036 -> 3745 bytes doc/1.manual/fig8.4.jpg | Bin 3428 -> 6588 bytes doc/2.control.examples/00.INTRO.txt | 2 +- doc/2.control.examples/01.PART1.hello.pd | 48 +- doc/3.audio.examples/A00.intro.pd | 19 +- doc/3.audio.examples/qlist-sampler.txt | 51 +- doc/4.data.structures/05.symbol.text.pd | 142 + doc/4.data.structures/06.array.pd | 228 + doc/4.data.structures/07.graph.on.parent.pd | 86 + doc/4.data.structures/08.file.pd | 51 + doc/4.data.structures/09.sequencer.pd | 173 + doc/4.data.structures/10.interaction.pd | 105 + doc/4.data.structures/11.scaling.pd | 75 + doc/4.data.structures/12.onoff.pd | 123 + doc/4.data.structures/13.array.controls.pd | 36 + ...2.beat-patterns.pd => 14.beat-patterns.pd} | 149 +- doc/4.data.structures/15.sliderule.pd | 334 + doc/4.data.structures/16.partialtracer.pd | 726 + doc/4.data.structures/file.txt | 16 +- doc/5.reference/all_guis.pd | 32 + doc/5.reference/binops-help.pd | 118 + doc/5.reference/binops-other-help.pd | 208 + doc/5.reference/binops-tilde-help.pd | 127 + doc/5.reference/clip-help.pd | 86 +- doc/5.reference/clip~-help.pd | 96 +- doc/5.reference/clone-help.pd | 200 +- doc/5.reference/cnv-help.pd | 698 + doc/5.reference/cos~-help.pd | 92 +- doc/5.reference/cpole~-help.pd | 293 +- doc/5.reference/delay-tilde-objects-help.pd | 127 + doc/5.reference/draw-shapes-help.pd | 131 + doc/5.reference/ds-text.txt | 39 + doc/5.reference/file-help.pd | 1485 + doc/5.reference/fudi-format-parse-help.pd | 143 + doc/5.reference/gui-boxes-help.pd | 335 + doc/5.reference/key-input-help.pd | 71 + doc/5.reference/nbx-help.pd | 567 + doc/5.reference/osc-format-parse-help.pd | 146 + doc/5.reference/pd-messages.pd | 445 + doc/5.reference/radio-help.pd | 536 + doc/5.reference/send-receive-help.pd | 228 + doc/5.reference/send-receive-tilde-help.pd | 103 + doc/5.reference/setsize.txt | 8 +- doc/5.reference/sliders-help.pd | 621 + doc/5.reference/tabsend-receive~-help.pd | 170 + doc/5.reference/throw~-catch~-help.pd | 101 + doc/5.reference/trace-help.pd | 80 + doc/6.externs/makefile | 49 +- doc/6.externs/obj1.c | 2 + doc/6.externs/obj2.c | 3 + doc/6.externs/obj5.c | 1 + doc/7.stuff/soundfile-tools/2.band-pass.pd | 139 + .../soundfile-tools/3.phase-vocoder.pd | 477 + doc/7.stuff/soundfile-tools/4.looper.pd | 530 +- doc/7.stuff/soundfile-tools/5.reverb.pd | 328 +- doc/7.stuff/soundfile-tools/6.vocoder.pd | 524 +- doc/7.stuff/soundfile-tools/README.txt | 4 +- doc/7.stuff/synth/1.poly.synth.pd | 441 +- doc/7.stuff/synth/gadsr.pd | 200 +- doc/7.stuff/synth/numset.pd | 62 +- doc/7.stuff/synth/preset.pd | 98 +- doc/7.stuff/synth/synthvoice.pd | 132 +- doc/7.stuff/tools/sizingtest.pd | 156 +- doc/8.topics/expr.html | 745 + doc/8.topics/fudi.html | 136 + extra/Makefile.am | 6 +- extra/README.txt | 1 + extra/bob~/GNUmakefile.am | 8 +- extra/bob~/bob~-help.pd | 367 +- extra/bob~/bob~.c | 5 +- extra/bonk~/GNUmakefile.am | 6 +- extra/bonk~/bonk~-help.pd | 423 +- extra/bonk~/bonk~.c | 11 +- extra/choice/GNUmakefile.am | 6 +- extra/choice/choice-help.pd | 121 +- extra/complex-mod~-help.pd | 95 +- extra/complex-mod~.pd | 32 +- extra/fiddle~/GNUmakefile.am | 6 +- extra/fiddle~/fiddle~-help.pd | 324 +- extra/fiddle~/fiddle~.c | 8 +- extra/hilbert~-help.pd | 95 +- extra/hilbert~.pd | 34 +- extra/loop~/GNUmakefile.am | 6 +- extra/loop~/loop~-help.pd | 175 +- extra/loop~/test-loop~.pd | 60 +- extra/lrshift~/GNUmakefile.am | 6 +- extra/lrshift~/lrshift~-help.pd | 94 +- extra/output~-help.pd | 58 + extra/output~.pd | 96 + extra/pd~/GNUmakefile.am | 6 +- extra/pd~/pdsched.c | 21 +- extra/pd~/pd~-help.pd | 205 +- extra/pd~/pd~-subprocess.pd | 116 +- extra/pd~/pd~.c | 4 +- extra/pique/GNUmakefile.am | 6 +- extra/pique/pique-help.pd | 100 +- extra/pique/pique.c | 6 +- extra/rev1-final.pd | 187 +- extra/rev1-stage.pd | 165 +- extra/rev1~-help.pd | 241 +- extra/rev1~.pd | 89 +- extra/rev2~-help.pd | 294 +- extra/rev2~.pd | 206 +- extra/rev3~-help.pd | 302 +- extra/rev3~.pd | 418 +- extra/sigmund~/GNUmakefile.am | 6 +- extra/sigmund~/sigmund~-help.pd | 387 +- extra/sigmund~/sigmund~.c | 12 +- extra/stdout/GNUmakefile.am | 6 +- extra/stdout/stdout-help.pd | 97 +- font/DejaVuSansMono-BoldOblique.ttf | Bin 0 -> 239876 bytes font/DejaVuSansMono-Oblique.ttf | Bin 0 -> 245948 bytes font/Makefile.am | 2 + libpd/README.txt | 23 + libpd/test_libpd/test_libpd.c | 94 + libpd/test_libpd/test_libpd.pd | 28 + linux/Makefile.am | 34 + linux/icons/48x48/puredata.png | Bin 0 -> 1287 bytes linux/icons/512x512/puredata.png | Bin 0 -> 11811 bytes linux/icons/puredata.svg | 86 + linux/org.puredata.pd-gui.desktop | 17 + linux/org.puredata.pd-gui.metainfo.xml | 33 + linux/x-puredata.xml | 63 + mac/CMakeLists.txt | 1 - mac/patches/tk8.6.10_scrollbars.patch | 28 + .../tk8.6.12_NSBitmapFormatAlphaFirst.patch | 65 + mac/tcltk-wish.sh | 67 +- msw/build-msw-32.sh | 46 - po/Makefile.am | 87 +- po/_exclude.txt | 3 + po/af.po | 634 +- po/ar.po | 1383 + po/az.po | 632 +- po/be.po | 624 +- po/bg.po | 632 +- po/de.po | 966 +- po/el.po | 667 +- po/en_ca.po | 1214 +- po/es.po | 960 +- po/eu.po | 796 +- po/fi.po | 1382 + po/fr.po | 879 +- po/gu.po | 632 +- po/he.po | 628 +- po/hi.po | 632 +- po/hu.po | 658 +- po/hy.po | 1383 + po/iemgui_dynamic_strings.tcl | 33 +- po/it.po | 830 +- po/ja.po | 1386 + po/ko.po | 1411 + po/nl.po | 1422 + po/pa.po | 632 +- po/pd_dynamic_strings.tcl | 6 +- po/pl.po | 1391 + po/pt_br.po | 1080 +- po/pt_pt.po | 659 +- po/ru.po | 1283 +- po/sq.po | 632 +- po/sv.po | 633 +- po/template.pot | 741 +- po/tr.po | 1382 + po/uk.po | 1389 + po/vi.po | 632 +- po/zh_tw.po | 1383 + portaudio/Makefile.am | 8 +- portmidi/Makefile.am | 11 +- portmidi/portmidi/pm_common/pminternal.h | 0 portmidi/portmidi/pm_common/pmutil.c | 0 portmidi/portmidi/pm_common/pmutil.h | 0 portmidi/portmidi/pm_common/portmidi.c | 0 portmidi/portmidi/pm_common/portmidi.h | 0 portmidi/portmidi/pm_linux/pmlinux.c | 0 portmidi/portmidi/pm_linux/pmlinux.h | 0 portmidi/portmidi/pm_linux/pmlinuxalsa.c | 0 portmidi/portmidi/pm_linux/pmlinuxalsa.h | 0 portmidi/portmidi/pm_mac/pmmac.c | 0 portmidi/portmidi/pm_mac/pmmac.h | 0 portmidi/portmidi/pm_mac/pmmacosxcm.c | 25 +- portmidi/portmidi/pm_mac/pmmacosxcm.h | 0 portmidi/portmidi/pm_win/pmwin.c | 0 portmidi/portmidi/pm_win/pmwinmm.c | 0 portmidi/portmidi/pm_win/pmwinmm.h | 0 portmidi/portmidi/porttime/porttime.c | 0 portmidi/portmidi/porttime/porttime.h | 0 portmidi/portmidi/porttime/ptlinux.c | 0 portmidi/portmidi/porttime/ptmacosx_cf.c | 0 portmidi/portmidi/porttime/ptmacosx_mach.c | 0 portmidi/portmidi/porttime/ptwinmm.c | 0 portmidi/update.sh | 3 + snap/snapcraft.yaml | 4 +- src/CHANGELOG.txt | 55 +- src/CMakeLists.txt | 17 +- src/d_arithmetic.c | 62 +- src/d_array.c | 4 +- src/d_ctl.c | 44 +- src/d_dac.c | 50 +- src/d_delay.c | 3 + src/d_fft.c | 8 +- src/d_fft_fftsg.c | 69 +- src/d_fft_fftw.c | 6 +- src/d_filter.c | 54 +- src/d_global.c | 10 +- src/d_math.c | 46 +- src/d_misc.c | 6 - src/d_osc.c | 10 +- src/d_resample.c | 14 +- src/d_soundfile.c | 2726 +- src/d_soundfile.h | 180 + src/d_soundfile_aiff.c | 620 + src/d_soundfile_caf.c | 429 + src/d_soundfile_next.c | 297 + src/d_soundfile_wave.c | 526 + src/d_ugen.c | 144 +- src/g_all_guis.c | 660 +- src/g_all_guis.h | 114 +- src/g_array.c | 367 +- src/g_bang.c | 318 +- src/g_canvas.c | 281 +- src/g_canvas.h | 28 +- src/g_ceammc_draw.c | 225 +- src/g_ceammc_draw.h | 44 +- src/g_clone.c | 33 +- src/g_editor.c | 690 +- src/g_editor_extras.c | 13 +- src/g_graph.c | 207 +- src/g_hdial.c | 768 - src/g_hslider.c | 690 - src/g_io.c | 43 +- src/g_mycanvas.c | 227 +- src/g_numbox.c | 499 +- src/g_radio.c | 743 + src/g_readwrite.c | 40 +- src/g_rtext.c | 469 +- src/g_scalar.c | 235 +- src/g_slider.c | 823 + src/g_style.c | 11 - src/g_style.h | 21 - src/g_template.c | 404 +- src/g_text.c | 810 +- src/g_toggle.c | 347 +- src/g_traversal.c | 246 +- src/g_undo.c | 97 +- src/g_undo.h | 11 +- src/g_vdial.c | 762 - src/g_vslider.c | 690 - src/g_vumeter.c | 675 +- src/m_binbuf.c | 44 +- src/m_class.c | 41 +- src/m_conf.c | 16 +- src/m_glob.c | 21 +- src/m_imp.h | 3 +- src/m_memory.c | 9 +- src/m_obj.c | 308 +- src/m_pd.c | 8 +- src/m_pd.h | 101 +- src/m_sched.c | 393 +- src/pd-ceammc.rc.in | 26 + src/pd.rc | 13 +- src/s_audio.c | 1042 +- src/s_audio_alsa.c | 76 +- src/s_audio_alsamm.c | 21 +- src/s_audio_jack.c | 446 +- src/s_audio_mmio.c | 186 +- src/s_audio_oss.c | 165 +- src/s_audio_pa.c | 85 +- src/s_audio_paring.c | 2 - src/s_entry.c | 6 +- src/s_file.c | 179 +- src/s_inter.c | 480 +- src/s_inter_gui.c | 423 + src/s_libpdmidi.c | 74 + src/s_loader.c | 30 +- src/s_main.c | 806 +- src/s_midi.c | 89 +- src/s_midi_alsa.c | 9 +- src/s_midi_coremidi.c | 32 +- src/s_midi_oss.c | 208 +- src/s_midi_pm.c | 21 +- src/s_net.h | 4 + src/s_path.c | 334 +- src/s_print.c | 135 +- src/s_stuff.h | 318 +- src/s_utf8.c | 69 +- src/s_utf8.h | 21 +- src/s_watchdog.c | 12 +- src/u_pdreceive.c | 18 +- src/u_pdsend.c | 12 +- src/x_arithmetic.c | 24 +- src/x_array.c | 52 +- src/x_connective.c | 19 +- src/x_file.c | 1543 + src/x_gui.c | 77 +- src/x_interface.c | 99 +- src/x_libpdreceive.c | 83 + src/x_libpdreceive.h | 26 + src/x_list.c | 245 +- src/x_misc.c | 17 +- src/x_net.c | 37 +- src/x_scalar.c | 12 +- src/x_text.c | 74 +- src/x_vexp.c | 24 +- src/x_vexp_fun.c | 4 + src/x_vexp_if.c | 2 +- src/z_hooks.c | 26 + src/z_hooks.h | 35 + src/z_libpd.c | 665 + src/z_libpd.h | 513 + src/z_print_util.c | 51 + src/z_print_util.h | 47 + src/z_queued.c | 422 + src/z_queued.h | 92 + src/z_ringbuffer.c | 154 + src/z_ringbuffer.h | 61 + tcl/apple_events.tcl | 3 +- tcl/dialog_array.tcl | 488 +- tcl/dialog_audio.tcl | 206 +- tcl/dialog_canvas.tcl | 112 +- tcl/dialog_data.tcl | 12 +- tcl/dialog_find.tcl | 3 +- tcl/dialog_font.tcl | 100 +- tcl/dialog_gatom.tcl | 172 +- tcl/dialog_iemgui.tcl | 907 +- tcl/dialog_message.tcl | 20 +- tcl/dialog_midi.tcl | 138 +- tcl/dialog_path.tcl | 52 +- tcl/dialog_startup.tcl | 19 +- tcl/helpbrowser.tcl | 38 +- tcl/pd-gui.tcl | 151 +- tcl/pd_bindings.tcl | 140 +- tcl/pd_colors.tcl | 54 + tcl/pd_connect.tcl | 91 +- tcl/pd_deken.tcl | 3088 +- tcl/pd_docsdir.tcl | 13 +- tcl/pd_menucommands.tcl | 32 +- tcl/pd_menus.tcl | 196 +- tcl/pdtk_canvas.tcl | 131 +- tcl/pdtk_text.tcl | 11 +- tcl/pdtk_textwindow.tcl | 57 +- tcl/pdwindow.tcl | 179 +- tcl/pkgIndex.tcl | 1 + tcl/scrollbox.tcl | 28 +- tcl/scrollboxwindow.tcl | 22 +- tcl/wheredoesthisgo.tcl | 10 +- 3497 files changed, 283749 insertions(+), 122957 deletions(-) rename src/.dir-locals.el => .dir-locals.el (56%) create mode 100644 .editorconfig create mode 100644 .github/workflows/puredata.yml delete mode 100644 .travis.yml create mode 100644 README.translators.md create mode 100644 ceammc/dev_info_Linux.txt create mode 100644 ceammc/distrib/bashrc_tests create mode 100755 ceammc/distrib/dev_sync_pd.sh create mode 100755 ceammc/distrib/dev_sync_tcl.sh create mode 100644 ceammc/distrib/mac/install_deps.sh create mode 100644 ceammc/distrib/mac/make_bundle.sh create mode 100644 ceammc/distrib/mac/shellrc create mode 100644 ceammc/distrib/release_0.9.5.pd create mode 100644 ceammc/distrib/release_0.9.6.pd create mode 100644 ceammc/distrib/release_text_0.9.5.txt create mode 100644 ceammc/distrib/tcl/CMakeLists.txt create mode 160000 ceammc/distrib/tcl/tkdnd create mode 100644 ceammc/distrib/template_release_0.9.5.pd create mode 100644 ceammc/distrib/template_release_0.9.6.pd create mode 100644 ceammc/ext/abstractions/gflt.fb_comb~.pd create mode 100644 ceammc/ext/abstractions/gflt.ff_comb~.pd create mode 100644 ceammc/ext/abstractions/gflt.resonhp~.pd create mode 100644 ceammc/ext/abstractions/gflt.resonlp~.pd create mode 100644 ceammc/ext/abstractions/gfx.dattorro~.pd create mode 100644 ceammc/ext/abstractions/gfx.jcrev~.pd create mode 100644 ceammc/ext/abstractions/gfx.satrev~.pd delete mode 100644 ceammc/ext/abstractions/gfx_reverb_duck~.pd create mode 100644 ceammc/ext/abstractions/gnoise.chua~.pd create mode 100644 ceammc/ext/abstractions/gnoise.colored~.pd create mode 100644 ceammc/ext/abstractions/gsynth.clap~.pd create mode 100644 ceammc/ext/abstractions/gsynth.hat~.pd create mode 100644 ceammc/ext/abstractions/gsynth.kick2~.pd create mode 100644 ceammc/ext/abstractions/gsynth.voice_fofc~.pd create mode 100644 ceammc/ext/abstractions/gsynth.voice_fofs~.pd create mode 100644 ceammc/ext/benchmark/bm_parse.cpp create mode 100644 ceammc/ext/doc/an.zero~-help.pd create mode 100644 ceammc/ext/doc/an.zero~.pddoc create mode 100644 ceammc/ext/doc/array.circular-help.pd create mode 100644 ceammc/ext/doc/array.circular.pddoc create mode 100644 ceammc/ext/doc/array.convolve-help.pd create mode 100644 ceammc/ext/doc/array.convolve.pddoc create mode 100644 ceammc/ext/doc/array.risset_rythm~-help.pd create mode 100644 ceammc/ext/doc/array.risset_rythm~.pddoc create mode 100644 ceammc/ext/doc/conv.note2guido-help.pd create mode 100644 ceammc/ext/doc/conv.note2guido.inscore.pd create mode 100644 ceammc/ext/doc/conv.note2guido.pddoc create mode 100644 ceammc/ext/doc/faust/blow.dsp create mode 100644 ceammc/ext/doc/faust/ex2.dsp create mode 100644 ceammc/ext/doc/faust/ks.dsp create mode 100644 ceammc/ext/doc/faust/xfm.dsp create mode 100644 ceammc/ext/doc/flow.seqdelay-help.pd create mode 100644 ceammc/ext/doc/flow.seqdelay.pddoc create mode 100644 ceammc/ext/doc/flt.a-weight-help.pd create mode 100644 ceammc/ext/doc/flt.a-weight.pddoc create mode 100644 ceammc/ext/doc/flt.resonhp~-help.pd create mode 100644 ceammc/ext/doc/flt.resonhp~.pddoc create mode 100644 ceammc/ext/doc/flt.resonlp~-help.pd create mode 100644 ceammc/ext/doc/flt.resonlp~.pddoc create mode 100644 ceammc/ext/doc/fx.dattorro~-help.pd create mode 100644 ceammc/ext/doc/fx.dattorro~.pddoc create mode 100644 ceammc/ext/doc/fx.jcrev~-help.pd create mode 100644 ceammc/ext/doc/fx.jcrev~.pddoc create mode 100644 ceammc/ext/doc/fx.satrev~-help.pd create mode 100644 ceammc/ext/doc/fx.satrev~.pddoc create mode 100644 ceammc/ext/doc/fx.stutter~-help.pd create mode 100644 ceammc/ext/doc/fx.stutter~.pddoc create mode 100644 ceammc/ext/doc/global.set.abs.pd create mode 100644 ceammc/ext/doc/hw.motu.avb-help.pd create mode 100644 ceammc/ext/doc/hw.motu.avb.pddoc create mode 100644 ceammc/ext/doc/is_prop-help.pd create mode 100644 ceammc/ext/doc/is_prop.pddoc create mode 100644 ceammc/ext/doc/lang.lua-help.pd create mode 100644 ceammc/ext/doc/lang.lua.pddoc create mode 100644 ceammc/ext/doc/list.map-help.pd create mode 100644 ceammc/ext/doc/list.map.pddoc create mode 100644 ceammc/ext/doc/list.pass-help.pd create mode 100644 ceammc/ext/doc/list.pass.pddoc create mode 100644 ceammc/ext/doc/list.reject-help.pd create mode 100644 ceammc/ext/doc/list.reject.pddoc create mode 100644 ceammc/ext/doc/lua/CMakeLists.txt create mode 100644 ceammc/ext/doc/lua/basic.lua create mode 100644 ceammc/ext/doc/midi.arp-help.pd create mode 100644 ceammc/ext/doc/midi.arp.pddoc create mode 100644 ceammc/ext/doc/midi.modus-help.pd create mode 100644 ceammc/ext/doc/midi.modus.pddoc create mode 100644 ceammc/ext/doc/midi.split-help.pd create mode 100644 ceammc/ext/doc/midi.split.pddoc create mode 100644 ceammc/ext/doc/midi/CMakeLists.txt create mode 100755 ceammc/ext/doc/midi/bach-wtk2-prelude2.mid create mode 100644 ceammc/ext/doc/net.artnet.send-help.pd create mode 100644 ceammc/ext/doc/net.artnet.send.pddoc create mode 100644 ceammc/ext/doc/net.http.send-help.pd create mode 100644 ceammc/ext/doc/net.http.send.pddoc create mode 100644 ceammc/ext/doc/net.osc.receive-help.pd create mode 100644 ceammc/ext/doc/net.osc.receive.pddoc create mode 100644 ceammc/ext/doc/net.osc.send-help.pd create mode 100644 ceammc/ext/doc/net.osc.send.pddoc create mode 100644 ceammc/ext/doc/net.osc.server-help.pd create mode 100644 ceammc/ext/doc/net.osc.server.pddoc create mode 100644 ceammc/ext/doc/noise.colored~-help.pd create mode 100644 ceammc/ext/doc/noise.colored~.pddoc create mode 100644 ceammc/ext/doc/path.file-help.pd create mode 100644 ceammc/ext/doc/path.file.pddoc create mode 100644 ceammc/ext/doc/path.monitor-help.pd create mode 100644 ceammc/ext/doc/path.monitor.pddoc create mode 100644 ceammc/ext/doc/path.pattern-help.pd create mode 100644 ceammc/ext/doc/path.pattern.pddoc create mode 100644 ceammc/ext/doc/proto.feelworld-help.pd create mode 100644 ceammc/ext/doc/proto.feelworld.pddoc create mode 100644 ceammc/ext/doc/proto.inscore-help.pd create mode 100644 ceammc/ext/doc/proto.inscore.pddoc create mode 100644 ceammc/ext/doc/proto.midi.casio-help.pd create mode 100644 ceammc/ext/doc/proto.midi.casio.pddoc create mode 100644 ceammc/ext/doc/proto.moppy-help.pd create mode 100644 ceammc/ext/doc/proto.moppy.pddoc create mode 100644 ceammc/ext/doc/proto.vlc-help.pd create mode 100644 ceammc/ext/doc/proto.vlc.pddoc create mode 100644 ceammc/ext/doc/proto.whammy-help.pd create mode 100644 ceammc/ext/doc/proto.whammy.pddoc create mode 100644 ceammc/ext/doc/risset.gliss-help.pd create mode 100644 ceammc/ext/doc/risset.gliss.osc~.pd create mode 100644 ceammc/ext/doc/risset.gliss.pddoc create mode 100644 ceammc/ext/doc/route.any-help.pd create mode 100644 ceammc/ext/doc/route.any.pddoc create mode 100644 ceammc/ext/doc/route.bang-help.pd create mode 100644 ceammc/ext/doc/route.bang.pddoc create mode 100644 ceammc/ext/doc/route.list-help.pd create mode 100644 ceammc/ext/doc/route.list.pddoc create mode 100644 ceammc/ext/doc/route.prop-help.pd create mode 100644 ceammc/ext/doc/route.prop.pddoc create mode 100644 ceammc/ext/doc/route.random-help.pd create mode 100644 ceammc/ext/doc/route.random.chord.pd create mode 100644 ceammc/ext/doc/route.random.pddoc create mode 100644 ceammc/ext/doc/route.symbol-help.pd create mode 100644 ceammc/ext/doc/route.symbol.pddoc create mode 100644 ceammc/ext/doc/speech.rhvoice~-help.pd create mode 100644 ceammc/ext/doc/speech.rhvoice~.pddoc create mode 100644 ceammc/ext/doc/speech.rhvoice~.voices.pd create mode 100644 ceammc/ext/doc/synth.clap~-help.pd create mode 100644 ceammc/ext/doc/synth.clap~.pddoc create mode 100644 ceammc/ext/doc/synth.hat~-help.pd create mode 100644 ceammc/ext/doc/synth.hat~.pddoc create mode 100644 ceammc/ext/doc/synth.kick2~-help.pd create mode 100644 ceammc/ext/doc/synth.kick2~.pddoc create mode 100644 ceammc/ext/doc/synth.voice_fofc~-help.pd create mode 100644 ceammc/ext/doc/synth.voice_fofc~.pddoc create mode 100644 ceammc/ext/doc/synth.voice_fofs~-help.pd create mode 100644 ceammc/ext/doc/synth.voice_fofs~.pddoc create mode 100644 ceammc/ext/doc/system.cursor.1.pd create mode 100644 ceammc/ext/doc/system.cursor.abs.pd create mode 100644 ceammc/ext/doc/system.cursor.osc~.pd create mode 100644 ceammc/ext/doc/ui.faust~.extra.pd create mode 100644 ceammc/ext/doc/xdac~.map.pd create mode 100644 ceammc/ext/doc/z~-help.pd create mode 100644 ceammc/ext/doc/z~.pddoc create mode 100644 ceammc/ext/src/an/an_zero_tilde.cpp create mode 100644 ceammc/ext/src/an/an_zero_tilde.h create mode 100644 ceammc/ext/src/array/array_circular.cpp create mode 100644 ceammc/ext/src/array/array_circular.h create mode 100644 ceammc/ext/src/array/array_risset_rythm_tilde.cpp create mode 100644 ceammc/ext/src/array/array_risset_rythm_tilde.h create mode 100644 ceammc/ext/src/base/base_clone.cpp create mode 100644 ceammc/ext/src/base/base_clone.h create mode 100644 ceammc/ext/src/base/base_z_tilde.cpp create mode 100644 ceammc/ext/src/base/base_z_tilde.h create mode 100644 ceammc/ext/src/base/is_prop.cpp create mode 100644 ceammc/ext/src/conv/conv_note2guido.cpp create mode 100644 ceammc/ext/src/conv/conv_note2guido.h create mode 100644 ceammc/ext/src/data/editor_data.cpp create mode 100644 ceammc/ext/src/data/editor_data.h create mode 100644 ceammc/ext/src/data/editor_list.h create mode 100644 ceammc/ext/src/data/local_base.cpp create mode 100644 ceammc/ext/src/flow/flow_seqdelay.cpp create mode 100644 ceammc/ext/src/flow/flow_seqdelay.h create mode 100644 ceammc/ext/src/flow/route_any.cpp create mode 100644 ceammc/ext/src/flow/route_any.h create mode 100644 ceammc/ext/src/flow/route_bang.cpp create mode 100644 ceammc/ext/src/flow/route_bang.h create mode 100644 ceammc/ext/src/flow/route_list.cpp create mode 100644 ceammc/ext/src/flow/route_list.h create mode 100644 ceammc/ext/src/flow/route_prop.cpp create mode 100644 ceammc/ext/src/flow/route_prop.h create mode 100644 ceammc/ext/src/flow/route_random.cpp create mode 100644 ceammc/ext/src/flow/route_random.h create mode 100644 ceammc/ext/src/flow/route_symbol.cpp create mode 100644 ceammc/ext/src/flow/route_symbol.h create mode 100644 ceammc/ext/src/flt/flt_a_weight.cpp create mode 100644 ceammc/ext/src/flt/flt_a_weight.h create mode 100644 ceammc/ext/src/flt/flt_resonhp.cpp create mode 100644 ceammc/ext/src/flt/flt_resonhp.h create mode 100644 ceammc/ext/src/flt/flt_resonlp.cpp create mode 100644 ceammc/ext/src/flt/flt_resonlp.h create mode 100644 ceammc/ext/src/fx/fx_dattorro.cpp create mode 100644 ceammc/ext/src/fx/fx_dattorro.h create mode 100644 ceammc/ext/src/fx/fx_jcrev.cpp create mode 100644 ceammc/ext/src/fx/fx_jcrev.h create mode 100644 ceammc/ext/src/fx/fx_satrev.cpp create mode 100644 ceammc/ext/src/fx/fx_satrev.h create mode 100644 ceammc/ext/src/fx/fx_stutter.cpp create mode 100644 ceammc/ext/src/fx/fx_stutter.h create mode 100644 ceammc/ext/src/hw/hw_motu_avb.cpp create mode 100644 ceammc/ext/src/hw/hw_motu_avb.h create mode 100644 ceammc/ext/src/lang/lang_luajit.cpp create mode 100644 ceammc/ext/src/lang/lang_luajit.h create mode 100644 ceammc/ext/src/lang/lua_cmd.cpp create mode 100644 ceammc/ext/src/lang/lua_cmd.h create mode 100644 ceammc/ext/src/lang/lua_func.cpp create mode 100644 ceammc/ext/src/lang/lua_func.h create mode 100644 ceammc/ext/src/lang/lua_interp.cpp create mode 100644 ceammc/ext/src/lang/lua_interp.h create mode 100644 ceammc/ext/src/lang/lua_stack_guard.h create mode 100644 ceammc/ext/src/lib/args/argcheck2.cpp create mode 100644 ceammc/ext/src/lib/args/argcheck2.h create mode 100644 ceammc/ext/src/lib/args/argcheck2.rl create mode 100644 ceammc/ext/src/lib/ceammc_base64.cpp create mode 100644 ceammc/ext/src/lib/ceammc_base64.h create mode 100644 ceammc/ext/src/lib/ceammc_deprecated.cpp create mode 100644 ceammc/ext/src/lib/ceammc_deprecated.h create mode 100644 ceammc/ext/src/lib/ceammc_dsp.cpp create mode 100644 ceammc/ext/src/lib/ceammc_dsp.h create mode 100644 ceammc/ext/src/lib/ceammc_editor_object.cpp create mode 100644 ceammc/ext/src/lib/ceammc_editor_object.h create mode 100644 ceammc/ext/src/lib/ceammc_inlet.cpp create mode 100644 ceammc/ext/src/lib/ceammc_inlet.h create mode 100644 ceammc/ext/src/lib/ceammc_notify.h create mode 100644 ceammc/ext/src/lib/ceammc_outlet.cpp create mode 100644 ceammc/ext/src/lib/ceammc_outlet.h create mode 100644 ceammc/ext/src/lib/ceammc_pipe_dispatcher.cpp create mode 100644 ceammc/ext/src/lib/ceammc_pipe_dispatcher.h create mode 100644 ceammc/ext/src/lib/ceammc_poll_dispatcher.cpp create mode 100644 ceammc/ext/src/lib/ceammc_poll_dispatcher.h create mode 100644 ceammc/ext/src/lib/ceammc_pollthread_object.h create mode 100644 ceammc/ext/src/lib/ceammc_random.cpp create mode 100644 ceammc/ext/src/lib/ceammc_random.h create mode 100644 ceammc/ext/src/lib/ceammc_save_object.h create mode 100644 ceammc/ext/src/lib/ceammc_socket_dispatcher.cpp create mode 100644 ceammc/ext/src/lib/ceammc_socket_dispatcher.h create mode 100644 ceammc/ext/src/lib/ceammc_string_split.cpp create mode 100644 ceammc/ext/src/lib/ceammc_string_split.h create mode 100644 ceammc/ext/src/lib/ceammc_string_types.h create mode 100644 ceammc/ext/src/lib/ceammc_stub.h create mode 100644 ceammc/ext/src/lib/ceammc_syms.h create mode 100644 ceammc/ext/src/lib/datatype_json.cpp create mode 100644 ceammc/ext/src/lib/datatype_json.h rename ceammc/ext/src/{data => lib}/datatype_set.cpp (61%) rename ceammc/ext/src/{data => lib}/datatype_set.h (68%) create mode 100644 ceammc/ext/src/lib/extra/boost_intrusive_pool.hpp delete mode 100644 ceammc/ext/src/lib/lex/data_string.l delete mode 100644 ceammc/ext/src/lib/lex/data_string.lexer.cpp delete mode 100644 ceammc/ext/src/lib/lex/data_string.lexer.h delete mode 100644 ceammc/ext/src/lib/lex/data_string.parser.cpp delete mode 100644 ceammc/ext/src/lib/lex/data_string.parser.hpp delete mode 100644 ceammc/ext/src/lib/lex/data_string.y create mode 100644 ceammc/ext/src/lib/lex/data_string_location2.h create mode 100644 ceammc/ext/src/lib/lex/lemon.c create mode 100644 ceammc/ext/src/lib/lex/lemon_data_parser_impl.cpp create mode 100644 ceammc/ext/src/lib/lex/lemon_data_parser_impl.h create mode 100644 ceammc/ext/src/lib/lex/lemon_data_string.h create mode 100644 ceammc/ext/src/lib/lex/lemon_data_string.y create mode 100644 ceammc/ext/src/lib/lex/lemon_data_string_parser.cpp create mode 100644 ceammc/ext/src/lib/lex/lemon_data_string_parser.h create mode 100644 ceammc/ext/src/lib/lex/lemon_data_string_parser.rl create mode 100644 ceammc/ext/src/lib/lex/lempar.c create mode 100644 ceammc/ext/src/lib/lex/parser_clone.cpp create mode 100644 ceammc/ext/src/lib/lex/parser_clone.h create mode 100644 ceammc/ext/src/lib/lex/parser_clone.rl create mode 100644 ceammc/ext/src/lib/lex/parser_strings.cpp create mode 100644 ceammc/ext/src/lib/lex/parser_strings.h create mode 100644 ceammc/ext/src/lib/lex/parser_strings.rl delete mode 100644 ceammc/ext/src/lib/lex/quoted_atomlist_lexer.h delete mode 100644 ceammc/ext/src/lib/lex/quoted_string.parser.cpp delete mode 100644 ceammc/ext/src/lib/lex/quoted_string.parser.hpp delete mode 100644 ceammc/ext/src/lib/lex/quoted_string.y create mode 100644 ceammc/ext/src/lib/lex/ragel_strings.rl create mode 100644 ceammc/ext/src/lib/tcl/CMakeLists.txt rename ceammc/ext/src/{random/rnd_gen.cpp => lib/tcl/ceammc_tcl.cpp} (65%) create mode 100644 ceammc/ext/src/lib/tcl/ceammc_tcl.h create mode 100644 ceammc/ext/src/lib/tcl/ceammc_texteditor.h create mode 100644 ceammc/ext/src/lib/tcl/ceammc_texteditor.tcl create mode 100644 ceammc/ext/src/list/list_map.cpp create mode 100644 ceammc/ext/src/list/list_map.h create mode 100644 ceammc/ext/src/list/list_pass.cpp create mode 100644 ceammc/ext/src/list/list_pass.h create mode 100644 ceammc/ext/src/list/list_reject.cpp create mode 100644 ceammc/ext/src/list/list_reject.h create mode 100644 ceammc/ext/src/midi/midi_arp.cpp create mode 100644 ceammc/ext/src/midi/midi_arp.h create mode 100644 ceammc/ext/src/midi/midi_modus.cpp create mode 100644 ceammc/ext/src/midi/midi_modus.h create mode 100644 ceammc/ext/src/midi/midi_split.cpp create mode 100644 ceammc/ext/src/midi/midi_split.h create mode 100644 ceammc/ext/src/midi/property_pitch.cpp create mode 100644 ceammc/ext/src/midi/property_pitch.h create mode 100644 ceammc/ext/src/misc/RHVoice.conf create mode 100644 ceammc/ext/src/misc/risset_glissando.cpp create mode 100644 ceammc/ext/src/misc/risset_glissando.h create mode 100644 ceammc/ext/src/misc/speech_rhvoice_tilde.cpp create mode 100644 ceammc/ext/src/misc/speech_rhvoice_tilde.h create mode 100644 ceammc/ext/src/misc/speech_rhvoice_tilde_stub.cpp create mode 100644 ceammc/ext/src/net/net_artnet_send.cpp create mode 100644 ceammc/ext/src/net/net_artnet_send.h create mode 100644 ceammc/ext/src/net/net_http_send.cpp create mode 100644 ceammc/ext/src/net/net_http_send.h create mode 100644 ceammc/ext/src/net/net_osc_lo_cxx.h create mode 100644 ceammc/ext/src/net/net_osc_receive.cpp create mode 100644 ceammc/ext/src/net/net_osc_receive.h create mode 100644 ceammc/ext/src/net/net_osc_send.cpp create mode 100644 ceammc/ext/src/net/net_osc_send.h create mode 100644 ceammc/ext/src/net/net_osc_server.cpp create mode 100644 ceammc/ext/src/net/net_osc_server.h create mode 100644 ceammc/ext/src/net/osc_common.h create mode 100644 ceammc/ext/src/net/osc_property.cpp create mode 100644 ceammc/ext/src/net/osc_property.h create mode 100644 ceammc/ext/src/net/parser_osc.cpp create mode 100644 ceammc/ext/src/net/parser_osc.h create mode 100644 ceammc/ext/src/net/parser_osc.rl create mode 100644 ceammc/ext/src/noise/noise_chua.cpp create mode 100644 ceammc/ext/src/noise/noise_chua.h create mode 100644 ceammc/ext/src/noise/noise_colored.cpp create mode 100644 ceammc/ext/src/noise/noise_colored.h create mode 100644 ceammc/ext/src/path/dmon.h create mode 100644 ceammc/ext/src/path/new_file_pattern.cpp create mode 100644 ceammc/ext/src/path/new_file_pattern.h create mode 100644 ceammc/ext/src/path/new_file_pattern.rl create mode 100644 ceammc/ext/src/path/parser_bytes.cpp create mode 100644 ceammc/ext/src/path/parser_bytes.h create mode 100644 ceammc/ext/src/path/parser_bytes.rl create mode 100644 ceammc/ext/src/path/path_file.cpp create mode 100644 ceammc/ext/src/path/path_file.h create mode 100644 ceammc/ext/src/path/path_monitor.cpp create mode 100644 ceammc/ext/src/path/path_monitor.h create mode 100644 ceammc/ext/src/path/path_pattern.cpp create mode 100644 ceammc/ext/src/path/path_pattern.h create mode 100644 ceammc/ext/src/proto/parser_vlc.cpp create mode 100644 ceammc/ext/src/proto/parser_vlc.h create mode 100644 ceammc/ext/src/proto/parser_vlc.rl create mode 100644 ceammc/ext/src/proto/parser_whammy.cpp create mode 100644 ceammc/ext/src/proto/parser_whammy.rl create mode 100644 ceammc/ext/src/proto/parser_whammy_common.h create mode 100644 ceammc/ext/src/proto/proto_feelworld.cpp create mode 100644 ceammc/ext/src/proto/proto_feelworld.h create mode 100644 ceammc/ext/src/proto/proto_inscore.cpp create mode 100644 ceammc/ext/src/proto/proto_inscore.h create mode 100644 ceammc/ext/src/proto/proto_moppy.cpp create mode 100644 ceammc/ext/src/proto/proto_moppy.h create mode 100644 ceammc/ext/src/proto/proto_vlc.cpp create mode 100644 ceammc/ext/src/proto/proto_vlc.h create mode 100644 ceammc/ext/src/proto/proto_whammy.cpp create mode 100644 ceammc/ext/src/proto/proto_whammy.h delete mode 100644 ceammc/ext/src/rtmidi/CMakeLists.txt delete mode 100644 ceammc/ext/src/rtmidi/RtMidi.cpp delete mode 100644 ceammc/ext/src/rtmidi/RtMidi.h delete mode 100644 ceammc/ext/src/rtmidi/midi_in.cpp delete mode 100644 ceammc/ext/src/rtmidi/midi_in.h delete mode 100644 ceammc/ext/src/rtmidi/midi_listin.cpp delete mode 100644 ceammc/ext/src/rtmidi/midi_listout.cpp delete mode 100644 ceammc/ext/src/rtmidi/midi_out.cpp delete mode 100644 ceammc/ext/src/rtmidi/midiin_cc.cpp delete mode 100644 ceammc/ext/src/spat/spat_pan2.cpp delete mode 100644 ceammc/ext/src/spat/spat_pan2.h delete mode 100644 ceammc/ext/src/synth/fx_risset_tone.h create mode 100644 ceammc/ext/src/synth/synth_clap.cpp create mode 100644 ceammc/ext/src/synth/synth_clap.h create mode 100644 ceammc/ext/src/synth/synth_hat.cpp create mode 100644 ceammc/ext/src/synth/synth_hat.h create mode 100644 ceammc/ext/src/synth/synth_kick2.cpp create mode 100644 ceammc/ext/src/synth/synth_kick2.h create mode 100644 ceammc/ext/src/synth/synth_voice_fofc.cpp create mode 100644 ceammc/ext/src/synth/synth_voice_fofc.h create mode 100644 ceammc/ext/src/synth/synth_voice_fofs.cpp create mode 100644 ceammc/ext/src/synth/synth_voice_fofs.h create mode 100644 ceammc/ext/src/ui/nui_bang.cpp create mode 100644 ceammc/ext/src/ui/nui_bang.h create mode 100644 ceammc/ext/src/ui/nui_toggle.cpp create mode 100644 ceammc/ext/src/ui/nui_toggle.h create mode 100644 ceammc/ext/src/ui/touchosc/CMakeLists.txt create mode 100644 ceammc/ext/src/ui/touchosc/control.cpp create mode 100644 ceammc/ext/src/ui/touchosc/control.h create mode 100644 ceammc/ext/src/ui/touchosc/layout.cpp create mode 100644 ceammc/ext/src/ui/touchosc/layout.h create mode 100644 ceammc/ext/src/ui/touchosc/push_button.cpp create mode 100644 ceammc/ext/src/ui/touchosc/push_button.h create mode 100644 ceammc/ext/src/ui/touchosc/tabpage.cpp create mode 100644 ceammc/ext/src/ui/touchosc/tabpage.h create mode 100644 ceammc/ext/src/ui/touchosc/xmlnode.cpp create mode 100644 ceammc/ext/src/ui/touchosc/xmlnode.h create mode 100644 ceammc/ext/src/ui/ui_slider2d.tcl create mode 100644 ceammc/ext/src/ui/ui_slider2d.tcl.h create mode 100644 ceammc/ext/src/ui/ui_touchosc.cpp create mode 100644 ceammc/ext/src/ui/ui_touchosc.h create mode 100644 ceammc/ext/tests/an/test_an_zero_tilde.cpp create mode 100644 ceammc/ext/tests/base/test_base_z_tilde.cpp create mode 100644 ceammc/ext/tests/cells/test_args2.cpp rename ceammc/ext/{src/rtmidi/midiin_cc.h => tests/cells/test_base64.cpp} (61%) create mode 100644 ceammc/ext/tests/cells/test_datatype_set.cpp create mode 100644 ceammc/ext/tests/cells/test_dsp.cpp create mode 100644 ceammc/ext/tests/cells/test_parser_clone.cpp create mode 100644 ceammc/ext/tests/cells/test_parser_data_string3.cpp create mode 100644 ceammc/ext/tests/cells/test_random.cpp create mode 100644 ceammc/ext/tests/conv/test_conv_note2guido.cpp create mode 100644 ceammc/ext/tests/flow/test_route_any.cpp create mode 100644 ceammc/ext/tests/flow/test_route_bang.cpp create mode 100644 ceammc/ext/tests/flow/test_route_list.cpp create mode 100644 ceammc/ext/tests/flow/test_route_prop.cpp create mode 100644 ceammc/ext/tests/flow/test_route_random.cpp create mode 100644 ceammc/ext/tests/flow/test_route_symbol.cpp create mode 100644 ceammc/ext/tests/flt/test_flt_eq10.cpp create mode 100644 ceammc/ext/tests/flt/test_flt_filterbank5x1.cpp create mode 100644 ceammc/ext/tests/lang/CMakeLists.txt rename ceammc/ext/{src/random/rnd_gen.h => tests/lang/test_lang_base.cpp} (70%) create mode 100644 ceammc/ext/tests/lang/test_lang_base.h create mode 100644 ceammc/ext/tests/lang/test_lang_luajit.cpp create mode 100644 ceammc/ext/tests/list/test_list_map.cpp create mode 100644 ceammc/ext/tests/list/test_list_pass.cpp create mode 100644 ceammc/ext/tests/list/test_list_reject.cpp create mode 100644 ceammc/ext/tests/midi/test_midi_arp.cpp create mode 100644 ceammc/ext/tests/midi/test_midi_modus.cpp create mode 100644 ceammc/ext/tests/midi/test_midi_prop.cpp create mode 100644 ceammc/ext/tests/net/test_net_osc_receive.cpp create mode 100644 ceammc/ext/tests/net/test_net_osc_send.cpp create mode 100644 ceammc/ext/tests/net/test_net_osc_server.cpp create mode 100644 ceammc/ext/tests/path/test_path_file.cpp create mode 100644 ceammc/ext/tests/path/test_path_monitor.cpp create mode 100644 ceammc/ext/tests/path/test_path_pattern.cpp create mode 100644 ceammc/ext/tests/test0.lua create mode 100644 ceammc/ext/tests/test1.lua create mode 100644 ceammc/extra/artnet/CMakeLists.txt create mode 160000 ceammc/extra/artnet/libartnet create mode 100644 ceammc/extra/httplib/CMakeLists.txt create mode 160000 ceammc/extra/httplib/cpp-httplib create mode 100644 ceammc/extra/miniz/CMakeLists.txt create mode 160000 ceammc/extra/miniz/miniz create mode 100644 ceammc/extra/tcltk/CMakeLists.txt create mode 100644 ceammc/extra/tcltk/ctext/ctext.tcl create mode 100644 ceammc/extra/tcltk/ctext/pkgIndex.tcl create mode 100644 ceammc/faust/flt_resonhp.dsp create mode 100644 ceammc/faust/flt_resonhp.dsp.json create mode 100644 ceammc/faust/flt_resonlp.dsp create mode 100644 ceammc/faust/flt_resonlp.dsp.json create mode 100644 ceammc/faust/fx_dattorro.dsp create mode 100644 ceammc/faust/fx_dattorro.dsp.json create mode 100644 ceammc/faust/fx_jcrev.dsp create mode 100644 ceammc/faust/fx_jcrev.dsp.json delete mode 100644 ceammc/faust/fx_reverb_duck.dsp.json create mode 100644 ceammc/faust/fx_satrev.dsp create mode 100644 ceammc/faust/fx_satrev.dsp.json create mode 100644 ceammc/faust/noise_chua.dsp create mode 100644 ceammc/faust/noise_chua.dsp.json create mode 100644 ceammc/faust/noise_colored.dsp create mode 100644 ceammc/faust/noise_colored.dsp.json delete mode 100644 ceammc/faust/spat_pan2.dsp create mode 100644 ceammc/faust/synth_clap.dsp create mode 100644 ceammc/faust/synth_clap.dsp.json create mode 100644 ceammc/faust/synth_hat.dsp create mode 100644 ceammc/faust/synth_hat.dsp.json create mode 100644 ceammc/faust/synth_kick2.dsp create mode 100644 ceammc/faust/synth_kick2.dsp.json create mode 100644 ceammc/faust/synth_voice_fofc.dsp create mode 100644 ceammc/faust/synth_voice_fofc.dsp.json create mode 100644 ceammc/faust/synth_voice_fofs.dsp create mode 100644 ceammc/faust/synth_voice_fofs.dsp.json rename ceammc/gui/icons/buttonbar/cyan/{bng.gif => bang.gif} (100%) delete mode 100644 ceammc/gui/icons/buttonbar/cyan/bpfunc.gif rename ceammc/gui/icons/buttonbar/cyan/{hradio.gif => hrd.gif} (100%) rename ceammc/gui/icons/buttonbar/cyan/{hslider.gif => hsl.gif} (100%) create mode 100644 ceammc/gui/icons/buttonbar/cyan/listbox.gif rename ceammc/gui/icons/buttonbar/cyan/{numbox.gif => number.gif} (100%) rename ceammc/gui/icons/buttonbar/cyan/{vradio.gif => vrd.gif} (100%) rename ceammc/gui/icons/buttonbar/cyan/{vslider.gif => vsl.gif} (100%) delete mode 100644 ceammc/gui/icons/buttonbar/cyan/vumeter.gif create mode 100644 ceammc/gui/icons/buttonbar/dark/bang.png create mode 100644 ceammc/gui/icons/buttonbar/dark/bang.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/display.png create mode 100644 ceammc/gui/icons/buttonbar/dark/display.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/dsp.png create mode 100644 ceammc/gui/icons/buttonbar/dark/dsp.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/env.png create mode 100644 ceammc/gui/icons/buttonbar/dark/env.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/floatatom.png create mode 100644 ceammc/gui/icons/buttonbar/dark/floatatom.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/hrd.png create mode 100644 ceammc/gui/icons/buttonbar/dark/hrd.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/hsl.png create mode 100644 ceammc/gui/icons/buttonbar/dark/hsl.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/keyboard.png create mode 100644 ceammc/gui/icons/buttonbar/dark/keyboard.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/knob.png create mode 100644 ceammc/gui/icons/buttonbar/dark/knob.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/listbox.png create mode 100644 ceammc/gui/icons/buttonbar/dark/listbox.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/menuarray.png create mode 100644 ceammc/gui/icons/buttonbar/dark/menuarray.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/msg.png create mode 100644 ceammc/gui/icons/buttonbar/dark/msg.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/mycnv.png create mode 100644 ceammc/gui/icons/buttonbar/dark/mycnv.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/number.png create mode 100644 ceammc/gui/icons/buttonbar/dark/number.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/obj.png create mode 100644 ceammc/gui/icons/buttonbar/dark/obj.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/preset.png create mode 100644 ceammc/gui/icons/buttonbar/dark/preset.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/scope.png create mode 100644 ceammc/gui/icons/buttonbar/dark/scope.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/slider2d.png create mode 100644 ceammc/gui/icons/buttonbar/dark/slider2d.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/sliders.png create mode 100644 ceammc/gui/icons/buttonbar/dark/sliders.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/spectroscope.png create mode 100644 ceammc/gui/icons/buttonbar/dark/spectroscope.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/symbolatom.png create mode 100644 ceammc/gui/icons/buttonbar/dark/symbolatom.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/text.png create mode 100644 ceammc/gui/icons/buttonbar/dark/text.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/toggle.png create mode 100644 ceammc/gui/icons/buttonbar/dark/toggle.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/vrd.png create mode 100644 ceammc/gui/icons/buttonbar/dark/vrd.xcf create mode 100644 ceammc/gui/icons/buttonbar/dark/vsl.png create mode 100644 ceammc/gui/icons/buttonbar/dark/vsl.xcf delete mode 100644 ceammc/gui/icons/pd_ceammc.svg delete mode 100644 ceammc/gui/icons/pd_ceammc2.svg delete mode 100644 ceammc/gui/icons/pd_ceammc3.svg create mode 100644 ceammc/gui/plugins/ceammc_dnd-plugin.tcl create mode 100644 ceammc/license_template.txt create mode 100644 ceammc/scripts/list_faust_targets.cmake delete mode 100755 ceammc/scripts/travis_before_install.sh delete mode 100755 ceammc/scripts/travis_configure.sh delete mode 100755 ceammc/scripts/travis_coveralls.sh delete mode 100755 ceammc/scripts/travis_package.sh create mode 100755 ceammc/scripts/vanilla_diff_src_files.sh create mode 100644 cmake/FindLibSamplerate.cmake create mode 100644 cmake/FindRHVoice.cmake create mode 100644 cmake/Findliblo.cmake delete mode 100644 cmake/cmake_build_mac.cmake create mode 100644 doc/1.manual/deken.gif create mode 100644 doc/1.manual/favicon.ico create mode 100644 doc/4.data.structures/05.symbol.text.pd create mode 100644 doc/4.data.structures/06.array.pd create mode 100644 doc/4.data.structures/07.graph.on.parent.pd create mode 100644 doc/4.data.structures/08.file.pd create mode 100644 doc/4.data.structures/09.sequencer.pd create mode 100644 doc/4.data.structures/10.interaction.pd create mode 100644 doc/4.data.structures/11.scaling.pd create mode 100644 doc/4.data.structures/12.onoff.pd create mode 100644 doc/4.data.structures/13.array.controls.pd rename doc/4.data.structures/{12.beat-patterns.pd => 14.beat-patterns.pd} (84%) create mode 100644 doc/4.data.structures/15.sliderule.pd create mode 100644 doc/4.data.structures/16.partialtracer.pd create mode 100644 doc/5.reference/all_guis.pd create mode 100644 doc/5.reference/binops-help.pd create mode 100644 doc/5.reference/binops-other-help.pd create mode 100644 doc/5.reference/binops-tilde-help.pd create mode 100644 doc/5.reference/cnv-help.pd create mode 100644 doc/5.reference/delay-tilde-objects-help.pd create mode 100644 doc/5.reference/draw-shapes-help.pd create mode 100644 doc/5.reference/ds-text.txt create mode 100644 doc/5.reference/file-help.pd create mode 100644 doc/5.reference/fudi-format-parse-help.pd create mode 100644 doc/5.reference/gui-boxes-help.pd create mode 100644 doc/5.reference/key-input-help.pd create mode 100644 doc/5.reference/nbx-help.pd create mode 100644 doc/5.reference/osc-format-parse-help.pd create mode 100644 doc/5.reference/pd-messages.pd create mode 100644 doc/5.reference/radio-help.pd create mode 100644 doc/5.reference/send-receive-help.pd create mode 100644 doc/5.reference/send-receive-tilde-help.pd create mode 100644 doc/5.reference/sliders-help.pd create mode 100644 doc/5.reference/tabsend-receive~-help.pd create mode 100644 doc/5.reference/throw~-catch~-help.pd create mode 100644 doc/5.reference/trace-help.pd create mode 100644 doc/7.stuff/soundfile-tools/2.band-pass.pd create mode 100644 doc/7.stuff/soundfile-tools/3.phase-vocoder.pd create mode 100644 doc/8.topics/expr.html create mode 100644 doc/8.topics/fudi.html create mode 100644 extra/output~-help.pd create mode 100644 extra/output~.pd create mode 100644 font/DejaVuSansMono-BoldOblique.ttf create mode 100644 font/DejaVuSansMono-Oblique.ttf create mode 100644 libpd/README.txt create mode 100644 libpd/test_libpd/test_libpd.c create mode 100644 libpd/test_libpd/test_libpd.pd create mode 100644 linux/Makefile.am create mode 100644 linux/icons/48x48/puredata.png create mode 100644 linux/icons/512x512/puredata.png create mode 100644 linux/icons/puredata.svg create mode 100644 linux/org.puredata.pd-gui.desktop create mode 100644 linux/org.puredata.pd-gui.metainfo.xml create mode 100644 linux/x-puredata.xml create mode 100644 mac/patches/tk8.6.10_scrollbars.patch create mode 100644 mac/patches/tk8.6.12_NSBitmapFormatAlphaFirst.patch delete mode 100755 msw/build-msw-32.sh create mode 100644 po/_exclude.txt create mode 100644 po/ar.po create mode 100644 po/fi.po create mode 100644 po/hy.po create mode 100644 po/ja.po create mode 100644 po/ko.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/zh_tw.po mode change 100755 => 100644 portmidi/portmidi/pm_common/pminternal.h mode change 100755 => 100644 portmidi/portmidi/pm_common/pmutil.c mode change 100755 => 100644 portmidi/portmidi/pm_common/pmutil.h mode change 100755 => 100644 portmidi/portmidi/pm_common/portmidi.c mode change 100755 => 100644 portmidi/portmidi/pm_common/portmidi.h mode change 100755 => 100644 portmidi/portmidi/pm_linux/pmlinux.c mode change 100755 => 100644 portmidi/portmidi/pm_linux/pmlinux.h mode change 100755 => 100644 portmidi/portmidi/pm_linux/pmlinuxalsa.c mode change 100755 => 100644 portmidi/portmidi/pm_linux/pmlinuxalsa.h mode change 100755 => 100644 portmidi/portmidi/pm_mac/pmmac.c mode change 100755 => 100644 portmidi/portmidi/pm_mac/pmmac.h mode change 100755 => 100644 portmidi/portmidi/pm_mac/pmmacosxcm.c mode change 100755 => 100644 portmidi/portmidi/pm_mac/pmmacosxcm.h mode change 100755 => 100644 portmidi/portmidi/pm_win/pmwin.c mode change 100755 => 100644 portmidi/portmidi/pm_win/pmwinmm.c mode change 100755 => 100644 portmidi/portmidi/pm_win/pmwinmm.h mode change 100755 => 100644 portmidi/portmidi/porttime/porttime.c mode change 100755 => 100644 portmidi/portmidi/porttime/porttime.h mode change 100755 => 100644 portmidi/portmidi/porttime/ptlinux.c mode change 100755 => 100644 portmidi/portmidi/porttime/ptmacosx_cf.c mode change 100755 => 100644 portmidi/portmidi/porttime/ptmacosx_mach.c mode change 100755 => 100644 portmidi/portmidi/porttime/ptwinmm.c create mode 100644 src/d_soundfile.h create mode 100644 src/d_soundfile_aiff.c create mode 100644 src/d_soundfile_caf.c create mode 100644 src/d_soundfile_next.c create mode 100644 src/d_soundfile_wave.c delete mode 100644 src/g_hdial.c delete mode 100644 src/g_hslider.c create mode 100644 src/g_radio.c create mode 100644 src/g_slider.c delete mode 100644 src/g_vdial.c delete mode 100644 src/g_vslider.c create mode 100644 src/pd-ceammc.rc.in create mode 100644 src/s_inter_gui.c create mode 100644 src/s_libpdmidi.c create mode 100644 src/x_file.c create mode 100644 src/x_libpdreceive.c create mode 100644 src/x_libpdreceive.h create mode 100644 src/z_hooks.c create mode 100644 src/z_hooks.h create mode 100644 src/z_libpd.c create mode 100644 src/z_libpd.h create mode 100644 src/z_print_util.c create mode 100644 src/z_print_util.h create mode 100644 src/z_queued.c create mode 100644 src/z_queued.h create mode 100644 src/z_ringbuffer.c create mode 100644 src/z_ringbuffer.h create mode 100644 tcl/pd_colors.tcl diff --git a/src/.dir-locals.el b/.dir-locals.el similarity index 56% rename from src/.dir-locals.el rename to .dir-locals.el index 113532ddc0..0a346b63fc 100644 --- a/src/.dir-locals.el +++ b/.dir-locals.el @@ -1,4 +1,4 @@ -; see also https://github.com/erdc-cm/petsc-dev/blob/master/.dir-locals.el +; indent with space; make sure lines are not too long ( (nil . ((indent-tabs-mode . nil) (tab-width . 4) @@ -7,6 +7,4 @@ (c-mode . ((c-file-style . "bsd") (c-basic-offset . 4) (c-comment-only-line-offset . 4) - )) - (haskell-mode . ((eval . (highlight-regexp "^ *")))) - (java-mode . ((c-file-style . "bsd")))) + ))) diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..5dc9d59f92 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,38 @@ +root = true + +[*] +# please only ever use utf-8 +charset = utf-8 + +; C and friends +[**.{c,cpp,h,hh,m,mm}] +# indent 4 spaces, BSD-style +indent_style = space +indent_size = 4 +indent_brace_style = BSD + +## let git handle proper EOL +#end_of_line = lf + +trim_trailing_whitespace = true +insert_final_newline = true + +max_line_length = 80 + +#continuation_indent_size = 4 +spaces_around_operators = true + +; applies only to Makefiles +[makefile] +indent_style = tab +tab_width = 4 +[**.am] +indent_style = tab +tab_width = 4 + +[**.tcl] +indent_style = space +indent_size = 4 +#continuation_indent_size = 8 +#curly_bracket_next_line = false + diff --git a/.github/workflows/puredata.yml b/.github/workflows/puredata.yml new file mode 100644 index 0000000000..37508ed5bb --- /dev/null +++ b/.github/workflows/puredata.yml @@ -0,0 +1,16 @@ +name: pure-data + +on: + # Trigger the workflow on push or pull request, + # but only for the main branch + push: + branches: + - main + - master + - develop + pull_request: + workflow_dispatch: + +jobs: + puredata: + uses: pure-data/pure-data-ci/.github/workflows/puredata.yml@main diff --git a/.gitignore b/.gitignore index 4be6012fb5..b31885d173 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,5 @@ mac/tk* mac/embedded msw/tcltk* +# vim temp files +*.swp diff --git a/.gitmodules b/.gitmodules index 5e08c49a20..f12d6370d3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -61,3 +61,15 @@ [submodule "ceammc/extra/faust/faust"] path = ceammc/extra/faust/faust url = https://github.com/grame-cncm/faust.git +[submodule "ceammc/extra/httplib/cpp-httplib"] + path = ceammc/extra/httplib/cpp-httplib + url = https://github.com/yhirose/cpp-httplib.git +[submodule "ceammc/extra/miniz/miniz"] + path = ceammc/extra/miniz/miniz + url = https://github.com/richgel999/miniz.git +[submodule "ceammc/extra/artnet/libartnet"] + path = ceammc/extra/artnet/libartnet + url = https://github.com/uliss/libartnet.git +[submodule "ceammc/distrib/tcl/tkdnd"] + path = ceammc/distrib/tcl/tkdnd + url = https://github.com/uliss/tkdnd.git diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4db9cb9e22..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,64 +0,0 @@ -language: cpp -dist: bionic -sudo: required -git: - depth: 5 - -addons: - apt: - update: true - packages: - - libasound2-dev - - libmodplug-dev - - libavahi-compat-libdnssd-dev - - libsndfile1-dev - - libjack-jackd2-dev - - libfftw3-dev - - libboost-dev - - ninja-build - -env: - global: - - secure: ifC0UBN+k/lpPL3+amsz8lBNpbmDxi/XGRMIXLpRlNq67cSxOK3pF67HSvM1rFtVS5q9pN+MF2Cfq0jEoeqOJht9SiP+gvb1YlKZITNz4XiNgx2oxKnQLxJhc/EH1bd5hkJ9rpgoOAJGGgDGiI/GFsiwb6wrGQ52i3GPNw3QDPMHjDL8lMPCJQ+GP444j+maXQscWsKqLLa0Eeov0hd60T9fYwvDEGzA95X/UcMW9LFEqq9gW1neiv82ga1y7S/pR8ovqasER+wjFBNdfYh9JekRZv7mRjXK45gRWFg3vArEprfbsgQhPNXsXqXP/HbzMV/cpF0Atn+cyd+GxVRn5PdqiJvn73H9612QQQfXc195JcJXFN79ZeoIYxZI9gZt8emHZE1V90AoTthqCDv0lC/qKwH1SpqqrJ07gGh08ZiUTpN5xBerMzWBdhaUpAGRWeC9xO2xDXz3QKmDb8onWpuoQSCfvM8L2uw2UZnB7Hi93wwyb3nb1kw4CW+3HbgdWIOYtNFc8NAnqbk5BHQLZwCYHOAKPZc6Wae1y2sz5Lm/cOHBdN9msA1jTp5A2K/NjBIhOB6k//uTeSZvkwAWeIcxuNG/xxyk1a76sXGN3WNRSiWeR4jAuNt0k6j0QrEI03Vmv7u12MRiwGBI5WDMhvaMHzltCSmSz2tGsfIEfm8= - - COVERITY_SCAN_NOTIFICATION_EMAIL="serge.poltavski@gmail.com" - - COVERITY_SCAN_BRANCH_PATTERN="(master|ceammc|devel|coverity-.*)" - - COVERITY_SCAN_BUILD_COMMAND="make" - - CTEST_OUTPUT_ON_FAILURE=1 - - CEAMMC_BUILD_DIR="build" - -matrix: - include: - - compiler: clang - env: CEAMMC_BUILD_TYPE="Debug" CEAMMC_COVERAGE="OFF" - - compiler: gcc - env: CEAMMC_BUILD_TYPE="Debug" CEAMMC_COVERAGE="ON" - - compiler: gcc - env: CEAMMC_BUILD_TYPE="Release" CEAMMC_COVERAGE="OFF" - -before_install: -- ./ceammc/scripts/travis_before_install.sh - -before_script: -- ./ceammc/scripts/travis_configure.sh -- cd ${CEAMMC_BUILD_DIR} - -script: -- ninja -- ctest -- ../ceammc/scripts/travis_package.sh - -after_success: -- ../ceammc/scripts/travis_coveralls.sh - -deploy: - provider: packagecloud - repository: pd - username: ceammc - token: - secure: meUzKX3BJut9BqNhGUfK7GNF6xzoNsdpgz40lphytu9ID8vkv2pUQHVkklVifCvJXZMZa8H2ZoyhakRHmhmc9lI2cOuXKx0Nx/yniQYinPzXeYtrmteqWXXCi1coYvM+c02/dY4uDEZHxkmma6zRyNdNx41k0wJVZBvAqEytncwisRZn7TUJfHl7fjlzX7VYCFTP8fOa8dWSXng0t7jj3KLWPbLDQDQYqhcAj0Jh2TnxfG5gxYBorWgPJkHsbkZhW4gwYKZnD8QhovC9IgGhuReHS8oF+rbikfwbp//kxNCZkfarhi0q4YoKdx9OfRsgsDB0fRnh6kUY9J326K6vnSXFOFm7BKLvrnF4rgJGaGfGb+d9M9w5AlDGpJPZJVmF4uK49O0bYsc8/BH4NXTsq/5eDOL3G/lZMj+mD4720QRiCJg/KDecWKkn+LvuJ/7I2nmV88WhMhdA9WeDJzyJl2SMeeuI+fihCrbsNhqA/STy/ZurDhLA9xJ2vx7fBum29VIfxdc48J6jBtPQN3Xn8Cn3mYGE+06LWj0V1kYGWDO9MazecLS94aGZyi2cm/ssmFJioLI1dwnr5ZMhkDTmw29EJ3mInOvuWeUAHyYDHWEy16iUGqmVFKucrUS0aFczOkgWxdg0mxI9EMis1IjdiA8vjTKYEekTAfOdncmKuk4= - dist: ubuntu/trusty - skip_cleanup: true - package_glob: "*.deb" - on: - branch: deploy - condition: ${CEAMMC_BUILD_TYPE} = Release diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a1a8fb9a0..3b741675b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # CEAMMC Pd distribution changelog +## [2023.01] +### Updated: +- drag and drop plugin added for MacOS +- Windows installer fixed +- **CEAMMC** external library v0.9.6 - [ceammc/CHANGELOG.md](ceammc/CHANGELOG.md) + +## [2022.11] +### Updated: +- migration to Pd version 0.53.0 +- **CEAMMC** external library v0.9.5 - [ceammc/CHANGELOG.md](ceammc/CHANGELOG.md) + +### Removed: +- disable externals libdir and import in default build options +- temporary disable flext base external, cause their using obsolete Pd api calls (error(), for example) +- removed link to FLOSS and Kreidler tutorial, cause they are really old at this time + ## [2021.11] ### Added: - disable enternal FFTease and LyonPotpourri externals cause they available via deken diff --git a/CMakeLists.txt b/CMakeLists.txt index 598edf5c17..3e7e27541f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.13) project(puredata) if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) @@ -15,7 +15,12 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) endif() if(APPLE) - set(CMAKE_OSX_ARCHITECTURES "x86_64") + if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") + set(CMAKE_OSX_ARCHITECTURES "arm64") + else() + set(CMAKE_OSX_ARCHITECTURES "x86_64") + endif() + if(MACOSX_SDK) set(CMAKE_OSX_SYSROOT ${MACOSX_SDK}) endif() @@ -52,7 +57,9 @@ if(UNIX) set(CMAKE_MACOSX_RPATH TRUE) # @rpath on macosx # set(CMAKE_SKIP_RPATH True) - # set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6") + if(CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64") + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12") + endif() # set(CMAKE_SKIP_BUILD_RPATH FALSE) # set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) # set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR TRUE) @@ -73,6 +80,7 @@ set(CMAKE_CXX_STANDARD 11) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +include(CheckLSBTypes) include(build_options) include(ceammc/external_version.cmake) include(version) @@ -122,6 +130,7 @@ add_subdirectory(extra) add_subdirectory(doc) add_subdirectory(mac) + if(GETTEXT_FOUND) add_subdirectory(po) endif() @@ -132,12 +141,12 @@ endif() add_subdirectory(ceammc) -include(summary) include(package) +include(summary) add_custom_target(puredata_changelog SOURCES CHANGELOG.md) file(GLOB _DEB_FILES "debian/*") add_custom_target(deb_files SOURCES ${_DEB_FILES}) -add_custom_target(ci_files SOURCES .travis.yml appveyor.yml) +add_custom_target(ci_files SOURCES appveyor.yml) diff --git a/README.translators.md b/README.translators.md new file mode 100644 index 0000000000..a1a52e3f96 --- /dev/null +++ b/README.translators.md @@ -0,0 +1,69 @@ +Notes for translators +===================== + +The Pd GUI interface is available in multiple languages. + +If support for your language is only partial or missing completely, +you are invited to join the Pd translation effort. + +# Project mailinglist + +We don't have a specific mailinglist for translating Pd, +so we use the ordinary Pd mailinglist: + + https://lists.puredata.info/listinfo/pd-list + +Feel free to subscribe to the mailinglist to discuss translation issues. + +# Different translation workflows + +There are two ways to manage the translations: + +- using the Weblate web application at + + https://hosted.weblate.org/projects/pure-data/ + +- using the Git repository to grab and commit PO files + +## Translation with Weblate + +If you decide to use Weblate, you don't have to learn Git usage. +Get in touch with us on the above mailing list so that we can setup +the initial translation files for you, and once they appear +on Weblate, you can start working! +You should communicate us the ISO code of your translation +(see "How to start a new translation" for more information on possible ISO codes). + +If you want to retrieve the content of Weblate via git you can use +this git repository as remote: + +``` +$ git remote add weblate https://hosted.weblate.org/git/pure-data/pure-data +``` + +## Translation without Weblate + +--------------------------- + +If you're not using Weblate, you'll have to interact with the Git +repository. So read README.git first. Really. And then please respect the +guidelines below. + +Write meaningful commit messages. Always start with the language +code of the affected translations. Some examples of good commit +messages: + +* it: Translated menus +* pt_br: Complete translation of deken + + +# How to start a new translation + +See the `po/README.txt` for adding a new translation manually. + + +In any case, you must find out the language code for your translation +(it looks like `fr` or `de_at`). + +See https://www.gnu.org/software/gettext/manual/html_node/Usual-Language-Codes.html +for a list of such codes. diff --git a/README.txt b/README.txt index c665aeaefc..c19c35446c 100644 --- a/README.txt +++ b/README.txt @@ -12,12 +12,12 @@ or from the Pure Data community site: https://puredata.info -Installation instructions are in INSTALL.txt and the HTML documentation at: +Installation instructions are in INSTALL.txt and the Pd Manual at: http://msp.ucsd.edu/Pd_documentation/index.htm -If you download and unpack Pd, you will also find the HTML documentation -locally in the file "doc/1.manual/index.htm". +If you download and unpack Pd, you will also find the Manual locally +in the file "doc/1.manual/index.htm". Linux (or FreeBSD): In some Linux installations you can download Pd via "apt-get install puredata" or "dnf install puredata"; otherwise you can download @@ -44,7 +44,7 @@ menu. Except as otherwise noted, all files in the Pd distribution are - Copyright (c) 1997-2017 Miller Puckette and others. + Copyright (c) 1997-2021 Miller Puckette and others. For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see LICENSE.txt included in the Pd distribution. @@ -58,4 +58,4 @@ Lindsay, Karl MacMillan, Thomas Musil, Toshinori Ohkouchi, Winfried Ritsch, Vibeke Sorensen, Rand Steiger, Hans-Christoph Steiner, Shahrokh Yadegari, Dan Wilcox, David Zicarelli, IOhannes m zmoelnig, and probably many others for contributions of code, documentation, ideas, and expertise. This work has -received support from Intel, Keith Mcmillen Instruments, and UCSD. +received support from Intel, Keith McMillen Instruments, ZKM, IEM, and UCSD. diff --git a/build/mac/coverage/cmake_single.sh b/build/mac/coverage/cmake_single.sh index c045143614..54f8e22169 100755 --- a/build/mac/coverage/cmake_single.sh +++ b/build/mac/coverage/cmake_single.sh @@ -1,5 +1,11 @@ #/bin/bash +# M1 apple check (Faust not build at this moment) +BUILD_WITH_FAUST=ON +if [[ $(uname -m) == 'arm64' ]]; then + BUILD_WITH_FAUST=OFF +fi + cmake -G Ninja -DWITH_COVERAGE=ON \ -DWITH_PORTAUDIO=OFF \ -DWITH_DUMMY_AUDIO=ON \ @@ -11,4 +17,6 @@ cmake -G Ninja -DWITH_COVERAGE=ON \ -DWITH_EXT_LYONPOTPOURRI=OFF \ -DWITH_EXT_AUTOTUNE=OFF \ -DWITH_FFTW=OFF \ + -DWITH_FAUST=${BUILD_WITH_FAUST} \ + -DWITH_EXT_FLEXT=OFF \ ../../../.. diff --git a/build/mac/debug/cmake_single.sh b/build/mac/debug/cmake_single.sh index 0b5a4c9ce8..4fe3ca0199 100755 --- a/build/mac/debug/cmake_single.sh +++ b/build/mac/debug/cmake_single.sh @@ -1,14 +1,24 @@ #!/bin/bash +# M1 apple check (Faust not build at this moment) +BUILD_WITH_FAUST=ON +if [[ $(uname -m) == 'arm64' ]]; then + BUILD_WITH_FAUST=ON + export LLVM_DIR=/opt/local/libexec/llvm-11/lib/cmake/llvm +fi + + cmake -G Ninja \ -DCMAKE_CXX_FLAGS=-ffast-math\ -DCMAKE_C_FLAGS=-ffast-math \ - -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX=`pwd`/dist/pd_ceammc \ -DWITH_FLUIDSYNTH=ON \ -DARCH=x86_64 \ -DLEAPMOTION_ROOT=~/work/src/LeapSDK \ -DENABLE_TESTS=ON \ + -DWITH_EXT_FLEXT=OFF \ + -DWITH_FAUST=$BUILD_WITH_FAUST \ -DWITH_BENCHMARK=ON\ ../../../.. diff --git a/build/mac/release/cmake_double.sh b/build/mac/release/cmake_double.sh index 41875726a4..2e8e2c93f9 100755 --- a/build/mac/release/cmake_double.sh +++ b/build/mac/release/cmake_double.sh @@ -1,5 +1,11 @@ #!/bin/bash +# M1 apple check (Faust not build at this moment) +BUILD_WITH_FAUST=ON +if [[ $(uname -m) == 'arm64' ]]; then + BUILD_WITH_FAUST=OFF +fi + cmake -G Ninja \ -DCMAKE_CXX_FLAGS=-ffast-math\ -DCMAKE_C_FLAGS=-ffast-math \ @@ -10,6 +16,8 @@ cmake -G Ninja \ -DLEAPMOTION_ROOT=~/work/src/LeapSDK \ -DENABLE_TESTS=ON \ -DWITH_BENCHMARK=OFF\ - -DWITH_FAUST=ON\ + -DWITH_EXT_FLEXT=OFF\ + -DWITH_FAUST=${BUILD_WITH_FAUST}\ + -DWITH_TTS_RHVOICE=ON \ ../../../.. diff --git a/build/mac/release/cmake_single.sh b/build/mac/release/cmake_single.sh index 0b5a4c9ce8..347c24fc20 100755 --- a/build/mac/release/cmake_single.sh +++ b/build/mac/release/cmake_single.sh @@ -1,5 +1,13 @@ #!/bin/bash +export LLVM_DIR=/opt/local/libexec/llvm-10/lib/cmake/llvm +# M1 apple check (Faust not build at this moment) +BUILD_WITH_FAUST=ON +if [[ $(uname -m) == 'arm64' ]]; then + BUILD_WITH_FAUST=ON + export LLVM_DIR=/opt/local/libexec/llvm-11/lib/cmake/llvm +fi + cmake -G Ninja \ -DCMAKE_CXX_FLAGS=-ffast-math\ -DCMAKE_C_FLAGS=-ffast-math \ @@ -9,6 +17,9 @@ cmake -G Ninja \ -DARCH=x86_64 \ -DLEAPMOTION_ROOT=~/work/src/LeapSDK \ -DENABLE_TESTS=ON \ + -DWITH_TTS_RHVOICE=ON \ + -DWITH_EXT_FLEXT=OFF\ + -DWITH_FAUST=${BUILD_WITH_FAUST}\ -DWITH_BENCHMARK=ON\ ../../../.. diff --git a/build/win/release/64/config_double.sh b/build/win/release/64/config_double.sh index 9d7e3d6816..1bbaaf74bc 100644 --- a/build/win/release/64/config_double.sh +++ b/build/win/release/64/config_double.sh @@ -12,8 +12,10 @@ cmake -G Ninja \ -DCMAKE_INSTALL_PREFIX=${ROOT} \ -DWITH_FFTW=ON \ -DENABLE_TESTS=ON \ - -DWITH_FAUST=OFF \ + -DWITH_FAUST=ON \ -DWITH_EXT_LYONPOTPOURRI=OFF \ -DWITH_EXT_FFTEASE=OFF \ -DWITH_DOUBLE_PRECISION=ON \ + -DWITH_EXT_FLEXT=OFF \ + -DWITH_TTS_RHVOICE=ON \ $DIR diff --git a/build/win/release/64/config_single.sh b/build/win/release/64/config_single.sh index 44d87b30c0..2ea227f912 100644 --- a/build/win/release/64/config_single.sh +++ b/build/win/release/64/config_single.sh @@ -14,6 +14,8 @@ cmake -G Ninja \ -DENABLE_TESTS=ON \ -DWITH_EXT_LYONPOTPOURRI=OFF \ -DWITH_EXT_FFTEASE=OFF \ + -DWITH_EXT_FLEXT=OFF \ -DWITH_SFIZZ=ON \ - -DWITH_FAUST=OFF \ + -DWITH_FAUST=ON \ + -DWITH_RHVOICE=ON \ $DIR diff --git a/ceammc/CHANGELOG.md b/ceammc/CHANGELOG.md index 272c0a815e..4aecee50c0 100644 --- a/ceammc/CHANGELOG.md +++ b/ceammc/CHANGELOG.md @@ -1,8 +1,136 @@ # CEAMMC external library changelog -## [Unreleased] +## [Unrelesed] ### Added: +- new objects: + - flt.resonhp~ resonant highpass filter + - flt.resonlp~ resonant lowpass filter + - fx.dattorro~ reverb based on the Dattorro reverb topology + - fx.jcrev~ schroeder quad reverb from 1972 + - fx.satrev~ schroeder stereo reverb from 1971 + - fx.stutter~ effect + - is_prop - check for property message + - midi.arp - MIDI arpeggiator added + - noise.chua~ : Chua chaotic circut oscillator added + - noise.colored~ generator of colored noise (brown, pink, white, blue, velvet) + - route.any: message router + - route.bang: bang router added + - route.list: list router added + - route.prop: property message router added + - route.symbol: symbol message router added + - synth.voice_fofc~ simple formant synthesizer, using FOF-cycle method + - synth.voice_fofs~ simple formant synthesizer, using FOF-smooth method +- new arguments: + - 3rd argument added to fx.zita_rev1~ to specify dry/wet ratio +- new properties: + - @cpuload property added to fluid~ +- new methods: + - 'next', 'prev', 'random', 'flip', '+' and '-' methods added to ui.tab + - 'random move' method arg added to ui.radio +- new aliases: + - 'round' alias added to math.round + - 'round~' alias added to math.round~ +- new inlets: + - fx.hpf12~: second (freq) inlet added + - fx.hpf24~: second (freq) inlet added + - fx.lpf12~: second (freq) inlet added + - fx.lpf24~: second (freq) inlet added + - fx.resonbp~: second (freq) and third (Q-factor) inlets added + - fx.room~: second inlet added to set room size +- misc: + - new control outlet added to fluid~ - output current number of active voices (only when changed) + +### Changes: +- properties: + - fx.zita_rev1~ @delay property renamed to @predelay + - list.repeat @times property renamed to @n + - pan.spread~ @ch property renamed to @n (number of channels) + - random.atom @a property renamed to @value + +## [0.9.5] +### Added: +- new objects: + - an.zero~: zero crossing count/rate/freq + - array.circular: array circular read/write + - flow.seqdelay: sequential message delay/router + - flt.a-weight: A-weight amplitude/decibel value calculator + - hw.motu.avb: Motu AVB http control added + - lang.lua added: LuaJit interpreter added running in separate thread + - list.map: list value mapping object added + - list.pass: leave only specified atoms in list + - list.reject: reject specified atoms in list + - midi.modus: snap/skip midi pitches according to selected modus + - midi.split: midi note splitter + - net.artnet.send: send DMX messages via ArtNet + - net.http.send: send HTTP requests + - net.osc.receive: receive OSC + - net.osc.send: send OSC messages + - net.osc.server: OSC server control + - path.file: file object added + - path.pattern: generate unique filenames by pattern + - proto.feelworld: control Feelworld Livepro L1 HDMI video mixer + - proto.moppy: MOPPY floppy controller + - proto.vlc: control VLC player over HTTP + - proto.whammy: Digitech Whammy pedal control + - route.random: random router added (with route.r alias) + - speech.rhvoice~: RHVoice TTS engine added + - synth.clap~ added + - synth.hat~ added + - synth.kick2~ added + - z~: sample delay added - new properties: + - @channels property added to xdac~: live-channel remapping + - @clip property added to system.cursor to clip cursor XY coords + - @dev property added to flow.space: to set deviation + - @fade property added to live.capture~ to control loop crossfading (fix #171) + - @gain: make up gain applied to the signal after the compression takes place + - @nonrep property added to random.atom to generate non equal adjacent elements + - @norm property added to ui.env to do envelope value normalization on input + - @value property added to seq.counter + - @x property added to \[xfade~\] and \[xfade2~\] for setting crossfade +- new methods: + - [polltime( method added to system.cursor to change global polltime + - [reverse( method added to xdac~ to reverse output channels order + - [shuffle( method added to xdac~ to shuffle output channels + - [rotate( method added to xdac~ to rotate output channels + - [side2circle( method added to xdac~ to change output channel layout + - [-(, [+(, [@value?( methods added to second inlet of \[flow.count\] + - [at(, [front(, [back( methods added to data.list/data.mlist + - [choose( method added to get random element from \[data.set\], \[local.set\] and \[global.set\] + - [choose( method added to get random element from \[data.dict\], \[local.dict\] and \[global.dict\] + - [pause( method added to \[array.grainer~\] + - [slice( method added to \[array.grainer~\] - to slice source to specified number of equal grains + - [spread( method added to \[array.grainer~\] - to uniformly spread grain over specified duration + - [shuffle( method added to \[array.grainer~\] - to shuffle grains + - [defer( method added to \[array.grainer~\] - to execute messages on grain finish + - [reverse( method added to \[array.grainer~\] - to reverse grains positions + - [permutate( method added to \[array.grainer~\] - to permutate grains positions + - [prog( method added to \[sfizz~\] - to send Program Change events +- misc: + - conv.lin2curve: list support added + - conv.lin2exp: list support added + - env.asr~: second inlet added for gate control + - second inlet added to random.atom to set list to choose from + - sfizz synth updated to version 1.2.0 + - ui.slider2d alias added: ui.s2d + - ui.slider2d: mouse wheel support added: (move x-axis when Alt pressed) +- TCL editor added for objects: + - data.list + - data.set + - global.list + - global.set + - local.list + - local.set + +### Fixed: +- system.cursor no normalization in subpatch +- conv.dbfs2amp~: signal version fix + +### Changes: +- @i property of seq.counter made writable + +### Deprecated: +- alias 'list.filter' (use list.pass_if instead) ## [0.9.4] ### Added: diff --git a/ceammc/CMakeLists.txt b/ceammc/CMakeLists.txt index 8b853a5a6e..82cddd8b58 100644 --- a/ceammc/CMakeLists.txt +++ b/ceammc/CMakeLists.txt @@ -16,6 +16,7 @@ find_program(PD_LIB2DEKEN pd_lib2deken) find_program(PD_CAT2PD pd_cat2pd) set(CEAMMC_INSTALL_PATH ${PD_INTERNAL_EXT_INSTALL_PATH}/ceammc) +set(CEAMMC_FAUST_TARGETS "" CACHE INTERNAL "") add_subdirectory(extra) add_subdirectory(gui) @@ -36,6 +37,7 @@ if(XGETTEXT) file(GLOB _UI_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/ui/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/ui/*.h") file(GLOB _HOA_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/spat/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ext/src/spat/*.h") file(GLOB _TCL_PLUGIN_FILES RELATIVE ${CMAKE_SOURCE_DIR}/po "${CMAKE_CURRENT_SOURCE_DIR}/gui/plugins/ceammc_*-plugin.tcl") + list(APPEND _TCL_PLUGIN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/gui/plugins/completion-plugin/completion-plugin.tcl") set(XGETTEXT_EMAIL "serge.uliss at gmail.com") set(XGETTEXT_COPYRIGHT "This file is put in the public domain") @@ -61,17 +63,24 @@ if(XGETTEXT) ) endif() -add_custom_target(ceammc_extra_files SOURCES CHANGELOG.md cppcheck_suppressions.txt) +add_custom_target(ceammc_extra_files + SOURCES + CHANGELOG.md + cppcheck_suppressions.txt + dev_info_Darwin.txt + dev_info_Linux.txt + dev_info_Windows.txt +) -add_custom_target(dev - COMMAND ${CMAKE_COMMAND} -E cat "${CMAKE_CURRENT_SOURCE_DIR}/dev_info_${CMAKE_SYSTEM_NAME}.txt") -if(APPLE) - add_custom_target(dev_run - COMMAND ${BUNDLE_FULL_PATH}/Contents/Resources/bin/pd - DEPENDS dev_ceammc) - add_custom_target(dev_open - COMMAND open ${BUNDLE_FULL_PATH} - DEPENDS dev_ceammc) +set(DEV_INFO_TXT "${CMAKE_CURRENT_SOURCE_DIR}/dev_info_${CMAKE_SYSTEM_NAME}.txt") + +if(${CMAKE_VERSION} VERSION_LESS "3.18.0") + add_custom_target(dev COMMAND cat "${DEV_INFO_TXT}") +else() + add_custom_target(dev COMMAND ${CMAKE_COMMAND} -E cat "${DEV_INFO_TXT}") endif() +add_custom_target(dev_faust + COMMAND ${CMAKE_COMMAND} -D ALL_TARGETS="${CEAMMC_FAUST_TARGETS}" -P "${CMAKE_CURRENT_SOURCE_DIR}/scripts/list_faust_targets.cmake") + diff --git a/ceammc/dev_info_Darwin.txt b/ceammc/dev_info_Darwin.txt index 6493ff27bd..6eeb562579 100644 --- a/ceammc/dev_info_Darwin.txt +++ b/ceammc/dev_info_Darwin.txt @@ -5,9 +5,13 @@ dev targets: * dev_pddoc - build target `ceammc_pddoc` (rebuild pddoc) and install it to ./dist app folder * dev_run - build target `dev_ceammc` then run via command line app in './dist' folder * dev_open - build target `dev_ceammc` then open app bundle in './dist' folder + * dev_lldb - build target `dev_ceammc` then run in lldb debugger app in './dist' folder * dev_check_app - check app bundle for external references * dev_touch_version - touch external info file, to update compilation date/time in load message * dev_build_all - build targets: `ceammc_lib`, `app`, `app-zip` and `dmg` + * dev_faust - list all faust targets + * dev_tcl - copy tcl files to ./dist app folder + * dev_pd - copy pd executable to ./dist app folder deploy target: * deploy_github_appzip - upload PureData zipped app to github release diff --git a/ceammc/dev_info_Linux.txt b/ceammc/dev_info_Linux.txt new file mode 100644 index 0000000000..2ed27a1719 --- /dev/null +++ b/ceammc/dev_info_Linux.txt @@ -0,0 +1,7 @@ +dev targets: + * dev_dpkg - reinstall dpkg package + * dev_touch_version - touch external info file, to update compilation date/time in load message + * dev_faust - list all faust targets + * dev_tcl - copy tcl files to install tcl directory + * dev_pd - copy pd executable to install bin directory + diff --git a/ceammc/dev_info_Windows.txt b/ceammc/dev_info_Windows.txt index eaf2f39106..c7d792c69a 100644 --- a/ceammc/dev_info_Windows.txt +++ b/ceammc/dev_info_Windows.txt @@ -7,6 +7,10 @@ dev targets: * dev_sha256 - calc sha256sum in dist/ directory for release files * dev_touch_version - touch external info file, to update compilation date/time in load message * dev_build_all - update version, fix dll, fix doc, then build targets: `ceammc_lib`, `inno` + * dev_faust - list all faust targets + * dev_run - run installed Pd + * dev_tcl - copy tcl files to tcl app folder + * dev_pd - copy pd executable to bin app folder deploy target: * deploy_github_exe - upload PureData installer to github release diff --git a/ceammc/distrib/CMakeLists.txt b/ceammc/distrib/CMakeLists.txt index d1bb8cb43a..e92ccc6fe9 100644 --- a/ceammc/distrib/CMakeLists.txt +++ b/ceammc/distrib/CMakeLists.txt @@ -79,15 +79,9 @@ add_custom_target(ceammc_doc_check_methods WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) # ceammc release patch files -set(RELEASE_TEXT "release_text_${CEAMMC_LIB_VERSION}.txt") -set(RELEASE_QLIST "release_qlist_${CEAMMC_LIB_VERSION}.txt") set(RELEASE_TEMPLATE "template_release_${CEAMMC_LIB_VERSION}.pd") set(RELEASE_PATCH "release_${CEAMMC_LIB_VERSION}.pd") configure_file(${RELEASE_TEMPLATE} ${CMAKE_CURRENT_SOURCE_DIR}/${RELEASE_PATCH} @ONLY) -add_custom_target(release_patch - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_release_patch.py ${RELEASE_TEXT} > "${CMAKE_CURRENT_SOURCE_DIR}/${RELEASE_QLIST}" - SOURCES make_release_patch.py ${RELEASE_PATCH} ${RELEASE_TEXT} ${RELEASE_TEMPLATE} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) if(WIN32) set(DOC_INSTALL_PATH "extra/ceammc") @@ -95,9 +89,6 @@ else() set(DOC_INSTALL_PATH "${PD_DOC_INSTALL_PATH}/extra/ceammc") endif() -install(FILES ${RELEASE_QLIST} ${RELEASE_TEXT} - DESTINATION ${DOC_INSTALL_PATH} - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) file(GLOB _RELEASE_FILES "release_*.pd") foreach(f ${_RELEASE_FILES}) install(FILES ${f} @@ -105,3 +96,21 @@ foreach(f ${_RELEASE_FILES}) PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) endforeach() +# bashrc function for testing +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bashrc_tests bashrc_tests @ONLY) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dev_sync_tcl.sh + ${PROJECT_BINARY_DIR}/dist/dev_sync_tcl.sh @ONLY) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dev_sync_pd.sh + ${PROJECT_BINARY_DIR}/dist/dev_sync_pd.sh @ONLY) + +add_custom_target(dev_tcl + ${PROJECT_BINARY_DIR}/dist/dev_sync_tcl.sh) + +add_custom_target(dev_pd + ${PROJECT_BINARY_DIR}/dist/dev_sync_pd.sh $ + DEPENDS pd + USES_TERMINAL) + +add_subdirectory(tcl) diff --git a/ceammc/distrib/bashrc_tests b/ceammc/distrib/bashrc_tests new file mode 100644 index 0000000000..af3673f76b --- /dev/null +++ b/ceammc/distrib/bashrc_tests @@ -0,0 +1,7 @@ +function ntestm() { + cmake --build . --target test_ext_$1 && ./ceammc/ext/tests/test_ext_$1 "${@:2}" +} + +function ntest() { + cmake --build . --target test_$1 && ./ceammc/ext/tests/test_$1 "${@:2}" +} diff --git a/ceammc/distrib/check_doc_external.py b/ceammc/distrib/check_doc_external.py index 71847c3502..d1333c2f80 100755 --- a/ceammc/distrib/check_doc_external.py +++ b/ceammc/distrib/check_doc_external.py @@ -5,21 +5,29 @@ import argparse import subprocess import os.path +import time from lxml import etree from termcolor import cprint import json +verbose_output = False + SRC_PATH = "@PROJECT_SOURCE_DIR@/" BIN_PATH = "@PROJECT_BINARY_DIR@/ceammc/ext/src/lib/" DOC_PATH = "@PROJECT_SOURCE_DIR@/ceammc/ext/doc/" STK_RAWWAVES_PATH = "@PROJECT_SOURCE_DIR@/ceammc/extra/stk/stk/rawwaves" -EXT_LIST = BIN_PATH + "ext_list" -EXT_METHODS = BIN_PATH + "ext_methods" -EXT_PROPS = BIN_PATH + "ext_props" +EXT_INFO = BIN_PATH + "ext_info" SPECIAL_OBJ = {"function": "f"} +EXT_INLETS = [] +EXT_OUTLETS = [] +EXT_METHODS = set() +EXT_ALIASES = set() +EXT_PROPS_SET = set() +EXT_PROPS_DICT = dict() +EXT_ARGS_DICT = dict() def signal_handler(sig, frame): sys.exit(0) @@ -27,46 +35,68 @@ def signal_handler(sig, frame): signal.signal(signal.SIGINT, signal_handler) -def read_all_externals(): - return list(filter(lambda x: len(x), subprocess.check_output([EXT_LIST], stderr=subprocess.DEVNULL).decode().split('\n'))) +# methods starting with @ - properties in UI objects +# methods starting with . or _ - internal methods +# methods ending with _aliased - overwritten methods +def is_valid_method(x): + return (len(x) and x[0] not in ('@', '_')) and (not str(x).endswith("_aliased")) -def read_methods(name): - # methods starting with @ - properties in UI objects - # methods starting with . - internal methods - # methods ending with _aliased - overwritten methods - def valid_method(x): - return (len(x) and x[0] != '@') and (not str(x).endswith("_aliased")) +def read_ext_info(name): + global EXT_INLETS, EXT_OUTLETS, EXT_METHODS, EXT_ALIASES, EXT_PROPS_SET, EXT_PROPS_DICT try: - args = [EXT_METHODS, name] + args = [EXT_INFO, name] if name in SPECIAL_OBJ: args.append(SPECIAL_OBJ[name]) - return set(filter(valid_method, - subprocess.check_output(args, stderr=subprocess.DEVNULL, - env={"RAWWAVES": STK_RAWWAVES_PATH}).decode().split('\n'))) + output = subprocess.check_output(args, + env={"RAWWAVES": STK_RAWWAVES_PATH}, + stderr=subprocess.DEVNULL).decode() + + js = json.loads(output) + # read xlets + try: + EXT_INLETS = js["object"]["inlets"] + EXT_OUTLETS = js["object"]["outlets"] + except(KeyError): + pass + # read methods + try: + EXT_METHODS = set(filter(is_valid_method, js["object"]["methods"])) + except(KeyError): + pass + # read aliases + try: + EXT_ALIASES = set(js["object"]["info"]["aliases"]) + except(KeyError): + pass + + # read props + try: + props = js["object"]["properties"] + for p in props: + EXT_PROPS_SET.add(p["name"]) + EXT_PROPS_DICT[p["name"]] = p + if p is None: + EXT_PROPS_DICT[p["name"]] = "null" + except(KeyError): + pass + + # read args + try: + args = js["object"]["args"] + for a in args: + EXT_ARGS_DICT[a["name"]] = a + if a is None: + EXT_ARGS_DICT[a["name"]] = "null" + except(KeyError): + pass + + return True except(subprocess.CalledProcessError): - cprint(f"[{name}] can't get methods", "red") - return set() - - -def read_props(name): - try: - args = [EXT_PROPS, name] - if name in SPECIAL_OBJ: - args.append(SPECIAL_OBJ[name]) - - s = subprocess.check_output(args, stderr=subprocess.DEVNULL, - env={"RAWWAVES": STK_RAWWAVES_PATH}, - encoding="utf-8", errors="ignore") - js = json.loads(s) - return set(js.keys()), js - except(subprocess.CalledProcessError) as e: - if e.returncode != 4: - cprint(f"[{name}] can't get properties", "red") - - return set(), dict() + cprint(f"[{name}] can't get external info", "red") + return False def check_spell(obj): @@ -87,23 +117,360 @@ def check_spell(obj): check_spell(node) +def read_doc_aliases(node): + res = set() + + if node.tag != "meta": + return res + + for x in node: + if x.tag == "aliases": + for y in x: + if y.tag == "alias": + res.add(y.text.strip()) + + return res + + +def read_doc_inlets(node): + res = [] + + if node.tag != "inlets": + return res + + if node.attrib.get("dynamic", "false") == "true": + return None + + for x in node: + if x.tag == "inlet": + res.append(x.attrib.get("type", "control")) + + return res + + +def read_doc_outlets(node): + res = [] + + if node.tag != "outlets": + return res + + if node.attrib.get("dynamic", "false") == "true": + return None + + for x in node: + if x.tag == "outlet": + res.append(x.attrib.get("type", "control")) + + return res + +def check_aliases(name, doc, ext): + undoc_aliases = ext - doc + unknown_aliases = doc - ext + + if len(undoc_aliases) > 0: + cprint(f"[{ext_name}] undocumented aliases: {undoc_aliases}", + 'magenta') + + if len(unknown_aliases) > 0: + cprint(f"[{ext_name}] unknown aliases: {unknown_aliases}", + 'yellow') + + +def check_methods(name, doc, ext): + ignored_methods = {'dump', 'dsp', 'signal', 'mouseup', 'mouseenter', 'dialog', + 'onzoom', 'zoom', 'mousewheel', 'mousemove', 'mousedown', 'mouseleave', + 'symbol', 'float', 'bang', 'dblclick', 'list', 'dsp_add', 'loadbang', + 'click', 'dsp_add_aliased', 'vis', 'popup', 'eobjreadfrom', 'eobjwriteto', + 'rightclick', 'key' } + + undoc_methods_set = ext - doc - ignored_methods + unknown_methods = doc - ext + if len(undoc_methods_set): + cprint(f"[{ext_name}] undocumented methods: {undoc_methods_set}", + 'magenta') + + if len(unknown_methods): + cprint(f"[{ext_name}] unknown methods in doc: {unknown_methods}", + 'yellow') + + +def check_single_arg(ext_name, arg_name, doc, ext): + # check type + doc_type = doc.get("type", "") + ext_type = ext.get("type", "") + + if doc_type != ext_type: + cprint(f"[{ext_name}][arg][{arg_name}] invalid argument type in doc: {doc_type}, should be: {ext_type}", 'magenta') + + # check minvalue + doc_minval = doc.get("min", "") + ext_minval = ext.get("min", "") + if ext_type == "float": + if doc_minval != "": + doc_minval = round(float(doc_minval), 4) + if ext_minval != "": + ext_minval = round(float(ext_minval), 4) + + if doc_minval != ext_minval: + cprint(f"[{ext_name}][arg][{arg_name}] invalid argument minvalue in doc: {doc_minval}, should be: {ext_minval}", 'magenta') + + # check maxvalue + doc_maxval = doc.get("max", "") + ext_maxval = ext.get("max", "") + if ext_type == "float": + if doc_maxval != "": + doc_maxval = round(float(doc_maxval), 4) + if ext_maxval != "": + ext_maxval = round(float(ext_maxval), 4) + if doc_maxval != ext_maxval: + cprint(f"[{ext_name}][arg][{arg_name}] invalid argument maxvalue in doc: {doc_maxval}, should be: {ext_maxval}", 'magenta') + + # check units + doc_units = doc.get("units", "") + ext_units = ext.get("units", "") + if doc_units != ext_units: + cprint(f"[{ext_name}][arg][{arg_name}] invalid argument units in doc: {doc_units}, should be: {ext_units}", 'magenta') + + +def check_args(name, doc, ext): + doc_args_set = set(doc.keys()) + ext_args_set = set(ext.keys()) + + undoc_args = ext_args_set - doc_args_set + unknown_args = doc_args_set - ext_args_set + if len(undoc_args): + cprint(f"[{ext_name}] undocumented arguments: {undoc_args}", + 'magenta') + + if len(unknown_args): + cprint(f"[{ext_name}] unknown arguments in doc: {unknown_args}", + 'yellow') + + for a in doc_args_set.intersection(ext_args_set): + check_single_arg(name, a, doc[a], ext[a]) + +def check_xlets(name, doc_in, doc_out, ext_in, ext_out): + if doc_in is not None and doc_in != ext_in: + cprint(f"[{ext_name}] inlets error: {doc_in} != {ext_in}", + 'magenta') + + if doc_out is not None and doc_out != ext_out: + cprint(f"[{ext_name}] outlets error: {doc_out} != {ext_out}", + 'magenta') + + +def check_single_prop(name, prop, doc, ext): + # access check + ro_ext = ext.get("access", "") + ro_doc = doc.get("access", "") + if ro_ext != ro_doc: + cprint(f"[{ext_name}][{prop}] access in doc ({ro_doc}) != access in ext ({ro_ext})", 'red') + + # units checks + units_doc = doc.get("units", None) + units_ext = ext.get("units", None) + + if units_doc != units_ext: + cprint(f"[{ext_name}][{prop}] units in doc ({units_doc}) != units in ext ({units_ext})", 'red') + + # check minvalue + doc_minval = doc.get("min", "") + if doc_minval == "π": + doc_minval = round(3.1415926, 4) + elif doc_minval == "2π": + doc_minval = round(3.1415926 * 2, 4) + elif len(doc_minval) > 0: + doc_minval = float(doc_minval) + + ext_minval = ext.get("min", "") + if isinstance(ext_minval, str) and len(ext_minval) > 0: + ext_minval = round(float(ext_minval), 4) + elif isinstance(ext_minval, float): + ext_minval = round(ext_minval, 4) + + if doc_minval != ext_minval: + cprint(f"[{ext_name}][{prop}] invalid property minvalue in doc: {doc_minval}, should be: {ext_minval}", 'magenta') + + # check maxvalue + doc_maxval = doc.get("max", "") + if doc_maxval == "π": + doc_maxval = round(3.1415926, 4) + elif doc_maxval == "2π": + doc_maxval = round(3.1415926 * 2, 4) + elif len(doc_maxval) > 0: + doc_maxval = float(doc_maxval) + + ext_maxval = ext.get("max", "") + if isinstance(ext_maxval, str) and len(ext_maxval) > 0: + ext_maxval = round(float(ext_maxval), 4) + elif isinstance(ext_maxval, float): + ext_maxval = round(ext_maxval, 4) + + if doc_maxval != ext_maxval: + cprint(f"[{ext_name}][{prop}] invalid property maxvalue in doc: {doc_maxval}, should be: {ext_maxval}", 'magenta') + + type_doc = doc.get("type", None) + type_ext = ext.get("type", None) + + if type_ext == "bool" and ro_ext == "initonly": # flag type + pass + else: + # check default + doc_def = doc.get("default", None) + # none + if doc_def is None: + pass + # float + elif type_doc == "float": + if doc_def == "2π": + doc_def = round(3.1415926 * 2, 4) + elif doc_def == "π": + doc_def = round(3.1415926, 4) + elif doc_def == "+inf": + doc_def = 2147483647 + elif doc_def == "-inf": + doc_def = -2147483648 + else: + doc_def = round(float(doc_def), 4) + # int + elif type_doc == "int": + doc_def = int(doc_def) + elif type_doc == "bool": + doc_def = int(doc_def) + + ext_def = ext.get("default", None) + if ext_def is None: + pass + elif type_ext == "float": + ext_def = round(ext_def, 4) + elif type_ext == "int": + ext_def = round(ext_def, 4) + elif type_ext == "list": + def conv(x): + if isinstance(x, (int, float)): + return str(round(x, 4)) + elif x is None: + return "" + else: + return x + + try: + ext_def = " ".join(map(lambda x: conv(x), ext_def)) + except TypeError as e: + cprint(f"[{ext_name}][{prop}] exception while checking {e}", 'red') + + if type_ext == "atom": + doc_def = str(doc_def) + ext_def = str(ext_def) + + if doc_def != ext_def: + cprint(f"[{ext_name}][{prop}] invalid property default in doc: {doc_def}, should be: {ext_def}", 'magenta') + + # end default check + + # check enums + doc_enum = doc.get("enum", set()) + ext_enum = set(ext.get("enum", set())) + if isinstance(doc_enum, str): + doc_enum = set(doc_enum.split(" ")) + if type_doc == "float": + doc_enum = set(map(lambda x: float(x), doc_enum)) + elif type_doc == "int": + doc_enum = set(map(lambda x: int(x), doc_enum)) + elif type_doc == "atom": + def get_atom(x): + if isinstance(x, str) and len(x) > 0 and x[0].isdigit(): + return float(x) + else: + return x + + doc_enum = set(map(lambda x: get_atom(x), doc_enum)) + + if doc_enum != ext_enum: + cprint(f"[{ext_name}][{prop}] invalid property enum in doc: {doc_enum}, should be: {ext_enum}", 'magenta') + doc_miss = ext_enum - doc_enum + if len(doc_miss) > 0: + cprint(f"\t- missing {doc_miss}", 'yellow') + x = " ".join(map(str, sorted(list(doc_miss)))) + cprint(f"\t add to doc: enum=\"{x}\"", 'white') + + doc_invalid = doc_enum - ext_enum + if len(doc_invalid) > 0: + cprint(f"\t- invalid {doc_invalid}", 'yellow') + + # check types + type_doc = doc.get("type", None) + type_ext = ext.get("type", None) + + if type_doc != type_ext: + if type_ext == "bool" and type_doc == "int": + cprint(f"[{ext_name}][{prop}] fix bool type property", 'magenta') + elif type_ext == "bool" and ro_ext == "initonly": + if type_doc != "flag": + cprint(f"[{ext_name}][{prop}] should be in doc as flag property", 'magenta') + elif type_doc == "alias": + pass + else: + cprint(f"[{ext_name}][{prop}] type in doc ({type_doc}) != type in ext ({type_ext})", 'magenta') + + +def check_props(name, doc, ext): + ignored_props = {'@*', + '@label', + '@label_margins', + '@label_valign', + '@label_align', + '@label_inner', + '@label_side', + '@label_color' + } + + doc_props_set = set(doc.keys()) + ext_props_set = set(ext.keys()) + + undoc_props = { x for x in (ext_props_set - doc_props_set - ignored_props) if ext[x].get("visibility", "") != "internal" } + unknown_props = doc_props_set - ext_props_set + + if len(undoc_props): + cprint(f"[{ext_name}] undocumented properties: {undoc_props}", 'magenta') + + if len(unknown_props): + cprint(f"[{ext_name}] unknown properties in doc: {unknown_props}", 'yellow') + + # check internal props + internal_props = { x for x in ext_props_set if ext[x].get("visibility", "") == "internal" } + for p in internal_props: + if p in doc: + cprint(f"[{ext_name}] internal property in doc: {p}", 'magenta') + + for prop in doc_props_set & ext_props_set: + check_single_prop(name, prop, doc[prop], ext[prop]) + + + if __name__ == '__main__': parser = argparse.ArgumentParser(description='CEAMMC Pd documentation checker') parser.add_argument('-a', '--all', help='check all', action='store_true') parser.add_argument('-p', '--props', help='check properties', action='store_true') + parser.add_argument('-m', '--methods', help='check methods', action='store_true') + parser.add_argument('-i', '--aliases', help='check aliases', action='store_true') parser.add_argument('-s', '--spell', help='check spell', action='store_true') + parser.add_argument('-x', '--xlets', help='check inlets/outlets', action='store_true') + parser.add_argument('-g', '--args', help='check arguments', action='store_true') parser.add_argument('-v', '--verbose', help='verbose output', action='store_true') parser.add_argument('external', metavar='EXT_NAME', type=str, help='external name') args = parser.parse_args() ext_name = args.external + verbose_output = args.verbose if args.all: args.props = True - args.spell = True - - if args.verbose: - print(f" - checking [{ext_name}] external ...") + # args.spell = True + args.aliases = True + args.methods = True + args.xlets = True + args.args = True pddoc_path = f"{DOC_PATH}{ext_name}.pddoc" if not os.path.exists(pddoc_path): @@ -116,20 +483,63 @@ def check_spell(obj): with open(pddoc_path) as fobj: xml = fobj.read() + cprint(f"checking [{ext_name}] ...", "blue") + root = etree.fromstring(xml.encode()) doc_methods_set = set() doc_props_set = set() doc_props_dict = dict() + doc_args_dict = dict() + doc_aliases = set() + doc_inlets = None + doc_outlets = None + + if not read_ext_info(ext_name): + sys.exit(1) - # parse methods + # parse PDDOC info for appt in root: for x in appt: - if x.tag == "methods": - for m in x: - if m.tag != "method" or m.get("example", False) or m.get("internal", False): + # parse pddoc aliases + if args.aliases: + a = read_doc_aliases(x) + if len(a) > 0: + doc_aliases = a + + if args.xlets: + z = read_doc_inlets(x) + if z is not None and len(z) > 0: + doc_inlets = z + + z = read_doc_outlets(x) + if z is not None and len(z) > 0: + doc_outlets = z + + if args.args and x.tag == "arguments": + for a in x: + if a.tag != "argument": continue - doc_methods_set.add(m.attrib["name"].split(' ')[0]) + + name = a.attrib["name"] + doc_args_dict[name] = dict() + if "units" in a.attrib: + doc_args_dict[name]["units"] = a.attrib["units"] + if "minvalue" in a.attrib: + doc_args_dict[name]["min"] = float(a.attrib["minvalue"]) + if "maxvalue" in a.attrib: + doc_args_dict[name]["max"] = float(a.attrib["maxvalue"]) + if "enum" in a.attrib: + doc_args_dict[name]["enum"] = a.attrib["enum"] + + doc_args_dict[name]["type"] = a.attrib["type"] + + if args.methods: + if x.tag == "methods": + for m in x: + if m.tag != "method" or m.get("example", False) or m.get("internal", False): + continue + doc_methods_set.add(m.attrib["name"].split(' ')[0]) if x.tag == "properties": for p in x: @@ -142,58 +552,33 @@ def check_spell(obj): if "units" in p.attrib: doc_props_dict[name]["units"] = p.attrib["units"] if "minvalue" in p.attrib: - doc_props_dict[name]["minvalue"] = p.attrib["minvalue"] + doc_props_dict[name]["min"] = p.attrib["minvalue"] if "maxvalue" in p.attrib: - doc_props_dict[name]["maxvalue"] = p.attrib["maxvalue"] + doc_props_dict[name]["max"] = p.attrib["maxvalue"] if "default" in p.attrib: doc_props_dict[name]["default"] = p.attrib["default"] if "enum" in p.attrib: doc_props_dict[name]["enum"] = p.attrib["enum"] - if "readonly" in p.attrib: - doc_props_dict[name]["readonly"] = p.attrib["readonly"] + doc_props_dict[name]["access"] = p.attrib.get("access", "readwrite") doc_props_dict[name]["type"] = p.attrib["type"] - ext_methods = read_methods(ext_name) - is_ceammc = '.is_cicm?' in ext_methods or '.is_base?' in ext_methods - ext_methods = set([x for x in ext_methods if len(x) and x[0] != '.' and x[0] != '_']) - # print(doc_methods_set) - # print(ext_methods) - ignored_methods = {'dump', 'dsp', 'signal', 'mouseup', 'mouseenter', 'dialog', - 'zoom', 'mousewheel', 'mousemove', 'mousedown', 'mouseleave', - 'symbol', 'float', 'bang', 'dblclick', 'list', 'dsp_add', 'loadbang', - 'click', 'dsp_add_aliased', 'vis', 'popup', 'eobjreadfrom', 'eobjwriteto', - 'rightclick', 'key' } - undoc_methods_set = ext_methods - doc_methods_set - ignored_methods - unknown_methods = doc_methods_set - ext_methods - if len(undoc_methods_set): - cprint(f"[{ext_name}] undocumented methods: {undoc_methods_set}", 'magenta') - - if len(unknown_methods): - cprint(f"[{ext_name}] unknown methods in doc: {unknown_methods}", 'yellow') - - if args.props and is_ceammc: - ignored_props = {'@*', '@label', '@label_margins', '@label_valign', '@label_align', '@label_inner', '@label_side', '@label_color'} - - ext_props_set, ext_props_dict = read_props(ext_name) - undoc_props_set = ext_props_set - doc_props_set - ignored_props - unknown_props = doc_props_set - ext_props_set - exists_props = ext_props_set & doc_props_set + if args.xlets: + check_xlets(ext_name, doc_inlets, doc_outlets, EXT_INLETS, EXT_OUTLETS) - undoc_props_set = {x for x in undoc_props_set if ext_props_dict[x].get("visibility", "") != "internal" } + if args.aliases: + check_aliases(ext_name, doc_aliases, EXT_ALIASES) - if len(undoc_props_set): - cprint(f"[{ext_name}] undocumented properties: {undoc_props_set}", 'magenta') + if args.methods: + check_methods(ext_name, doc_methods_set, EXT_METHODS) - if len(unknown_props): - cprint(f"[{ext_name}] unknown properties in doc: {unknown_props}", 'yellow') + if args.args: + check_args(ext_name, doc_args_dict, EXT_ARGS_DICT) - # check internal props - internal_props = {x for x in ext_props_set if ext_props_dict[x].get("visibility", "") == "internal" } - for p in internal_props: - if p in doc_props_dict: - cprint(f"[{ext_name}] internal property in doc: {p}", 'magenta') + if args.props: + check_props(ext_name, doc_props_dict, EXT_PROPS_DICT) + if False: HAVE_PDDOC = -1 HAVE_EXTERNAL = 1 HAVE_NONE = 0 @@ -218,51 +603,6 @@ def check_attr(name, p0, p1): p0 = ext_props_dict[p] p1 = doc_props_dict[p] - # readonly in external - if p0.get("access", "") == "readonly": - # but not in doc - if "readonly" not in p1 and p1.get("readonly", "") != "true": - cprint(f"DOC [{ext_name}] missing readonly attribute in \"{p}\"", 'magenta') - - # readonly in docs - if "readonly" in p1 and p1["readonly"]: - # but not readonly in external - if p0.get("access", "") not in ("readonly", "initonly"): - cprint(f"EXT [{ext_name}] non-readonly attribute in \"{p}\"", 'red') - - # units checks - if p1.get("units", False): - if not p0.get("units", False): - cprint(f"[{ext_name}] missing units attribute in external \"{p}\"", 'magenta') - elif p1["units"] != p0["units"]: - u0 = p0["units"] - u1 = p1["units"] - cprint(f"[{ext_name}] non-equal units in \"{p}\": {u0} != {u1}", 'magenta') - - if p0.get("units", False): - if not p1.get("units", False): - cprint(f"DOC [{ext_name}] missing units \"{p}\"", 'magenta') - - if p0["type"] == "bool": - if p1["type"] in ("flag", "alias"): - continue - - if "enum" not in p1: - cprint(f"[{ext_name}] missing attribute enum for bool in \"{p}\"", 'magenta') - - # no default bool value - if ("default" in p0) and ("readonly" not in p0) and ("default" not in p1): - cprint(f"[{ext_name}] missing attribute default for bool in \"{p}\"", 'magenta') - - # non-equal default bool values - if "default" in p0 and "default" in p1: - v0 = str(p0["default"]) - v1 = str(p1["default"]) - if v0 != v1: - cprint(f"[{ext_name}] invalid value for default attribute \"{p}\": {v0} != {v1}", 'magenta') - - continue - # aliases if p0["type"] == "int" and p1["type"] in ("flag", "alias"): continue @@ -280,38 +620,25 @@ def check_attr(name, p0, p1): t1 = p1["type"] cprint(f"[{ext_name}] different attr types: {t0} != {t1} in \"{p}\"", 'magenta') - if "min" in p0 and "minvalue" not in p1: - cprint(f"[{ext_name}] missing attribute minvalue in \"{p}\"", 'magenta') - - if "max" in p0 and "maxvalue" not in p1: - cprint(f"[{ext_name}] missing attribute maxvalue in \"{p}\"", 'magenta') - - if "min" in p0 and "minvalue" in p1: - v0 = str(p0["min"]) - v1 = str(p1["minvalue"]) - if v0 != v1: - cprint(f"DOC [{ext_name}] invalid minvalue \"{p}\": {v1}, in external: {v0}", 'magenta') - - if "max" in p0 and "maxvalue" in p1: - v0 = str(p0["max"]) - v1 = str(p1["maxvalue"]) - if v1 == "2π": - v1 = "6.28319" - - if v0 != v1: - cprint(f"[{ext_name}] invalid value for maxvalue attribute \"{p}\": {v0} != {v1}", 'magenta') - attr = check_attr("default", p0, p1) if attr == HAVE_BOTH: - if isinstance(p0["default"], list): - v0 = p0["default"] + v0 = p0["default"] + v1 = p1["default"] + if isinstance(v0, list): v1 = p1["default"].split(" ") if len(v0) > 0 and (isinstance(v0[0], float) or isinstance(v0[0], int)): v1 = list(map(float, v1)) + v0 = list(map(lambda x: round(x, 3), v0)) + elif len(v0) == 0: + v0 = "()" + elif isinstance(v0, dict): + v0 = "[]" else: - v0 = str(p0["default"]) - v1 = p1["default"] + if isinstance(v0, float): + v0 = round(v0, 3) + + v0 = str(v0) if v1 == "+inf" and float(v0) > 1.0e+24: pass @@ -365,9 +692,12 @@ def check_attr(name, p0, p1): cprint(f"DOC [{ext_name}] no enum for attribute \"{p}\" (in external)", 'magenta') if args.spell: - import jamspell - corrector = jamspell.TSpellCorrector() - - corrector.LoadLangModel('ceammc.bin') - cprint(f"checking [{ext_name}] ...", "blue") - check_spell(root) + try: + import jamspell + corrector = jamspell.TSpellCorrector() + + corrector.LoadLangModel('ceammc.bin') + check_spell(root) + except ModuleNotFoundError as e: + cprint(f"{e} ...", "red") + pass diff --git a/ceammc/distrib/dev_sync_pd.sh b/ceammc/distrib/dev_sync_pd.sh new file mode 100755 index 0000000000..f45b4e5590 --- /dev/null +++ b/ceammc/distrib/dev_sync_pd.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +PD_EXEC="$1" + +DIST_DIR="@PROJECT_BINARY_DIR@/dist" +if [ `uname` == "Darwin" ] +then + APP_DIR="${DIST_DIR}/@PD_MACOSX_APP@" + PD_DIR="${APP_DIR}/Contents/Resources/bin" + PD_CORE="${APP_DIR}/Contents/Resources/bin" +else + PD_DIR="@CMAKE_INSTALL_PREFIX@/@PD_EXE_INSTALL_PATH@" + PD_CORE="@CMAKE_INSTALL_PREFIX@/@PDCORE_LIB_INSTALL_PATH@" +fi + +cp -v "$PD_EXEC" "${PD_DIR}/" diff --git a/ceammc/distrib/dev_sync_tcl.sh b/ceammc/distrib/dev_sync_tcl.sh new file mode 100755 index 0000000000..c3a1f667e1 --- /dev/null +++ b/ceammc/distrib/dev_sync_tcl.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +DIST_DIR="@PROJECT_BINARY_DIR@/dist" +if [ `uname` == "Darwin" ] +then + APP_DIR="${DIST_DIR}/@PD_MACOSX_APP@" + TCL_DIR="${APP_DIR}/Contents/Resources/tcl" +else + TCL_DIR="@CMAKE_INSTALL_PREFIX@/@PD_GUI_PLUGINS_PATH@" +fi + +cp -v @PROJECT_SOURCE_DIR@/tcl/*.tcl "${TCL_DIR}/" diff --git a/ceammc/distrib/linux/CMakeLists.txt b/ceammc/distrib/linux/CMakeLists.txt index 6871387c9a..6f4fc790c5 100644 --- a/ceammc/distrib/linux/CMakeLists.txt +++ b/ceammc/distrib/linux/CMakeLists.txt @@ -2,9 +2,16 @@ file(GLOB _BUILD_SCRIPTS "*.sh") add_custom_target(ceammc_distrib_linux_sources SOURCES ${_BUILD_SCRIPTS}) -if(UNIX) +if(UNIX AND NOT APPLE) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/snapcraft.yaml.in ${PROJECT_BINARY_DIR}/snap/snapcraft.yaml @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/snapcraft.yaml.in ${PROJECT_SOURCE_DIR}/snap/snapcraft.yaml @ONLY) + + if(LINUX_DEBIAN_PACKAGE_FILE_NAME) + add_custom_target(dev_dpkg + COMMAND sudo dpkg --remove ${LINUX_DEBIAN_PACKAGE_NAME} + COMMAND sudo dpkg --install ${PROJECT_BINARY_DIR}/${LINUX_DEBIAN_PACKAGE_FILE_NAME} + USES_TERMINAL) + endif() endif() diff --git a/ceammc/distrib/linux/snapcraft.yaml.in b/ceammc/distrib/linux/snapcraft.yaml.in index 97317ce11e..0cd4df2b55 100644 --- a/ceammc/distrib/linux/snapcraft.yaml.in +++ b/ceammc/distrib/linux/snapcraft.yaml.in @@ -130,6 +130,8 @@ parts: - lsb-release - llvm-dev - librubberband-dev + - tk-dev + - tcl-dev - libjack-jackd2-dev stage-packages: - libsndfile1 diff --git a/ceammc/distrib/mac/CMakeLists.txt b/ceammc/distrib/mac/CMakeLists.txt index 25f2d90a07..f03999a5a6 100644 --- a/ceammc/distrib/mac/CMakeLists.txt +++ b/ceammc/distrib/mac/CMakeLists.txt @@ -22,6 +22,8 @@ if(APPLE) set(BUNDLE_FULL_PATH "${PROJECT_BINARY_DIR}/dist/${BUNDLE}") set(PD_BUNDLE_FULL_PATH ${BUNDLE_FULL_PATH}/Contents/Resources/bin/pd) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/make_bundle.sh + ${PROJECT_BINARY_DIR}/dist/make_bundle.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/make_lib_mac.sh ${PROJECT_BINARY_DIR}/dist/make_lib_mac.sh @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/install_external.sh @@ -39,6 +41,20 @@ if(APPLE) COMMAND ${PROJECT_BINARY_DIR}/dist/make_lib_mac.sh "${PROJECT_BINARY_DIR}/dist" USES_TERMINAL) + add_custom_target(dev_run + COMMAND ${BUNDLE_FULL_PATH}/Contents/Resources/bin/pd + DEPENDS dev_ceammc + USES_TERMINAL) + + add_custom_target(dev_debug + COMMAND ${BUNDLE_FULL_PATH}/Contents/Resources/bin/pd -verbose -d 1 + DEPENDS dev_ceammc + USES_TERMINAL) + + add_custom_target(dev_open + COMMAND open ${BUNDLE_FULL_PATH} + DEPENDS dev_ceammc) + add_custom_target(dev_ext COMMAND ${PROJECT_BINARY_DIR}/dist/install_external.sh DEPENDS ceammc_lib) @@ -50,6 +66,14 @@ if(APPLE) COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/check_bundle.sh "${PROJECT_BINARY_DIR}/dist/${PD_MACOSX_APP}" USES_TERMINAL) + find_program(LLDB lldb) + if(LLDB) + add_custom_target(dev_lldb + COMMAND ${LLDB} --one-line run -- ${BUNDLE_FULL_PATH}/Contents/Resources/bin/pd + DEPENDS dev_ceammc + USES_TERMINAL) + endif() + find_program(GITHUB_CLI NAMES gh gh.exe) if(GITHUB_CLI) message(STATUS "GitHub command line found: ${GITHUB_CLI}") diff --git a/ceammc/distrib/mac/install_deps.sh b/ceammc/distrib/mac/install_deps.sh new file mode 100644 index 0000000000..39f4f19e49 --- /dev/null +++ b/ceammc/distrib/mac/install_deps.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +sudo port install libsndfile \ + portaudio \ + fftw-3-single \ + libmad \ + luajit \ + rubberband \ + llvm-10 \ + cmake \ + ninja \ + glib2 \ + boost \ + ragel \ + gettext \ + pkgconfig \ + llvm_select \ + armadillo \ + scons \ + py310-pip \ + liblo + +sudo port select llvm-10 +sudo port select --set pip pip310 +sudo port select --set pip3 pip310 +pip3 install pddoc diff --git a/ceammc/distrib/mac/macdylibbundler/src/Dependency.cpp b/ceammc/distrib/mac/macdylibbundler/src/Dependency.cpp index e191d917a1..79e89c1f80 100644 --- a/ceammc/distrib/mac/macdylibbundler/src/Dependency.cpp +++ b/ceammc/distrib/mac/macdylibbundler/src/Dependency.cpp @@ -45,7 +45,7 @@ std::string stripPrefix(std::string in) } std::string& rtrim(std::string &s) { - s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun(std::isspace))).base(), s.end()); + s.erase(std::find_if(s.rbegin(), s.rend(), [](int c) { return !std::isspace(c); }).base(), s.end()); return s; } diff --git a/ceammc/distrib/mac/macdylibbundler/src/DylibBundler.cpp b/ceammc/distrib/mac/macdylibbundler/src/DylibBundler.cpp index 3b63967d08..e18a8a102e 100644 --- a/ceammc/distrib/mac/macdylibbundler/src/DylibBundler.cpp +++ b/ceammc/distrib/mac/macdylibbundler/src/DylibBundler.cpp @@ -138,7 +138,10 @@ std::string searchFilenameInRpaths(const std::string& rpath_file, const std::str if (realpath(rpath.c_str(), buffer)) { fullpath = buffer; } else { - std::cerr << "\n/!\\ WARNING : can't get path for '" << rpath_file << "'\n" << "orig " << orig << "\n"; + + std::cerr << "\n/!\\ WARNING : can't get path for '" << rpath << "'\n" + << "orig " << orig << "\n" + << "error: " << strerror(errno) << "\n"; } } diff --git a/ceammc/distrib/mac/macdylibbundler/src/Utils.cpp b/ceammc/distrib/mac/macdylibbundler/src/Utils.cpp index 8651c5ff88..45ca390474 100644 --- a/ceammc/distrib/mac/macdylibbundler/src/Utils.cpp +++ b/ceammc/distrib/mac/macdylibbundler/src/Utils.cpp @@ -77,10 +77,10 @@ bool fileExists( std::string filename ) } else { - //std::cout << "access(filename) returned -1 on filename [" << filename << "] I will try trimming." << std::endl; std::string delims = " \f\n\r\t\v"; std::string rtrimmed = filename.substr(0, filename.find_last_not_of(delims) + 1); - std::string ftrimmed = rtrimmed.substr(rtrimmed.find_first_not_of(delims)); + auto xpos = rtrimmed.find_first_not_of(delims); + std::string ftrimmed = (xpos != std::string::npos) ? rtrimmed.substr(xpos) : rtrimmed; if (access( ftrimmed.c_str(), F_OK ) != -1) { return true; diff --git a/ceammc/distrib/mac/make_bundle.sh b/ceammc/distrib/mac/make_bundle.sh new file mode 100644 index 0000000000..c73aa7e1e2 --- /dev/null +++ b/ceammc/distrib/mac/make_bundle.sh @@ -0,0 +1,501 @@ +#!/bin/bash + +############## +# VARS +############## + +# from CMake +SRC_DIR="@PROJECT_SOURCE_DIR@" +BUILD_DIR="@PROJECT_BINARY_DIR@" +DIST_DIR="@PROJECT_BINARY_DIR@/dist" +DYLIBBUNDLER="@DYLIBBUNDLER@" +BUNDLE="@BUNDLE@" +WISH_APP="@WISH_APP@" +TK_VERSION="@TK_VERSION@" +LIB_LEAPMOTION="@LEAPMOTION_LIBRARY@" +CEAMMC_LIB_VERSION="@CEAMMC_LIB_VERSION@" +CEAMMC_RELEASE_PATCH="release_@CEAMMC_LIB_VERSION@.pd" +CEAMMC_RELEASE_QLIST="release_qlist_@CEAMMC_LIB_VERSION@.txt" + +# relative dir names +PD_APP="$(basename $BUNDLE)" +PD_CONTENT=$PD_APP/Contents +PD_RESOURCES=$PD_CONTENT/Resources +PD_FRAMEWORKS=$PD_CONTENT/Frameworks +PD_EXTRA=$PD_RESOURCES/extra +PD_INCLUDE=$PD_RESOURCES/include +PD_BIN=$PD_RESOURCES/bin +PD_TCL=$PD_RESOURCES/tcl +PD_PO=$PD_RESOURCES/po +PD_CEAMMC=$PD_EXTRA/ceammc +PD_SF2=$PD_CEAMMC/sf2 +PD_SFZ=$PD_CEAMMC/sfz +PD_MIDI=$PD_CEAMMC/midi +PD_LUA=$PD_CEAMMC/lua +PD_SAMPLES=$PD_CEAMMC/sound + +# absolute dir names +BUNDLE_APP="${DIST_DIR}/${PD_APP}" +BUNDLE_CONTENT="${DIST_DIR}/${PD_CONTENT}" +BUNDLE_INFO_PLIST="${BUNDLE_CONTENT}/Info.plist" +BUNDLE_RESOURCES="${DIST_DIR}/${PD_RESOURCES}" +BUNDLE_FRAMEWORKS="${DIST_DIR}/${PD_FRAMEWORKS}" +BUNDLE_PO="${DIST_DIR}/${PD_PO}" +BUNDLE_EXTRA="${DIST_DIR}/${PD_EXTRA}" +BUNDLE_BIN="${DIST_DIR}/${PD_BIN}" +BUNDLE_TCL="${DIST_DIR}/${PD_TCL}" +BUNDLE_CEAMMC="${DIST_DIR}/${PD_CEAMMC}" +BUNDLE_SF2="${DIST_DIR}/${PD_SF2}" +BUNDLE_SFZ="${DIST_DIR}/${PD_SFZ}" +BUNDLE_MIDI="${DIST_DIR}/${PD_MIDI}" +BUNDLE_LUA="${DIST_DIR}/${PD_LUA}" +BUNDLE_SAMPLES="${DIST_DIR}/${PD_SAMPLES}" +BUNDLE_INCLUDE="${DIST_DIR}/${PD_INCLUDE}" +BUNDLE_COMPLETIONS="${BUNDLE_TCL}/ceammc/custom_completions" + +# resources paths +PD_INFO_PLIST="${BUILD_DIR}/dist/Info.plist" +PD_ICON="${SRC_DIR}/ceammc/gui/icons/pd_ceammc.icns" +PD_ICON_FILE="${SRC_DIR}/ceammc/gui/icons/pd_doc.icns" + +# git vars +CURRENT_DATE=$(LANG=C date -u '+%d %h %Y %Z %H:%M:%S') +GIT_BRANCH=$(git --git-dir $SRC_DIR/.git symbolic-ref --short HEAD) +GIT_COMMIT=$(git --git-dir $SRC_DIR/.git describe --tags) + +# source paths +SRC_CEAMMC="${SRC_DIR}/ceammc" +SRC_TCL="${SRC_DIR}/tcl" +CEAMMC_EXT_SRC_DIR="${SRC_DIR}/ceammc/ext/src" +CEAMMC_EXT_BIN_DIR="${BUILD_DIR}/ceammc/ext/src" + +############# +# FUNCTIONS +############# + +# find all Pd externals in specified directory +# usage: external_files DIR +function external_files() { + find "$1" -type f | grep -e 'd_fat' -e 'd_amd64' -e 'd_i386' -e 'pd_darwin' -e '\.pd' -e '\.tcl' +} + +function dylib_external_fix() { + exec=$1 + dir=$2 + + echo "\t- fixing @loader_path for $(basename $exec) ..." + $DYLIBBUNDLER \ + --fix-file "${exec}" \ + --bundle-deps \ + --create-dir \ + --dest-dir "${dir}" \ + --install-path @loader_path/ \ + --overwrite-files \ + --ignore /usr/local/opt/llvm/lib > /dev/null +} + +function copy() +{ + file=$1 + dest=$2 + rel_dest=${dest#$BUNDLE_APP} + rel_dest=${rel_dest:1} + + cp -f "${file}" "${dest}" + if [ $? -eq 0 ]; + then + echo "\t- copying $(basename $1) to \"${rel_dest}\"" + fi +} + +function copy_and_fix_dll() +{ + file=$1 + dir=$2 + + copy "${file}" "${dir}" + dylib_external_fix "${dir}/$(basename $file)" "${dir}" +} + +function exists() { + [ -e "$1" ] +} + +function section() { + echo + tput setaf 2 + echo $1 "..." + tput sgr0 +} + +############## +# MAIN +############## + +# set globbing +shopt -s extglob +mkdir -p "${DIST_DIR}" +cd "${DIST_DIR}" + +############## +# TCL/TK/WISH +############## + +section "Copy Wish Shell to ${PD_APP}" +cp -R "${WISH_APP}" "${BUNDLE_APP}" + +# tcllib: base64 +rsync -a "${SRC_DIR}/ceammc/extra/tcltk/base64" ${BUNDLE_FRAMEWORKS} +# tklib: tooltip +rsync -a "${SRC_DIR}/ceammc/extra/tcltk/tooltip" ${BUNDLE_FRAMEWORKS} +# tklib: ctext +rsync -a "${SRC_DIR}/ceammc/extra/tcltk/ctext" ${BUNDLE_FRAMEWORKS} + +# +# Info.plist +# +copy "${PD_INFO_PLIST}" "${BUNDLE_CONTENT}" +# add git hash to version +BUNDLE_VERSION=`/usr/libexec/PlistBuddy -c "Print :CFBundleDisplayName" "${BUNDLE_INFO_PLIST}"` +BUNDLE_VERSION="${BUNDLE_VERSION} [tcl:${TK_VERSION} git:${GIT_COMMIT}]" +/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName '${BUNDLE_VERSION}'" "${BUNDLE_INFO_PLIST}" + +# format plist XML +tidy -errors -quiet -xml -m -i -wrap 128 "${BUNDLE_INFO_PLIST}" + +section "Update Wish icon" +cd "${BUNDLE_RESOURCES}" +rm -f Wish.icns +cp -p "${PD_ICON}" "${PD_ICON_FILE}" . +mkdir -p "${BUNDLE_BIN}" + +############ +# Pd files +############ + +section "Copying vanilla binaries" +copy_and_fix_dll "$BUILD_DIR/src/pd" "${BUNDLE_BIN}" +copy_and_fix_dll "$BUILD_DIR/src/pdsend" "${BUNDLE_BIN}" +copy_and_fix_dll "$BUILD_DIR/src/pdreceive" "${BUNDLE_BIN}" + +section "Copying vanilla tcl files" +mkdir -p "${BUNDLE_TCL}/ceammc" +cd "${BUNDLE_TCL}/.." +rsync -a --exclude="CMake*" --exclude="Make*" "${SRC_TCL}" . +# link +ln -s tcl Scripts + +section "Copying vanilla docs" +cd "${BUNDLE_RESOURCES}" +rsync -a --exclude=.DS_Store --exclude=CMake* "${SRC_DIR}/doc" . + +section "Copying compiled PO translations" +mkdir -p "${BUNDLE_PO}" +cd "${BUNDLE_PO}" +for msg in ${BUILD_DIR}/po/*.msg +do + copy "${msg}" "${BUNDLE_PO}" +done + +section "Copying source PO translations" +cd "${BUNDLE_PO}" +for po in ${SRC_DIR}/po/*.po +do + copy "${po}" "${BUNDLE_PO}" +done + +section "Copying vanilla abstractions and help" +mkdir -p "${BUNDLE_EXTRA}" +for pd in ${SRC_DIR}/extra/*.pd +do + copy "${pd}" "${BUNDLE_EXTRA}" +done + +section "Copying vanilla externals" +find $BUILD_DIR/extra -maxdepth 1 -type d | sed 1d | grep -v -i cmake | while read ext_dir +do + EXT_NAME=$(basename $ext_dir) + mkdir -p "${BUNDLE_EXTRA}/${EXT_NAME}" + find "${ext_dir}" -type f | grep -v -i cmake | grep -v Makefile | while read target + do + copy "${target}" "${BUNDLE_EXTRA}/${EXT_NAME}" + done +done + +section "Copying vanilla headers" +mkdir -p "${BUNDLE_INCLUDE}" +copy "${SRC_DIR}/src/m_pd.h" "${BUNDLE_INCLUDE}" + +############ +# CEAMMC +############ + +section "Copying CEAMMC tcl plugins" +mkdir -p "${BUNDLE_COMPLETIONS}" +for tcl in ${SRC_DIR}/ceammc/gui/plugins/*.tcl +do + copy ${tcl} "${BUNDLE_TCL}/ceammc" +done + +mkdir -p "${BUNDLE_TCL}/completion-plugin" +for tcl in ${SRC_DIR}/ceammc/gui/plugins/completion-plugin/*.tcl +do + copy ${tcl} "${BUNDLE_TCL}/ceammc" +done + +for cfg in ${SRC_DIR}/ceammc/gui/plugins/completion-plugin/*.cfg +do + copy ${cfg} "${BUNDLE_TCL}/ceammc" +done + +section "Copying Tk Drag-and-Drop plugin" +mkdir -p "${BUNDLE_TCL}/tkdnd" +for tcl in ${SRC_DIR}/ceammc/distrib/tcl/tkdnd/library/*.tcl +do + copy ${tcl} "${BUNDLE_TCL}/tkdnd" +done +copy ${BUILD_DIR}/ceammc/distrib/tcl/tkdnd/*.dylib "${BUNDLE_TCL}/tkdnd" +copy ${BUILD_DIR}/ceammc/distrib/tcl/tkdnd/library/*.tcl "${BUNDLE_TCL}/tkdnd" + +section "Copying CEAMMC tcl completion" +copy $SRC_DIR/ceammc/ext/ceammc_objects.txt "${BUNDLE_COMPLETIONS}" +copy $SRC_DIR/ceammc/ext/extra_objects.txt "${BUNDLE_COMPLETIONS}" + +section "Copying CEAMMC dll" +mkdir -p "${BUNDLE_CEAMMC}" +for dll in $CEAMMC_EXT_BIN_DIR/lib/libceammc*.dylib +do + copy ${dll} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC abstractions" +for abs in $SRC_DIR/ceammc/ext/abstractions/*.pd +do + copy ${abs} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC externals" +external_files $CEAMMC_EXT_BIN_DIR | while read f +do + copy_and_fix_dll ${f} "${BUNDLE_CEAMMC}" +done + +section "Copying CEAMMC STK rawwaves" +mkdir -p "${BUNDLE_CEAMMC}/stk" +for wave in $SRC_DIR/ceammc/extra/stk/stk/rawwaves/*.raw +do + copy ${wave} "${BUNDLE_CEAMMC}/stk" +done + +section "Copying CEAMMC fluidsynth soundfonts" +mkdir -p "${BUNDLE_SF2}" +for sf in $SRC_CEAMMC/extra/fluidsynth/fluidsynth/sf2/* +do + copy ${sf} "${BUNDLE_SF2}" +done + +section "Copying CEAMMC sf2 soundfonts" +for sf in $SRC_CEAMMC/ext/doc/sf2/* +do + copy ${sf} "${BUNDLE_SF2}" +done + +section "Copying CEAMMC sfz soundfonts" +mkdir -p "${BUNDLE_SFZ}" +for sf in $SRC_CEAMMC/ext/doc/sfz/* +do + copy ${sf} "${BUNDLE_SFZ}" +done + +section "Copying sound samples" +mkdir -p "${BUNDLE_SAMPLES}" +for samp in $SRC_CEAMMC/ext/doc/sound/* +do + copy ${samp} "${BUNDLE_SAMPLES}" +done + +section "Copying CEAMMC lua files" +mkdir -p "${BUNDLE_LUA}" +for lua in $SRC_CEAMMC/ext/doc/lua/*.@(lua) +do + copy ${lua} "${BUNDLE_LUA}" +done + +section "Copying RHVoice.conf" +copy $SRC_CEAMMC/ext/src/misc/RHVoice.conf "${BUNDLE_CEAMMC}" + +section "Copying CEAMMC midi files" +mkdir -p "${BUNDLE_MIDI}" +for midi in $SRC_CEAMMC/ext/doc/midi/*.@(mid|midi) +do + copy ${midi} "${BUNDLE_MIDI}" +done + +section "Copying CEAMMC cmake files" +mkdir -p "${BUNDLE_INCLUDE}" +copy "${SRC_DIR}/cmake/PdExternal.cmake" "${BUNDLE_INCLUDE}" + +section "Copying CEAMMC class wrappers" +for wrapper in $BUILD_DIR/ceammc/ext/class-wrapper/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + fname=$(basename $wrapper) + mod_name=$(echo $fname | cut -d. -f1) + copy_and_fix_dll ${wrapper} "${BUNDLE_CEAMMC}" + for pdhelp in $SRC_DIR/ceammc/ext/class-wrapper/modules/$mod_name/help/*-help.pd + do + copy ${pdhelp} "${BUNDLE_CEAMMC}" + done +done + +section "Copying CEAMMC class wrappers completions" +mkdir -p "${BUNDLE_COMPLETIONS}" +find ${SRC_CEAMMC}/ext/class-wrapper/modules -name 'completion_*.txt' | while read txt +do + copy $txt "${BUNDLE_COMPLETIONS}" +done + +section "Copying CEAMMC help files" +rsync --archive --include='*.pd' --exclude='*' "${SRC_CEAMMC}/ext/doc/" "${BUNDLE_CEAMMC}" + +section "Copying Faust libraries" +rsync --dirs --include='*.lib' --exclude='*' "${SRC_CEAMMC}/extra/faust/faust/libraries/" "${BUNDLE_CEAMMC}/faust" + +section "Copying Faust examples" +rsync --dirs "${SRC_CEAMMC}/ext/doc/faust/" "${BUNDLE_CEAMMC}/faust" + +section "Copying CEAMMC help additional files" +for f in ${SRC_CEAMMC}/ext/doc/*.@(mod|txt|wav|glitch) +do + copy ${f} "${BUNDLE_CEAMMC}" + chmod 0444 "${BUNDLE_CEAMMC}/$(basename $f)" +done + +section "Copying CEAMMC HOA help files" +mkdir -p "${BUNDLE_CEAMMC}/hoa" +for f in $SRC_CEAMMC/ext/doc/hoa/*.@(pd|txt) +do + copy ${f} "${BUNDLE_CEAMMC}/hoa" + chmod 0444 "${BUNDLE_CEAMMC}/hoa/$(basename $f)" +done + +section "Change Pd help file" +rm -f "${BUNDLE_CEAMMC}/index-help.pd" +rm -f "${BUNDLE_EXTRA}/index-help.pd" +copy $SRC_DIR/ceammc/ext/doc/index-help.pd "${BUNDLE_EXTRA}" +chmod 0444 "${BUNDLE_EXTRA}/index-help.pd" +copy $SRC_DIR/ceammc/distrib/${CEAMMC_RELEASE_PATCH} "${BUNDLE_CEAMMC}" +copy $SRC_DIR/ceammc/distrib/${CEAMMC_RELEASE_QLIST} "${BUNDLE_CEAMMC}" + +section "Copying CEAMMC about file" +cat $BUILD_DIR/ceammc/ext/doc/about.pd | sed "s/%GIT_BRANCH%/$GIT_BRANCH/g" | \ + sed "s/%GIT_COMMIT%/$GIT_COMMIT/g" | \ + sed "s/%BUILD_DATE%/$CURRENT_DATE/g" > "${BUNDLE_CEAMMC}/about.pd" +chmod 0444 "${BUNDLE_CEAMMC}/about.pd" + +section "Copying license" +copy $SRC_DIR/LICENSE.txt "${BUNDLE_RESOURCES}/Scripts" + +############## +# 3RD PARTY +############## + +section "Copying CEAMMC extra" +copy_and_fix_dll ${BUILD_DIR}/ceammc/extra/comport/system.serial.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_CEAMMC}" + +# install soundtouch~ to ceammc +section "Copying SoundTouch external" +for ext in $BUILD_DIR/ceammc/extra/SoundTouch/pd/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy_and_fix_dll ${ext} "${BUNDLE_CEAMMC}" +done + +for pdhelp in $SRC_DIR/ceammc/extra/SoundTouch/pd/*-help.pd +do + copy ${pdhelp} "${BUNDLE_CEAMMC}" +done + +section "Copying zconf" +mkdir -p "${BUNDLE_EXTRA}/zconf" +copy ${BUILD_DIR}/ceammc/extra/flext/zconf/zconf.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/zconf" +copy ${SRC_DIR}/ceammc/extra/flext/zconf/zconf-help.pd "${BUNDLE_EXTRA}/zconf" + +section "Copying libdir" +mkdir -p "${BUNDLE_EXTRA}/libdir" +copy $BUILD_DIR/ceammc/extra/libdir/libdir.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/libdir-help.pd "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/libdir-meta.pd "${BUNDLE_EXTRA}/libdir" +copy $SRC_DIR/ceammc/extra/libdir/libdir/LICENSE.txt "${BUNDLE_EXTRA}/libdir" + +section "Copying import" +mkdir -p "${BUNDLE_EXTRA}/import" +copy $BUILD_DIR/ceammc/extra/import/import.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/import-help.pd "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/import-meta.pd "${BUNDLE_EXTRA}/import" +copy $SRC_DIR/ceammc/extra/import/LICENSE.txt "${BUNDLE_EXTRA}/import" + +section "Copying VASP" +mkdir -p "${BUNDLE_EXTRA}/vasp" +copy $BUILD_DIR/ceammc/extra/flext/vasp.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/vasp" +cp $SRC_DIR/ceammc/extra/flext/vasp/pd/* "${BUNDLE_EXTRA}/vasp" +cp $SRC_DIR/ceammc/extra/flext/vasp/pd-help/* "${BUNDLE_EXTRA}/vasp" +copy $SRC_DIR/ceammc/extra/flext/vasp/gpl.txt "${BUNDLE_EXTRA}/vasp" +copy $SRC_DIR/ceammc/extra/flext/vasp/license.txt "${BUNDLE_EXTRA}/vasp" + +section "Copying xsample" +mkdir -p "${BUNDLE_EXTRA}/xsample" +copy $BUILD_DIR/ceammc/extra/flext/xsample/xsample.@(d_fat|d_amd64|d_i386|pd_darwin) "${BUNDLE_EXTRA}/xsample" +cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd/* "${BUNDLE_EXTRA}/xsample" +cp $SRC_DIR/ceammc/extra/flext/xsample/xsample/pd-ex/* "${BUNDLE_EXTRA}/xsample" +copy $SRC_DIR/ceammc/extra/flext/xsample/xsample/gpl.txt "${BUNDLE_EXTRA}/xsample" +copy $SRC_DIR/ceammc/extra/flext/xsample/xsample/license.txt "${BUNDLE_EXTRA}/xsample" + +# LeapMotion +if exists $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) +then + section "Copying LeapMotion" + mkdir -p "$BUNDLE_EXTRA/leapmotion" + copy $BUILD_DIR/ceammc/extra/flext/leapmotion/leapmotion.@(d_fat|d_amd64|d_i386|pd_darwin) "$BUNDLE_EXTRA/leapmotion" + copy $LIB_LEAPMOTION "$BUNDLE_EXTRA/leapmotion" + + for pdhelp in $SRC_DIR/ceammc/extra/flext/leapmotion/*.pd + do + copy ${pdhelp} "$BUNDLE_EXTRA/leapmotion" + done +fi + +section "Copying autotune external" +mkdir -p "$BUNDLE_EXTRA/autotune" +for ext in $BUILD_DIR/ceammc/extra/autotune/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "$BUNDLE_EXTRA/autotune" +done + +for pdhelp in $SRC_DIR/ceammc/extra/autotune/*-help.pd +do + copy ${pdhelp} "$BUNDLE_EXTRA/autotune" +done + +section "Copying disis_munger~ external" +mkdir -p "$BUNDLE_EXTRA/disis_munger~" +for ext in $BUILD_DIR/ceammc/extra/flext/disis_munger/*.@(d_fat|d_amd64|d_i386|pd_darwin) +do + copy ${ext} "$BUNDLE_EXTRA/disis_munger~" +done + +for pdhelp in $SRC_DIR/ceammc/extra/flext/disis_munger/*-help.pd +do + copy ${pdhelp} "$BUNDLE_EXTRA/disis_munger~" +done + +# "code signing" which also sets entitlements +# note: "-" identity results in "ad-hoc signing" aka no signing is performed +# for one, this allows loading un-validated external libraries on macOS 10.15+: +# https://cutecoder.org/programming/shared-framework-hardened-runtime +ENTITLEMENTS="${SRC_DIR}/mac/stuff/pd.entitlements" +codesign -f --deep -s "-" --entitlements ${ENTITLEMENTS} \ + "${BUNDLE_FRAMEWORKS}/Tcl.framework/Versions/Current" +codesign -f --deep -s "-" --entitlements ${ENTITLEMENTS} \ + ${BUNDLE_FRAMEWORKS}/Tk.framework/Versions/Current +codesign --deep -s "-" --entitlements ${ENTITLEMENTS} ${BUNDLE_APP} + +cd "${BUILD_DIR}" diff --git a/ceammc/distrib/mac/make_lib_mac.sh b/ceammc/distrib/mac/make_lib_mac.sh index 6773f05dd3..084fe0cfee 100755 --- a/ceammc/distrib/mac/make_lib_mac.sh +++ b/ceammc/distrib/mac/make_lib_mac.sh @@ -41,10 +41,27 @@ function skip_ext { fi } +function dylib_external_fix() { + exec=$1 + dir=$2 + + echo "\t- fixing @loader_path for $(basename $exec) ..." + + $DYLIBBUNDLER \ + --fix-file "${exec}" \ + --bundle-deps \ + --create-dir \ + --dest-dir "${dir}" \ + --install-path @loader_path/ \ + --overwrite-files \ + --ignore /usr/local/opt/llvm/lib > /dev/null +} + # main section "installing" $CMAKE --install ${BINDIR} --prefix ${INSTALL_DIR} +cp ${BINDIR}/ceammc/ext/src/*.d_amd64 "${INSTALL_DIR}/lib/pd_ceammc/extra/ceammc" section "copy installed files" @@ -65,7 +82,7 @@ find_ext ${CEAMMC_DIR} "*" | while read file do ext_name=$(basename $file) echo "+ Fix DLL: '$ext_name'" - ${DYLIBBUNDLER} -x ${CEAMMC_DIR}/$ext_name -b -d ${CEAMMC_DIR} -p @loader_path/ -of + dylib_external_fix "${CEAMMC_DIR}/$ext_name" "${CEAMMC_DIR}" done section "fix help files index" diff --git a/ceammc/distrib/mac/shellrc b/ceammc/distrib/mac/shellrc new file mode 100644 index 0000000000..1a7dfba843 --- /dev/null +++ b/ceammc/distrib/mac/shellrc @@ -0,0 +1,7 @@ +ntestm() { + ninja test_ext_${1} && ./ceammc/ext/tests/test_ext_${1} ${@:2} +} + +ntest() { + ninja test_${1} && ./ceammc/ext/tests/test_${1} ${@:2} +} diff --git a/ceammc/distrib/release_0.9.5.pd b/ceammc/distrib/release_0.9.5.pd new file mode 100644 index 0000000000..19042cd0bd --- /dev/null +++ b/ceammc/distrib/release_0.9.5.pd @@ -0,0 +1,127 @@ +#N canvas 24 118 568 506 12; +#X obj 32 393 ui.gain2~ @size 116 15 @receive "vol.main" @send "(null)" @pinned 0 @presetname "(null)" @mouse_events 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value 0 @relative 1 @midi_channel 0 @midi_control 0 @midi_pickup 1 @show_range 1; +#X obj 32 417 dac~, f 16; +#X obj 134 86 s \$0-next; +#X obj 32 31 r speech; +#X obj 405 37 ui.bang @size 44 44 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 1 0.3399 0.533564 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "PRESS\ TO\ START" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0; +#X obj 197 327 ui.display @size 300 100 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 0 @float_width -1 @hex 0 @hex_width 2; +#X obj 197 253 r speech; +#X obj 46 326 catch~ \$0-outl; +#X obj 46 351 catch~ \$0-outr; +#N canvas 219 253 465 421 drums~ 0; +#X obj 81 355 throw~ \$0-outl; +#X obj 253 355 throw~ \$0-outr; +#X obj 312 27 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 222 55 metro 100; +#X obj 81 303 pan.spread~ 3; +#X obj 81 268 fx.sdelay~ 15; +#X obj 222 29 r drums; +#X obj 81 329 gain~ 2 @db 0 0, f 25; +#X obj 125 218 synth.kick2~; +#X obj 81 186 synth.clap~; +#X obj 221 186 synth.hat~ @attack 60; +#X obj 221 212 gain~ @db -12; +#X obj 222 145 route.random 4; +#X connect 2 0 3 0; +#X connect 3 0 12 0; +#X connect 4 0 7 0; +#X connect 4 1 7 1; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 0 0; +#X connect 7 1 1 0; +#X connect 8 0 4 1; +#X connect 9 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 4 2; +#X connect 12 0 9 0; +#X connect 12 1 8 0; +#X connect 12 2 10 0; +#X restore 430 253 pd drums~; +#X obj 32 60 speech.rhvoice~; +#N canvas 765 85 739 527 luactl 0; +#X obj 232 100 r \$0-next; +#X obj 315 175 s vol.main; +#X obj 315 149 loadmsg @db -6; +#X msg 177 247 bang; +#X obj 177 308 ui.display @size 54 18 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 1 @float_width -1 @hex 0 @hex_width 2; +#X msg 231 247 call next; +#X obj 177 282 lang.lua 2 2; +#A .restore i = 1; +#A .restore sentences = \\x7b\\x7d; +#A .restore sentences[1] = "Привет! Центр электроакустической музыки Московской консерватории рад анонсировать новый выпуск сборки программы для визуального программирования звука и мультимедиа PureData и библиотеки расширений CEAMMC-LIB"; +#A .restore sentences[2] = "Среди основных изменений - добавлена поддержка языкового синтеза на основе свободного синтезатора RHVoice"; +#A .restore sentences[3] = "это позволило добавить синтез на руском языке\\x2c который вы сейчас слышите"; +#A .restore sentences[4] = "также поддерживаются языки:"; +#A .restore sentences[5] = "English language\\x2c hello from PureData speech synthesizer and voice Slt"; +#A .restore sentences[6] = "Portugues do Brasil. Saudações da PureData"; +#A .restore sentences[7] = "Татар теле. Сәлам PureData"; +#A .restore sentences[8] = "а также другие языки и голоса\\x2c узнайте подробнее на сайте разработки RHVoice"; +#A .restore sentences[9] = "добавлены объекты для работы с файловыми путями\\x2c запись в циклический буфер"; +#A .restore sentences[10] = "поддержка протоколов DMX через ArtNet для управления световыми приборами\\x2c отправка запросов HTTP\\x2c новые объекты для работы с протоколом O-S-C для удобного взаимодействия с другими звуковыми средами"; +#A .restore sentences[11] = "кроме того\\x2c добавлен объект для работы с языком программирования Lua\\x2c что позволяет опытным пользователям использовать лучшие стороны виузального и текстового программирования для создания сложной логики"; +#A .restore sentences[12] = "добавлены функции для гранулярного синтеза в объект array.grainer~\\x2c а также три синтезатора на основе языка FAUST: бочка\\x2c клэп и хай-хэт"; +#A .restore sentences[13] = "Программное обеспечение PureData - распространяется под свободной лицензией \ GPL и доступно для скачивания на сайте http://github.com. Желаем новых звуковых открытий!"; +#A .restore ctl = \\x7b\\x7d; +#A .restore ctl[1] = \\x7b"lang"\\x2c"Anna"\\x7d; +#A .restore ctl[2] = \\x7b"lang"\\x2c"Mikhail"\\x7d; +#A .restore ctl[3] = \\x7b"lang"\\x2c"Timofey"\\x7d; +#A .restore ctl[4] = \\x7b"lang"\\x2c"Arina"\\x7d; +#A .restore ctl[5] = \\x7b"lang"\\x2c"Clb"\\x7d; +#A .restore ctl[6] = \\x7b"lang"\\x2c"Letícia-F123"\\x7d; +#A .restore ctl[7] = \\x7b"lang"\\x2c"Talgat"\\x7d; +#A .restore ctl[8] = \\x7b"lang"\\x2c"Tatiana"\\x7d; +#A .restore ctl[9] = \\x7b"lang"\\x2c"Pavel"\\x7d; +#A .restore ctl[10] = \\x7b"lang"\\x2c"Irina"\\x7d; +#A .restore ctl[11] = \\x7b"lang"\\x2c"Elena"\\x7d; +#A .restore ctl[12] = \\x7b"lang"\\x2c"Aleksandr-hq"\\x7d; +#A .restore ctl[13] = \\x7b"drums"\\x2c1\\x7d; +#A .restore function on_bang(idx); +#A .restore \\x09 i = 1; +#A .restore \\x09 next(); +#A .restore end; +#A .restore function next(); +#A .restore \\x09 ct = ctl[i]; +#A .restore \\x09 if ct ~= nil then; +#A .restore \\x09 \\x09 list_to(1\\x2c ctl[i]); +#A .restore if i == 13 then; +#A .restore \\x09 \\x09 \\x09 sleep(4000); +#A .restore \\x09 \\x09 \\x09 list_to(1\\x2c \\x7b"drums"\\x2c 0\\x7d); +#A .restore \\x09 \\x09 end; +#A .restore \\x09 end; +#A .restore \\x09 if i > #sentences then; +#A .restore \\x09 \\x09 return; +#A .restore \\x09 end; +#A .restore \\x09 symbol_to(0\\x2c sentences[i]); +#A .restore \\x09 i = i+1; +#A .restore end; +#A .restore; +#X obj 177 97 inlet; +#X obj 177 389 s speech; +#X msg 258 368 @voice \$1; +#X obj 258 342 list.route lang drums @trim; +#X obj 351 374 s drums; +#X obj 319 415 print; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 6 0 8 0; +#X connect 6 1 10 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; +#X connect 10 1 11 0; +#X connect 10 1 12 0; +#X restore 405 86 pd luactl; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 3 0 10 0; +#X connect 4 0 11 0; +#X connect 6 0 5 0; +#X connect 7 0 0 0; +#X connect 8 0 0 1; +#X connect 10 0 0 1; +#X connect 10 0 0 0; +#X connect 10 1 2 0; diff --git a/ceammc/distrib/release_0.9.6.pd b/ceammc/distrib/release_0.9.6.pd new file mode 100644 index 0000000000..19042cd0bd --- /dev/null +++ b/ceammc/distrib/release_0.9.6.pd @@ -0,0 +1,127 @@ +#N canvas 24 118 568 506 12; +#X obj 32 393 ui.gain2~ @size 116 15 @receive "vol.main" @send "(null)" @pinned 0 @presetname "(null)" @mouse_events 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value 0 @relative 1 @midi_channel 0 @midi_control 0 @midi_pickup 1 @show_range 1; +#X obj 32 417 dac~, f 16; +#X obj 134 86 s \$0-next; +#X obj 32 31 r speech; +#X obj 405 37 ui.bang @size 44 44 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 1 0.3399 0.533564 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "PRESS\ TO\ START" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0; +#X obj 197 327 ui.display @size 300 100 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 0 @float_width -1 @hex 0 @hex_width 2; +#X obj 197 253 r speech; +#X obj 46 326 catch~ \$0-outl; +#X obj 46 351 catch~ \$0-outr; +#N canvas 219 253 465 421 drums~ 0; +#X obj 81 355 throw~ \$0-outl; +#X obj 253 355 throw~ \$0-outr; +#X obj 312 27 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 222 55 metro 100; +#X obj 81 303 pan.spread~ 3; +#X obj 81 268 fx.sdelay~ 15; +#X obj 222 29 r drums; +#X obj 81 329 gain~ 2 @db 0 0, f 25; +#X obj 125 218 synth.kick2~; +#X obj 81 186 synth.clap~; +#X obj 221 186 synth.hat~ @attack 60; +#X obj 221 212 gain~ @db -12; +#X obj 222 145 route.random 4; +#X connect 2 0 3 0; +#X connect 3 0 12 0; +#X connect 4 0 7 0; +#X connect 4 1 7 1; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 0 0; +#X connect 7 1 1 0; +#X connect 8 0 4 1; +#X connect 9 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 4 2; +#X connect 12 0 9 0; +#X connect 12 1 8 0; +#X connect 12 2 10 0; +#X restore 430 253 pd drums~; +#X obj 32 60 speech.rhvoice~; +#N canvas 765 85 739 527 luactl 0; +#X obj 232 100 r \$0-next; +#X obj 315 175 s vol.main; +#X obj 315 149 loadmsg @db -6; +#X msg 177 247 bang; +#X obj 177 308 ui.display @size 54 18 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 1 @float_width -1 @hex 0 @hex_width 2; +#X msg 231 247 call next; +#X obj 177 282 lang.lua 2 2; +#A .restore i = 1; +#A .restore sentences = \\x7b\\x7d; +#A .restore sentences[1] = "Привет! Центр электроакустической музыки Московской консерватории рад анонсировать новый выпуск сборки программы для визуального программирования звука и мультимедиа PureData и библиотеки расширений CEAMMC-LIB"; +#A .restore sentences[2] = "Среди основных изменений - добавлена поддержка языкового синтеза на основе свободного синтезатора RHVoice"; +#A .restore sentences[3] = "это позволило добавить синтез на руском языке\\x2c который вы сейчас слышите"; +#A .restore sentences[4] = "также поддерживаются языки:"; +#A .restore sentences[5] = "English language\\x2c hello from PureData speech synthesizer and voice Slt"; +#A .restore sentences[6] = "Portugues do Brasil. Saudações da PureData"; +#A .restore sentences[7] = "Татар теле. Сәлам PureData"; +#A .restore sentences[8] = "а также другие языки и голоса\\x2c узнайте подробнее на сайте разработки RHVoice"; +#A .restore sentences[9] = "добавлены объекты для работы с файловыми путями\\x2c запись в циклический буфер"; +#A .restore sentences[10] = "поддержка протоколов DMX через ArtNet для управления световыми приборами\\x2c отправка запросов HTTP\\x2c новые объекты для работы с протоколом O-S-C для удобного взаимодействия с другими звуковыми средами"; +#A .restore sentences[11] = "кроме того\\x2c добавлен объект для работы с языком программирования Lua\\x2c что позволяет опытным пользователям использовать лучшие стороны виузального и текстового программирования для создания сложной логики"; +#A .restore sentences[12] = "добавлены функции для гранулярного синтеза в объект array.grainer~\\x2c а также три синтезатора на основе языка FAUST: бочка\\x2c клэп и хай-хэт"; +#A .restore sentences[13] = "Программное обеспечение PureData - распространяется под свободной лицензией \ GPL и доступно для скачивания на сайте http://github.com. Желаем новых звуковых открытий!"; +#A .restore ctl = \\x7b\\x7d; +#A .restore ctl[1] = \\x7b"lang"\\x2c"Anna"\\x7d; +#A .restore ctl[2] = \\x7b"lang"\\x2c"Mikhail"\\x7d; +#A .restore ctl[3] = \\x7b"lang"\\x2c"Timofey"\\x7d; +#A .restore ctl[4] = \\x7b"lang"\\x2c"Arina"\\x7d; +#A .restore ctl[5] = \\x7b"lang"\\x2c"Clb"\\x7d; +#A .restore ctl[6] = \\x7b"lang"\\x2c"Letícia-F123"\\x7d; +#A .restore ctl[7] = \\x7b"lang"\\x2c"Talgat"\\x7d; +#A .restore ctl[8] = \\x7b"lang"\\x2c"Tatiana"\\x7d; +#A .restore ctl[9] = \\x7b"lang"\\x2c"Pavel"\\x7d; +#A .restore ctl[10] = \\x7b"lang"\\x2c"Irina"\\x7d; +#A .restore ctl[11] = \\x7b"lang"\\x2c"Elena"\\x7d; +#A .restore ctl[12] = \\x7b"lang"\\x2c"Aleksandr-hq"\\x7d; +#A .restore ctl[13] = \\x7b"drums"\\x2c1\\x7d; +#A .restore function on_bang(idx); +#A .restore \\x09 i = 1; +#A .restore \\x09 next(); +#A .restore end; +#A .restore function next(); +#A .restore \\x09 ct = ctl[i]; +#A .restore \\x09 if ct ~= nil then; +#A .restore \\x09 \\x09 list_to(1\\x2c ctl[i]); +#A .restore if i == 13 then; +#A .restore \\x09 \\x09 \\x09 sleep(4000); +#A .restore \\x09 \\x09 \\x09 list_to(1\\x2c \\x7b"drums"\\x2c 0\\x7d); +#A .restore \\x09 \\x09 end; +#A .restore \\x09 end; +#A .restore \\x09 if i > #sentences then; +#A .restore \\x09 \\x09 return; +#A .restore \\x09 end; +#A .restore \\x09 symbol_to(0\\x2c sentences[i]); +#A .restore \\x09 i = i+1; +#A .restore end; +#A .restore; +#X obj 177 97 inlet; +#X obj 177 389 s speech; +#X msg 258 368 @voice \$1; +#X obj 258 342 list.route lang drums @trim; +#X obj 351 374 s drums; +#X obj 319 415 print; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 6 0 8 0; +#X connect 6 1 10 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; +#X connect 10 1 11 0; +#X connect 10 1 12 0; +#X restore 405 86 pd luactl; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 3 0 10 0; +#X connect 4 0 11 0; +#X connect 6 0 5 0; +#X connect 7 0 0 0; +#X connect 8 0 0 1; +#X connect 10 0 0 1; +#X connect 10 0 0 0; +#X connect 10 1 2 0; diff --git a/ceammc/distrib/release_text_0.9.5.txt b/ceammc/distrib/release_text_0.9.5.txt new file mode 100644 index 0000000000..e66f6fc0f9 --- /dev/null +++ b/ceammc/distrib/release_text_0.9.5.txt @@ -0,0 +1,110 @@ +# pan 0 +# voice rms +# fx-ps on 0 +# dur 0 +# spring vol 0 +# main 1 + +// INTRO +.say Hello! +.sleep 300 +# grain 1 +.sleep 3000 +.say this is a new release of ceammc library version 0.9.4 +.say new objects are added: +# voice slt +.say tempo analyzer, array granulator + +// REVERSED ECHO +.say reverse echo effect +.sleep 500 +.say without fx +# fx-recho 0 +.sleep 3000 +.say with fx +# fx-recho 1 +.sleep 3300 + +// PITCHSHIFT +.say pitchshift object based on RubberBand library added +.say it can do transpositions +// up +# voice rms +# fx-ps on 1 +# fx-ps 12 +# main 0 +.say to higher range +// normal +# fx-ps 0 +# main 1 +.say and +// lower +# main 0 +# fx-ps -6 +.say lower range +// normal +# main 1 +# fx-ps 0 +# fx-ps on 0 + +// MUSIC +.say music duration syntax to time converter added +.say you can enter rythm patterns as musicians are used to do: +.say in terms of beat fractions, using quarter, eight notes etc. +# dur 1 +.sleep 4000 +# dur 0 +.sleep 300 + +// FILESYSTEM +.say Basic filesystem path functions added: search, normalize and split +.say Let's see path split in action: +# path 1 +.sleep 700 + +// SPRING +.say Spring object added and can be used to emulate Pitch Wheel behaivor: +.sleep 500 +# spring value 0.8 +# spring vol 1 +.sleep 1000 +# spring value 0.1 +.sleep 1000 +# spring vol 0 +.sleep 300 + +// SFZ +.say SFZ soundfont player added +.say Let's hear +# sfizz play +.sleep 1000 +.say then modulate +# sfizz mod +.sleep 1000 +.say and quit +# sfizz stop +.sleep 300 + +// BELLS +.say new physically based modeling bell synthesizers are added from FAUST project +.say Let's hear carillion +.sleep 100 +# bells 1 +.sleep 3000 +# bells 0 +.sleep 300 + +// DRUMS +.say Kick and snare synthesizers are added from FAUST project +.sleep 100 +# drums 1 +.sleep 3000 +# drums 0 +.sleep 300 + +// END +.say The more information can be found at http://github.com/uliss/pure-data +.say Bye and good patching! +# grain 1 + + diff --git a/ceammc/distrib/tcl/CMakeLists.txt b/ceammc/distrib/tcl/CMakeLists.txt new file mode 100644 index 0000000000..5691d0c7c3 --- /dev/null +++ b/ceammc/distrib/tcl/CMakeLists.txt @@ -0,0 +1,19 @@ +add_subdirectory(tkdnd) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/tkdnd/library/pkgIndex.tcl + tkdnd/library/tkdnd.tcl + tkdnd/library/tkdnd_generic.tcl + tkdnd/library/tkdnd_compat.tcl + tkdnd/library/tkdnd_macosx.tcl + tkdnd/library/tkdnd_unix.tcl + tkdnd/library/tkdnd_windows.tcl + tkdnd/library/tkdnd_utils.tcl + DESTINATION + ${PD_GUI_PLUGINS_PATH}/tkdnd) + +install(TARGETS tkdnd2.9.3 + RUNTIME DESTINATION ${PD_GUI_PLUGINS_PATH}/tkdnd + LIBRARY DESTINATION ${PD_GUI_PLUGINS_PATH}/tkdnd + ARCHIVE DESTINATION ${PD_GUI_PLUGINS_PATH}/tkdnd +) diff --git a/ceammc/distrib/tcl/tkdnd b/ceammc/distrib/tcl/tkdnd new file mode 160000 index 0000000000..daab11ca08 --- /dev/null +++ b/ceammc/distrib/tcl/tkdnd @@ -0,0 +1 @@ +Subproject commit daab11ca08171c1b911c65a4d332c7b96157bd65 diff --git a/ceammc/distrib/template_release_0.9.5.pd b/ceammc/distrib/template_release_0.9.5.pd new file mode 100644 index 0000000000..19042cd0bd --- /dev/null +++ b/ceammc/distrib/template_release_0.9.5.pd @@ -0,0 +1,127 @@ +#N canvas 24 118 568 506 12; +#X obj 32 393 ui.gain2~ @size 116 15 @receive "vol.main" @send "(null)" @pinned 0 @presetname "(null)" @mouse_events 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value 0 @relative 1 @midi_channel 0 @midi_control 0 @midi_pickup 1 @show_range 1; +#X obj 32 417 dac~, f 16; +#X obj 134 86 s \$0-next; +#X obj 32 31 r speech; +#X obj 405 37 ui.bang @size 44 44 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 1 0.3399 0.533564 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "PRESS\ TO\ START" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0; +#X obj 197 327 ui.display @size 300 100 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 0 @float_width -1 @hex 0 @hex_width 2; +#X obj 197 253 r speech; +#X obj 46 326 catch~ \$0-outl; +#X obj 46 351 catch~ \$0-outr; +#N canvas 219 253 465 421 drums~ 0; +#X obj 81 355 throw~ \$0-outl; +#X obj 253 355 throw~ \$0-outr; +#X obj 312 27 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 222 55 metro 100; +#X obj 81 303 pan.spread~ 3; +#X obj 81 268 fx.sdelay~ 15; +#X obj 222 29 r drums; +#X obj 81 329 gain~ 2 @db 0 0, f 25; +#X obj 125 218 synth.kick2~; +#X obj 81 186 synth.clap~; +#X obj 221 186 synth.hat~ @attack 60; +#X obj 221 212 gain~ @db -12; +#X obj 222 145 route.random 4; +#X connect 2 0 3 0; +#X connect 3 0 12 0; +#X connect 4 0 7 0; +#X connect 4 1 7 1; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 0 0; +#X connect 7 1 1 0; +#X connect 8 0 4 1; +#X connect 9 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 4 2; +#X connect 12 0 9 0; +#X connect 12 1 8 0; +#X connect 12 2 10 0; +#X restore 430 253 pd drums~; +#X obj 32 60 speech.rhvoice~; +#N canvas 765 85 739 527 luactl 0; +#X obj 232 100 r \$0-next; +#X obj 315 175 s vol.main; +#X obj 315 149 loadmsg @db -6; +#X msg 177 247 bang; +#X obj 177 308 ui.display @size 54 18 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 1 @float_width -1 @hex 0 @hex_width 2; +#X msg 231 247 call next; +#X obj 177 282 lang.lua 2 2; +#A .restore i = 1; +#A .restore sentences = \\x7b\\x7d; +#A .restore sentences[1] = "Привет! Центр электроакустической музыки Московской консерватории рад анонсировать новый выпуск сборки программы для визуального программирования звука и мультимедиа PureData и библиотеки расширений CEAMMC-LIB"; +#A .restore sentences[2] = "Среди основных изменений - добавлена поддержка языкового синтеза на основе свободного синтезатора RHVoice"; +#A .restore sentences[3] = "это позволило добавить синтез на руском языке\\x2c который вы сейчас слышите"; +#A .restore sentences[4] = "также поддерживаются языки:"; +#A .restore sentences[5] = "English language\\x2c hello from PureData speech synthesizer and voice Slt"; +#A .restore sentences[6] = "Portugues do Brasil. Saudações da PureData"; +#A .restore sentences[7] = "Татар теле. Сәлам PureData"; +#A .restore sentences[8] = "а также другие языки и голоса\\x2c узнайте подробнее на сайте разработки RHVoice"; +#A .restore sentences[9] = "добавлены объекты для работы с файловыми путями\\x2c запись в циклический буфер"; +#A .restore sentences[10] = "поддержка протоколов DMX через ArtNet для управления световыми приборами\\x2c отправка запросов HTTP\\x2c новые объекты для работы с протоколом O-S-C для удобного взаимодействия с другими звуковыми средами"; +#A .restore sentences[11] = "кроме того\\x2c добавлен объект для работы с языком программирования Lua\\x2c что позволяет опытным пользователям использовать лучшие стороны виузального и текстового программирования для создания сложной логики"; +#A .restore sentences[12] = "добавлены функции для гранулярного синтеза в объект array.grainer~\\x2c а также три синтезатора на основе языка FAUST: бочка\\x2c клэп и хай-хэт"; +#A .restore sentences[13] = "Программное обеспечение PureData - распространяется под свободной лицензией \ GPL и доступно для скачивания на сайте http://github.com. Желаем новых звуковых открытий!"; +#A .restore ctl = \\x7b\\x7d; +#A .restore ctl[1] = \\x7b"lang"\\x2c"Anna"\\x7d; +#A .restore ctl[2] = \\x7b"lang"\\x2c"Mikhail"\\x7d; +#A .restore ctl[3] = \\x7b"lang"\\x2c"Timofey"\\x7d; +#A .restore ctl[4] = \\x7b"lang"\\x2c"Arina"\\x7d; +#A .restore ctl[5] = \\x7b"lang"\\x2c"Clb"\\x7d; +#A .restore ctl[6] = \\x7b"lang"\\x2c"Letícia-F123"\\x7d; +#A .restore ctl[7] = \\x7b"lang"\\x2c"Talgat"\\x7d; +#A .restore ctl[8] = \\x7b"lang"\\x2c"Tatiana"\\x7d; +#A .restore ctl[9] = \\x7b"lang"\\x2c"Pavel"\\x7d; +#A .restore ctl[10] = \\x7b"lang"\\x2c"Irina"\\x7d; +#A .restore ctl[11] = \\x7b"lang"\\x2c"Elena"\\x7d; +#A .restore ctl[12] = \\x7b"lang"\\x2c"Aleksandr-hq"\\x7d; +#A .restore ctl[13] = \\x7b"drums"\\x2c1\\x7d; +#A .restore function on_bang(idx); +#A .restore \\x09 i = 1; +#A .restore \\x09 next(); +#A .restore end; +#A .restore function next(); +#A .restore \\x09 ct = ctl[i]; +#A .restore \\x09 if ct ~= nil then; +#A .restore \\x09 \\x09 list_to(1\\x2c ctl[i]); +#A .restore if i == 13 then; +#A .restore \\x09 \\x09 \\x09 sleep(4000); +#A .restore \\x09 \\x09 \\x09 list_to(1\\x2c \\x7b"drums"\\x2c 0\\x7d); +#A .restore \\x09 \\x09 end; +#A .restore \\x09 end; +#A .restore \\x09 if i > #sentences then; +#A .restore \\x09 \\x09 return; +#A .restore \\x09 end; +#A .restore \\x09 symbol_to(0\\x2c sentences[i]); +#A .restore \\x09 i = i+1; +#A .restore end; +#A .restore; +#X obj 177 97 inlet; +#X obj 177 389 s speech; +#X msg 258 368 @voice \$1; +#X obj 258 342 list.route lang drums @trim; +#X obj 351 374 s drums; +#X obj 319 415 print; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 6 0 8 0; +#X connect 6 1 10 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; +#X connect 10 1 11 0; +#X connect 10 1 12 0; +#X restore 405 86 pd luactl; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 3 0 10 0; +#X connect 4 0 11 0; +#X connect 6 0 5 0; +#X connect 7 0 0 0; +#X connect 8 0 0 1; +#X connect 10 0 0 1; +#X connect 10 0 0 0; +#X connect 10 1 2 0; diff --git a/ceammc/distrib/template_release_0.9.6.pd b/ceammc/distrib/template_release_0.9.6.pd new file mode 100644 index 0000000000..19042cd0bd --- /dev/null +++ b/ceammc/distrib/template_release_0.9.6.pd @@ -0,0 +1,127 @@ +#N canvas 24 118 568 506 12; +#X obj 32 393 ui.gain2~ @size 116 15 @receive "vol.main" @send "(null)" @pinned 0 @presetname "(null)" @mouse_events 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @knob_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @max 0 @min -60 @output_value 0 @relative 1 @midi_channel 0 @midi_control 0 @midi_pickup 1 @show_range 1; +#X obj 32 417 dac~, f 16; +#X obj 134 86 s \$0-next; +#X obj 32 31 r speech; +#X obj 405 37 ui.bang @size 44 44 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 1 0.3399 0.533564 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "PRESS\ TO\ START" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0; +#X obj 197 327 ui.display @size 300 100 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 0 @float_width -1 @hex 0 @hex_width 2; +#X obj 197 253 r speech; +#X obj 46 326 catch~ \$0-outl; +#X obj 46 351 catch~ \$0-outr; +#N canvas 219 253 465 421 drums~ 0; +#X obj 81 355 throw~ \$0-outl; +#X obj 253 355 throw~ \$0-outr; +#X obj 312 27 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 222 55 metro 100; +#X obj 81 303 pan.spread~ 3; +#X obj 81 268 fx.sdelay~ 15; +#X obj 222 29 r drums; +#X obj 81 329 gain~ 2 @db 0 0, f 25; +#X obj 125 218 synth.kick2~; +#X obj 81 186 synth.clap~; +#X obj 221 186 synth.hat~ @attack 60; +#X obj 221 212 gain~ @db -12; +#X obj 222 145 route.random 4; +#X connect 2 0 3 0; +#X connect 3 0 12 0; +#X connect 4 0 7 0; +#X connect 4 1 7 1; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 0 0; +#X connect 7 1 1 0; +#X connect 8 0 4 1; +#X connect 9 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 4 2; +#X connect 12 0 9 0; +#X connect 12 1 8 0; +#X connect 12 2 10 0; +#X restore 430 253 pd drums~; +#X obj 32 60 speech.rhvoice~; +#N canvas 765 85 739 527 luactl 0; +#X obj 232 100 r \$0-next; +#X obj 315 175 s vol.main; +#X obj 315 149 loadmsg @db -6; +#X msg 177 247 bang; +#X obj 177 308 ui.display @size 54 18 @receive "(null)" @send "(null)" @pinned 0 @background_color 0.93 0.93 0.93 1 @border_color 0.6 0.6 0.6 1 @label_color 0 0 0 1 @text_color 0 0 0 1 @active_color 0 0.75 1 1 @fontname "Helvetica" @fontweight "normal" @fontslant "roman" @fontsize 11 @label "(null)" @label_inner 0 @label_side "top" @label_align "left" @label_valign "top" @label_margins 0 0 @display_events 1 @display_type 1 @auto_size 1 @float_width -1 @hex 0 @hex_width 2; +#X msg 231 247 call next; +#X obj 177 282 lang.lua 2 2; +#A .restore i = 1; +#A .restore sentences = \\x7b\\x7d; +#A .restore sentences[1] = "Привет! Центр электроакустической музыки Московской консерватории рад анонсировать новый выпуск сборки программы для визуального программирования звука и мультимедиа PureData и библиотеки расширений CEAMMC-LIB"; +#A .restore sentences[2] = "Среди основных изменений - добавлена поддержка языкового синтеза на основе свободного синтезатора RHVoice"; +#A .restore sentences[3] = "это позволило добавить синтез на руском языке\\x2c который вы сейчас слышите"; +#A .restore sentences[4] = "также поддерживаются языки:"; +#A .restore sentences[5] = "English language\\x2c hello from PureData speech synthesizer and voice Slt"; +#A .restore sentences[6] = "Portugues do Brasil. Saudações da PureData"; +#A .restore sentences[7] = "Татар теле. Сәлам PureData"; +#A .restore sentences[8] = "а также другие языки и голоса\\x2c узнайте подробнее на сайте разработки RHVoice"; +#A .restore sentences[9] = "добавлены объекты для работы с файловыми путями\\x2c запись в циклический буфер"; +#A .restore sentences[10] = "поддержка протоколов DMX через ArtNet для управления световыми приборами\\x2c отправка запросов HTTP\\x2c новые объекты для работы с протоколом O-S-C для удобного взаимодействия с другими звуковыми средами"; +#A .restore sentences[11] = "кроме того\\x2c добавлен объект для работы с языком программирования Lua\\x2c что позволяет опытным пользователям использовать лучшие стороны виузального и текстового программирования для создания сложной логики"; +#A .restore sentences[12] = "добавлены функции для гранулярного синтеза в объект array.grainer~\\x2c а также три синтезатора на основе языка FAUST: бочка\\x2c клэп и хай-хэт"; +#A .restore sentences[13] = "Программное обеспечение PureData - распространяется под свободной лицензией \ GPL и доступно для скачивания на сайте http://github.com. Желаем новых звуковых открытий!"; +#A .restore ctl = \\x7b\\x7d; +#A .restore ctl[1] = \\x7b"lang"\\x2c"Anna"\\x7d; +#A .restore ctl[2] = \\x7b"lang"\\x2c"Mikhail"\\x7d; +#A .restore ctl[3] = \\x7b"lang"\\x2c"Timofey"\\x7d; +#A .restore ctl[4] = \\x7b"lang"\\x2c"Arina"\\x7d; +#A .restore ctl[5] = \\x7b"lang"\\x2c"Clb"\\x7d; +#A .restore ctl[6] = \\x7b"lang"\\x2c"Letícia-F123"\\x7d; +#A .restore ctl[7] = \\x7b"lang"\\x2c"Talgat"\\x7d; +#A .restore ctl[8] = \\x7b"lang"\\x2c"Tatiana"\\x7d; +#A .restore ctl[9] = \\x7b"lang"\\x2c"Pavel"\\x7d; +#A .restore ctl[10] = \\x7b"lang"\\x2c"Irina"\\x7d; +#A .restore ctl[11] = \\x7b"lang"\\x2c"Elena"\\x7d; +#A .restore ctl[12] = \\x7b"lang"\\x2c"Aleksandr-hq"\\x7d; +#A .restore ctl[13] = \\x7b"drums"\\x2c1\\x7d; +#A .restore function on_bang(idx); +#A .restore \\x09 i = 1; +#A .restore \\x09 next(); +#A .restore end; +#A .restore function next(); +#A .restore \\x09 ct = ctl[i]; +#A .restore \\x09 if ct ~= nil then; +#A .restore \\x09 \\x09 list_to(1\\x2c ctl[i]); +#A .restore if i == 13 then; +#A .restore \\x09 \\x09 \\x09 sleep(4000); +#A .restore \\x09 \\x09 \\x09 list_to(1\\x2c \\x7b"drums"\\x2c 0\\x7d); +#A .restore \\x09 \\x09 end; +#A .restore \\x09 end; +#A .restore \\x09 if i > #sentences then; +#A .restore \\x09 \\x09 return; +#A .restore \\x09 end; +#A .restore \\x09 symbol_to(0\\x2c sentences[i]); +#A .restore \\x09 i = i+1; +#A .restore end; +#A .restore; +#X obj 177 97 inlet; +#X obj 177 389 s speech; +#X msg 258 368 @voice \$1; +#X obj 258 342 list.route lang drums @trim; +#X obj 351 374 s drums; +#X obj 319 415 print; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 6 0 8 0; +#X connect 6 1 10 0; +#X connect 7 0 3 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; +#X connect 10 1 11 0; +#X connect 10 1 12 0; +#X restore 405 86 pd luactl; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 3 0 10 0; +#X connect 4 0 11 0; +#X connect 6 0 5 0; +#X connect 7 0 0 0; +#X connect 8 0 0 1; +#X connect 10 0 0 1; +#X connect 10 0 0 0; +#X connect 10 1 2 0; diff --git a/ceammc/distrib/win/CMakeLists.txt b/ceammc/distrib/win/CMakeLists.txt index 7308e3ba5c..4eb7fd7cc6 100644 --- a/ceammc/distrib/win/CMakeLists.txt +++ b/ceammc/distrib/win/CMakeLists.txt @@ -80,6 +80,10 @@ if(WIN32) COMMAND bash -c "${PROJECT_BINARY_DIR}/dist/build_all.sh" USES_TERMINAL) + add_custom_target(dev_run + COMMAND "${CMAKE_INSTALL_PREFIX}/${PD_EXE_INSTALL_PATH}/pd" + USES_TERMINAL) + # deploy to github # deploy INNO installer set(GIT_RELEASE_TAG "v${CEAMMC_DISTRIB_VERSION}") diff --git a/ceammc/distrib/win/fix_dll_deps.sh b/ceammc/distrib/win/fix_dll_deps.sh index 137c02f92b..bdac4506db 100644 --- a/ceammc/distrib/win/fix_dll_deps.sh +++ b/ceammc/distrib/win/fix_dll_deps.sh @@ -26,9 +26,9 @@ find_all_dll_deps() { list_dll "@PROJECT_BINARY_DIR@/src/pd.exe" list_dll "@PROJECT_BINARY_DIR@/src/pd.dll" - find "@PROJECT_BINARY_DIR@/ceammc/ext" -path '*/tests' -prune \ - -o -name "*\.dll" \ - -o -name "*\.m_i386" \ + find "@CMAKE_INSTALL_PREFIX@/" \ + -name "*\.dll" -print \ + -o -name "*\.m_i386" -print \ -o -name "*\.m_amd64" -print | while read dll do list_dll "$dll" diff --git a/ceammc/distrib/win/pd.iss b/ceammc/distrib/win/pd.iss index 0f19ff9125..5cd93b3441 100644 --- a/ceammc/distrib/win/pd.iss +++ b/ceammc/distrib/win/pd.iss @@ -55,6 +55,7 @@ Source: "{#AppRoot}/tcl/*.txt"; DestDir: "{app}/tcl"; Flags: ignoreversion recur Source: "{#AppRoot}/tcl/*.cfg"; DestDir: "{app}/tcl"; Flags: ignoreversion recursesubdirs Source: "{#AppRoot}/tcl/pd.ico"; DestDir: "{app}/tcl"; Source: "{#AppRoot}/tcl/pd_ceammc.ico"; DestDir: "{app}/tcl"; +Source: "{#AppRoot}/tcl/tkdnd/*"; DestDir: "{app}/tcl/tkdnd"; Flags: ignoreversion recursesubdirs Source: "{#AppRoot}/lib/*"; DestDir: "{app}/lib"; Flags: ignoreversion recursesubdirs Source: "{#AppRoot}/extra/*"; Excludes: "*.a"; DestDir: "{app}/extra"; Flags: ignoreversion recursesubdirs Source: "{#AppRoot}/doc/*"; DestDir: "{app}/doc"; Flags: ignoreversion recursesubdirs diff --git a/ceammc/ext/abstractions/abstractions.txt b/ceammc/ext/abstractions/abstractions.txt index c0f5ec338f..56593b72f7 100644 --- a/ceammc/ext/abstractions/abstractions.txt +++ b/ceammc/ext/abstractions/abstractions.txt @@ -7,7 +7,9 @@ gflt.bpf24~ gflt.eq10~ gflt.eq_peak_cq~ gflt.eq_peak~ +gflt.fb_comb~ gflt.fbank5x1~ +gflt.ff_comb~ gflt.highshelf~ gflt.hpf12~ gflt.hpf24~ @@ -17,10 +19,13 @@ gflt.lpf24~ gflt.moog_vcf~ gflt.notch~ gflt.resonbp~ +gflt.resonhp~ +gflt.resonlp~ gflt_fb_comb~ gflt_ff_comb~ gfx.bitdown~ gfx.chorus~ +gfx.dattorro~ gfx.distortion1~ gfx.distortion2~ gfx.distortion3~ @@ -34,17 +39,20 @@ gfx.freeverb2~ gfx.freeverb~ gfx.granulator~ gfx.greyhole~ +gfx.jcrev~ gfx.pitchshift~ gfx.recho~ +gfx.satrev~ gfx.sdelay~ gfx.secho~ gfx.tapiir~ gfx.vocoder~ gfx.wahwah~ gfx.zita_rev1~ -gfx_reverb_duck~ gfx_room~ gfx_shimmer~ +gnoise.chua~ +gnoise.colored~ gnoise.crackle~ gnoise.lfreq0~ gnoise.lfreq~ @@ -53,6 +61,7 @@ gspat.pan8~ gspat.zita8~ gsynth.birds~ gsynth.church_bell~ +gsynth.clap~ gsynth.dubdub~ gsynth.dx7~ gsynth.eguitar~ @@ -61,6 +70,8 @@ gsynth.french_bell~ gsynth.german_bell~ gsynth.glass_harm~ gsynth.harpsichord~ +gsynth.hat~ +gsynth.kick2~ gsynth.kick~ gsynth.ks~ gsynth.marimba~ @@ -71,3 +82,5 @@ gsynth.risset_tone~ gsynth.russian_bell~ gsynth.snare~ gsynth.standard_bell~ +gsynth.voice_fofc~ +gsynth.voice_fofs~ diff --git a/ceammc/ext/abstractions/gdyn.comp2~.pd b/ceammc/ext/abstractions/gdyn.comp2~.pd index 39e86d5eb0..29d4e8e6fa 100644 --- a/ceammc/ext/abstractions/gdyn.comp2~.pd +++ b/ceammc/ext/abstractions/gdyn.comp2~.pd @@ -3,76 +3,112 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route dyn.comp2; -#X obj 525 250 route @attack @ratio @release @threshold; -#X obj 775 350 print unknown property; -#X msg 425 75 @attack 10 \, @ratio 1 \, @release 50 \, @threshold 100 \,; +#X obj 525 125 route dyn.comp2 * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @attack @gain @ratio @release @threshold default +reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @attack @gain @ratio @release @threshold default reset; +#X obj 775 425 print; +#X obj 825 425 print [gdyn.comp2~] unknown message; +#X msg 425 75 @attack 10 \, @gain 0 \, @ratio 1 \, @release 50 \, @threshold 100 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 171 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [dyn.comp2~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.comp2~/slider0 @min 1 @max 100; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1 @max 100 @digits 2; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label ratio: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 100 @digits 2; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/dyn.comp2~/slider1 @min 1 @max 10; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 10 @digits 3; -#X msg 260 270 @ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +/gui/\$1/dyn.comp2~/slider1 @min -12 @max 12; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -12 @max 12 @digits 2; +#X msg 260 266 @gain \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label ratio: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/dyn.comp2~/slider2 @min 1 @max 10; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 10 @digits 3; +#X msg 260 296 @ratio \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/dyn.comp2~/slider2 @min 1 @max 500; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 302 @release \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +@presetname /gui/\$1/dyn.comp2~/slider3 @min 1 @max 500; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 326 @release \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label threshold(db): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/dyn.comp2~/slider3 @min 0 @max 100; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 100 @digits 2; -#X msg 260 334 @threshold \$1; +@presetname /gui/\$1/dyn.comp2~/slider4 @min 0 @max 100; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 100 @digits 2; +#X msg 260 356 @threshold \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 4 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 5 0 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; -#X connect 20 0 0 0; -#X connect 5 1 17 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 7 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 5 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 6 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 5 2 21 0; +#X connect 7 0 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 5 3 25 0; -#X coords 0 -1 1 1 200 154 2 2 200; +#X connect 7 1 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 7 2 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 7 3 33 0; +#X connect 37 0 38 0; +#X connect 38 0 37 0; +#X connect 39 0 38 1; +#X connect 38 1 39 0; +#X connect 37 0 40 0; +#X connect 40 0 0 0; +#X connect 7 4 37 0; +#X coords 0 -1 1 1 200 176 2 2 200; diff --git a/ceammc/ext/abstractions/gdyn.comp~.pd b/ceammc/ext/abstractions/gdyn.comp~.pd index b99f51a47a..89ecd4db97 100644 --- a/ceammc/ext/abstractions/gdyn.comp~.pd +++ b/ceammc/ext/abstractions/gdyn.comp~.pd @@ -2,73 +2,109 @@ #X obj 25 125 dyn.comp~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route dyn.comp; -#X obj 425 250 route @attack @ratio @release @threshold; -#X obj 675 350 print unknown property; -#X msg 325 75 @attack 10 \, @ratio 1 \, @release 50 \, @threshold 100 \,; +#X obj 425 125 route dyn.comp * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @attack @gain @ratio @release @threshold default +reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @attack @gain @ratio @release @threshold default reset; +#X obj 675 425 print; +#X obj 725 425 print [gdyn.comp~] unknown message; +#X msg 325 75 @attack 10 \, @gain 0 \, @ratio 1 \, @release 50 \, @threshold 100 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 171 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [dyn.comp~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.comp~/slider0 @min 1 @max 100; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1 @max 100 @digits 2; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label ratio: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 100 @digits 2; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/dyn.comp~/slider1 @min 1 @max 10; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 10 @digits 3; -#X msg 260 270 @ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +/gui/\$1/dyn.comp~/slider1 @min -12 @max 12; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -12 @max 12 @digits 2; +#X msg 260 266 @gain \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label ratio: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/dyn.comp~/slider2 @min 1 @max 10; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 10 @digits 3; +#X msg 260 296 @ratio \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/dyn.comp~/slider2 @min 1 @max 500; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 302 @release \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +@presetname /gui/\$1/dyn.comp~/slider3 @min 1 @max 500; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 326 @release \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label threshold(db): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/dyn.comp~/slider3 @min 0 @max 100; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 100 @digits 2; -#X msg 260 334 @threshold \$1; +@presetname /gui/\$1/dyn.comp~/slider4 @min 0 @max 100; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 100 @digits 2; +#X msg 260 356 @threshold \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 7 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 5 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 6 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; +#X connect 6 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 3 23 0; -#X coords 0 -1 1 1 200 154 2 2 200; +#X connect 6 1 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 6 2 27 0; +#X connect 31 0 32 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; +#X connect 34 0 0 0; +#X connect 6 3 31 0; +#X connect 35 0 36 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 6 4 35 0; +#X coords 0 -1 1 1 200 176 2 2 200; diff --git a/ceammc/ext/abstractions/gdyn.gate2~.pd b/ceammc/ext/abstractions/gdyn.gate2~.pd index ca7976f6e4..5233dfa1b2 100644 --- a/ceammc/ext/abstractions/gdyn.gate2~.pd +++ b/ceammc/ext/abstractions/gdyn.gate2~.pd @@ -3,76 +3,98 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route dyn.gate2; -#X obj 525 250 route @attack @hold @release @threshold; -#X obj 775 350 print unknown property; +#X obj 525 125 route dyn.gate2 * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @attack @hold @release @threshold default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @attack @hold @release @threshold default reset; +#X obj 775 425 print; +#X obj 825 425 print [gdyn.gate2~] unknown message; #X msg 425 75 @attack 0.1 \, @hold 100 \, @release 20 \, @threshold 40 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 141 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [dyn.gate2~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate2~/slider0 @min 0 @max 500; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 500 @digits 1; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label hold(ms): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 500 @digits 1; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label hold(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate2~/slider1 @min 1 @max 500; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 270 @hold \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 266 @hold \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate2~/slider2 @min 1 @max 500; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 302 @release \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 296 @release \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label threshold(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate2~/slider3 @min 0 @max 100; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 100 @digits 2; -#X msg 260 334 @threshold \$1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 100 @digits 2; +#X msg 260 326 @threshold \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 4 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 5 0 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; -#X connect 20 0 0 0; -#X connect 5 1 17 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 6 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 4 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 5 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 5 2 21 0; +#X connect 7 0 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 5 3 25 0; -#X coords 0 -1 1 1 200 154 2 2 200; +#X connect 7 1 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 7 2 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 7 3 33 0; +#X coords 0 -1 1 1 200 146 2 2 200; diff --git a/ceammc/ext/abstractions/gdyn.gate~.pd b/ceammc/ext/abstractions/gdyn.gate~.pd index 9ae9254ccf..4088cf65c6 100644 --- a/ceammc/ext/abstractions/gdyn.gate~.pd +++ b/ceammc/ext/abstractions/gdyn.gate~.pd @@ -2,73 +2,95 @@ #X obj 25 125 dyn.gate~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route dyn.gate; -#X obj 425 250 route @attack @hold @release @threshold; -#X obj 675 350 print unknown property; +#X obj 425 125 route dyn.gate * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @attack @hold @release @threshold default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @attack @hold @release @threshold default reset; +#X obj 675 425 print; +#X obj 725 425 print [gdyn.gate~] unknown message; #X msg 325 75 @attack 0.1 \, @hold 100 \, @release 20 \, @threshold 40 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 141 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [dyn.gate~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate~/slider0 @min 0 @max 500; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 500 @digits 1; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label hold(ms): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 500 @digits 1; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label hold(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate~/slider1 @min 1 @max 500; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 270 @hold \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 266 @hold \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate~/slider2 @min 1 @max 500; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1 @max 500 @digits 1; -#X msg 260 302 @release \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 500 @digits 1; +#X msg 260 296 @release \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label threshold(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/dyn.gate~/slider3 @min 0 @max 100; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 100 @digits 2; -#X msg 260 334 @threshold \$1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 100 @digits 2; +#X msg 260 326 @threshold \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; +#X connect 6 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 3 23 0; -#X coords 0 -1 1 1 200 154 2 2 200; +#X connect 6 1 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 6 2 27 0; +#X connect 31 0 32 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; +#X connect 34 0 0 0; +#X connect 6 3 31 0; +#X coords 0 -1 1 1 200 146 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.bpf12~.pd b/ceammc/ext/abstractions/gflt.bpf12~.pd index 610cb272d7..75e7ee2f7b 100644 --- a/ceammc/ext/abstractions/gflt.bpf12~.pd +++ b/ceammc/ext/abstractions/gflt.bpf12~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.bpf12~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.bpf12; -#X obj 425 250 route @freq @q; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.bpf12 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.bpf12~] unknown message; #X msg 325 75 @freq 1000 \, @q 2 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.bpf12~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.bpf12~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label q: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label q: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.bpf12~/slider1 @min 0.01 @max 100; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; -#X msg 260 270 @q \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; +#X msg 260 266 @q \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.bpf24~.pd b/ceammc/ext/abstractions/gflt.bpf24~.pd index 1f24a0d55d..a75d835619 100644 --- a/ceammc/ext/abstractions/gflt.bpf24~.pd +++ b/ceammc/ext/abstractions/gflt.bpf24~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.bpf24~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.bpf24; -#X obj 425 250 route @freq @q; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.bpf24 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.bpf24~] unknown message; #X msg 325 75 @freq 1000 \, @q 2 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.bpf24~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.bpf24~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label q: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label q: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.bpf24~/slider1 @min 0.01 @max 100; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; -#X msg 260 270 @q \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; +#X msg 260 266 @q \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.eq10~.pd b/ceammc/ext/abstractions/gflt.eq10~.pd index aeaa239fbe..a809c3c6fb 100644 --- a/ceammc/ext/abstractions/gflt.eq10~.pd +++ b/ceammc/ext/abstractions/gflt.eq10~.pd @@ -2,152 +2,174 @@ #X obj 25 125 flt.eq10~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.eq10; +#X obj 425 125 route flt.eq10 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @f1000 @f125 @f16000 @f2000 @f250 @f31 @f4000 -@f500 @f62 @f8000; -#X obj 675 350 print unknown property; +@f500 @f62 @f8000 default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @f1000 @f125 @f16000 @f2000 @f250 @f31 @f4000 @f500 @f62 @f8000 default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.eq10~] unknown message; #X msg 325 75 @f1000 0 \, @f125 0 \, @f16000 0 \, @f2000 0 \, @f250 0 \, @f31 0 \, @f4000 0 \, @f500 0 \, @f62 0 \, @f8000 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 321 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.eq10~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label f1000(db): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label f1000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider0 @min -70 @max 10; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 238 @f1000 \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label f125(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 236 @f1000 \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label f125(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider1 @min -70 @max 10; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 270 @f125 \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 266 @f125 \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label f16000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider2 @min -70 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 302 @f16000 \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label f2000(db): +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 296 @f16000 \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label f2000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider3 @min -70 @max 10; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 334 @f2000 \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label f250(db): +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 326 @f2000 \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label f250(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider4 @min -70 @max 10; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 366 @f250 \$1; -#X obj 12 398 ui.slider @size 125 12 @active_scale 1 @label f31(db): +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 356 @f250 \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label f31(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider5 @min -70 @max 10; -#X obj 190 398 sync; -#X obj 145 398 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 398 @f31 \$1; -#X obj 12 430 ui.slider @size 125 12 @active_scale 1 @label f4000(db): +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 386 @f31 \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label f4000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider6 @min -70 @max 10; -#X obj 190 430 sync; -#X obj 145 430 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 430 @f4000 \$1; -#X obj 12 462 ui.slider @size 125 12 @active_scale 1 @label f500(db): +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 416 @f4000 \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label f500(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider7 @min -70 @max 10; -#X obj 190 462 sync; -#X obj 145 462 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 462 @f500 \$1; -#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label f62(db): +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 446 @f500 \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label f62(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider8 @min -70 @max 10; -#X obj 190 494 sync; -#X obj 145 494 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 494 @f62 \$1; -#X obj 12 526 ui.slider @size 125 12 @active_scale 1 @label f8000(db): +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 476 @f62 \$1; +#X obj 12 506 ui.slider @size 125 12 @active_scale 1 @label f8000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq10~/slider9 @min -70 @max 10; -#X obj 190 526 sync; -#X obj 145 526 ui.number @size 50 12 @min -70 @max 10 @digits 2; -#X msg 260 526 @f8000 \$1; +#X obj 215 506 sync; +#X obj 145 506 ui.number @size 50 12 @min -70 @max 10 @digits 2; +#X msg 260 506 @f8000 \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 10 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 12 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 10 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 11 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; +#X connect 6 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 3 23 0; +#X connect 6 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 4 4 27 0; +#X connect 6 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 4 5 31 0; +#X connect 6 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 4 6 35 0; +#X connect 6 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 4 7 39 0; +#X connect 6 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 4 8 43 0; +#X connect 6 6 43 0; #X connect 47 0 48 0; #X connect 48 0 47 0; #X connect 49 0 48 1; #X connect 48 1 49 0; #X connect 47 0 50 0; #X connect 50 0 0 0; -#X connect 4 9 47 0; -#X coords 0 -1 1 1 200 346 2 2 200; +#X connect 6 7 47 0; +#X connect 51 0 52 0; +#X connect 52 0 51 0; +#X connect 53 0 52 1; +#X connect 52 1 53 0; +#X connect 51 0 54 0; +#X connect 54 0 0 0; +#X connect 6 8 51 0; +#X connect 55 0 56 0; +#X connect 56 0 55 0; +#X connect 57 0 56 1; +#X connect 56 1 57 0; +#X connect 55 0 58 0; +#X connect 58 0 0 0; +#X connect 6 9 55 0; +#X coords 0 -1 1 1 200 326 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd b/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd index 10de9c1987..f34c81c78b 100644 --- a/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd +++ b/ceammc/ext/abstractions/gflt.eq_peak_cq~.pd @@ -2,60 +2,82 @@ #X obj 25 125 flt.eq_peak_cq~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.eq_peak_cq; -#X obj 425 250 route @freq @gain @q; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.eq_peak_cq * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @gain @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @gain @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.eq_peak_cq~] unknown message; #X msg 325 75 @freq 1000 \, @gain 0 \, @q 3 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.eq_peak_cq~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak_cq~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak_cq~/slider1 @min -15 @max 15; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -15 @max 15 @digits 2; -#X msg 260 270 @gain \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label q: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -15 @max 15 @digits 2; +#X msg 260 266 @gain \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label q: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak_cq~/slider2 @min 0.1 @max 100; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; -#X msg 260 302 @q \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; +#X msg 260 296 @q \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 3 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 5 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 3 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 4 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; -#X coords 0 -1 1 1 200 122 2 2 200; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 6 2 27 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.eq_peak~.pd b/ceammc/ext/abstractions/gflt.eq_peak~.pd index 00d6d1f7f1..f5d38bcae5 100644 --- a/ceammc/ext/abstractions/gflt.eq_peak~.pd +++ b/ceammc/ext/abstractions/gflt.eq_peak~.pd @@ -2,60 +2,82 @@ #X obj 25 125 flt.eq_peak~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.eq_peak; -#X obj 425 250 route @bandwidth @freq @gain; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.eq_peak * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bandwidth @freq @gain default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bandwidth @freq @gain default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.eq_peak~] unknown message; #X msg 325 75 @bandwidth 100 \, @freq 1000 \, @gain 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.eq_peak~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label bandwidth(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak~/slider0 @min 1 @max 5000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1 @max 5000 @digits 0; -#X msg 260 238 @bandwidth \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 5000 @digits 0; +#X msg 260 236 @bandwidth \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak~/slider1 @min 20 @max 20000; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 270 @freq \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 266 @freq \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.eq_peak~/slider2 @min -15 @max 15; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min -15 @max 15 @digits 2; -#X msg 260 302 @gain \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min -15 @max 15 @digits 2; +#X msg 260 296 @gain \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 3 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 5 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 3 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 4 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; -#X coords 0 -1 1 1 200 122 2 2 200; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 6 2 27 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.fb_comb~.pd b/ceammc/ext/abstractions/gflt.fb_comb~.pd new file mode 100644 index 0000000000..a46dc68052 --- /dev/null +++ b/ceammc/ext/abstractions/gflt.fb_comb~.pd @@ -0,0 +1,59 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 flt.fb_comb~; +#X obj 25 25 inlet~; +#X obj 125 25 inlet~; +#X obj 525 25 inlet; +#X obj 525 125 route flt.fb_comb * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @a default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @a default reset; +#X obj 775 425 print; +#X obj 825 425 print [gflt.fb_comb~] unknown message; +#X msg 425 75 @a 0.75 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 425 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [flt.fb_comb~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label a: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.fb_comb~/slider0 @min -1 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min -1 @max 1 @digits 3; +#X msg 260 236 @a \$1; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 4 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 3 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 1 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 2 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 5 1 17 0; +#X connect 6 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 20 0; +#X connect 22 0 21 1; +#X connect 21 1 22 0; +#X connect 20 0 23 0; +#X connect 23 0 0 0; +#X connect 7 0 20 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.fbank5x1~.pd b/ceammc/ext/abstractions/gflt.fbank5x1~.pd index 3d6e729297..6bcfa31506 100644 --- a/ceammc/ext/abstractions/gflt.fbank5x1~.pd +++ b/ceammc/ext/abstractions/gflt.fbank5x1~.pd @@ -2,10 +2,17 @@ #X obj 25 125 flt.fbank5x1~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.fbank5x1; -#X obj 425 250 route @f1000 @f2000 @f250 @f4000 @f500; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.fbank5x1 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @f1000 @f2000 @f250 @f4000 @f500 default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @f1000 @f2000 @f250 @f4000 @f500 default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.fbank5x1~] unknown message; #X msg 325 75 @f1000 0 \, @f2000 0 \, @f250 0 \, @f4000 0 \, @f500 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; @@ -13,83 +20,98 @@ #X obj 800 550 outlet~; #X obj 900 550 outlet~; #X obj 1000 550 outlet ctl; +#X obj 3 202 cnv 8 198 171 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.fbank5x1~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label f1000(db): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label f1000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.fbank5x1~/slider0 @min -6 @max 6; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min -6 @max 6 @digits 2; -#X msg 260 238 @f1000 \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label f2000(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min -6 @max 6 @digits 2; +#X msg 260 236 @f1000 \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label f2000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.fbank5x1~/slider1 @min -6 @max 6; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -6 @max 6 @digits 2; -#X msg 260 270 @f2000 \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label f250(db): +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -6 @max 6 @digits 2; +#X msg 260 266 @f2000 \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label f250(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.fbank5x1~/slider2 @min -6 @max 6; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min -6 @max 6 @digits 2; -#X msg 260 302 @f250 \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label f4000(db): +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min -6 @max 6 @digits 2; +#X msg 260 296 @f250 \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label f4000(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.fbank5x1~/slider3 @min -6 @max 6; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min -6 @max 6 @digits 2; -#X msg 260 334 @f4000 \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label f500(db): +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min -6 @max 6 @digits 2; +#X msg 260 326 @f4000 \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label f500(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.fbank5x1~/slider4 @min -6 @max 6; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min -6 @max 6 @digits 2; -#X msg 260 366 @f500 \$1; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min -6 @max 6 @digits 2; +#X msg 260 356 @f500 \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 5 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 0 2 10 0; -#X connect 0 3 11 0; -#X connect 0 4 12 0; -#X connect 3 1 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 0 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; -#X connect 22 0 0 0; -#X connect 4 1 19 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 7 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 5 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 6 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 0 2 17 0; +#X connect 0 3 18 0; +#X connect 0 4 19 0; +#X connect 4 1 20 0; +#X connect 5 0 20 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 2 23 0; +#X connect 6 0 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 4 3 27 0; +#X connect 6 1 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 4 4 31 0; -#X coords 0 -1 1 1 200 186 2 2 200; +#X connect 6 2 31 0; +#X connect 35 0 36 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 6 3 35 0; +#X connect 39 0 40 0; +#X connect 40 0 39 0; +#X connect 41 0 40 1; +#X connect 40 1 41 0; +#X connect 39 0 42 0; +#X connect 42 0 0 0; +#X connect 6 4 39 0; +#X coords 0 -1 1 1 200 176 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.ff_comb~.pd b/ceammc/ext/abstractions/gflt.ff_comb~.pd new file mode 100644 index 0000000000..06f2b7ff02 --- /dev/null +++ b/ceammc/ext/abstractions/gflt.ff_comb~.pd @@ -0,0 +1,59 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 flt.ff_comb~; +#X obj 25 25 inlet~; +#X obj 125 25 inlet~; +#X obj 525 25 inlet; +#X obj 525 125 route flt.ff_comb * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @a default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @a default reset; +#X obj 775 425 print; +#X obj 825 425 print [gflt.ff_comb~] unknown message; +#X msg 425 75 @a 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 425 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [flt.ff_comb~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label a: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.ff_comb~/slider0 @min -1 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min -1 @max 1 @digits 3; +#X msg 260 236 @a \$1; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 4 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 3 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 1 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 2 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 5 1 17 0; +#X connect 6 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 20 0; +#X connect 22 0 21 1; +#X connect 21 1 22 0; +#X connect 20 0 23 0; +#X connect 23 0 0 0; +#X connect 7 0 20 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.highshelf~.pd b/ceammc/ext/abstractions/gflt.highshelf~.pd index b743512aa5..1c7798c273 100644 --- a/ceammc/ext/abstractions/gflt.highshelf~.pd +++ b/ceammc/ext/abstractions/gflt.highshelf~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.highshelf~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.highshelf; -#X obj 425 250 route @freq @gain; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.highshelf * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @gain default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @gain default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.highshelf~] unknown message; #X msg 325 75 @freq 10000 \, @gain 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.highshelf~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.highshelf~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.highshelf~/slider1 @min -15 @max 15; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -15 @max 15 @digits 2; -#X msg 260 270 @gain \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -15 @max 15 @digits 2; +#X msg 260 266 @gain \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.hpf12~.pd b/ceammc/ext/abstractions/gflt.hpf12~.pd index 6f723422c9..58983e6534 100644 --- a/ceammc/ext/abstractions/gflt.hpf12~.pd +++ b/ceammc/ext/abstractions/gflt.hpf12~.pd @@ -2,34 +2,56 @@ #X obj 25 125 flt.hpf12~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.hpf12; -#X obj 425 250 route @freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.hpf12 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.hpf12~] unknown message; #X msg 325 75 @freq 10000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.hpf12~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.hpf12~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 1 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 3 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 1 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 2 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.hpf24~.pd b/ceammc/ext/abstractions/gflt.hpf24~.pd index 993b2fe6d1..a8fd01fd43 100644 --- a/ceammc/ext/abstractions/gflt.hpf24~.pd +++ b/ceammc/ext/abstractions/gflt.hpf24~.pd @@ -2,34 +2,56 @@ #X obj 25 125 flt.hpf24~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.hpf24; -#X obj 425 250 route @freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.hpf24 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.hpf24~] unknown message; #X msg 325 75 @freq 10000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.hpf24~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.hpf24~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 1 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 3 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 1 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 2 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.lowshelf~.pd b/ceammc/ext/abstractions/gflt.lowshelf~.pd index f81b998d5c..d6b6ad8011 100644 --- a/ceammc/ext/abstractions/gflt.lowshelf~.pd +++ b/ceammc/ext/abstractions/gflt.lowshelf~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.lowshelf~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.lowshelf; -#X obj 425 250 route @freq @gain; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.lowshelf * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @gain default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @gain default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.lowshelf~] unknown message; #X msg 325 75 @freq 1000 \, @gain 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.lowshelf~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.lowshelf~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.lowshelf~/slider1 @min -15 @max 15; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -15 @max 15 @digits 2; -#X msg 260 270 @gain \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -15 @max 15 @digits 2; +#X msg 260 266 @gain \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.lpf12~.pd b/ceammc/ext/abstractions/gflt.lpf12~.pd index dbb6a754ae..a00e81ae43 100644 --- a/ceammc/ext/abstractions/gflt.lpf12~.pd +++ b/ceammc/ext/abstractions/gflt.lpf12~.pd @@ -2,34 +2,56 @@ #X obj 25 125 flt.lpf12~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.lpf12; -#X obj 425 250 route @freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.lpf12 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.lpf12~] unknown message; #X msg 325 75 @freq 1000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.lpf12~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.lpf12~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 1 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 3 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 1 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 2 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.lpf24~.pd b/ceammc/ext/abstractions/gflt.lpf24~.pd index 486aea7fb2..6d46a4cc61 100644 --- a/ceammc/ext/abstractions/gflt.lpf24~.pd +++ b/ceammc/ext/abstractions/gflt.lpf24~.pd @@ -2,34 +2,56 @@ #X obj 25 125 flt.lpf24~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.lpf24; -#X obj 425 250 route @freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.lpf24 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.lpf24~] unknown message; #X msg 325 75 @freq 1000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.lpf24~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.lpf24~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 1 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 3 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 1 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 2 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.moog_vcf~.pd b/ceammc/ext/abstractions/gflt.moog_vcf~.pd index cb9230c0b9..7d4dff6018 100644 --- a/ceammc/ext/abstractions/gflt.moog_vcf~.pd +++ b/ceammc/ext/abstractions/gflt.moog_vcf~.pd @@ -3,35 +3,57 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route flt.moog_vcf; -#X obj 525 250 route @res; -#X obj 775 350 print unknown property; +#X obj 525 125 route flt.moog_vcf * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @res default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @res default reset; +#X obj 775 425 print; +#X obj 825 425 print [gflt.moog_vcf~] unknown message; #X msg 425 75 @res 0.4 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.moog_vcf~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label res: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label res: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.moog_vcf~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @res \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @res \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 1 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 4 1 10 0; -#X connect 12 0 13 0; -#X connect 13 0 12 0; -#X connect 14 0 13 1; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 3 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 1 12 0; #X connect 13 1 14 0; -#X connect 12 0 15 0; -#X connect 15 0 0 0; -#X connect 5 0 12 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 2 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 5 1 17 0; +#X connect 6 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 20 0; +#X connect 22 0 21 1; +#X connect 21 1 22 0; +#X connect 20 0 23 0; +#X connect 23 0 0 0; +#X connect 7 0 20 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.notch~.pd b/ceammc/ext/abstractions/gflt.notch~.pd index fd73da997d..c0036342ac 100644 --- a/ceammc/ext/abstractions/gflt.notch~.pd +++ b/ceammc/ext/abstractions/gflt.notch~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.notch~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.notch; -#X obj 425 250 route @freq @width; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.notch * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @width default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @width default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.notch~] unknown message; #X msg 325 75 @freq 1000 \, @width 50 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.notch~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.notch~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label width(Hz): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label width(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.notch~/slider1 @min 1 @max 10000; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 10000 @digits 0; -#X msg 260 270 @width \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 10000 @digits 0; +#X msg 260 266 @width \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.resonbp~.pd b/ceammc/ext/abstractions/gflt.resonbp~.pd index 5a50897f91..f3b96822e2 100644 --- a/ceammc/ext/abstractions/gflt.resonbp~.pd +++ b/ceammc/ext/abstractions/gflt.resonbp~.pd @@ -2,47 +2,69 @@ #X obj 25 125 flt.resonbp~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route flt.resonbp; -#X obj 425 250 route @freq @q; -#X obj 675 350 print unknown property; +#X obj 425 125 route flt.resonbp * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.resonbp~] unknown message; #X msg 325 75 @freq 1000 \, @q 80 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [flt.resonbp~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.resonbp~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @freq \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label q: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label q: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/flt.resonbp~/slider1 @min 0.1 @max 300; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0.1 @max 300 @digits 1; -#X msg 260 270 @q \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.1 @max 300 @digits 1; +#X msg 260 266 @q \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.resonhp~.pd b/ceammc/ext/abstractions/gflt.resonhp~.pd new file mode 100644 index 0000000000..d998ef3675 --- /dev/null +++ b/ceammc/ext/abstractions/gflt.resonhp~.pd @@ -0,0 +1,70 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 flt.resonhp~; +#X obj 25 25 inlet~; +#X obj 425 25 inlet; +#X obj 425 125 route flt.resonhp * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.resonhp~] unknown message; +#X msg 325 75 @freq 100 \, @q 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 325 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [flt.resonhp~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.resonhp~/slider0 @min 20 @max 20000; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label q: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.resonhp~/slider1 @min 0.1 @max 100; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; +#X msg 260 266 @q \$1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gflt.resonlp~.pd b/ceammc/ext/abstractions/gflt.resonlp~.pd new file mode 100644 index 0000000000..e35bb7ab92 --- /dev/null +++ b/ceammc/ext/abstractions/gflt.resonlp~.pd @@ -0,0 +1,70 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 flt.resonlp~; +#X obj 25 25 inlet~; +#X obj 425 25 inlet; +#X obj 425 125 route flt.resonlp * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @freq @q default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @freq @q default reset; +#X obj 675 425 print; +#X obj 725 425 print [gflt.resonlp~] unknown message; +#X msg 325 75 @freq 1000 \, @q 40 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 325 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [flt.resonlp~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.resonlp~/slider0 @min 20 @max 20000; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 236 @freq \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label q: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/flt.resonlp~/slider1 @min 0.1 @max 100; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; +#X msg 260 266 @q \$1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 6 1 23 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.bitdown~.pd b/ceammc/ext/abstractions/gfx.bitdown~.pd index 9cbbca900e..b6a80b0965 100644 --- a/ceammc/ext/abstractions/gfx.bitdown~.pd +++ b/ceammc/ext/abstractions/gfx.bitdown~.pd @@ -2,54 +2,76 @@ #X obj 25 125 fx.bitdown~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.bitdown; -#X obj 425 250 route @bits @bypass @downsamp; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.bitdown * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bits @bypass @downsamp default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bits @bypass @downsamp default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.bitdown~] unknown message; #X msg 325 75 @bits 16 \, @downsamp 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.bitdown~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label bits: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label bits: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.bitdown~/slider0 @min 1 @max 16; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1 @max 16 @digits 2; -#X msg 260 238 @bits \$1; -#X obj 12 258 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 16 @digits 0; +#X msg 260 236 @bits \$1; +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.bitdown~/checkbox1; -#X msg 260 250 @bypass \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label downsamp: +#X msg 260 248 @bypass \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label downsamp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.bitdown~/slider2 @min 1 @max 200; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 1 @max 200 @digits 1; -#X msg 260 288 @downsamp \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 200 @digits 0; +#X msg 260 266 @downsamp \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 3 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 5 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 3 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 15 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; -#X connect 20 0 0 0; -#X connect 4 2 17 0; -#X coords 0 -1 1 1 200 108 2 2 200; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 4 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 0 0; +#X connect 6 1 23 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.chorus~.pd b/ceammc/ext/abstractions/gfx.chorus~.pd index 43dfc9b37c..cdce9df5f6 100644 --- a/ceammc/ext/abstractions/gfx.chorus~.pd +++ b/ceammc/ext/abstractions/gfx.chorus~.pd @@ -2,80 +2,103 @@ #X obj 25 125 fx.chorus~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.chorus; -#X obj 425 250 route @bypass @delay @depth @drywet @freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.chorus * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @delay @depth @drywet @freq default +reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @depth @drywet @freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.chorus~] unknown message; #X msg 325 75 @delay 25 \, @depth 0.02 \, @drywet 1 \, @freq 3 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 141 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.chorus~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.chorus~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.chorus~/slider1 @min 0 @max 200; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 200 @digits 1; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label depth: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 200 @digits 1; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label depth: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.chorus~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @depth \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @depth \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.chorus~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @drywet \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @drywet \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.chorus~/slider4 @min 0 @max 10; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 352 @freq \$1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 326 @freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 5 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 7 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 5 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 6 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 4 4 25 0; -#X coords 0 -1 1 1 200 172 2 2 200; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 6 4 33 0; +#X coords 0 -1 1 1 200 146 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.dattorro~.pd b/ceammc/ext/abstractions/gfx.dattorro~.pd new file mode 100644 index 0000000000..b09c113321 --- /dev/null +++ b/ceammc/ext/abstractions/gfx.dattorro~.pd @@ -0,0 +1,173 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 fx.dattorro~; +#X obj 25 25 inlet~; +#X obj 125 25 inlet~; +#X obj 525 25 inlet; +#X obj 525 125 route fx.dattorro * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @bw @bypass @damp @ddiff1 @ddiff2 @decay @drywet +@idiff1 @idiff2 @predelay default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bw @bypass @damp @ddiff1 @ddiff2 @decay @drywet @idiff1 @idiff2 @predelay default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.dattorro~] unknown message; +#X msg 425 75 @bw 0.9995 \, @damp 0.0005 \, @ddiff1 0.5 \, @ddiff2 0.7 \, @decay 0.5 \, @drywet 0.33 \, @idiff1 0.625 \, @idiff2 0.75 \, @predelay 40 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 425 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet~; +#X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 291 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [fx.dattorro~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label bw: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider0 @min 0 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @bw \$1; +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/checkbox1; +#X msg 260 248 @bypass \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label damp: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider2 @min 0 @max 1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @damp \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label ddiff1: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider3 @min 0 @max 1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @ddiff1 \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label ddiff2: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider4 @min 0 @max 1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @ddiff2 \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label decay: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider5 @min 0 @max 1; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 356 @decay \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label drywet: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider6 @min 0 @max 1; +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @drywet \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label idiff1: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider7 @min 0 @max 1; +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 416 @idiff1 \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label idiff2: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.dattorro~/slider8 @min 0 @max 1; +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 446 @idiff2 \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label +predelay(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/fx.dattorro~/slider9 @min 0 @max 100; +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min 0 @max 100 @digits 0; +#X msg 260 476 @predelay \$1; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 4 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 12 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 10 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 11 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; +#X connect 22 0 21 0; +#X connect 23 0 22 1; +#X connect 22 1 23 0; +#X connect 21 0 24 0; +#X connect 24 0 0 0; +#X connect 7 0 21 0; +#X connect 25 0 26 0; +#X connect 26 0 0 0; +#X connect 7 1 25 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 7 2 27 0; +#X connect 31 0 32 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; +#X connect 34 0 0 0; +#X connect 7 3 31 0; +#X connect 35 0 36 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 7 4 35 0; +#X connect 39 0 40 0; +#X connect 40 0 39 0; +#X connect 41 0 40 1; +#X connect 40 1 41 0; +#X connect 39 0 42 0; +#X connect 42 0 0 0; +#X connect 7 5 39 0; +#X connect 43 0 44 0; +#X connect 44 0 43 0; +#X connect 45 0 44 1; +#X connect 44 1 45 0; +#X connect 43 0 46 0; +#X connect 46 0 0 0; +#X connect 7 6 43 0; +#X connect 47 0 48 0; +#X connect 48 0 47 0; +#X connect 49 0 48 1; +#X connect 48 1 49 0; +#X connect 47 0 50 0; +#X connect 50 0 0 0; +#X connect 7 7 47 0; +#X connect 51 0 52 0; +#X connect 52 0 51 0; +#X connect 53 0 52 1; +#X connect 52 1 53 0; +#X connect 51 0 54 0; +#X connect 54 0 0 0; +#X connect 7 8 51 0; +#X connect 55 0 56 0; +#X connect 56 0 55 0; +#X connect 57 0 56 1; +#X connect 56 1 57 0; +#X connect 55 0 58 0; +#X connect 58 0 0 0; +#X connect 7 9 55 0; +#X coords 0 -1 1 1 200 296 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.distortion1~.pd b/ceammc/ext/abstractions/gfx.distortion1~.pd index 97774d1bee..66b23046ec 100644 --- a/ceammc/ext/abstractions/gfx.distortion1~.pd +++ b/ceammc/ext/abstractions/gfx.distortion1~.pd @@ -2,276 +2,298 @@ #X obj 25 125 fx.distortion1~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.distortion1; +#X obj 425 125 route fx.distortion1 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @drive @gain @high_drive @high_gain @level @low_drive @low_gain @sp_high_freq @sp_low_freq @sp_on_off @flt_on_off @hp_freq @lp_freq @middle_h_drive @middle_h_gain @middle_l_drive @middle_l_gain @res_on_off @split_high_freq @split_low_freq -@split_middle_freq @trigger @vibrato; -#X obj 675 350 print unknown property; +@split_middle_freq @trigger @vibrato default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @drive @gain @high_drive @high_gain @level @low_drive @low_gain @sp_high_freq @sp_low_freq @sp_on_off @flt_on_off @hp_freq @lp_freq @middle_h_drive @middle_h_gain @middle_l_drive @middle_l_gain @res_on_off @split_high_freq @split_low_freq @split_middle_freq @trigger @vibrato default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.distortion1~] unknown message; #X msg 325 75 @drive 0.64 \, @gain 2 \, @high_drive 1 \, @high_gain 10 \, @level 0.01 \, @low_drive 1 \, @low_gain 10 \, @sp_high_freq 5000 \, @sp_low_freq 130 \, @hp_freq 130 \, @lp_freq 5000 \, @middle_h_drive 1 \, @middle_h_gain 10 \, @middle_l_drive 1 \, @middle_l_gain 10 \, @split_high_freq 1250 \, @split_low_freq 250 \, @split_middle_freq 650 \, @trigger 0.12 \, @vibrato 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 675 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion1~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label drive: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @drive \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drive \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider1 @min -10 @max 10; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -10 @max 10 @digits 2; -#X msg 260 270 @gain \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -10 @max 10 @digits 2; +#X msg 260 266 @gain \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label high_drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider2 @min 0 @max 1; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 302 @high_drive \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @high_drive \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label high_gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider3 @min -10 @max 20; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min -10 @max 20 @digits 2; -#X msg 260 334 @high_gain \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label level: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min -10 @max 20 @digits 2; +#X msg 260 326 @high_gain \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider4 @min 0 @max 0.5; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; -#X msg 260 366 @level \$1; -#X obj 12 398 ui.slider @size 125 12 @active_scale 1 @label low_drive: +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; +#X msg 260 356 @level \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label low_drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider5 @min 0 @max 1; -#X obj 190 398 sync; -#X obj 145 398 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 398 @low_drive \$1; -#X obj 12 430 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @low_drive \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label low_gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider6 @min -10 @max 20; -#X obj 190 430 sync; -#X obj 145 430 ui.number @size 50 12 @min -10 @max 20 @digits 2; -#X msg 260 430 @low_gain \$1; -#X obj 12 462 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min -10 @max 20 @digits 2; +#X msg 260 416 @low_gain \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label sp_high_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider7 @min 1000 @max 12000; -#X obj 190 462 sync; -#X obj 145 462 ui.number @size 50 12 @min 1000 @max 12000 @digits 1; -#X msg 260 462 @sp_high_freq \$1; -#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min 1000 @max 12000 @digits 1; +#X msg 260 446 @sp_high_freq \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label sp_low_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider8 @min 20 @max 1000; -#X obj 190 494 sync; -#X obj 145 494 ui.number @size 50 12 @min 20 @max 1000 @digits 1; -#X msg 260 494 @sp_low_freq \$1; -#X obj 12 514 ui.toggle @size 12 12 @label sp_on_off @label_side right +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min 20 @max 1000 @digits 1; +#X msg 260 476 @sp_low_freq \$1; +#X obj 12 496 ui.toggle @size 12 12 @label sp_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/checkbox9; -#X msg 260 506 @sp_on_off \$1; -#X obj 12 532 ui.toggle @size 12 12 @label flt_on_off @label_side +#X msg 260 488 @sp_on_off \$1; +#X obj 12 514 ui.toggle @size 12 12 @label flt_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/checkbox10; -#X msg 260 524 @flt_on_off \$1; -#X obj 12 560 ui.number @size 60 12 @label hp_freq: @label_side top +#X msg 260 506 @flt_on_off \$1; +#X obj 12 542 ui.number @size 60 12 @label hp_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/numbox11 @min 20 @max 7040 @step 10; -#X msg 260 560 @hp_freq \$1; -#X obj 12 590 ui.number @size 60 12 @label lp_freq: @label_side top +#X msg 260 542 @hp_freq \$1; +#X obj 12 572 ui.number @size 60 12 @label lp_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/numbox12 @min 20 @max 12000 @step 10; -#X msg 260 590 @lp_freq \$1; -#X obj 12 622 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 572 @lp_freq \$1; +#X obj 12 602 ui.slider @size 125 12 @active_scale 1 @label middle_h_drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider13 @min 0 @max 1; -#X obj 190 622 sync; -#X obj 145 622 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 622 @middle_h_drive \$1; -#X obj 12 654 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 602 sync; +#X obj 145 602 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 602 @middle_h_drive \$1; +#X obj 12 632 ui.slider @size 125 12 @active_scale 1 @label middle_h_gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider14 @min -10 @max 20; -#X obj 190 654 sync; -#X obj 145 654 ui.number @size 50 12 @min -10 @max 20 @digits 2; -#X msg 260 654 @middle_h_gain \$1; -#X obj 12 686 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 632 sync; +#X obj 145 632 ui.number @size 50 12 @min -10 @max 20 @digits 2; +#X msg 260 632 @middle_h_gain \$1; +#X obj 12 662 ui.slider @size 125 12 @active_scale 1 @label middle_l_drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider15 @min 0 @max 1; -#X obj 190 686 sync; -#X obj 145 686 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 686 @middle_l_drive \$1; -#X obj 12 718 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 662 sync; +#X obj 145 662 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 662 @middle_l_drive \$1; +#X obj 12 692 ui.slider @size 125 12 @active_scale 1 @label middle_l_gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider16 @min -10 @max 20; -#X obj 190 718 sync; -#X obj 145 718 ui.number @size 50 12 @min -10 @max 20 @digits 2; -#X msg 260 718 @middle_l_gain \$1; -#X obj 12 738 ui.toggle @size 12 12 @label res_on_off @label_side +#X obj 215 692 sync; +#X obj 145 692 ui.number @size 50 12 @min -10 @max 20 @digits 2; +#X msg 260 692 @middle_l_gain \$1; +#X obj 12 712 ui.toggle @size 12 12 @label res_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/checkbox17; -#X msg 260 730 @res_on_off \$1; -#X obj 12 766 ui.number @size 60 12 @label split_high_freq: +#X msg 260 704 @res_on_off \$1; +#X obj 12 740 ui.number @size 60 12 @label split_high_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/numbox18 @min 1250 @max 12000 @step 10; -#X msg 260 766 @split_high_freq \$1; -#X obj 12 796 ui.number @size 60 12 @label split_low_freq: @label_side +#X msg 260 740 @split_high_freq \$1; +#X obj 12 770 ui.number @size 60 12 @label split_low_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/numbox19 @min 20 @max 600 @step 10; -#X msg 260 796 @split_low_freq \$1; -#X obj 12 826 ui.number @size 60 12 @label split_middle_freq: +#X msg 260 770 @split_low_freq \$1; +#X obj 12 800 ui.number @size 60 12 @label split_middle_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/numbox20 @min 600 @max 1250 @step 10; -#X msg 260 826 @split_middle_freq \$1; -#X obj 12 858 ui.slider @size 125 12 @active_scale 1 @label trigger: +#X msg 260 800 @split_middle_freq \$1; +#X obj 12 830 ui.slider @size 125 12 @active_scale 1 @label trigger: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider21 @min 0 @max 1; -#X obj 190 858 sync; -#X obj 145 858 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 858 @trigger \$1; -#X obj 12 890 ui.slider @size 125 12 @active_scale 1 @label vibrato: +#X obj 215 830 sync; +#X obj 145 830 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 830 @trigger \$1; +#X obj 12 860 ui.slider @size 125 12 @active_scale 1 @label vibrato: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion1~/slider22 @min 0 @max 1; -#X obj 190 890 sync; -#X obj 145 890 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 890 @vibrato \$1; +#X obj 215 860 sync; +#X obj 145 860 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 860 @vibrato \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 23 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 25 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 23 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 24 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; +#X connect 6 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 3 23 0; +#X connect 6 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 4 4 27 0; +#X connect 6 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 4 5 31 0; +#X connect 6 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 4 6 35 0; +#X connect 6 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 4 7 39 0; +#X connect 6 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 4 8 43 0; +#X connect 6 6 43 0; #X connect 47 0 48 0; -#X connect 48 0 0 0; -#X connect 4 9 47 0; -#X connect 49 0 50 0; +#X connect 48 0 47 0; +#X connect 49 0 48 1; +#X connect 48 1 49 0; +#X connect 47 0 50 0; #X connect 50 0 0 0; -#X connect 4 10 49 0; +#X connect 6 7 47 0; #X connect 51 0 52 0; -#X connect 52 0 0 0; -#X connect 4 11 51 0; -#X connect 53 0 54 0; +#X connect 52 0 51 0; +#X connect 53 0 52 1; +#X connect 52 1 53 0; +#X connect 51 0 54 0; #X connect 54 0 0 0; -#X connect 4 12 53 0; +#X connect 6 8 51 0; #X connect 55 0 56 0; -#X connect 56 0 55 0; -#X connect 57 0 56 1; -#X connect 56 1 57 0; -#X connect 55 0 58 0; +#X connect 56 0 0 0; +#X connect 6 9 55 0; +#X connect 57 0 58 0; #X connect 58 0 0 0; -#X connect 4 13 55 0; +#X connect 6 10 57 0; #X connect 59 0 60 0; -#X connect 60 0 59 0; -#X connect 61 0 60 1; -#X connect 60 1 61 0; -#X connect 59 0 62 0; +#X connect 60 0 0 0; +#X connect 6 11 59 0; +#X connect 61 0 62 0; #X connect 62 0 0 0; -#X connect 4 14 59 0; +#X connect 6 12 61 0; #X connect 63 0 64 0; #X connect 64 0 63 0; #X connect 65 0 64 1; #X connect 64 1 65 0; #X connect 63 0 66 0; #X connect 66 0 0 0; -#X connect 4 15 63 0; +#X connect 6 13 63 0; #X connect 67 0 68 0; #X connect 68 0 67 0; #X connect 69 0 68 1; #X connect 68 1 69 0; #X connect 67 0 70 0; #X connect 70 0 0 0; -#X connect 4 16 67 0; +#X connect 6 14 67 0; #X connect 71 0 72 0; -#X connect 72 0 0 0; -#X connect 4 17 71 0; -#X connect 73 0 74 0; +#X connect 72 0 71 0; +#X connect 73 0 72 1; +#X connect 72 1 73 0; +#X connect 71 0 74 0; #X connect 74 0 0 0; -#X connect 4 18 73 0; +#X connect 6 15 71 0; #X connect 75 0 76 0; -#X connect 76 0 0 0; -#X connect 4 19 75 0; -#X connect 77 0 78 0; +#X connect 76 0 75 0; +#X connect 77 0 76 1; +#X connect 76 1 77 0; +#X connect 75 0 78 0; #X connect 78 0 0 0; -#X connect 4 20 77 0; +#X connect 6 16 75 0; #X connect 79 0 80 0; -#X connect 80 0 79 0; -#X connect 81 0 80 1; -#X connect 80 1 81 0; -#X connect 79 0 82 0; +#X connect 80 0 0 0; +#X connect 6 17 79 0; +#X connect 81 0 82 0; #X connect 82 0 0 0; -#X connect 4 21 79 0; +#X connect 6 18 81 0; #X connect 83 0 84 0; -#X connect 84 0 83 0; -#X connect 85 0 84 1; -#X connect 84 1 85 0; -#X connect 83 0 86 0; +#X connect 84 0 0 0; +#X connect 6 19 83 0; +#X connect 85 0 86 0; #X connect 86 0 0 0; -#X connect 4 22 83 0; -#X coords 0 -1 1 1 200 710 2 2 200; +#X connect 6 20 85 0; +#X connect 87 0 88 0; +#X connect 88 0 87 0; +#X connect 89 0 88 1; +#X connect 88 1 89 0; +#X connect 87 0 90 0; +#X connect 90 0 0 0; +#X connect 6 21 87 0; +#X connect 91 0 92 0; +#X connect 92 0 91 0; +#X connect 93 0 92 1; +#X connect 92 1 93 0; +#X connect 91 0 94 0; +#X connect 94 0 0 0; +#X connect 6 22 91 0; +#X coords 0 -1 1 1 200 680 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.distortion2~.pd b/ceammc/ext/abstractions/gfx.distortion2~.pd index ca9ae581ed..46586782f0 100644 --- a/ceammc/ext/abstractions/gfx.distortion2~.pd +++ b/ceammc/ext/abstractions/gfx.distortion2~.pd @@ -2,149 +2,171 @@ #X obj 25 125 fx.distortion2~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.distortion2; +#X obj 425 125 route fx.distortion2 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @drive @gain @level @sp_high_freq @sp_low_freq -@sp_on_off @flt_on_off @hp_freq @lp_freq @res_on_off @trigger -@vibrato; -#X obj 675 350 print unknown property; +@sp_on_off @flt_on_off @hp_freq @lp_freq @res_on_off @trigger @vibrato +default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @drive @gain @level @sp_high_freq @sp_low_freq @sp_on_off @flt_on_off @hp_freq @lp_freq @res_on_off @trigger @vibrato default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.distortion2~] unknown message; #X msg 325 75 @drive 0.64 \, @gain 2 \, @level 0.01 \, @sp_high_freq 5000 \, @sp_low_freq 130 \, @hp_freq 130 \, @lp_freq 5000 \, @trigger 0.12 \, @vibrato 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 345 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion2~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label drive: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @drive \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drive \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider1 @min -10 @max 10; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min -10 @max 10 @digits 2; -#X msg 260 270 @gain \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label level: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min -10 @max 10 @digits 2; +#X msg 260 266 @gain \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider2 @min 0 @max 0.5; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; -#X msg 260 302 @level \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; +#X msg 260 296 @level \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label sp_high_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider3 @min 1000 @max 12000; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 1000 @max 12000 @digits 1; -#X msg 260 334 @sp_high_freq \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1000 @max 12000 @digits 1; +#X msg 260 326 @sp_high_freq \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label sp_low_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider4 @min 20 @max 1000; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 20 @max 1000 @digits 1; -#X msg 260 366 @sp_low_freq \$1; -#X obj 12 386 ui.toggle @size 12 12 @label sp_on_off @label_side right +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 20 @max 1000 @digits 1; +#X msg 260 356 @sp_low_freq \$1; +#X obj 12 376 ui.toggle @size 12 12 @label sp_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/checkbox5; -#X msg 260 378 @sp_on_off \$1; -#X obj 12 404 ui.toggle @size 12 12 @label flt_on_off @label_side +#X msg 260 368 @sp_on_off \$1; +#X obj 12 394 ui.toggle @size 12 12 @label flt_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/checkbox6; -#X msg 260 396 @flt_on_off \$1; -#X obj 12 432 ui.number @size 60 12 @label hp_freq: @label_side top +#X msg 260 386 @flt_on_off \$1; +#X obj 12 422 ui.number @size 60 12 @label hp_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/numbox7 @min 20 @max 7040 @step 10; -#X msg 260 432 @hp_freq \$1; -#X obj 12 462 ui.number @size 60 12 @label lp_freq: @label_side top +#X msg 260 422 @hp_freq \$1; +#X obj 12 452 ui.number @size 60 12 @label lp_freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/numbox8 @min 20 @max 12000 @step 10; -#X msg 260 462 @lp_freq \$1; -#X obj 12 482 ui.toggle @size 12 12 @label res_on_off @label_side +#X msg 260 452 @lp_freq \$1; +#X obj 12 472 ui.toggle @size 12 12 @label res_on_off @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/checkbox9; -#X msg 260 474 @res_on_off \$1; -#X obj 12 512 ui.slider @size 125 12 @active_scale 1 @label trigger: +#X msg 260 464 @res_on_off \$1; +#X obj 12 500 ui.slider @size 125 12 @active_scale 1 @label trigger: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider10 @min 0 @max 1; -#X obj 190 512 sync; -#X obj 145 512 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 512 @trigger \$1; -#X obj 12 544 ui.slider @size 125 12 @active_scale 1 @label vibrato: +#X obj 215 500 sync; +#X obj 145 500 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 500 @trigger \$1; +#X obj 12 530 ui.slider @size 125 12 @active_scale 1 @label vibrato: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion2~/slider11 @min 0 @max 1; -#X obj 190 544 sync; -#X obj 145 544 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 544 @vibrato \$1; +#X obj 215 530 sync; +#X obj 145 530 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 530 @vibrato \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 12 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 14 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 12 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 13 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 4 2 19 0; +#X connect 6 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 4 3 23 0; +#X connect 6 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 4 4 27 0; +#X connect 6 2 27 0; #X connect 31 0 32 0; -#X connect 32 0 0 0; -#X connect 4 5 31 0; -#X connect 33 0 34 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 4 6 33 0; +#X connect 6 3 31 0; #X connect 35 0 36 0; -#X connect 36 0 0 0; -#X connect 4 7 35 0; -#X connect 37 0 38 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 4 8 37 0; +#X connect 6 4 35 0; #X connect 39 0 40 0; #X connect 40 0 0 0; -#X connect 4 9 39 0; +#X connect 6 5 39 0; #X connect 41 0 42 0; -#X connect 42 0 41 0; -#X connect 43 0 42 1; -#X connect 42 1 43 0; -#X connect 41 0 44 0; +#X connect 42 0 0 0; +#X connect 6 6 41 0; +#X connect 43 0 44 0; #X connect 44 0 0 0; -#X connect 4 10 41 0; +#X connect 6 7 43 0; #X connect 45 0 46 0; -#X connect 46 0 45 0; -#X connect 47 0 46 1; -#X connect 46 1 47 0; -#X connect 45 0 48 0; +#X connect 46 0 0 0; +#X connect 6 8 45 0; +#X connect 47 0 48 0; #X connect 48 0 0 0; -#X connect 4 11 45 0; -#X coords 0 -1 1 1 200 364 2 2 200; +#X connect 6 9 47 0; +#X connect 49 0 50 0; +#X connect 50 0 49 0; +#X connect 51 0 50 1; +#X connect 50 1 51 0; +#X connect 49 0 52 0; +#X connect 52 0 0 0; +#X connect 6 10 49 0; +#X connect 53 0 54 0; +#X connect 54 0 53 0; +#X connect 55 0 54 1; +#X connect 54 1 55 0; +#X connect 53 0 56 0; +#X connect 56 0 0 0; +#X connect 6 11 53 0; +#X coords 0 -1 1 1 200 350 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.distortion3~.pd b/ceammc/ext/abstractions/gfx.distortion3~.pd index 6d73096c4b..9158f384e2 100644 --- a/ceammc/ext/abstractions/gfx.distortion3~.pd +++ b/ceammc/ext/abstractions/gfx.distortion3~.pd @@ -2,93 +2,116 @@ #X obj 25 125 fx.distortion3~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.distortion3; -#X obj 425 250 route @bypass @drive @drywet @gain @hp_freq @lp_freq; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.distortion3 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drive @drywet @gain @hp_freq @lp_freq +default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drive @drywet @gain @hp_freq @lp_freq default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.distortion3~] unknown message; #X msg 325 75 @drive 0.5 \, @drywet 1 \, @gain 0 \, @hp_freq 30 \, @lp_freq 10000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 171 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion3~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.distortion3~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label drive: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion3~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @drive \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 0; +#X msg 260 236 @drive \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion3~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label gain(db): +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion3~/slider3 @min -30 @max 10; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min -30 @max 10 @digits 2; -#X msg 260 320 @gain \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min -30 @max 10 @digits 2; +#X msg 260 296 @gain \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label hp_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion3~/slider4 @min 20 @max 2000; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 20 @max 2000 @digits 0; -#X msg 260 352 @hp_freq \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 20 @max 2000 @digits 0; +#X msg 260 326 @hp_freq \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label lp_freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion3~/slider5 @min 1000 @max 20000; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 1000 @max 20000 @digits 1; -#X msg 260 384 @lp_freq \$1; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 1000 @max 20000 @digits 1; +#X msg 260 356 @lp_freq \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 6 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 8 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 6 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 7 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 4 4 25 0; +#X connect 6 2 25 0; #X connect 29 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X connect 30 1 31 0; #X connect 29 0 32 0; #X connect 32 0 0 0; -#X connect 4 5 29 0; -#X coords 0 -1 1 1 200 204 2 2 200; +#X connect 6 3 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 6 4 33 0; +#X connect 37 0 38 0; +#X connect 38 0 37 0; +#X connect 39 0 38 1; +#X connect 38 1 39 0; +#X connect 37 0 40 0; +#X connect 40 0 0 0; +#X connect 6 5 37 0; +#X coords 0 -1 1 1 200 176 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.distortion~.pd b/ceammc/ext/abstractions/gfx.distortion~.pd index fe624eb95f..be0a0da40e 100644 --- a/ceammc/ext/abstractions/gfx.distortion~.pd +++ b/ceammc/ext/abstractions/gfx.distortion~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.distortion~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.distortion; -#X obj 425 250 route @bypass @drive @drywet @offset; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.distortion * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drive @drywet @offset default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drive @drywet @offset default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.distortion~] unknown message; #X msg 325 75 @drive 0.5 \, @drywet 1 \, @offset 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.distortion~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.distortion~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label drive: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @drive \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drive \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label offset: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label offset: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.distortion~/slider3 @min 0 @max 0.5; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; -#X msg 260 320 @offset \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.5 @digits 4; +#X msg 260 296 @offset \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 21 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.drive~.pd b/ceammc/ext/abstractions/gfx.drive~.pd index ee0345aa4e..f0bae60e14 100644 --- a/ceammc/ext/abstractions/gfx.drive~.pd +++ b/ceammc/ext/abstractions/gfx.drive~.pd @@ -2,41 +2,63 @@ #X obj 25 125 fx.drive~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.drive; -#X obj 425 250 route @bypass @drive; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.drive * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drive default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drive default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.drive~] unknown message; #X msg 325 75 @drive 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.drive~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.drive~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label drive: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drive: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.drive~/slider1 @min 1 @max 10; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 1 @max 10 @digits 3; -#X msg 260 256 @drive \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 10 @digits 0; +#X msg 260 236 @drive \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X coords 0 -1 1 1 200 76 2 2 200; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 0 0; +#X connect 6 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 21 0; +#X connect 23 0 22 1; +#X connect 22 1 23 0; +#X connect 21 0 24 0; +#X connect 24 0 0 0; +#X connect 6 1 21 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.drone_box~.pd b/ceammc/ext/abstractions/gfx.drone_box~.pd index e39427dfbd..f25c5e97dd 100644 --- a/ceammc/ext/abstractions/gfx.drone_box~.pd +++ b/ceammc/ext/abstractions/gfx.drone_box~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.drone_box~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.drone_box; -#X obj 425 250 route @bypass @decay @drywet @pitch; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.drone_box * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @decay @drywet @pitch default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @decay @drywet @pitch default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.drone_box~] unknown message; #X msg 325 75 @decay 4000 \, @drywet 0.5 \, @pitch 48 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.drone_box~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.drone_box~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label decay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label decay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.drone_box~/slider1 @min 100 @max 120000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 100 @max 120000 @digits 2; -#X msg 260 256 @decay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 100 @max 120000 @digits 0; +#X msg 260 236 @decay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.drone_box~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label pitch(semitones): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.drone_box~/slider3 @min 36 @max 60; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 36 @max 60 @digits 2; -#X msg 260 320 @pitch \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 36 @max 60 @digits 2; +#X msg 260 296 @pitch \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 21 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.echo2~.pd b/ceammc/ext/abstractions/gfx.echo2~.pd index da6c61f3b4..a903af8c83 100644 --- a/ceammc/ext/abstractions/gfx.echo2~.pd +++ b/ceammc/ext/abstractions/gfx.echo2~.pd @@ -3,83 +3,106 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.echo2; -#X obj 525 250 route @bypass @delay @drywet @feedback @stereo; -#X obj 775 350 print unknown property; +#X obj 525 125 route fx.echo2 * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @bypass @delay @drywet @feedback @stereo default +reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @delay @drywet @feedback @stereo default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.echo2~] unknown message; #X msg 425 75 @delay 500 \, @drywet 1 \, @feedback 0.3 \, @stereo 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 141 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.echo2~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.echo2~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo2~/slider1 @min 10 @max 5000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 10 @max 5000 @digits 0; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 10 @max 5000 @digits 0; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo2~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo2~/slider3 @min 0 @max 0.99; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 320 @feedback \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label stereo: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 296 @feedback \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label stereo: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo2~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @stereo \$1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @stereo \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 5 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 7 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 5 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; #X connect 14 0 0 0; -#X connect 5 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 5 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 7 6 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 5 2 19 0; +#X connect 7 0 21 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 5 3 23 0; +#X connect 7 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 5 4 27 0; -#X coords 0 -1 1 1 200 172 2 2 200; +#X connect 7 2 27 0; +#X connect 31 0 32 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; +#X connect 34 0 0 0; +#X connect 7 3 31 0; +#X connect 35 0 36 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 7 4 35 0; +#X coords 0 -1 1 1 200 146 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.echo~.pd b/ceammc/ext/abstractions/gfx.echo~.pd index 9392daf059..90f5c0c4df 100644 --- a/ceammc/ext/abstractions/gfx.echo~.pd +++ b/ceammc/ext/abstractions/gfx.echo~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.echo~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.echo; -#X obj 425 250 route @bypass @delay @drywet @feedback; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.echo * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @delay @drywet @feedback default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @drywet @feedback default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.echo~] unknown message; #X msg 325 75 @delay 500 \, @drywet 1 \, @feedback 0.3 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.echo~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.echo~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo~/slider1 @min 10 @max 10000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 10 @max 10000 @digits 0; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 10 @max 10000 @digits 0; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.echo~/slider3 @min 0 @max 0.99; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 320 @feedback \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 296 @feedback \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 21 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.flanger~.pd b/ceammc/ext/abstractions/gfx.flanger~.pd index f4d8f197c4..a1ca4290b8 100644 --- a/ceammc/ext/abstractions/gfx.flanger~.pd +++ b/ceammc/ext/abstractions/gfx.flanger~.pd @@ -2,101 +2,123 @@ #X obj 25 125 fx.flanger~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.flanger; +#X obj 425 125 route fx.flanger * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @bypass @delay @drywet @feedback @invert @offset -@speed; -#X obj 675 350 print unknown property; +@speed default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @drywet @feedback @invert @offset @speed default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.flanger~] unknown message; #X msg 325 75 @delay 10 \, @drywet 1 \, @feedback 0 \, @offset 1 \, @speed 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 189 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.flanger~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.flanger~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/slider1 @min 0 @max 20; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 20 @digits 2; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 20 @digits 2; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @feedback \$1; -#X obj 12 340 ui.toggle @size 12 12 @label invert @label_side right +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @feedback \$1; +#X obj 12 316 ui.toggle @size 12 12 @label invert @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/checkbox4; -#X msg 260 332 @invert \$1; -#X obj 12 370 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 308 @invert \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label offset(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/slider5 @min 0 @max 20; -#X obj 190 370 sync; -#X obj 145 370 ui.number @size 50 12 @min 0 @max 20 @digits 2; -#X msg 260 370 @offset \$1; -#X obj 12 402 ui.slider @size 125 12 @active_scale 1 @label speed(Hz): +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 20 @digits 2; +#X msg 260 344 @offset \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label speed(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.flanger~/slider6 @min 0 @max 10; -#X obj 190 402 sync; -#X obj 145 402 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 402 @speed \$1; +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 374 @speed \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 7 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 9 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 7 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 8 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; -#X connect 26 0 0 0; -#X connect 4 4 25 0; -#X connect 27 0 28 0; -#X connect 28 0 27 0; -#X connect 29 0 28 1; -#X connect 28 1 29 0; -#X connect 27 0 30 0; -#X connect 30 0 0 0; -#X connect 4 5 27 0; -#X connect 31 0 32 0; -#X connect 32 0 31 0; -#X connect 33 0 32 1; -#X connect 32 1 33 0; -#X connect 31 0 34 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X connect 33 0 34 0; #X connect 34 0 0 0; -#X connect 4 6 31 0; -#X coords 0 -1 1 1 200 222 2 2 200; +#X connect 6 4 33 0; +#X connect 35 0 36 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 6 5 35 0; +#X connect 39 0 40 0; +#X connect 40 0 39 0; +#X connect 41 0 40 1; +#X connect 40 1 41 0; +#X connect 39 0 42 0; +#X connect 42 0 0 0; +#X connect 6 6 39 0; +#X coords 0 -1 1 1 200 194 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.freeverb2~.pd b/ceammc/ext/abstractions/gfx.freeverb2~.pd index 8007c2b7f2..72b071dff1 100644 --- a/ceammc/ext/abstractions/gfx.freeverb2~.pd +++ b/ceammc/ext/abstractions/gfx.freeverb2~.pd @@ -3,130 +3,152 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.freeverb2; +#X obj 525 125 route fx.freeverb2 * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; #X obj 525 250 route @bypass @damp @drywet @fr_damp @fr_room @fr_time -@freeze @room @spread; -#X obj 775 350 print unknown property; +@freeze @room @spread default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @damp @drywet @fr_damp @fr_room @fr_time @freeze @room @spread default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.freeverb2~] unknown message; #X msg 425 75 @damp 0.5 \, @drywet 0.33 \, @fr_damp 0.0001 \, @fr_room 0.999 \, @fr_time 100 \, @room 0.5 \, @spread 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.freeverb2~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label damp: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label damp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @damp \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @damp \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label fr_damp: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label fr_damp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @fr_damp \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label fr_room: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @fr_damp \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label fr_room: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @fr_room \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @fr_room \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label fr_time(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider5 @min 0 @max 1000; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 1000 @digits 1; -#X msg 260 384 @fr_time \$1; -#X obj 12 404 ui.toggle @size 12 12 @label freeze @label_side right +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 356 @fr_time \$1; +#X obj 12 376 ui.toggle @size 12 12 @label freeze @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/checkbox6; -#X msg 260 396 @freeze \$1; -#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label room: +#X msg 260 368 @freeze \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label room: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider7 @min 0 @max 1; -#X obj 190 434 sync; -#X obj 145 434 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 434 @room \$1; -#X obj 12 466 ui.slider @size 125 12 @active_scale 1 @label spread: +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @room \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label spread: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb2~/slider8 @min 0 @max 1; -#X obj 190 466 sync; -#X obj 145 466 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 466 @spread \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 434 @spread \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 9 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 11 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 9 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; #X connect 14 0 0 0; -#X connect 5 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 5 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 7 10 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 5 2 19 0; +#X connect 7 0 21 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 5 3 23 0; +#X connect 7 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 5 4 27 0; +#X connect 7 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 5 5 31 0; +#X connect 7 3 31 0; #X connect 35 0 36 0; -#X connect 36 0 0 0; -#X connect 5 6 35 0; -#X connect 37 0 38 0; -#X connect 38 0 37 0; -#X connect 39 0 38 1; -#X connect 38 1 39 0; -#X connect 37 0 40 0; -#X connect 40 0 0 0; -#X connect 5 7 37 0; -#X connect 41 0 42 0; -#X connect 42 0 41 0; -#X connect 43 0 42 1; -#X connect 42 1 43 0; -#X connect 41 0 44 0; +#X connect 36 0 35 0; +#X connect 37 0 36 1; +#X connect 36 1 37 0; +#X connect 35 0 38 0; +#X connect 38 0 0 0; +#X connect 7 4 35 0; +#X connect 39 0 40 0; +#X connect 40 0 39 0; +#X connect 41 0 40 1; +#X connect 40 1 41 0; +#X connect 39 0 42 0; +#X connect 42 0 0 0; +#X connect 7 5 39 0; +#X connect 43 0 44 0; #X connect 44 0 0 0; -#X connect 5 8 41 0; -#X coords 0 -1 1 1 200 286 2 2 200; +#X connect 7 6 43 0; +#X connect 45 0 46 0; +#X connect 46 0 45 0; +#X connect 47 0 46 1; +#X connect 46 1 47 0; +#X connect 45 0 48 0; +#X connect 48 0 0 0; +#X connect 7 7 45 0; +#X connect 49 0 50 0; +#X connect 50 0 49 0; +#X connect 51 0 50 1; +#X connect 50 1 51 0; +#X connect 49 0 52 0; +#X connect 52 0 0 0; +#X connect 7 8 49 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.freeverb~.pd b/ceammc/ext/abstractions/gfx.freeverb~.pd index 3768730f9e..a12134943d 100644 --- a/ceammc/ext/abstractions/gfx.freeverb~.pd +++ b/ceammc/ext/abstractions/gfx.freeverb~.pd @@ -2,114 +2,136 @@ #X obj 25 125 fx.freeverb~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.freeverb; +#X obj 425 125 route fx.freeverb * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @bypass @damp @drywet @fr_damp @fr_room @fr_time -@freeze @room; -#X obj 675 350 print unknown property; +@freeze @room default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @damp @drywet @fr_damp @fr_room @fr_time @freeze @room default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.freeverb~] unknown message; #X msg 325 75 @damp 0.5 \, @drywet 0.33 \, @fr_damp 0.0001 \, @fr_room 0.999 \, @fr_time 100 \, @room 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 219 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.freeverb~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.freeverb~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label damp: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label damp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @damp \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @damp \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label fr_damp: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label fr_damp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @fr_damp \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label fr_room: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @fr_damp \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label fr_room: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @fr_room \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @fr_room \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label fr_time(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider5 @min 0 @max 1000; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 1000 @digits 1; -#X msg 260 384 @fr_time \$1; -#X obj 12 404 ui.toggle @size 12 12 @label freeze @label_side right +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 356 @fr_time \$1; +#X obj 12 376 ui.toggle @size 12 12 @label freeze @label_side right @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/checkbox6; -#X msg 260 396 @freeze \$1; -#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label room: +#X msg 260 368 @freeze \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label room: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.freeverb~/slider7 @min 0 @max 1; -#X obj 190 434 sync; -#X obj 145 434 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 434 @room \$1; +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @room \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 8 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 10 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 8 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 9 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 4 4 25 0; +#X connect 6 2 25 0; #X connect 29 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X connect 30 1 31 0; #X connect 29 0 32 0; #X connect 32 0 0 0; -#X connect 4 5 29 0; +#X connect 6 3 29 0; #X connect 33 0 34 0; -#X connect 34 0 0 0; -#X connect 4 6 33 0; -#X connect 35 0 36 0; -#X connect 36 0 35 0; -#X connect 37 0 36 1; -#X connect 36 1 37 0; -#X connect 35 0 38 0; -#X connect 38 0 0 0; -#X connect 4 7 35 0; -#X coords 0 -1 1 1 200 254 2 2 200; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 6 4 33 0; +#X connect 37 0 38 0; +#X connect 38 0 37 0; +#X connect 39 0 38 1; +#X connect 38 1 39 0; +#X connect 37 0 40 0; +#X connect 40 0 0 0; +#X connect 6 5 37 0; +#X connect 41 0 42 0; +#X connect 42 0 0 0; +#X connect 6 6 41 0; +#X connect 43 0 44 0; +#X connect 44 0 43 0; +#X connect 45 0 44 1; +#X connect 44 1 45 0; +#X connect 43 0 46 0; +#X connect 46 0 0 0; +#X connect 6 7 43 0; +#X coords 0 -1 1 1 200 224 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.granulator~.pd b/ceammc/ext/abstractions/gfx.granulator~.pd index 1fbd447858..558df2ec7f 100644 --- a/ceammc/ext/abstractions/gfx.granulator~.pd +++ b/ceammc/ext/abstractions/gfx.granulator~.pd @@ -2,62 +2,84 @@ #X obj 25 125 fx.granulator~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.granulator; -#X obj 425 250 route @delay @density @length; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.granulator * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @delay @density @length default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @delay @density @length default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.granulator~] unknown message; #X msg 325 75 @delay 10 \, @density 10 \, @length 100 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.granulator~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.granulator~/slider0 @min 0.5 @max 10; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0.5 @max 10 @digits 3; -#X msg 260 238 @delay \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label density: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0.5 @max 10 @digits 3; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label density: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.granulator~/slider1 @min 1 @max 64; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 64 @digits 2; -#X msg 260 270 @density \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 64 @digits 0; +#X msg 260 266 @density \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label length(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.granulator~/slider2 @min 10 @max 500; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 10 @max 500 @digits 1; -#X msg 260 302 @length \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 10 @max 500 @digits 1; +#X msg 260 296 @length \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 3 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 3 1 10 0; -#X connect 12 0 13 0; -#X connect 13 0 12 0; -#X connect 14 0 13 1; -#X connect 13 1 14 0; -#X connect 12 0 15 0; -#X connect 15 0 0 0; -#X connect 4 0 12 0; -#X connect 16 0 17 0; -#X connect 17 0 16 0; -#X connect 18 0 17 1; -#X connect 17 1 18 0; -#X connect 16 0 19 0; -#X connect 19 0 0 0; -#X connect 4 1 16 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 5 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 3 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 4 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 4 1 17 0; +#X connect 5 0 17 0; #X connect 20 0 21 0; #X connect 21 0 20 0; #X connect 22 0 21 1; #X connect 21 1 22 0; #X connect 20 0 23 0; #X connect 23 0 0 0; -#X connect 4 2 20 0; -#X coords 0 -1 1 1 200 122 2 2 200; +#X connect 6 0 20 0; +#X connect 24 0 25 0; +#X connect 25 0 24 0; +#X connect 26 0 25 1; +#X connect 25 1 26 0; +#X connect 24 0 27 0; +#X connect 27 0 0 0; +#X connect 6 1 24 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 6 2 28 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.greyhole~.pd b/ceammc/ext/abstractions/gfx.greyhole~.pd index 7d1487c1cf..9c1a41bbcc 100644 --- a/ceammc/ext/abstractions/gfx.greyhole~.pd +++ b/ceammc/ext/abstractions/gfx.greyhole~.pd @@ -3,136 +3,158 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.greyhole; +#X obj 525 125 route fx.greyhole * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; #X obj 525 250 route @bypass @damping @delaytime @diffusion @drywet -@feedback @moddepth @modfreq @size; -#X obj 775 350 print unknown property; +@feedback @moddepth @modfreq @size default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @damping @delaytime @diffusion @drywet @feedback @moddepth @modfreq @size default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.greyhole~] unknown message; #X msg 425 75 @damping 0 \, @delaytime 0.2 \, @diffusion 0.5 \, @drywet 1 \, @feedback 0.9 \, @moddepth 0.1 \, @modfreq 2 \, @size 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 261 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.greyhole~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.greyhole~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label damping: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label damping: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider1 @min 0 @max 0.99; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 256 @damping \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 236 @damping \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label delaytime(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider2 @min 0.001 @max 1.45; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0.001 @max 1.45 @digits 3; -#X msg 260 288 @delaytime \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label diffusion: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.001 @max 1.45 @digits 3; +#X msg 260 266 @delaytime \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label diffusion: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider3 @min 0 @max 0.99; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 320 @diffusion \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 296 @diffusion \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @drywet \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @drywet \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider5 @min 0 @max 1; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 384 @feedback \$1; -#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label moddepth: +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 356 @feedback \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label moddepth: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider6 @min 0 @max 1; -#X obj 190 416 sync; -#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 416 @moddepth \$1; -#X obj 12 448 ui.slider @size 125 12 @active_scale 1 @label modfreq: +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @moddepth \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label modfreq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider7 @min 0 @max 10; -#X obj 190 448 sync; -#X obj 145 448 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 448 @modfreq \$1; -#X obj 12 480 ui.slider @size 125 12 @active_scale 1 @label size: +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 416 @modfreq \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label size: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.greyhole~/slider8 @min 0.5 @max 3; -#X obj 190 480 sync; -#X obj 145 480 ui.number @size 50 12 @min 0.5 @max 3 @digits 3; -#X msg 260 480 @size \$1; +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min 0.5 @max 3 @digits 3; +#X msg 260 446 @size \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 9 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 11 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 9 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; #X connect 14 0 0 0; -#X connect 5 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 5 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 7 10 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 5 2 19 0; +#X connect 7 0 21 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 5 3 23 0; +#X connect 7 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 5 4 27 0; +#X connect 7 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 5 5 31 0; +#X connect 7 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 5 6 35 0; +#X connect 7 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 5 7 39 0; +#X connect 7 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 5 8 43 0; -#X coords 0 -1 1 1 200 300 2 2 200; +#X connect 7 6 43 0; +#X connect 47 0 48 0; +#X connect 48 0 47 0; +#X connect 49 0 48 1; +#X connect 48 1 49 0; +#X connect 47 0 50 0; +#X connect 50 0 0 0; +#X connect 7 7 47 0; +#X connect 51 0 52 0; +#X connect 52 0 51 0; +#X connect 53 0 52 1; +#X connect 52 1 53 0; +#X connect 51 0 54 0; +#X connect 54 0 0 0; +#X connect 7 8 51 0; +#X coords 0 -1 1 1 200 266 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.jcrev~.pd b/ceammc/ext/abstractions/gfx.jcrev~.pd new file mode 100644 index 0000000000..0f0eb6c1ee --- /dev/null +++ b/ceammc/ext/abstractions/gfx.jcrev~.pd @@ -0,0 +1,70 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 fx.jcrev~; +#X obj 25 25 inlet~; +#X obj 425 25 inlet; +#X obj 425 125 route fx.jcrev * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drywet default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drywet default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.jcrev~] unknown message; +#X msg 325 75 @drywet 0.4 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 325 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet~; +#X obj 700 550 outlet~; +#X obj 800 550 outlet~; +#X obj 900 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [fx.jcrev~] 3 9 0 12 -104026 +-262144 0; +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname +/gui/\$1/fx.jcrev~/checkbox0; +#X msg 260 218 @bypass \$1; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drywet: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.jcrev~/slider1 @min 0 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drywet \$1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 0 2 17 0; +#X connect 0 3 18 0; +#X connect 4 1 19 0; +#X connect 5 0 19 0; +#X connect 22 0 23 0; +#X connect 23 0 0 0; +#X connect 6 0 22 0; +#X connect 24 0 25 0; +#X connect 25 0 24 0; +#X connect 26 0 25 1; +#X connect 25 1 26 0; +#X connect 24 0 27 0; +#X connect 27 0 0 0; +#X connect 6 1 24 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.pitchshift~.pd b/ceammc/ext/abstractions/gfx.pitchshift~.pd index 9635d080de..8c326b616d 100644 --- a/ceammc/ext/abstractions/gfx.pitchshift~.pd +++ b/ceammc/ext/abstractions/gfx.pitchshift~.pd @@ -3,68 +3,90 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.pitchshift; -#X obj 525 250 route @bypass @drywet @fade @window; -#X obj 775 350 print unknown property; +#X obj 525 125 route fx.pitchshift * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @bypass @drywet @fade @window default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @drywet @fade @window default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.pitchshift~] unknown message; #X msg 425 75 @drywet 1 \, @fade 100 \, @window 200 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.pitchshift~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.pitchshift~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.pitchshift~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @drywet \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label fade(ms): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drywet \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label fade(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.pitchshift~/slider2 @min 0 @max 1000; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1000 @digits 1; -#X msg 260 288 @fade \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 266 @fade \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label window(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.pitchshift~/slider3 @min 10 @max 2000; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 10 @max 2000 @digits 0; -#X msg 260 320 @window \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 10 @max 2000 @digits 0; +#X msg 260 296 @window \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 4 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 4 1 10 0; -#X connect 12 0 13 0; -#X connect 13 0 0 0; -#X connect 5 0 12 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 5 1 14 0; -#X connect 18 0 19 0; -#X connect 19 0 18 0; -#X connect 20 0 19 1; -#X connect 19 1 20 0; -#X connect 18 0 21 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 6 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 4 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 5 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 5 1 17 0; +#X connect 6 0 17 0; +#X connect 20 0 21 0; #X connect 21 0 0 0; -#X connect 5 2 18 0; +#X connect 7 0 20 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 5 3 22 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 7 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 7 2 26 0; +#X connect 30 0 31 0; +#X connect 31 0 30 0; +#X connect 32 0 31 1; +#X connect 31 1 32 0; +#X connect 30 0 33 0; +#X connect 33 0 0 0; +#X connect 7 3 30 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.recho~.pd b/ceammc/ext/abstractions/gfx.recho~.pd index 77d607781d..163fde99f7 100644 --- a/ceammc/ext/abstractions/gfx.recho~.pd +++ b/ceammc/ext/abstractions/gfx.recho~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.recho~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.recho; -#X obj 425 250 route @bypass @delay @drywet @feedback; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.recho * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @delay @drywet @feedback default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @drywet @feedback default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.recho~] unknown message; #X msg 325 75 @delay 500 \, @drywet 1 \, @feedback 0.3 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.recho~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.recho~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.recho~/slider1 @min 0 @max 2000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 2000 @digits 0; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 2000 @digits 0; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.recho~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.recho~/slider3 @min 0 @max 0.99; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 320 @feedback \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 296 @feedback \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 21 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.satrev~.pd b/ceammc/ext/abstractions/gfx.satrev~.pd new file mode 100644 index 0000000000..7930f21af1 --- /dev/null +++ b/ceammc/ext/abstractions/gfx.satrev~.pd @@ -0,0 +1,66 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 fx.satrev~; +#X obj 25 25 inlet~; +#X obj 425 25 inlet; +#X obj 425 125 route fx.satrev * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drywet default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drywet default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.satrev~] unknown message; +#X msg 325 75 @drywet 0.25 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 325 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet~; +#X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [fx.satrev~] 3 9 0 12 -104026 +-262144 0; +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname +/gui/\$1/fx.satrev~/checkbox0; +#X msg 260 218 @bypass \$1; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drywet: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/fx.satrev~/slider1 @min 0 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drywet \$1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 4 1 17 0; +#X connect 5 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 0 0; +#X connect 6 0 20 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 6 1 22 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.sdelay~.pd b/ceammc/ext/abstractions/gfx.sdelay~.pd index f0824e0648..d63efafdab 100644 --- a/ceammc/ext/abstractions/gfx.sdelay~.pd +++ b/ceammc/ext/abstractions/gfx.sdelay~.pd @@ -2,80 +2,103 @@ #X obj 25 125 fx.sdelay~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.sdelay; -#X obj 425 250 route @bypass @delay @drywet @feedback @interpolation; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.sdelay * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @delay @drywet @feedback @interpolation +default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @drywet @feedback @interpolation default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.sdelay~] unknown message; #X msg 325 75 @delay 1 \, @drywet 1 \, @feedback 0 \, @interpolation 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 141 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.sdelay~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.sdelay~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.sdelay~/slider1 @min 0 @max 6000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 6000 @digits 0; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 6000 @digits 0; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.sdelay~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.sdelay~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @feedback \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @feedback \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label interpolation(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.sdelay~/slider4 @min 1 @max 200; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 1 @max 200 @digits 1; -#X msg 260 352 @interpolation \$1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1 @max 200 @digits 1; +#X msg 260 326 @interpolation \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 5 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 7 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 5 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 6 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 4 4 25 0; -#X coords 0 -1 1 1 200 172 2 2 200; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 6 4 33 0; +#X coords 0 -1 1 1 200 146 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.secho~.pd b/ceammc/ext/abstractions/gfx.secho~.pd index 6f481ff8e0..defaac29b6 100644 --- a/ceammc/ext/abstractions/gfx.secho~.pd +++ b/ceammc/ext/abstractions/gfx.secho~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.secho~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.secho; -#X obj 425 250 route @bypass @delay @drywet @feedback; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.secho * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @delay @drywet @feedback default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @delay @drywet @feedback default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.secho~] unknown message; #X msg 325 75 @delay 500 \, @drywet 1 \, @feedback 0.3 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.secho~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.secho~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.secho~/slider1 @min 10 @max 10000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 10 @max 10000 @digits 0; -#X msg 260 256 @delay \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 10 @max 10000 @digits 0; +#X msg 260 236 @delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.secho~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label feedback: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label feedback: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.secho~/slider3 @min 0 @max 0.99; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; -#X msg 260 320 @feedback \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 0.99 @digits 4; +#X msg 260 296 @feedback \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 21 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.tapiir~.pd b/ceammc/ext/abstractions/gfx.tapiir~.pd index 9c809d9d8e..26f7799c47 100644 --- a/ceammc/ext/abstractions/gfx.tapiir~.pd +++ b/ceammc/ext/abstractions/gfx.tapiir~.pd @@ -3,7 +3,9 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.tapiir; +#X obj 525 125 route fx.tapiir * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; #X obj 525 250 route @tap0.delay @tap0.fb0 @tap0.fb1 @tap0.fb2 @tap0.fb3 @tap0.fb4 @tap0.fb5 @tap0.gain @tap0.in0 @tap0.in1 @tap1.delay @tap1.fb0 @tap1.fb1 @tap1.fb2 @tap1.fb3 @tap1.fb4 @@ -16,1037 +18,1058 @@ @tap5.fb3 @tap5.fb4 @tap5.fb5 @tap5.gain @tap5.in0 @tap5.in1 @out0.gain @out0.in0 @out0.in1 @out0.tap0 @out0.tap1 @out0.tap2 @out0.tap3 @out0.tap4 @out0.tap5 @out1.gain @out1.in0 @out1.in1 -@out1.tap0 @out1.tap1 @out1.tap2 @out1.tap3 @out1.tap4 @out1.tap5; -#X obj 775 350 print unknown property; +@out1.tap0 @out1.tap1 @out1.tap2 @out1.tap3 @out1.tap4 @out1.tap5 +default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @tap0.delay @tap0.fb0 @tap0.fb1 @tap0.fb2 @tap0.fb3 @tap0.fb4 @tap0.fb5 @tap0.gain @tap0.in0 @tap0.in1 @tap1.delay @tap1.fb0 @tap1.fb1 @tap1.fb2 @tap1.fb3 @tap1.fb4 @tap1.fb5 @tap1.gain @tap1.in0 @tap1.in1 @tap2.delay @tap2.fb0 @tap2.fb1 @tap2.fb2 @tap2.fb3 @tap2.fb4 @tap2.fb5 @tap2.gain @tap2.in0 @tap2.in1 @tap3.delay @tap3.fb0 @tap3.fb1 @tap3.fb2 @tap3.fb3 @tap3.fb4 @tap3.fb5 @tap3.gain @tap3.in0 @tap3.in1 @tap4.delay @tap4.fb0 @tap4.fb1 @tap4.fb2 @tap4.fb3 @tap4.fb4 @tap4.fb5 @tap4.gain @tap4.in0 @tap4.in1 @tap5.delay @tap5.fb0 @tap5.fb1 @tap5.fb2 @tap5.fb3 @tap5.fb4 @tap5.fb5 @tap5.gain @tap5.in0 @tap5.in1 @out0.gain @out0.in0 @out0.in1 @out0.tap0 @out0.tap1 @out0.tap2 @out0.tap3 @out0.tap4 @out0.tap5 @out1.gain @out1.in0 @out1.in1 @out1.tap0 @out1.tap1 @out1.tap2 @out1.tap3 @out1.tap4 @out1.tap5 default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.tapiir~] unknown message; #X msg 425 75 @tap0.delay 0 \, @tap0.fb0 0 \, @tap0.fb1 0 \, @tap0.fb2 0 \, @tap0.fb3 0 \, @tap0.fb4 0 \, @tap0.fb5 0 \, @tap0.gain 0 \, @tap0.in0 1 \, @tap0.in1 1 \, @tap1.delay 0 \, @tap1.fb0 0 \, @tap1.fb1 0 \, @tap1.fb2 0 \, @tap1.fb3 0 \, @tap1.fb4 0 \, @tap1.fb5 0 \, @tap1.gain 0 \, @tap1.in0 1 \, @tap1.in1 1 \, @tap2.delay 0 \, @tap2.fb0 0 \, @tap2.fb1 0 \, @tap2.fb2 0 \, @tap2.fb3 0 \, @tap2.fb4 0 \, @tap2.fb5 0 \, @tap2.gain 0 \, @tap2.in0 1 \, @tap2.in1 1 \, @tap3.delay 0 \, @tap3.fb0 0 \, @tap3.fb1 0 \, @tap3.fb2 0 \, @tap3.fb3 0 \, @tap3.fb4 0 \, @tap3.fb5 0 \, @tap3.gain 0 \, @tap3.in0 1 \, @tap3.in1 1 \, @tap4.delay 0 \, @tap4.fb0 0 \, @tap4.fb1 0 \, @tap4.fb2 0 \, @tap4.fb3 0 \, @tap4.fb4 0 \, @tap4.fb5 0 \, @tap4.gain 0 \, @tap4.in0 1 \, @tap4.in1 1 \, @tap5.delay 0 \, @tap5.fb0 0 \, @tap5.fb1 0 \, @tap5.fb2 0 \, @tap5.fb3 0 \, @tap5.fb4 0 \, @tap5.fb5 0 \, @tap5.gain 0 \, @tap5.in0 1 \, @tap5.in1 1 \, @out0.gain 0 \, @out0.in0 0 \, @out0.in1 0 \, @out0.tap0 0 \, @out0.tap1 0 \, @out0.tap2 0 \, @out0.tap3 0 \, @out0.tap4 0 \, @out0.tap5 0 \, @out1.gain 0 \, @out1.in0 0 \, @out1.in1 0 \, @out1.tap0 0 \, @out1.tap1 0 \, @out1.tap2 0 \, @out1.tap3 0 \, @out1.tap4 0 \, @out1.tap5 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 2361 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.tapiir~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label tap0.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider0 @min 0 @max 5000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 238 @tap0.delay \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label tap0.fb0: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 236 @tap0.delay \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label tap0.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @tap0.fb0 \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label tap0.fb1: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @tap0.fb0 \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label tap0.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider2 @min 0 @max 1; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 302 @tap0.fb1 \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label tap0.fb2: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @tap0.fb1 \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label tap0.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @tap0.fb2 \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label tap0.fb3: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @tap0.fb2 \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label tap0.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider4 @min 0 @max 1; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 366 @tap0.fb3 \$1; -#X obj 12 398 ui.slider @size 125 12 @active_scale 1 @label tap0.fb4: +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 356 @tap0.fb3 \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label tap0.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider5 @min 0 @max 1; -#X obj 190 398 sync; -#X obj 145 398 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 398 @tap0.fb4 \$1; -#X obj 12 430 ui.slider @size 125 12 @active_scale 1 @label tap0.fb5: +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @tap0.fb4 \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label tap0.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider6 @min 0 @max 1; -#X obj 190 430 sync; -#X obj 145 430 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 430 @tap0.fb5 \$1; -#X obj 12 462 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 416 @tap0.fb5 \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label tap0.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider7 @min -60 @max 0; -#X obj 190 462 sync; -#X obj 145 462 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 462 @tap0.gain \$1; -#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label tap0.in0: +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 446 @tap0.gain \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label tap0.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider8 @min 0 @max 1; -#X obj 190 494 sync; -#X obj 145 494 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 494 @tap0.in0 \$1; -#X obj 12 526 ui.slider @size 125 12 @active_scale 1 @label tap0.in1: +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 476 @tap0.in0 \$1; +#X obj 12 506 ui.slider @size 125 12 @active_scale 1 @label tap0.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider9 @min 0 @max 1; -#X obj 190 526 sync; -#X obj 145 526 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 526 @tap0.in1 \$1; -#X obj 12 558 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 506 sync; +#X obj 145 506 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 506 @tap0.in1 \$1; +#X obj 12 536 ui.slider @size 125 12 @active_scale 1 @label tap1.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider10 @min 0 @max 5000; -#X obj 190 558 sync; -#X obj 145 558 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 558 @tap1.delay \$1; -#X obj 12 590 ui.slider @size 125 12 @active_scale 1 @label tap1.fb0: +#X obj 215 536 sync; +#X obj 145 536 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 536 @tap1.delay \$1; +#X obj 12 566 ui.slider @size 125 12 @active_scale 1 @label tap1.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider11 @min 0 @max 1; -#X obj 190 590 sync; -#X obj 145 590 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 590 @tap1.fb0 \$1; -#X obj 12 622 ui.slider @size 125 12 @active_scale 1 @label tap1.fb1: +#X obj 215 566 sync; +#X obj 145 566 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 566 @tap1.fb0 \$1; +#X obj 12 596 ui.slider @size 125 12 @active_scale 1 @label tap1.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider12 @min 0 @max 1; -#X obj 190 622 sync; -#X obj 145 622 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 622 @tap1.fb1 \$1; -#X obj 12 654 ui.slider @size 125 12 @active_scale 1 @label tap1.fb2: +#X obj 215 596 sync; +#X obj 145 596 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 596 @tap1.fb1 \$1; +#X obj 12 626 ui.slider @size 125 12 @active_scale 1 @label tap1.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider13 @min 0 @max 1; -#X obj 190 654 sync; -#X obj 145 654 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 654 @tap1.fb2 \$1; -#X obj 12 686 ui.slider @size 125 12 @active_scale 1 @label tap1.fb3: +#X obj 215 626 sync; +#X obj 145 626 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 626 @tap1.fb2 \$1; +#X obj 12 656 ui.slider @size 125 12 @active_scale 1 @label tap1.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider14 @min 0 @max 1; -#X obj 190 686 sync; -#X obj 145 686 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 686 @tap1.fb3 \$1; -#X obj 12 718 ui.slider @size 125 12 @active_scale 1 @label tap1.fb4: +#X obj 215 656 sync; +#X obj 145 656 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 656 @tap1.fb3 \$1; +#X obj 12 686 ui.slider @size 125 12 @active_scale 1 @label tap1.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider15 @min 0 @max 1; -#X obj 190 718 sync; -#X obj 145 718 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 718 @tap1.fb4 \$1; -#X obj 12 750 ui.slider @size 125 12 @active_scale 1 @label tap1.fb5: +#X obj 215 686 sync; +#X obj 145 686 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 686 @tap1.fb4 \$1; +#X obj 12 716 ui.slider @size 125 12 @active_scale 1 @label tap1.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider16 @min 0 @max 1; -#X obj 190 750 sync; -#X obj 145 750 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 750 @tap1.fb5 \$1; -#X obj 12 782 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 716 sync; +#X obj 145 716 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 716 @tap1.fb5 \$1; +#X obj 12 746 ui.slider @size 125 12 @active_scale 1 @label tap1.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider17 @min -60 @max 0; -#X obj 190 782 sync; -#X obj 145 782 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 782 @tap1.gain \$1; -#X obj 12 814 ui.slider @size 125 12 @active_scale 1 @label tap1.in0: +#X obj 215 746 sync; +#X obj 145 746 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 746 @tap1.gain \$1; +#X obj 12 776 ui.slider @size 125 12 @active_scale 1 @label tap1.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider18 @min 0 @max 1; -#X obj 190 814 sync; -#X obj 145 814 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 814 @tap1.in0 \$1; -#X obj 12 846 ui.slider @size 125 12 @active_scale 1 @label tap1.in1: +#X obj 215 776 sync; +#X obj 145 776 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 776 @tap1.in0 \$1; +#X obj 12 806 ui.slider @size 125 12 @active_scale 1 @label tap1.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider19 @min 0 @max 1; -#X obj 190 846 sync; -#X obj 145 846 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 846 @tap1.in1 \$1; -#X obj 12 878 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 806 sync; +#X obj 145 806 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 806 @tap1.in1 \$1; +#X obj 12 836 ui.slider @size 125 12 @active_scale 1 @label tap2.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider20 @min 0 @max 5000; -#X obj 190 878 sync; -#X obj 145 878 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 878 @tap2.delay \$1; -#X obj 12 910 ui.slider @size 125 12 @active_scale 1 @label tap2.fb0: +#X obj 215 836 sync; +#X obj 145 836 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 836 @tap2.delay \$1; +#X obj 12 866 ui.slider @size 125 12 @active_scale 1 @label tap2.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider21 @min 0 @max 1; -#X obj 190 910 sync; -#X obj 145 910 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 910 @tap2.fb0 \$1; -#X obj 12 942 ui.slider @size 125 12 @active_scale 1 @label tap2.fb1: +#X obj 215 866 sync; +#X obj 145 866 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 866 @tap2.fb0 \$1; +#X obj 12 896 ui.slider @size 125 12 @active_scale 1 @label tap2.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider22 @min 0 @max 1; -#X obj 190 942 sync; -#X obj 145 942 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 942 @tap2.fb1 \$1; -#X obj 12 974 ui.slider @size 125 12 @active_scale 1 @label tap2.fb2: +#X obj 215 896 sync; +#X obj 145 896 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 896 @tap2.fb1 \$1; +#X obj 12 926 ui.slider @size 125 12 @active_scale 1 @label tap2.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider23 @min 0 @max 1; -#X obj 190 974 sync; -#X obj 145 974 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 974 @tap2.fb2 \$1; -#X obj 12 1006 ui.slider @size 125 12 @active_scale 1 @label tap2.fb3: +#X obj 215 926 sync; +#X obj 145 926 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 926 @tap2.fb2 \$1; +#X obj 12 956 ui.slider @size 125 12 @active_scale 1 @label tap2.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider24 @min 0 @max 1; -#X obj 190 1006 sync; -#X obj 145 1006 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1006 @tap2.fb3 \$1; -#X obj 12 1038 ui.slider @size 125 12 @active_scale 1 @label tap2.fb4: +#X obj 215 956 sync; +#X obj 145 956 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 956 @tap2.fb3 \$1; +#X obj 12 986 ui.slider @size 125 12 @active_scale 1 @label tap2.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider25 @min 0 @max 1; -#X obj 190 1038 sync; -#X obj 145 1038 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1038 @tap2.fb4 \$1; -#X obj 12 1070 ui.slider @size 125 12 @active_scale 1 @label tap2.fb5: +#X obj 215 986 sync; +#X obj 145 986 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 986 @tap2.fb4 \$1; +#X obj 12 1016 ui.slider @size 125 12 @active_scale 1 @label tap2.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider26 @min 0 @max 1; -#X obj 190 1070 sync; -#X obj 145 1070 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1070 @tap2.fb5 \$1; -#X obj 12 1102 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1016 sync; +#X obj 145 1016 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1016 @tap2.fb5 \$1; +#X obj 12 1046 ui.slider @size 125 12 @active_scale 1 @label tap2.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider27 @min -60 @max 0; -#X obj 190 1102 sync; -#X obj 145 1102 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 1102 @tap2.gain \$1; -#X obj 12 1134 ui.slider @size 125 12 @active_scale 1 @label tap2.in0: +#X obj 215 1046 sync; +#X obj 145 1046 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 1046 @tap2.gain \$1; +#X obj 12 1076 ui.slider @size 125 12 @active_scale 1 @label tap2.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider28 @min 0 @max 1; -#X obj 190 1134 sync; -#X obj 145 1134 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1134 @tap2.in0 \$1; -#X obj 12 1166 ui.slider @size 125 12 @active_scale 1 @label tap2.in1: +#X obj 215 1076 sync; +#X obj 145 1076 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1076 @tap2.in0 \$1; +#X obj 12 1106 ui.slider @size 125 12 @active_scale 1 @label tap2.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider29 @min 0 @max 1; -#X obj 190 1166 sync; -#X obj 145 1166 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1166 @tap2.in1 \$1; -#X obj 12 1198 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1106 sync; +#X obj 145 1106 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1106 @tap2.in1 \$1; +#X obj 12 1136 ui.slider @size 125 12 @active_scale 1 @label tap3.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider30 @min 0 @max 5000; -#X obj 190 1198 sync; -#X obj 145 1198 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 1198 @tap3.delay \$1; -#X obj 12 1230 ui.slider @size 125 12 @active_scale 1 @label tap3.fb0: +#X obj 215 1136 sync; +#X obj 145 1136 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 1136 @tap3.delay \$1; +#X obj 12 1166 ui.slider @size 125 12 @active_scale 1 @label tap3.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider31 @min 0 @max 1; -#X obj 190 1230 sync; -#X obj 145 1230 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1230 @tap3.fb0 \$1; -#X obj 12 1262 ui.slider @size 125 12 @active_scale 1 @label tap3.fb1: +#X obj 215 1166 sync; +#X obj 145 1166 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1166 @tap3.fb0 \$1; +#X obj 12 1196 ui.slider @size 125 12 @active_scale 1 @label tap3.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider32 @min 0 @max 1; -#X obj 190 1262 sync; -#X obj 145 1262 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1262 @tap3.fb1 \$1; -#X obj 12 1294 ui.slider @size 125 12 @active_scale 1 @label tap3.fb2: +#X obj 215 1196 sync; +#X obj 145 1196 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1196 @tap3.fb1 \$1; +#X obj 12 1226 ui.slider @size 125 12 @active_scale 1 @label tap3.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider33 @min 0 @max 1; -#X obj 190 1294 sync; -#X obj 145 1294 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1294 @tap3.fb2 \$1; -#X obj 12 1326 ui.slider @size 125 12 @active_scale 1 @label tap3.fb3: +#X obj 215 1226 sync; +#X obj 145 1226 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1226 @tap3.fb2 \$1; +#X obj 12 1256 ui.slider @size 125 12 @active_scale 1 @label tap3.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider34 @min 0 @max 1; -#X obj 190 1326 sync; -#X obj 145 1326 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1326 @tap3.fb3 \$1; -#X obj 12 1358 ui.slider @size 125 12 @active_scale 1 @label tap3.fb4: +#X obj 215 1256 sync; +#X obj 145 1256 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1256 @tap3.fb3 \$1; +#X obj 12 1286 ui.slider @size 125 12 @active_scale 1 @label tap3.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider35 @min 0 @max 1; -#X obj 190 1358 sync; -#X obj 145 1358 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1358 @tap3.fb4 \$1; -#X obj 12 1390 ui.slider @size 125 12 @active_scale 1 @label tap3.fb5: +#X obj 215 1286 sync; +#X obj 145 1286 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1286 @tap3.fb4 \$1; +#X obj 12 1316 ui.slider @size 125 12 @active_scale 1 @label tap3.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider36 @min 0 @max 1; -#X obj 190 1390 sync; -#X obj 145 1390 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1390 @tap3.fb5 \$1; -#X obj 12 1422 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1316 sync; +#X obj 145 1316 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1316 @tap3.fb5 \$1; +#X obj 12 1346 ui.slider @size 125 12 @active_scale 1 @label tap3.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider37 @min -60 @max 0; -#X obj 190 1422 sync; -#X obj 145 1422 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 1422 @tap3.gain \$1; -#X obj 12 1454 ui.slider @size 125 12 @active_scale 1 @label tap3.in0: +#X obj 215 1346 sync; +#X obj 145 1346 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 1346 @tap3.gain \$1; +#X obj 12 1376 ui.slider @size 125 12 @active_scale 1 @label tap3.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider38 @min 0 @max 1; -#X obj 190 1454 sync; -#X obj 145 1454 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1454 @tap3.in0 \$1; -#X obj 12 1486 ui.slider @size 125 12 @active_scale 1 @label tap3.in1: +#X obj 215 1376 sync; +#X obj 145 1376 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1376 @tap3.in0 \$1; +#X obj 12 1406 ui.slider @size 125 12 @active_scale 1 @label tap3.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider39 @min 0 @max 1; -#X obj 190 1486 sync; -#X obj 145 1486 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1486 @tap3.in1 \$1; -#X obj 12 1518 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1406 sync; +#X obj 145 1406 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1406 @tap3.in1 \$1; +#X obj 12 1436 ui.slider @size 125 12 @active_scale 1 @label tap4.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider40 @min 0 @max 5000; -#X obj 190 1518 sync; -#X obj 145 1518 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 1518 @tap4.delay \$1; -#X obj 12 1550 ui.slider @size 125 12 @active_scale 1 @label tap4.fb0: +#X obj 215 1436 sync; +#X obj 145 1436 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 1436 @tap4.delay \$1; +#X obj 12 1466 ui.slider @size 125 12 @active_scale 1 @label tap4.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider41 @min 0 @max 1; -#X obj 190 1550 sync; -#X obj 145 1550 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1550 @tap4.fb0 \$1; -#X obj 12 1582 ui.slider @size 125 12 @active_scale 1 @label tap4.fb1: +#X obj 215 1466 sync; +#X obj 145 1466 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1466 @tap4.fb0 \$1; +#X obj 12 1496 ui.slider @size 125 12 @active_scale 1 @label tap4.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider42 @min 0 @max 1; -#X obj 190 1582 sync; -#X obj 145 1582 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1582 @tap4.fb1 \$1; -#X obj 12 1614 ui.slider @size 125 12 @active_scale 1 @label tap4.fb2: +#X obj 215 1496 sync; +#X obj 145 1496 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1496 @tap4.fb1 \$1; +#X obj 12 1526 ui.slider @size 125 12 @active_scale 1 @label tap4.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider43 @min 0 @max 1; -#X obj 190 1614 sync; -#X obj 145 1614 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1614 @tap4.fb2 \$1; -#X obj 12 1646 ui.slider @size 125 12 @active_scale 1 @label tap4.fb3: +#X obj 215 1526 sync; +#X obj 145 1526 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1526 @tap4.fb2 \$1; +#X obj 12 1556 ui.slider @size 125 12 @active_scale 1 @label tap4.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider44 @min 0 @max 1; -#X obj 190 1646 sync; -#X obj 145 1646 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1646 @tap4.fb3 \$1; -#X obj 12 1678 ui.slider @size 125 12 @active_scale 1 @label tap4.fb4: +#X obj 215 1556 sync; +#X obj 145 1556 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1556 @tap4.fb3 \$1; +#X obj 12 1586 ui.slider @size 125 12 @active_scale 1 @label tap4.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider45 @min 0 @max 1; -#X obj 190 1678 sync; -#X obj 145 1678 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1678 @tap4.fb4 \$1; -#X obj 12 1710 ui.slider @size 125 12 @active_scale 1 @label tap4.fb5: +#X obj 215 1586 sync; +#X obj 145 1586 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1586 @tap4.fb4 \$1; +#X obj 12 1616 ui.slider @size 125 12 @active_scale 1 @label tap4.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider46 @min 0 @max 1; -#X obj 190 1710 sync; -#X obj 145 1710 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1710 @tap4.fb5 \$1; -#X obj 12 1742 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1616 sync; +#X obj 145 1616 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1616 @tap4.fb5 \$1; +#X obj 12 1646 ui.slider @size 125 12 @active_scale 1 @label tap4.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider47 @min -60 @max 0; -#X obj 190 1742 sync; -#X obj 145 1742 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 1742 @tap4.gain \$1; -#X obj 12 1774 ui.slider @size 125 12 @active_scale 1 @label tap4.in0: +#X obj 215 1646 sync; +#X obj 145 1646 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 1646 @tap4.gain \$1; +#X obj 12 1676 ui.slider @size 125 12 @active_scale 1 @label tap4.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider48 @min 0 @max 1; -#X obj 190 1774 sync; -#X obj 145 1774 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1774 @tap4.in0 \$1; -#X obj 12 1806 ui.slider @size 125 12 @active_scale 1 @label tap4.in1: +#X obj 215 1676 sync; +#X obj 145 1676 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1676 @tap4.in0 \$1; +#X obj 12 1706 ui.slider @size 125 12 @active_scale 1 @label tap4.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider49 @min 0 @max 1; -#X obj 190 1806 sync; -#X obj 145 1806 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1806 @tap4.in1 \$1; -#X obj 12 1838 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1706 sync; +#X obj 145 1706 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1706 @tap4.in1 \$1; +#X obj 12 1736 ui.slider @size 125 12 @active_scale 1 @label tap5.delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider50 @min 0 @max 5000; -#X obj 190 1838 sync; -#X obj 145 1838 ui.number @size 50 12 @min 0 @max 5000 @digits 0; -#X msg 260 1838 @tap5.delay \$1; -#X obj 12 1870 ui.slider @size 125 12 @active_scale 1 @label tap5.fb0: +#X obj 215 1736 sync; +#X obj 145 1736 ui.number @size 50 12 @min 0 @max 5000 @digits 0; +#X msg 260 1736 @tap5.delay \$1; +#X obj 12 1766 ui.slider @size 125 12 @active_scale 1 @label tap5.fb0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider51 @min 0 @max 1; -#X obj 190 1870 sync; -#X obj 145 1870 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1870 @tap5.fb0 \$1; -#X obj 12 1902 ui.slider @size 125 12 @active_scale 1 @label tap5.fb1: +#X obj 215 1766 sync; +#X obj 145 1766 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1766 @tap5.fb0 \$1; +#X obj 12 1796 ui.slider @size 125 12 @active_scale 1 @label tap5.fb1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider52 @min 0 @max 1; -#X obj 190 1902 sync; -#X obj 145 1902 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1902 @tap5.fb1 \$1; -#X obj 12 1934 ui.slider @size 125 12 @active_scale 1 @label tap5.fb2: +#X obj 215 1796 sync; +#X obj 145 1796 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1796 @tap5.fb1 \$1; +#X obj 12 1826 ui.slider @size 125 12 @active_scale 1 @label tap5.fb2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider53 @min 0 @max 1; -#X obj 190 1934 sync; -#X obj 145 1934 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1934 @tap5.fb2 \$1; -#X obj 12 1966 ui.slider @size 125 12 @active_scale 1 @label tap5.fb3: +#X obj 215 1826 sync; +#X obj 145 1826 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1826 @tap5.fb2 \$1; +#X obj 12 1856 ui.slider @size 125 12 @active_scale 1 @label tap5.fb3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider54 @min 0 @max 1; -#X obj 190 1966 sync; -#X obj 145 1966 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1966 @tap5.fb3 \$1; -#X obj 12 1998 ui.slider @size 125 12 @active_scale 1 @label tap5.fb4: +#X obj 215 1856 sync; +#X obj 145 1856 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1856 @tap5.fb3 \$1; +#X obj 12 1886 ui.slider @size 125 12 @active_scale 1 @label tap5.fb4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider55 @min 0 @max 1; -#X obj 190 1998 sync; -#X obj 145 1998 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 1998 @tap5.fb4 \$1; -#X obj 12 2030 ui.slider @size 125 12 @active_scale 1 @label tap5.fb5: +#X obj 215 1886 sync; +#X obj 145 1886 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1886 @tap5.fb4 \$1; +#X obj 12 1916 ui.slider @size 125 12 @active_scale 1 @label tap5.fb5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider56 @min 0 @max 1; -#X obj 190 2030 sync; -#X obj 145 2030 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2030 @tap5.fb5 \$1; -#X obj 12 2062 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 1916 sync; +#X obj 145 1916 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1916 @tap5.fb5 \$1; +#X obj 12 1946 ui.slider @size 125 12 @active_scale 1 @label tap5.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider57 @min -60 @max 0; -#X obj 190 2062 sync; -#X obj 145 2062 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 2062 @tap5.gain \$1; -#X obj 12 2094 ui.slider @size 125 12 @active_scale 1 @label tap5.in0: +#X obj 215 1946 sync; +#X obj 145 1946 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 1946 @tap5.gain \$1; +#X obj 12 1976 ui.slider @size 125 12 @active_scale 1 @label tap5.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider58 @min 0 @max 1; -#X obj 190 2094 sync; -#X obj 145 2094 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2094 @tap5.in0 \$1; -#X obj 12 2126 ui.slider @size 125 12 @active_scale 1 @label tap5.in1: +#X obj 215 1976 sync; +#X obj 145 1976 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 1976 @tap5.in0 \$1; +#X obj 12 2006 ui.slider @size 125 12 @active_scale 1 @label tap5.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider59 @min 0 @max 1; -#X obj 190 2126 sync; -#X obj 145 2126 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2126 @tap5.in1 \$1; -#X obj 12 2158 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2006 sync; +#X obj 145 2006 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2006 @tap5.in1 \$1; +#X obj 12 2036 ui.slider @size 125 12 @active_scale 1 @label out0.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider60 @min -60 @max 0; -#X obj 190 2158 sync; -#X obj 145 2158 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 2158 @out0.gain \$1; -#X obj 12 2190 ui.slider @size 125 12 @active_scale 1 @label out0.in0: +#X obj 215 2036 sync; +#X obj 145 2036 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 2036 @out0.gain \$1; +#X obj 12 2066 ui.slider @size 125 12 @active_scale 1 @label out0.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider61 @min 0 @max 1; -#X obj 190 2190 sync; -#X obj 145 2190 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2190 @out0.in0 \$1; -#X obj 12 2222 ui.slider @size 125 12 @active_scale 1 @label out0.in1: +#X obj 215 2066 sync; +#X obj 145 2066 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2066 @out0.in0 \$1; +#X obj 12 2096 ui.slider @size 125 12 @active_scale 1 @label out0.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider62 @min 0 @max 1; -#X obj 190 2222 sync; -#X obj 145 2222 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2222 @out0.in1 \$1; -#X obj 12 2254 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2096 sync; +#X obj 145 2096 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2096 @out0.in1 \$1; +#X obj 12 2126 ui.slider @size 125 12 @active_scale 1 @label out0.tap0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider63 @min 0 @max 1; -#X obj 190 2254 sync; -#X obj 145 2254 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2254 @out0.tap0 \$1; -#X obj 12 2286 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2126 sync; +#X obj 145 2126 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2126 @out0.tap0 \$1; +#X obj 12 2156 ui.slider @size 125 12 @active_scale 1 @label out0.tap1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider64 @min 0 @max 1; -#X obj 190 2286 sync; -#X obj 145 2286 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2286 @out0.tap1 \$1; -#X obj 12 2318 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2156 sync; +#X obj 145 2156 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2156 @out0.tap1 \$1; +#X obj 12 2186 ui.slider @size 125 12 @active_scale 1 @label out0.tap2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider65 @min 0 @max 1; -#X obj 190 2318 sync; -#X obj 145 2318 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2318 @out0.tap2 \$1; -#X obj 12 2350 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2186 sync; +#X obj 145 2186 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2186 @out0.tap2 \$1; +#X obj 12 2216 ui.slider @size 125 12 @active_scale 1 @label out0.tap3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider66 @min 0 @max 1; -#X obj 190 2350 sync; -#X obj 145 2350 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2350 @out0.tap3 \$1; -#X obj 12 2382 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2216 sync; +#X obj 145 2216 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2216 @out0.tap3 \$1; +#X obj 12 2246 ui.slider @size 125 12 @active_scale 1 @label out0.tap4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider67 @min 0 @max 1; -#X obj 190 2382 sync; -#X obj 145 2382 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2382 @out0.tap4 \$1; -#X obj 12 2414 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2246 sync; +#X obj 145 2246 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2246 @out0.tap4 \$1; +#X obj 12 2276 ui.slider @size 125 12 @active_scale 1 @label out0.tap5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider68 @min 0 @max 1; -#X obj 190 2414 sync; -#X obj 145 2414 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2414 @out0.tap5 \$1; -#X obj 12 2446 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2276 sync; +#X obj 145 2276 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2276 @out0.tap5 \$1; +#X obj 12 2306 ui.slider @size 125 12 @active_scale 1 @label out1.gain(db): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider69 @min -60 @max 0; -#X obj 190 2446 sync; -#X obj 145 2446 ui.number @size 50 12 @min -60 @max 0 @digits 2; -#X msg 260 2446 @out1.gain \$1; -#X obj 12 2478 ui.slider @size 125 12 @active_scale 1 @label out1.in0: +#X obj 215 2306 sync; +#X obj 145 2306 ui.number @size 50 12 @min -60 @max 0 @digits 2; +#X msg 260 2306 @out1.gain \$1; +#X obj 12 2336 ui.slider @size 125 12 @active_scale 1 @label out1.in0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider70 @min 0 @max 1; -#X obj 190 2478 sync; -#X obj 145 2478 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2478 @out1.in0 \$1; -#X obj 12 2510 ui.slider @size 125 12 @active_scale 1 @label out1.in1: +#X obj 215 2336 sync; +#X obj 145 2336 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2336 @out1.in0 \$1; +#X obj 12 2366 ui.slider @size 125 12 @active_scale 1 @label out1.in1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider71 @min 0 @max 1; -#X obj 190 2510 sync; -#X obj 145 2510 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2510 @out1.in1 \$1; -#X obj 12 2542 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2366 sync; +#X obj 145 2366 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2366 @out1.in1 \$1; +#X obj 12 2396 ui.slider @size 125 12 @active_scale 1 @label out1.tap0: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider72 @min 0 @max 1; -#X obj 190 2542 sync; -#X obj 145 2542 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2542 @out1.tap0 \$1; -#X obj 12 2574 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2396 sync; +#X obj 145 2396 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2396 @out1.tap0 \$1; +#X obj 12 2426 ui.slider @size 125 12 @active_scale 1 @label out1.tap1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider73 @min 0 @max 1; -#X obj 190 2574 sync; -#X obj 145 2574 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2574 @out1.tap1 \$1; -#X obj 12 2606 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2426 sync; +#X obj 145 2426 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2426 @out1.tap1 \$1; +#X obj 12 2456 ui.slider @size 125 12 @active_scale 1 @label out1.tap2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider74 @min 0 @max 1; -#X obj 190 2606 sync; -#X obj 145 2606 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2606 @out1.tap2 \$1; -#X obj 12 2638 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2456 sync; +#X obj 145 2456 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2456 @out1.tap2 \$1; +#X obj 12 2486 ui.slider @size 125 12 @active_scale 1 @label out1.tap3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider75 @min 0 @max 1; -#X obj 190 2638 sync; -#X obj 145 2638 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2638 @out1.tap3 \$1; -#X obj 12 2670 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2486 sync; +#X obj 145 2486 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2486 @out1.tap3 \$1; +#X obj 12 2516 ui.slider @size 125 12 @active_scale 1 @label out1.tap4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider76 @min 0 @max 1; -#X obj 190 2670 sync; -#X obj 145 2670 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2670 @out1.tap4 \$1; -#X obj 12 2702 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 2516 sync; +#X obj 145 2516 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2516 @out1.tap4 \$1; +#X obj 12 2546 ui.slider @size 125 12 @active_scale 1 @label out1.tap5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.tapiir~/slider77 @min 0 @max 1; -#X obj 190 2702 sync; -#X obj 145 2702 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 2702 @out1.tap5 \$1; +#X obj 215 2546 sync; +#X obj 145 2546 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 2546 @out1.tap5 \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 78 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 5 0 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; -#X connect 20 0 0 0; -#X connect 5 1 17 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 80 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 78 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 79 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 5 2 21 0; +#X connect 7 0 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 5 3 25 0; +#X connect 7 1 25 0; #X connect 29 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X connect 30 1 31 0; #X connect 29 0 32 0; #X connect 32 0 0 0; -#X connect 5 4 29 0; +#X connect 7 2 29 0; #X connect 33 0 34 0; #X connect 34 0 33 0; #X connect 35 0 34 1; #X connect 34 1 35 0; #X connect 33 0 36 0; #X connect 36 0 0 0; -#X connect 5 5 33 0; +#X connect 7 3 33 0; #X connect 37 0 38 0; #X connect 38 0 37 0; #X connect 39 0 38 1; #X connect 38 1 39 0; #X connect 37 0 40 0; #X connect 40 0 0 0; -#X connect 5 6 37 0; +#X connect 7 4 37 0; #X connect 41 0 42 0; #X connect 42 0 41 0; #X connect 43 0 42 1; #X connect 42 1 43 0; #X connect 41 0 44 0; #X connect 44 0 0 0; -#X connect 5 7 41 0; +#X connect 7 5 41 0; #X connect 45 0 46 0; #X connect 46 0 45 0; #X connect 47 0 46 1; #X connect 46 1 47 0; #X connect 45 0 48 0; #X connect 48 0 0 0; -#X connect 5 8 45 0; +#X connect 7 6 45 0; #X connect 49 0 50 0; #X connect 50 0 49 0; #X connect 51 0 50 1; #X connect 50 1 51 0; #X connect 49 0 52 0; #X connect 52 0 0 0; -#X connect 5 9 49 0; +#X connect 7 7 49 0; #X connect 53 0 54 0; #X connect 54 0 53 0; #X connect 55 0 54 1; #X connect 54 1 55 0; #X connect 53 0 56 0; #X connect 56 0 0 0; -#X connect 5 10 53 0; +#X connect 7 8 53 0; #X connect 57 0 58 0; #X connect 58 0 57 0; #X connect 59 0 58 1; #X connect 58 1 59 0; #X connect 57 0 60 0; #X connect 60 0 0 0; -#X connect 5 11 57 0; +#X connect 7 9 57 0; #X connect 61 0 62 0; #X connect 62 0 61 0; #X connect 63 0 62 1; #X connect 62 1 63 0; #X connect 61 0 64 0; #X connect 64 0 0 0; -#X connect 5 12 61 0; +#X connect 7 10 61 0; #X connect 65 0 66 0; #X connect 66 0 65 0; #X connect 67 0 66 1; #X connect 66 1 67 0; #X connect 65 0 68 0; #X connect 68 0 0 0; -#X connect 5 13 65 0; +#X connect 7 11 65 0; #X connect 69 0 70 0; #X connect 70 0 69 0; #X connect 71 0 70 1; #X connect 70 1 71 0; #X connect 69 0 72 0; #X connect 72 0 0 0; -#X connect 5 14 69 0; +#X connect 7 12 69 0; #X connect 73 0 74 0; #X connect 74 0 73 0; #X connect 75 0 74 1; #X connect 74 1 75 0; #X connect 73 0 76 0; #X connect 76 0 0 0; -#X connect 5 15 73 0; +#X connect 7 13 73 0; #X connect 77 0 78 0; #X connect 78 0 77 0; #X connect 79 0 78 1; #X connect 78 1 79 0; #X connect 77 0 80 0; #X connect 80 0 0 0; -#X connect 5 16 77 0; +#X connect 7 14 77 0; #X connect 81 0 82 0; #X connect 82 0 81 0; #X connect 83 0 82 1; #X connect 82 1 83 0; #X connect 81 0 84 0; #X connect 84 0 0 0; -#X connect 5 17 81 0; +#X connect 7 15 81 0; #X connect 85 0 86 0; #X connect 86 0 85 0; #X connect 87 0 86 1; #X connect 86 1 87 0; #X connect 85 0 88 0; #X connect 88 0 0 0; -#X connect 5 18 85 0; +#X connect 7 16 85 0; #X connect 89 0 90 0; #X connect 90 0 89 0; #X connect 91 0 90 1; #X connect 90 1 91 0; #X connect 89 0 92 0; #X connect 92 0 0 0; -#X connect 5 19 89 0; +#X connect 7 17 89 0; #X connect 93 0 94 0; #X connect 94 0 93 0; #X connect 95 0 94 1; #X connect 94 1 95 0; #X connect 93 0 96 0; #X connect 96 0 0 0; -#X connect 5 20 93 0; +#X connect 7 18 93 0; #X connect 97 0 98 0; #X connect 98 0 97 0; #X connect 99 0 98 1; #X connect 98 1 99 0; #X connect 97 0 100 0; #X connect 100 0 0 0; -#X connect 5 21 97 0; +#X connect 7 19 97 0; #X connect 101 0 102 0; #X connect 102 0 101 0; #X connect 103 0 102 1; #X connect 102 1 103 0; #X connect 101 0 104 0; #X connect 104 0 0 0; -#X connect 5 22 101 0; +#X connect 7 20 101 0; #X connect 105 0 106 0; #X connect 106 0 105 0; #X connect 107 0 106 1; #X connect 106 1 107 0; #X connect 105 0 108 0; #X connect 108 0 0 0; -#X connect 5 23 105 0; +#X connect 7 21 105 0; #X connect 109 0 110 0; #X connect 110 0 109 0; #X connect 111 0 110 1; #X connect 110 1 111 0; #X connect 109 0 112 0; #X connect 112 0 0 0; -#X connect 5 24 109 0; +#X connect 7 22 109 0; #X connect 113 0 114 0; #X connect 114 0 113 0; #X connect 115 0 114 1; #X connect 114 1 115 0; #X connect 113 0 116 0; #X connect 116 0 0 0; -#X connect 5 25 113 0; +#X connect 7 23 113 0; #X connect 117 0 118 0; #X connect 118 0 117 0; #X connect 119 0 118 1; #X connect 118 1 119 0; #X connect 117 0 120 0; #X connect 120 0 0 0; -#X connect 5 26 117 0; +#X connect 7 24 117 0; #X connect 121 0 122 0; #X connect 122 0 121 0; #X connect 123 0 122 1; #X connect 122 1 123 0; #X connect 121 0 124 0; #X connect 124 0 0 0; -#X connect 5 27 121 0; +#X connect 7 25 121 0; #X connect 125 0 126 0; #X connect 126 0 125 0; #X connect 127 0 126 1; #X connect 126 1 127 0; #X connect 125 0 128 0; #X connect 128 0 0 0; -#X connect 5 28 125 0; +#X connect 7 26 125 0; #X connect 129 0 130 0; #X connect 130 0 129 0; #X connect 131 0 130 1; #X connect 130 1 131 0; #X connect 129 0 132 0; #X connect 132 0 0 0; -#X connect 5 29 129 0; +#X connect 7 27 129 0; #X connect 133 0 134 0; #X connect 134 0 133 0; #X connect 135 0 134 1; #X connect 134 1 135 0; #X connect 133 0 136 0; #X connect 136 0 0 0; -#X connect 5 30 133 0; +#X connect 7 28 133 0; #X connect 137 0 138 0; #X connect 138 0 137 0; #X connect 139 0 138 1; #X connect 138 1 139 0; #X connect 137 0 140 0; #X connect 140 0 0 0; -#X connect 5 31 137 0; +#X connect 7 29 137 0; #X connect 141 0 142 0; #X connect 142 0 141 0; #X connect 143 0 142 1; #X connect 142 1 143 0; #X connect 141 0 144 0; #X connect 144 0 0 0; -#X connect 5 32 141 0; +#X connect 7 30 141 0; #X connect 145 0 146 0; #X connect 146 0 145 0; #X connect 147 0 146 1; #X connect 146 1 147 0; #X connect 145 0 148 0; #X connect 148 0 0 0; -#X connect 5 33 145 0; +#X connect 7 31 145 0; #X connect 149 0 150 0; #X connect 150 0 149 0; #X connect 151 0 150 1; #X connect 150 1 151 0; #X connect 149 0 152 0; #X connect 152 0 0 0; -#X connect 5 34 149 0; +#X connect 7 32 149 0; #X connect 153 0 154 0; #X connect 154 0 153 0; #X connect 155 0 154 1; #X connect 154 1 155 0; #X connect 153 0 156 0; #X connect 156 0 0 0; -#X connect 5 35 153 0; +#X connect 7 33 153 0; #X connect 157 0 158 0; #X connect 158 0 157 0; #X connect 159 0 158 1; #X connect 158 1 159 0; #X connect 157 0 160 0; #X connect 160 0 0 0; -#X connect 5 36 157 0; +#X connect 7 34 157 0; #X connect 161 0 162 0; #X connect 162 0 161 0; #X connect 163 0 162 1; #X connect 162 1 163 0; #X connect 161 0 164 0; #X connect 164 0 0 0; -#X connect 5 37 161 0; +#X connect 7 35 161 0; #X connect 165 0 166 0; #X connect 166 0 165 0; #X connect 167 0 166 1; #X connect 166 1 167 0; #X connect 165 0 168 0; #X connect 168 0 0 0; -#X connect 5 38 165 0; +#X connect 7 36 165 0; #X connect 169 0 170 0; #X connect 170 0 169 0; #X connect 171 0 170 1; #X connect 170 1 171 0; #X connect 169 0 172 0; #X connect 172 0 0 0; -#X connect 5 39 169 0; +#X connect 7 37 169 0; #X connect 173 0 174 0; #X connect 174 0 173 0; #X connect 175 0 174 1; #X connect 174 1 175 0; #X connect 173 0 176 0; #X connect 176 0 0 0; -#X connect 5 40 173 0; +#X connect 7 38 173 0; #X connect 177 0 178 0; #X connect 178 0 177 0; #X connect 179 0 178 1; #X connect 178 1 179 0; #X connect 177 0 180 0; #X connect 180 0 0 0; -#X connect 5 41 177 0; +#X connect 7 39 177 0; #X connect 181 0 182 0; #X connect 182 0 181 0; #X connect 183 0 182 1; #X connect 182 1 183 0; #X connect 181 0 184 0; #X connect 184 0 0 0; -#X connect 5 42 181 0; +#X connect 7 40 181 0; #X connect 185 0 186 0; #X connect 186 0 185 0; #X connect 187 0 186 1; #X connect 186 1 187 0; #X connect 185 0 188 0; #X connect 188 0 0 0; -#X connect 5 43 185 0; +#X connect 7 41 185 0; #X connect 189 0 190 0; #X connect 190 0 189 0; #X connect 191 0 190 1; #X connect 190 1 191 0; #X connect 189 0 192 0; #X connect 192 0 0 0; -#X connect 5 44 189 0; +#X connect 7 42 189 0; #X connect 193 0 194 0; #X connect 194 0 193 0; #X connect 195 0 194 1; #X connect 194 1 195 0; #X connect 193 0 196 0; #X connect 196 0 0 0; -#X connect 5 45 193 0; +#X connect 7 43 193 0; #X connect 197 0 198 0; #X connect 198 0 197 0; #X connect 199 0 198 1; #X connect 198 1 199 0; #X connect 197 0 200 0; #X connect 200 0 0 0; -#X connect 5 46 197 0; +#X connect 7 44 197 0; #X connect 201 0 202 0; #X connect 202 0 201 0; #X connect 203 0 202 1; #X connect 202 1 203 0; #X connect 201 0 204 0; #X connect 204 0 0 0; -#X connect 5 47 201 0; +#X connect 7 45 201 0; #X connect 205 0 206 0; #X connect 206 0 205 0; #X connect 207 0 206 1; #X connect 206 1 207 0; #X connect 205 0 208 0; #X connect 208 0 0 0; -#X connect 5 48 205 0; +#X connect 7 46 205 0; #X connect 209 0 210 0; #X connect 210 0 209 0; #X connect 211 0 210 1; #X connect 210 1 211 0; #X connect 209 0 212 0; #X connect 212 0 0 0; -#X connect 5 49 209 0; +#X connect 7 47 209 0; #X connect 213 0 214 0; #X connect 214 0 213 0; #X connect 215 0 214 1; #X connect 214 1 215 0; #X connect 213 0 216 0; #X connect 216 0 0 0; -#X connect 5 50 213 0; +#X connect 7 48 213 0; #X connect 217 0 218 0; #X connect 218 0 217 0; #X connect 219 0 218 1; #X connect 218 1 219 0; #X connect 217 0 220 0; #X connect 220 0 0 0; -#X connect 5 51 217 0; +#X connect 7 49 217 0; #X connect 221 0 222 0; #X connect 222 0 221 0; #X connect 223 0 222 1; #X connect 222 1 223 0; #X connect 221 0 224 0; #X connect 224 0 0 0; -#X connect 5 52 221 0; +#X connect 7 50 221 0; #X connect 225 0 226 0; #X connect 226 0 225 0; #X connect 227 0 226 1; #X connect 226 1 227 0; #X connect 225 0 228 0; #X connect 228 0 0 0; -#X connect 5 53 225 0; +#X connect 7 51 225 0; #X connect 229 0 230 0; #X connect 230 0 229 0; #X connect 231 0 230 1; #X connect 230 1 231 0; #X connect 229 0 232 0; #X connect 232 0 0 0; -#X connect 5 54 229 0; +#X connect 7 52 229 0; #X connect 233 0 234 0; #X connect 234 0 233 0; #X connect 235 0 234 1; #X connect 234 1 235 0; #X connect 233 0 236 0; #X connect 236 0 0 0; -#X connect 5 55 233 0; +#X connect 7 53 233 0; #X connect 237 0 238 0; #X connect 238 0 237 0; #X connect 239 0 238 1; #X connect 238 1 239 0; #X connect 237 0 240 0; #X connect 240 0 0 0; -#X connect 5 56 237 0; +#X connect 7 54 237 0; #X connect 241 0 242 0; #X connect 242 0 241 0; #X connect 243 0 242 1; #X connect 242 1 243 0; #X connect 241 0 244 0; #X connect 244 0 0 0; -#X connect 5 57 241 0; +#X connect 7 55 241 0; #X connect 245 0 246 0; #X connect 246 0 245 0; #X connect 247 0 246 1; #X connect 246 1 247 0; #X connect 245 0 248 0; #X connect 248 0 0 0; -#X connect 5 58 245 0; +#X connect 7 56 245 0; #X connect 249 0 250 0; #X connect 250 0 249 0; #X connect 251 0 250 1; #X connect 250 1 251 0; #X connect 249 0 252 0; #X connect 252 0 0 0; -#X connect 5 59 249 0; +#X connect 7 57 249 0; #X connect 253 0 254 0; #X connect 254 0 253 0; #X connect 255 0 254 1; #X connect 254 1 255 0; #X connect 253 0 256 0; #X connect 256 0 0 0; -#X connect 5 60 253 0; +#X connect 7 58 253 0; #X connect 257 0 258 0; #X connect 258 0 257 0; #X connect 259 0 258 1; #X connect 258 1 259 0; #X connect 257 0 260 0; #X connect 260 0 0 0; -#X connect 5 61 257 0; +#X connect 7 59 257 0; #X connect 261 0 262 0; #X connect 262 0 261 0; #X connect 263 0 262 1; #X connect 262 1 263 0; #X connect 261 0 264 0; #X connect 264 0 0 0; -#X connect 5 62 261 0; +#X connect 7 60 261 0; #X connect 265 0 266 0; #X connect 266 0 265 0; #X connect 267 0 266 1; #X connect 266 1 267 0; #X connect 265 0 268 0; #X connect 268 0 0 0; -#X connect 5 63 265 0; +#X connect 7 61 265 0; #X connect 269 0 270 0; #X connect 270 0 269 0; #X connect 271 0 270 1; #X connect 270 1 271 0; #X connect 269 0 272 0; #X connect 272 0 0 0; -#X connect 5 64 269 0; +#X connect 7 62 269 0; #X connect 273 0 274 0; #X connect 274 0 273 0; #X connect 275 0 274 1; #X connect 274 1 275 0; #X connect 273 0 276 0; #X connect 276 0 0 0; -#X connect 5 65 273 0; +#X connect 7 63 273 0; #X connect 277 0 278 0; #X connect 278 0 277 0; #X connect 279 0 278 1; #X connect 278 1 279 0; #X connect 277 0 280 0; #X connect 280 0 0 0; -#X connect 5 66 277 0; +#X connect 7 64 277 0; #X connect 281 0 282 0; #X connect 282 0 281 0; #X connect 283 0 282 1; #X connect 282 1 283 0; #X connect 281 0 284 0; #X connect 284 0 0 0; -#X connect 5 67 281 0; +#X connect 7 65 281 0; #X connect 285 0 286 0; #X connect 286 0 285 0; #X connect 287 0 286 1; #X connect 286 1 287 0; #X connect 285 0 288 0; #X connect 288 0 0 0; -#X connect 5 68 285 0; +#X connect 7 66 285 0; #X connect 289 0 290 0; #X connect 290 0 289 0; #X connect 291 0 290 1; #X connect 290 1 291 0; #X connect 289 0 292 0; #X connect 292 0 0 0; -#X connect 5 69 289 0; +#X connect 7 67 289 0; #X connect 293 0 294 0; #X connect 294 0 293 0; #X connect 295 0 294 1; #X connect 294 1 295 0; #X connect 293 0 296 0; #X connect 296 0 0 0; -#X connect 5 70 293 0; +#X connect 7 68 293 0; #X connect 297 0 298 0; #X connect 298 0 297 0; #X connect 299 0 298 1; #X connect 298 1 299 0; #X connect 297 0 300 0; #X connect 300 0 0 0; -#X connect 5 71 297 0; +#X connect 7 69 297 0; #X connect 301 0 302 0; #X connect 302 0 301 0; #X connect 303 0 302 1; #X connect 302 1 303 0; #X connect 301 0 304 0; #X connect 304 0 0 0; -#X connect 5 72 301 0; +#X connect 7 70 301 0; #X connect 305 0 306 0; #X connect 306 0 305 0; #X connect 307 0 306 1; #X connect 306 1 307 0; #X connect 305 0 308 0; #X connect 308 0 0 0; -#X connect 5 73 305 0; +#X connect 7 71 305 0; #X connect 309 0 310 0; #X connect 310 0 309 0; #X connect 311 0 310 1; #X connect 310 1 311 0; #X connect 309 0 312 0; #X connect 312 0 0 0; -#X connect 5 74 309 0; +#X connect 7 72 309 0; #X connect 313 0 314 0; #X connect 314 0 313 0; #X connect 315 0 314 1; #X connect 314 1 315 0; #X connect 313 0 316 0; #X connect 316 0 0 0; -#X connect 5 75 313 0; +#X connect 7 73 313 0; #X connect 317 0 318 0; #X connect 318 0 317 0; #X connect 319 0 318 1; #X connect 318 1 319 0; #X connect 317 0 320 0; #X connect 320 0 0 0; -#X connect 5 76 317 0; +#X connect 7 74 317 0; #X connect 321 0 322 0; #X connect 322 0 321 0; #X connect 323 0 322 1; #X connect 322 1 323 0; #X connect 321 0 324 0; #X connect 324 0 0 0; -#X connect 5 77 321 0; -#X coords 0 -1 1 1 200 2522 2 2 200; +#X connect 7 75 321 0; +#X connect 325 0 326 0; +#X connect 326 0 325 0; +#X connect 327 0 326 1; +#X connect 326 1 327 0; +#X connect 325 0 328 0; +#X connect 328 0 0 0; +#X connect 7 76 325 0; +#X connect 329 0 330 0; +#X connect 330 0 329 0; +#X connect 331 0 330 1; +#X connect 330 1 331 0; +#X connect 329 0 332 0; +#X connect 332 0 0 0; +#X connect 7 77 329 0; +#X coords 0 -1 1 1 200 2366 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.vocoder~.pd b/ceammc/ext/abstractions/gfx.vocoder~.pd index 777ceeef3d..6b5cd08888 100644 --- a/ceammc/ext/abstractions/gfx.vocoder~.pd +++ b/ceammc/ext/abstractions/gfx.vocoder~.pd @@ -3,61 +3,83 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.vocoder; -#X obj 525 250 route @attack @bwratio @release; -#X obj 775 350 print unknown property; +#X obj 525 125 route fx.vocoder * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @attack @bwratio @release default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @attack @bwratio @release default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.vocoder~] unknown message; #X msg 425 75 @attack 5 \, @bwratio 0.5 \, @release 5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.vocoder~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.vocoder~/slider0 @min 0.1 @max 100; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label bwratio: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label bwratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.vocoder~/slider1 @min 0.1 @max 2; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0.1 @max 2 @digits 3; -#X msg 260 270 @bwratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0.1 @max 2 @digits 3; +#X msg 260 266 @bwratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.vocoder~/slider2 @min 0.1 @max 100; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; -#X msg 260 302 @release \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0.1 @max 100 @digits 2; +#X msg 260 296 @release \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 3 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 4 1 10 0; -#X connect 12 0 13 0; -#X connect 13 0 12 0; -#X connect 14 0 13 1; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 5 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 3 12 0; #X connect 13 1 14 0; -#X connect 12 0 15 0; -#X connect 15 0 0 0; -#X connect 5 0 12 0; -#X connect 16 0 17 0; -#X connect 17 0 16 0; -#X connect 18 0 17 1; -#X connect 17 1 18 0; -#X connect 16 0 19 0; -#X connect 19 0 0 0; -#X connect 5 1 16 0; +#X connect 13 0 12 0; +#X connect 14 0 0 0; +#X connect 7 4 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 5 1 17 0; +#X connect 6 0 17 0; #X connect 20 0 21 0; #X connect 21 0 20 0; #X connect 22 0 21 1; #X connect 21 1 22 0; #X connect 20 0 23 0; #X connect 23 0 0 0; -#X connect 5 2 20 0; -#X coords 0 -1 1 1 200 122 2 2 200; +#X connect 7 0 20 0; +#X connect 24 0 25 0; +#X connect 25 0 24 0; +#X connect 26 0 25 1; +#X connect 25 1 26 0; +#X connect 24 0 27 0; +#X connect 27 0 0 0; +#X connect 7 1 24 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 7 2 28 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.wahwah~.pd b/ceammc/ext/abstractions/gfx.wahwah~.pd index 2cbb6e7d73..e593fc3697 100644 --- a/ceammc/ext/abstractions/gfx.wahwah~.pd +++ b/ceammc/ext/abstractions/gfx.wahwah~.pd @@ -2,67 +2,89 @@ #X obj 25 125 fx.wahwah~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx.wahwah; -#X obj 425 250 route @angle @bypass @drywet @speed; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx.wahwah * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @angle @bypass @drywet @speed default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @angle @bypass @drywet @speed default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx.wahwah~] unknown message; #X msg 325 75 @angle 0.6 \, @drywet 1 \, @speed 540 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.wahwah~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label angle: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label angle: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.wahwah~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @angle \$1; -#X obj 12 258 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @angle \$1; +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.wahwah~/checkbox1; -#X msg 260 250 @bypass \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X msg 260 248 @bypass \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.wahwah~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @drywet \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @drywet \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label speed(bpm): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.wahwah~/slider3 @min 360 @max 780; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 360 @max 780 @digits 1; -#X msg 260 320 @speed \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 360 @max 780 @digits 1; +#X msg 260 296 @speed \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 4 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 6 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 4 11 0; #X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 15 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; -#X connect 20 0 0 0; -#X connect 4 2 17 0; -#X connect 21 0 22 0; -#X connect 22 0 21 0; -#X connect 23 0 22 1; -#X connect 22 1 23 0; -#X connect 21 0 24 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 5 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 6 0 19 0; +#X connect 23 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 6 1 23 0; +#X connect 25 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 26 1 27 0; +#X connect 25 0 28 0; +#X connect 28 0 0 0; +#X connect 6 2 25 0; +#X connect 29 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 6 3 29 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gfx.zita_rev1~.pd b/ceammc/ext/abstractions/gfx.zita_rev1~.pd index ab9b44e687..0eb25e63fa 100644 --- a/ceammc/ext/abstractions/gfx.zita_rev1~.pd +++ b/ceammc/ext/abstractions/gfx.zita_rev1~.pd @@ -3,156 +3,179 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx.zita_rev1; -#X obj 525 250 route @bypass @damp_hf @decay_low @decay_mid @delay -@drywet @fr_ldecay @fr_mdecay @fr_time @freeze @freq_low; -#X obj 775 350 print unknown property; -#X msg 425 75 @damp_hf 6000 \, @decay_low 3 \, @decay_mid 2 \, @delay 60 \, @drywet 1 \, @fr_ldecay 40 \, @fr_mdecay 40 \, @fr_time 100 \, @freq_low 200 \,; +#X obj 525 125 route fx.zita_rev1 * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; +#X obj 525 250 route @bypass @damp_hf @decay_low @decay_mid @drywet +@fr_ldecay @fr_mdecay @fr_time @freeze @freq_low @predelay default +reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @damp_hf @decay_low @decay_mid @drywet @fr_ldecay @fr_mdecay @fr_time @freeze @freq_low @predelay default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx.zita_rev1~] unknown message; +#X msg 425 75 @damp_hf 6000 \, @decay_low 3 \, @decay_mid 2 \, @drywet 1 \, @fr_ldecay 40 \, @fr_mdecay 40 \, @fr_time 100 \, @freq_low 200 \, @predelay 40 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 309 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx.zita_rev1~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx.zita_rev1~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label damp_hf(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.zita_rev1~/slider1 @min 1500 @max 47040; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 1500 @max 47040 @digits 1; -#X msg 260 256 @damp_hf \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1500 @max 47040 @digits 0; +#X msg 260 236 @damp_hf \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_low(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.zita_rev1~/slider2 @min 1 @max 60; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 1 @max 60 @digits 2; -#X msg 260 288 @decay_low \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 60 @digits 2; +#X msg 260 266 @decay_low \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_mid(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx.zita_rev1~/slider3 @min 1 @max 60; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 1 @max 60 @digits 2; -#X msg 260 320 @decay_mid \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label delay(ms): -@label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/fx.zita_rev1~/slider4 @min 20 @max 100; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 20 @max 100 @digits 2; -#X msg 260 352 @delay \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 60 @digits 2; +#X msg 260 296 @decay_mid \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/fx.zita_rev1~/slider5 @min 0 @max 1; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 384 @drywet \$1; -#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label +/gui/\$1/fx.zita_rev1~/slider4 @min 0 @max 1; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @drywet \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label fr_ldecay(sec): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx.zita_rev1~/slider6 @min 0 @max 60; -#X obj 190 416 sync; -#X obj 145 416 ui.number @size 50 12 @min 0 @max 60 @digits 2; -#X msg 260 416 @fr_ldecay \$1; -#X obj 12 448 ui.slider @size 125 12 @active_scale 1 @label +@presetname /gui/\$1/fx.zita_rev1~/slider5 @min 0 @max 60; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 60 @digits 2; +#X msg 260 356 @fr_ldecay \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label fr_mdecay(sec): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx.zita_rev1~/slider7 @min 0 @max 60; -#X obj 190 448 sync; -#X obj 145 448 ui.number @size 50 12 @min 0 @max 60 @digits 2; -#X msg 260 448 @fr_mdecay \$1; -#X obj 12 480 ui.slider @size 125 12 @active_scale 1 @label +@presetname /gui/\$1/fx.zita_rev1~/slider6 @min 0 @max 60; +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 60 @digits 2; +#X msg 260 386 @fr_mdecay \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label fr_time(ms): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx.zita_rev1~/slider8 @min 0 @max 1000; -#X obj 190 480 sync; -#X obj 145 480 ui.number @size 50 12 @min 0 @max 1000 @digits 1; -#X msg 260 480 @fr_time \$1; -#X obj 12 500 ui.toggle @size 12 12 @label freeze @label_side right +@presetname /gui/\$1/fx.zita_rev1~/slider7 @min 0 @max 1000; +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 416 @fr_time \$1; +#X obj 12 436 ui.toggle @size 12 12 @label freeze @label_side right @label_align left @fontsize 10 @presetname -/gui/\$1/fx.zita_rev1~/checkbox9; -#X msg 260 492 @freeze \$1; -#X obj 12 530 ui.slider @size 125 12 @active_scale 1 @label +/gui/\$1/fx.zita_rev1~/checkbox8; +#X msg 260 428 @freeze \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label freq_low(Hz): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx.zita_rev1~/slider10 @min 50 @max 1000; -#X obj 190 530 sync; -#X obj 145 530 ui.number @size 50 12 @min 50 @max 1000 @digits 1; -#X msg 260 530 @freq_low \$1; +@presetname /gui/\$1/fx.zita_rev1~/slider9 @min 50 @max 1000; +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 50 @max 1000 @digits 0; +#X msg 260 464 @freq_low \$1; +#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label +predelay(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/fx.zita_rev1~/slider10 @min 0 @max 100; +#X obj 215 494 sync; +#X obj 145 494 ui.number @size 50 12 @min 0 @max 100 @digits 0; +#X msg 260 494 @predelay \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 11 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 13 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 11 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; #X connect 14 0 0 0; -#X connect 5 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 5 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 7 12 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 5 2 19 0; +#X connect 7 0 21 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 5 3 23 0; +#X connect 7 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 5 4 27 0; +#X connect 7 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 5 5 31 0; +#X connect 7 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 5 6 35 0; +#X connect 7 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 5 7 39 0; +#X connect 7 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 5 8 43 0; +#X connect 7 6 43 0; #X connect 47 0 48 0; -#X connect 48 0 0 0; -#X connect 5 9 47 0; -#X connect 49 0 50 0; -#X connect 50 0 49 0; -#X connect 51 0 50 1; -#X connect 50 1 51 0; -#X connect 49 0 52 0; +#X connect 48 0 47 0; +#X connect 49 0 48 1; +#X connect 48 1 49 0; +#X connect 47 0 50 0; +#X connect 50 0 0 0; +#X connect 7 7 47 0; +#X connect 51 0 52 0; #X connect 52 0 0 0; -#X connect 5 10 49 0; -#X coords 0 -1 1 1 200 350 2 2 200; +#X connect 7 8 51 0; +#X connect 53 0 54 0; +#X connect 54 0 53 0; +#X connect 55 0 54 1; +#X connect 54 1 55 0; +#X connect 53 0 56 0; +#X connect 56 0 0 0; +#X connect 7 9 53 0; +#X connect 57 0 58 0; +#X connect 58 0 57 0; +#X connect 59 0 58 1; +#X connect 58 1 59 0; +#X connect 57 0 60 0; +#X connect 60 0 0 0; +#X connect 7 10 57 0; +#X coords 0 -1 1 1 200 314 2 2 200; diff --git a/ceammc/ext/abstractions/gfx_reverb_duck~.pd b/ceammc/ext/abstractions/gfx_reverb_duck~.pd deleted file mode 100644 index 2a2fe63ace..0000000000 --- a/ceammc/ext/abstractions/gfx_reverb_duck~.pd +++ /dev/null @@ -1,87 +0,0 @@ -#N canvas 0 0 950 600 12; -#X obj 25 125 fx_reverb_duck~; -#X obj 25 25 inlet~; -#X obj 425 25 inlet; -#X obj 425 200 route fx_reverb_duck; -#X obj 425 250 route @attack @decay @dump_hf @level @release; -#X obj 675 350 print unknown property; -#X msg 325 75 @attack 100 \, @decay 4 \, @dump_hf 6000 \, @level 0.5 \, @release 100 \,; -#X obj 325 25 msg.onload; -#X obj 500 550 outlet~; -#X obj 600 550 outlet ctl; -#X obj 3 202 cnv 8 198 18 empty empty [fx_reverb_duck~] 3 9 0 12 --104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label -attack(ms): @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/fx_reverb_duck~/slider0 @min 20 @max 500; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 500 @digits 1; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label -decay(sec): @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/fx_reverb_duck~/slider1 @min 1 @max 6; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 6 @digits 3; -#X msg 260 270 @decay \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label -dump_hf(Hz): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx_reverb_duck~/slider2 @min 1500 @max 47040; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1500 @max 47040 @digits 1; -#X msg 260 302 @dump_hf \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label level(db): -@label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/fx_reverb_duck~/slider3 @min 0 @max 56; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 56 @digits 2; -#X msg 260 334 @level \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label -release(ms): @label_side top @label_align left @fontsize 10 -@presetname /gui/\$1/fx_reverb_duck~/slider4 @min 20 @max 2000; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 20 @max 2000 @digits 0; -#X msg 260 366 @release \$1; -#X connect 1 0 0 0; -#X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 5 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; -#X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 4 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 4 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; -#X connect 22 0 0 0; -#X connect 4 2 19 0; -#X connect 23 0 24 0; -#X connect 24 0 23 0; -#X connect 25 0 24 1; -#X connect 24 1 25 0; -#X connect 23 0 26 0; -#X connect 26 0 0 0; -#X connect 4 3 23 0; -#X connect 27 0 28 0; -#X connect 28 0 27 0; -#X connect 29 0 28 1; -#X connect 28 1 29 0; -#X connect 27 0 30 0; -#X connect 30 0 0 0; -#X connect 4 4 27 0; -#X coords 0 -1 1 1 200 186 2 2 200; diff --git a/ceammc/ext/abstractions/gfx_room~.pd b/ceammc/ext/abstractions/gfx_room~.pd index 29b530d7be..b35f3d5012 100644 --- a/ceammc/ext/abstractions/gfx_room~.pd +++ b/ceammc/ext/abstractions/gfx_room~.pd @@ -2,93 +2,116 @@ #X obj 25 125 fx_room~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route fx_room; -#X obj 425 250 route @bypass @drywet @fb @hfdamp @predelay @size; -#X obj 675 350 print unknown property; +#X obj 425 125 route fx_room * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @bypass @drywet @fb @hfdamp @predelay @size +default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @bypass @drywet @fb @hfdamp @predelay @size default reset; +#X obj 675 425 print; +#X obj 725 425 print [gfx_room~] unknown message; #X msg 325 75 @drywet 0.5 \, @fb 0.3 \, @hfdamp 1 \, @predelay 20 \, @size 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 171 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx_room~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx_room~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_room~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @drywet \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label fb: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @drywet \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label fb: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_room~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @fb \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label hfdamp: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @fb \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label hfdamp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_room~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @hfdamp \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @hfdamp \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label predelay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_room~/slider4 @min 1 @max 200; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 1 @max 200 @digits 1; -#X msg 260 352 @predelay \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label size: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1 @max 200 @digits 0; +#X msg 260 326 @predelay \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label size: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_room~/slider5 @min 0 @max 3; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 3 @digits 3; -#X msg 260 384 @size \$1; +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 3 @digits 3; +#X msg 260 356 @size \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 6 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 3 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 0 0; -#X connect 4 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 4 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 17 0; -#X connect 19 0 18 1; -#X connect 18 1 19 0; -#X connect 17 0 20 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 8 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 6 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 7 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 4 1 16 0; +#X connect 5 0 16 0; +#X connect 19 0 20 0; #X connect 20 0 0 0; -#X connect 4 2 17 0; +#X connect 6 0 19 0; #X connect 21 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 22 1 23 0; #X connect 21 0 24 0; #X connect 24 0 0 0; -#X connect 4 3 21 0; +#X connect 6 1 21 0; #X connect 25 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 26 1 27 0; #X connect 25 0 28 0; #X connect 28 0 0 0; -#X connect 4 4 25 0; +#X connect 6 2 25 0; #X connect 29 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X connect 30 1 31 0; #X connect 29 0 32 0; #X connect 32 0 0 0; -#X connect 4 5 29 0; -#X coords 0 -1 1 1 200 204 2 2 200; +#X connect 6 3 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 6 4 33 0; +#X connect 37 0 38 0; +#X connect 38 0 37 0; +#X connect 39 0 38 1; +#X connect 38 1 39 0; +#X connect 37 0 40 0; +#X connect 40 0 0 0; +#X connect 6 5 37 0; +#X coords 0 -1 1 1 200 176 2 2 200; diff --git a/ceammc/ext/abstractions/gfx_shimmer~.pd b/ceammc/ext/abstractions/gfx_shimmer~.pd index ae7e43984b..cd290c6b9d 100644 --- a/ceammc/ext/abstractions/gfx_shimmer~.pd +++ b/ceammc/ext/abstractions/gfx_shimmer~.pd @@ -3,188 +3,211 @@ #X obj 25 25 inlet~; #X obj 125 25 inlet~; #X obj 525 25 inlet; -#X obj 525 200 route fx_shimmer; +#X obj 525 125 route fx_shimmer * .; +#X obj 725 150 route.prop; +#X obj 575 200 msg *; #X obj 525 250 route @bypass @control @damp_hf @decay_low @decay_mid -@depth @drywet @envelope @freq_low @mode @ps_drywet @shift @speed; -#X obj 775 350 print unknown property; -#X msg 425 75 @control 0.5 \, @damp_hf 6000 \, @decay_low 3 \, @decay_mid 2 \, @depth 0 \, @drywet 0.5 \, @envelope 1 \, @freq_low 200 \, @mode 0 \, @ps_drywet 0.5 \, @shift 0 \, @speed 0.1 \,; +@depth @drywet @envelope @freq_low @mode @ps_drywet @shift @speed +default reset; +#X obj 775 350 t b a; +#X msg 775 375 supported messages are: @bypass @control @damp_hf @decay_low @decay_mid @depth @drywet @envelope @freq_low @mode @ps_drywet @shift @speed default reset; +#X obj 775 425 print; +#X obj 825 425 print [gfx_shimmer~] unknown message; +#X msg 425 75 @control 0.5 \, @damp_hf 6000 \, @decay_low 3 \, @decay_mid 2 \, @depth 0 \, @drywet 0.5 \, @envelope 1 \, @freq_low 200 \, @mode 0 \, @ps_drywet 0.5 \, @shift 12 \, @speed 0.1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 425 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 381 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [fx_shimmer~] 3 9 0 12 -104026 -262144 0; -#X obj 12 226 ui.toggle @size 12 12 @label bypass @label_side right -@label_align left @fontsize 10 @presetname +#X obj 185 205 ui.toggle @size 12 12 @label bypass @label_side left +@label_align right @fontsize 10 @presetname /gui/\$1/fx_shimmer~/checkbox0; #X msg 260 218 @bypass \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label control: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label control: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider1 @min 0 @max 1; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 256 @control \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @control \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label damp_hf(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider2 @min 1500 @max 47040; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 1500 @max 47040 @digits 1; -#X msg 260 288 @damp_hf \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1500 @max 47040 @digits 0; +#X msg 260 266 @damp_hf \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_low(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider3 @min 1 @max 8; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 1 @max 8 @digits 3; -#X msg 260 320 @decay_low \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 8 @digits 3; +#X msg 260 296 @decay_low \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label decay_mid(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider4 @min 1 @max 8; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 1 @max 8 @digits 3; -#X msg 260 352 @decay_mid \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label depth: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1 @max 8 @digits 3; +#X msg 260 326 @decay_mid \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label depth: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider5 @min 0 @max 1; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 384 @depth \$1; -#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label drywet: +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 356 @depth \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider6 @min 0 @max 1; -#X obj 190 416 sync; -#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 416 @drywet \$1; -#X obj 12 448 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @drywet \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label envelope(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider7 @min 0.1 @max 3; -#X obj 190 448 sync; -#X obj 145 448 ui.number @size 50 12 @min 0.1 @max 3 @digits 3; -#X msg 260 448 @envelope \$1; -#X obj 12 480 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0.1 @max 3 @digits 3; +#X msg 260 416 @envelope \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label freq_low(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider8 @min 50 @max 1000; -#X obj 190 480 sync; -#X obj 145 480 ui.number @size 50 12 @min 50 @max 1000 @digits 1; -#X msg 260 480 @freq_low \$1; -#X obj 12 512 ui.slider @size 125 12 @active_scale 1 @label mode: +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min 50 @max 1000 @digits 0; +#X msg 260 446 @freq_low \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider9 @min -3 @max 3; -#X obj 190 512 sync; -#X obj 145 512 ui.number @size 50 12 @min -3 @max 3 @digits 3; -#X msg 260 512 @mode \$1; -#X obj 12 544 ui.slider @size 125 12 @active_scale 1 @label ps_drywet: +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min -3 @max 3 @digits 0; +#X msg 260 476 @mode \$1; +#X obj 12 506 ui.slider @size 125 12 @active_scale 1 @label ps_drywet: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider10 @min 0 @max 1; -#X obj 190 544 sync; -#X obj 145 544 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 544 @ps_drywet \$1; -#X obj 12 576 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 506 sync; +#X obj 145 506 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 506 @ps_drywet \$1; +#X obj 12 536 ui.slider @size 125 12 @active_scale 1 @label shift(semitone): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider11 @min -12 @max 12; -#X obj 190 576 sync; -#X obj 145 576 ui.number @size 50 12 @min -12 @max 12 @digits 2; -#X msg 260 576 @shift \$1; -#X obj 12 608 ui.slider @size 125 12 @active_scale 1 @label speed(Hz): +#X obj 215 536 sync; +#X obj 145 536 ui.number @size 50 12 @min -12 @max 12 @digits 2; +#X msg 260 536 @shift \$1; +#X obj 12 566 ui.slider @size 125 12 @active_scale 1 @label speed(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/fx_shimmer~/slider12 @min 0.1 @max 10; -#X obj 190 608 sync; -#X obj 145 608 ui.number @size 50 12 @min 0.1 @max 10 @digits 3; -#X msg 260 608 @speed \$1; +#X obj 215 566 sync; +#X obj 145 566 ui.number @size 50 12 @min 0.1 @max 10 @digits 3; +#X msg 260 566 @speed \$1; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 13 6 0; -#X connect 7 0 5 0; -#X connect 8 0 7 0; -#X connect 0 0 9 0; -#X connect 0 1 10 0; -#X connect 4 1 11 0; -#X connect 13 0 14 0; +#X connect 4 3 5 0; +#X connect 4 1 6 0; +#X connect 4 0 7 0; +#X connect 4 1 7 0; +#X connect 4 2 7 0; +#X connect 5 0 7 0; +#X connect 7 15 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 8 1 11 0; +#X connect 12 0 7 0; +#X connect 7 13 12 0; +#X connect 13 1 14 0; +#X connect 13 0 12 0; #X connect 14 0 0 0; -#X connect 5 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 5 1 15 0; -#X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 7 14 13 0; +#X connect 15 0 12 0; +#X connect 0 0 16 0; +#X connect 0 1 17 0; +#X connect 5 1 18 0; +#X connect 6 0 18 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 5 2 19 0; +#X connect 7 0 21 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 5 3 23 0; +#X connect 7 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 5 4 27 0; +#X connect 7 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 5 5 31 0; +#X connect 7 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 5 6 35 0; +#X connect 7 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 5 7 39 0; +#X connect 7 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 5 8 43 0; +#X connect 7 6 43 0; #X connect 47 0 48 0; #X connect 48 0 47 0; #X connect 49 0 48 1; #X connect 48 1 49 0; #X connect 47 0 50 0; #X connect 50 0 0 0; -#X connect 5 9 47 0; +#X connect 7 7 47 0; #X connect 51 0 52 0; #X connect 52 0 51 0; #X connect 53 0 52 1; #X connect 52 1 53 0; #X connect 51 0 54 0; #X connect 54 0 0 0; -#X connect 5 10 51 0; +#X connect 7 8 51 0; #X connect 55 0 56 0; #X connect 56 0 55 0; #X connect 57 0 56 1; #X connect 56 1 57 0; #X connect 55 0 58 0; #X connect 58 0 0 0; -#X connect 5 11 55 0; +#X connect 7 9 55 0; #X connect 59 0 60 0; #X connect 60 0 59 0; #X connect 61 0 60 1; #X connect 60 1 61 0; #X connect 59 0 62 0; #X connect 62 0 0 0; -#X connect 5 12 59 0; -#X coords 0 -1 1 1 200 428 2 2 200; +#X connect 7 10 59 0; +#X connect 63 0 64 0; +#X connect 64 0 63 0; +#X connect 65 0 64 1; +#X connect 64 1 65 0; +#X connect 63 0 66 0; +#X connect 66 0 0 0; +#X connect 7 11 63 0; +#X connect 67 0 68 0; +#X connect 68 0 67 0; +#X connect 69 0 68 1; +#X connect 68 1 69 0; +#X connect 67 0 70 0; +#X connect 70 0 0 0; +#X connect 7 12 67 0; +#X coords 0 -1 1 1 200 386 2 2 200; diff --git a/ceammc/ext/abstractions/gnoise.chua~.pd b/ceammc/ext/abstractions/gnoise.chua~.pd new file mode 100644 index 0000000000..eef1a35ffe --- /dev/null +++ b/ceammc/ext/abstractions/gnoise.chua~.pd @@ -0,0 +1,102 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 noise.chua~; +#X obj 325 25 inlet; +#X obj 325 125 route noise.chua * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @C1 @C2 @L @R @gate default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @C1 @C2 @L @R @gate default reset; +#X obj 575 425 print; +#X obj 625 425 print [gnoise.chua~] unknown message; +#X msg 225 75 @C1 5.5 \, @C2 49.5 \, @L 7.07 \, @R 1.6 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet~; +#X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 159 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [noise.chua~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label C1: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/noise.chua~/slider0 @min 5.2 @max 6; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 5.2 @max 6 @digits 4; +#X msg 260 236 @C1 \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label C2: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/noise.chua~/slider1 @min 40 @max 60; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 40 @max 60 @digits 2; +#X msg 260 266 @C2 \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label L: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/noise.chua~/slider2 @min 6.5 @max 7.3; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 6.5 @max 7.3 @digits 4; +#X msg 260 296 @L \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label R: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/noise.chua~/slider3 @min 1.252 @max 1.7; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 1.252 @max 1.7 @digits 4; +#X msg 260 326 @R \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 338 @gate \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 7 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 5 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 6 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 5 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 5 1 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 5 2 27 0; +#X connect 31 0 32 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 32 1 33 0; +#X connect 31 0 34 0; +#X connect 34 0 0 0; +#X connect 5 3 31 0; +#X connect 35 0 36 0; +#X connect 36 0 0 0; +#X connect 5 4 35 0; +#X coords 0 -1 1 1 200 164 2 2 200; diff --git a/ceammc/ext/abstractions/gnoise.colored~.pd b/ceammc/ext/abstractions/gnoise.colored~.pd new file mode 100644 index 0000000000..db74d56cf8 --- /dev/null +++ b/ceammc/ext/abstractions/gnoise.colored~.pd @@ -0,0 +1,55 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 noise.colored~; +#X obj 325 25 inlet; +#X obj 325 125 route noise.colored * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @alpha default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @alpha default reset; +#X obj 575 425 print; +#X obj 625 425 print [gnoise.colored~] unknown message; +#X msg 225 75 @alpha 0 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [noise.colored~] 3 9 0 12 +-104026 -262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label alpha: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/noise.colored~/slider0 @min -1 @max 1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min -1 @max 1 @digits 3; +#X msg 260 236 @alpha \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 3 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 1 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 2 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gnoise.crackle~.pd b/ceammc/ext/abstractions/gnoise.crackle~.pd index b293b3902f..d04f01745c 100644 --- a/ceammc/ext/abstractions/gnoise.crackle~.pd +++ b/ceammc/ext/abstractions/gnoise.crackle~.pd @@ -1,33 +1,55 @@ #N canvas 0 0 950 600 12; #X obj 25 125 noise.crackle~; #X obj 325 25 inlet; -#X obj 325 200 route noise.crackle; -#X obj 325 250 route @freq; -#X obj 575 350 print unknown property; +#X obj 325 125 route noise.crackle * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @freq default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @freq default reset; +#X obj 575 425 print; +#X obj 625 425 print [gnoise.crackle~] unknown message; #X msg 225 75 @freq 10 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [noise.crackle~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/noise.crackle~/slider0 @min 0 @max 100; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 100 @digits 2; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 100 @digits 2; +#X msg 260 236 @freq \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 1 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 3 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 1 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 2 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gnoise.lfreq0~.pd b/ceammc/ext/abstractions/gnoise.lfreq0~.pd index 1169706df5..c7116587b1 100644 --- a/ceammc/ext/abstractions/gnoise.lfreq0~.pd +++ b/ceammc/ext/abstractions/gnoise.lfreq0~.pd @@ -1,33 +1,55 @@ #N canvas 0 0 950 600 12; #X obj 25 125 noise.lfreq0~; #X obj 325 25 inlet; -#X obj 325 200 route noise.lfreq0; -#X obj 325 250 route @freq; -#X obj 575 350 print unknown property; +#X obj 325 125 route noise.lfreq0 * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @freq default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @freq default reset; +#X obj 575 425 print; +#X obj 625 425 print [gnoise.lfreq0~] unknown message; #X msg 225 75 @freq 1000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [noise.lfreq0~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/noise.lfreq0~/slider0 @min 5 @max 22050; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 5 @max 22050 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 5 @max 22050 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 1 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 3 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 1 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 2 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gnoise.lfreq~.pd b/ceammc/ext/abstractions/gnoise.lfreq~.pd index e8c1950153..4d5b05097a 100644 --- a/ceammc/ext/abstractions/gnoise.lfreq~.pd +++ b/ceammc/ext/abstractions/gnoise.lfreq~.pd @@ -1,33 +1,55 @@ #N canvas 0 0 950 600 12; #X obj 25 125 noise.lfreq~; #X obj 325 25 inlet; -#X obj 325 200 route noise.lfreq; -#X obj 325 250 route @freq; -#X obj 575 350 print unknown property; +#X obj 325 125 route noise.lfreq * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @freq default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @freq default reset; +#X obj 575 425 print; +#X obj 625 425 print [gnoise.lfreq~] unknown message; #X msg 225 75 @freq 1000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 51 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [noise.lfreq~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/noise.lfreq~/slider0 @min 5 @max 22050; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 5 @max 22050 @digits 1; -#X msg 260 238 @freq \$1; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 5 @max 22050 @digits 1; +#X msg 260 236 @freq \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 1 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 3 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 1 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X coords 0 -1 1 1 200 58 2 2 200; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 2 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X coords 0 -1 1 1 200 56 2 2 200; diff --git a/ceammc/ext/abstractions/gspat.pan4~.pd b/ceammc/ext/abstractions/gspat.pan4~.pd index 6f688cd53f..a60f0d2dd1 100644 --- a/ceammc/ext/abstractions/gspat.pan4~.pd +++ b/ceammc/ext/abstractions/gspat.pan4~.pd @@ -2,53 +2,75 @@ #X obj 25 125 spat.pan4~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route spat.pan4; -#X obj 425 250 route @angle @radius; -#X obj 675 350 print unknown property; +#X obj 425 125 route spat.pan4 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @angle @radius default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @angle @radius default reset; +#X obj 675 425 print; +#X obj 725 425 print [gspat.pan4~] unknown message; #X msg 325 75 @angle 0 \, @radius 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet~; #X obj 800 550 outlet~; #X obj 900 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [spat.pan4~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label angle(rad): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.pan4~/slider0 @min 0 @max 6.28319; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 6.28319 @digits 3; -#X msg 260 238 @angle \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label radius: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 6.28319 @digits 3; +#X msg 260 236 @angle \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label radius: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.pan4~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @radius \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @radius \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 0 2 10 0; -#X connect 0 3 11 0; -#X connect 3 1 12 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 4 0 14 0; -#X connect 18 0 19 0; -#X connect 19 0 18 0; -#X connect 20 0 19 1; -#X connect 19 1 20 0; -#X connect 18 0 21 0; -#X connect 21 0 0 0; -#X connect 4 1 18 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 0 2 17 0; +#X connect 0 3 18 0; +#X connect 4 1 19 0; +#X connect 5 0 19 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 6 0 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 6 1 26 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gspat.pan8~.pd b/ceammc/ext/abstractions/gspat.pan8~.pd index 696a1247b3..2c0da0f0a3 100644 --- a/ceammc/ext/abstractions/gspat.pan8~.pd +++ b/ceammc/ext/abstractions/gspat.pan8~.pd @@ -2,10 +2,17 @@ #X obj 25 125 spat.pan8~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route spat.pan8; -#X obj 425 250 route @angle @radius; -#X obj 675 350 print unknown property; +#X obj 425 125 route spat.pan8 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; +#X obj 425 250 route @angle @radius default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @angle @radius default reset; +#X obj 675 425 print; +#X obj 725 425 print [gspat.pan8~] unknown message; #X msg 325 75 @angle 0 \, @radius 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; @@ -16,47 +23,62 @@ #X obj 1100 550 outlet~; #X obj 1200 550 outlet~; #X obj 1300 550 outlet ctl; +#X obj 3 202 cnv 8 198 81 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [spat.pan8~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label angle(rad): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.pan8~/slider0 @min 0 @max 6.28319; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 6.28319 @digits 3; -#X msg 260 238 @angle \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label radius: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 6.28319 @digits 3; +#X msg 260 236 @angle \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label radius: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.pan8~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @radius \$1; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @radius \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 2 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 0 2 10 0; -#X connect 0 3 11 0; -#X connect 0 4 12 0; -#X connect 0 5 13 0; -#X connect 0 6 14 0; -#X connect 0 7 15 0; -#X connect 3 1 16 0; -#X connect 18 0 19 0; -#X connect 19 0 18 0; -#X connect 20 0 19 1; -#X connect 19 1 20 0; -#X connect 18 0 21 0; -#X connect 21 0 0 0; -#X connect 4 0 18 0; -#X connect 22 0 23 0; -#X connect 23 0 22 0; -#X connect 24 0 23 1; -#X connect 23 1 24 0; -#X connect 22 0 25 0; -#X connect 25 0 0 0; -#X connect 4 1 22 0; -#X coords 0 -1 1 1 200 90 2 2 200; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 4 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 2 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 3 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 0 2 17 0; +#X connect 0 3 18 0; +#X connect 0 4 19 0; +#X connect 0 5 20 0; +#X connect 0 6 21 0; +#X connect 0 7 22 0; +#X connect 4 1 23 0; +#X connect 5 0 23 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 6 0 26 0; +#X connect 30 0 31 0; +#X connect 31 0 30 0; +#X connect 32 0 31 1; +#X connect 31 1 32 0; +#X connect 30 0 33 0; +#X connect 33 0 0 0; +#X connect 6 1 30 0; +#X coords 0 -1 1 1 200 86 2 2 200; diff --git a/ceammc/ext/abstractions/gspat.zita8~.pd b/ceammc/ext/abstractions/gspat.zita8~.pd index cc1c259d7f..0bdc8c62de 100644 --- a/ceammc/ext/abstractions/gspat.zita8~.pd +++ b/ceammc/ext/abstractions/gspat.zita8~.pd @@ -2,11 +2,18 @@ #X obj 25 125 spat.zita8~; #X obj 25 25 inlet~; #X obj 425 25 inlet; -#X obj 425 200 route spat.zita8; +#X obj 425 125 route spat.zita8 * .; +#X obj 625 150 route.prop; +#X obj 475 200 msg *; #X obj 425 250 route @angle @decay_low @decay_mid @delay @dump_hf -@freq_low @radius; -#X obj 675 350 print unknown property; +@freq_low @radius default reset; +#X obj 675 350 t b a; +#X msg 675 375 supported messages are: @angle @decay_low @decay_mid @delay @dump_hf @freq_low @radius default reset; +#X obj 675 425 print; +#X obj 725 425 print [gspat.zita8~] unknown message; #X msg 325 75 @angle 0 \, @decay_low 3 \, @decay_mid 2 \, @delay 60 \, @dump_hf 6000 \, @freq_low 200 \, @radius 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 325 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; @@ -17,112 +24,127 @@ #X obj 1100 550 outlet~; #X obj 1200 550 outlet~; #X obj 1300 550 outlet ctl; +#X obj 3 202 cnv 8 198 231 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [spat.zita8~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label angle: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label angle: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @angle \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @angle \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_low(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider1 @min 1 @max 60; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 60 @digits 2; -#X msg 260 270 @decay_low \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 60 @digits 2; +#X msg 260 266 @decay_low \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_mid(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider2 @min 1 @max 60; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 1 @max 60 @digits 2; -#X msg 260 302 @decay_mid \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label delay(ms): +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 60 @digits 2; +#X msg 260 296 @decay_mid \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label delay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider3 @min 20 @max 100; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 20 @max 100 @digits 2; -#X msg 260 334 @delay \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 20 @max 100 @digits 0; +#X msg 260 326 @delay \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label dump_hf(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider4 @min 1500 @max 47040; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 1500 @max 47040 @digits 1; -#X msg 260 366 @dump_hf \$1; -#X obj 12 398 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 1500 @max 47040 @digits 0; +#X msg 260 356 @dump_hf \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label freq_low(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider5 @min 50 @max 1000; -#X obj 190 398 sync; -#X obj 145 398 ui.number @size 50 12 @min 50 @max 1000 @digits 1; -#X msg 260 398 @freq_low \$1; -#X obj 12 430 ui.slider @size 125 12 @active_scale 1 @label radius: +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 50 @max 1000 @digits 0; +#X msg 260 386 @freq_low \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label radius: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/spat.zita8~/slider6 @min 0 @max 1; -#X obj 190 430 sync; -#X obj 145 430 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 430 @radius \$1; +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 416 @radius \$1; #X connect 1 0 0 0; #X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 7 5 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 0 2 10 0; -#X connect 0 3 11 0; -#X connect 0 4 12 0; -#X connect 0 5 13 0; -#X connect 0 6 14 0; -#X connect 0 7 15 0; -#X connect 3 1 16 0; -#X connect 18 0 19 0; -#X connect 19 0 18 0; -#X connect 20 0 19 1; -#X connect 19 1 20 0; -#X connect 18 0 21 0; -#X connect 21 0 0 0; -#X connect 4 0 18 0; -#X connect 22 0 23 0; -#X connect 23 0 22 0; -#X connect 24 0 23 1; -#X connect 23 1 24 0; -#X connect 22 0 25 0; -#X connect 25 0 0 0; -#X connect 4 1 22 0; +#X connect 3 3 4 0; +#X connect 3 1 5 0; +#X connect 3 0 6 0; +#X connect 3 1 6 0; +#X connect 3 2 6 0; +#X connect 4 0 6 0; +#X connect 6 9 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 7 1 10 0; +#X connect 11 0 6 0; +#X connect 6 7 11 0; +#X connect 12 1 13 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 6 8 12 0; +#X connect 14 0 11 0; +#X connect 0 0 15 0; +#X connect 0 1 16 0; +#X connect 0 2 17 0; +#X connect 0 3 18 0; +#X connect 0 4 19 0; +#X connect 0 5 20 0; +#X connect 0 6 21 0; +#X connect 0 7 22 0; +#X connect 4 1 23 0; +#X connect 5 0 23 0; #X connect 26 0 27 0; #X connect 27 0 26 0; #X connect 28 0 27 1; #X connect 27 1 28 0; #X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 4 2 26 0; +#X connect 6 0 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 4 3 30 0; +#X connect 6 1 30 0; #X connect 34 0 35 0; #X connect 35 0 34 0; #X connect 36 0 35 1; #X connect 35 1 36 0; #X connect 34 0 37 0; #X connect 37 0 0 0; -#X connect 4 4 34 0; +#X connect 6 2 34 0; #X connect 38 0 39 0; #X connect 39 0 38 0; #X connect 40 0 39 1; #X connect 39 1 40 0; #X connect 38 0 41 0; #X connect 41 0 0 0; -#X connect 4 5 38 0; +#X connect 6 3 38 0; #X connect 42 0 43 0; #X connect 43 0 42 0; #X connect 44 0 43 1; #X connect 43 1 44 0; #X connect 42 0 45 0; #X connect 45 0 0 0; -#X connect 4 6 42 0; -#X coords 0 -1 1 1 200 250 2 2 200; +#X connect 6 4 42 0; +#X connect 46 0 47 0; +#X connect 47 0 46 0; +#X connect 48 0 47 1; +#X connect 47 1 48 0; +#X connect 46 0 49 0; +#X connect 49 0 0 0; +#X connect 6 5 46 0; +#X connect 50 0 51 0; +#X connect 51 0 50 0; +#X connect 52 0 51 1; +#X connect 51 1 52 0; +#X connect 50 0 53 0; +#X connect 53 0 0 0; +#X connect 6 6 50 0; +#X coords 0 -1 1 1 200 236 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.birds~.pd b/ceammc/ext/abstractions/gsynth.birds~.pd index 8a40720832..d63490ae86 100644 --- a/ceammc/ext/abstractions/gsynth.birds~.pd +++ b/ceammc/ext/abstractions/gsynth.birds~.pd @@ -1,14 +1,22 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.birds~; #X obj 325 25 inlet; -#X obj 325 200 route synth.birds; -#X obj 325 250 route @auto @gate @probability @speed; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.birds * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @auto @gate @probability @speed default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @auto @gate @probability @speed default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.birds~] unknown message; #X msg 225 75 @probability 50 \, @speed 240 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 117 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.birds~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @label auto @label_side right @@ -18,44 +26,58 @@ #X obj 12 244 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; #X msg 260 236 @gate \$1; -#X obj 12 274 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 272 ui.slider @size 125 12 @active_scale 1 @label probability(%): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.birds~/slider2 @min 25 @max 100; -#X obj 190 274 sync; -#X obj 145 274 ui.number @size 50 12 @min 25 @max 100 @digits 2; -#X msg 260 274 @probability \$1; -#X obj 12 306 ui.slider @size 125 12 @active_scale 1 @label speed: +#X obj 215 272 sync; +#X obj 145 272 ui.number @size 50 12 @min 25 @max 100 @digits 0; +#X msg 260 272 @probability \$1; +#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label speed: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.birds~/slider3 @min 120 @max 480; -#X obj 190 306 sync; -#X obj 145 306 ui.number @size 50 12 @min 120 @max 480 @digits 1; -#X msg 260 306 @speed \$1; +#X obj 215 302 sync; +#X obj 145 302 ui.number @size 50 12 @min 120 @max 480 @digits 1; +#X msg 260 302 @speed \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 4 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 0 1 8 0; -#X connect 2 1 9 0; -#X connect 11 0 12 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; #X connect 12 0 0 0; -#X connect 3 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 0 0; -#X connect 3 1 13 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 3 2 15 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; #X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; +#X connect 20 0 0 0; +#X connect 5 0 19 0; +#X connect 21 0 22 0; #X connect 22 0 0 0; -#X connect 3 3 19 0; -#X coords 0 -1 1 1 200 126 2 2 200; +#X connect 5 1 21 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 5 2 23 0; +#X connect 27 0 28 0; +#X connect 28 0 27 0; +#X connect 29 0 28 1; +#X connect 28 1 29 0; +#X connect 27 0 30 0; +#X connect 30 0 0 0; +#X connect 5 3 27 0; +#X coords 0 -1 1 1 200 122 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.church_bell~.pd b/ceammc/ext/abstractions/gsynth.church_bell~.pd index af85716517..32ba2c209c 100644 --- a/ceammc/ext/abstractions/gsynth.church_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.church_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.church_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.church_bell; +#X obj 325 125 route synth.church_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.church_bell~] unknown message; #X msg 225 75 @cutoff 6500 \, @decay_ratio 1 \, @decay_slope 2.5 \, @gain 1 \, @pos 0 \, @sharp 0.5 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.church_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.church_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.clap~.pd b/ceammc/ext/abstractions/gsynth.clap~.pd new file mode 100644 index 0000000000..be35d841d8 --- /dev/null +++ b/ceammc/ext/abstractions/gsynth.clap~.pd @@ -0,0 +1,87 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 synth.clap~; +#X obj 325 25 inlet; +#X obj 325 125 route synth.clap * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @gate @release @tone default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @gate @release @tone default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.clap~] unknown message; +#X msg 225 75 @attack 0 \, @release 0 \, @tone 3500 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 129 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [synth.clap~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label +attack(ms): @label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.clap~/slider0 @min 0 @max 400; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 400 @digits 0; +#X msg 260 236 @attack \$1; +#X obj 12 256 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 248 @gate \$1; +#X obj 12 284 ui.slider @size 125 12 @active_scale 1 @label +release(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.clap~/slider2 @min 0 @max 4000; +#X obj 215 284 sync; +#X obj 145 284 ui.number @size 50 12 @min 0 @max 4000 @digits 0; +#X msg 260 284 @release \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label tone(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.clap~/slider3 @min 400 @max 3500; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 400 @max 3500 @digits 0; +#X msg 260 314 @tone \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 0 0; +#X connect 5 1 22 0; +#X connect 24 0 25 0; +#X connect 25 0 24 0; +#X connect 26 0 25 1; +#X connect 25 1 26 0; +#X connect 24 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 24 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X coords 0 -1 1 1 200 134 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.dubdub~.pd b/ceammc/ext/abstractions/gsynth.dubdub~.pd index 822f23114a..10707b825d 100644 --- a/ceammc/ext/abstractions/gsynth.dubdub~.pd +++ b/ceammc/ext/abstractions/gsynth.dubdub~.pd @@ -1,65 +1,87 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.dubdub~; #X obj 325 25 inlet; -#X obj 325 200 route synth.dubdub; -#X obj 325 250 route @cutoff @gate @pitch @q; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.dubdub * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @cutoff @gate @pitch @q default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @gate @pitch @q default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.dubdub~] unknown message; #X msg 225 75 @cutoff 3000 \, @pitch 48 \, @q 0.1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 129 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.dubdub~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label cutoff: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dubdub~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 258 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 256 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 250 @gate \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X msg 260 248 @gate \$1; +#X obj 12 284 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dubdub~/slider2 @min 24 @max 84; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 24 @max 84 @digits 2; -#X msg 260 288 @pitch \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label q: +#X obj 215 284 sync; +#X obj 145 284 ui.number @size 50 12 @min 24 @max 84 @digits 2; +#X msg 260 284 @pitch \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label q: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dubdub~/slider3 @min 0.01 @max 100; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; -#X msg 260 320 @q \$1; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0.01 @max 100 @digits 2; +#X msg 260 314 @q \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 4 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 0 0; -#X connect 3 1 14 0; -#X connect 16 0 17 0; -#X connect 17 0 16 0; -#X connect 18 0 17 1; -#X connect 17 1 18 0; -#X connect 16 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 16 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; #X connect 23 0 0 0; -#X connect 3 3 20 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 5 1 22 0; +#X connect 24 0 25 0; +#X connect 25 0 24 0; +#X connect 26 0 25 1; +#X connect 25 1 26 0; +#X connect 24 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 24 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X coords 0 -1 1 1 200 134 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.dx7~.pd b/ceammc/ext/abstractions/gsynth.dx7~.pd index 403e4c5606..c9c96bfb6c 100644 --- a/ceammc/ext/abstractions/gsynth.dx7~.pd +++ b/ceammc/ext/abstractions/gsynth.dx7~.pd @@ -1,7 +1,9 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.dx7~; #X obj 325 25 inlet; -#X obj 325 200 route synth.dx7; +#X obj 325 125 route synth.dx7 * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @algorithm @feedback @gain @gate @op0:detune @op0:egL1 @op0:egL2 @op0:egL3 @op0:egL4 @op0:egR1 @op0:egR2 @op0:egR3 @op0:egR4 @op0:freq @op0:key_vel_sens @op0:level @op0:mode @@ -16,12 +18,19 @@ @op4:egR1 @op4:egR2 @op4:egR3 @op4:egR4 @op4:freq @op4:key_vel_sens @op4:level @op4:mode @op4:rate_scale @op5:detune @op5:egL1 @op5:egL2 @op5:egL3 @op5:egL4 @op5:egR1 @op5:egR2 @op5:egR3 @op5:egR4 @op5:freq -@op5:key_vel_sens @op5:level @op5:mode @op5:rate_scale @pitch; -#X obj 575 350 print unknown property; +@op5:key_vel_sens @op5:level @op5:mode @op5:rate_scale @pitch default +reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @algorithm @feedback @gain @gate @op0:detune @op0:egL1 @op0:egL2 @op0:egL3 @op0:egL4 @op0:egR1 @op0:egR2 @op0:egR3 @op0:egR4 @op0:freq @op0:key_vel_sens @op0:level @op0:mode @op0:rate_scale @op1:detune @op1:egL1 @op1:egL2 @op1:egL3 @op1:egL4 @op1:egR1 @op1:egR2 @op1:egR3 @op1:egR4 @op1:freq @op1:key_vel_sens @op1:level @op1:mode @op1:rate_scale @op2:detune @op2:egL1 @op2:egL2 @op2:egL3 @op2:egL4 @op2:egR1 @op2:egR2 @op2:egR3 @op2:egR4 @op2:freq @op2:key_vel_sens @op2:level @op2:mode @op2:rate_scale @op3:detune @op3:egL1 @op3:egL2 @op3:egL3 @op3:egL4 @op3:egR1 @op3:egR2 @op3:egR3 @op3:egR4 @op3:freq @op3:key_vel_sens @op3:level @op3:mode @op3:rate_scale @op4:detune @op4:egL1 @op4:egL2 @op4:egL3 @op4:egL4 @op4:egR1 @op4:egR2 @op4:egR3 @op4:egR4 @op4:freq @op4:key_vel_sens @op4:level @op4:mode @op4:rate_scale @op5:detune @op5:egL1 @op5:egL2 @op5:egL3 @op5:egL4 @op5:egR1 @op5:egR2 @op5:egR3 @op5:egR4 @op5:freq @op5:key_vel_sens @op5:level @op5:mode @op5:rate_scale @pitch default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.dx7~] unknown message; #X msg 225 75 @algorithm 0 \, @feedback 0 \, @gain 0.8 \, @op0:detune 1 \, @op0:egL1 0 \, @op0:egL2 90 \, @op0:egL3 90 \, @op0:egL4 0 \, @op0:egR1 90 \, @op0:egR2 90 \, @op0:egR3 90 \, @op0:egR4 90 \, @op0:freq 1 \, @op0:key_vel_sens 1 \, @op0:level 95 \, @op0:mode 0 \, @op0:rate_scale 0 \, @op1:detune 1 \, @op1:egL1 0 \, @op1:egL2 90 \, @op1:egL3 90 \, @op1:egL4 0 \, @op1:egR1 90 \, @op1:egR2 90 \, @op1:egR3 90 \, @op1:egR4 90 \, @op1:freq 1 \, @op1:key_vel_sens 1 \, @op1:level 95 \, @op1:mode 0 \, @op1:rate_scale 0 \, @op2:detune 1 \, @op2:egL1 0 \, @op2:egL2 90 \, @op2:egL3 90 \, @op2:egL4 0 \, @op2:egR1 90 \, @op2:egR2 90 \, @op2:egR3 90 \, @op2:egR4 90 \, @op2:freq 1 \, @op2:key_vel_sens 1 \, @op2:level 95 \, @op2:mode 0 \, @op2:rate_scale 0 \, @op3:detune 1 \, @op3:egL1 0 \, @op3:egL2 90 \, @op3:egL3 90 \, @op3:egL4 0 \, @op3:egR1 90 \, @op3:egR2 90 \, @op3:egR3 90 \, @op3:egR4 90 \, @op3:freq 1 \, @op3:key_vel_sens 1 \, @op3:level 95 \, @op3:mode 0 \, @op3:rate_scale 0 \, @op4:detune 1 \, @op4:egL1 0 \, @op4:egL2 90 \, @op4:egL3 90 \, @op4:egL4 0 \, @op4:egR1 90 \, @op4:egR2 90 \, @op4:egR3 90 \, @op4:egR4 90 \, @op4:freq 1 \, @op4:key_vel_sens 1 \, @op4:level 95 \, @op4:mode 0 \, @op4:rate_scale 0 \, @op5:detune 1 \, @op5:egL1 0 \, @op5:egL2 90 \, @op5:egL3 90 \, @op5:egL4 0 \, @op5:egR1 90 \, @op5:egR2 90 \, @op5:egR3 90 \, @op5:egR4 90 \, @op5:freq 1 \, @op5:key_vel_sens 1 \, @op5:level 95 \, @op5:mode 0 \, @op5:rate_scale 0 \, @pitch 48 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 2679 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.dx7~] 3 9 0 12 -104026 -262144 0; #X obj 12 236 ui.number @size 60 12 @label algorithm: @label_side top @@ -32,637 +41,651 @@ @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox1 @min 0 @max 99 @step 1; #X msg 260 266 @feedback \$1; -#X obj 12 298 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/slider2 @min 0 @max 1; -#X obj 190 298 sync; -#X obj 145 298 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 298 @gain \$1; -#X obj 12 318 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @gain \$1; +#X obj 12 316 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 310 @gate \$1; -#X obj 12 346 ui.number @size 60 12 @label op0:detune: @label_side top +#X msg 260 308 @gate \$1; +#X obj 12 344 ui.number @size 60 12 @label op0:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox4 @min -10 @max 10 @step 1; -#X msg 260 346 @op0:detune \$1; -#X obj 12 376 ui.number @size 60 12 @label op0:egL1: @label_side top +#X msg 260 344 @op0:detune \$1; +#X obj 12 374 ui.number @size 60 12 @label op0:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox5 @min 0 @max 99 @step 1; -#X msg 260 376 @op0:egL1 \$1; -#X obj 12 406 ui.number @size 60 12 @label op0:egL2: @label_side top +#X msg 260 374 @op0:egL1 \$1; +#X obj 12 404 ui.number @size 60 12 @label op0:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox6 @min 0 @max 99 @step 1; -#X msg 260 406 @op0:egL2 \$1; -#X obj 12 436 ui.number @size 60 12 @label op0:egL3: @label_side top +#X msg 260 404 @op0:egL2 \$1; +#X obj 12 434 ui.number @size 60 12 @label op0:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox7 @min 0 @max 99 @step 1; -#X msg 260 436 @op0:egL3 \$1; -#X obj 12 466 ui.number @size 60 12 @label op0:egL4: @label_side top +#X msg 260 434 @op0:egL3 \$1; +#X obj 12 464 ui.number @size 60 12 @label op0:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox8 @min 0 @max 99 @step 1; -#X msg 260 466 @op0:egL4 \$1; -#X obj 12 496 ui.number @size 60 12 @label op0:egR1: @label_side top +#X msg 260 464 @op0:egL4 \$1; +#X obj 12 494 ui.number @size 60 12 @label op0:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox9 @min 0 @max 99 @step 1; -#X msg 260 496 @op0:egR1 \$1; -#X obj 12 526 ui.number @size 60 12 @label op0:egR2: @label_side top +#X msg 260 494 @op0:egR1 \$1; +#X obj 12 524 ui.number @size 60 12 @label op0:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox10 @min 0 @max 99 @step 1; -#X msg 260 526 @op0:egR2 \$1; -#X obj 12 556 ui.number @size 60 12 @label op0:egR3: @label_side top +#X msg 260 524 @op0:egR2 \$1; +#X obj 12 554 ui.number @size 60 12 @label op0:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox11 @min 0 @max 99 @step 1; -#X msg 260 556 @op0:egR3 \$1; -#X obj 12 586 ui.number @size 60 12 @label op0:egR4: @label_side top +#X msg 260 554 @op0:egR3 \$1; +#X obj 12 584 ui.number @size 60 12 @label op0:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox12 @min 0 @max 99 @step 1; -#X msg 260 586 @op0:egR4 \$1; -#X obj 12 616 ui.number @size 60 12 @label op0:freq: @label_side top +#X msg 260 584 @op0:egR4 \$1; +#X obj 12 614 ui.number @size 60 12 @label op0:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox13 @min 0 @max 2 @step 0.01; -#X msg 260 616 @op0:freq \$1; -#X obj 12 646 ui.number @size 60 12 @label op0:key_vel_sens: +#X msg 260 614 @op0:freq \$1; +#X obj 12 644 ui.number @size 60 12 @label op0:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox14 @min 0 @max 8 @step 1; -#X msg 260 646 @op0:key_vel_sens \$1; -#X obj 12 676 ui.number @size 60 12 @label op0:level: @label_side top +#X msg 260 644 @op0:key_vel_sens \$1; +#X obj 12 674 ui.number @size 60 12 @label op0:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox15 @min 0 @max 99 @step 1; -#X msg 260 676 @op0:level \$1; -#X obj 12 706 ui.number @size 60 12 @label op0:mode: @label_side top +#X msg 260 674 @op0:level \$1; +#X obj 12 704 ui.number @size 60 12 @label op0:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox16 @min 0 @max 1 @step 1; -#X msg 260 706 @op0:mode \$1; -#X obj 12 736 ui.number @size 60 12 @label op0:rate_scale: @label_side +#X msg 260 704 @op0:mode \$1; +#X obj 12 734 ui.number @size 60 12 @label op0:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox17 @min 0 @max 10 @step 1; -#X msg 260 736 @op0:rate_scale \$1; -#X obj 12 766 ui.number @size 60 12 @label op1:detune: @label_side top +#X msg 260 734 @op0:rate_scale \$1; +#X obj 12 764 ui.number @size 60 12 @label op1:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox18 @min -10 @max 10 @step 1; -#X msg 260 766 @op1:detune \$1; -#X obj 12 796 ui.number @size 60 12 @label op1:egL1: @label_side top +#X msg 260 764 @op1:detune \$1; +#X obj 12 794 ui.number @size 60 12 @label op1:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox19 @min 0 @max 99 @step 1; -#X msg 260 796 @op1:egL1 \$1; -#X obj 12 826 ui.number @size 60 12 @label op1:egL2: @label_side top +#X msg 260 794 @op1:egL1 \$1; +#X obj 12 824 ui.number @size 60 12 @label op1:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox20 @min 0 @max 99 @step 1; -#X msg 260 826 @op1:egL2 \$1; -#X obj 12 856 ui.number @size 60 12 @label op1:egL3: @label_side top +#X msg 260 824 @op1:egL2 \$1; +#X obj 12 854 ui.number @size 60 12 @label op1:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox21 @min 0 @max 99 @step 1; -#X msg 260 856 @op1:egL3 \$1; -#X obj 12 886 ui.number @size 60 12 @label op1:egL4: @label_side top +#X msg 260 854 @op1:egL3 \$1; +#X obj 12 884 ui.number @size 60 12 @label op1:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox22 @min 0 @max 99 @step 1; -#X msg 260 886 @op1:egL4 \$1; -#X obj 12 916 ui.number @size 60 12 @label op1:egR1: @label_side top +#X msg 260 884 @op1:egL4 \$1; +#X obj 12 914 ui.number @size 60 12 @label op1:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox23 @min 0 @max 99 @step 1; -#X msg 260 916 @op1:egR1 \$1; -#X obj 12 946 ui.number @size 60 12 @label op1:egR2: @label_side top +#X msg 260 914 @op1:egR1 \$1; +#X obj 12 944 ui.number @size 60 12 @label op1:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox24 @min 0 @max 99 @step 1; -#X msg 260 946 @op1:egR2 \$1; -#X obj 12 976 ui.number @size 60 12 @label op1:egR3: @label_side top +#X msg 260 944 @op1:egR2 \$1; +#X obj 12 974 ui.number @size 60 12 @label op1:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox25 @min 0 @max 99 @step 1; -#X msg 260 976 @op1:egR3 \$1; -#X obj 12 1006 ui.number @size 60 12 @label op1:egR4: @label_side top +#X msg 260 974 @op1:egR3 \$1; +#X obj 12 1004 ui.number @size 60 12 @label op1:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox26 @min 0 @max 99 @step 1; -#X msg 260 1006 @op1:egR4 \$1; -#X obj 12 1036 ui.number @size 60 12 @label op1:freq: @label_side top +#X msg 260 1004 @op1:egR4 \$1; +#X obj 12 1034 ui.number @size 60 12 @label op1:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox27 @min 0 @max 2 @step 0.01; -#X msg 260 1036 @op1:freq \$1; -#X obj 12 1066 ui.number @size 60 12 @label op1:key_vel_sens: +#X msg 260 1034 @op1:freq \$1; +#X obj 12 1064 ui.number @size 60 12 @label op1:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox28 @min 0 @max 8 @step 1; -#X msg 260 1066 @op1:key_vel_sens \$1; -#X obj 12 1096 ui.number @size 60 12 @label op1:level: @label_side top +#X msg 260 1064 @op1:key_vel_sens \$1; +#X obj 12 1094 ui.number @size 60 12 @label op1:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox29 @min 0 @max 99 @step 1; -#X msg 260 1096 @op1:level \$1; -#X obj 12 1126 ui.number @size 60 12 @label op1:mode: @label_side top +#X msg 260 1094 @op1:level \$1; +#X obj 12 1124 ui.number @size 60 12 @label op1:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox30 @min 0 @max 1 @step 1; -#X msg 260 1126 @op1:mode \$1; -#X obj 12 1156 ui.number @size 60 12 @label op1:rate_scale: +#X msg 260 1124 @op1:mode \$1; +#X obj 12 1154 ui.number @size 60 12 @label op1:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox31 @min 0 @max 10 @step 1; -#X msg 260 1156 @op1:rate_scale \$1; -#X obj 12 1186 ui.number @size 60 12 @label op2:detune: @label_side +#X msg 260 1154 @op1:rate_scale \$1; +#X obj 12 1184 ui.number @size 60 12 @label op2:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox32 @min -10 @max 10 @step 1; -#X msg 260 1186 @op2:detune \$1; -#X obj 12 1216 ui.number @size 60 12 @label op2:egL1: @label_side top +#X msg 260 1184 @op2:detune \$1; +#X obj 12 1214 ui.number @size 60 12 @label op2:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox33 @min 0 @max 99 @step 1; -#X msg 260 1216 @op2:egL1 \$1; -#X obj 12 1246 ui.number @size 60 12 @label op2:egL2: @label_side top +#X msg 260 1214 @op2:egL1 \$1; +#X obj 12 1244 ui.number @size 60 12 @label op2:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox34 @min 0 @max 99 @step 1; -#X msg 260 1246 @op2:egL2 \$1; -#X obj 12 1276 ui.number @size 60 12 @label op2:egL3: @label_side top +#X msg 260 1244 @op2:egL2 \$1; +#X obj 12 1274 ui.number @size 60 12 @label op2:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox35 @min 0 @max 99 @step 1; -#X msg 260 1276 @op2:egL3 \$1; -#X obj 12 1306 ui.number @size 60 12 @label op2:egL4: @label_side top +#X msg 260 1274 @op2:egL3 \$1; +#X obj 12 1304 ui.number @size 60 12 @label op2:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox36 @min 0 @max 99 @step 1; -#X msg 260 1306 @op2:egL4 \$1; -#X obj 12 1336 ui.number @size 60 12 @label op2:egR1: @label_side top +#X msg 260 1304 @op2:egL4 \$1; +#X obj 12 1334 ui.number @size 60 12 @label op2:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox37 @min 0 @max 99 @step 1; -#X msg 260 1336 @op2:egR1 \$1; -#X obj 12 1366 ui.number @size 60 12 @label op2:egR2: @label_side top +#X msg 260 1334 @op2:egR1 \$1; +#X obj 12 1364 ui.number @size 60 12 @label op2:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox38 @min 0 @max 99 @step 1; -#X msg 260 1366 @op2:egR2 \$1; -#X obj 12 1396 ui.number @size 60 12 @label op2:egR3: @label_side top +#X msg 260 1364 @op2:egR2 \$1; +#X obj 12 1394 ui.number @size 60 12 @label op2:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox39 @min 0 @max 99 @step 1; -#X msg 260 1396 @op2:egR3 \$1; -#X obj 12 1426 ui.number @size 60 12 @label op2:egR4: @label_side top +#X msg 260 1394 @op2:egR3 \$1; +#X obj 12 1424 ui.number @size 60 12 @label op2:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox40 @min 0 @max 99 @step 1; -#X msg 260 1426 @op2:egR4 \$1; -#X obj 12 1456 ui.number @size 60 12 @label op2:freq: @label_side top +#X msg 260 1424 @op2:egR4 \$1; +#X obj 12 1454 ui.number @size 60 12 @label op2:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox41 @min 0 @max 2 @step 0.01; -#X msg 260 1456 @op2:freq \$1; -#X obj 12 1486 ui.number @size 60 12 @label op2:key_vel_sens: +#X msg 260 1454 @op2:freq \$1; +#X obj 12 1484 ui.number @size 60 12 @label op2:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox42 @min 0 @max 8 @step 1; -#X msg 260 1486 @op2:key_vel_sens \$1; -#X obj 12 1516 ui.number @size 60 12 @label op2:level: @label_side top +#X msg 260 1484 @op2:key_vel_sens \$1; +#X obj 12 1514 ui.number @size 60 12 @label op2:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox43 @min 0 @max 99 @step 1; -#X msg 260 1516 @op2:level \$1; -#X obj 12 1546 ui.number @size 60 12 @label op2:mode: @label_side top +#X msg 260 1514 @op2:level \$1; +#X obj 12 1544 ui.number @size 60 12 @label op2:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox44 @min 0 @max 1 @step 1; -#X msg 260 1546 @op2:mode \$1; -#X obj 12 1576 ui.number @size 60 12 @label op2:rate_scale: +#X msg 260 1544 @op2:mode \$1; +#X obj 12 1574 ui.number @size 60 12 @label op2:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox45 @min 0 @max 10 @step 1; -#X msg 260 1576 @op2:rate_scale \$1; -#X obj 12 1606 ui.number @size 60 12 @label op3:detune: @label_side +#X msg 260 1574 @op2:rate_scale \$1; +#X obj 12 1604 ui.number @size 60 12 @label op3:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox46 @min -10 @max 10 @step 1; -#X msg 260 1606 @op3:detune \$1; -#X obj 12 1636 ui.number @size 60 12 @label op3:egL1: @label_side top +#X msg 260 1604 @op3:detune \$1; +#X obj 12 1634 ui.number @size 60 12 @label op3:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox47 @min 0 @max 99 @step 1; -#X msg 260 1636 @op3:egL1 \$1; -#X obj 12 1666 ui.number @size 60 12 @label op3:egL2: @label_side top +#X msg 260 1634 @op3:egL1 \$1; +#X obj 12 1664 ui.number @size 60 12 @label op3:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox48 @min 0 @max 99 @step 1; -#X msg 260 1666 @op3:egL2 \$1; -#X obj 12 1696 ui.number @size 60 12 @label op3:egL3: @label_side top +#X msg 260 1664 @op3:egL2 \$1; +#X obj 12 1694 ui.number @size 60 12 @label op3:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox49 @min 0 @max 99 @step 1; -#X msg 260 1696 @op3:egL3 \$1; -#X obj 12 1726 ui.number @size 60 12 @label op3:egL4: @label_side top +#X msg 260 1694 @op3:egL3 \$1; +#X obj 12 1724 ui.number @size 60 12 @label op3:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox50 @min 0 @max 99 @step 1; -#X msg 260 1726 @op3:egL4 \$1; -#X obj 12 1756 ui.number @size 60 12 @label op3:egR1: @label_side top +#X msg 260 1724 @op3:egL4 \$1; +#X obj 12 1754 ui.number @size 60 12 @label op3:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox51 @min 0 @max 99 @step 1; -#X msg 260 1756 @op3:egR1 \$1; -#X obj 12 1786 ui.number @size 60 12 @label op3:egR2: @label_side top +#X msg 260 1754 @op3:egR1 \$1; +#X obj 12 1784 ui.number @size 60 12 @label op3:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox52 @min 0 @max 99 @step 1; -#X msg 260 1786 @op3:egR2 \$1; -#X obj 12 1816 ui.number @size 60 12 @label op3:egR3: @label_side top +#X msg 260 1784 @op3:egR2 \$1; +#X obj 12 1814 ui.number @size 60 12 @label op3:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox53 @min 0 @max 99 @step 1; -#X msg 260 1816 @op3:egR3 \$1; -#X obj 12 1846 ui.number @size 60 12 @label op3:egR4: @label_side top +#X msg 260 1814 @op3:egR3 \$1; +#X obj 12 1844 ui.number @size 60 12 @label op3:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox54 @min 0 @max 99 @step 1; -#X msg 260 1846 @op3:egR4 \$1; -#X obj 12 1876 ui.number @size 60 12 @label op3:freq: @label_side top +#X msg 260 1844 @op3:egR4 \$1; +#X obj 12 1874 ui.number @size 60 12 @label op3:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox55 @min 0 @max 2 @step 0.01; -#X msg 260 1876 @op3:freq \$1; -#X obj 12 1906 ui.number @size 60 12 @label op3:key_vel_sens: +#X msg 260 1874 @op3:freq \$1; +#X obj 12 1904 ui.number @size 60 12 @label op3:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox56 @min 0 @max 8 @step 1; -#X msg 260 1906 @op3:key_vel_sens \$1; -#X obj 12 1936 ui.number @size 60 12 @label op3:level: @label_side top +#X msg 260 1904 @op3:key_vel_sens \$1; +#X obj 12 1934 ui.number @size 60 12 @label op3:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox57 @min 0 @max 99 @step 1; -#X msg 260 1936 @op3:level \$1; -#X obj 12 1966 ui.number @size 60 12 @label op3:mode: @label_side top +#X msg 260 1934 @op3:level \$1; +#X obj 12 1964 ui.number @size 60 12 @label op3:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox58 @min 0 @max 1 @step 1; -#X msg 260 1966 @op3:mode \$1; -#X obj 12 1996 ui.number @size 60 12 @label op3:rate_scale: +#X msg 260 1964 @op3:mode \$1; +#X obj 12 1994 ui.number @size 60 12 @label op3:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox59 @min 0 @max 10 @step 1; -#X msg 260 1996 @op3:rate_scale \$1; -#X obj 12 2026 ui.number @size 60 12 @label op4:detune: @label_side +#X msg 260 1994 @op3:rate_scale \$1; +#X obj 12 2024 ui.number @size 60 12 @label op4:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox60 @min -10 @max 10 @step 1; -#X msg 260 2026 @op4:detune \$1; -#X obj 12 2056 ui.number @size 60 12 @label op4:egL1: @label_side top +#X msg 260 2024 @op4:detune \$1; +#X obj 12 2054 ui.number @size 60 12 @label op4:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox61 @min 0 @max 99 @step 1; -#X msg 260 2056 @op4:egL1 \$1; -#X obj 12 2086 ui.number @size 60 12 @label op4:egL2: @label_side top +#X msg 260 2054 @op4:egL1 \$1; +#X obj 12 2084 ui.number @size 60 12 @label op4:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox62 @min 0 @max 99 @step 1; -#X msg 260 2086 @op4:egL2 \$1; -#X obj 12 2116 ui.number @size 60 12 @label op4:egL3: @label_side top +#X msg 260 2084 @op4:egL2 \$1; +#X obj 12 2114 ui.number @size 60 12 @label op4:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox63 @min 0 @max 99 @step 1; -#X msg 260 2116 @op4:egL3 \$1; -#X obj 12 2146 ui.number @size 60 12 @label op4:egL4: @label_side top +#X msg 260 2114 @op4:egL3 \$1; +#X obj 12 2144 ui.number @size 60 12 @label op4:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox64 @min 0 @max 99 @step 1; -#X msg 260 2146 @op4:egL4 \$1; -#X obj 12 2176 ui.number @size 60 12 @label op4:egR1: @label_side top +#X msg 260 2144 @op4:egL4 \$1; +#X obj 12 2174 ui.number @size 60 12 @label op4:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox65 @min 0 @max 99 @step 1; -#X msg 260 2176 @op4:egR1 \$1; -#X obj 12 2206 ui.number @size 60 12 @label op4:egR2: @label_side top +#X msg 260 2174 @op4:egR1 \$1; +#X obj 12 2204 ui.number @size 60 12 @label op4:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox66 @min 0 @max 99 @step 1; -#X msg 260 2206 @op4:egR2 \$1; -#X obj 12 2236 ui.number @size 60 12 @label op4:egR3: @label_side top +#X msg 260 2204 @op4:egR2 \$1; +#X obj 12 2234 ui.number @size 60 12 @label op4:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox67 @min 0 @max 99 @step 1; -#X msg 260 2236 @op4:egR3 \$1; -#X obj 12 2266 ui.number @size 60 12 @label op4:egR4: @label_side top +#X msg 260 2234 @op4:egR3 \$1; +#X obj 12 2264 ui.number @size 60 12 @label op4:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox68 @min 0 @max 99 @step 1; -#X msg 260 2266 @op4:egR4 \$1; -#X obj 12 2296 ui.number @size 60 12 @label op4:freq: @label_side top +#X msg 260 2264 @op4:egR4 \$1; +#X obj 12 2294 ui.number @size 60 12 @label op4:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox69 @min 0 @max 2 @step 0.01; -#X msg 260 2296 @op4:freq \$1; -#X obj 12 2326 ui.number @size 60 12 @label op4:key_vel_sens: +#X msg 260 2294 @op4:freq \$1; +#X obj 12 2324 ui.number @size 60 12 @label op4:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox70 @min 0 @max 8 @step 1; -#X msg 260 2326 @op4:key_vel_sens \$1; -#X obj 12 2356 ui.number @size 60 12 @label op4:level: @label_side top +#X msg 260 2324 @op4:key_vel_sens \$1; +#X obj 12 2354 ui.number @size 60 12 @label op4:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox71 @min 0 @max 99 @step 1; -#X msg 260 2356 @op4:level \$1; -#X obj 12 2386 ui.number @size 60 12 @label op4:mode: @label_side top +#X msg 260 2354 @op4:level \$1; +#X obj 12 2384 ui.number @size 60 12 @label op4:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox72 @min 0 @max 1 @step 1; -#X msg 260 2386 @op4:mode \$1; -#X obj 12 2416 ui.number @size 60 12 @label op4:rate_scale: +#X msg 260 2384 @op4:mode \$1; +#X obj 12 2414 ui.number @size 60 12 @label op4:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox73 @min 0 @max 10 @step 1; -#X msg 260 2416 @op4:rate_scale \$1; -#X obj 12 2446 ui.number @size 60 12 @label op5:detune: @label_side +#X msg 260 2414 @op4:rate_scale \$1; +#X obj 12 2444 ui.number @size 60 12 @label op5:detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox74 @min -10 @max 10 @step 1; -#X msg 260 2446 @op5:detune \$1; -#X obj 12 2476 ui.number @size 60 12 @label op5:egL1: @label_side top +#X msg 260 2444 @op5:detune \$1; +#X obj 12 2474 ui.number @size 60 12 @label op5:egL1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox75 @min 0 @max 99 @step 1; -#X msg 260 2476 @op5:egL1 \$1; -#X obj 12 2506 ui.number @size 60 12 @label op5:egL2: @label_side top +#X msg 260 2474 @op5:egL1 \$1; +#X obj 12 2504 ui.number @size 60 12 @label op5:egL2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox76 @min 0 @max 99 @step 1; -#X msg 260 2506 @op5:egL2 \$1; -#X obj 12 2536 ui.number @size 60 12 @label op5:egL3: @label_side top +#X msg 260 2504 @op5:egL2 \$1; +#X obj 12 2534 ui.number @size 60 12 @label op5:egL3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox77 @min 0 @max 99 @step 1; -#X msg 260 2536 @op5:egL3 \$1; -#X obj 12 2566 ui.number @size 60 12 @label op5:egL4: @label_side top +#X msg 260 2534 @op5:egL3 \$1; +#X obj 12 2564 ui.number @size 60 12 @label op5:egL4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox78 @min 0 @max 99 @step 1; -#X msg 260 2566 @op5:egL4 \$1; -#X obj 12 2596 ui.number @size 60 12 @label op5:egR1: @label_side top +#X msg 260 2564 @op5:egL4 \$1; +#X obj 12 2594 ui.number @size 60 12 @label op5:egR1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox79 @min 0 @max 99 @step 1; -#X msg 260 2596 @op5:egR1 \$1; -#X obj 12 2626 ui.number @size 60 12 @label op5:egR2: @label_side top +#X msg 260 2594 @op5:egR1 \$1; +#X obj 12 2624 ui.number @size 60 12 @label op5:egR2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox80 @min 0 @max 99 @step 1; -#X msg 260 2626 @op5:egR2 \$1; -#X obj 12 2656 ui.number @size 60 12 @label op5:egR3: @label_side top +#X msg 260 2624 @op5:egR2 \$1; +#X obj 12 2654 ui.number @size 60 12 @label op5:egR3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox81 @min 0 @max 99 @step 1; -#X msg 260 2656 @op5:egR3 \$1; -#X obj 12 2686 ui.number @size 60 12 @label op5:egR4: @label_side top +#X msg 260 2654 @op5:egR3 \$1; +#X obj 12 2684 ui.number @size 60 12 @label op5:egR4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox82 @min 0 @max 99 @step 1; -#X msg 260 2686 @op5:egR4 \$1; -#X obj 12 2716 ui.number @size 60 12 @label op5:freq: @label_side top +#X msg 260 2684 @op5:egR4 \$1; +#X obj 12 2714 ui.number @size 60 12 @label op5:freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox83 @min 0 @max 2 @step 0.01; -#X msg 260 2716 @op5:freq \$1; -#X obj 12 2746 ui.number @size 60 12 @label op5:key_vel_sens: +#X msg 260 2714 @op5:freq \$1; +#X obj 12 2744 ui.number @size 60 12 @label op5:key_vel_sens: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox84 @min 0 @max 8 @step 1; -#X msg 260 2746 @op5:key_vel_sens \$1; -#X obj 12 2776 ui.number @size 60 12 @label op5:level: @label_side top +#X msg 260 2744 @op5:key_vel_sens \$1; +#X obj 12 2774 ui.number @size 60 12 @label op5:level: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox85 @min 0 @max 99 @step 1; -#X msg 260 2776 @op5:level \$1; -#X obj 12 2806 ui.number @size 60 12 @label op5:mode: @label_side top +#X msg 260 2774 @op5:level \$1; +#X obj 12 2804 ui.number @size 60 12 @label op5:mode: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox86 @min 0 @max 1 @step 1; -#X msg 260 2806 @op5:mode \$1; -#X obj 12 2836 ui.number @size 60 12 @label op5:rate_scale: +#X msg 260 2804 @op5:mode \$1; +#X obj 12 2834 ui.number @size 60 12 @label op5:rate_scale: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/numbox87 @min 0 @max 10 @step 1; -#X msg 260 2836 @op5:rate_scale \$1; -#X obj 12 2868 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X msg 260 2834 @op5:rate_scale \$1; +#X obj 12 2864 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.dx7~/slider88 @min 24 @max 84; -#X obj 190 2868 sync; -#X obj 145 2868 ui.number @size 50 12 @min 24 @max 84 @digits 2; -#X msg 260 2868 @pitch \$1; +#X obj 215 2864 sync; +#X obj 145 2864 ui.number @size 50 12 @min 24 @max 84 @digits 2; +#X msg 260 2864 @pitch \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 89 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 0 0; -#X connect 3 0 10 0; -#X connect 12 0 13 0; -#X connect 13 0 0 0; -#X connect 3 1 12 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 2 14 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 91 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 89 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 90 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 0 0; -#X connect 3 3 18 0; +#X connect 5 0 18 0; #X connect 20 0 21 0; #X connect 21 0 0 0; -#X connect 3 4 20 0; +#X connect 5 1 20 0; #X connect 22 0 23 0; -#X connect 23 0 0 0; -#X connect 3 5 22 0; -#X connect 24 0 25 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 6 24 0; +#X connect 5 2 22 0; #X connect 26 0 27 0; #X connect 27 0 0 0; -#X connect 3 7 26 0; +#X connect 5 3 26 0; #X connect 28 0 29 0; #X connect 29 0 0 0; -#X connect 3 8 28 0; +#X connect 5 4 28 0; #X connect 30 0 31 0; #X connect 31 0 0 0; -#X connect 3 9 30 0; +#X connect 5 5 30 0; #X connect 32 0 33 0; #X connect 33 0 0 0; -#X connect 3 10 32 0; +#X connect 5 6 32 0; #X connect 34 0 35 0; #X connect 35 0 0 0; -#X connect 3 11 34 0; +#X connect 5 7 34 0; #X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 12 36 0; +#X connect 5 8 36 0; #X connect 38 0 39 0; #X connect 39 0 0 0; -#X connect 3 13 38 0; +#X connect 5 9 38 0; #X connect 40 0 41 0; #X connect 41 0 0 0; -#X connect 3 14 40 0; +#X connect 5 10 40 0; #X connect 42 0 43 0; #X connect 43 0 0 0; -#X connect 3 15 42 0; +#X connect 5 11 42 0; #X connect 44 0 45 0; #X connect 45 0 0 0; -#X connect 3 16 44 0; +#X connect 5 12 44 0; #X connect 46 0 47 0; #X connect 47 0 0 0; -#X connect 3 17 46 0; +#X connect 5 13 46 0; #X connect 48 0 49 0; #X connect 49 0 0 0; -#X connect 3 18 48 0; +#X connect 5 14 48 0; #X connect 50 0 51 0; #X connect 51 0 0 0; -#X connect 3 19 50 0; +#X connect 5 15 50 0; #X connect 52 0 53 0; #X connect 53 0 0 0; -#X connect 3 20 52 0; +#X connect 5 16 52 0; #X connect 54 0 55 0; #X connect 55 0 0 0; -#X connect 3 21 54 0; +#X connect 5 17 54 0; #X connect 56 0 57 0; #X connect 57 0 0 0; -#X connect 3 22 56 0; +#X connect 5 18 56 0; #X connect 58 0 59 0; #X connect 59 0 0 0; -#X connect 3 23 58 0; +#X connect 5 19 58 0; #X connect 60 0 61 0; #X connect 61 0 0 0; -#X connect 3 24 60 0; +#X connect 5 20 60 0; #X connect 62 0 63 0; #X connect 63 0 0 0; -#X connect 3 25 62 0; +#X connect 5 21 62 0; #X connect 64 0 65 0; #X connect 65 0 0 0; -#X connect 3 26 64 0; +#X connect 5 22 64 0; #X connect 66 0 67 0; #X connect 67 0 0 0; -#X connect 3 27 66 0; +#X connect 5 23 66 0; #X connect 68 0 69 0; #X connect 69 0 0 0; -#X connect 3 28 68 0; +#X connect 5 24 68 0; #X connect 70 0 71 0; #X connect 71 0 0 0; -#X connect 3 29 70 0; +#X connect 5 25 70 0; #X connect 72 0 73 0; #X connect 73 0 0 0; -#X connect 3 30 72 0; +#X connect 5 26 72 0; #X connect 74 0 75 0; #X connect 75 0 0 0; -#X connect 3 31 74 0; +#X connect 5 27 74 0; #X connect 76 0 77 0; #X connect 77 0 0 0; -#X connect 3 32 76 0; +#X connect 5 28 76 0; #X connect 78 0 79 0; #X connect 79 0 0 0; -#X connect 3 33 78 0; +#X connect 5 29 78 0; #X connect 80 0 81 0; #X connect 81 0 0 0; -#X connect 3 34 80 0; +#X connect 5 30 80 0; #X connect 82 0 83 0; #X connect 83 0 0 0; -#X connect 3 35 82 0; +#X connect 5 31 82 0; #X connect 84 0 85 0; #X connect 85 0 0 0; -#X connect 3 36 84 0; +#X connect 5 32 84 0; #X connect 86 0 87 0; #X connect 87 0 0 0; -#X connect 3 37 86 0; +#X connect 5 33 86 0; #X connect 88 0 89 0; #X connect 89 0 0 0; -#X connect 3 38 88 0; +#X connect 5 34 88 0; #X connect 90 0 91 0; #X connect 91 0 0 0; -#X connect 3 39 90 0; +#X connect 5 35 90 0; #X connect 92 0 93 0; #X connect 93 0 0 0; -#X connect 3 40 92 0; +#X connect 5 36 92 0; #X connect 94 0 95 0; #X connect 95 0 0 0; -#X connect 3 41 94 0; +#X connect 5 37 94 0; #X connect 96 0 97 0; #X connect 97 0 0 0; -#X connect 3 42 96 0; +#X connect 5 38 96 0; #X connect 98 0 99 0; #X connect 99 0 0 0; -#X connect 3 43 98 0; +#X connect 5 39 98 0; #X connect 100 0 101 0; #X connect 101 0 0 0; -#X connect 3 44 100 0; +#X connect 5 40 100 0; #X connect 102 0 103 0; #X connect 103 0 0 0; -#X connect 3 45 102 0; +#X connect 5 41 102 0; #X connect 104 0 105 0; #X connect 105 0 0 0; -#X connect 3 46 104 0; +#X connect 5 42 104 0; #X connect 106 0 107 0; #X connect 107 0 0 0; -#X connect 3 47 106 0; +#X connect 5 43 106 0; #X connect 108 0 109 0; #X connect 109 0 0 0; -#X connect 3 48 108 0; +#X connect 5 44 108 0; #X connect 110 0 111 0; #X connect 111 0 0 0; -#X connect 3 49 110 0; +#X connect 5 45 110 0; #X connect 112 0 113 0; #X connect 113 0 0 0; -#X connect 3 50 112 0; +#X connect 5 46 112 0; #X connect 114 0 115 0; #X connect 115 0 0 0; -#X connect 3 51 114 0; +#X connect 5 47 114 0; #X connect 116 0 117 0; #X connect 117 0 0 0; -#X connect 3 52 116 0; +#X connect 5 48 116 0; #X connect 118 0 119 0; #X connect 119 0 0 0; -#X connect 3 53 118 0; +#X connect 5 49 118 0; #X connect 120 0 121 0; #X connect 121 0 0 0; -#X connect 3 54 120 0; +#X connect 5 50 120 0; #X connect 122 0 123 0; #X connect 123 0 0 0; -#X connect 3 55 122 0; +#X connect 5 51 122 0; #X connect 124 0 125 0; #X connect 125 0 0 0; -#X connect 3 56 124 0; +#X connect 5 52 124 0; #X connect 126 0 127 0; #X connect 127 0 0 0; -#X connect 3 57 126 0; +#X connect 5 53 126 0; #X connect 128 0 129 0; #X connect 129 0 0 0; -#X connect 3 58 128 0; +#X connect 5 54 128 0; #X connect 130 0 131 0; #X connect 131 0 0 0; -#X connect 3 59 130 0; +#X connect 5 55 130 0; #X connect 132 0 133 0; #X connect 133 0 0 0; -#X connect 3 60 132 0; +#X connect 5 56 132 0; #X connect 134 0 135 0; #X connect 135 0 0 0; -#X connect 3 61 134 0; +#X connect 5 57 134 0; #X connect 136 0 137 0; #X connect 137 0 0 0; -#X connect 3 62 136 0; +#X connect 5 58 136 0; #X connect 138 0 139 0; #X connect 139 0 0 0; -#X connect 3 63 138 0; +#X connect 5 59 138 0; #X connect 140 0 141 0; #X connect 141 0 0 0; -#X connect 3 64 140 0; +#X connect 5 60 140 0; #X connect 142 0 143 0; #X connect 143 0 0 0; -#X connect 3 65 142 0; +#X connect 5 61 142 0; #X connect 144 0 145 0; #X connect 145 0 0 0; -#X connect 3 66 144 0; +#X connect 5 62 144 0; #X connect 146 0 147 0; #X connect 147 0 0 0; -#X connect 3 67 146 0; +#X connect 5 63 146 0; #X connect 148 0 149 0; #X connect 149 0 0 0; -#X connect 3 68 148 0; +#X connect 5 64 148 0; #X connect 150 0 151 0; #X connect 151 0 0 0; -#X connect 3 69 150 0; +#X connect 5 65 150 0; #X connect 152 0 153 0; #X connect 153 0 0 0; -#X connect 3 70 152 0; +#X connect 5 66 152 0; #X connect 154 0 155 0; #X connect 155 0 0 0; -#X connect 3 71 154 0; +#X connect 5 67 154 0; #X connect 156 0 157 0; #X connect 157 0 0 0; -#X connect 3 72 156 0; +#X connect 5 68 156 0; #X connect 158 0 159 0; #X connect 159 0 0 0; -#X connect 3 73 158 0; +#X connect 5 69 158 0; #X connect 160 0 161 0; #X connect 161 0 0 0; -#X connect 3 74 160 0; +#X connect 5 70 160 0; #X connect 162 0 163 0; #X connect 163 0 0 0; -#X connect 3 75 162 0; +#X connect 5 71 162 0; #X connect 164 0 165 0; #X connect 165 0 0 0; -#X connect 3 76 164 0; +#X connect 5 72 164 0; #X connect 166 0 167 0; #X connect 167 0 0 0; -#X connect 3 77 166 0; +#X connect 5 73 166 0; #X connect 168 0 169 0; #X connect 169 0 0 0; -#X connect 3 78 168 0; +#X connect 5 74 168 0; #X connect 170 0 171 0; #X connect 171 0 0 0; -#X connect 3 79 170 0; +#X connect 5 75 170 0; #X connect 172 0 173 0; #X connect 173 0 0 0; -#X connect 3 80 172 0; +#X connect 5 76 172 0; #X connect 174 0 175 0; #X connect 175 0 0 0; -#X connect 3 81 174 0; +#X connect 5 77 174 0; #X connect 176 0 177 0; #X connect 177 0 0 0; -#X connect 3 82 176 0; +#X connect 5 78 176 0; #X connect 178 0 179 0; #X connect 179 0 0 0; -#X connect 3 83 178 0; +#X connect 5 79 178 0; #X connect 180 0 181 0; #X connect 181 0 0 0; -#X connect 3 84 180 0; +#X connect 5 80 180 0; #X connect 182 0 183 0; #X connect 183 0 0 0; -#X connect 3 85 182 0; +#X connect 5 81 182 0; #X connect 184 0 185 0; #X connect 185 0 0 0; -#X connect 3 86 184 0; +#X connect 5 82 184 0; #X connect 186 0 187 0; #X connect 187 0 0 0; -#X connect 3 87 186 0; +#X connect 5 83 186 0; #X connect 188 0 189 0; -#X connect 189 0 188 0; -#X connect 190 0 189 1; -#X connect 189 1 190 0; -#X connect 188 0 191 0; +#X connect 189 0 0 0; +#X connect 5 84 188 0; +#X connect 190 0 191 0; #X connect 191 0 0 0; -#X connect 3 88 188 0; -#X coords 0 -1 1 1 200 2688 2 2 200; +#X connect 5 85 190 0; +#X connect 192 0 193 0; +#X connect 193 0 0 0; +#X connect 5 86 192 0; +#X connect 194 0 195 0; +#X connect 195 0 0 0; +#X connect 5 87 194 0; +#X connect 196 0 197 0; +#X connect 197 0 196 0; +#X connect 198 0 197 1; +#X connect 197 1 198 0; +#X connect 196 0 199 0; +#X connect 199 0 0 0; +#X connect 5 88 196 0; +#X coords 0 -1 1 1 200 2684 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.eguitar~.pd b/ceammc/ext/abstractions/gsynth.eguitar~.pd index 1364ac6fc5..6f641a08d1 100644 --- a/ceammc/ext/abstractions/gsynth.eguitar~.pd +++ b/ceammc/ext/abstractions/gsynth.eguitar~.pd @@ -1,78 +1,100 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.eguitar~; #X obj 325 25 inlet; -#X obj 325 200 route synth.eguitar; -#X obj 325 250 route @gain @gate @mute @pitch @pos; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.eguitar * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @gain @gate @mute @pitch @pos default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @gain @gate @mute @pitch @pos default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.eguitar~] unknown message; #X msg 225 75 @gain 1 \, @mute 0 \, @pitch 48 \, @pos 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 159 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.eguitar~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.eguitar~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @gain \$1; -#X obj 12 258 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @gain \$1; +#X obj 12 256 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 250 @gate \$1; -#X obj 12 288 ui.slider @size 125 12 @active_scale 1 @label mute: +#X msg 260 248 @gate \$1; +#X obj 12 284 ui.slider @size 125 12 @active_scale 1 @label mute: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.eguitar~/slider2 @min 0 @max 1; -#X obj 190 288 sync; -#X obj 145 288 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 288 @mute \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X obj 215 284 sync; +#X obj 145 284 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 284 @mute \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.eguitar~/slider3 @min 36 @max 84; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 36 @max 84 @digits 2; -#X msg 260 320 @pitch \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label pos: +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 36 @max 84 @digits 2; +#X msg 260 314 @pitch \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.eguitar~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @pos \$1; +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 344 @pos \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 5 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 7 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 5 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 0 0; -#X connect 3 1 14 0; -#X connect 16 0 17 0; -#X connect 17 0 16 0; -#X connect 18 0 17 1; -#X connect 17 1 18 0; -#X connect 16 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 16 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 6 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; #X connect 23 0 0 0; -#X connect 3 3 20 0; +#X connect 5 1 22 0; #X connect 24 0 25 0; #X connect 25 0 24 0; #X connect 26 0 25 1; #X connect 25 1 26 0; #X connect 24 0 27 0; #X connect 27 0 0 0; -#X connect 3 4 24 0; -#X coords 0 -1 1 1 200 172 2 2 200; +#X connect 5 2 24 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X connect 32 0 33 0; +#X connect 33 0 32 0; +#X connect 34 0 33 1; +#X connect 33 1 34 0; +#X connect 32 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 32 0; +#X coords 0 -1 1 1 200 164 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.english_bell~.pd b/ceammc/ext/abstractions/gsynth.english_bell~.pd index c337181c77..36216ac304 100644 --- a/ceammc/ext/abstractions/gsynth.english_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.english_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.english_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.english_bell; +#X obj 325 125 route synth.english_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.english_bell~] unknown message; #X msg 225 75 @cutoff 6500 \, @decay_ratio 1 \, @decay_slope 2.5 \, @gain 1 \, @pos 0 \, @sharp 0.5 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.english_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.english_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.french_bell~.pd b/ceammc/ext/abstractions/gsynth.french_bell~.pd index 7246cf38c8..6e2c5d0373 100644 --- a/ceammc/ext/abstractions/gsynth.french_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.french_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.french_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.french_bell; +#X obj 325 125 route synth.french_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.french_bell~] unknown message; #X msg 225 75 @cutoff 4000 \, @decay_ratio 1 \, @decay_slope 3 \, @gain 1 \, @pos 0 \, @sharp 0.25 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.french_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.french_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.german_bell~.pd b/ceammc/ext/abstractions/gsynth.german_bell~.pd index e978b1e62f..d76244777f 100644 --- a/ceammc/ext/abstractions/gsynth.german_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.german_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.german_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.german_bell; +#X obj 325 125 route synth.german_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.german_bell~] unknown message; #X msg 225 75 @cutoff 4000 \, @decay_ratio 1 \, @decay_slope 3 \, @gain 1 \, @pos 0 \, @sharp 0.25 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.german_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.german_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.glass_harm~.pd b/ceammc/ext/abstractions/gsynth.glass_harm~.pd index 3407d5a900..c4e2a73dce 100644 --- a/ceammc/ext/abstractions/gsynth.glass_harm~.pd +++ b/ceammc/ext/abstractions/gsynth.glass_harm~.pd @@ -1,173 +1,196 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.glass_harm~; #X obj 325 25 inlet; -#X obj 325 200 route synth.glass_harm; +#X obj 325 125 route synth.glass_harm * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @bow_press @gain @gate @integration @modfreq -@modtype @nonlin @pan @pitch @reverb_gain @room_size @strike @width; -#X obj 575 350 print unknown property; +@modtype @nonlin @pan @pitch @reverb_gain @room_size @strike @width +default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @bow_press @gain @gate @integration @modfreq @modtype @nonlin @pan @pitch @reverb_gain @room_size @strike @width default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.glass_harm~] unknown message; #X msg 225 75 @bow_press 0.2 \, @gain 1 \, @integration 0 \, @modfreq 220 \, @modtype 0 \, @nonlin 0 \, @pan 0.6 \, @pitch 48 \, @reverb_gain 0.137 \, @room_size 0.36 \, @strike 0 \, @width 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 399 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.glass_harm~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label bow_press: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label bow_press: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @bow_press \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @bow_press \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @gain \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @gain \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label integration: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @integration \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 314 @integration \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label modfreq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider4 @min 20 @max 1000; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 20 @max 1000 @digits 1; -#X msg 260 352 @modfreq \$1; -#X obj 12 382 ui.number @size 60 12 @label modtype: @label_side top +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 20 @max 1000 @digits 1; +#X msg 260 344 @modfreq \$1; +#X obj 12 374 ui.number @size 60 12 @label modtype: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/numbox5 @min 0 @max 4 @step 1; -#X msg 260 382 @modtype \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label nonlin: +#X msg 260 374 @modtype \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label nonlin: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider6 @min 0 @max 1; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 414 @nonlin \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label pan: +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @nonlin \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label pan: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider7 @min 0 @max 1; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 446 @pan \$1; -#X obj 12 478 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 434 @pan \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider8 @min 24 @max 96; -#X obj 190 478 sync; -#X obj 145 478 ui.number @size 50 12 @min 24 @max 96 @digits 2; -#X msg 260 478 @pitch \$1; -#X obj 12 510 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 24 @max 96 @digits 2; +#X msg 260 464 @pitch \$1; +#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label reverb_gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider9 @min 0 @max 1; -#X obj 190 510 sync; -#X obj 145 510 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 510 @reverb_gain \$1; -#X obj 12 542 ui.slider @size 125 12 @active_scale 1 @label room_size: +#X obj 215 494 sync; +#X obj 145 494 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 494 @reverb_gain \$1; +#X obj 12 524 ui.slider @size 125 12 @active_scale 1 @label room_size: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider10 @min 0.005 @max 1; -#X obj 190 542 sync; -#X obj 145 542 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; -#X msg 260 542 @room_size \$1; -#X obj 12 572 ui.number @size 60 12 @label strike: @label_side top +#X obj 215 524 sync; +#X obj 145 524 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; +#X msg 260 524 @room_size \$1; +#X obj 12 554 ui.number @size 60 12 @label strike: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/numbox11 @min 0 @max 1 @step 1; -#X msg 260 572 @strike \$1; -#X obj 12 604 ui.slider @size 125 12 @active_scale 1 @label width: +#X msg 260 554 @strike \$1; +#X obj 12 584 ui.slider @size 125 12 @active_scale 1 @label width: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.glass_harm~/slider12 @min 0 @max 1; -#X obj 190 604 sync; -#X obj 145 604 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 604 @width \$1; +#X obj 215 584 sync; +#X obj 145 584 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 584 @width \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 13 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 0 1 8 0; -#X connect 2 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; -#X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 3 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 3 1 15 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 15 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 13 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 14 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; #X connect 19 0 20 0; -#X connect 20 0 0 0; -#X connect 3 2 19 0; -#X connect 21 0 22 0; -#X connect 22 0 21 0; -#X connect 23 0 22 1; -#X connect 22 1 23 0; -#X connect 21 0 24 0; -#X connect 24 0 0 0; -#X connect 3 3 21 0; -#X connect 25 0 26 0; -#X connect 26 0 25 0; -#X connect 27 0 26 1; -#X connect 26 1 27 0; -#X connect 25 0 28 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 5 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 5 1 23 0; +#X connect 27 0 28 0; #X connect 28 0 0 0; -#X connect 3 4 25 0; +#X connect 5 2 27 0; #X connect 29 0 30 0; -#X connect 30 0 0 0; -#X connect 3 5 29 0; -#X connect 31 0 32 0; -#X connect 32 0 31 0; -#X connect 33 0 32 1; -#X connect 32 1 33 0; -#X connect 31 0 34 0; -#X connect 34 0 0 0; -#X connect 3 6 31 0; -#X connect 35 0 36 0; -#X connect 36 0 35 0; -#X connect 37 0 36 1; -#X connect 36 1 37 0; -#X connect 35 0 38 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X connect 30 1 31 0; +#X connect 29 0 32 0; +#X connect 32 0 0 0; +#X connect 5 3 29 0; +#X connect 33 0 34 0; +#X connect 34 0 33 0; +#X connect 35 0 34 1; +#X connect 34 1 35 0; +#X connect 33 0 36 0; +#X connect 36 0 0 0; +#X connect 5 4 33 0; +#X connect 37 0 38 0; #X connect 38 0 0 0; -#X connect 3 7 35 0; +#X connect 5 5 37 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 3 8 39 0; +#X connect 5 6 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 3 9 43 0; +#X connect 5 7 43 0; #X connect 47 0 48 0; #X connect 48 0 47 0; #X connect 49 0 48 1; #X connect 48 1 49 0; #X connect 47 0 50 0; #X connect 50 0 0 0; -#X connect 3 10 47 0; +#X connect 5 8 47 0; #X connect 51 0 52 0; -#X connect 52 0 0 0; -#X connect 3 11 51 0; -#X connect 53 0 54 0; -#X connect 54 0 53 0; -#X connect 55 0 54 1; -#X connect 54 1 55 0; -#X connect 53 0 56 0; -#X connect 56 0 0 0; -#X connect 3 12 53 0; -#X coords 0 -1 1 1 200 424 2 2 200; +#X connect 52 0 51 0; +#X connect 53 0 52 1; +#X connect 52 1 53 0; +#X connect 51 0 54 0; +#X connect 54 0 0 0; +#X connect 5 9 51 0; +#X connect 55 0 56 0; +#X connect 56 0 55 0; +#X connect 57 0 56 1; +#X connect 56 1 57 0; +#X connect 55 0 58 0; +#X connect 58 0 0 0; +#X connect 5 10 55 0; +#X connect 59 0 60 0; +#X connect 60 0 0 0; +#X connect 5 11 59 0; +#X connect 61 0 62 0; +#X connect 62 0 61 0; +#X connect 63 0 62 1; +#X connect 62 1 63 0; +#X connect 61 0 64 0; +#X connect 64 0 0 0; +#X connect 5 12 61 0; +#X coords 0 -1 1 1 200 404 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.harpsichord~.pd b/ceammc/ext/abstractions/gsynth.harpsichord~.pd index 1473dc7479..7a36e7fdde 100644 --- a/ceammc/ext/abstractions/gsynth.harpsichord~.pd +++ b/ceammc/ext/abstractions/gsynth.harpsichord~.pd @@ -1,127 +1,149 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.harpsichord~; #X obj 325 25 inlet; -#X obj 325 200 route synth.harpsichord; +#X obj 325 125 route synth.harpsichord * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @gate @modfreq @modtype @nonlin @pan @pitch -@reverb_gain @room_size @width; -#X obj 575 350 print unknown property; +@reverb_gain @room_size @width default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @gate @modfreq @modtype @nonlin @pan @pitch @reverb_gain @room_size @width default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.harpsichord~] unknown message; #X msg 225 75 @modfreq 220 \, @modtype 0 \, @nonlin 0 \, @pan 0.6 \, @pitch 48 \, @reverb_gain 0.137 \, @room_size 0.36 \, @width 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 279 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.harpsichord~] 3 9 0 12 -104026 -262144 0; #X obj 12 226 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; #X msg 260 218 @gate \$1; -#X obj 12 256 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 254 ui.slider @size 125 12 @active_scale 1 @label modfreq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider1 @min 20 @max 1000; -#X obj 190 256 sync; -#X obj 145 256 ui.number @size 50 12 @min 20 @max 1000 @digits 1; -#X msg 260 256 @modfreq \$1; -#X obj 12 286 ui.number @size 60 12 @label modtype: @label_side top +#X obj 215 254 sync; +#X obj 145 254 ui.number @size 50 12 @min 20 @max 1000 @digits 1; +#X msg 260 254 @modfreq \$1; +#X obj 12 284 ui.number @size 60 12 @label modtype: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/numbox2 @min 0 @max 4 @step 1; -#X msg 260 286 @modtype \$1; -#X obj 12 318 ui.slider @size 125 12 @active_scale 1 @label nonlin: +#X msg 260 284 @modtype \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label nonlin: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider3 @min 0 @max 1; -#X obj 190 318 sync; -#X obj 145 318 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 318 @nonlin \$1; -#X obj 12 350 ui.slider @size 125 12 @active_scale 1 @label pan: +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 314 @nonlin \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label pan: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider4 @min 0 @max 1; -#X obj 190 350 sync; -#X obj 145 350 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 350 @pan \$1; -#X obj 12 382 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 344 @pan \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider5 @min 12 @max 96; -#X obj 190 382 sync; -#X obj 145 382 ui.number @size 50 12 @min 12 @max 96 @digits 2; -#X msg 260 382 @pitch \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 12 @max 96 @digits 2; +#X msg 260 374 @pitch \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label reverb_gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider6 @min 0 @max 1; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 414 @reverb_gain \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label room_size: +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @reverb_gain \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label room_size: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider7 @min 0.005 @max 1; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; -#X msg 260 446 @room_size \$1; -#X obj 12 478 ui.slider @size 125 12 @active_scale 1 @label width: +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; +#X msg 260 434 @room_size \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label width: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.harpsichord~/slider8 @min 0 @max 1; -#X obj 190 478 sync; -#X obj 145 478 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 478 @width \$1; +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 464 @width \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 9 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 0 1 8 0; -#X connect 2 1 9 0; -#X connect 11 0 12 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 11 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 9 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; #X connect 12 0 0 0; -#X connect 3 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 13 0; -#X connect 15 0 14 1; -#X connect 14 1 15 0; -#X connect 13 0 16 0; -#X connect 16 0 0 0; -#X connect 3 1 13 0; -#X connect 17 0 18 0; -#X connect 18 0 0 0; -#X connect 3 2 17 0; +#X connect 5 10 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; #X connect 19 0 20 0; -#X connect 20 0 19 0; -#X connect 21 0 20 1; -#X connect 20 1 21 0; -#X connect 19 0 22 0; -#X connect 22 0 0 0; -#X connect 3 3 19 0; -#X connect 23 0 24 0; -#X connect 24 0 23 0; -#X connect 25 0 24 1; -#X connect 24 1 25 0; -#X connect 23 0 26 0; +#X connect 20 0 0 0; +#X connect 5 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 21 0; +#X connect 23 0 22 1; +#X connect 22 1 23 0; +#X connect 21 0 24 0; +#X connect 24 0 0 0; +#X connect 5 1 21 0; +#X connect 25 0 26 0; #X connect 26 0 0 0; -#X connect 3 4 23 0; +#X connect 5 2 25 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 3 5 27 0; +#X connect 5 3 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 3 6 31 0; +#X connect 5 4 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 3 7 35 0; +#X connect 5 5 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 3 8 39 0; -#X coords 0 -1 1 1 200 298 2 2 200; +#X connect 5 6 39 0; +#X connect 43 0 44 0; +#X connect 44 0 43 0; +#X connect 45 0 44 1; +#X connect 44 1 45 0; +#X connect 43 0 46 0; +#X connect 46 0 0 0; +#X connect 5 7 43 0; +#X connect 47 0 48 0; +#X connect 48 0 47 0; +#X connect 49 0 48 1; +#X connect 48 1 49 0; +#X connect 47 0 50 0; +#X connect 50 0 0 0; +#X connect 5 8 47 0; +#X coords 0 -1 1 1 200 284 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.hat~.pd b/ceammc/ext/abstractions/gsynth.hat~.pd new file mode 100644 index 0000000000..6935bc88e5 --- /dev/null +++ b/ceammc/ext/abstractions/gsynth.hat~.pd @@ -0,0 +1,100 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 synth.hat~; +#X obj 325 25 inlet; +#X obj 325 125 route synth.hat * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @freq @gate @release @tone default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @freq @gate @release @tone default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.hat~] unknown message; +#X msg 225 75 @attack 20 \, @freq 317 \, @release 100 \, @tone 6400 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 159 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [synth.hat~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label +attack(ms): @label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.hat~/slider0 @min 5 @max 400; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 5 @max 400 @digits 0; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.hat~/slider1 @min 300 @max 4000; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 300 @max 4000 @digits 0; +#X msg 260 266 @freq \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label +release(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.hat~/slider3 @min 5 @max 4000; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 5 @max 4000 @digits 0; +#X msg 260 314 @release \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label tone(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.hat~/slider4 @min 800 @max 18000; +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 800 @max 18000 @digits 0; +#X msg 260 344 @tone \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 7 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 5 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 6 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 26 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X connect 32 0 33 0; +#X connect 33 0 32 0; +#X connect 34 0 33 1; +#X connect 33 1 34 0; +#X connect 32 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 32 0; +#X coords 0 -1 1 1 200 164 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.kick2~.pd b/ceammc/ext/abstractions/gsynth.kick2~.pd new file mode 100644 index 0000000000..7b218a3af1 --- /dev/null +++ b/ceammc/ext/abstractions/gsynth.kick2~.pd @@ -0,0 +1,114 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 synth.kick2~; +#X obj 325 25 inlet; +#X obj 325 125 route synth.kick2 * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @click @drive @freq @gate @release +default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @click @drive @freq @gate @release default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.kick2~] unknown message; +#X msg 225 75 @attack 20 \, @click 20 \, @drive 2.5 \, @freq 44 \, @release 100 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 189 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [synth.kick2~] 3 9 0 12 -104026 +-262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label +attack(ms): @label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.kick2~/slider0 @min 5 @max 400; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 5 @max 400 @digits 0; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label click(ms): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.kick2~/slider1 @min 5 @max 1000; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 5 @max 1000 @digits 0; +#X msg 260 266 @click \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label drive: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.kick2~/slider2 @min 1 @max 10; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 1 @max 10 @digits 3; +#X msg 260 296 @drive \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.kick2~/slider3 @min 10 @max 5000; +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 10 @max 5000 @digits 0; +#X msg 260 326 @freq \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label +release(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.kick2~/slider5 @min 5 @max 4000; +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 5 @max 4000 @digits 0; +#X msg 260 374 @release \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 8 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 6 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 7 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 5 2 26 0; +#X connect 30 0 31 0; +#X connect 31 0 30 0; +#X connect 32 0 31 1; +#X connect 31 1 32 0; +#X connect 30 0 33 0; +#X connect 33 0 0 0; +#X connect 5 3 30 0; +#X connect 34 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; +#X connect 37 0 36 0; +#X connect 38 0 37 1; +#X connect 37 1 38 0; +#X connect 36 0 39 0; +#X connect 39 0 0 0; +#X connect 5 5 36 0; +#X coords 0 -1 1 1 200 194 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.kick~.pd b/ceammc/ext/abstractions/gsynth.kick~.pd index d87d66fe2f..aadf905fa9 100644 --- a/ceammc/ext/abstractions/gsynth.kick~.pd +++ b/ceammc/ext/abstractions/gsynth.kick~.pd @@ -1,65 +1,87 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.kick~; #X obj 325 25 inlet; -#X obj 325 200 route synth.kick; -#X obj 325 250 route @attack @freq @gate @release; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.kick * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @freq @gate @release default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @freq @gate @release default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.kick~] unknown message; #X msg 225 75 @attack 10 \, @freq 50 \, @release 1000 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 129 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.kick~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.kick~/slider0 @min 1 @max 50; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1 @max 50 @digits 2; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label freq(hz): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1 @max 50 @digits 2; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.kick~/slider1 @min 10 @max 5000; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 10 @max 5000 @digits 0; -#X msg 260 270 @freq \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 10 @max 5000 @digits 0; +#X msg 260 266 @freq \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.kick~/slider3 @min 10 @max 8000; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 10 @max 8000 @digits 0; -#X msg 260 320 @release \$1; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 10 @max 8000 @digits 0; +#X msg 260 314 @release \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 4 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 18 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; -#X connect 23 0 0 0; -#X connect 3 3 20 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 26 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X coords 0 -1 1 1 200 134 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.ks~.pd b/ceammc/ext/abstractions/gsynth.ks~.pd index 7f7aef0b20..86b2260930 100644 --- a/ceammc/ext/abstractions/gsynth.ks~.pd +++ b/ceammc/ext/abstractions/gsynth.ks~.pd @@ -1,118 +1,140 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.ks~; #X obj 325 25 inlet; -#X obj 325 200 route synth.ks; +#X obj 325 125 route synth.ks * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @gain @gate @mode @mute @pitch @pos -@sharp; -#X obj 575 350 print unknown property; -#X msg 225 75 @cutoff 1 \, @gain 1 \, @mode 0 \, @mute 0 \, @pitch 48 \, @pos 0.7 \, @sharp 0.25 \,; +@sharp default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @gain @gate @mode @mute @pitch @pos @sharp default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.ks~] unknown message; +#X msg 225 75 @cutoff 1 \, @gain 1 \, @mode 1 \, @mute 0 \, @pitch 48 \, @pos 0.7 \, @sharp 0.25 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.ks~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label cutoff: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider0 @min 0.1 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0.1 @max 1 @digits 4; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0.1 @max 1 @digits 4; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @gain \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @gain \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label mode: +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label mode: @label_side top @label_align left @fontsize 10 @presetname -/gui/\$1/synth.ks~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @mode \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label mute: +/gui/\$1/synth.ks~/slider3 @min 0 @max 2; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0 @max 2 @digits 0; +#X msg 260 314 @mode \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label mute: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @mute \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 344 @mute \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider5 @min 36 @max 84; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 36 @max 84 @digits 2; -#X msg 260 384 @pitch \$1; -#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label pos: +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 36 @max 84 @digits 2; +#X msg 260 374 @pitch \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider6 @min 0 @max 1; -#X obj 190 416 sync; -#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 416 @pos \$1; -#X obj 12 448 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @pos \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.ks~/slider7 @min 0.01 @max 1; -#X obj 190 448 sync; -#X obj 145 448 ui.number @size 50 12 @min 0.01 @max 1 @digits 4; -#X msg 260 448 @sharp \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.01 @max 1 @digits 4; +#X msg 260 434 @sharp \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 18 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; -#X connect 23 0 0 0; -#X connect 3 3 20 0; -#X connect 24 0 25 0; -#X connect 25 0 24 0; -#X connect 26 0 25 1; -#X connect 25 1 26 0; -#X connect 24 0 27 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; #X connect 27 0 0 0; -#X connect 3 4 24 0; +#X connect 5 2 26 0; #X connect 28 0 29 0; #X connect 29 0 28 0; #X connect 30 0 29 1; #X connect 29 1 30 0; #X connect 28 0 31 0; #X connect 31 0 0 0; -#X connect 3 5 28 0; +#X connect 5 3 28 0; #X connect 32 0 33 0; #X connect 33 0 32 0; #X connect 34 0 33 1; #X connect 33 1 34 0; #X connect 32 0 35 0; #X connect 35 0 0 0; -#X connect 3 6 32 0; +#X connect 5 4 32 0; #X connect 36 0 37 0; #X connect 37 0 36 0; #X connect 38 0 37 1; #X connect 37 1 38 0; #X connect 36 0 39 0; #X connect 39 0 0 0; -#X connect 3 7 36 0; -#X coords 0 -1 1 1 200 268 2 2 200; +#X connect 5 5 36 0; +#X connect 40 0 41 0; +#X connect 41 0 40 0; +#X connect 42 0 41 1; +#X connect 41 1 42 0; +#X connect 40 0 43 0; +#X connect 43 0 0 0; +#X connect 5 6 40 0; +#X connect 44 0 45 0; +#X connect 45 0 44 0; +#X connect 46 0 45 1; +#X connect 45 1 46 0; +#X connect 44 0 47 0; +#X connect 47 0 0 0; +#X connect 5 7 44 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.marimba~.pd b/ceammc/ext/abstractions/gsynth.marimba~.pd index e91d276d4a..b63b2ca04a 100644 --- a/ceammc/ext/abstractions/gsynth.marimba~.pd +++ b/ceammc/ext/abstractions/gsynth.marimba~.pd @@ -1,91 +1,114 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.marimba~; #X obj 325 25 inlet; -#X obj 325 200 route synth.marimba; -#X obj 325 250 route @cutoff @gain @gate @pitch @pos @sharp; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.marimba * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @cutoff @gain @gate @pitch @pos @sharp default +reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @gain @gate @pitch @pos @sharp default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.marimba~] unknown message; #X msg 225 75 @cutoff 7000 \, @gain 1 \, @pitch 48 \, @pos 0 \, @sharp 0.25 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 189 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.marimba~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label cutoff: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.marimba~/slider0 @min 1000 @max 10000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 1000 @max 10000 @digits 0; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 1000 @max 10000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.marimba~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @gain \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @gain \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.marimba~/slider3 @min 36 @max 84; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 36 @max 84 @digits 2; -#X msg 260 320 @pitch \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label pos: +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 36 @max 84 @digits 2; +#X msg 260 314 @pitch \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.marimba~/slider4 @min 0 @max 4; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 4 @digits 3; -#X msg 260 352 @pos \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 4 @digits 3; +#X msg 260 344 @pos \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.marimba~/slider5 @min 0.01 @max 1; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 0.01 @max 1 @digits 4; -#X msg 260 384 @sharp \$1; +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 0.01 @max 1 @digits 4; +#X msg 260 374 @sharp \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 6 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 8 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 6 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 7 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 18 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; -#X connect 23 0 0 0; -#X connect 3 3 20 0; -#X connect 24 0 25 0; -#X connect 25 0 24 0; -#X connect 26 0 25 1; -#X connect 25 1 26 0; -#X connect 24 0 27 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; #X connect 27 0 0 0; -#X connect 3 4 24 0; +#X connect 5 2 26 0; #X connect 28 0 29 0; #X connect 29 0 28 0; #X connect 30 0 29 1; #X connect 29 1 30 0; #X connect 28 0 31 0; #X connect 31 0 0 0; -#X connect 3 5 28 0; -#X coords 0 -1 1 1 200 204 2 2 200; +#X connect 5 3 28 0; +#X connect 32 0 33 0; +#X connect 33 0 32 0; +#X connect 34 0 33 1; +#X connect 33 1 34 0; +#X connect 32 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 32 0; +#X connect 36 0 37 0; +#X connect 37 0 36 0; +#X connect 38 0 37 1; +#X connect 37 1 38 0; +#X connect 36 0 39 0; +#X connect 39 0 0 0; +#X connect 5 5 36 0; +#X coords 0 -1 1 1 200 194 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.piano~.pd b/ceammc/ext/abstractions/gsynth.piano~.pd index cab56eebb7..80ef389342 100644 --- a/ceammc/ext/abstractions/gsynth.piano~.pd +++ b/ceammc/ext/abstractions/gsynth.piano~.pd @@ -1,146 +1,168 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.piano~; #X obj 325 25 inlet; -#X obj 325 200 route synth.piano; +#X obj 325 125 route synth.piano * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @brightness @detuning @gate @hammer_hardness @pan -@pitch @reverb_gain @room_size @stiffness @width; -#X obj 575 350 print unknown property; +@pitch @reverb_gain @room_size @stiffness @width default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @brightness @detuning @gate @hammer_hardness @pan @pitch @reverb_gain @room_size @stiffness @width default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.piano~] unknown message; #X msg 225 75 @brightness 0 \, @detuning 0.1 \, @hammer_hardness 0.1 \, @pan 0.6 \, @pitch 48 \, @reverb_gain 0.137 \, @room_size 0.36 \, @stiffness 0.28 \, @width 0.5 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 309 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.piano~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label brightness: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider0 @min 0 @max 1; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 238 @brightness \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label detuning: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 236 @brightness \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label detuning: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @detuning \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @detuning \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label hammer_hardness: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider3 @min 0 @max 1; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 320 @hammer_hardness \$1; -#X obj 12 352 ui.slider @size 125 12 @active_scale 1 @label pan: +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 314 @hammer_hardness \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label pan: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider4 @min 0 @max 1; -#X obj 190 352 sync; -#X obj 145 352 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 352 @pan \$1; -#X obj 12 384 ui.slider @size 125 12 @active_scale 1 @label pitch: +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 344 @pan \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label pitch: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider5 @min 21 @max 108; -#X obj 190 384 sync; -#X obj 145 384 ui.number @size 50 12 @min 21 @max 108 @digits 2; -#X msg 260 384 @pitch \$1; -#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 21 @max 108 @digits 2; +#X msg 260 374 @pitch \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label reverb_gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider6 @min 0 @max 1; -#X obj 190 416 sync; -#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 416 @reverb_gain \$1; -#X obj 12 448 ui.slider @size 125 12 @active_scale 1 @label room_size: +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 404 @reverb_gain \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label room_size: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider7 @min 0.005 @max 1; -#X obj 190 448 sync; -#X obj 145 448 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; -#X msg 260 448 @room_size \$1; -#X obj 12 480 ui.slider @size 125 12 @active_scale 1 @label stiffness: +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.005 @max 1 @digits 4; +#X msg 260 434 @room_size \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label stiffness: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider8 @min 0 @max 1; -#X obj 190 480 sync; -#X obj 145 480 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 480 @stiffness \$1; -#X obj 12 512 ui.slider @size 125 12 @active_scale 1 @label width: +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 464 @stiffness \$1; +#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label width: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.piano~/slider9 @min 0 @max 1; -#X obj 190 512 sync; -#X obj 145 512 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 512 @width \$1; +#X obj 215 494 sync; +#X obj 145 494 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 494 @width \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 10 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 0 1 8 0; -#X connect 2 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; -#X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 3 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 3 1 15 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 12 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 10 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 11 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; #X connect 19 0 20 0; -#X connect 20 0 0 0; -#X connect 3 2 19 0; -#X connect 21 0 22 0; -#X connect 22 0 21 0; -#X connect 23 0 22 1; -#X connect 22 1 23 0; -#X connect 21 0 24 0; -#X connect 24 0 0 0; -#X connect 3 3 21 0; -#X connect 25 0 26 0; -#X connect 26 0 25 0; -#X connect 27 0 26 1; -#X connect 26 1 27 0; -#X connect 25 0 28 0; +#X connect 20 0 19 0; +#X connect 21 0 20 1; +#X connect 20 1 21 0; +#X connect 19 0 22 0; +#X connect 22 0 0 0; +#X connect 5 0 19 0; +#X connect 23 0 24 0; +#X connect 24 0 23 0; +#X connect 25 0 24 1; +#X connect 24 1 25 0; +#X connect 23 0 26 0; +#X connect 26 0 0 0; +#X connect 5 1 23 0; +#X connect 27 0 28 0; #X connect 28 0 0 0; -#X connect 3 4 25 0; +#X connect 5 2 27 0; #X connect 29 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X connect 30 1 31 0; #X connect 29 0 32 0; #X connect 32 0 0 0; -#X connect 3 5 29 0; +#X connect 5 3 29 0; #X connect 33 0 34 0; #X connect 34 0 33 0; #X connect 35 0 34 1; #X connect 34 1 35 0; #X connect 33 0 36 0; #X connect 36 0 0 0; -#X connect 3 6 33 0; +#X connect 5 4 33 0; #X connect 37 0 38 0; #X connect 38 0 37 0; #X connect 39 0 38 1; #X connect 38 1 39 0; #X connect 37 0 40 0; #X connect 40 0 0 0; -#X connect 3 7 37 0; +#X connect 5 5 37 0; #X connect 41 0 42 0; #X connect 42 0 41 0; #X connect 43 0 42 1; #X connect 42 1 43 0; #X connect 41 0 44 0; #X connect 44 0 0 0; -#X connect 3 8 41 0; +#X connect 5 6 41 0; #X connect 45 0 46 0; #X connect 46 0 45 0; #X connect 47 0 46 1; #X connect 46 1 47 0; #X connect 45 0 48 0; #X connect 48 0 0 0; -#X connect 3 9 45 0; -#X coords 0 -1 1 1 200 332 2 2 200; +#X connect 5 7 45 0; +#X connect 49 0 50 0; +#X connect 50 0 49 0; +#X connect 51 0 50 1; +#X connect 50 1 51 0; +#X connect 49 0 52 0; +#X connect 52 0 0 0; +#X connect 5 8 49 0; +#X connect 53 0 54 0; +#X connect 54 0 53 0; +#X connect 55 0 54 1; +#X connect 54 1 55 0; +#X connect 53 0 56 0; +#X connect 56 0 0 0; +#X connect 5 9 53 0; +#X coords 0 -1 1 1 200 314 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.risset_arp~.pd b/ceammc/ext/abstractions/gsynth.risset_arp~.pd index ac85906980..8ce0cbabcf 100644 --- a/ceammc/ext/abstractions/gsynth.risset_arp~.pd +++ b/ceammc/ext/abstractions/gsynth.risset_arp~.pd @@ -1,166 +1,189 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.risset_arp~; #X obj 325 25 inlet; -#X obj 325 200 route synth.risset_arp; +#X obj 325 125 route synth.risset_arp * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @detune @freq @harmonic1 @harmonic2 @harmonic3 -@harmonic4 @harmonic5 @harmonic6 @harmonic7 @harmonic8 @spread; -#X obj 575 350 print unknown property; +@harmonic4 @harmonic5 @harmonic6 @harmonic7 @harmonic8 @spread default +reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @detune @freq @harmonic1 @harmonic2 @harmonic3 @harmonic4 @harmonic5 @harmonic6 @harmonic7 @harmonic8 @spread default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.risset_arp~] unknown message; #X msg 225 75 @detune 5 \, @freq 100 \, @harmonic1 1 \, @harmonic2 1 \, @harmonic3 1 \, @harmonic4 1 \, @harmonic5 1 \, @harmonic6 1 \, @harmonic7 1 \, @harmonic8 1 \, @spread 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet~; #X obj 700 550 outlet ctl; +#X obj 3 202 cnv 8 198 351 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.risset_arp~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label detune: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label detune: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider0 @min 0 @max 1000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0 @max 1000 @digits 1; -#X msg 260 238 @detune \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label freq: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 236 @detune \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider1 @min 40 @max 500; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 40 @max 500 @digits 1; -#X msg 260 270 @freq \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label harmonic1: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 40 @max 500 @digits 0; +#X msg 260 266 @freq \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label harmonic1: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider2 @min 0 @max 1; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 302 @harmonic1 \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label harmonic2: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 296 @harmonic1 \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label harmonic2: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @harmonic2 \$1; -#X obj 12 366 ui.slider @size 125 12 @active_scale 1 @label harmonic3: +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @harmonic2 \$1; +#X obj 12 356 ui.slider @size 125 12 @active_scale 1 @label harmonic3: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider4 @min 0 @max 1; -#X obj 190 366 sync; -#X obj 145 366 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 366 @harmonic3 \$1; -#X obj 12 398 ui.slider @size 125 12 @active_scale 1 @label harmonic4: +#X obj 215 356 sync; +#X obj 145 356 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 356 @harmonic3 \$1; +#X obj 12 386 ui.slider @size 125 12 @active_scale 1 @label harmonic4: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider5 @min 0 @max 1; -#X obj 190 398 sync; -#X obj 145 398 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 398 @harmonic4 \$1; -#X obj 12 430 ui.slider @size 125 12 @active_scale 1 @label harmonic5: +#X obj 215 386 sync; +#X obj 145 386 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 386 @harmonic4 \$1; +#X obj 12 416 ui.slider @size 125 12 @active_scale 1 @label harmonic5: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider6 @min 0 @max 1; -#X obj 190 430 sync; -#X obj 145 430 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 430 @harmonic5 \$1; -#X obj 12 462 ui.slider @size 125 12 @active_scale 1 @label harmonic6: +#X obj 215 416 sync; +#X obj 145 416 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 416 @harmonic5 \$1; +#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label harmonic6: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider7 @min 0 @max 1; -#X obj 190 462 sync; -#X obj 145 462 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 462 @harmonic6 \$1; -#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label harmonic7: +#X obj 215 446 sync; +#X obj 145 446 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 446 @harmonic6 \$1; +#X obj 12 476 ui.slider @size 125 12 @active_scale 1 @label harmonic7: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider8 @min 0 @max 1; -#X obj 190 494 sync; -#X obj 145 494 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 494 @harmonic7 \$1; -#X obj 12 526 ui.slider @size 125 12 @active_scale 1 @label harmonic8: +#X obj 215 476 sync; +#X obj 145 476 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 476 @harmonic7 \$1; +#X obj 12 506 ui.slider @size 125 12 @active_scale 1 @label harmonic8: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider9 @min 0 @max 1; -#X obj 190 526 sync; -#X obj 145 526 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 526 @harmonic8 \$1; -#X obj 12 558 ui.slider @size 125 12 @active_scale 1 @label spread: +#X obj 215 506 sync; +#X obj 145 506 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 506 @harmonic8 \$1; +#X obj 12 536 ui.slider @size 125 12 @active_scale 1 @label spread: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_arp~/slider10 @min 0 @max 1; -#X obj 190 558 sync; -#X obj 145 558 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 558 @spread \$1; +#X obj 215 536 sync; +#X obj 145 536 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 536 @spread \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 11 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 0 1 8 0; -#X connect 2 1 9 0; -#X connect 11 0 12 0; -#X connect 12 0 11 0; -#X connect 13 0 12 1; -#X connect 12 1 13 0; -#X connect 11 0 14 0; -#X connect 14 0 0 0; -#X connect 3 0 11 0; -#X connect 15 0 16 0; -#X connect 16 0 15 0; -#X connect 17 0 16 1; -#X connect 16 1 17 0; -#X connect 15 0 18 0; -#X connect 18 0 0 0; -#X connect 3 1 15 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 13 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 11 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 12 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 0 1 15 0; +#X connect 3 1 16 0; +#X connect 4 0 16 0; #X connect 19 0 20 0; #X connect 20 0 19 0; #X connect 21 0 20 1; #X connect 20 1 21 0; #X connect 19 0 22 0; #X connect 22 0 0 0; -#X connect 3 2 19 0; +#X connect 5 0 19 0; #X connect 23 0 24 0; #X connect 24 0 23 0; #X connect 25 0 24 1; #X connect 24 1 25 0; #X connect 23 0 26 0; #X connect 26 0 0 0; -#X connect 3 3 23 0; +#X connect 5 1 23 0; #X connect 27 0 28 0; #X connect 28 0 27 0; #X connect 29 0 28 1; #X connect 28 1 29 0; #X connect 27 0 30 0; #X connect 30 0 0 0; -#X connect 3 4 27 0; +#X connect 5 2 27 0; #X connect 31 0 32 0; #X connect 32 0 31 0; #X connect 33 0 32 1; #X connect 32 1 33 0; #X connect 31 0 34 0; #X connect 34 0 0 0; -#X connect 3 5 31 0; +#X connect 5 3 31 0; #X connect 35 0 36 0; #X connect 36 0 35 0; #X connect 37 0 36 1; #X connect 36 1 37 0; #X connect 35 0 38 0; #X connect 38 0 0 0; -#X connect 3 6 35 0; +#X connect 5 4 35 0; #X connect 39 0 40 0; #X connect 40 0 39 0; #X connect 41 0 40 1; #X connect 40 1 41 0; #X connect 39 0 42 0; #X connect 42 0 0 0; -#X connect 3 7 39 0; +#X connect 5 5 39 0; #X connect 43 0 44 0; #X connect 44 0 43 0; #X connect 45 0 44 1; #X connect 44 1 45 0; #X connect 43 0 46 0; #X connect 46 0 0 0; -#X connect 3 8 43 0; +#X connect 5 6 43 0; #X connect 47 0 48 0; #X connect 48 0 47 0; #X connect 49 0 48 1; #X connect 48 1 49 0; #X connect 47 0 50 0; #X connect 50 0 0 0; -#X connect 3 9 47 0; +#X connect 5 7 47 0; #X connect 51 0 52 0; #X connect 52 0 51 0; #X connect 53 0 52 1; #X connect 52 1 53 0; #X connect 51 0 54 0; #X connect 54 0 0 0; -#X connect 3 10 51 0; -#X coords 0 -1 1 1 200 378 2 2 200; +#X connect 5 8 51 0; +#X connect 55 0 56 0; +#X connect 56 0 55 0; +#X connect 57 0 56 1; +#X connect 56 1 57 0; +#X connect 55 0 58 0; +#X connect 58 0 0 0; +#X connect 5 9 55 0; +#X connect 59 0 60 0; +#X connect 60 0 59 0; +#X connect 61 0 60 1; +#X connect 60 1 61 0; +#X connect 59 0 62 0; +#X connect 62 0 0 0; +#X connect 5 10 59 0; +#X coords 0 -1 1 1 200 356 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.risset_bell~.pd b/ceammc/ext/abstractions/gsynth.risset_bell~.pd index 910cd02e0c..a193623ccb 100644 --- a/ceammc/ext/abstractions/gsynth.risset_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.risset_bell~.pd @@ -1,65 +1,87 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.risset_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.risset_bell; -#X obj 325 250 route @dur @freq @gate @pfreq; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.risset_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @dur @freq @gate @pfreq default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @dur @freq @gate @pfreq default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.risset_bell~] unknown message; #X msg 225 75 @dur 5000 \, @freq 440 \, @pfreq 1 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 129 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.risset_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label dur(ms): +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label dur(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_bell~/slider0 @min 10 @max 600000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 10 @max 600000 @digits 2; -#X msg 260 238 @dur \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 10 @max 600000 @digits 0; +#X msg 260 236 @dur \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_bell~/slider1 @min 1 @max 10000; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 10000 @digits 0; -#X msg 260 270 @freq \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 10000 @digits 0; +#X msg 260 266 @freq \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label pfreq: +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label pfreq: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_bell~/slider3 @min 0 @max 10; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 320 @pfreq \$1; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 314 @pfreq \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 4 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 18 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; -#X connect 23 0 0 0; -#X connect 3 3 20 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 26 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X coords 0 -1 1 1 200 134 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.risset_tone~.pd b/ceammc/ext/abstractions/gsynth.risset_tone~.pd index fefc10cf8d..2f4054e45c 100644 --- a/ceammc/ext/abstractions/gsynth.risset_tone~.pd +++ b/ceammc/ext/abstractions/gsynth.risset_tone~.pd @@ -1,59 +1,81 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.risset_tone~; #X obj 325 25 inlet; -#X obj 325 200 route synth.risset_tone; -#X obj 325 250 route @centroid @range @rate; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.risset_tone * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @centroid @range @rate default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @centroid @range @rate default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.risset_tone~] unknown message; #X msg 225 75 @centroid 60 \, @range 120 \, @rate 0.01 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 111 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.risset_tone~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label centroid: +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label centroid: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_tone~/slider0 @min 20 @max 120; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 120 @digits 2; -#X msg 260 238 @centroid \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label range: +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 120 @digits 2; +#X msg 260 236 @centroid \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label range: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_tone~/slider1 @min 1 @max 120; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 120 @digits 1; -#X msg 260 270 @range \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label rate: +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 120 @digits 1; +#X msg 260 266 @range \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label rate: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.risset_tone~/slider2 @min -2 @max 2; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min -2 @max 2 @digits 3; -#X msg 260 302 @rate \$1; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min -2 @max 2 @digits 3; +#X msg 260 296 @rate \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 3 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 5 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 3 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 4 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; -#X coords 0 -1 1 1 200 122 2 2 200; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 5 2 26 0; +#X coords 0 -1 1 1 200 116 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.russian_bell~.pd b/ceammc/ext/abstractions/gsynth.russian_bell~.pd index 9758489563..354e8b6bbb 100644 --- a/ceammc/ext/abstractions/gsynth.russian_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.russian_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.russian_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.russian_bell; +#X obj 325 125 route synth.russian_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.russian_bell~] unknown message; #X msg 225 75 @cutoff 4000 \, @decay_ratio 1 \, @decay_slope 3 \, @gain 1 \, @pos 0 \, @sharp 0.25 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.russian_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.russian_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.snare~.pd b/ceammc/ext/abstractions/gsynth.snare~.pd index 0f9f899575..bedf00a9c9 100644 --- a/ceammc/ext/abstractions/gsynth.snare~.pd +++ b/ceammc/ext/abstractions/gsynth.snare~.pd @@ -1,65 +1,87 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.snare~; #X obj 325 25 inlet; -#X obj 325 200 route synth.snare; -#X obj 325 250 route @attack @decay @gate @release; -#X obj 575 350 print unknown property; +#X obj 325 125 route synth.snare * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @decay @gate @release default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @decay @gate @release default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.snare~] unknown message; #X msg 225 75 @attack 0.5 \, @decay 1 \, @release 200 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 129 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.snare~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label attack(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.snare~/slider0 @min 0.3 @max 100; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 0.3 @max 100 @digits 2; -#X msg 260 238 @attack \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label decay(ms): +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0.3 @max 100 @digits 2; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.snare~/slider1 @min 1 @max 100; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 1 @max 100 @digits 2; -#X msg 260 270 @decay \$1; -#X obj 12 290 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 1 @max 100 @digits 2; +#X msg 260 266 @decay \$1; +#X obj 12 286 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 282 @gate \$1; -#X obj 12 320 ui.slider @size 125 12 @active_scale 1 @label +#X msg 260 278 @gate \$1; +#X obj 12 314 ui.slider @size 125 12 @active_scale 1 @label release(ms): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.snare~/slider3 @min 10 @max 1000; -#X obj 190 320 sync; -#X obj 145 320 ui.number @size 50 12 @min 10 @max 1000 @digits 1; -#X msg 260 320 @release \$1; +#X obj 215 314 sync; +#X obj 145 314 ui.number @size 50 12 @min 10 @max 1000 @digits 1; +#X msg 260 314 @release \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 4 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 6 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 4 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 5 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; -#X connect 19 0 0 0; -#X connect 3 2 18 0; -#X connect 20 0 21 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 21 1 22 0; -#X connect 20 0 23 0; -#X connect 23 0 0 0; -#X connect 3 3 20 0; -#X coords 0 -1 1 1 200 140 2 2 200; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 0 0; +#X connect 5 2 26 0; +#X connect 28 0 29 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 29 1 30 0; +#X connect 28 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 28 0; +#X coords 0 -1 1 1 200 134 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.standard_bell~.pd b/ceammc/ext/abstractions/gsynth.standard_bell~.pd index 2324b3f494..0ee8a5712e 100644 --- a/ceammc/ext/abstractions/gsynth.standard_bell~.pd +++ b/ceammc/ext/abstractions/gsynth.standard_bell~.pd @@ -1,112 +1,134 @@ #N canvas 0 0 950 600 12; #X obj 25 125 synth.standard_bell~; #X obj 325 25 inlet; -#X obj 325 200 route synth.standard_bell; +#X obj 325 125 route synth.standard_bell * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; #X obj 325 250 route @cutoff @decay_ratio @decay_slope @gain @gate -@pos @sharp @t60; -#X obj 575 350 print unknown property; +@pos @sharp @t60 default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @cutoff @decay_ratio @decay_slope @gain @gate @pos @sharp @t60 default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.standard_bell~] unknown message; #X msg 225 75 @cutoff 4000 \, @decay_ratio 1 \, @decay_slope 3 \, @gain 1 \, @pos 0 \, @sharp 0.25 \, @t60 20 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; #X obj 225 25 msg.onload; #X obj 500 550 outlet~; #X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 249 empty empty empty 17 7 0 10 -174763 -1 0; #X obj 3 202 cnv 8 198 18 empty empty [synth.standard_bell~] 3 9 0 12 -104026 -262144 0; -#X obj 12 238 ui.slider @size 125 12 @active_scale 1 @label +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label cutoff(Hz): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider0 @min 20 @max 20000; -#X obj 190 238 sync; -#X obj 145 238 ui.number @size 50 12 @min 20 @max 20000 @digits 1; -#X msg 260 238 @cutoff \$1; -#X obj 12 270 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 20 @max 20000 @digits 0; +#X msg 260 236 @cutoff \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label decay_ratio: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider1 @min 0 @max 1; -#X obj 190 270 sync; -#X obj 145 270 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 270 @decay_ratio \$1; -#X obj 12 302 ui.slider @size 125 12 @active_scale 1 @label +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 266 @decay_ratio \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label decay_slope: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider2 @min 0 @max 10; -#X obj 190 302 sync; -#X obj 145 302 ui.number @size 50 12 @min 0 @max 10 @digits 3; -#X msg 260 302 @decay_slope \$1; -#X obj 12 334 ui.slider @size 125 12 @active_scale 1 @label gain: +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 10 @digits 3; +#X msg 260 296 @decay_slope \$1; +#X obj 12 326 ui.slider @size 125 12 @active_scale 1 @label gain: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider3 @min 0 @max 1; -#X obj 190 334 sync; -#X obj 145 334 ui.number @size 50 12 @min 0 @max 1 @digits 4; -#X msg 260 334 @gain \$1; -#X obj 12 354 ui.toggle @size 12 12 @label gate @label_side right +#X obj 215 326 sync; +#X obj 145 326 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 326 @gain \$1; +#X obj 12 346 ui.toggle @size 12 12 @label gate @label_side right @label_align left @fontsize 10; -#X msg 260 346 @gate \$1; -#X obj 12 382 ui.number @size 60 12 @label pos: @label_side top +#X msg 260 338 @gate \$1; +#X obj 12 374 ui.number @size 60 12 @label pos: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/numbox5 @min 0 @max 6 @step 1; -#X msg 260 382 @pos \$1; -#X obj 12 414 ui.slider @size 125 12 @active_scale 1 @label sharp: +#X msg 260 374 @pos \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label sharp: @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider6 @min 0.01 @max 5; -#X obj 190 414 sync; -#X obj 145 414 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; -#X msg 260 414 @sharp \$1; -#X obj 12 446 ui.slider @size 125 12 @active_scale 1 @label t60(sec): +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0.01 @max 5 @digits 3; +#X msg 260 404 @sharp \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label t60(sec): @label_side top @label_align left @fontsize 10 @presetname /gui/\$1/synth.standard_bell~/slider7 @min 0.1 @max 30; -#X obj 190 446 sync; -#X obj 145 446 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; -#X msg 260 446 @t60 \$1; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 0.1 @max 30 @digits 2; +#X msg 260 434 @t60 \$1; #X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 8 4 0; -#X connect 5 0 3 0; -#X connect 6 0 5 0; -#X connect 0 0 7 0; -#X connect 2 1 8 0; -#X connect 10 0 11 0; -#X connect 11 0 10 0; -#X connect 12 0 11 1; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 10 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 8 10 0; #X connect 11 1 12 0; -#X connect 10 0 13 0; -#X connect 13 0 0 0; -#X connect 3 0 10 0; -#X connect 14 0 15 0; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 15 1 16 0; -#X connect 14 0 17 0; -#X connect 17 0 0 0; -#X connect 3 1 14 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 9 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; #X connect 18 0 19 0; #X connect 19 0 18 0; #X connect 20 0 19 1; #X connect 19 1 20 0; #X connect 18 0 21 0; #X connect 21 0 0 0; -#X connect 3 2 18 0; +#X connect 5 0 18 0; #X connect 22 0 23 0; #X connect 23 0 22 0; #X connect 24 0 23 1; #X connect 23 1 24 0; #X connect 22 0 25 0; #X connect 25 0 0 0; -#X connect 3 3 22 0; +#X connect 5 1 22 0; #X connect 26 0 27 0; -#X connect 27 0 0 0; -#X connect 3 4 26 0; -#X connect 28 0 29 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; #X connect 29 0 0 0; -#X connect 3 5 28 0; +#X connect 5 2 26 0; #X connect 30 0 31 0; #X connect 31 0 30 0; #X connect 32 0 31 1; #X connect 31 1 32 0; #X connect 30 0 33 0; #X connect 33 0 0 0; -#X connect 3 6 30 0; +#X connect 5 3 30 0; #X connect 34 0 35 0; -#X connect 35 0 34 0; -#X connect 36 0 35 1; -#X connect 35 1 36 0; -#X connect 34 0 37 0; +#X connect 35 0 0 0; +#X connect 5 4 34 0; +#X connect 36 0 37 0; #X connect 37 0 0 0; -#X connect 3 7 34 0; -#X coords 0 -1 1 1 200 266 2 2 200; +#X connect 5 5 36 0; +#X connect 38 0 39 0; +#X connect 39 0 38 0; +#X connect 40 0 39 1; +#X connect 39 1 40 0; +#X connect 38 0 41 0; +#X connect 41 0 0 0; +#X connect 5 6 38 0; +#X connect 42 0 43 0; +#X connect 43 0 42 0; +#X connect 44 0 43 1; +#X connect 43 1 44 0; +#X connect 42 0 45 0; +#X connect 45 0 0 0; +#X connect 5 7 42 0; +#X coords 0 -1 1 1 200 254 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.voice_fofc~.pd b/ceammc/ext/abstractions/gsynth.voice_fofc~.pd new file mode 100644 index 0000000000..2f78b44a5f --- /dev/null +++ b/ceammc/ext/abstractions/gsynth.voice_fofc~.pd @@ -0,0 +1,166 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 synth.voice_fofc~; +#X obj 325 25 inlet; +#X obj 325 125 route synth.voice_fofc * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @freq @fvowel @gate @ivoice @portamento +@release @vibr_freq @vibr_gain @wsmooth default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @freq @fvowel @gate @ivoice @portamento @release @vibr_freq @vibr_gain @wsmooth default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.voice_fofc~] unknown message; +#X msg 225 75 @attack 30 \, @freq 440 \, @fvowel 0 \, @ivoice 0 \, @portamento 0 \, @release 50 \, @vibr_freq 6 \, @vibr_gain 0.5 \, @wsmooth 10 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 309 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [synth.voice_fofc~] 3 9 0 12 +-104026 -262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label +attack(ms): @label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofc~/slider0 @min 0 @max 1000; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofc~/slider1 @min 20 @max 20000; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 266 @freq \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label fvowel: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofc~/slider2 @min 0 @max 4; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 4 @digits 3; +#X msg 260 296 @fvowel \$1; +#X obj 12 316 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 308 @gate \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label ivoice: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofc~/slider4 @min 0 @max 5; +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 5 @digits 3; +#X msg 260 344 @ivoice \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label +portamento(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofc~/slider5 @min 0 @max 4000; +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 0 @max 4000 @digits 0; +#X msg 260 374 @portamento \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label +release(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofc~/slider6 @min 0 @max 1000; +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 404 @release \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label +vibr_freq(Hz): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofc~/slider7 @min 1 @max 10; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 1 @max 10 @digits 3; +#X msg 260 434 @vibr_freq \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label vibr_gain: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofc~/slider8 @min 0 @max 1; +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 464 @vibr_gain \$1; +#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label +wsmooth(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofc~/slider9 @min 0 @max 1000; +#X obj 215 494 sync; +#X obj 145 494 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 494 @wsmooth \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 12 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 10 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 11 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 5 2 26 0; +#X connect 30 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 30 0; +#X connect 32 0 33 0; +#X connect 33 0 32 0; +#X connect 34 0 33 1; +#X connect 33 1 34 0; +#X connect 32 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 32 0; +#X connect 36 0 37 0; +#X connect 37 0 36 0; +#X connect 38 0 37 1; +#X connect 37 1 38 0; +#X connect 36 0 39 0; +#X connect 39 0 0 0; +#X connect 5 5 36 0; +#X connect 40 0 41 0; +#X connect 41 0 40 0; +#X connect 42 0 41 1; +#X connect 41 1 42 0; +#X connect 40 0 43 0; +#X connect 43 0 0 0; +#X connect 5 6 40 0; +#X connect 44 0 45 0; +#X connect 45 0 44 0; +#X connect 46 0 45 1; +#X connect 45 1 46 0; +#X connect 44 0 47 0; +#X connect 47 0 0 0; +#X connect 5 7 44 0; +#X connect 48 0 49 0; +#X connect 49 0 48 0; +#X connect 50 0 49 1; +#X connect 49 1 50 0; +#X connect 48 0 51 0; +#X connect 51 0 0 0; +#X connect 5 8 48 0; +#X connect 52 0 53 0; +#X connect 53 0 52 0; +#X connect 54 0 53 1; +#X connect 53 1 54 0; +#X connect 52 0 55 0; +#X connect 55 0 0 0; +#X connect 5 9 52 0; +#X coords 0 -1 1 1 200 314 2 2 200; diff --git a/ceammc/ext/abstractions/gsynth.voice_fofs~.pd b/ceammc/ext/abstractions/gsynth.voice_fofs~.pd new file mode 100644 index 0000000000..561a6132ee --- /dev/null +++ b/ceammc/ext/abstractions/gsynth.voice_fofs~.pd @@ -0,0 +1,166 @@ +#N canvas 0 0 950 600 12; +#X obj 25 125 synth.voice_fofs~; +#X obj 325 25 inlet; +#X obj 325 125 route synth.voice_fofs * .; +#X obj 525 150 route.prop; +#X obj 375 200 msg *; +#X obj 325 250 route @attack @freq @fvowel @gate @ivoice @portamento +@release @vibr_freq @vibr_gain @wsmooth default reset; +#X obj 575 350 t b a; +#X msg 575 375 supported messages are: @attack @freq @fvowel @gate @ivoice @portamento @release @vibr_freq @vibr_gain @wsmooth default reset; +#X obj 575 425 print; +#X obj 625 425 print [gsynth.voice_fofs~] unknown message; +#X msg 225 75 @attack 30 \, @freq 440 \, @fvowel 0 \, @ivoice 0 \, @portamento 0 \, @release 50 \, @vibr_freq 6 \, @vibr_gain 0.5 \, @wsmooth 10 \,; +#X obj 25 50 t b b; +#X msg 25 75 reset; +#X obj 225 25 msg.onload; +#X obj 500 550 outlet~; +#X obj 600 550 outlet ctl; +#X obj 3 202 cnv 8 198 309 empty empty empty 17 7 0 10 -174763 -1 0; +#X obj 3 202 cnv 8 198 18 empty empty [synth.voice_fofs~] 3 9 0 12 +-104026 -262144 0; +#X obj 12 236 ui.slider @size 125 12 @active_scale 1 @label +attack(ms): @label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofs~/slider0 @min 0 @max 1000; +#X obj 215 236 sync; +#X obj 145 236 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 236 @attack \$1; +#X obj 12 266 ui.slider @size 125 12 @active_scale 1 @label freq(Hz): +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofs~/slider1 @min 20 @max 20000; +#X obj 215 266 sync; +#X obj 145 266 ui.number @size 50 12 @min 20 @max 20000 @digits 1; +#X msg 260 266 @freq \$1; +#X obj 12 296 ui.slider @size 125 12 @active_scale 1 @label fvowel: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofs~/slider2 @min 0 @max 4; +#X obj 215 296 sync; +#X obj 145 296 ui.number @size 50 12 @min 0 @max 4 @digits 3; +#X msg 260 296 @fvowel \$1; +#X obj 12 316 ui.toggle @size 12 12 @label gate @label_side right +@label_align left @fontsize 10; +#X msg 260 308 @gate \$1; +#X obj 12 344 ui.slider @size 125 12 @active_scale 1 @label ivoice: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofs~/slider4 @min 0 @max 5; +#X obj 215 344 sync; +#X obj 145 344 ui.number @size 50 12 @min 0 @max 5 @digits 3; +#X msg 260 344 @ivoice \$1; +#X obj 12 374 ui.slider @size 125 12 @active_scale 1 @label +portamento(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofs~/slider5 @min 0 @max 4000; +#X obj 215 374 sync; +#X obj 145 374 ui.number @size 50 12 @min 0 @max 4000 @digits 0; +#X msg 260 374 @portamento \$1; +#X obj 12 404 ui.slider @size 125 12 @active_scale 1 @label +release(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofs~/slider6 @min 0 @max 1000; +#X obj 215 404 sync; +#X obj 145 404 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 404 @release \$1; +#X obj 12 434 ui.slider @size 125 12 @active_scale 1 @label +vibr_freq(Hz): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofs~/slider7 @min 1 @max 10; +#X obj 215 434 sync; +#X obj 145 434 ui.number @size 50 12 @min 1 @max 10 @digits 3; +#X msg 260 434 @vibr_freq \$1; +#X obj 12 464 ui.slider @size 125 12 @active_scale 1 @label vibr_gain: +@label_side top @label_align left @fontsize 10 @presetname +/gui/\$1/synth.voice_fofs~/slider8 @min 0 @max 1; +#X obj 215 464 sync; +#X obj 145 464 ui.number @size 50 12 @min 0 @max 1 @digits 4; +#X msg 260 464 @vibr_gain \$1; +#X obj 12 494 ui.slider @size 125 12 @active_scale 1 @label +wsmooth(ms): @label_side top @label_align left @fontsize 10 +@presetname /gui/\$1/synth.voice_fofs~/slider9 @min 0 @max 1000; +#X obj 215 494 sync; +#X obj 145 494 ui.number @size 50 12 @min 0 @max 1000 @digits 1; +#X msg 260 494 @wsmooth \$1; +#X connect 1 0 2 0; +#X connect 2 3 3 0; +#X connect 2 1 4 0; +#X connect 2 0 5 0; +#X connect 2 1 5 0; +#X connect 2 2 5 0; +#X connect 3 0 5 0; +#X connect 5 12 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 1 9 0; +#X connect 10 0 5 0; +#X connect 5 10 10 0; +#X connect 11 1 12 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 5 11 11 0; +#X connect 13 0 10 0; +#X connect 0 0 14 0; +#X connect 3 1 15 0; +#X connect 4 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 18 0; +#X connect 20 0 19 1; +#X connect 19 1 20 0; +#X connect 18 0 21 0; +#X connect 21 0 0 0; +#X connect 5 0 18 0; +#X connect 22 0 23 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 23 1 24 0; +#X connect 22 0 25 0; +#X connect 25 0 0 0; +#X connect 5 1 22 0; +#X connect 26 0 27 0; +#X connect 27 0 26 0; +#X connect 28 0 27 1; +#X connect 27 1 28 0; +#X connect 26 0 29 0; +#X connect 29 0 0 0; +#X connect 5 2 26 0; +#X connect 30 0 31 0; +#X connect 31 0 0 0; +#X connect 5 3 30 0; +#X connect 32 0 33 0; +#X connect 33 0 32 0; +#X connect 34 0 33 1; +#X connect 33 1 34 0; +#X connect 32 0 35 0; +#X connect 35 0 0 0; +#X connect 5 4 32 0; +#X connect 36 0 37 0; +#X connect 37 0 36 0; +#X connect 38 0 37 1; +#X connect 37 1 38 0; +#X connect 36 0 39 0; +#X connect 39 0 0 0; +#X connect 5 5 36 0; +#X connect 40 0 41 0; +#X connect 41 0 40 0; +#X connect 42 0 41 1; +#X connect 41 1 42 0; +#X connect 40 0 43 0; +#X connect 43 0 0 0; +#X connect 5 6 40 0; +#X connect 44 0 45 0; +#X connect 45 0 44 0; +#X connect 46 0 45 1; +#X connect 45 1 46 0; +#X connect 44 0 47 0; +#X connect 47 0 0 0; +#X connect 5 7 44 0; +#X connect 48 0 49 0; +#X connect 49 0 48 0; +#X connect 50 0 49 1; +#X connect 49 1 50 0; +#X connect 48 0 51 0; +#X connect 51 0 0 0; +#X connect 5 8 48 0; +#X connect 52 0 53 0; +#X connect 53 0 52 0; +#X connect 54 0 53 1; +#X connect 53 1 54 0; +#X connect 52 0 55 0; +#X connect 55 0 0 0; +#X connect 5 9 52 0; +#X coords 0 -1 1 1 200 314 2 2 200; diff --git a/ceammc/ext/benchmark/CMakeLists.txt b/ceammc/ext/benchmark/CMakeLists.txt index 6141e6207b..97474edfd4 100644 --- a/ceammc/ext/benchmark/CMakeLists.txt +++ b/ceammc/ext/benchmark/CMakeLists.txt @@ -1,9 +1,5 @@ -include_directories(${PROJECT_SOURCE_DIR}/src) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../extra) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src/lib) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src) - add_library(bm_main STATIC bm_main.cpp) +target_include_directories(bm_main PUBLIC ${PROJECT_SOURCE_DIR}/ceammc/extra) set(BM_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}") @@ -12,8 +8,27 @@ function(add_benchmark name) if(UNIX) target_compile_options(bm_${name} PRIVATE "-fPIC") endif() - target_link_libraries(bm_${name} bm_main ceammc_base - ceammc_list ceammc_array ceammc_data ceammc_core puredata-core) + + target_include_directories(bm_${name} + PRIVATE + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_SOURCE_DIR}/ceammc/ext/src + ${PROJECT_SOURCE_DIR}/ceammc/ext/src/lib + ) + + target_link_libraries(bm_${name} + PRIVATE + bm_main + ceammc_base + ceammc_list + ceammc_array + ceammc_net + ceammc_data + ceammc_core + puredata-core + fmt + re2 + ) set_property(TARGET bm_${name} APPEND_STRING PROPERTY LINK_FLAGS "${PD_EXTERNAL_LDFLAGS}") @@ -32,17 +47,13 @@ add_benchmark(control_externals) add_benchmark(core) add_benchmark(dataptr) add_benchmark(grain_expr) - - -# lowlevel tests -add_executable(bm_lowlevel bm_lowlevel.cpp) -target_link_libraries(bm_lowlevel bm_main puredata-core fmt) -target_link_libraries(bm_core re2) -target_include_directories(bm_core PRIVATE $) -target_include_directories(bm_core PRIVATE $) +add_benchmark(lowlevel) +add_benchmark(parse) + +# extra options +target_include_directories(bm_core + PRIVATE + $ + $ +) target_include_directories(bm_grain_expr PRIVATE ${PROJECT_SOURCE_DIR}/ceammc/ext/src/array) - -add_custom_target(benchmark_lowlevel - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bm_lowlevel -r html -o "${BM_HTML_DIR}/benchmark_lowlevel.html" - COMMAND open "${BM_HTML_DIR}/benchmark_lowlevel.html" - DEPENDS bm_lowlevel) diff --git a/ceammc/ext/benchmark/bm_atomlist.cpp b/ceammc/ext/benchmark/bm_atomlist.cpp index 946c0d6df8..113c9084fb 100644 --- a/ceammc/ext/benchmark/bm_atomlist.cpp +++ b/ceammc/ext/benchmark/bm_atomlist.cpp @@ -27,17 +27,17 @@ AtomList randomList(size_t n) } NONIUS_BENCHMARK("AtomList::sum", [] { - return randomList(100).sum(); + return randomList(100).view().sum(); }) NONIUS_BENCHMARK("AtomList::reduce +", [] { - return randomList(100).reduceFloat(0, [](t_float f0, t_float f1) { return f0 + f1; }); + return randomList(100).view().reduceFloat(0, [](t_float f0, t_float f1) { return f0 + f1; }); }) NONIUS_BENCHMARK("AtomList::product", [] { - return randomList(100).product(); + return randomList(100).view().product(); }) NONIUS_BENCHMARK("AtomList::reduce *", [] { - return randomList(100).reduceFloat(1, [](t_float f0, t_float f1) { return f0 * f1; }); + return randomList(100).view().reduceFloat(1, [](t_float f0, t_float f1) { return f0 * f1; }); }) diff --git a/ceammc/ext/benchmark/bm_core.cpp b/ceammc/ext/benchmark/bm_core.cpp index 4736b85457..c452eecb97 100644 --- a/ceammc/ext/benchmark/bm_core.cpp +++ b/ceammc/ext/benchmark/bm_core.cpp @@ -14,6 +14,7 @@ #include "ceammc_args.h" #include "ceammc_atomlist.h" #include "ceammc_atomlist_view.h" +#include "ceammc_crc32.h" #include "re2/re2.h" #include "reflex/matcher.h" @@ -60,8 +61,14 @@ static auto is_odd1 = [](int n) { return n % 2 == 1; }; static std::function is_odd2 = is_odd0; static std::function is_odd3 = is_odd1; -NONIUS_BENCHMARK("gensym", [] { - return gensym(SYM_TABLE[sym_int(engine)]); +NONIUS_BENCHMARK("gensym (x1000)", [] { + for (size_t i = 0; i < 1000; i++) + gensym(SYM_TABLE[sym_int(engine)]); +}) + +NONIUS_BENCHMARK("crc32 (x1000)", [] { + for (size_t i = 0; i < 1000; i++) + crc32_hash(SYM_TABLE[sym_int(engine)]); }) NONIUS_BENCHMARK("std::regex", [] { @@ -130,5 +137,3 @@ NONIUS_BENCHMARK("is_odd3: std::function lambda call", [] { return res; }) - - diff --git a/ceammc/ext/benchmark/bm_dataptr.cpp b/ceammc/ext/benchmark/bm_dataptr.cpp index 053eae2742..0e9e2b5c7b 100644 --- a/ceammc/ext/benchmark/bm_dataptr.cpp +++ b/ceammc/ext/benchmark/bm_dataptr.cpp @@ -28,7 +28,7 @@ class IntData : public AbstractData { { } - int type() const noexcept override + DataTypeId type() const noexcept override { return dataType; } @@ -46,15 +46,15 @@ class IntData : public AbstractData { return false; } - std::string toString() const override - { - return std::to_string(v_); - } + std::string toListStringContent() const override { return std::to_string(v_);} + std::string toDictStringContent() const override { return std::string("value: ") + std::to_string(v_); } + bool set(const AbstractData* d) noexcept override { return setDataT(d); } + - static const int dataType; + static const DataTypeId dataType; }; -const int IntData::dataType = DataStorage::instance().registerNewType("IntData"); +const DataTypeId IntData::dataType = DataStorage::instance().registerNewType("IntData"); using IntA = DataAtom; static void init(std::vector& vec) diff --git a/ceammc/ext/benchmark/bm_grain_expr.cpp b/ceammc/ext/benchmark/bm_grain_expr.cpp index cab3eb1653..dedffcb450 100644 --- a/ceammc/ext/benchmark/bm_grain_expr.cpp +++ b/ceammc/ext/benchmark/bm_grain_expr.cpp @@ -27,10 +27,10 @@ extern "C" void pd_init(); bool init_data() { pd_init(); - l0 = AtomList::parseString("@t 100"); - l1 = AtomList::parseString("@t abs(0.25*10.0)"); - l2 = AtomList::parseString("@t sin($pi/2)"); - l3 = AtomList::parseString("@t 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1"); + l0 = AtomList::parseString("@tb 100"); + l1 = AtomList::parseString("@tb abs(0.25*10.0)"); + l2 = AtomList::parseString("@tb sin($pi/2)"); + l3 = AtomList::parseString("@tb 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1"); GrainExprParser p; p.parse(l3.view()); @@ -49,29 +49,29 @@ NONIUS_BENCHMARK("GrainExprParser construct", [] { NONIUS_BENCHMARK("GrainExprParser parse string", [] { GrainExprParser p; - p.parse("@t +=100"); + p.parse("@ta +=100"); return 0; }) -NONIUS_BENCHMARK("GrainExprParser parse @t 100", [] { +NONIUS_BENCHMARK("GrainExprParser parse @tb 100", [] { GrainExprParser p; p.parse(l0.view()); return 0; }) -NONIUS_BENCHMARK("GrainExprParser parse @t abs(0.25*10.0)", [] { +NONIUS_BENCHMARK("GrainExprParser parse @tb abs(0.25*10.0)", [] { GrainExprParser p; p.parse(l1.view()); return 0; }) -NONIUS_BENCHMARK("GrainExprParser parse @t sin($pi/2)", [] { +NONIUS_BENCHMARK("GrainExprParser parse @tb sin($pi/2)", [] { GrainExprParser p; p.parse(l2.view()); return 0; }) -NONIUS_BENCHMARK("GrainExprParser parse @t 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1", [] { +NONIUS_BENCHMARK("GrainExprParser parse @tb 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1", [] { GrainExprParser p; p.parse(l3.view()); return 0; diff --git a/ceammc/ext/benchmark/bm_lowlevel.cpp b/ceammc/ext/benchmark/bm_lowlevel.cpp index 7e28e80895..1958efc7fb 100644 --- a/ceammc/ext/benchmark/bm_lowlevel.cpp +++ b/ceammc/ext/benchmark/bm_lowlevel.cpp @@ -12,9 +12,11 @@ * this file belongs to. *****************************************************************************/ -#include "fmt/include/fmt/format.h" +#include "fmt/include/fmt/core.h" +#include "ceammc_datatypes.h" #include +#include #include #include #include @@ -128,6 +130,47 @@ NONIUS_BENCHMARK("fmt::format @l%s", [] { return 0; }) +NONIUS_BENCHMARK("fmt::format_to @l%s (static_string)", [] { + ceammc::BoostStaticString<1024> buf; + fmt::format_to(std::back_inserter(buf), "@l{}", str[str_rand(gen)]); + return 0; +}) + +NONIUS_BENCHMARK("fmt::format_to @l%f (static_string)", [] { + ceammc::BoostStaticString<1024> buf; + fmt::format_to(std::back_inserter(buf), "@l{}", frand(gen)); + return 0; +}) + +NONIUS_BENCHMARK("fmt::format_to {:g} (static_string)", [] { + ceammc::BoostStaticString<1024> buf; + fmt::format_to(std::back_inserter(buf), "{:g}", frand(gen)); + return 0; +}) + +NONIUS_BENCHMARK("fmt::format_to {:g} (static_vector)", [] { + boost::container::static_vector buf; + fmt::format_to(std::back_inserter(buf), "{:g}", frand(gen)); + return 0; +}) + +NONIUS_BENCHMARK("fmt::format_to {} (static_string)", [] { + ceammc::BoostStaticString<1024> buf; + fmt::format_to(std::back_inserter(buf), "{}", frand(gen)); + return 0; +}) + +NONIUS_BENCHMARK("fmt::format {:g} (std::string)", [] { + std::string str = fmt::format("{:g}", frand(gen)); + return 0; +}) + +NONIUS_BENCHMARK("printf %g", [] { + char buf[1024]; + sprintf(buf, "%g", frand(gen)); + return 0; +}) + NONIUS_BENCHMARK("small element vector access", [] { auto x = rand_int_ptr(); std::find(s_vec.begin(), s_vec.end(), x); diff --git a/ceammc/ext/benchmark/bm_parse.cpp b/ceammc/ext/benchmark/bm_parse.cpp new file mode 100644 index 0000000000..769aaa06ac --- /dev/null +++ b/ceammc/ext/benchmark/bm_parse.cpp @@ -0,0 +1,97 @@ +/***************************************************************************** + * Copyright 2020 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "m_pd.h" +#include "net/parser_osc.h" +#include "nonius/nonius.h++" + +#include +#include + +extern "C" void pd_init(); + +using namespace ceammc; +using namespace ceammc::parser; + +constexpr auto URL_COUNT = 5; +const char* URL_LIST[URL_COUNT] = { + "osc.tcp://:1000", + "osc://:2000", + "osc.tcp://hostname.com:3000", + "osc://hostname.com:4000", + "osc://127.0.0.1", +}; + +std::default_random_engine gen(std::time(nullptr)); +std::uniform_int_distribution dist_url(0, URL_COUNT - 1); + +namespace { +char* lo_url_get_port2(const char* url) +{ + char* port = (char*)malloc(strlen(url)); + + if (sscanf(url, "osc://%*[^:]:%[0-9]", port) > 0) { + return port; + } + if (sscanf(url, "osc.%*[^:]://%*[^:]:%[0-9]", port) > 0) { + return port; + } + if (sscanf(url, "osc://[%*[^]]]:%[0-9]", port) > 0) { + return port; + } + if (sscanf(url, "osc.%*[^:]://[%*[^]]]:%[0-9]", port) > 0) { + return port; + } + if (sscanf(url, "osc://:%[0-9]", port) > 0) { + return port; + } + if (sscanf(url, "osc.%*[^:]://:%[0-9]", port) > 0) { + return port; + } + + /* doesnt look like an OSC URL with port number */ + free(port); + + return NULL; +} + +t_symbol* lo_url_get_port(const char* url) +{ + auto port = lo_url_get_port2(url); + if (port) { + auto sym = gensym(port); + free(port); + return sym; + } else + return &s_; +} + +inline const char* random_url() +{ + return URL_LIST[dist_url(gen)]; +} + +const bool init = []() { pd_init(); return true; }(); +} + +NONIUS_BENCHMARK("lo_url_get_port (sscanf)", [] { + lo_url_get_port(random_url()); +}) + +NONIUS_BENCHMARK("parse::parse_osc_url (ragel)", [] { + OscProto proto; + t_symbol* host; + t_symbol* path; + int port; + parse_osc_url(random_url(), proto, host, port, path); +}) diff --git a/ceammc/ext/ceammc_objects.txt b/ceammc/ext/ceammc_objects.txt index 78160939c8..0311b17263 100644 --- a/ceammc/ext/ceammc_objects.txt +++ b/ceammc/ext/ceammc_objects.txt @@ -32,11 +32,13 @@ an.onset~ an.pitchtrack~ an.rms~ an.tempo~ +an.zero~ and any->props apf->biquad approx array.bpm +array.circular array.circular~ array.convolve array.copy @@ -56,6 +58,7 @@ array.plot~ array.p~ array.r array.resample +array.risset_rythm~ array.rms array.s->p array.s2p @@ -68,6 +71,7 @@ array.sum2 array.variance array.vplay array.window +artnet.send bits->bang bits->int bits->note @@ -103,6 +107,8 @@ ceammc/==' ceammc/>' ceammc/>=' ceammc/>>' +ceammc/@-> +ceammc/@~> ceammc/^' ceammc/^2 ceammc/^2~ @@ -126,6 +132,7 @@ ceammc/cc->amp ceammc/cdiv~ ceammc/cexp~ ceammc/click~ +ceammc/clone: ceammc/cmul~ ceammc/dbfs->amp ceammc/dbfs->amp~ @@ -185,6 +192,7 @@ ceammc/msg ceammc/mux2~ ceammc/mux~ ceammc/notch->biquad +ceammc/note->guido ceammc/nsig~ ceammc/once ceammc/or @@ -202,12 +210,17 @@ ceammc/pol->car ceammc/pole->biquad ceammc/prepend ceammc/prop +ceammc/prop-> +ceammc/prop~> ceammc/rad->phase ceammc/rad->phase~ ceammc/radio ceammc/reject ceammc/reject_if ceammc/replace +ceammc/rhvoice~ +ceammc/round +ceammc/round~ ceammc/rtree->list ceammc/s->f~ ceammc/samp->ms @@ -245,6 +258,7 @@ ceammc/window ceammc/xdac~ ceammc/xfade2~ ceammc/xfade~ +ceammc/z~ ceammc/||' ceammc/~-> cexp~ @@ -255,6 +269,7 @@ chaos.logistic chaos.std0 chaos.std0~ click~ +clone: cmul~ conv.amp2dbfs conv.amp2dbfs~ @@ -282,6 +297,7 @@ conv.midi2freq conv.ms2bpm conv.ms2samp conv.ms2samp~ +conv.note2guido conv.phase2rad conv.phase2rad~ conv.pitch2midi @@ -403,6 +419,8 @@ flow.ring flow.route flow.sel flow.select +flow.seqdel +flow.seqdelay flow.space flow.speedlim flow.split @@ -410,6 +428,7 @@ flow.stack flow.sync flow.sync_pack flow.tee~ +flt.a-weight flt.biquad~ flt.bpf12~ flt.bpf24~ @@ -445,6 +464,8 @@ flt.median flt.moog_vcf~ flt.notch~ flt.resonbp~ +flt.resonhp~ +flt.resonlp~ fluid~ func func.call @@ -452,6 +473,7 @@ function function.call fx.bitdown~ fx.chorus~ +fx.dattorro~ fx.distortion1~ fx.distortion2~ fx.distortion3~ @@ -467,15 +489,18 @@ fx.freqshift~ fx.granulator~ fx.greyhole~ fx.infrev~ +fx.jcrev~ fx.looper~ fx.pitchshift_s~ fx.pitchshift~ fx.rb_pitchshift~ fx.recho~ fx.room~ +fx.satrev~ fx.sdelay~ fx.secho~ fx.shimmer~ +fx.stutter~ fx.tapiir~ fx.vocoder~ fx.wahwah~ @@ -517,12 +542,14 @@ hoa.rotate~ hoa.scope~ hoa.wider~ hpf->biquad +http.send hw.apple_smc hw.apple_sms hw.arduino hw.cpu_temp hw.display hw.kbd_light +hw.motu.avb hw.serial int->bits is_any @@ -535,9 +562,12 @@ is_float is_list is_odd is_pointer +is_prop is_symbol l->l l->l~ +lang.faust~ +lang.lua lfo.+pulse~ lfo.+saw~ lfo.+square~ @@ -591,18 +621,21 @@ list.integrator list.interleave list.last list.length +list.map list.max list.mean list.min list.minmax list.none_of list.normalize +list.pass list.pass_if list.prepend list.product list.r list.range list.reduce +list.reject list.remove list.remove_if list.repack @@ -781,6 +814,7 @@ metro.pattern metro.random metro.seq midi->freq +midi.arp midi.cc midi.clock midi.ctl->str @@ -795,9 +829,11 @@ midi.file midi.kbd midi.key->str midi.key2str +midi.modus midi.oct midi.prg->str midi.prg2str +midi.split midi.sustain midi.sysex midi.track @@ -822,11 +858,21 @@ music.v->m music.voice2midi mux2~ mux~ +net.artnet.send net.host->ip net.host2ip +net.http.send +net.osc +net.osc.r +net.osc.receive +net.osc.s +net.osc.send +net.osc.server noise.baker +noise.chua~ noise.clifford noise.collatz +noise.colored~ noise.crackle~ noise.duffing noise.ginger @@ -849,6 +895,7 @@ noise.torus noise.verhulst noise.white~ notch->biquad +note->guido nsig~ obj.info obj.props @@ -882,11 +929,14 @@ patch.tree path.basename path.dirname path.exists +path.file path.is_dir path.ls path.lsdir +path.monitor path.norm path.normalize +path.pattern path.search path.split phase->rad @@ -920,14 +970,19 @@ prop.set prop.split prop<- prop~> +proto.feelworld proto.firmata proto.hui +proto.inscore proto.midi proto.midi.casio proto.midi.cc proto.midi.sysex +proto.moppy proto.mpv proto.sp.alpaca +proto.vlc +proto.whammy proto.xtouch_ext rad->phase rad->phase~ @@ -946,8 +1001,22 @@ random.pw_lin reject reject_if replace +rhvoice~ +risset.gliss +round +round~ +route.any +route.b +route.bang route.f route.float +route.l +route.list +route.prop +route.r +route.random +route.s +route.symbol rtree->list rtree.to_list s->f~ @@ -989,6 +1058,7 @@ spat.zita6x8~ spat.zita8~ speech.flite speech.flite~ +speech.rhvoice~ speedlim split spring @@ -1035,6 +1105,7 @@ sync synth.bee3~ synth.birds~ synth.church_bell~ +synth.clap~ synth.dubdub~ synth.dx7~ synth.eguitar~ @@ -1045,6 +1116,8 @@ synth.german_bell~ synth.glass_harm~ synth.glitch~ synth.harpsichord~ +synth.hat~ +synth.kick2~ synth.kick~ synth.ks~ synth.marimba~ @@ -1059,6 +1132,8 @@ synth.sitar~ synth.snare~ synth.standard_bell~ synth.tube_bell~ +synth.voice_fofc~ +synth.voice_fofs~ synth.wurley~ system.colorpanel system.cursor @@ -1091,6 +1166,7 @@ ui.display ui.dsp~ ui.dt ui.env +ui.faust~ ui.filter ui.filter~ ui.gain2~ @@ -1129,6 +1205,7 @@ ui.radio ui.radio* ui.rsl ui.rslider +ui.s2d ui.scope~ ui.slider ui.slider2d @@ -1138,6 +1215,7 @@ ui.ssc~ ui.t ui.tab ui.toggle +ui.touchosc ui.vgain2~ ui.vgain~ ui.vk @@ -1154,6 +1232,7 @@ window xdac~ xfade2~ xfade~ +z~ ||' ~-> lang.faust~ diff --git a/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h b/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h index 77ea7296ad..8a219c7d82 100644 --- a/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h +++ b/ceammc/ext/class-wrapper/modules/matrix/iface_matrix.h @@ -1763,10 +1763,10 @@ class Matrix : public DataIFace { return "Matrix"; } - Result setFromList(const ceammc::AtomList& lst) override + Result setFromList(const ceammc::AtomListView& lv) override { try { - m_ = fromList(ceammc::list::extractByType(lst)).m_; + m_ = fromList(ceammc::list::extractByType(lv)).m_; } catch (std::exception& e) { return error(e.what()); } diff --git a/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h b/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h index 0cfc932a77..4fa679f228 100644 --- a/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h +++ b/ceammc/ext/class-wrapper/modules/numeric/iface_numeric.h @@ -452,12 +452,12 @@ class Complex : public DataIFace { return ok(); } - Result setFromList(const AtomList& l) override + Result setFromList(const ceammc::AtomListView& lv) override { - if (l.size() != 2) + if (lv.size() != 2) return error("IMAG REAL pair expected"); - v_ = std::complex(l[0].asFloat(), l[1].asFloat()); + v_ = std::complex(lv[0].asFloat(), lv[1].asFloat()); return ok(); } }; @@ -1036,35 +1036,35 @@ class Rational : public DataIFace { return setFromString(s->s_name); } - Result setFromList(const AtomList& l) override + Result setFromList(const ceammc::AtomListView& lv) override { - if (l.size() != 2) { - if (l.size() == 3) - return setFromString(to_string(l, "")); + if (lv.size() != 2) { + if (lv.size() == 3) + return setFromString(to_string(lv, "")); return error("NUM DEM pair expected"); } - if (!l[0].isInteger() || !l[1].isInteger()) { + if (!lv[0].isInteger() || !lv[1].isInteger()) { std::ostringstream ss; - ss << "natural values expected: " << l; + ss << "natural values expected: " << lv; return error(ss.str()); } - if (l[1].asInt() == 0) { + if (lv[1].asInt() == 0) { std::ostringstream ss; - ss << "invalid denominator value: " << l[1]; + ss << "invalid denominator value: " << lv[1]; return error(ss.str()); } - r_.assign(l[0].asInt(), l[1].asInt()); + r_.assign(lv[0].asInt(), lv[1].asInt()); return ok(); } - Result setFromAny(t_symbol* s, const AtomList& l) override + Result setFromAny(t_symbol* s, const AtomListView& lv) override { std::string str(s->s_name); - str += to_string(l, ""); + str += to_string(lv, ""); return setFromString(str); } }; diff --git a/ceammc/ext/class-wrapper/src/class_constructor.h b/ceammc/ext/class-wrapper/src/class_constructor.h index a8a034845e..8dcea7ca5b 100644 --- a/ceammc/ext/class-wrapper/src/class_constructor.h +++ b/ceammc/ext/class-wrapper/src/class_constructor.h @@ -86,10 +86,10 @@ class ClassConstructorCustom : public ceammc::BaseObject { onList(AtomList(s)); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { T data; - auto st = data.setFromPd(l); + auto st = data.setFromPd(lv); std::string err; if (!st.error(&err)) { data_ = TypedDataAtom(data); @@ -99,10 +99,10 @@ class ClassConstructorCustom : public ceammc::BaseObject { } } - void onAny(t_symbol* s, const AtomListView& l) override + void onAny(t_symbol* s, const AtomListView& lv) override { T data; - auto st = data.setFromAny(s, l); + auto st = data.setFromAny(s, lv); std::string err; if (!st.error(&err)) { data_ = TypedDataAtom(data); @@ -118,16 +118,16 @@ class ClassConstructorCustom : public ceammc::BaseObject { atomTo(0, data_); } - void m_set(t_symbol* s, const AtomListView& l) + void m_set(t_symbol* s, const AtomListView& lv) { - if (l.isData()) { - if (l.isA()) { - auto d = l.asD(); + if (lv.isData()) { + if (lv.isA()) { + auto d = lv.asD(); data_ = TypedDataAtom(*d); } } else { T data; - auto st = data.setFromPd(l); + auto st = data.setFromPd(lv); std::string err; if (!st.error(&err)) data_ = TypedDataAtom(data); diff --git a/ceammc/ext/class-wrapper/src/class_method.h b/ceammc/ext/class-wrapper/src/class_method.h index 91bfb43afd..01e16102c2 100644 --- a/ceammc/ext/class-wrapper/src/class_method.h +++ b/ceammc/ext/class-wrapper/src/class_method.h @@ -163,15 +163,15 @@ class ClassMethod : public BaseObject { } } - void onInlet(size_t n, const AtomListView& lst) override + void onInlet(size_t n, const AtomListView& lv) override { // find overloaded method first - int idx = tuple_utils::find_first(overload_args_, ArgumentMatchAndSet(lst)); + int idx = tuple_utils::find_first(overload_args_, ArgumentMatchAndSet(lv)); if (idx == MAIN_METHOD_CALL) { // overload not found InletArgSetter arg_setter(main_method_args_); // set specified argument - ErrorMsg err = arg_setter.setNthArg(n, lst); + ErrorMsg err = arg_setter.setNthArg(n, lv); if (err) OBJ_ERR << err.msg(); @@ -187,9 +187,9 @@ class ClassMethod : public BaseObject { dispatch(); } - void onList(const AtomList& lst) override + void onList(const AtomListView& lv) override { - Result res = data_.setFromList(lst); + Result res = data_.setFromList(lv); if (res.isOk()) { dispatch(); @@ -242,9 +242,9 @@ class ClassMethod : public BaseObject { } } - void onAny(t_symbol* s, const AtomListView& lst) override + void onAny(t_symbol* s, const AtomListView& lv) override { - Result res = data_.setFromAny(s, lst); + Result res = data_.setFromAny(s, lv); if (res.isOk()) { dispatch(); diff --git a/ceammc/ext/class-wrapper/src/class_static_method.h b/ceammc/ext/class-wrapper/src/class_static_method.h index 47d9224eac..3b5a73728f 100644 --- a/ceammc/ext/class-wrapper/src/class_static_method.h +++ b/ceammc/ext/class-wrapper/src/class_static_method.h @@ -81,9 +81,9 @@ class ClassStaticMethod : public ceammc::BaseObject { { pd_args_ = new ListProperty("@args"); pd_args_->setArgIndex(0); - pd_args_->setListCheckFn([this](const AtomList& l) { + pd_args_->setListCheckFn([this](const AtomListView& lv) { try { - atomListToArguments(l, arguments_); + atomListToArguments(lv, arguments_); return true; } catch (std::exception& e) { OBJ_ERR << "initial arguments error: " << e.what(); @@ -135,20 +135,20 @@ class ClassStaticMethod : public ceammc::BaseObject { onList(AtomList(Atom(s))); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - if (!processList(l)) + if (!processList(lv)) return; dispatch(); } - void onInlet(size_t n, const AtomListView& lst) override + void onInlet(size_t n, const AtomListView& lv) override { InletArgSetter arg_setter(arguments_); // note: InletArgSetter is designed for ClassMethod and has 1-based argument count // so we have to do correction by +1 - ErrorMsg err = arg_setter.setNthArg(n + 1, lst); + ErrorMsg err = arg_setter.setNthArg(n + 1, lv); if (err) OBJ_ERR << err.msg(); } @@ -163,13 +163,13 @@ class ClassStaticMethod : public ceammc::BaseObject { } template - bool processList(const typename std::enable_if::type& l) + bool processList(const typename std::enable_if::type& l) { return pd_args_->set(l); } template - bool processList(const typename std::enable_if::type& l) + bool processList(const typename std::enable_if::type& l) { if (l.size() != MethodTraits::nargs) { OBJ_ERR << "bad message: expecting " diff --git a/ceammc/ext/class-wrapper/src/data_iface.h b/ceammc/ext/class-wrapper/src/data_iface.h index 42bb9364db..5b780279aa 100644 --- a/ceammc/ext/class-wrapper/src/data_iface.h +++ b/ceammc/ext/class-wrapper/src/data_iface.h @@ -45,16 +45,13 @@ class Result : public boost::optional { Result(const std::string& errMsg, int code = 1); Result(); - operator bool() const - { - return rc_ == 0; - } + operator bool() const { return rc_ == 0; } /** * check for success * @return true if no error */ - bool isOk() const; + bool isOk() const { return rc_ == 0; } /** * check for error @@ -67,7 +64,7 @@ class Result : public boost::optional { /** * result code */ - int code() const; + int code() const { return rc_; } }; /** @@ -172,9 +169,9 @@ class DataIFace { * @param l - input list * @return operation result */ - virtual Result setFromList(const ceammc::AtomList& l) + virtual Result setFromList(const ceammc::AtomListView& lv) { - return Result(std::string("unexpected list: ") + ceammc::to_string(l), NOT_SUPPORTED); + return Result(std::string("unexpected list: ") + ceammc::to_string(lv), NOT_SUPPORTED); } /** @@ -183,17 +180,17 @@ class DataIFace { * @param l - message content * @return operation result */ - virtual Result setFromAny(t_symbol* s, const ceammc::AtomList& l) + virtual Result setFromAny(t_symbol* s, const ceammc::AtomListView& lv) { return Result("unexpected message", NOT_SUPPORTED); } /** * @brief set data value from PureData list - * @param lst - input list + * @param lv - input list * @return operation result */ - Result setFromPd(const ceammc::AtomList& lst); + Result setFromPd(const ceammc::AtomListView& lv); /** * @brief toJsonString diff --git a/ceammc/ext/class-wrapper/src/wrapper_datatype.cpp b/ceammc/ext/class-wrapper/src/wrapper_datatype.cpp index 5c03f9ac45..91a9c3fd2e 100644 --- a/ceammc/ext/class-wrapper/src/wrapper_datatype.cpp +++ b/ceammc/ext/class-wrapper/src/wrapper_datatype.cpp @@ -42,16 +42,6 @@ Result::Result() { } -bool Result::isOk() const -{ - return rc_ == 0; -} - -int Result::code() const -{ - return rc_; -} - bool Result::error(std::string* msg, int* code) const { if (rc_ == 0) @@ -101,29 +91,29 @@ std::string DataIFace::findFileName(const std::string& path) return ceammc::platform::pd_user_directory() + "/" + path2; } -Result DataIFace::setFromPd(const ceammc::AtomList& lst) +Result DataIFace::setFromPd(const ceammc::AtomListView& lv) { - if (lst.empty()) + if (lv.empty()) return error("empty list"); // try float first - if (lst.isFloat()) { - auto st = setFromFloat(lst[0].asFloat()); + if (lv.isFloat()) { + auto st = setFromFloat(lv[0].asFloat()); // ok or error if (st.code() != NOT_SUPPORTED) return st; } // try symbol second - if (lst.isSymbol()) { - auto st = setFromSymbol(lst[0].asSymbol()); + if (lv.isSymbol()) { + auto st = setFromSymbol(lv[0].asSymbol()); // ok or error if (st.code() != NOT_SUPPORTED) return st; } // try list - return setFromList(lst); + return setFromList(lv); } DataIFace::DataIFace() diff --git a/ceammc/ext/class-wrapper/src/wrapper_datatype.h b/ceammc/ext/class-wrapper/src/wrapper_datatype.h index 4c081e7ef5..b7f5184800 100644 --- a/ceammc/ext/class-wrapper/src/wrapper_datatype.h +++ b/ceammc/ext/class-wrapper/src/wrapper_datatype.h @@ -87,20 +87,34 @@ class AbstractDataWrapper : public AbstractData { /** * Data type */ - int type() const noexcept final { return AbstractDataWrapper::dataType; } + DataTypeId type() const noexcept final { return AbstractDataWrapper::dataType; } /** - * Polymorphic convertion to string + * Polymorphic convertsion to json string */ - std::string toString() const final { return value_.toString(); } + std::string toJsonString() const final { return value_.toJsonString(); } + + std::string toListStringContent() const override { return value_.toString(); } + std::string toDictStringContent() const override { return "value: " + value_.toString(); } + bool set(const AbstractData* d) noexcept override { return setWrapperData(d); } /** - * Polymorphic convertsion to json string + * Assign function: set data from pointer to other data + * @param d - pointer to real data + * @return true on success, false on error */ - std::string valueToJsonString() const final { return value_.toJsonString(); } + bool setWrapperData(const AbstractData* d) noexcept + { + if (!d || d->type() != AbstractDataWrapper::dataType) + return false; + + auto t = static_cast*>(d); + value_ = t->value_; + return true; + } public: - static const int dataType; + static const DataTypeId dataType; }; template @@ -158,11 +172,11 @@ AbstractDataWrapper& AbstractDataWrapper::operator=(AbstractDataWrapper&& } template -const int AbstractDataWrapper::dataType = ceammc::DataStorage::instance().registerNewType( +const DataTypeId AbstractDataWrapper::dataType = ceammc::DataStorage::instance().registerNewType( T::typeName(), - [](const AtomList& lst) -> Atom { + [](const AtomListView& lv) -> Atom { T data; - auto st = data.setFromPd(lst); + auto st = data.setFromPd(lv); std::string err; if (st.error(&err)) { LIB_ERR << err; diff --git a/ceammc/ext/class-wrapper/src/wrapper_tuple.h b/ceammc/ext/class-wrapper/src/wrapper_tuple.h index af78021156..c93446c1f5 100644 --- a/ceammc/ext/class-wrapper/src/wrapper_tuple.h +++ b/ceammc/ext/class-wrapper/src/wrapper_tuple.h @@ -341,7 +341,7 @@ template class TupleFromAtomlistT<0, nArgs, Args, FromAtomListConverter> { public: TupleFromAtomlistT(Args&) {} - void operator()(const AtomList&, size_t) {} + void operator()(const AtomListView&, size_t) {} }; class ArgumentTypePrinter { @@ -415,7 +415,7 @@ class ErrorMsg : boost::variant { }; struct Converter { - static size_t fromAtomList(float& out, const AtomList& l, size_t idx) + static size_t fromAtomList(float& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -424,7 +424,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(bool& out, const AtomList& l, size_t idx) + static size_t fromAtomList(bool& out, const AtomListView& l, size_t idx) { static t_symbol* SYM_TRUE = gensym("true"); static t_symbol* SYM_FALSE = gensym("false"); @@ -459,7 +459,7 @@ struct Converter { return 0; } - static size_t fromAtomList(double& out, const AtomList& l, size_t idx) + static size_t fromAtomList(double& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -468,7 +468,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(int& out, const AtomList& l, size_t idx) + static size_t fromAtomList(int& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -477,7 +477,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(unsigned int& out, const AtomList& l, size_t idx) + static size_t fromAtomList(unsigned int& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -490,7 +490,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(long& out, const AtomList& l, size_t idx) + static size_t fromAtomList(long& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -499,7 +499,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(unsigned long& out, const AtomList& l, size_t idx) + static size_t fromAtomList(unsigned long& out, const AtomListView& l, size_t idx) { if (l.size() <= idx || !l[idx].isFloat()) return 0; @@ -512,7 +512,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(std::vector& out, const AtomList& l, size_t idx) + static size_t fromAtomList(std::vector& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -524,7 +524,7 @@ struct Converter { return l.size() - idx; } - static size_t fromAtomList(std::vector& out, const AtomList& l, size_t idx) + static size_t fromAtomList(std::vector& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -536,7 +536,7 @@ struct Converter { return l.size() - idx; } - static size_t fromAtomList(std::vector& out, const AtomList& l, size_t idx) + static size_t fromAtomList(std::vector& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -548,7 +548,7 @@ struct Converter { return l.size() - idx; } - static size_t fromAtomList(std::vector& out, const AtomList& l, size_t idx) + static size_t fromAtomList(std::vector& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -560,7 +560,7 @@ struct Converter { return l.size() - idx; } - static size_t fromAtomList(std::string& out, const AtomList& l, size_t idx) + static size_t fromAtomList(std::string& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -573,16 +573,16 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(AtomList& out, const AtomList& l, size_t idx) + static size_t fromAtomList(AtomList& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; - out = l.slice(idx); + out = l.subView(idx); return l.size() - idx; } - static size_t fromAtomList(Atom& out, const AtomList& l, size_t idx) + static size_t fromAtomList(Atom& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -591,7 +591,7 @@ struct Converter { return idx + 1; } - static size_t fromAtomList(t_symbol*& out, const AtomList& l, size_t idx) + static size_t fromAtomList(t_symbol*& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -604,7 +604,7 @@ struct Converter { } template - static size_t fromAtomList(T& out, const AtomList& l, size_t idx) + static size_t fromAtomList(T& out, const AtomListView& l, size_t idx) { if (l.size() <= idx) return 0; @@ -620,7 +620,7 @@ struct Converter { return 0; } } else { - Result r = out.setFromPd(l.slice(idx)); + Result r = out.setFromPd(l.subView(idx)); std::string msg; if (r.error(&msg)) { @@ -643,12 +643,12 @@ class InletArgFromAtomList { { } - ErrorMsg setNthArg(size_t n, const AtomListView& lst) + ErrorMsg setNthArg(size_t n, const AtomListView& lv) { try { if (n < N) { InletArgFromAtomList tail = InletArgFromAtomList(args_); - return tail.setNthArg(n, lst); + return tail.setNthArg(n, lv); } else if (n > N) { std::ostringstream s; s << "invalid inlet number: " << n; @@ -657,7 +657,7 @@ class InletArgFromAtomList { auto& nth_arg = std::get(args_); using ArgType = typename std::remove_const::type; - ErrorMsg err = inletArgFromAtomList((ArgType&)nth_arg, lst); + ErrorMsg err = inletArgFromAtomList((ArgType&)nth_arg, lv); if (err) return err; @@ -670,32 +670,32 @@ class InletArgFromAtomList { } public: - static ErrorMsg inletArgFromAtomList(float& f, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(float& f, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("float value expected"); - f = lst.asFloat(); + f = lv.asFloat(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(double& f, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(double& f, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("float value expected"); - f = lst.asFloat(); + f = lv.asFloat(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(bool& b, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(bool& b, const AtomListView& lv) { static t_symbol* SYM_TRUE = gensym("true"); static t_symbol* SYM_FALSE = gensym("false"); - if (!lst.isFloat()) { - if (lst.isSymbol()) { - t_symbol* s = lst[0].asSymbol(); + if (!lv.isFloat()) { + if (lv.isSymbol()) { + t_symbol* s = lv[0].asSymbol(); if (s == SYM_TRUE) b = true; else if (s == SYM_FALSE) @@ -705,7 +705,7 @@ class InletArgFromAtomList { } } - t_float f = lst[0].asFloat(); + t_float f = lv[0].asFloat(); if (f == 0) b = false; else if (f == 1) @@ -718,141 +718,141 @@ class InletArgFromAtomList { return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(int& i, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(int& i, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("integer value expected"); - i = lst.asInt(); + i = lv.asInt(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lv) { v.clear(); - for (auto& e : lst) + for (auto& e : lv) v.push_back(e.asFloat()); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lv) { v.clear(); - for (auto& e : lst) + for (auto& e : lv) v.push_back(e.asFloat()); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lv) { v.clear(); - for (auto& e : lst) + for (auto& e : lv) v.push_back(e.asFloat()); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(std::vector& v, const AtomListView& lv) { v.clear(); - for (auto& e : lst) + for (auto& e : lv) v.push_back(ceammc::to_string(e)); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(unsigned int& i, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(unsigned int& i, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("integer value expected"); - if (lst[0].asFloat() < 0) { + if (lv[0].asFloat() < 0) { std::ostringstream ss; - ss << "non-negative value expected: " << lst[0].asFloat(); + ss << "non-negative value expected: " << lv[0].asFloat(); return ErrorMsg::err(ss.str()); } - i = lst.asInt(); + i = lv.asInt(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(long& i, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(long& i, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("integer value expected"); - i = lst.asInt(); + i = lv.asInt(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(unsigned long& i, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(unsigned long& i, const AtomListView& lv) { - if (!lst.isFloat()) + if (!lv.isFloat()) return ErrorMsg::err("integer value expected"); - if (lst[0].asFloat() < 0) { + if (lv[0].asFloat() < 0) { std::ostringstream ss; - ss << "non-negative value expected: " << lst[0].asFloat(); + ss << "non-negative value expected: " << lv[0].asFloat(); return ErrorMsg::err(ss.str()); } - i = lst.asInt(); + i = lv.asInt(); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(std::string& str, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(std::string& str, const AtomListView& lv) { - str = ceammc::to_string(lst, " "); + str = ceammc::to_string(lv, " "); return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(Atom& a, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(Atom& a, const AtomListView& lv) { - if (lst.size() != 1) { + if (lv.size() != 1) { std::ostringstream ss; - ss << "single atom expected: " << lst; + ss << "single atom expected: " << lv; return ErrorMsg::err(ss.str()); } - a = lst[0]; + a = lv[0]; return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(AtomList& l, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(AtomList& l, const AtomListView& lv) { - l = lst; + l = lv; return ErrorMsg::ok(); } - static ErrorMsg inletArgFromAtomList(t_symbol*& s, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(t_symbol*& s, const AtomListView& lv) { - if (lst.size() != 1 || !lst[0].isSymbol()) { + if (lv.size() != 1 || !lv[0].isSymbol()) { std::ostringstream ss; - ss << "symbol expected: " << lst; + ss << "symbol expected: " << lv; return ErrorMsg::err(ss.str()); } - s = lst[0].asSymbol(); + s = lv[0].asSymbol(); return ErrorMsg::ok(); } template - static ErrorMsg inletArgFromAtomList(T& t, const AtomListView& lst) + static ErrorMsg inletArgFromAtomList(T& t, const AtomListView& lv) { // list initializers - if (!lst.isData()) { - Result res = t.setFromPd(lst); + if (!lv.isData()) { + Result res = t.setFromPd(lv); return ErrorMsg::ok(); } // data atom initializer - Atom datom(lst.at(0)); + Atom datom(lv.at(0)); if (!datom.isData()) return ErrorMsg::err("invalid data pointer"); @@ -879,7 +879,7 @@ class ArgumentInitializer { { } - void parse(const AtomList& src, size_t from) + void parse(const AtomListView& src, size_t from) { constexpr size_t N = std::tuple_size::value; TupleFromAtomlistT proc(args_); @@ -888,10 +888,10 @@ class ArgumentInitializer { }; template -static bool atomListToArguments(const AtomList& lst, typename FunctionTraits::arguments& args) +static bool atomListToArguments(const AtomListView& lv, typename FunctionTraits::arguments& args) { ArgumentInitializer::arguments> arg_parser(args); - arg_parser.parse(lst, 0); + arg_parser.parse(lv, 0); return true; } @@ -899,7 +899,7 @@ template class InletArgFromAtomList<0, Args> { public: InletArgFromAtomList(Args&) {} - ErrorMsg setNthArg(size_t n, const AtomList&) { return ErrorMsg::ok(); } + ErrorMsg setNthArg(size_t n, const AtomListView&) { return ErrorMsg::ok(); } }; struct ArgumentMatchAndSet { diff --git a/ceammc/ext/core_objects.txt b/ceammc/ext/core_objects.txt index 45dc2e3291..569be36f3c 100644 --- a/ceammc/ext/core_objects.txt +++ b/ceammc/ext/core_objects.txt @@ -81,6 +81,23 @@ exp~ f fexpr~ fft~ +file +file copy +file define +file delete +file glob +file handle +file isdirectory +file isfile +file join +file mkdir +file move +file size +file split +file splitext +file splitname +file stat +file which filledcurve filledpolygon framp~ @@ -247,6 +264,7 @@ timer toggle touchin touchout +trace trigger unpack until diff --git a/ceammc/ext/doc/CMakeLists.txt b/ceammc/ext/doc/CMakeLists.txt index fdf82c8c48..7a461fc811 100644 --- a/ceammc/ext/doc/CMakeLists.txt +++ b/ceammc/ext/doc/CMakeLists.txt @@ -193,6 +193,8 @@ add_custom_target(pddoc_faust_files SOURCES ${_PDDOC_FAUST_FILES}) install(DIRECTORY hoa DESTINATION ${DOC_INSTALL_PATH}) install(DIRECTORY faust DESTINATION ${DOC_INSTALL_PATH}) +add_subdirectory(lua) +add_subdirectory(midi) add_subdirectory(sound) add_subdirectory(sf2) add_subdirectory(sfz) diff --git a/ceammc/ext/doc/an.onset-help.pd b/ceammc/ext/doc/an.onset-help.pd index d8ae207ea4..faa5703aeb 100644 --- a/ceammc/ext/doc/an.onset-help.pd +++ b/ceammc/ext/doc/an.onset-help.pd @@ -65,96 +65,96 @@ hfc \, energy \, complex \, phase \, wphase \, specdiff \, kl \, mkl \, specflux. . Type: symbol.; #X text 110 691 4\.; #X text 150 691 int; -#X obj 246 692 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 691 HS: hop size (by default buffer_size/2). Type: int. -Min value: 0; +#X obj 246 692 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 691 HS(samp): hop size (by default buffer_size/2). Type: +int. Min value: 0; #X obj 20 736 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 741 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 776 @array; #X text 245 776 Get/Set name of analyzed array. Type: symbol.; #X msg 110 805 @awhitening; -#X text 245 805 Get/Set adaptive whitening. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 847 @bs; -#X text 245 847 Get/Set buffer size. Type: int. Units: samp. Default -value: 1024\. Min value: 64\.; -#X msg 110 889 @complex; -#X text 245 889 alias to @method complex. Complex Domain Method onset +#X text 245 805 Get/Set adaptive whitening. Type: bool. Default value: +0\.; +#X msg 110 834 @bs; +#X text 245 834 (initonly) Get/Set buffer size. Type: int. Units: samp. +Default value: 1024\. Min value: 64\.; +#X msg 110 876 @complex; +#X text 245 876 alias to @method complex. Complex Domain Method onset detection function.; -#X msg 110 931 @compression; -#X text 245 931 Get/Set lambda logarithmic compression factor \, 0 +#X msg 110 918 @compression; +#X text 245 918 Get/Set lambda logarithmic compression factor \, 0 to disable. Type: float. Default value: 1\. Min value: 0\.; -#X msg 110 973 @delay; -#X text 245 973 Get/Set constant system delay to take back from detection +#X msg 110 960 @delay; +#X text 245 960 Get/Set constant system delay to take back from detection time. Type: float. Units: ms. Default value: 49.9093\. Min value: 0\.; -#X msg 110 1030 @energy; -#X text 245 1030 alias to @method energy. Energy based onset detection +#X msg 110 1017 @energy; +#X text 245 1017 alias to @method energy. Energy based onset detection function.; -#X msg 110 1072 @hfc; -#X text 245 1072 alias to @method hfc. High Frequency Content onset +#X msg 110 1059 @hfc; +#X text 245 1059 alias to @method hfc. High Frequency Content onset detection.; -#X msg 110 1101 @hs; -#X text 245 1101 Get/Set hop size. 0 means @bs/2\. Type: int. Units: +#X msg 110 1088 @hs; +#X text 245 1088 Get/Set hop size. 0 means @bs/2\. Type: int. Units: samp. Default value: 0\. Min value: 0\.; -#X msg 110 1143 @kl; -#X text 245 1143 alias to @method kl. Kullback-Liebler onset detection +#X msg 110 1130 @kl; +#X text 245 1130 alias to @method kl. Kullback-Liebler onset detection function.; -#X msg 110 1185 @method; -#X text 245 1185 Get/Set onset method. Default is hfc. Type: symbol. +#X msg 110 1172 @method; +#X text 245 1172 Get/Set onset method. Default is hfc. Type: symbol. Default value: default. Allowed values: specflux \, phase \, energy \, hfc \, kl \, complex \, default \, specdiff \, wphase \, rolloff \, spread \, kurtosis \, skewness \, complexdomain \, decrease \, slope \, centroid.; -#X msg 110 1257 @mkl; -#X text 245 1257 alias to @method mkl. Modified Kullback-Liebler onset +#X msg 110 1244 @mkl; +#X text 245 1244 alias to @method mkl. Modified Kullback-Liebler onset detection function.; -#X msg 110 1299 @phase; -#X text 245 1299 alias to @method phase. Phase Based Method onset detection +#X msg 110 1286 @phase; +#X text 245 1286 alias to @method phase. Phase Based Method onset detection function.; -#X msg 110 1341 @silence; -#X text 245 1341 Get/Set onset detection silence threshold. Type: float. +#X msg 110 1328 @silence; +#X text 245 1328 Get/Set onset detection silence threshold. Type: float. Units: db. Default value: -70\. Range: -80\...0\.; -#X msg 110 1383 @specdiff; -#X text 245 1383 alias to @method specdiff. Spectral difference method +#X msg 110 1370 @specdiff; +#X text 245 1370 alias to @method specdiff. Spectral difference method onset detection function.; -#X msg 110 1425 @specflux; -#X text 245 1425 alias to @method specflux. Spectral Flux.; -#X msg 110 1454 @speedlim; -#X text 245 1454 Get/Set minimum interval between two consecutive onsets. +#X msg 110 1412 @specflux; +#X text 245 1412 alias to @method specflux. Spectral Flux.; +#X msg 110 1441 @speedlim; +#X text 245 1441 Get/Set minimum interval between two consecutive onsets. Type: float. Units: ms. Default value: 50\. Min value: 1\.; -#X msg 110 1496 @threshold; -#X text 245 1496 Get/Set peak picking threshold. Type: float. Default +#X msg 110 1483 @threshold; +#X text 245 1483 Get/Set peak picking threshold. Type: float. Default value: 0.058\.; -#X msg 110 1538 @wphase; -#X text 245 1538 alias to @method phase. Weighted Phase Deviation onset +#X msg 110 1525 @wphase; +#X text 245 1525 alias to @method phase. Weighted Phase Deviation onset detection function.; -#X obj 20 1590 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1595 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1577 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1582 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1596 1\.; -#X text 150 1596 *bang*; -#X text 245 1596 analyze array.; -#X obj 20 1626 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1631 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1583 1\.; +#X text 150 1583 *bang*; +#X text 245 1583 analyze array.; +#X obj 20 1613 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1618 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1632 1\.; -#X text 245 1632 output list of detected onsets.; +#X text 110 1619 1\.; +#X text 245 1619 output list of detected onsets.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; -#X obj 1 1682 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1685 library: ceammc v0.9.4; -#X text 600 1697 see also:; -#X obj 674 1697 an.onset~; -#N canvas 10 1704 400 290 info 0; +#X obj 1 1669 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1672 library: ceammc v0.9.6; +#X text 600 1684 see also:; +#X obj 674 1684 an.onset~; +#N canvas 10 1691 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 an.onset; #X text 10 76 category:; @@ -173,7 +173,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1704 pd info; +#X restore 10 1691 pd info; #X connect 7 0 10 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/an.onset.pddoc b/ceammc/ext/doc/an.onset.pddoc index 21c7b3ff3e..18a7bf9140 100644 --- a/ceammc/ext/doc/an.onset.pddoc +++ b/ceammc/ext/doc/an.onset.pddoc @@ -26,13 +26,13 @@ detection method - hop size (by default + hop size (by default buffer_size/2) - name of analyzed array - buffer - size + name of analyzed array + buffer size hop size. 0 means @bs/2 onset detection silence threshold lambda logarithmic compression factor, 0 to disable - adaptive - whitening + adaptive whitening constant system delay to take back from detection time diff --git a/ceammc/ext/doc/an.onset~-help.pd b/ceammc/ext/doc/an.onset~-help.pd index 39fbaa7dc4..5eb590be25 100644 --- a/ceammc/ext/doc/an.onset~-help.pd +++ b/ceammc/ext/doc/an.onset~-help.pd @@ -36,104 +36,104 @@ hfc \, energy \, complex \, phase \, wphase \, specdiff \, kl \, mkl \, specflux. . Type: symbol.; #X text 110 498 3\.; #X text 150 498 int; -#X obj 246 499 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 498 HS: hop size (by default buffer_size/2). Type: int. -Min value: 0; +#X obj 246 499 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 498 HS(samp): hop size (by default buffer_size/2). Type: +int. Min value: 0; #X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 548 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 583 @active; -#X text 245 583 Get/Set audio processing state. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 583 Get/Set audio processing state. Type: bool. Default +value: 1\.; #X msg 110 625 @awhitening; -#X text 245 625 Get/Set adaptive whitening. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 667 @bs; -#X text 245 667 Get/Set buffer size. Type: int. Units: samp. Default -value: 1024\. Min value: 64\.; -#X msg 110 709 @complex; -#X text 245 709 alias to @method complex. Complex Domain Method onset +#X text 245 625 Get/Set adaptive whitening. Type: bool. Default value: +0\.; +#X msg 110 654 @bs; +#X text 245 654 (initonly) Get/Set buffer size. Type: int. Units: samp. +Default value: 1024\. Min value: 64\.; +#X msg 110 696 @complex; +#X text 245 696 alias to @method complex. Complex Domain Method onset detection function.; -#X msg 110 751 @compression; -#X text 245 751 Get/Set lambda logarithmic compression factor \, 0 +#X msg 110 738 @compression; +#X text 245 738 Get/Set lambda logarithmic compression factor \, 0 to disable. Type: float. Default value: 1\. Min value: 0\.; -#X msg 110 793 @delay; -#X text 245 793 Get/Set constant system delay to take back from detection +#X msg 110 780 @delay; +#X text 245 780 Get/Set constant system delay to take back from detection time. Type: float. Units: ms. Default value: 49.9093\. Min value: 0\.; -#X msg 110 850 @energy; -#X text 245 850 alias to @method energy. Energy based onset detection +#X msg 110 837 @energy; +#X text 245 837 alias to @method energy. Energy based onset detection function.; -#X msg 110 892 @hfc; -#X text 245 892 alias to @method hfc. High Frequency Content onset +#X msg 110 879 @hfc; +#X text 245 879 alias to @method hfc. High Frequency Content onset detection.; -#X msg 110 921 @hs; -#X text 245 921 Get/Set hop size. 0 means @bs/2\. Type: int. Units: +#X msg 110 908 @hs; +#X text 245 908 Get/Set hop size. 0 means @bs/2\. Type: int. Units: samp. Default value: 0\. Min value: 0\.; -#X msg 110 963 @kl; -#X text 245 963 alias to @method kl. Kullback-Liebler onset detection +#X msg 110 950 @kl; +#X text 245 950 alias to @method kl. Kullback-Liebler onset detection function.; -#X msg 110 1005 @method; -#X text 245 1005 Get/Set onset method. Default is hfc. Type: symbol. +#X msg 110 992 @method; +#X text 245 992 Get/Set onset method. Default is hfc. Type: symbol. Default value: default. Allowed values: specflux \, phase \, energy \, hfc \, kl \, complex \, default \, specdiff \, wphase \, rolloff \, spread \, kurtosis \, skewness \, complexdomain \, decrease \, slope \, centroid.; -#X msg 110 1077 @mkl; -#X text 245 1077 alias to @method mkl. Modified Kullback-Liebler onset +#X msg 110 1064 @mkl; +#X text 245 1064 alias to @method mkl. Modified Kullback-Liebler onset detection function.; -#X msg 110 1119 @phase; -#X text 245 1119 alias to @method phase. Phase Based Method onset detection +#X msg 110 1106 @phase; +#X text 245 1106 alias to @method phase. Phase Based Method onset detection function.; -#X msg 110 1161 @silence; -#X text 245 1161 Get/Set onset detection silence threshold. Type: float. +#X msg 110 1148 @silence; +#X text 245 1148 Get/Set onset detection silence threshold. Type: float. Units: db. Default value: -70\. Range: -80\...0\.; -#X msg 110 1203 @specdiff; -#X text 245 1203 alias to @method specdiff. Spectral difference method +#X msg 110 1190 @specdiff; +#X text 245 1190 alias to @method specdiff. Spectral difference method onset detection function.; -#X msg 110 1245 @specflux; -#X text 245 1245 alias to @method specflux. Spectral Flux.; -#X msg 110 1274 @speedlim; -#X text 245 1274 Get/Set minimum interval between two consecutive onsets. +#X msg 110 1232 @specflux; +#X text 245 1232 alias to @method specflux. Spectral Flux.; +#X msg 110 1261 @speedlim; +#X text 245 1261 Get/Set minimum interval between two consecutive onsets. Type: float. Units: ms. Default value: 50\. Min value: 1\.; -#X msg 110 1316 @threshold; -#X text 245 1316 Get/Set peak picking threshold. Type: float. Default +#X msg 110 1303 @threshold; +#X text 245 1303 Get/Set peak picking threshold. Type: float. Default value: 0.058\.; -#X msg 110 1358 @wphase; -#X text 245 1358 alias to @method phase. Weighted Phase Deviation onset +#X msg 110 1345 @wphase; +#X text 245 1345 alias to @method phase. Weighted Phase Deviation onset detection function.; -#X obj 20 1410 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1415 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1397 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1402 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1450 reset; -#X text 245 1450 reset onset last frame and total frames counters.; -#X obj 20 1487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1492 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1437 reset; +#X text 245 1437 reset onset last frame and total frames counters.; +#X obj 20 1474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1479 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1493 1\.; -#X text 245 1493 input signal.; -#X obj 20 1523 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1528 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1480 1\.; +#X text 245 1480 input signal.; +#X obj 20 1510 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1515 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1529 1\.; -#X text 245 1529 bang if onset detected.; -#X text 110 1549 2\.; -#X text 245 1549 float: time of the latest onset detected in milliseconds +#X text 110 1516 1\.; +#X text 245 1516 bang if onset detected.; +#X text 110 1536 2\.; +#X text 245 1536 float: time of the latest onset detected in milliseconds from starting of measuring. You can reset start time with 'reset' message.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; -#X obj 1 1629 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1632 library: ceammc v0.9.4; -#X text 608 1644 see also:; -#X obj 682 1644 an.onset; -#N canvas 10 1651 400 290 info 0; +#X obj 1 1616 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1619 library: ceammc v0.9.6; +#X text 608 1631 see also:; +#X obj 682 1631 an.onset; +#N canvas 10 1638 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 an.onset~; #X text 10 76 category:; @@ -152,7 +152,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1651 pd info; +#X restore 10 1638 pd info; #X connect 7 0 10 0; #X connect 8 0 10 1; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/an.onset~.pddoc b/ceammc/ext/doc/an.onset~.pddoc index 6bf567047d..27afd0682a 100644 --- a/ceammc/ext/doc/an.onset~.pddoc +++ b/ceammc/ext/doc/an.onset~.pddoc @@ -25,15 +25,15 @@ detection method - hop size (by default + hop size (by default buffer_size/2) reset onset last frame and total frames counters - buffer - size + buffer size hop size. 0 means @bs/2 onset detection silence threshold lambda logarithmic compression factor, 0 to disable - adaptive - whitening + adaptive whitening constant system delay to take back from detection time - audio processing - state + audio processing state diff --git a/ceammc/ext/doc/an.pitchtrack~-help.pd b/ceammc/ext/doc/an.pitchtrack~-help.pd index 782ec10b29..2691312f57 100644 --- a/ceammc/ext/doc/an.pitchtrack~-help.pd +++ b/ceammc/ext/doc/an.pitchtrack~-help.pd @@ -27,48 +27,43 @@ Normalized AutoCorrelation function (SNAC); -49933 0; #X text 110 391 1\.; #X text 150 391 int; -#X obj 246 392 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 391 FRAME: frame size in samples. Allowed values: 128 \, -256 \, 512 \, 1024 \, 2048\. . Type: int.; -#X text 110 426 2\.; -#X text 150 426 int; -#X obj 246 427 cnv 1 62 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 426 OVERLAP: overlap of analysis frames. Allowed values: -1 \, 2 \, 4 \, 8\. . Type: int.; -#X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 476 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 392 cnv 1 123 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 391 FRAMESIZE(samp): frame size in samples. Allowed values: +128 \, 256 \, 512 \, 1024 \, 2048\. . Type: int.; +#X obj 20 436 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 441 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 511 @bias; -#X text 245 511 Get/Set bias which favours small lags over large lags +#X msg 110 476 @bias; +#X text 245 476 Get/Set bias which favours small lags over large lags in the period detection \, thereby avoiding low-octave jumps. Type: float. Default value: 0.2\. Range: 0\...1\.; -#X msg 110 568 @fidthr; -#X text 245 568 Get/Set min fidelity threshold to report the pitch. +#X msg 110 533 @fidthr; +#X text 245 533 Get/Set min fidelity threshold to report the pitch. Type: float. Default value: 0.95\. Range: 0\...1\.; -#X msg 110 610 @framesize; -#X text 245 610 Get/Set frame size in samples. Type: int. Units: samp. +#X msg 110 575 @framesize; +#X text 245 575 Get/Set frame size in samples. Type: int. Units: samp. Default value: 1024\. Allowed values: 128 \, 256 \, 512 \, 1024 \, 2048\.; -#X msg 110 667 @maxfreq; -#X text 245 667 Get/Set max tracked frequency. Type: float. Units: +#X msg 110 632 @maxfreq; +#X text 245 632 Get/Set max tracked frequency. Type: float. Units: Hz. Default value: 1500\. Range: 10\...10000\.; -#X msg 110 709 @overlap; -#X text 245 709 Get/Set overlap of analysis frames. Type: int. Default +#X msg 110 674 @overlap; +#X text 245 674 Get/Set overlap of analysis frames. Type: int. Default value: 1\. Allowed values: 1 \, 2 \, 4 \, 8\.; -#X obj 20 761 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 766 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 731 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 767 1\.; -#X text 245 767 input signal.; -#X obj 20 797 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 802 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 732 1\.; +#X text 245 732 input signal.; +#X obj 20 762 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 767 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 803 1\.; -#X text 245 803 output signal.; -#X text 110 823 2\.; -#X text 245 823 output frequency in Hz.; -#X text 110 843 3\.; -#X text 245 843 track fidelity: a value between 0 and 1 \, indicating +#X text 110 768 1\.; +#X text 245 768 output signal.; +#X text 110 788 2\.; +#X text 245 788 output frequency in Hz.; +#X text 110 808 3\.; +#X text 245 808 track fidelity: a value between 0 and 1 \, indicating to which extent the input signal is periodic. A fidelity of ~0.95 can be considered to indicate a periodic signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; @@ -76,17 +71,17 @@ be considered to indicate a periodic signal.; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; -#X obj 1 923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 926 library: ceammc v0.9.4; -#X text 542 938 see also:; -#X obj 616 938 sigmund~; -#X obj 689 938 fiddle~; -#N canvas 10 945 400 290 info 0; +#X obj 1 888 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 891 library: ceammc v0.9.6; +#X text 542 903 see also:; +#X obj 616 903 sigmund~; +#X obj 689 903 fiddle~; +#N canvas 10 910 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 an.pitchtrack~; #X text 10 76 category:; @@ -105,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 945 pd info; +#X restore 10 910 pd info; #X connect 8 0 12 0; #X connect 10 0 12 1; #X connect 11 0 13 0; diff --git a/ceammc/ext/doc/an.pitchtrack~.pddoc b/ceammc/ext/doc/an.pitchtrack~.pddoc index e827321be4..35c5fa76b8 100644 --- a/ceammc/ext/doc/an.pitchtrack~.pddoc +++ b/ceammc/ext/doc/an.pitchtrack~.pddoc @@ -27,10 +27,8 @@ function (SNAC) - frame size in - samples - overlap of analysis - frames + frame + size in samples min fidelity threshold to report the pitch max tracked frequency + units="hertz">max tracked frequency diff --git a/ceammc/ext/doc/an.rms~-help.pd b/ceammc/ext/doc/an.rms~-help.pd index 3bf1654401..b332a628a5 100644 --- a/ceammc/ext/doc/an.rms~-help.pd +++ b/ceammc/ext/doc/an.rms~-help.pd @@ -23,39 +23,39 @@ #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 421 @active; -#X text 245 421 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 463 @period; -#X text 245 463 Get/Set averaging frame. Type: float. Default value: -200\. Range: 1\...1000\.; -#X obj 20 515 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 520 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 421 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 450 @period; +#X text 245 450 Get/Set averaging frame. Type: float. Units: ms. Default +value: 200\. Range: 1\...1000\.; +#X obj 20 502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 507 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 555 reset; -#X text 245 555 clear averaging data.; -#X obj 20 592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 597 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 542 reset; +#X text 245 542 clear averaging data.; +#X obj 20 579 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 584 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 598 1\.; -#X text 245 598 input signal.; -#X obj 20 628 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 633 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 585 1\.; +#X text 245 585 input signal.; +#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 620 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 634 1\.; -#X text 245 634 rms level.; +#X text 110 621 1\.; +#X text 245 621 rms level.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; -#X obj 1 684 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 687 library: ceammc v0.9.4; -#N canvas 10 706 400 290 info 0; +#X obj 1 671 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 674 library: ceammc v0.9.6; +#N canvas 10 693 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 an.rms~; #X text 10 76 category:; @@ -74,7 +74,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 706 pd info; +#X restore 10 693 pd info; #X connect 4 0 7 0; #X connect 5 0 7 1; #X connect 6 0 7 2; diff --git a/ceammc/ext/doc/an.rms~.pddoc b/ceammc/ext/doc/an.rms~.pddoc index 6fad6e3b52..2747b50867 100644 --- a/ceammc/ext/doc/an.rms~.pddoc +++ b/ceammc/ext/doc/an.rms~.pddoc @@ -21,10 +21,9 @@ averaging frame - - averaging frame - on/off dsp - processing + averaging frame + on/off dsp processing diff --git a/ceammc/ext/doc/an.tempo~-help.pd b/ceammc/ext/doc/an.tempo~-help.pd index de250e1f2b..295a96b368 100644 --- a/ceammc/ext/doc/an.tempo~-help.pd +++ b/ceammc/ext/doc/an.tempo~-help.pd @@ -43,18 +43,18 @@ specflux kl mkl; #X text 245 635 METHOD: onset detection method. Type: symbol.; #X text 110 655 3\.; #X text 150 655 int; -#X obj 246 656 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 655 HS: hop size (by default buffer_size/2). Type: int. -Min value: 0; +#X obj 246 656 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 655 HS(samp): hop size (by default buffer_size/2). Type: +int. Min value: 0; #X obj 20 700 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 705 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 740 @active; -#X text 245 740 Get/Set audio processing state. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 740 Get/Set audio processing state. Type: bool. Default +value: 1\.; #X msg 110 782 @bs; -#X text 245 782 Get/Set buffer size. Type: int. Units: samp. Default -value: 1024\. Min value: 64\.; +#X text 245 782 (initonly) Get/Set buffer size. Type: int. Units: samp. +Default value: 1024\. Min value: 64\.; #X msg 110 824 @complex; #X text 245 824 alias to @method complex. Complex Domain Method onset detection function.; @@ -117,13 +117,13 @@ detection function.; #X text 115 45 ::; #X obj 131 48 ui.link @title an @url ceammc.an-help.pd; #X obj 1 1553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1556 library: ceammc v0.9.4; +#X text 10 1556 library: ceammc v0.9.6; #N canvas 10 1575 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 an.tempo~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/an.tempo~.pddoc b/ceammc/ext/doc/an.tempo~.pddoc index 3a85d25c3d..7f5d9c9610 100644 --- a/ceammc/ext/doc/an.tempo~.pddoc +++ b/ceammc/ext/doc/an.tempo~.pddoc @@ -20,12 +20,12 @@ buffer size onset detection method - hop size (by default + hop size (by default buffer_size/2) - buffer - size + buffer size hop size. 0 means @bs/2 onset detection silence threshold constant system delay to take back from detection time - audio processing - state + audio processing state diff --git a/ceammc/ext/doc/an.zero~-help.pd b/ceammc/ext/doc/an.zero~-help.pd new file mode 100644 index 0000000000..f1c907087d --- /dev/null +++ b/ceammc/ext/doc/an.zero~-help.pd @@ -0,0 +1,92 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 453 50 cnv 1 312 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 453 50 zero crossing count/rate/freq calculator; +#X obj 1 1 cnv 5 765 40 empty empty an.zero~ 20 20 0 20 -104026 -4096 +0; +#X obj 681 11 an.zero~; +#X floatatom 50 118 5 0 0 0 - - -; +#X obj 203 118 ui.dsp~; +#X obj 50 162 osc~; +#X obj 146 190 an.zero~ @mode freq; +#X obj 146 219 ui.n~; +#X obj 98 248 an.zero~ @mode rate; +#X obj 98 277 ui.n~; +#X obj 50 305 an.zero~ @mode count; +#X obj 50 334 ui.n~; +#X floatatom 50 363 5 0 0 0 - - -; +#X obj 50 392 osc~; +#X obj 50 421 an.zero~ @clock; +#X obj 50 449 ui.hgain~; +#X obj 50 478 dac~; +#X obj 20 527 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 532 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 567 @bs; +#X text 245 567 (initonly) Get/Set buffer size. Type: int. Units: samp. +Default value: 1024\. Range: 1\...65536\.; +#X msg 110 609 @clock; +#X text 245 609 (initonly) Get/Set alias for @mode count @bs 1\. Output +impulse at each zero crossing. Type: list. Default value: 0\.; +#X msg 110 651 @mode; +#X text 245 651 Get/Set calculation mode: if 'count' - output number +of zero crossing occured in a period of current block size \, if 'rate' +- output zero crossing rate (zero crossing number / block size) \, +if 'freq' - output zero crossing frequency in hertz. Type: symbol. +Default value: count. Allowed values: count \, rate \, freq.; +#X obj 20 763 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 768 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 769 1\.; +#X text 245 769 input signal.; +#X obj 20 799 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 804 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 805 1\.; +#X text 245 805 output zero crossing count/freq/rate.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title an @url ceammc.an-help.pd; +#X obj 1 855 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 858 library: ceammc v0.9.6; +#X text 564 870 see also:; +#X obj 638 870 an.pitchtrack~; +#N canvas 10 877 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 an.zero~; +#X text 10 76 category:; +#X text 120 76 an; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 zero \, crossing \, rate \, count \, freq; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 877 pd info; +#X connect 4 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 6 0 9 0; +#X connect 9 0 10 0; +#X connect 6 0 11 0; +#X connect 11 0 12 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 16 0 17 1; \ No newline at end of file diff --git a/ceammc/ext/doc/an.zero~.pddoc b/ceammc/ext/doc/an.zero~.pddoc new file mode 100644 index 0000000000..a665d7d995 --- /dev/null +++ b/ceammc/ext/doc/an.zero~.pddoc @@ -0,0 +1,73 @@ + + + + an.zero~ + + + Serge Poltavsky + + zero crossing count/rate/freq calculator + GPL3 or later + ceammc + an + zero crossing rate count freq + 0.9.5 + + an.pitchtrack~ + + + + buffer size + calculation + mode: if 'count' - output number of zero crossing occured in a period of current block + size, if 'rate' - output zero crossing rate (zero crossing number / block size), if + 'freq' - output zero crossing frequency in hertz. + alias for @mode count + @bs 1. Output impulse at each zero crossing. + + + + input signal + + + + output zero crossing count/freq/rate + + + + + + + + diff --git a/ceammc/ext/doc/array.bpm-help.pd b/ceammc/ext/doc/array.bpm-help.pd index 1b1fd4ce0f..78592e83a5 100644 --- a/ceammc/ext/doc/array.bpm-help.pd +++ b/ceammc/ext/doc/array.bpm-help.pd @@ -53,13 +53,13 @@ library; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 621 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 624 library: ceammc v0.9.4; +#X text 10 624 library: ceammc v0.9.6; #N canvas 10 643 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.bpm; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.circular-help.pd b/ceammc/ext/doc/array.circular-help.pd new file mode 100644 index 0000000000..d0d7693578 --- /dev/null +++ b/ceammc/ext/doc/array.circular-help.pd @@ -0,0 +1,85 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 491 50 cnv 1 274 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 491 50 array read/write as circular buffer; +#X obj 1 1 cnv 5 765 40 empty empty array.circular 20 20 0 20 -104026 +-4096 0; +#X obj 638 11 array.circular; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#N canvas 0 22 450 300 (subpatch) 0; +#X array A-CIRC 100 float 1; +#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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 100 0 180 130 1; +#X restore 280 118 graph; +#X obj 50 147 metro 200; +#X obj 165 147 ui.knob; +#X obj 50 176 random.f; +#X obj 50 205 array.circular A-CIRC; +#X floatatom 50 234 5 0 0 0 - - -; +#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 323 1\.; +#X text 150 323 symbol; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 ARRAY: array name. Type: symbol.; +#X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 393 @array; +#X text 245 393 Get/Set array name. Type: symbol.; +#X msg 110 422 @redraw; +#X text 245 422 Get/Set array redraw after change. Type: bool. Default +value: 1\.; +#X obj 20 474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 479 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 480 1\.; +#X text 150 480 *float*; +#X text 245 480 push back new float.; +#X obj 20 510 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 515 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 516 1\.; +#X text 245 516 float: popped front element.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title array @url ceammc.array-help.pd; +#X obj 1 566 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 569 library: ceammc v0.9.6; +#X text 557 581 see also:; +#X obj 631 581 array.circular~; +#N canvas 10 588 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 array.circular; +#X text 10 76 category:; +#X text 120 76 array; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 array \, circular; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 588 pd info; +#X connect 4 0 6 0; +#X connect 6 0 8 0; +#X connect 8 0 9 0; +#X connect 7 0 9 0; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/array.circular.pddoc b/ceammc/ext/doc/array.circular.pddoc new file mode 100644 index 0000000000..ad389f5d91 --- /dev/null +++ b/ceammc/ext/doc/array.circular.pddoc @@ -0,0 +1,50 @@ + + + + array.circular + + + Serge Poltavsky + + array read/write as circular buffer + GPL3 or later + ceammc + array + array circular + 0.9.5 + + array.circular~ + + + + array name + + + array name + array redraw after change + + + + push back new float + + + + float: popped front element + + + + + + + + diff --git a/ceammc/ext/doc/array.circular~-help.pd b/ceammc/ext/doc/array.circular~-help.pd index c58462bb10..dce6cb4744 100644 --- a/ceammc/ext/doc/array.circular~-help.pd +++ b/ceammc/ext/doc/array.circular~-help.pd @@ -21,54 +21,57 @@ #X text 150 366 symbol; #X obj 246 367 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 366 ARRAY: array name. Type: symbol.; -#X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 401 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 386 2\.; +#X text 150 386 bool; +#X obj 246 387 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 386 ON: write mode. Type: bool.; +#X obj 20 416 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 421 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 436 @array; -#X text 245 436 Get/Set array name. Type: symbol.; -#X msg 110 465 @interp; -#X text 245 465 Get/Set interpolation mode. Type: int. Default value: +#X msg 110 456 @array; +#X text 245 456 Get/Set array name. Type: symbol.; +#X msg 110 485 @interp; +#X text 245 485 Get/Set interpolation mode. Type: int. Default value: 0\. Allowed values: 0 \, 1 \, 3\.; -#X msg 110 507 @on; -#X text 245 507 Get/Set write mode. Type: int. Default value: 1\. Allowed -values: 0 \, 1\.; -#X obj 20 559 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 564 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 527 @on; +#X text 245 527 Get/Set write mode. Type: bool. Default value: 1\.; +#X obj 20 566 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 571 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 599 resize; -#X text 245 599 resize target array. Arguments are:; -#X obj 255 622 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 622 SZ: new size. Type: int. Min value: 10\. Units: samp.; -#X obj 20 657 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 662 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 606 resize; +#X text 245 606 resize target array. Arguments are:; +#X obj 255 629 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 629 SZ: new size. Type: int. Min value: 10\. Units: samp.; +#X obj 20 664 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 669 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 663 1\.; -#X text 245 663 write delay.; -#X text 110 683 2\.; -#X text 245 683 read delay.; -#X text 110 703 3\.; -#X text 150 703 *bang*; -#X text 245 703 reset write position to zero.; -#X text 150 723 *float*; -#X text 245 723 set write position.; -#X obj 20 753 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 758 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 670 1\.; +#X text 245 670 write delay.; +#X text 110 690 2\.; +#X text 245 690 read delay.; +#X text 110 710 3\.; +#X text 150 710 *bang*; +#X text 245 710 reset write position to zero.; +#X text 150 730 *float*; +#X text 245 730 set write position.; +#X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 765 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 759 1\.; -#X text 245 759 read signal.; +#X text 110 766 1\.; +#X text 245 766 read signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 809 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 812 library: ceammc v0.9.4; -#N canvas 10 831 400 290 info 0; +#X obj 1 816 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 819 library: ceammc v0.9.6; +#N canvas 10 838 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.circular~; #X text 10 76 category:; @@ -87,7 +90,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 831 pd info; +#X restore 10 838 pd info; #X connect 4 0 6 0; #X connect 7 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/array.circular~.pddoc b/ceammc/ext/doc/array.circular~.pddoc index 7efaa2bdd3..a41f5bf100 100644 --- a/ceammc/ext/doc/array.circular~.pddoc +++ b/ceammc/ext/doc/array.circular~.pddoc @@ -15,6 +15,7 @@ array name + write mode resize target array @@ -23,7 +24,7 @@ array name - write mode + write mode interpolation mode @@ -34,7 +35,7 @@ read delay - + reset write position to zero set write position diff --git a/ceammc/ext/doc/array.convolve-help.pd b/ceammc/ext/doc/array.convolve-help.pd new file mode 100644 index 0000000000..e39f6451c3 --- /dev/null +++ b/ceammc/ext/doc/array.convolve-help.pd @@ -0,0 +1,93 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 599 50 cnv 1 166 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 599 50 array FFT convolution; +#X obj 1 1 cnv 5 765 40 empty empty array.convolve 20 20 0 20 -104026 +-4096 0; +#X obj 638 11 array.convolve; +#N canvas 0 22 450 300 (subpatch) 0; +#X array A-CONV 100 float 1; +#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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 100 -1 200 130 1; +#X restore 50 118 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array A-IR 10 float 1; +#A 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 10 -1 40 130 1; +#X restore 270 118 graph; +#X obj 50 277 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 305 array.convolve A-CONV A-IR; +#X obj 50 334 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 386 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 421 1\.; +#X text 150 421 symbol; +#X obj 246 422 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 421 ARRAY: target array. Type: symbol.; +#X text 110 441 2\.; +#X text 150 441 symbol; +#X obj 246 442 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 441 IR: array with impulse response. Type: symbol.; +#X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 476 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 511 @array; +#X text 245 511 Get/Set target array. Type: symbol.; +#X msg 110 540 @ir; +#X text 245 540 Get/Set impulse response array. Type: symbol.; +#X msg 110 569 @norm; +#X text 245 569 Get/Set impulse response array. Type: bool. Default +value: 0\.; +#X obj 20 621 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 626 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 627 1\.; +#X text 150 627 *bang*; +#X text 245 627 start convolution process.; +#X text 110 647 2\.; +#X text 150 647 *symbol*; +#X text 245 647 set array name.; +#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 682 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 683 1\.; +#X text 245 683 bang: on done.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title array @url ceammc.array-help.pd; +#X obj 1 733 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 736 library: ceammc v0.9.6; +#N canvas 10 755 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 array.convolve; +#X text 10 76 category:; +#X text 120 76 array; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 array \, fft \, convolution; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 755 pd info; +#X connect 6 0 7 0; +#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/array.convolve.pddoc b/ceammc/ext/doc/array.convolve.pddoc new file mode 100644 index 0000000000..cf238ff696 --- /dev/null +++ b/ceammc/ext/doc/array.convolve.pddoc @@ -0,0 +1,60 @@ + + + + array.convolve + + + Serge Poltavsky + + array FFT convolution + GPL3 or later + ceammc + array + array fft convolution + 0.9.5 + + + target array + array with impulse response + + + target array + impulse response array + impulse response array + + + + start convolution process + + + set array name + + + + bang: on done + + + + + + + + diff --git a/ceammc/ext/doc/array.copy-help.pd b/ceammc/ext/doc/array.copy-help.pd index 2e7c39ede5..3a71ce0670 100644 --- a/ceammc/ext/doc/array.copy-help.pd +++ b/ceammc/ext/doc/array.copy-help.pd @@ -32,7 +32,7 @@ -49933 0; #X msg 110 495 @resize; #X text 245 495 Get/Set resize of destination array on overflow. Type: -int. Default value: 0\. Allowed values: 1 \, 0\.; +bool. Default value: 0\.; #X obj 20 547 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 552 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -92,7 +92,7 @@ destination position. Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1141 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1144 library: ceammc v0.9.4; +#X text 10 1144 library: ceammc v0.9.6; #X text 594 1156 see also:; #X obj 668 1156 array.each; #N canvas 10 1163 400 290 info 0; @@ -100,7 +100,7 @@ destination position. Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.copy; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.copy.pddoc b/ceammc/ext/doc/array.copy.pddoc index dce6bff0d3..1657b92686 100644 --- a/ceammc/ext/doc/array.copy.pddoc +++ b/ceammc/ext/doc/array.copy.pddoc @@ -17,8 +17,8 @@ 0.3 - resize of destination array - on overflow + resize of destination array on + overflow copy whole array content diff --git a/ceammc/ext/doc/array.do-help.pd b/ceammc/ext/doc/array.do-help.pd index bad154f0fa..30fd1bb075 100644 --- a/ceammc/ext/doc/array.do-help.pd +++ b/ceammc/ext/doc/array.do-help.pd @@ -20,47 +20,54 @@ -1; #X obj 242 291 /; #X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 345 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 380 @array; -#X text 245 380 Get/Set array name. Type: symbol.; -#X msg 110 409 @redraw; -#X text 245 409 Get/Set redraw after array change. Type: int. Default -value: 1\. Allowed values: 1 \, 0\.; -#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 466 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 380 1\.; +#X text 150 380 symbol; +#X obj 246 381 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 380 ARRAY: array name. Type: symbol.; +#X obj 20 410 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 415 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 450 @array; +#X text 245 450 Get/Set array name. Type: symbol.; +#X msg 110 479 @redraw; +#X text 245 479 Get/Set redraw after array change. Type: bool. Default +value: 1\.; +#X obj 20 531 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 536 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 467 1\.; -#X text 150 467 *bang*; -#X text 245 467 starts iteration.; -#X text 150 487 *symbol*; -#X text 245 487 set array name.; -#X text 110 507 2\.; -#X text 150 507 *float*; -#X text 245 507 sample value from side-chain.; -#X obj 20 537 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 542 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 537 1\.; +#X text 150 537 *bang*; +#X text 245 537 starts iteration.; +#X text 150 557 *symbol*; +#X text 245 557 set array name.; +#X text 110 577 2\.; +#X text 150 577 *float*; +#X text 245 577 sample value from side-chain.; +#X obj 20 607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 612 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 543 1\.; -#X text 245 543 bang on finish.; -#X text 110 563 2\.; -#X text 245 563 for each array sample outputs list: SAMPLE_VALUE \, +#X text 110 613 1\.; +#X text 245 613 bang on finish.; +#X text 110 633 2\.; +#X text 245 633 for each array sample outputs list: SAMPLE_VALUE \, SAMPLE_POS \, TOTAL_SAMPLES.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 628 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 631 library: ceammc v0.9.4; -#X text 594 643 see also:; -#X obj 668 643 array.each; -#N canvas 10 650 400 290 info 0; +#X obj 1 698 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 701 library: ceammc v0.9.6; +#X text 594 713 see also:; +#X obj 668 713 array.each; +#N canvas 10 720 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.do; #X text 10 76 category:; @@ -79,7 +86,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 650 pd info; +#X restore 10 720 pd info; #X connect 5 0 6 0; #X connect 6 0 8 0; #X connect 7 1 9 0; diff --git a/ceammc/ext/doc/array.do.pddoc b/ceammc/ext/doc/array.do.pddoc index e93319224b..ec2a6db30e 100644 --- a/ceammc/ext/doc/array.do.pddoc +++ b/ceammc/ext/doc/array.do.pddoc @@ -16,10 +16,12 @@ 0.3 + + array name + array name - redraw after array - change + redraw after array change diff --git a/ceammc/ext/doc/array.each-help.pd b/ceammc/ext/doc/array.each-help.pd index 60fdb2df3f..e2dff56017 100644 --- a/ceammc/ext/doc/array.each-help.pd +++ b/ceammc/ext/doc/array.each-help.pd @@ -23,16 +23,16 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 symbol; -#X obj 246 295 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 NAME: array name. Type: symbol.; +#X obj 246 295 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 ARRAY: array name. Type: symbol.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 364 @array; #X text 245 364 Get/Set array name. Type: symbol.; #X msg 110 393 @redraw; -#X text 245 393 Get/Set redraw after array change. Type: int. Default -value: 1\. Allowed values: 1 \, 0\.; +#X text 245 393 Get/Set redraw after array change. Type: bool. Default +value: 1\.; #X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 450 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -40,7 +40,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 150 451 *bang*; #X text 245 451 process each element of current array.; #X text 150 471 *symbol*; -#X text 245 471 set new array and then process each element of it.; +#X text 245 471 set the new array \, then process each element.; #X text 110 491 2\.; #X text 150 491 *float*; #X text 245 491 processed float value from side-chain.; @@ -57,7 +57,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 597 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 600 library: ceammc v0.9.4; +#X text 10 600 library: ceammc v0.9.6; #X text 601 612 see also:; #X obj 675 612 list.each; #N canvas 10 619 400 290 info 0; @@ -65,7 +65,7 @@ value: 1\. Allowed values: 1 \, 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.each; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.each.pddoc b/ceammc/ext/doc/array.each.pddoc index 75ff970cb0..9c8817c759 100644 --- a/ceammc/ext/doc/array.each.pddoc +++ b/ceammc/ext/doc/array.each.pddoc @@ -17,17 +17,16 @@ 0.3 - array name + array name array name - redraw after array - change + redraw after array change process each element of current array - set new array and then process each element of it + set the new array, then process each element processed float value from side-chain diff --git a/ceammc/ext/doc/array.fill-help.pd b/ceammc/ext/doc/array.fill-help.pd index 9c1ea53af9..c326f1bc96 100644 --- a/ceammc/ext/doc/array.fill-help.pd +++ b/ceammc/ext/doc/array.fill-help.pd @@ -34,104 +34,111 @@ #X obj 50 449 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 20 496 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 501 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 501 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 536 @array; -#X text 245 536 Get/Set array name. Type: symbol.; -#X msg 110 565 @redraw; -#X text 245 565 Get/Set redraw after array change. Type: int. Default -value: 1\. Allowed values: 1 \, 0\.; -#X obj 20 617 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 622 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 536 1\.; +#X text 150 536 symbol; +#X obj 246 537 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 536 ARRAY: array name. Type: symbol.; +#X obj 20 566 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 571 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 657 fill; -#X text 245 657 fill all array with specified value or pattern. Arguments +#X msg 110 606 @array; +#X text 245 606 Get/Set array name. Type: symbol.; +#X msg 110 635 @redraw; +#X text 245 635 Get/Set redraw after array change. Type: bool. Default +value: 1\.; +#X obj 20 687 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 692 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 727 fill; +#X text 245 727 fill all array with specified value or pattern. Arguments are:; -#X obj 255 695 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 695 [@from]: fill range begin index. If not specified set +#X obj 255 765 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 765 [@from]: fill range begin index. If not specified set to 0\. Type: int.; -#X obj 255 733 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 733 [@to]: fill range end index. Can be negative - to address +#X obj 255 803 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 803 [@to]: fill range end index. Can be negative - to address from array end. For example: -1 means till last element (not including). If not specified set to array length. Type: int.; -#X obj 255 786 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 786 VAL1: value 1\. Type: float.; -#X obj 255 809 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 809 [VAL...]: other values.. Type: float.; -#X msg 110 834 gauss; -#X text 245 834 fill all array with random value with normal (gauss) +#X obj 255 856 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 856 VAL1: value 1\. Type: float.; +#X obj 255 879 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 879 [VAL...]: other values.. Type: float.; +#X msg 110 904 gauss; +#X text 245 904 fill all array with random value with normal (gauss) distribution. Arguments are:; -#X obj 255 872 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 872 [MEAN=0]: mean value. Type: float.; -#X obj 255 895 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 895 [SIGMA=1]: standard deviation. Type: float. Min value: +#X obj 255 942 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 942 [MEAN=0]: mean value. Type: float.; +#X obj 255 965 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 965 [SIGMA=1]: standard deviation. Type: float. Min value: 0\.; -#X msg 110 920 pulse; -#X text 245 920 fill all array with pulse wave. Arguments are:; -#X obj 255 943 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 943 T: wave period. Type: float. Min value: 1\. Units: +#X msg 110 990 pulse; +#X text 245 990 fill all array with pulse wave. Arguments are:; +#X obj 255 1013 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1013 T: wave period. Type: float. Min value: 1\. Units: samp.; -#X obj 255 966 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 966 [A=1]: wave amplitude. Type: float.; -#X obj 255 989 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 989 [D=0.5]: duty cycle. Type: float. Range: 0.001\...0.999\.; -#X msg 110 1014 saw; -#X text 245 1014 fill all array with saw wave. Arguments are:; -#X obj 255 1037 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1037 T: wave period. Type: float. Min value: 1\. Units: +#X obj 255 1036 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1036 [A=1]: wave amplitude. Type: float.; +#X obj 255 1059 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1059 [D=0.5]: duty cycle. Type: float. Range: 0.001\...0.999\.; +#X msg 110 1084 saw; +#X text 245 1084 fill all array with saw wave. Arguments are:; +#X obj 255 1107 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1107 T: wave period. Type: float. Min value: 1\. Units: samp.; -#X obj 255 1060 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1060 [A=1]: wave amplitude. Type: float.; -#X msg 110 1085 sin; -#X text 245 1085 fill all array with sine wave. Arguments are:; -#X obj 255 1108 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1108 T: wave period. Should be >0\. Type: float. Min value: +#X obj 255 1130 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1130 [A=1]: wave amplitude. Type: float.; +#X msg 110 1155 sin; +#X text 245 1155 fill all array with sine wave. Arguments are:; +#X obj 255 1178 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1178 T: wave period. Should be >0\. Type: float. Min value: 0\. Units: samp.; -#X obj 255 1146 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1146 [A=1]: amplitude. Type: float.; -#X obj 255 1169 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1169 [PHASE=0]: phase in 0\...1 range. Type: float. Range: +#X obj 255 1216 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1216 [A=1]: amplitude. Type: float.; +#X obj 255 1239 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1239 [PHASE=0]: phase in 0\...1 range. Type: float. Range: 0\...1\.; -#X msg 110 1209 tri; -#X text 245 1209 fill all array with triangle wave. Arguments are:; -#X obj 255 1232 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1232 T: wave period. Type: float. Min value: 1\. Units: +#X msg 110 1279 tri; +#X text 245 1279 fill all array with triangle wave. Arguments are:; +#X obj 255 1302 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1302 T: wave period. Type: float. Min value: 1\. Units: samp.; -#X obj 255 1255 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1255 [AMP=1]: wave amplitude. Type: float.; -#X msg 110 1280 uniform; -#X text 245 1280 fill all array with random value with uniform distribution. +#X obj 255 1325 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1325 [AMP=1]: wave amplitude. Type: float.; +#X msg 110 1350 uniform; +#X text 245 1350 fill all array with random value with uniform distribution. Arguments are:; -#X obj 255 1318 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1318 [A=0]: min value. Type: float.; -#X obj 255 1341 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1341 [B=1]: max value. Type: float.; -#X obj 20 1376 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1381 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1388 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1388 [A=0]: min value. Type: float.; +#X obj 255 1411 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1411 [B=1]: max value. Type: float.; +#X obj 20 1446 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1451 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1382 1\.; -#X text 150 1382 *symbol*; -#X text 245 1382 change array name.; -#X obj 20 1412 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1417 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1452 1\.; +#X text 150 1452 *symbol*; +#X text 245 1452 change array name.; +#X obj 20 1482 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1487 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1418 1\.; -#X text 245 1418 bang on finish.; +#X text 110 1488 1\.; +#X text 245 1488 bang on finish.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 1468 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1471 library: ceammc v0.9.4; -#X text 594 1483 see also:; -#X obj 668 1483 array.each; -#N canvas 10 1490 400 290 info 0; +#X obj 1 1538 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1541 library: ceammc v0.9.6; +#X text 594 1553 see also:; +#X obj 668 1553 array.each; +#N canvas 10 1560 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.fill; #X text 10 76 category:; @@ -150,7 +157,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1490 pd info; +#X restore 10 1560 pd info; #X connect 15 0 16 0; #X connect 16 0 17 0; #X connect 17 0 18 0; diff --git a/ceammc/ext/doc/array.fill.pddoc b/ceammc/ext/doc/array.fill.pddoc index 7a82158b1d..ff0f011127 100644 --- a/ceammc/ext/doc/array.fill.pddoc +++ b/ceammc/ext/doc/array.fill.pddoc @@ -16,10 +16,12 @@ 0.3 + + array name + array name - redraw after array - change + redraw after array change fill all array with specified value or pattern diff --git a/ceammc/ext/doc/array.grainer~-help.pd b/ceammc/ext/doc/array.grainer~-help.pd index a5fad2971d..7624283425 100644 --- a/ceammc/ext/doc/array.grainer~-help.pd +++ b/ceammc/ext/doc/array.grainer~-help.pd @@ -18,119 +18,192 @@ #X text 215 305 @r - grain number of repeats (-1: infinite); #X text 215 330 @tag - grain tag; #X msg 50 393 fill 80 @l 300ms @at rand()*1s @at ondone +=100ms @pan ondone rand() @s ondone choice(1\ \,-0.5) @tb rand()*400ms @w hann; -#X msg 69 465 clear; -#X obj 50 494 array.grainer~ agr0; -#X obj 270 494 ui.dsp~; -#X obj 50 523 ui.hgain2~; -#X obj 50 552 dac~; -#X obj 50 580 table agr0; -#X obj 50 609 msg.onload load guitar1.wav to agr0 @resize; -#X obj 50 638 snd.file; -#X obj 20 687 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 692 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 146 465 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 69 494 clear; +#X msg 146 494 pause * \$1; +#X obj 50 523 array.grainer~ agr0; +#X obj 270 523 ui.dsp~; +#X obj 50 552 ui.hgain2~; +#X obj 50 580 dac~; +#X obj 50 609 table agr0; +#X obj 50 638 msg.onload load guitar1.wav to agr0 @resize; +#X obj 69 667 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 69 696 openpanel; +#X msg 69 724 load \$1 to agr0 @resize; +#X obj 50 753 snd.file; +#X obj 20 802 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 807 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 727 1\.; -#X text 150 727 symbol; -#X obj 246 728 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 727 NAME: array name. Type: symbol.; -#X obj 20 757 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 762 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 842 1\.; +#X text 150 842 symbol; +#X obj 246 843 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 842 ARRAY: array name. Type: symbol.; +#X obj 20 872 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 877 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 797 @array; -#X text 245 797 Get/Set array name. Type: symbol.; -#X msg 110 826 @prob; -#X text 245 826 Get/Set grain start probability in internal or external +#X msg 110 912 @array; +#X text 245 912 Get/Set array name. Type: symbol.; +#X msg 110 941 @prob; +#X text 245 941 Get/Set grain start probability in internal or external sync mode. ('int' or 'ext'). Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 883 @sync; -#X text 245 883 Get/Set grain sync mode. If 'none': start grains right +#X msg 110 998 @sync; +#X text 245 998 Get/Set grain sync mode. If 'none': start grains right after they are finished \, if 'int': start grains after specified interval (@tsync). Type: symbol. Default value: none. Allowed values: none \, int \, ext.; -#X msg 110 955 @tsync; -#X text 245 955 Get/Set grain sync interval. Type: float. Units: ms. +#X msg 110 1070 @tsync; +#X text 245 1070 Get/Set grain sync interval. Type: float. Units: ms. Default value: 50\. Min value: 1\.; -#X obj 20 1007 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1012 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1122 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1127 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1047 align; -#X text 245 1047 align gain(s) to onset. Arguments are:; -#X obj 255 1070 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1070 [SUBJ]: if '*' or ommited: align all grains \, if +#X msg 110 1162 align; +#X text 245 1162 align grain(s) to onset. Arguments are:; +#X obj 255 1185 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1185 [SUBJ]: if '*' or omitted: align all grains \, if '.': align finished grains only \, if float: align grain with corresponding #id \, if symbol: align grains with corresponding tag. Type: atom.; -#X msg 110 1140 append; -#X text 245 1140 append several grains. Arguments are:; -#X obj 255 1163 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1163 N: number of grains. Type: int. Min value: 1\.; -#X obj 255 1186 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1186 PROPS: grain properties. Type: list.; -#X msg 110 1211 clear; -#X text 245 1211 remove grain(s). Arguments are:; -#X obj 255 1234 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1234 [SUBJ]: if '*' or ommited: remove all grains \, if +#X msg 110 1255 append; +#X text 245 1255 append several grains. Arguments are:; +#X obj 255 1278 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1278 N: number of grains. Type: int. Min value: 1\.; +#X obj 255 1301 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1301 PROPS: grain properties. Type: list.; +#X msg 110 1326 clear; +#X text 245 1326 remove grain(s). Arguments are:; +#X obj 255 1349 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1349 [SUBJ]: if '*' or omitted: remove all grains \, if '.': remove finished grains only \, if float: remove grain with corresponding #id \, if symbol: remove grains with corresponding tag. Type: atom.; -#X msg 110 1304 fill; -#X text 245 1304 fill with grains (remove all existing grains before). +#X msg 110 1419 defer; +#X text 245 1419 defer method call until grains will finish. Arguments +are:; +#X obj 255 1442 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1442 [N]: number of finished grains to wait before calling. +If not specified \, treat as 1\. Type: int. Range: 1\...255\.; +#X obj 255 1480 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1480 METHOD: method name. Type: symbol.; +#X obj 255 1503 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1503 [ARGS]: method arguments. Type: list.; +#X msg 110 1528 fill; +#X text 245 1528 fill with grains (remove all existing grains before). Arguments are:; -#X obj 255 1342 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1342 N: number of grains. Type: int. Min value: 1\.; -#X obj 255 1365 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1365 PROPS: grain properties. Type: list.; -#X msg 110 1390 grain; -#X text 245 1390 create single grain. Arguments are:; -#X obj 255 1413 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1413 PROPS: grain properties. Type: list.; -#X msg 110 1438 onsets; -#X text 245 1438 analyze source array for onsets. Arguments are:; -#X obj 255 1461 cnv 1 123 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1461 [METHOD=default]: onset detection method. Type: symbol. +#X obj 255 1566 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1566 N: number of grains. Type: int. Min value: 1\.; +#X obj 255 1589 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1589 PROPS: grain properties. Type: list.; +#X msg 110 1614 grain; +#X text 245 1614 create single grain. Arguments are:; +#X obj 255 1637 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1637 PROPS: grain properties. Type: list.; +#X msg 110 1662 onsets; +#X text 245 1662 analyze source array for onsets. Arguments are:; +#X obj 255 1685 cnv 1 123 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1685 [METHOD=default]: onset detection method. Type: symbol. Allowed values: default \, hfc \, energy \, complex \, phase \, wphase \, specdiff \, kl \, mkl \, specflux.; -#X obj 255 1514 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1514 [SPACE=64]: minimal space between onsets. Type: float. +#X obj 255 1738 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1738 [SPACE=64]: minimal space between onsets. Type: float. Units: ms.; -#X obj 255 1552 cnv 1 100 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1552 [SILENCE=-40]: silence level. Type: float. Units: +#X obj 255 1776 cnv 1 100 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1776 [SILENCE=-40]: silence level. Type: float. Units: db.; -#X msg 110 1577 set; -#X text 245 1577 set grain(s) properties. Arguments are:; -#X obj 255 1600 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1600 SUBJ: if '*': set for all grains \, if float: set +#X msg 110 1801 pause; +#X text 245 1801 pause (resume) grain(s). Arguments are:; +#X obj 255 1824 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1824 SUBJ: if '*': pause all grains \, if float: pause +grain with corresponding #id \, if symbol: pause grains with matched +tag. Type: atom.; +#X obj 255 1877 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1877 [STATE]: on/off value. Type: int. Allowed values: +0 \, 1\.; +#X msg 110 1902 permutate; +#X text 245 1902 permutate grain positions (@ta and @tb) values. Arguments +are:; +#X obj 255 1940 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1940 [N]: number of permutations. If N>0 results N-th next +permutation \, N<0 - N-th previous permutation. Type: int. Range: -16\...16\.; +#X obj 255 1993 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1993 [TAG]: if '*' or omitted: reverse positions of all +grains \, if '.': reverse positions of finished grains only \, otherwise +reverse grains with corresponding tag. Type: symbol.; +#X msg 110 2048 reverse; +#X text 245 2048 reverse grain positions (@ta and @tb) values. Arguments +are:; +#X obj 255 2071 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2071 [TAG]: if '*' or omitted: reverse positions of all +grains \, if '.': reverse positions of finished grains only \, otherwise +reverse grains with corresponding tag. Type: symbol.; +#X msg 110 2126 set; +#X text 245 2126 set grain(s) properties. Arguments are:; +#X obj 255 2149 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2149 SUBJ: if '*': set for all grains \, if float: set for grain with specified #id \, if symbol: set for grains with specified tag. Type: atom.; -#X obj 255 1653 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1653 PROPS: grain properties. Type: list.; -#X obj 20 1688 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1693 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2202 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2202 PROPS: grain properties. Type: list.; +#X msg 110 2227 shuffle; +#X text 245 2227 shuffle grain positions (@ta and @tb) values. Arguments +are:; +#X obj 255 2250 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2250 [TAG]: if '*' or omitted: shuffle all grains \, if +'.': shuffle finished grains only \, otherwise shuffle grains with +corresponding tag. Type: symbol.; +#X msg 110 2305 slice; +#X text 245 2305 slice specified duration to specified number of grains +and add them. Arguments are:; +#X obj 255 2343 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2343 N: desired number of grains. Type: int. Range: 1\...64\.; +#X obj 255 2366 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2366 [DUR]: duration to slice. Positive time value expected +\, for example: 100ms \, 1.02s \, 400samp etc. Float value treat as +millisecond. If not specified - use the whole source array duration. +Type: atom.; +#X obj 255 2434 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2434 [GRAIN]: properties of sliced grains. Type: list.; +#X msg 110 2459 spread; +#X text 245 2459 uniformly arrange grains to fill specified time space. +Arguments are:; +#X obj 255 2497 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2497 [DUR]: time space. Positive time values are expected +\, for example: 100ms \, 1.02s \, 400samp etc. Float value treat as +millisecond. If not specified - use the whole source array duration. +Type: atom.; +#X obj 255 2565 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2565 [TAG]: if '*' or omitted: spread all grains \, if +'.': spread finished grains only \, otherwise spread grains with corresponding +tag. Type: symbol.; +#X obj 20 2630 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2635 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1694 1\.; -#X text 245 1694 control inlet.; -#X text 150 1714 *bang*; -#X text 245 1714 if @sync = 'ext': starts finished grains playback.; -#X obj 20 1744 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1749 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2636 1\.; +#X text 245 2636 control inlet.; +#X text 150 2656 *bang*; +#X text 245 2656 if @sync = 'ext': starts finished grains playback.; +#X obj 20 2686 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2691 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1750 1\.; -#X text 245 1750 left output.; -#X text 110 1770 2\.; -#X text 245 1770 right output.; +#X text 110 2692 1\.; +#X text 245 2692 left output.; +#X text 110 2712 2\.; +#X text 245 2712 right output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 1820 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1823 library: ceammc v0.9.4; -#X text 594 1835 see also:; -#X obj 668 1835 array.each; -#N canvas 10 1842 400 290 info 0; +#X obj 1 2762 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2765 library: ceammc v0.9.6; +#X text 594 2777 see also:; +#X obj 668 2777 array.each; +#N canvas 10 2784 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.grainer~; #X text 10 76 category:; @@ -149,11 +222,16 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1842 pd info; -#X connect 16 0 18 0; -#X connect 17 0 18 0; +#X restore 10 2784 pd info; +#X connect 17 0 19 0; +#X connect 16 0 20 0; #X connect 18 0 20 0; -#X connect 18 1 20 1; -#X connect 20 0 21 0; -#X connect 20 1 21 1; -#X connect 23 0 24 0; \ No newline at end of file +#X connect 19 0 20 0; +#X connect 20 0 22 0; +#X connect 20 1 22 1; +#X connect 22 0 23 0; +#X connect 22 1 23 1; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 25 0 29 0; +#X connect 28 0 29 0; \ No newline at end of file diff --git a/ceammc/ext/doc/array.grainer~.pddoc b/ceammc/ext/doc/array.grainer~.pddoc index 73241b870b..fbb8a3b5e7 100644 --- a/ceammc/ext/doc/array.grainer~.pddoc +++ b/ceammc/ext/doc/array.grainer~.pddoc @@ -30,25 +30,31 @@ @tag - grain tag - array name + array name + remove grain(s) - if '*' or ommited: remove all grains, + if '*' or omitted: remove all grains, if '.': remove finished grains only, if float: remove grain with corresponding #id, if symbol: remove grains with corresponding tag + set grain(s) properties if '*': set for all grains, if float: set for grain with specified #id, if symbol: set for grains with specified tag grain properties + create single grain grain properties + append several grains number of grains grain properties + fill with grains (remove all existing grains before) number of grains grain properties + analyze source array for onsets onset detection @@ -57,10 +63,57 @@ minimal space between onsets silence level - align gain(s) to onset - if '*' or ommited: align all grains, if + + align grain(s) to onset + if '*' or omitted: align all grains, if '.': align finished grains only, if float: align grain with corresponding #id, if symbol: align grains with corresponding tag + + pause (resume) grain(s) + if '*': pause all grains, if float: + pause grain with corresponding #id, if symbol: pause grains with matched tag + on/off + value + + slice specified duration to specified number of grains and add + them + desired number of + grains + duration to slice. Positive time value expected, for + example: 100ms, 1.02s, 400samp etc. Float value treat as millisecond. If not specified + - use the whole source array duration + properties of sliced grains + + uniformly arrange grains to fill specified time space + time space. Positive time values are expected, for + example: 100ms, 1.02s, 400samp etc. Float value treat as millisecond. If not specified + - use the whole source array duration + if '*' or omitted: spread all grains, + if '.': spread finished grains only, otherwise spread grains with corresponding + tag + + shuffle grain positions (@ta and @tb) values + if '*' or omitted: shuffle all grains, + if '.': shuffle finished grains only, otherwise shuffle grains with corresponding + tag + + reverse grain positions (@ta and @tb) values + if '*' or omitted: reverse positions + of all grains, if '.': reverse positions of finished grains only, otherwise reverse + grains with corresponding tag + + permutate grain positions (@ta and @tb) values + number of permutations. If + N>0 results N-th next permutation, N<0 - N-th previous permutation + if '*' or omitted: reverse positions + of all grains, if '.': reverse positions of finished grains only, otherwise reverse + grains with corresponding tag + + defer method call until grains will finish + number of finished grains to + wait before calling. If not specified, treat as 1. + method name + method arguments array name @@ -90,8 +143,10 @@ | | | -| [clear( -| | +| [T] +| | +| [clear( [pause * $1( +| | | [array.grainer~ agr0] [ui.dsp~] *|* [ui.hgain2~] @@ -102,6 +157,12 @@ [msg.onload load guitar1.wav to agr0 @resize] | +| [B] +| | +| [openpanel] +| | +| [load $1 to agr0 @resize( +| | [snd.file] ]]> diff --git a/ceammc/ext/doc/array.hist-help.pd b/ceammc/ext/doc/array.hist-help.pd index e2964caca5..15c0825a5b 100644 --- a/ceammc/ext/doc/array.hist-help.pd +++ b/ceammc/ext/doc/array.hist-help.pd @@ -44,8 +44,8 @@ -49933 0; #X text 110 549 1\.; #X text 150 549 symbol; -#X obj 246 550 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 549 NAME: array name. Type: symbol.; +#X obj 246 550 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 549 ARRAY: array name. Type: symbol.; #X text 110 569 2\.; #X text 150 569 int; #X obj 246 570 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -89,7 +89,7 @@ Range: 2\...1000\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 910 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 913 library: ceammc v0.9.4; +#X text 10 913 library: ceammc v0.9.6; #X text 565 925 see also:; #X obj 639 925 list.histogram; #N canvas 10 932 400 290 info 0; @@ -97,7 +97,7 @@ Range: 2\...1000\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.hist; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.hist.pddoc b/ceammc/ext/doc/array.hist.pddoc index f65db349f1..a2c55313a2 100644 --- a/ceammc/ext/doc/array.hist.pddoc +++ b/ceammc/ext/doc/array.hist.pddoc @@ -20,7 +20,7 @@ Values outside of range @min...@max are ignored - array name + array name number of bins minimal value maximum value diff --git a/ceammc/ext/doc/array.mean-help.pd b/ceammc/ext/doc/array.mean-help.pd index 660f75f10d..c584bc73c4 100644 --- a/ceammc/ext/doc/array.mean-help.pd +++ b/ceammc/ext/doc/array.mean-help.pd @@ -26,8 +26,8 @@ Arithmetic mean @url https://en.wikipedia.org/wiki/Arithmetic_mean; -49933 0; #X text 110 346 1\.; #X text 150 346 symbol; -#X obj 246 347 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 346 NAME: array name. Type: symbol.; +#X obj 246 347 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 346 ARRAY: array name. Type: symbol.; #X obj 20 376 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 381 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -50,7 +50,7 @@ Arithmetic mean @url https://en.wikipedia.org/wiki/Arithmetic_mean; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.9.4; +#X text 10 550 library: ceammc v0.9.6; #X text 600 562 see also:; #X obj 674 562 array.sum; #N canvas 10 569 400 290 info 0; @@ -58,7 +58,7 @@ Arithmetic mean @url https://en.wikipedia.org/wiki/Arithmetic_mean; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.mean; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.mean.pddoc b/ceammc/ext/doc/array.mean.pddoc index 30e5334053..88d3fc3865 100644 --- a/ceammc/ext/doc/array.mean.pddoc +++ b/ceammc/ext/doc/array.mean.pddoc @@ -20,7 +20,7 @@ Arithmetic mean - array name + array name array name diff --git a/ceammc/ext/doc/array.minmax-help.pd b/ceammc/ext/doc/array.minmax-help.pd index 6854490b4d..82e2ce4210 100644 --- a/ceammc/ext/doc/array.minmax-help.pd +++ b/ceammc/ext/doc/array.minmax-help.pd @@ -24,8 +24,8 @@ -49933 0; #X text 110 323 1\.; #X text 150 323 symbol; -#X obj 246 324 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 NAME: array name. Type: symbol.; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 ARRAY: array name. Type: symbol.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -52,13 +52,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 564 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 567 library: ceammc v0.9.4; +#X text 10 567 library: ceammc v0.9.6; #N canvas 10 586 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.minmax; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.minmax.pddoc b/ceammc/ext/doc/array.minmax.pddoc index b753557ae5..f0c8da9781 100644 --- a/ceammc/ext/doc/array.minmax.pddoc +++ b/ceammc/ext/doc/array.minmax.pddoc @@ -14,7 +14,7 @@ 0.3 - array name + array name array name diff --git a/ceammc/ext/doc/array.p2s-help.pd b/ceammc/ext/doc/array.p2s-help.pd index 02455a84c7..3a17b847c8 100644 --- a/ceammc/ext/doc/array.p2s-help.pd +++ b/ceammc/ext/doc/array.p2s-help.pd @@ -30,8 +30,8 @@ -49933 0; #X text 110 434 1\.; #X text 150 434 symbol; -#X obj 246 435 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 NAME: array name. Type: symbol.; +#X obj 246 435 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 434 ARRAY: array name. Type: symbol.; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -57,7 +57,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 670 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 673 library: ceammc v0.9.4; +#X text 10 673 library: ceammc v0.9.6; #X text 600 685 see also:; #X obj 674 685 array.s2p; #N canvas 10 692 400 290 info 0; @@ -65,7 +65,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.p2s; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.p2s.pddoc b/ceammc/ext/doc/array.p2s.pddoc index 39e3ff5e82..372771a41b 100644 --- a/ceammc/ext/doc/array.p2s.pddoc +++ b/ceammc/ext/doc/array.p2s.pddoc @@ -24,7 +24,7 @@ this object allows to get relative access to array - array name + array name array name diff --git a/ceammc/ext/doc/array.play~-help.pd b/ceammc/ext/doc/array.play~-help.pd index 0cfe3c9a79..db13fd98e0 100644 --- a/ceammc/ext/doc/array.play~-help.pd +++ b/ceammc/ext/doc/array.play~-help.pd @@ -74,12 +74,12 @@ sec. Default value: 0\.; position relative to the end of the array. Type: float. Units: samp. Default value: -1\.; #X msg 110 1037 @interp; -#X text 245 1037 Get/Set interpolation type. 0: no interpolationm 1: +#X text 245 1037 Get/Set interpolation type. 0: no interpolation 1: linear \, 3: cubic. Type: int. Default value: 1\. Allowed values: 0 \, 1 \, 3\.; #X msg 110 1094 @loop; -#X text 245 1094 Get/Set samplewise loop playing mode. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 1094 Get/Set samplewise loop playing mode. Type: bool. +Default value: 0\.; #X msg 110 1136 @select_ms; #X text 245 1136 Get/Set selection range. Type: list. Units: ms. Default value: 0 0\.; @@ -145,7 +145,7 @@ property. By default output seconds.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1878 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1881 library: ceammc v0.9.4; +#X text 10 1881 library: ceammc v0.9.6; #X text 607 1893 see also:; #X obj 681 1893 tabplay~; #N canvas 10 1900 400 290 info 0; @@ -153,7 +153,7 @@ property. By default output seconds.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.play~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.play~.pddoc b/ceammc/ext/doc/array.play~.pddoc index 8c51989852..69e702d7f6 100644 --- a/ceammc/ext/doc/array.play~.pddoc +++ b/ceammc/ext/doc/array.play~.pddoc @@ -33,15 +33,15 @@ reversed playback playback amplitude - samplewise loop playing mode + samplewise loop playing mode interpolation type. 0: no - interpolationm 1: linear, 3: cubic. + interpolation 1: linear, 3: cubic. clock output period. Zero means: no clock output (by default). clock output format - playing state. 0: + playing state. 0: stopped, 1: playing, 2: paused. current play position diff --git a/ceammc/ext/doc/array.plot-help.pd b/ceammc/ext/doc/array.plot-help.pd index c993d5486a..c62cdf678e 100644 --- a/ceammc/ext/doc/array.plot-help.pd +++ b/ceammc/ext/doc/array.plot-help.pd @@ -18,55 +18,70 @@ #X obj 50 305 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 20 352 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 357 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 357 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 392 @array; -#X text 245 392 Get/Set array name. Type: symbol.; -#X msg 110 421 @nan; -#X text 245 421 Get/Set value to replace nan on plot. Type: float. +#X text 110 392 1\.; +#X text 150 392 symbol; +#X obj 246 393 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 392 ARRAY: array name. Type: symbol.; +#X text 110 412 2\.; +#X text 150 412 float; +#X obj 246 413 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 412 YMIN: minimal y-axis value. Type: float. Range: -2048\...2048; +#X text 110 432 3\.; +#X text 150 432 float; +#X obj 246 433 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 432 YMAX: maximum y-axis value. Type: float. Range: -2048\...2048; +#X obj 20 462 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 467 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 502 @array; +#X text 245 502 Get/Set array name. Type: symbol.; +#X msg 110 531 @nan; +#X text 245 531 Get/Set value to replace nan on plot. Type: float. Default value: +inf.; -#X msg 110 463 @yauto; -#X text 245 463 Get/Set calculate y-axis range automatically. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 505 @ymax; -#X text 245 505 Get/Set minimal y-axis value. Type: float. Default +#X msg 110 573 @yauto; +#X text 245 573 Get/Set calculate y-axis range automatically. Type: +bool. Default value: 1\.; +#X msg 110 615 @ymax; +#X text 245 615 Get/Set maximum y-axis value. Type: float. Default value: 1\. Range: -2048\...2048\.; -#X msg 110 547 @ymin; -#X text 245 547 Get/Set minimal y-axis value. Type: float. Default +#X msg 110 657 @ymin; +#X text 245 657 Get/Set minimal y-axis value. Type: float. Default value: -1\. Range: -2048\...2048\.; -#X obj 20 599 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 604 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 709 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 714 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 605 1\.; -#X text 150 605 *float*; -#X text 245 605 single input sample.; -#X text 150 625 *list*; -#X text 245 625 resizes array to list size and plot all list values.; -#X text 110 645 2\.; -#X text 150 645 *bang*; -#X text 245 645 plot all samples fitted to specified array.; -#X text 150 665 *float*; -#X text 245 665 plot specified number of samples \, resizes array.; -#X obj 20 695 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 700 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 715 1\.; +#X text 150 715 *float*; +#X text 245 715 single input sample.; +#X text 150 735 *list*; +#X text 245 735 resizes array to list size and plot all list values.; +#X text 110 755 2\.; +#X text 150 755 *bang*; +#X text 245 755 plot all samples fitted to specified array.; +#X text 150 775 *float*; +#X text 245 775 plot specified number of samples \, resizes array.; +#X obj 20 805 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 810 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 701 1\.; -#X text 245 701 bang on done.; +#X text 110 811 1\.; +#X text 245 811 bang on done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.9.4; -#X text 585 766 see also:; -#X obj 659 766 array.plot~; -#N canvas 10 773 400 290 info 0; +#X obj 1 861 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 864 library: ceammc v0.9.6; +#X text 585 876 see also:; +#X obj 659 876 array.plot~; +#N canvas 10 883 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.plot; #X text 10 76 category:; @@ -85,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 773 pd info; +#X restore 10 883 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/array.plot.pddoc b/ceammc/ext/doc/array.plot.pddoc index 811cb99ab9..79ab8393da 100644 --- a/ceammc/ext/doc/array.plot.pddoc +++ b/ceammc/ext/doc/array.plot.pddoc @@ -16,13 +16,20 @@ 0.9.2 + + array name + minimal y-axis + value + maximum y-axis + value + array name minimal y-axis value - minimal y-axis value - calculate y-axis range + maximum y-axis value + calculate y-axis range automatically value to replace nan on plot diff --git a/ceammc/ext/doc/array.plot~-help.pd b/ceammc/ext/doc/array.plot~-help.pd index c3f60123e6..f01909c800 100644 --- a/ceammc/ext/doc/array.plot~-help.pd +++ b/ceammc/ext/doc/array.plot~-help.pd @@ -22,49 +22,64 @@ #X obj 50 277 plot.geomspace~ 2 1024; #X obj 50 305 array.plot~ APL1 @yauto 1; #X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 359 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 359 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 394 @array; -#X text 245 394 Get/Set array name. Type: symbol.; -#X msg 110 423 @yauto; -#X text 245 423 Get/Set calculate y-axis range automatically. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 465 @ymax; -#X text 245 465 Get/Set minimal y-axis value. Type: float. Default +#X text 110 394 1\.; +#X text 150 394 symbol; +#X obj 246 395 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 394 ARRAY: array name. Type: symbol.; +#X text 110 414 2\.; +#X text 150 414 float; +#X obj 246 415 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 414 YMIN: minimal y-axis value. Type: float. Range: -1024\...1024; +#X text 110 434 3\.; +#X text 150 434 float; +#X obj 246 435 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 434 YMAX: maximum y-axis value. Type: float. Range: -1024\...1024; +#X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 504 @array; +#X text 245 504 Get/Set array name. Type: symbol.; +#X msg 110 533 @yauto; +#X text 245 533 Get/Set calculate y-axis range automatically. Type: +bool. Default value: 0\.; +#X msg 110 575 @ymax; +#X text 245 575 Get/Set minimal y-axis value. Type: float. Default value: 1\. Range: -1024\...1024\.; -#X msg 110 507 @ymin; -#X text 245 507 Get/Set minimal y-axis value. Type: float. Default +#X msg 110 617 @ymin; +#X text 245 617 Get/Set minimal y-axis value. Type: float. Default value: -1\. Range: -1024\...1024\.; -#X obj 20 559 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 564 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 669 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 674 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 565 1\.; -#X text 245 565 input signal.; -#X text 110 585 2\.; -#X text 150 585 *bang*; -#X text 245 585 plot all samples fitted to specified array.; -#X text 150 605 *float*; -#X text 245 605 plot specified number of samples \, resizes array.; -#X obj 20 635 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 640 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 675 1\.; +#X text 245 675 input signal.; +#X text 110 695 2\.; +#X text 150 695 *bang*; +#X text 245 695 plot all samples fitted to specified array.; +#X text 150 715 *float*; +#X text 245 715 plot specified number of samples \, resizes array.; +#X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 750 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 681 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 684 library: ceammc v0.9.4; -#X text 519 696 see also:; -#X obj 593 699 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 791 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 794 library: ceammc v0.9.6; +#X text 519 806 see also:; +#X obj 593 809 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.plot~] @url ui.plot~-help.pd; -#X obj 668 696 array.plot; -#N canvas 10 703 400 290 info 0; +#X obj 668 806 array.plot; +#N canvas 10 813 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.plot~; #X text 10 76 category:; @@ -83,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 703 pd info; +#X restore 10 813 pd info; #X connect 6 0 8 0; #X connect 7 0 8 1; #X connect 9 0 10 0; diff --git a/ceammc/ext/doc/array.plot~.pddoc b/ceammc/ext/doc/array.plot~.pddoc index f9798ad250..3915b1a500 100644 --- a/ceammc/ext/doc/array.plot~.pddoc +++ b/ceammc/ext/doc/array.plot~.pddoc @@ -17,13 +17,20 @@ 0.9 + + array name + minimal y-axis + value + maximum y-axis + value + array name minimal y-axis value minimal y-axis value - calculate y-axis range + calculate y-axis range automatically diff --git a/ceammc/ext/doc/array.resample-help.pd b/ceammc/ext/doc/array.resample-help.pd index ab131bced6..3f41aa0546 100644 --- a/ceammc/ext/doc/array.resample-help.pd +++ b/ceammc/ext/doc/array.resample-help.pd @@ -77,13 +77,13 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 859 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 862 library: ceammc v0.9.4; +#X text 10 862 library: ceammc v0.9.6; #N canvas 10 881 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.resample; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.risset_rythm~-help.pd b/ceammc/ext/doc/array.risset_rythm~-help.pd new file mode 100644 index 0000000000..53ac15e8ae --- /dev/null +++ b/ceammc/ext/doc/array.risset_rythm~-help.pd @@ -0,0 +1,78 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 461 50 cnv 1 304 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 461 50 Risset Rythm: accelerando or ritardando; +#X obj 1 1 cnv 5 765 40 empty empty array.risset_rythm~ 20 20 0 20 +-104026 -4096 0; +#X obj 602 11 array.risset_rythm~; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 not finished yet; +#X obj 50 143 loadmsg load %CEAMMC%/guitar1.wav to ARR @resize; +#X obj 539 143 table ARR; +#X obj 50 172 expand_env; +#X obj 174 172 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 174 201 openpanel; +#X obj 50 230 snd.file; +#X obj 50 259 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 287 array.risset_rythm~ ARR; +#X obj 50 316 ui.hgain~; +#X obj 222 316 ui.dsp~; +#X obj 50 345 dac~; +#X obj 20 394 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 399 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X obj 20 514 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 519 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 520 1\.; +#X text 150 520 *symbol*; +#X text 245 520 change array name.; +#X obj 20 550 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 555 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 556 1\.; +#X text 245 556 output signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title array @url ceammc.array-help.pd; +#X obj 1 606 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 609 library: ceammc v0.9.4; +#N canvas 10 628 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.4; +#X text 10 54 object:; +#X text 120 54 array.risset_rythm~; +#X text 10 76 category:; +#X text 120 76 array; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 array \, risset \, rythm; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 628 pd info; +#X connect 6 0 8 0; +#X connect 9 0 10 0; +#X connect 8 0 11 0; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 14 0 16 0; +#X connect 14 0 16 1; \ No newline at end of file diff --git a/ceammc/ext/doc/array.risset_rythm~.pddoc b/ceammc/ext/doc/array.risset_rythm~.pddoc new file mode 100644 index 0000000000..48ebcb93b8 --- /dev/null +++ b/ceammc/ext/doc/array.risset_rythm~.pddoc @@ -0,0 +1,51 @@ + + + + array.risset_rythm~ + + + Serge Poltavsky + + Risset Rhythm: accelerando or ritardando + GPL3 or later + ceammc + array + array risset rhythm + 0.9.5 + + + not finished yet + + + + + + change array name + + + + output signal + + + + + + + + diff --git a/ceammc/ext/doc/array.rms-help.pd b/ceammc/ext/doc/array.rms-help.pd index 12304ec50f..0a022fbfca 100644 --- a/ceammc/ext/doc/array.rms-help.pd +++ b/ceammc/ext/doc/array.rms-help.pd @@ -38,8 +38,8 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; -49933 0; #X text 110 403 1\.; #X text 150 403 symbol; -#X obj 246 404 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 403 NAME: array name. Type: symbol.; +#X obj 246 404 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 403 ARRAY: array name. Type: symbol.; #X obj 20 433 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 438 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -62,7 +62,7 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 604 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 607 library: ceammc v0.9.4; +#X text 10 607 library: ceammc v0.9.6; #X text 507 619 see also:; #X obj 581 619 array.mean; #X obj 668 619 array.sum2; @@ -71,7 +71,7 @@ Root mean square @url https://en.wikipedia.org/wiki/Root_mean_square; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.rms; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.rms.pddoc b/ceammc/ext/doc/array.rms.pddoc index 7f58e6b66d..09a83468ec 100644 --- a/ceammc/ext/doc/array.rms.pddoc +++ b/ceammc/ext/doc/array.rms.pddoc @@ -21,7 +21,7 @@ Root mean square - array name + array name array name diff --git a/ceammc/ext/doc/array.s2p-help.pd b/ceammc/ext/doc/array.s2p-help.pd index c2b546ad9c..f2372f7a8f 100644 --- a/ceammc/ext/doc/array.s2p-help.pd +++ b/ceammc/ext/doc/array.s2p-help.pd @@ -28,8 +28,8 @@ -49933 0; #X text 110 376 1\.; #X text 150 376 symbol; -#X obj 246 377 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 376 NAME: array name. Type: symbol.; +#X obj 246 377 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 376 ARRAY: array name. Type: symbol.; #X obj 20 406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 411 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -54,7 +54,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 597 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 600 library: ceammc v0.9.4; +#X text 10 600 library: ceammc v0.9.6; #X text 601 612 see also:; #X obj 675 612 array.p2s; #N canvas 10 619 400 290 info 0; @@ -62,7 +62,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.s2p; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.s2p.pddoc b/ceammc/ext/doc/array.s2p.pddoc index 18aac3e355..eec3093dd6 100644 --- a/ceammc/ext/doc/array.s2p.pddoc +++ b/ceammc/ext/doc/array.s2p.pddoc @@ -24,7 +24,7 @@ with this object you can get relative position in array - array name + array name array name diff --git a/ceammc/ext/doc/array.set-help.pd b/ceammc/ext/doc/array.set-help.pd index 3c9f8f3541..0cb417120b 100644 --- a/ceammc/ext/doc/array.set-help.pd +++ b/ceammc/ext/doc/array.set-help.pd @@ -25,8 +25,8 @@ -49933 0; #X text 110 366 1\.; #X text 150 366 symbol; -#X obj 246 367 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 366 NAME: array name. Type: symbol.; +#X obj 246 367 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 366 ARRAY: array name. Type: symbol.; #X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 401 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -36,31 +36,31 @@ #X text 245 465 scale input values to fit them in [0 \, 1] range. Default value: 0\.; #X msg 110 507 @redraw; -#X text 245 507 Get/Set redraw array view. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 559 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 564 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 507 Get/Set redraw array view. Type: bool. Default value: +1\.; +#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 551 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 565 1\.; -#X text 150 565 *list*; -#X text 245 565 resizes array and sets its content.; -#X text 150 585 *symbol*; -#X text 245 585 set array name.; +#X text 110 552 1\.; +#X text 150 552 *list*; +#X text 245 552 resizes array and sets its content.; +#X text 150 572 *symbol*; +#X text 245 572 set array name.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 635 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 638 library: ceammc v0.9.4; -#X text 594 650 see also:; -#X obj 668 650 array.each; -#N canvas 10 657 400 290 info 0; +#X obj 1 622 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 625 library: ceammc v0.9.6; +#X text 594 637 see also:; +#X obj 668 637 array.each; +#N canvas 10 644 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.set; #X text 10 76 category:; @@ -79,7 +79,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 657 pd info; +#X restore 10 644 pd info; #X connect 7 0 11 0; #X connect 8 0 11 0; #X connect 9 0 12 0; diff --git a/ceammc/ext/doc/array.set.pddoc b/ceammc/ext/doc/array.set.pddoc index fdbc1f90fe..c3066f8181 100644 --- a/ceammc/ext/doc/array.set.pddoc +++ b/ceammc/ext/doc/array.set.pddoc @@ -21,13 +21,13 @@ 0.4 - array name + array name array name - scale input values to fit them in - [0, 1] range - redraw array view + scale input + values to fit them in [0, 1] range + redraw array view diff --git a/ceammc/ext/doc/array.stddev-help.pd b/ceammc/ext/doc/array.stddev-help.pd index d403d7086b..17680bdfe9 100644 --- a/ceammc/ext/doc/array.stddev-help.pd +++ b/ceammc/ext/doc/array.stddev-help.pd @@ -33,8 +33,8 @@ https://en.wikipedia.org/wiki/Standard_deviation; -49933 0; #X text 110 374 1\.; #X text 150 374 symbol; -#X obj 246 375 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 374 NAME: array name. Type: symbol.; +#X obj 246 375 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 374 ARRAY: array name. Type: symbol.; #X obj 20 404 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 409 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -57,7 +57,7 @@ https://en.wikipedia.org/wiki/Standard_deviation; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.9.4; +#X text 10 578 library: ceammc v0.9.6; #X text 564 590 see also:; #X obj 638 590 array.variance; #N canvas 10 597 400 290 info 0; @@ -65,7 +65,7 @@ https://en.wikipedia.org/wiki/Standard_deviation; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.stddev; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.stddev.pddoc b/ceammc/ext/doc/array.stddev.pddoc index 760f7d223f..e7b83f51f7 100644 --- a/ceammc/ext/doc/array.stddev.pddoc +++ b/ceammc/ext/doc/array.stddev.pddoc @@ -20,7 +20,7 @@ Standard deviation - array name + array name array name diff --git a/ceammc/ext/doc/array.stretch-help.pd b/ceammc/ext/doc/array.stretch-help.pd index a9b5e45351..72ada7300d 100644 --- a/ceammc/ext/doc/array.stretch-help.pd +++ b/ceammc/ext/doc/array.stretch-help.pd @@ -69,8 +69,7 @@ Type: int. Default value: 64\. Range: 8\...128\.; #X msg 110 797 @antialias; #X text 245 797 Get/Set use of anti-alias filter. Anti-alias filter is used to prevent folding of high frequencies when transposing the -sample rate with interpolation. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; +sample rate with interpolation. Type: bool. Default value: 0\.; #X msg 110 869 @dest; #X text 245 869 Get/Set destination array. Type: symbol.; #X msg 110 898 @overlap; @@ -112,7 +111,7 @@ tempo and vice versa. Increasing this value reduces computational burden parameter value according to tempo setting (recommended). Type: int. Units: ms. Default value: 0\. Range: 0\...100\.; #X msg 110 1529 @speech; -#X text 245 1529 optimize for speech sound source.; +#X text 245 1529 Get/Set optimize for speech sound source. Type: bool.; #X msg 110 1558 @src; #X text 245 1558 Get/Set source array. Type: symbol.; #X msg 110 1587 @tempo; @@ -135,13 +134,13 @@ sound pitch. Type: float. Units: %. Default value: 0\. Range: -50\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1746 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1749 library: ceammc v0.9.4; +#X text 10 1749 library: ceammc v0.9.6; #N canvas 10 1768 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.stretch; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.stretch.pddoc b/ceammc/ext/doc/array.stretch.pddoc index decd9ded70..d9fda5d2ab 100644 --- a/ceammc/ext/doc/array.stretch.pddoc +++ b/ceammc/ext/doc/array.stretch.pddoc @@ -32,8 +32,8 @@ playback rate - changes both tempo and pitch together as if a vinyl disc was played at different RPM rate - optimize for speech sound source - use of anti-alias filter. + optimize for speech sound source + use of anti-alias filter. Anti-alias filter is used to prevent folding of high frequencies when transposing the sample rate with interpolation. pitch diff --git a/ceammc/ext/doc/array.sum-help.pd b/ceammc/ext/doc/array.sum-help.pd index e9db986297..1ab7cc4bd3 100644 --- a/ceammc/ext/doc/array.sum-help.pd +++ b/ceammc/ext/doc/array.sum-help.pd @@ -23,8 +23,8 @@ -49933 0; #X text 110 323 1\.; #X text 150 323 symbol; -#X obj 246 324 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 NAME: array name. Type: symbol.; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 ARRAY: array name. Type: symbol.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 524 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 527 library: ceammc v0.9.4; +#X text 10 527 library: ceammc v0.9.6; #X text 594 539 see also:; #X obj 668 539 array.sum2; #N canvas 10 546 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.sum; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.sum.pddoc b/ceammc/ext/doc/array.sum.pddoc index b81c9063f4..b4f49fd630 100644 --- a/ceammc/ext/doc/array.sum.pddoc +++ b/ceammc/ext/doc/array.sum.pddoc @@ -17,7 +17,7 @@ - array name + array name array name diff --git a/ceammc/ext/doc/array.sum2-help.pd b/ceammc/ext/doc/array.sum2-help.pd index a82a551eb8..329405e8ef 100644 --- a/ceammc/ext/doc/array.sum2-help.pd +++ b/ceammc/ext/doc/array.sum2-help.pd @@ -23,8 +23,8 @@ -49933 0; #X text 110 323 1\.; #X text 150 323 symbol; -#X obj 246 324 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 NAME: array name. Type: symbol.; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 ARRAY: array name. Type: symbol.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 524 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 527 library: ceammc v0.9.4; +#X text 10 527 library: ceammc v0.9.6; #X text 600 539 see also:; #X obj 674 539 array.sum; #N canvas 10 546 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.sum2; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.sum2.pddoc b/ceammc/ext/doc/array.sum2.pddoc index 6c54e3f299..65a53c8244 100644 --- a/ceammc/ext/doc/array.sum2.pddoc +++ b/ceammc/ext/doc/array.sum2.pddoc @@ -17,7 +17,7 @@ - array name + array name array name diff --git a/ceammc/ext/doc/array.variance-help.pd b/ceammc/ext/doc/array.variance-help.pd index 35d5b7be10..6f9015be05 100644 --- a/ceammc/ext/doc/array.variance-help.pd +++ b/ceammc/ext/doc/array.variance-help.pd @@ -32,8 +32,8 @@ Variance @url https://en.wikipedia.org/wiki/Variance; -49933 0; #X text 110 374 1\.; #X text 150 374 symbol; -#X obj 246 375 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 374 NAME: array name. Type: symbol.; +#X obj 246 375 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 374 ARRAY: array name. Type: symbol.; #X obj 20 404 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 409 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -56,7 +56,7 @@ Variance @url https://en.wikipedia.org/wiki/Variance; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.9.4; +#X text 10 578 library: ceammc v0.9.6; #X text 579 590 see also:; #X obj 653 590 array.stddev; #N canvas 10 597 400 290 info 0; @@ -64,7 +64,7 @@ Variance @url https://en.wikipedia.org/wiki/Variance; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.variance; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.variance.pddoc b/ceammc/ext/doc/array.variance.pddoc index 68a98a2fa5..b887266bfb 100644 --- a/ceammc/ext/doc/array.variance.pddoc +++ b/ceammc/ext/doc/array.variance.pddoc @@ -20,7 +20,7 @@ Variance - array name + array name array name diff --git a/ceammc/ext/doc/array.vplay-help.pd b/ceammc/ext/doc/array.vplay-help.pd index f0c42afc1e..137b819193 100644 --- a/ceammc/ext/doc/array.vplay-help.pd +++ b/ceammc/ext/doc/array.vplay-help.pd @@ -45,8 +45,8 @@ -49933 0; #X text 110 481 1\.; #X text 150 481 symbol; -#X obj 246 482 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 481 NAME: array name. Type: symbol.; +#X obj 246 482 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 481 ARRAY: array name. Type: symbol.; #X obj 20 511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 516 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -65,8 +65,8 @@ samp. Default value: 0\.; #X text 245 706 Get/Set end position in samples. Type: int. Units: samp. Default value: -1\.; #X msg 110 748 @reversed; -#X text 245 748 Get/Set playing backwards (if set to 1). Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +#X text 245 748 Get/Set playing backwards (if set to 1). Type: bool. +Default value: 0\.; #X msg 110 790 @speed; #X text 245 790 Get/Set play speed. Type: float. Default value: 1\. Min value: 0.1\.; @@ -99,7 +99,7 @@ sample. Type: float.; -49933 0; #X text 110 1171 1\.; #X text 150 1171 *bang*; -#X text 245 1171 start playing from the begining.; +#X text 245 1171 start playing from the beginning.; #X text 150 1191 *float*; #X text 245 1191 1 - play \, 0 - stop.; #X obj 20 1221 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -115,7 +115,7 @@ sample. Type: float.; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; #X obj 1 1297 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1300 library: ceammc v0.9.4; +#X text 10 1300 library: ceammc v0.9.6; #X text 601 1312 see also:; #X obj 675 1312 list.each; #N canvas 10 1319 400 290 info 0; @@ -123,7 +123,7 @@ sample. Type: float.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.vplay; #X text 10 76 category:; diff --git a/ceammc/ext/doc/array.vplay.pddoc b/ceammc/ext/doc/array.vplay.pddoc index faaec01537..f90d022e90 100644 --- a/ceammc/ext/doc/array.vplay.pddoc +++ b/ceammc/ext/doc/array.vplay.pddoc @@ -17,23 +17,23 @@ 0.5 - array name + array name array name - - player state + player state play speed begin position in samples end position in samples - + absolute start position in samples - + absolute stop position in samples - playing backwards (if set - to 1) + playing backwards (if set to + 1) start playing @@ -50,7 +50,7 @@ - start playing from the begining + start playing from the beginning 1 - play, 0 - stop diff --git a/ceammc/ext/doc/array.window-help.pd b/ceammc/ext/doc/array.window-help.pd index 0101218dd0..4f2cdaa44f 100644 --- a/ceammc/ext/doc/array.window-help.pd +++ b/ceammc/ext/doc/array.window-help.pd @@ -23,74 +23,81 @@ #X obj 50 349 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 401 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 401 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 436 @array; -#X text 245 436 Get/Set array name. Type: symbol.; -#X msg 110 465 @redraw; -#X text 245 465 Get/Set redraw after array change. Type: int. Default -value: 1\. Allowed values: 1 \, 0\.; -#X msg 110 507 @type; -#X text 245 507 Get/Set window type. Type: symbol. Default value: hann. +#X text 110 436 1\.; +#X text 150 436 symbol; +#X obj 246 437 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 436 ARRAY: array name. Type: symbol.; +#X obj 20 466 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 471 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 506 @array; +#X text 245 506 Get/Set array name. Type: symbol.; +#X msg 110 535 @redraw; +#X text 245 535 Get/Set redraw after array change. Type: bool. Default +value: 1\.; +#X msg 110 577 @type; +#X text 245 577 Get/Set window type. Type: symbol. Default value: hann. Allowed values: tri \, welch \, hann \, sine \, rect \, hamming \, blackman \, nuttall \, blackman-harris \, flattop \, gauss.; -#X obj 20 574 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 579 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 644 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 649 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 614 blackman; -#X text 245 614 generate blackman window.; -#X msg 110 641 blackman-harris; -#X text 245 641 generate blackman-harris window.; -#X msg 110 668 fit; -#X text 245 668 fit array y-bounds to 0\..1 range.; -#X msg 110 695 flattop; -#X text 245 695 generate flattop window.; -#X msg 110 722 gauss; -#X text 245 722 generate gauss window.; -#X msg 110 749 hamming; -#X text 245 749 generate hamming window.; -#X msg 110 776 hann; -#X text 245 776 generate hann window.; -#X msg 110 803 nuttall; -#X text 245 803 generate nuttall window.; -#X msg 110 830 rect; -#X text 245 830 generate rectangualar window.; -#X msg 110 857 resize; -#X text 245 857 resize specified array to given size. Arguments are:; -#X obj 255 880 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 880 [N]: new size. Type: int. Min value: 0\.; -#X msg 110 905 sine; -#X text 245 905 generate sine window.; -#X msg 110 932 tri; -#X text 245 932 generate triangualar window.; -#X msg 110 959 welch; -#X text 245 959 generate welch window.; -#X obj 20 996 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1001 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 684 blackman; +#X text 245 684 generate blackman window.; +#X msg 110 711 blackman-harris; +#X text 245 711 generate blackman-harris window.; +#X msg 110 738 fit; +#X text 245 738 fit array y-bounds to 0\..1 range.; +#X msg 110 765 flattop; +#X text 245 765 generate flattop window.; +#X msg 110 792 gauss; +#X text 245 792 generate gauss window.; +#X msg 110 819 hamming; +#X text 245 819 generate hamming window.; +#X msg 110 846 hann; +#X text 245 846 generate hann window.; +#X msg 110 873 nuttall; +#X text 245 873 generate nuttall window.; +#X msg 110 900 rect; +#X text 245 900 generate rectangular window.; +#X msg 110 927 resize; +#X text 245 927 resize specified array to given size. Arguments are:; +#X obj 255 950 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 950 [N]: new size. Type: int. Min value: 0\.; +#X msg 110 975 sine; +#X text 245 975 generate sine window.; +#X msg 110 1002 tri; +#X text 245 1002 generate triangular window.; +#X msg 110 1029 welch; +#X text 245 1029 generate welch window.; +#X obj 20 1066 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1071 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1002 1\.; -#X text 150 1002 *bang*; -#X text 245 1002 fill array with window.; -#X obj 20 1032 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1037 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1072 1\.; +#X text 150 1072 *bang*; +#X text 245 1072 fill array with window.; +#X obj 20 1102 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1107 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1038 1\.; -#X text 245 1038 bang on finish.; +#X text 110 1108 1\.; +#X text 245 1108 bang on finish.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 1088 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1091 library: ceammc v0.9.4; -#X text 621 1103 see also:; -#X obj 695 1103 window; -#N canvas 10 1110 400 290 info 0; +#X obj 1 1158 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1161 library: ceammc v0.9.6; +#X text 621 1173 see also:; +#X obj 695 1173 window; +#N canvas 10 1180 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 array.window; #X text 10 76 category:; @@ -109,7 +116,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1110 pd info; +#X restore 10 1180 pd info; #X connect 5 0 12 0; #X connect 9 0 12 0; #X connect 6 0 12 0; diff --git a/ceammc/ext/doc/array.window.pddoc b/ceammc/ext/doc/array.window.pddoc index 5096c7f7dd..83d846bd0d 100644 --- a/ceammc/ext/doc/array.window.pddoc +++ b/ceammc/ext/doc/array.window.pddoc @@ -16,10 +16,12 @@ 0.7 + + array name + array name - redraw after array - change + redraw after array change window type @@ -35,9 +37,9 @@ generate hamming window generate hann window generate nuttall window - generate rectangualar window + generate rectangular window generate sine window - generate triangualar window + generate triangular window generate welch window diff --git a/ceammc/ext/doc/canvas.current-help.pd b/ceammc/ext/doc/canvas.current-help.pd index d7d9df832d..fc85fcd3be 100644 --- a/ceammc/ext/doc/canvas.current-help.pd +++ b/ceammc/ext/doc/canvas.current-help.pd @@ -22,8 +22,8 @@ #X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 351 @abstraction; -#X text 245 351 (readonly) Get 1 if canvas is abstraction. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; +#X text 245 351 (readonly) Get 1 if canvas is abstraction. Type: bool. +Default value: 1\.; #X msg 110 393 @args; #X text 245 393 (readonly) Get canvas creation arguments. Type: list.; #X msg 110 422 @dir; @@ -39,7 +39,7 @@ test_canvas.; #X text 245 548 (readonly) Get canvas search paths. Type: list.; #X msg 110 577 @root; #X text 245 577 (readonly) Get 1 if canvas is top-level (window). Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; +bool. Default value: 1\.; #X msg 110 619 @width; #X text 245 619 (readonly) Get canvas width (window or GOP). Type: int. Default value: 600\.; @@ -74,7 +74,7 @@ list. Default value: 600 400\.; #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 966 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 969 library: ceammc v0.9.4; +#X text 10 969 library: ceammc v0.9.6; #X text 507 981 see also:; #X obj 581 981 patch.args; #X obj 668 981 canvas.top; @@ -83,7 +83,7 @@ list. Default value: 600 400\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 canvas.current; #X text 10 76 category:; diff --git a/ceammc/ext/doc/canvas.current.pddoc b/ceammc/ext/doc/canvas.current.pddoc index be7a845a3c..07d36b2bc1 100644 --- a/ceammc/ext/doc/canvas.current.pddoc +++ b/ceammc/ext/doc/canvas.current.pddoc @@ -18,28 +18,30 @@ 0.4 - canvas + canvas name - canvas directory (only - if top level or abstraction) - canvas creation arguments - 1 if canvas is + canvas directory + (only if top level or abstraction) + canvas creation + arguments + 1 if canvas is top-level (window) - 1 if - canvas is abstraction - canvas dimensions. - If root canvas (window) return window size, if subpatch return Graph on Parent + 1 if canvas is + abstraction + canvas + dimensions. If root canvas (window) return window size, if subpatch return Graph on + Parent size + canvas font size - canvas font - size - canvas search paths - canvas width (window - or GOP) - canvas height (window + canvas search + paths + canvas width (window or GOP) - canvas x-pos (window or + canvas height + (window or GOP) + canvas x-pos (window or GOP) - canvas y-pos (window or + canvas y-pos (window or GOP) diff --git a/ceammc/ext/doc/canvas.dir-help.pd b/ceammc/ext/doc/canvas.dir-help.pd index 982a52fa1e..494a9ef909 100644 --- a/ceammc/ext/doc/canvas.dir-help.pd +++ b/ceammc/ext/doc/canvas.dir-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 492 520 see also:; #X obj 566 520 canvas.name; #X obj 661 520 canvas.path; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 canvas.dir; #X text 10 76 category:; diff --git a/ceammc/ext/doc/canvas.name-help.pd b/ceammc/ext/doc/canvas.name-help.pd index fc906596f4..2c75b403dd 100644 --- a/ceammc/ext/doc/canvas.name-help.pd +++ b/ceammc/ext/doc/canvas.name-help.pd @@ -26,7 +26,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 canvas.current; #N canvas 10 527 400 290 info 0; @@ -34,7 +34,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 canvas.name; #X text 10 76 category:; diff --git a/ceammc/ext/doc/canvas.path-help.pd b/ceammc/ext/doc/canvas.path-help.pd index 789e42a2ad..dda89063ed 100644 --- a/ceammc/ext/doc/canvas.path-help.pd +++ b/ceammc/ext/doc/canvas.path-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 498 520 see also:; #X obj 572 520 canvas.name; #X obj 667 520 canvas.dir; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 canvas.path; #X text 10 76 category:; diff --git a/ceammc/ext/doc/canvas.top-help.pd b/ceammc/ext/doc/canvas.top-help.pd index 966a878115..29e58878b9 100644 --- a/ceammc/ext/doc/canvas.top-help.pd +++ b/ceammc/ext/doc/canvas.top-help.pd @@ -70,7 +70,7 @@ test_canvas.; #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 858 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 861 library: ceammc v0.9.4; +#X text 10 861 library: ceammc v0.9.6; #X text 478 873 see also:; #X obj 552 873 patch.args; #X obj 639 873 canvas.current; @@ -79,7 +79,7 @@ test_canvas.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 canvas.top; #X text 10 76 category:; diff --git a/ceammc/ext/doc/canvas.top.pddoc b/ceammc/ext/doc/canvas.top.pddoc index a02e12d7c0..8f8890438d 100644 --- a/ceammc/ext/doc/canvas.top.pddoc +++ b/ceammc/ext/doc/canvas.top.pddoc @@ -18,20 +18,21 @@ 0.4 - canvas + canvas name - canvas + canvas directory - window + window size - window + window width - window + window height - window font - search paths - window x-pos - window y-pos + window font + search + paths + window x-pos + window y-pos save patch to postscript diff --git a/ceammc/ext/doc/ceammc-help.pd b/ceammc/ext/doc/ceammc-help.pd index c55c4983fe..4f8db36555 100644 --- a/ceammc/ext/doc/ceammc-help.pd +++ b/ceammc/ext/doc/ceammc-help.pd @@ -14,1580 +14,1681 @@ purposes in centre of electroacoustic music of Moscow Conservatory #X text 200 238 root mean square with moving-average algorithm.; #X obj 30 265 an.tempo~; #X text 200 265 tempo detector; -#X obj 20 292 cnv 5 59 31 empty empty array 4 13 0 17 -262144 -49933 +#X obj 30 292 an.zero~; +#X text 200 292 zero crossing count/rate/freq calculator; +#X obj 20 319 cnv 5 59 31 empty empty array 4 13 0 17 -262144 -49933 0; -#X obj 20 333 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 344 array.bpm; -#X text 200 344 BPM calculator; -#X obj 30 371 array.circular~; -#X text 200 371 circular buffer for arrays; -#X obj 30 398 array.copy; -#X text 200 398 copy samples from one array to another; -#X obj 30 425 array.do; -#X text 200 425 iterate and modify array content via side-chain; -#X obj 30 452 array.each; -#X text 200 452 process each array elements via side-chain; -#X obj 30 479 array.fill; -#X text 200 479 fill array with single value or pattern; -#X obj 30 506 array.grainer~; -#X text 200 506 array granulator; -#X obj 30 533 array.hist; -#X text 200 533 calculates array histogram; -#X obj 30 560 array.mean; -#X text 200 560 calculates array arithmetic mean value; -#X obj 30 587 array.minmax; -#X text 200 587 find array min and max element value; -#X obj 30 614 array.play~; -#X text 200 614 array player with variable speed and amplitude; -#X obj 30 641 array.plot; -#X text 200 641 array data plotter; -#X obj 30 668 array.plot~; -#X text 200 668 plot signal on specified array; -#X obj 30 695 array.resample; -#X text 200 695 array resampler; -#X obj 30 722 array.rms; -#X text 200 722 calculates root mean square value for array; -#X obj 30 749 array.set; -#X text 200 749 set array content from list; -#X obj 30 776 array.stddev; -#X text 200 776 calculates standard deviation for array values; -#X obj 30 803 array.stretch; -#X text 200 803 array time-stretch \, pitch-shift or rate-change; -#X obj 30 830 array.sum; -#X text 200 830 calculates sum of array elements; -#X obj 30 857 array.sum2; -#X text 200 857 calculates sum of squares of array elements; -#X obj 30 884 array.variance; -#X text 200 884 calculates variance of array values; -#X obj 30 911 array.vplay; -#X text 200 911 simple array player for using with vline~; -#X obj 30 938 array.window; -#X text 200 938 fill array with window; -#X obj 30 965 plot.geomspace~; -#X text 200 965 outputs numbers spaced evenly on a log scale (a geometric +#X obj 20 360 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 371 array.bpm; +#X text 200 371 BPM calculator; +#X obj 30 398 array.circular; +#X text 200 398 array read/write as circular buffer; +#X obj 30 425 array.circular~; +#X text 200 425 circular buffer for arrays; +#X obj 30 452 array.convolve; +#X text 200 452 array FFT convolution; +#X obj 30 479 array.copy; +#X text 200 479 copy samples from one array to another; +#X obj 30 506 array.do; +#X text 200 506 iterate and modify array content via side-chain; +#X obj 30 533 array.each; +#X text 200 533 process each array elements via side-chain; +#X obj 30 560 array.fill; +#X text 200 560 fill array with single value or pattern; +#X obj 30 587 array.grainer~; +#X text 200 587 array granulator; +#X obj 30 614 array.hist; +#X text 200 614 calculates array histogram; +#X obj 30 641 array.mean; +#X text 200 641 calculates array arithmetic mean value; +#X obj 30 668 array.minmax; +#X text 200 668 find array min and max element value; +#X obj 30 695 array.play~; +#X text 200 695 array player with variable speed and amplitude; +#X obj 30 722 array.plot; +#X text 200 722 array data plotter; +#X obj 30 749 array.plot~; +#X text 200 749 plot signal on specified array; +#X obj 30 776 array.resample; +#X text 200 776 array resampler; +#X obj 30 803 array.rms; +#X text 200 803 calculates root mean square value for array; +#X obj 30 830 array.set; +#X text 200 830 set array content from list; +#X obj 30 857 array.stddev; +#X text 200 857 calculates standard deviation for array values; +#X obj 30 884 array.stretch; +#X text 200 884 array time-stretch \, pitch-shift or rate-change; +#X obj 30 911 array.sum; +#X text 200 911 calculates sum of array elements; +#X obj 30 938 array.sum2; +#X text 200 938 calculates sum of squares of array elements; +#X obj 30 965 array.variance; +#X text 200 965 calculates variance of array values; +#X obj 30 992 array.vplay; +#X text 200 992 simple array player for using with vline~; +#X obj 30 1019 array.window; +#X text 200 1019 fill array with window; +#X obj 30 1046 plot.geomspace~; +#X text 200 1046 outputs numbers spaced evenly on a log scale (a geometric progression); -#X obj 30 1005 plot.hist~; -#X text 200 1005 calculate and output signal histogram; -#X obj 30 1032 plot.linspace~; -#X text 200 1032 outputs numbers spaced evenly spaced over a specified +#X obj 30 1086 plot.hist~; +#X text 200 1086 calculate and output signal histogram; +#X obj 30 1113 plot.linspace~; +#X text 200 1113 outputs numbers spaced evenly spaced over a specified interval; -#X obj 30 1072 plot.logspace~; -#X text 200 1072 outputs numbers spaced evenly on a log scale; -#X obj 30 1099 plot.response~; -#X text 200 1099 output amp/phase freq response to impulse; -#X obj 20 1126 cnv 5 48 31 empty empty base 4 13 0 17 -262144 -49933 +#X obj 30 1153 plot.logspace~; +#X text 200 1153 outputs numbers spaced evenly on a log scale; +#X obj 30 1180 plot.response~; +#X text 200 1180 output amp/phase freq response to impulse; +#X obj 20 1207 cnv 5 48 31 empty empty base 4 13 0 17 -262144 -49933 0; -#X obj 20 1167 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 1178 ceammc.search; -#X text 200 1178 ceammc library search object; -#X obj 30 1208 ui.link @title [function] @url function-help.pd; -#X text 200 1205 named function; -#X obj 30 1230 function.call; -#X text 200 1230 call named function; -#X obj 30 1257 gain~; -#X text 200 1257 multislot signal gain; -#X obj 30 1284 logger; -#X text 200 1284 advanced data logger; -#X obj 30 1311 matrix~; -#X text 200 1311 signal routing matrix; -#X obj 30 1338 metro.pattern; -#X text 200 1338 metro with rhythmic patterns; -#X obj 30 1365 metro.random; -#X text 200 1365 metro random bang with specified range; -#X obj 30 1392 metro.seq; -#X text 200 1392 metro sequencer; -#X obj 30 1419 mix~; -#X text 200 1419 multislot signal mixer; -#X obj 30 1446 nsig~; -#X text 200 1446 Mulitchannel converter from control to audio rate; -#X obj 30 1473 obj.props; -#X text 200 1473 property extractor; -#X obj 30 1500 radio; -#X text 200 1500 float index to outlet values as radio switch; -#X obj 30 1527 spring; -#X text 200 1527 float value "spring"; -#X obj 30 1554 sync; -#X text 200 1554 value synchronization; -#X obj 30 1581 window; -#X text 200 1581 returns window value by given window position; -#X obj 30 1608 xdac~; -#X text 200 1608 dac~ with channel ranges; -#X obj 30 1635 xfade2~; -#X text 200 1635 multi stereo-signal crossfade; -#X obj 30 1662 xfade~; -#X text 200 1662 multi signal crossfade; -#X obj 20 1689 cnv 5 57 31 empty empty chaos 4 13 0 17 -262144 -49933 +#X obj 20 1248 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 1259 ceammc.search; +#X text 200 1259 ceammc library search object; +#X obj 30 1289 ui.link @title [function] @url function-help.pd; +#X text 200 1286 named function; +#X obj 30 1311 function.call; +#X text 200 1311 call named function; +#X obj 30 1338 gain~; +#X text 200 1338 multislot signal gain; +#X obj 30 1365 logger; +#X text 200 1365 advanced data logger; +#X obj 30 1392 matrix~; +#X text 200 1392 signal routing matrix; +#X obj 30 1419 metro.pattern; +#X text 200 1419 metro with rhythmic patterns; +#X obj 30 1446 metro.random; +#X text 200 1446 metro random bang with specified range; +#X obj 30 1473 metro.seq; +#X text 200 1473 metro sequencer; +#X obj 30 1500 mix~; +#X text 200 1500 multislot signal mixer; +#X obj 30 1527 nsig~; +#X text 200 1527 Mulitchannel converter from control to audio rate; +#X obj 30 1554 obj.props; +#X text 200 1554 property extractor; +#X obj 30 1581 radio; +#X text 200 1581 float index to outlet values as radio switch; +#X obj 30 1608 spring; +#X text 200 1608 float value "spring"; +#X obj 30 1635 sync; +#X text 200 1635 value synchronization; +#X obj 30 1662 window; +#X text 200 1662 returns window value by given window position; +#X obj 30 1689 xdac~; +#X text 200 1689 dac~ with channel ranges; +#X obj 30 1716 xfade2~; +#X text 200 1716 multi stereo-signal crossfade; +#X obj 30 1743 xfade~; +#X text 200 1743 multi signal crossfade; +#X obj 30 1770 z~; +#X text 200 1770 sample delay; +#X obj 20 1797 cnv 5 57 31 empty empty chaos 4 13 0 17 -262144 -49933 0; -#X obj 20 1730 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 1741 chaos.gbman0; -#X text 200 1741 Gingerbreadman map chaotic generator; -#X obj 30 1768 chaos.gbman0~; -#X text 200 1768 Gingerbreadman map chaotic generator; -#X obj 30 1795 chaos.jong; -#X text 200 1795 Peter de Jong attractor; -#X obj 30 1822 chaos.logistic; -#X text 200 1822 Logistic map chaotic generator; -#X obj 30 1849 chaos.std0; -#X text 200 1849 Standard map chaotic generator; -#X obj 30 1876 chaos.std0~; -#X text 200 1876 Standard map chaotic generator; -#X obj 20 1903 cnv 5 48 31 empty empty conv 4 13 0 17 -262144 -49933 +#X obj 20 1838 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 1849 chaos.gbman0; +#X text 200 1849 Gingerbreadman map chaotic generator; +#X obj 30 1876 chaos.gbman0~; +#X text 200 1876 Gingerbreadman map chaotic generator; +#X obj 30 1903 chaos.jong; +#X text 200 1903 Peter de Jong attractor; +#X obj 30 1930 chaos.logistic; +#X text 200 1930 Logistic map chaotic generator; +#X obj 30 1957 chaos.std0; +#X text 200 1957 Standard map chaotic generator; +#X obj 30 1984 chaos.std0~; +#X text 200 1984 Standard map chaotic generator; +#X obj 20 2011 cnv 5 48 31 empty empty conv 4 13 0 17 -262144 -49933 0; -#X obj 20 1944 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 1955 array.p2s; -#X text 200 1955 convert array phase [0\..1] to sample position; -#X obj 30 1982 array.s2p; -#X text 200 1982 convert sample position to phase range [0\..1]; -#X obj 30 2009 conv.amp2dbfs; -#X text 200 2009 convert from amplitude to decibel full scale; -#X obj 30 2036 conv.amp2dbfs~; -#X text 200 2036 convert from amplitude to decibel full scale; -#X obj 30 2063 conv.bits2bang; -#X text 200 2063 convert list of bits to bang events; -#X obj 30 2090 conv.bits2int; -#X text 200 2090 convert list of bits to integer; -#X obj 30 2117 conv.bits2note; -#X text 200 2117 convert list of bits to note events; -#X obj 30 2144 conv.bits2pos; -#X text 200 2144 convert list of bits to list of bit position; -#X obj 30 2171 conv.bpm2hz; -#X text 200 2171 converts BPM to frequency in herz; -#X obj 30 2198 conv.bpm2ms; -#X text 200 2198 convert frequency in BPM to period in milliseconds; -#X obj 30 2225 conv.bpm2sec; -#X text 200 2225 convert frequency in BPM to period in seconds; -#X obj 30 2252 conv.car2pol; -#X text 200 2252 convert cartesian coords to polar; -#X obj 30 2279 conv.cc2amp; -#X text 200 2279 convert from MIDI Control Change range; -#X obj 30 2306 conv.dbfs2amp; -#X text 200 2306 convert decibel full scale to amplitude; -#X obj 30 2333 conv.dbfs2amp~; -#X text 200 2333 convert decibel full scale to amplitude; -#X obj 30 2360 conv.degree2key; -#X text 200 2360 convert scale degree to key; -#X obj 30 2387 conv.edge2bang; -#X text 200 2387 edge detector for numeric stream; -#X obj 30 2414 conv.hex2int; -#X text 200 2414 hex symbol to int value; -#X obj 30 2441 conv.int2bits; -#X text 200 2441 convert integer to list of bits; -#X obj 30 2468 conv.lin2curve; -#X text 200 2468 map linear to exponential range with 0 allowed.; -#X obj 30 2495 conv.lin2exp; -#X text 200 2495 maps linear range to exponential range; -#X obj 30 2522 conv.lin2lin; -#X text 200 2522 convert from one linear range to another; -#X obj 30 2549 conv.lin2lin~; -#X text 200 2549 convert from one linear range to another for signals; -#X obj 30 2576 conv.list2props; -#X text 200 2576 converts list to series of property messages; -#X obj 30 2603 conv.midi2freq; -#X text 200 2603 convert from midi pitch to frequency in hz (with various +#X obj 20 2052 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 2063 array.p2s; +#X text 200 2063 convert array phase [0\..1] to sample position; +#X obj 30 2090 array.s2p; +#X text 200 2090 convert sample position to phase range [0\..1]; +#X obj 30 2117 conv.amp2dbfs; +#X text 200 2117 convert from amplitude to decibel full scale; +#X obj 30 2144 conv.amp2dbfs~; +#X text 200 2144 convert from amplitude to decibel full scale; +#X obj 30 2171 conv.bits2bang; +#X text 200 2171 convert list of bits to bang events; +#X obj 30 2198 conv.bits2int; +#X text 200 2198 convert list of bits to integer; +#X obj 30 2225 conv.bits2note; +#X text 200 2225 convert list of bits to note events; +#X obj 30 2252 conv.bits2pos; +#X text 200 2252 convert list of bits to list of bit position; +#X obj 30 2279 conv.bpm2hz; +#X text 200 2279 converts BPM to frequency in hertz; +#X obj 30 2306 conv.bpm2ms; +#X text 200 2306 convert frequency in BPM to period in milliseconds; +#X obj 30 2333 conv.bpm2sec; +#X text 200 2333 convert frequency in BPM to period in seconds; +#X obj 30 2360 conv.car2pol; +#X text 200 2360 convert cartesian coords to polar; +#X obj 30 2387 conv.cc2amp; +#X text 200 2387 convert from MIDI Control Change range; +#X obj 30 2414 conv.dbfs2amp; +#X text 200 2414 convert decibel full scale to amplitude; +#X obj 30 2441 conv.dbfs2amp~; +#X text 200 2441 convert decibel full scale to amplitude; +#X obj 30 2468 conv.degree2key; +#X text 200 2468 convert scale degree to key; +#X obj 30 2495 conv.edge2bang; +#X text 200 2495 edge detector for numeric stream; +#X obj 30 2522 conv.hex2int; +#X text 200 2522 hex symbol to int value; +#X obj 30 2549 conv.int2bits; +#X text 200 2549 convert integer to list of bits; +#X obj 30 2576 conv.lin2curve; +#X text 200 2576 map linear to exponential range with 0 allowed.; +#X obj 30 2603 conv.lin2exp; +#X text 200 2603 maps linear range to exponential range; +#X obj 30 2630 conv.lin2lin; +#X text 200 2630 convert from one linear range to another; +#X obj 30 2657 conv.lin2lin~; +#X text 200 2657 convert from one linear range to another for signals; +#X obj 30 2684 conv.list2props; +#X text 200 2684 converts list to series of property messages; +#X obj 30 2711 conv.midi2freq; +#X text 200 2711 convert from midi pitch to frequency in hz (with various base A and temperament); -#X obj 30 2643 conv.ms2bpm; -#X text 200 2643 convert period in milliseconds to frequency in BPM; -#X obj 30 2670 conv.ms2samp; -#X text 200 2670 convert time in milliseconds to number of samples +#X obj 30 2751 conv.ms2bpm; +#X text 200 2751 convert period in milliseconds to frequency in BPM; +#X obj 30 2778 conv.ms2samp; +#X text 200 2778 convert time in milliseconds to number of samples according to current samplerate; -#X obj 30 2710 conv.ms2samp~; -#X text 200 2710 convert time in milliseconds to number of samples +#X obj 30 2818 conv.ms2samp~; +#X text 200 2818 convert time in milliseconds to number of samples according to current samplerate; -#X obj 30 2750 conv.phase2rad; -#X text 200 2750 convert phase value [0-1] to radians [0-2π]; -#X obj 30 2777 conv.phase2rad~; -#X text 200 2777 convert phase value [0-1] to radians [0-2π]; -#X obj 30 2804 conv.pitch2midi; -#X text 200 2804 converts symbol pitch name to MIDI note number; -#X obj 30 2831 conv.pol2car; -#X text 200 2831 convert from polar coordinates to cartesian; -#X obj 30 2858 conv.rad2phase; -#X text 200 2858 convert radians value to phase; -#X obj 30 2885 conv.rad2phase~; -#X text 200 2885 convert radians value to phase; -#X obj 30 2912 conv.samp2ms; -#X text 200 2912 convert samples to time according to samplerate; -#X obj 30 2939 conv.samp2ms~; -#X text 200 2939 convert samples to milliseconds according to samplerate; -#X obj 30 2966 conv.samp2sec; -#X text 200 2966 convert samples to time according to samplerate; -#X obj 30 2993 conv.sec2bpm; -#X text 200 2993 convert period in seconds to frequency in BPM; -#X obj 30 3020 conv.sec2samp; -#X text 200 3020 convert time in seconds to number of samples according +#X obj 30 2858 conv.note2guido; +#X text 200 2858 convert MIDI note to Guido notation; +#X obj 30 2885 conv.phase2rad; +#X text 200 2885 convert phase value [0-1] to radians [0-2π]; +#X obj 30 2912 conv.phase2rad~; +#X text 200 2912 convert phase value [0-1] to radians [0-2π]; +#X obj 30 2939 conv.pitch2midi; +#X text 200 2939 converts symbol pitch name to MIDI note number; +#X obj 30 2966 conv.pol2car; +#X text 200 2966 convert from polar coordinates to cartesian; +#X obj 30 2993 conv.rad2phase; +#X text 200 2993 convert radians value to phase; +#X obj 30 3020 conv.rad2phase~; +#X text 200 3020 convert radians value to phase; +#X obj 30 3047 conv.samp2ms; +#X text 200 3047 convert samples to time according to samplerate; +#X obj 30 3074 conv.samp2ms~; +#X text 200 3074 convert samples to milliseconds according to samplerate; +#X obj 30 3101 conv.samp2sec; +#X text 200 3101 convert samples to time according to samplerate; +#X obj 30 3128 conv.sec2bpm; +#X text 200 3128 convert period in seconds to frequency in BPM; +#X obj 30 3155 conv.sec2samp; +#X text 200 3155 convert time in seconds to number of samples according to current samplerate; -#X obj 30 3060 conv.sec2str; -#X text 200 3060 converts float time in seconds to formated symbol +#X obj 30 3195 conv.sec2str; +#X text 200 3195 converts float time in seconds to formated symbol (or string); -#X obj 30 3087 conv.sig2float~; -#X text 200 3087 convert signal to floats; -#X obj 30 3114 conv.str2sec; -#X text 200 3114 converts formatted time to float value in seconds; -#X obj 30 3141 music.dur2time; -#X text 200 3141 convert duration list to time; -#X obj 30 3168 music.voice2midi; -#X text 200 3168 convert voice music list of midi pitches; -#X obj 20 3195 cnv 5 48 31 empty empty data 4 13 0 17 -262144 -49933 +#X obj 30 3222 conv.sig2float~; +#X text 200 3222 convert signal to floats; +#X obj 30 3249 conv.str2sec; +#X text 200 3249 converts formatted time to float value in seconds; +#X obj 30 3276 music.dur2time; +#X text 200 3276 convert duration list to time; +#X obj 30 3303 music.voice2midi; +#X text 200 3303 convert voice music list of midi pitches; +#X obj 20 3330 cnv 5 48 31 empty empty data 4 13 0 17 -262144 -49933 0; -#X obj 20 3236 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 3247 data.copy; -#X text 200 3247 make copy for any data types: MList \, Set etc...; -#X obj 30 3274 data.dict; -#X text 200 3274 dictionary container: store values by key; -#X obj 30 3301 data.fifo; -#X text 200 3301 First-In-First-Out (FIFO) queue data container; -#X obj 30 3328 data.float; -#X text 200 3328 robust float object; -#X obj 30 3355 data.int; -#X text 200 3355 robust int object; -#X obj 30 3382 data.list; -#X text 200 3382 list container; -#X obj 30 3409 data.mlist; -#X text 200 3409 multidimensional list container; -#X obj 30 3436 data.set; -#X text 200 3436 container that store unique elements; -#X obj 30 3463 data.set2list; -#X text 200 3463 converts set to list; -#X obj 30 3490 dict.contains; -#X text 200 3490 predicate to check if dict contains a keys; -#X obj 30 3517 dict.each; -#X text 200 3517 map each value in dict; -#X obj 30 3544 dict.from_list; -#X text 200 3544 creates dictionary from list; -#X obj 30 3571 dict.get; -#X text 200 3571 output dict values; -#X obj 30 3598 dict.keys; -#X text 200 3598 get list of dict keys; -#X obj 30 3625 dict.pass; -#X text 200 3625 passes specified keys in dict; -#X obj 30 3652 dict.reject; -#X text 200 3652 rejects specified keys from dict; -#X obj 30 3679 dict.size; -#X text 200 3679 dictionary size; -#X obj 30 3706 dict.to_list; -#X text 200 3706 converts dictionary to plain list; -#X obj 30 3733 dict.values; -#X text 200 3733 dictionary values as mlist; -#X obj 30 3760 mlist.flatten; -#X text 200 3760 flatten nested mlist; -#X obj 30 3787 rtree.to_list; -#X text 200 3787 convert OpenMusic-like rythm tree to list of fractions; -#X obj 30 3814 set.contains; -#X text 200 3814 check if specified element is in set; -#X obj 30 3841 set.diff; -#X text 200 3841 difference between two sets; -#X obj 30 3868 set.equal; -#X text 200 3868 checks if two sets are equal (contains same elements); -#X obj 30 3895 set.intersect; -#X text 200 3895 output intersection of given sets; -#X obj 30 3922 set.size; -#X text 200 3922 get number of elements in set; -#X obj 30 3949 set.symdiff; -#X text 200 3949 symmetric difference between two sets; -#X obj 30 3976 set.union; -#X text 200 3976 output union of given sets; -#X obj 20 4003 cnv 5 38 31 empty empty dyn 4 13 0 17 -262144 -49933 0; -#X obj 20 4044 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 4055 dyn.comp2~; -#X text 200 4055 stereo dynamic range compressor; -#X obj 30 4082 dyn.comp~; -#X text 200 4082 mono dynamic range compressors; -#X obj 30 4109 dyn.gate2~; -#X text 200 4109 stereo signal gate; -#X obj 30 4136 dyn.gate~; -#X text 200 4136 mono signal gate; -#X obj 30 4163 dyn.limit2~; -#X text 200 4163 stereo 1176LN Peak Limiter; -#X obj 30 4190 dyn.limit~; -#X text 200 4190 mono 1176LN Peak Limiter; -#X obj 30 4217 dyn.softclip~; -#X text 200 4217 soft signal clip; -#X obj 20 4244 cnv 5 38 31 empty empty env 4 13 0 17 -262144 -49933 0; -#X obj 20 4285 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 4296 env.adsr~; -#X text 200 4296 ADSR (Attack \, Decay \, Sustain \, Release) envelope +#X obj 20 3371 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 3382 data.copy; +#X text 200 3382 make copy for any data types: MList \, Set etc...; +#X obj 30 3409 data.dict; +#X text 200 3409 dictionary container: store values by key; +#X obj 30 3436 data.fifo; +#X text 200 3436 First-In-First-Out (FIFO) queue data container; +#X obj 30 3463 data.float; +#X text 200 3463 robust float object; +#X obj 30 3490 data.int; +#X text 200 3490 robust int object; +#X obj 30 3517 data.list; +#X text 200 3517 list container; +#X obj 30 3544 data.mlist; +#X text 200 3544 multidimensional list container; +#X obj 30 3571 data.set; +#X text 200 3571 container that store unique elements; +#X obj 30 3598 data.set2list; +#X text 200 3598 converts set to list; +#X obj 30 3625 dict.contains; +#X text 200 3625 predicate to check if dict contains a keys; +#X obj 30 3652 dict.each; +#X text 200 3652 map each value in dict; +#X obj 30 3679 dict.from_list; +#X text 200 3679 creates dictionary from list; +#X obj 30 3706 dict.get; +#X text 200 3706 output dict values; +#X obj 30 3733 dict.keys; +#X text 200 3733 get list of dict keys; +#X obj 30 3760 dict.pass; +#X text 200 3760 passes specified keys in dict; +#X obj 30 3787 dict.reject; +#X text 200 3787 rejects specified keys from dict; +#X obj 30 3814 dict.size; +#X text 200 3814 dictionary size; +#X obj 30 3841 dict.to_list; +#X text 200 3841 converts dictionary to plain list; +#X obj 30 3868 dict.values; +#X text 200 3868 dictionary values as mlist; +#X obj 30 3895 mlist.flatten; +#X text 200 3895 flatten nested mlist; +#X obj 30 3922 rtree.to_list; +#X text 200 3922 convert OpenMusic-like rythm tree to list of fractions; +#X obj 30 3949 set.contains; +#X text 200 3949 check if specified element is in set; +#X obj 30 3976 set.diff; +#X text 200 3976 difference between two sets; +#X obj 30 4003 set.equal; +#X text 200 4003 checks if two sets are equal (contains same elements); +#X obj 30 4030 set.intersect; +#X text 200 4030 output intersection of given sets; +#X obj 30 4057 set.size; +#X text 200 4057 get number of elements in set; +#X obj 30 4084 set.symdiff; +#X text 200 4084 symmetric difference between two sets; +#X obj 30 4111 set.union; +#X text 200 4111 output union of given sets; +#X obj 20 4138 cnv 5 38 31 empty empty dyn 4 13 0 17 -262144 -49933 0; +#X obj 20 4179 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 4190 dyn.comp2~; +#X text 200 4190 stereo dynamic range compressor; +#X obj 30 4217 dyn.comp~; +#X text 200 4217 mono dynamic range compressors; +#X obj 30 4244 dyn.gate2~; +#X text 200 4244 stereo signal gate; +#X obj 30 4271 dyn.gate~; +#X text 200 4271 mono signal gate; +#X obj 30 4298 dyn.limit2~; +#X text 200 4298 stereo 1176LN Peak Limiter; +#X obj 30 4325 dyn.limit~; +#X text 200 4325 mono 1176LN Peak Limiter; +#X obj 30 4352 dyn.softclip~; +#X text 200 4352 soft signal clip; +#X obj 20 4379 cnv 5 38 31 empty empty env 4 13 0 17 -262144 -49933 0; +#X obj 20 4420 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 4431 env.adsr~; +#X text 200 4431 ADSR (Attack \, Decay \, Sustain \, Release) envelope generator; -#X obj 30 4323 env.ar~; -#X text 200 4323 Attack/Release envelope generator; -#X obj 30 4350 env.asr~; -#X text 200 4350 Attack/Sustain/Release envelope generator; -#X obj 30 4377 env.concat; -#X text 200 4377 Envelope concatenation; -#X obj 30 4404 env.follow~; -#X text 200 4404 Envelope follower with independent attack and release +#X obj 30 4458 env.ar~; +#X text 200 4458 Attack/Release envelope generator; +#X obj 30 4485 env.asr~; +#X text 200 4485 Attack/Sustain/Release envelope generator; +#X obj 30 4512 env.concat; +#X text 200 4512 Envelope concatenation; +#X obj 30 4539 env.follow~; +#X text 200 4539 Envelope follower with independent attack and release times; -#X obj 30 4431 env.mix; -#X text 200 4431 Mix between two envelopes. Envelopes should contain +#X obj 30 4566 env.mix; +#X text 200 4566 Mix between two envelopes. Envelopes should contain equal number of segments; -#X obj 30 4471 env.smooth~; -#X text 200 4471 An envelope with an exponential attack and release; -#X obj 30 4498 env.tscale; -#X text 200 4498 Envelope time-scale; -#X obj 30 4525 env.tshift; -#X text 200 4525 Envelope time-shift (horizontal); -#X obj 30 4552 env.vscale; -#X text 200 4552 Envelope value-scale; -#X obj 30 4579 env2array; -#X text 200 4579 Renders envelope to specified array; -#X obj 30 4606 env2vline; -#X text 200 4606 Converts envelope to bunch of vline messages; -#X obj 30 4633 envelope; -#X text 200 4633 Envelope data type; -#X obj 30 4660 vline2env; -#X text 200 4660 Converts vline messages to env; -#X obj 20 4687 cnv 5 49 31 empty empty flow 4 13 0 17 -262144 -49933 +#X obj 30 4606 env.smooth~; +#X text 200 4606 An envelope with an exponential attack and release; +#X obj 30 4633 env.tscale; +#X text 200 4633 Envelope time-scale; +#X obj 30 4660 env.tshift; +#X text 200 4660 Envelope time-shift (horizontal); +#X obj 30 4687 env.vscale; +#X text 200 4687 Envelope value-scale; +#X obj 30 4714 env2array; +#X text 200 4714 Renders envelope to specified array; +#X obj 30 4741 env2vline; +#X text 200 4741 Converts envelope to bunch of vline messages; +#X obj 30 4768 envelope; +#X text 200 4768 Envelope data type; +#X obj 30 4795 vline2env; +#X text 200 4795 Converts vline messages to env; +#X obj 20 4822 cnv 5 49 31 empty empty flow 4 13 0 17 -262144 -49933 0; -#X obj 20 4728 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 4739 expand_env; -#X text 200 4739 Substitute environment variables in data stream; -#X obj 30 4766 flow.append; -#X text 200 4766 append message to flow stream; -#X obj 30 4793 flow.change; -#X text 200 4793 rejects redundant input values; -#X obj 30 4820 flow.count; -#X text 200 4820 control flow event counter; -#X obj 30 4847 flow.delay; -#X text 200 4847 enhanced version on vanilla delay object; -#X obj 30 4874 flow.demultiplex; -#X text 200 4874 control flow demultiplexer; -#X obj 30 4901 flow.demultiplex2~; -#X text 200 4901 audio stream stereo demultiplexer; -#X obj 30 4928 flow.demultiplex~; -#X text 200 4928 audio stream demultiplexer; -#X obj 30 4955 flow.dollar; -#X text 200 4955 data flow dollar converter; -#X obj 30 4982 flow.dup; -#X text 200 4982 message duplicator; -#X obj 30 5009 flow.float; -#X text 200 5009 pass floats; -#X obj 30 5036 flow.gate; -#X text 200 5036 control flow gate. [spigot] analog; -#X obj 30 5063 flow.greater; -#X text 200 5063 numeric stream router; -#X obj 30 5090 flow.greater_eq; -#X text 200 5090 numeric stream router; -#X obj 30 5117 flow.group; -#X text 200 5117 group input atoms in list of specified size; -#X obj 30 5144 flow.interval; -#X text 200 5144 measure time between flow events; -#X obj 30 5171 flow.less; -#X text 200 5171 numeric stream router \, like many [moses]; -#X obj 30 5198 flow.less_eq; -#X text 200 5198 numeric stream router \, like many [moses]; -#X obj 30 5225 flow.list2many; -#X text 200 5225 routes list element with message selectors; -#X obj 30 5252 flow.match; -#X text 200 5252 route data flow by regexp match; -#X obj 30 5279 flow.mem; -#X text 200 5279 store data flow in memory; -#X obj 30 5306 flow.multiplex; -#X text 200 5306 control flow multiplexer; -#X obj 30 5333 flow.multiplex2~; -#X text 200 5333 audio stream stereo multiplexer; -#X obj 30 5360 flow.multiplex~; -#X text 200 5360 audio stream multiplexer; -#X obj 30 5387 flow.once; -#X text 200 5387 one message pass thru; -#X obj 30 5414 flow.pack; -#X text 200 5414 flow pack; -#X obj 30 5441 flow.pass; -#X text 200 5441 pass specified values; -#X obj 30 5468 flow.pass_if; -#X text 200 5468 pass values that accepted by predicate object; -#X obj 30 5495 flow.pipe; -#X text 200 5495 enhanced version on vanilla pipe object; -#X obj 30 5522 flow.queue; -#X text 200 5522 multi-channel control flow sync queue (or FIFO); -#X obj 30 5549 flow.record; -#X text 200 5549 flow stream recorder/player; -#X obj 30 5576 flow.reject; -#X text 200 5576 reject specified values; -#X obj 30 5603 flow.reject_if; -#X text 200 5603 reject values by predicate; -#X obj 30 5630 flow.ring; -#X text 200 5630 dataflow ring buffer; -#X obj 30 5657 flow.route; -#X text 200 5657 advanced message router; -#X obj 30 5684 flow.select; -#X text 200 5684 vanilla flow on steroids; -#X obj 30 5711 flow.space; -#X text 200 5711 space in time messages received at the same logical +#X obj 20 4863 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 4874 expand_env; +#X text 200 4874 Substitute environment variables in data stream; +#X obj 30 4901 flow.append; +#X text 200 4901 append message to flow stream; +#X obj 30 4928 flow.change; +#X text 200 4928 rejects redundant input values; +#X obj 30 4955 flow.count; +#X text 200 4955 control flow event counter; +#X obj 30 4982 flow.delay; +#X text 200 4982 enhanced version on vanilla delay object; +#X obj 30 5009 flow.demultiplex; +#X text 200 5009 control flow demultiplexer; +#X obj 30 5036 flow.demultiplex2~; +#X text 200 5036 audio stream stereo demultiplexer; +#X obj 30 5063 flow.demultiplex~; +#X text 200 5063 audio stream demultiplexer; +#X obj 30 5090 flow.dollar; +#X text 200 5090 data flow dollar converter; +#X obj 30 5117 flow.dup; +#X text 200 5117 message duplicator; +#X obj 30 5144 flow.float; +#X text 200 5144 pass floats; +#X obj 30 5171 flow.gate; +#X text 200 5171 control flow gate. [spigot] analog; +#X obj 30 5198 flow.greater; +#X text 200 5198 numeric stream router; +#X obj 30 5225 flow.greater_eq; +#X text 200 5225 numeric stream router; +#X obj 30 5252 flow.group; +#X text 200 5252 group input atoms in list of specified size; +#X obj 30 5279 flow.interval; +#X text 200 5279 measure time between flow events; +#X obj 30 5306 flow.less; +#X text 200 5306 numeric stream router \, like many [moses]; +#X obj 30 5333 flow.less_eq; +#X text 200 5333 numeric stream router \, like many [moses]; +#X obj 30 5360 flow.list2many; +#X text 200 5360 routes list element with message selectors; +#X obj 30 5387 flow.match; +#X text 200 5387 route data flow by regexp match; +#X obj 30 5414 flow.mem; +#X text 200 5414 store data flow in memory; +#X obj 30 5441 flow.multiplex; +#X text 200 5441 control flow multiplexer; +#X obj 30 5468 flow.multiplex2~; +#X text 200 5468 audio stream stereo multiplexer; +#X obj 30 5495 flow.multiplex~; +#X text 200 5495 audio stream multiplexer; +#X obj 30 5522 flow.once; +#X text 200 5522 one message pass thru; +#X obj 30 5549 flow.pack; +#X text 200 5549 flow pack; +#X obj 30 5576 flow.pass; +#X text 200 5576 pass specified values; +#X obj 30 5603 flow.pass_if; +#X text 200 5603 pass values that accepted by predicate object; +#X obj 30 5630 flow.pipe; +#X text 200 5630 enhanced version on vanilla pipe object; +#X obj 30 5657 flow.queue; +#X text 200 5657 multi-channel control flow sync queue (or FIFO); +#X obj 30 5684 flow.record; +#X text 200 5684 flow stream recorder/player; +#X obj 30 5711 flow.reject; +#X text 200 5711 reject specified values; +#X obj 30 5738 flow.reject_if; +#X text 200 5738 reject values by predicate; +#X obj 30 5765 flow.ring; +#X text 200 5765 dataflow ring buffer; +#X obj 30 5792 flow.route; +#X text 200 5792 advanced message router; +#X obj 30 5819 flow.select; +#X text 200 5819 vanilla flow on steroids; +#X obj 30 5846 flow.seqdelay; +#X text 200 5846 sequential delay/router for input flow; +#X obj 30 5873 flow.space; +#X text 200 5873 space in time messages received at the same logical time; -#X obj 30 5738 flow.speedlim; -#X text 200 5738 control stream speed limiter; -#X obj 30 5765 flow.split; -#X text 200 5765 split data flow by external side-chain predicate; -#X obj 30 5792 flow.stack; -#X text 200 5792 any message stack; -#X obj 30 5819 flow.sync; -#X text 200 5819 bus with only hot inlets; -#X obj 30 5846 flow.sync_pack; -#X text 200 5846 flow pack with all hot inlets; -#X obj 30 5873 flow.tee~; -#X text 200 5873 separate audio and control streams; -#X obj 30 5900 replace; -#X text 200 5900 Replace atoms in data stream; -#X obj 30 5927 route.float; -#X text 200 5927 separate float messages from other types; -#X obj 20 5954 cnv 5 37 31 empty empty flt 4 13 0 17 -262144 -49933 0; -#X obj 20 5995 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 6006 flt.biquad~; -#X text 200 6006 second order IIR filter.; -#X obj 30 6033 flt.bpf12~; -#X text 200 6033 Two pole band-pass butterworth filter; -#X obj 30 6060 flt.bpf24~; -#X text 200 6060 Four pole band-pass butterworth filter; -#X obj 30 6087 flt.c_apf; -#X text 200 6087 Allpass filter coefficient calculator for biquad; -#X obj 30 6114 flt.c_bpf~; -#X text 200 6114 BPF coefficient calculator for biquad filter; -#X obj 30 6141 flt.c_highshelf~; -#X text 200 6141 Highshelf filter coefficient calculator for biquad; -#X obj 30 6168 flt.c_hpf; -#X text 200 6168 HPF coefficient calculator for biquad filter; -#X obj 30 6195 flt.c_hpf~; -#X text 200 6195 HPF coefficient calculator for biquad filter; -#X obj 30 6222 flt.c_lowshelf~; -#X text 200 6222 Lowshelf filter coefficient calculator for biquad; -#X obj 30 6249 flt.c_lpf; -#X text 200 6249 LPF coefficient calculator for biquad filter; -#X obj 30 6276 flt.c_lpf~; -#X text 200 6276 LPF coefficient calculator for biquad filter; -#X obj 30 6303 flt.c_notch; -#X text 200 6303 Notch filter coefficient calculator for biquad; -#X obj 30 6330 flt.c_notch~; -#X text 200 6330 Band-reject coefficient calculator for biquad filter; -#X obj 30 6357 flt.c_peak~; -#X text 200 6357 Peaking equalizer calculator for biquad; -#X obj 30 6384 flt.c_pole; -#X text 200 6384 One-pole coefficient calculator for biquad filter; -#X obj 30 6411 flt.dcblock2~; -#X text 200 6411 stereo DC blocker; -#X obj 30 6438 flt.dcblock~; -#X text 200 6438 mono DC blocker; -#X obj 30 6465 flt.eq10~; -#X text 200 6465 graphic 10 band equalizer; -#X obj 30 6492 flt.eq_peak_cq~; -#X text 200 6492 constant-Q second order peaking equalizer section; -#X obj 30 6519 flt.eq_peak~; -#X text 200 6519 second order "peaking equalizer" section (gain boost +#X obj 30 5900 flow.speedlim; +#X text 200 5900 control stream speed limiter; +#X obj 30 5927 flow.split; +#X text 200 5927 split data flow by external side-chain predicate; +#X obj 30 5954 flow.stack; +#X text 200 5954 any message stack; +#X obj 30 5981 flow.sync; +#X text 200 5981 bus with only hot inlets; +#X obj 30 6008 flow.sync_pack; +#X text 200 6008 flow pack with all hot inlets; +#X obj 30 6035 flow.tee~; +#X text 200 6035 separate audio and control streams; +#X obj 30 6062 replace; +#X text 200 6062 Replace atoms in data stream; +#X obj 30 6089 route.any; +#X text 200 6089 separate any messages from bangs \, floats \, symbols +and lists; +#X obj 30 6116 route.bang; +#X text 200 6116 separate bang messages from other types; +#X obj 30 6143 route.float; +#X text 200 6143 separate float messages from other types; +#X obj 30 6170 route.list; +#X text 200 6170 separate list messages from other types; +#X obj 30 6197 route.prop; +#X text 200 6197 separate property messages from other types; +#X obj 30 6224 route.random; +#X text 200 6224 routes input flow to random outlet; +#X obj 30 6251 route.symbol; +#X text 200 6251 separate symbol messages from other types; +#X obj 20 6278 cnv 5 37 31 empty empty flt 4 13 0 17 -262144 -49933 0; +#X obj 20 6319 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 6330 flt.a-weight; +#X text 200 6330 convert frequency to A-weight value; +#X obj 30 6357 flt.biquad~; +#X text 200 6357 second order IIR filter.; +#X obj 30 6384 flt.bpf12~; +#X text 200 6384 Two pole band-pass butterworth filter; +#X obj 30 6411 flt.bpf24~; +#X text 200 6411 Four pole band-pass butterworth filter; +#X obj 30 6438 flt.c_apf; +#X text 200 6438 Allpass filter coefficient calculator for biquad; +#X obj 30 6465 flt.c_bpf~; +#X text 200 6465 BPF coefficient calculator for biquad filter; +#X obj 30 6492 flt.c_highshelf~; +#X text 200 6492 Highshelf filter coefficient calculator for biquad; +#X obj 30 6519 flt.c_hpf; +#X text 200 6519 HPF coefficient calculator for biquad filter; +#X obj 30 6546 flt.c_hpf~; +#X text 200 6546 HPF coefficient calculator for biquad filter; +#X obj 30 6573 flt.c_lowshelf~; +#X text 200 6573 Lowshelf filter coefficient calculator for biquad; +#X obj 30 6600 flt.c_lpf; +#X text 200 6600 LPF coefficient calculator for biquad filter; +#X obj 30 6627 flt.c_lpf~; +#X text 200 6627 LPF coefficient calculator for biquad filter; +#X obj 30 6654 flt.c_notch; +#X text 200 6654 Notch filter coefficient calculator for biquad; +#X obj 30 6681 flt.c_notch~; +#X text 200 6681 Band-reject coefficient calculator for biquad filter; +#X obj 30 6708 flt.c_peak~; +#X text 200 6708 Peaking equalizer calculator for biquad; +#X obj 30 6735 flt.c_pole; +#X text 200 6735 One-pole coefficient calculator for biquad filter; +#X obj 30 6762 flt.dcblock2~; +#X text 200 6762 stereo DC blocker; +#X obj 30 6789 flt.dcblock~; +#X text 200 6789 mono DC blocker; +#X obj 30 6816 flt.eq10~; +#X text 200 6816 graphic 10 band equalizer; +#X obj 30 6843 flt.eq_peak_cq~; +#X text 200 6843 constant-Q second order peaking equalizer section; +#X obj 30 6870 flt.eq_peak~; +#X text 200 6870 second order "peaking equalizer" section (gain boost or cut near some frequency). Also called a "parametric equalizer" section.; -#X obj 30 6574 flt.fb_comb~; -#X text 200 6574 feedback comb filter; -#X obj 30 6601 flt.fbank5x1~; -#X text 200 6601 5 band one octave butterworth filterbank; -#X obj 30 6628 flt.ff_comb~; -#X text 200 6628 feed forward comb filter; -#X obj 30 6655 flt.freqz; -#X text 200 6655 compute the frequency response of a digital filter; -#X obj 30 6682 flt.freqz~; -#X text 200 6682 compute the frequency response of a digital filter; -#X obj 30 6709 flt.highshelf~; -#X text 200 6709 gain boost|cut above some frequency; -#X obj 30 6736 flt.hpf12~; -#X text 200 6736 High-pass second order Butterworth filter; -#X obj 30 6763 flt.hpf24~; -#X text 200 6763 High-pass fourth order Butterworth filter; -#X obj 30 6790 flt.lowshelf~; -#X text 200 6790 gain boost|cut below some frequency; -#X obj 30 6817 flt.lpf12~; -#X text 200 6817 Low-pass second order Butterworth filter; -#X obj 30 6844 flt.lpf24~; -#X text 200 6844 Low-pass fourth order Butterworth filter; -#X obj 30 6871 flt.median; -#X text 200 6871 Median control flow filter; -#X obj 30 6898 flt.moog_vcf~; -#X text 200 6898 Moog Voltage Controlled Filter; -#X obj 30 6925 flt.notch~; -#X text 200 6925 band-rejection filter; -#X obj 30 6952 flt.resonbp~; -#X text 200 6952 Simple resonant bandpass filter; -#X obj 20 6979 cnv 5 28 31 empty empty fx 4 13 0 17 -262144 -49933 0; -#X obj 20 7020 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 7031 fx.bitdown~; -#X text 200 7031 bit downer and downsampler effect; -#X obj 30 7058 fx.chorus~; -#X text 200 7058 Chorus effect; -#X obj 30 7085 fx.distortion1~; -#X text 200 7085 distortion #1 from Guitarix effects set; -#X obj 30 7112 fx.distortion2~; -#X text 200 7112 distortion #2 from Guitarix effects set; -#X obj 30 7139 fx.distortion3~; -#X text 200 7139 simple distortion #3 from Guitarix effects set; -#X obj 30 7166 fx.distortion~; -#X text 200 7166 cubic nonlinearity distortion; -#X obj 30 7193 fx.drive~; -#X text 200 7193 Guitarix drive effect; -#X obj 30 7220 fx.drone_box~; -#X text 200 7220 mono sympathetic resonance generator; -#X obj 30 7247 fx.echo2~; -#X text 200 7247 stereo echo effect; -#X obj 30 7274 fx.echo~; -#X text 200 7274 simple echo effect; -#X obj 30 7301 fx.flanger~; -#X text 200 7301 mono flanging effect; -#X obj 30 7328 fx.freeverb2~; -#X text 200 7328 freeverb2 - stereo version of freeverb; -#X obj 30 7355 fx.freeverb~; -#X text 200 7355 freeverb - common used open-source reverb; -#X obj 30 7382 fx.freqshift~; -#X text 200 7382 frequency shifter or single-sideband ring modulation; -#X obj 30 7409 fx.granulator~; -#X text 200 7409 simple input stream granulator; -#X obj 30 7436 fx.greyhole~; -#X text 200 7436 A complex echo-like effect; -#X obj 30 7463 fx.infrev~; -#X text 200 7463 port of Infinity VST plugin from airwindows; -#X obj 30 7490 fx.looper~; -#X text 200 7490 One track looper; -#X obj 30 7517 fx.pitchshift_s~; -#X text 200 7517 signal version of fx.pitchshift~; -#X obj 30 7544 fx.pitchshift~; -#X text 200 7544 simple pitch shifter based on 2 delay lines; -#X obj 30 7571 fx.rb_pitchshift~; -#X text 200 7571 rubber band pitchshift; -#X obj 30 7598 fx.recho~; -#X text 200 7598 reversed echo effect; -#X obj 30 7625 fx.room~; -#X text 200 7625 Gardners room emulation algorithms; -#X obj 30 7652 fx.sdelay~; -#X text 200 7652 smooth delay with a feedback control; -#X obj 30 7679 fx.secho~; -#X text 200 7679 enchanced echo effect that does not click on delay +#X obj 30 6925 flt.fb_comb~; +#X text 200 6925 feedback comb filter; +#X obj 30 6952 flt.fbank5x1~; +#X text 200 6952 5 band one octave butterworth filterbank; +#X obj 30 6979 flt.ff_comb~; +#X text 200 6979 feed forward comb filter; +#X obj 30 7006 flt.freqz; +#X text 200 7006 compute the frequency response of a digital filter; +#X obj 30 7033 flt.freqz~; +#X text 200 7033 compute the frequency response of a digital filter; +#X obj 30 7060 flt.highshelf~; +#X text 200 7060 gain boost|cut above some frequency; +#X obj 30 7087 flt.hpf12~; +#X text 200 7087 High-pass second order Butterworth filter; +#X obj 30 7114 flt.hpf24~; +#X text 200 7114 High-pass fourth order Butterworth filter; +#X obj 30 7141 flt.lowshelf~; +#X text 200 7141 gain boost|cut below some frequency; +#X obj 30 7168 flt.lpf12~; +#X text 200 7168 Low-pass second order Butterworth filter; +#X obj 30 7195 flt.lpf24~; +#X text 200 7195 Low-pass fourth order Butterworth filter; +#X obj 30 7222 flt.median; +#X text 200 7222 Median control flow filter; +#X obj 30 7249 flt.moog_vcf~; +#X text 200 7249 Moog Voltage Controlled Filter; +#X obj 30 7276 flt.notch~; +#X text 200 7276 band-rejection filter; +#X obj 30 7303 flt.resonbp~; +#X text 200 7303 Simple resonant bandpass filter; +#X obj 30 7330 flt.resonhp~; +#X text 200 7330 Simple resonant highpass filter; +#X obj 30 7357 flt.resonlp~; +#X text 200 7357 Simple resonant lowpass filter; +#X obj 20 7384 cnv 5 28 31 empty empty fx 4 13 0 17 -262144 -49933 0; +#X obj 20 7425 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 7436 fx.bitdown~; +#X text 200 7436 bit downer and downsampler effect; +#X obj 30 7463 fx.chorus~; +#X text 200 7463 Chorus effect; +#X obj 30 7490 fx.dattorro~; +#X text 200 7490 dattorro reverb; +#X obj 30 7517 fx.distortion1~; +#X text 200 7517 distortion #1 from Guitarix effects set; +#X obj 30 7544 fx.distortion2~; +#X text 200 7544 distortion #2 from Guitarix effects set; +#X obj 30 7571 fx.distortion3~; +#X text 200 7571 simple distortion #3 from Guitarix effects set; +#X obj 30 7598 fx.distortion~; +#X text 200 7598 cubic nonlinearity distortion; +#X obj 30 7625 fx.drive~; +#X text 200 7625 Guitarix drive effect; +#X obj 30 7652 fx.drone_box~; +#X text 200 7652 mono sympathetic resonance generator; +#X obj 30 7679 fx.echo2~; +#X text 200 7679 stereo echo effect; +#X obj 30 7706 fx.echo~; +#X text 200 7706 simple echo effect; +#X obj 30 7733 fx.flanger~; +#X text 200 7733 mono flanging effect; +#X obj 30 7760 fx.freeverb2~; +#X text 200 7760 freeverb2 - stereo version of freeverb; +#X obj 30 7787 fx.freeverb~; +#X text 200 7787 freeverb - common used open-source reverb; +#X obj 30 7814 fx.freqshift~; +#X text 200 7814 frequency shifter or single-sideband ring modulation; +#X obj 30 7841 fx.granulator~; +#X text 200 7841 simple input stream granulator; +#X obj 30 7868 fx.greyhole~; +#X text 200 7868 A complex echo-like effect; +#X obj 30 7895 fx.infrev~; +#X text 200 7895 port of Infinity VST plugin from airwindows; +#X obj 30 7922 fx.jcrev~; +#X text 200 7922 Schroeder quad reverberator from 1972; +#X obj 30 7949 fx.looper~; +#X text 200 7949 One track looper; +#X obj 30 7976 fx.pitchshift_s~; +#X text 200 7976 signal version of fx.pitchshift~; +#X obj 30 8003 fx.pitchshift~; +#X text 200 8003 simple pitch shifter based on 2 delay lines; +#X obj 30 8030 fx.rb_pitchshift~; +#X text 200 8030 rubber band pitchshift; +#X obj 30 8057 fx.recho~; +#X text 200 8057 reversed echo effect; +#X obj 30 8084 fx.room~; +#X text 200 8084 Gardners room emulation algorithms; +#X obj 30 8111 fx.satrev~; +#X text 200 8111 Schroeder reverberator from 1971; +#X obj 30 8138 fx.sdelay~; +#X text 200 8138 smooth delay with a feedback control; +#X obj 30 8165 fx.secho~; +#X text 200 8165 enchanced echo effect that does not click on delay change; -#X obj 30 7706 fx.shimmer~; -#X text 200 7706 shimmer reverb effect effect; -#X obj 30 7733 fx.tapiir~; -#X text 200 7733 multi-tap delay; -#X obj 30 7760 fx.vocoder~; -#X text 200 7760 very simple vocoder where the spectrum of the modulation +#X obj 30 8192 fx.shimmer~; +#X text 200 8192 shimmer reverb effect effect; +#X obj 30 8219 fx.stutter~; +#X text 200 8219 stutter effect; +#X obj 30 8246 fx.tapiir~; +#X text 200 8246 multi-tap delay; +#X obj 30 8273 fx.vocoder~; +#X text 200 8273 very simple vocoder where the spectrum of the modulation signal is analyzed using a 32-band filter bank; -#X obj 30 7800 fx.wahwah~; -#X text 200 7800 digitized CryBaby wah pedal; -#X obj 30 7827 fx.zita_rev1~; -#X text 200 7827 Zita stereo reverb; -#X obj 20 7854 cnv 5 69 31 empty empty global 4 13 0 17 -262144 -49933 +#X obj 30 8313 fx.wahwah~; +#X text 200 8313 digitized CryBaby wah pedal; +#X obj 30 8340 fx.zita_rev1~; +#X text 200 8340 Zita stereo reverb; +#X obj 20 8367 cnv 5 69 31 empty empty global 4 13 0 17 -262144 -49933 0; -#X obj 20 7895 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 7906 global.dict; -#X text 200 7906 global named dict object; -#X obj 30 7933 global.float; -#X text 200 7933 global named float object; -#X obj 30 7960 global.int; -#X text 200 7960 global named integer object; -#X obj 30 7987 global.list; -#X text 200 7987 global named list object; -#X obj 30 8014 global.mlist; -#X text 200 8014 global named mlist object; -#X obj 30 8041 global.set; -#X text 200 8041 global named set object; -#X obj 20 8068 cnv 5 28 31 empty empty hw 4 13 0 17 -262144 -49933 0; -#X obj 20 8109 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 8120 hw.apple_smc; -#X text 200 8120 query the system management control in Apples; -#X obj 30 8147 hw.apple_sms; -#X text 200 8147 query the sudden motion sensor in Apples; -#X obj 30 8174 hw.arduino; -#X text 200 8174 Arduino device; -#X obj 30 8201 hw.cpu_temp; -#X text 200 8201 get CPU temperature; -#X obj 30 8228 hw.display; -#X text 200 8228 get/set display properties; -#X obj 30 8255 hw.kbd_light; -#X text 200 8255 Get/set keyboard light on some devices; -#X obj 30 8282 hw.serial; -#X text 200 8282 serial port device; -#X obj 20 8309 cnv 5 47 31 empty empty lang 4 13 0 17 -262144 -49933 +#X obj 20 8408 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8419 global.dict; +#X text 200 8419 global named dict object; +#X obj 30 8446 global.float; +#X text 200 8446 global named float object; +#X obj 30 8473 global.int; +#X text 200 8473 global named integer object; +#X obj 30 8500 global.list; +#X text 200 8500 global named list object; +#X obj 30 8527 global.mlist; +#X text 200 8527 global named mlist object; +#X obj 30 8554 global.set; +#X text 200 8554 global named set object; +#X obj 20 8581 cnv 5 28 31 empty empty hw 4 13 0 17 -262144 -49933 0; +#X obj 20 8622 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8633 hw.apple_smc; +#X text 200 8633 query the system management control in Apples; +#X obj 30 8660 hw.apple_sms; +#X text 200 8660 query the sudden motion sensor in Apples; +#X obj 30 8687 hw.arduino; +#X text 200 8687 Arduino device; +#X obj 30 8714 hw.cpu_temp; +#X text 200 8714 get CPU temperature; +#X obj 30 8741 hw.display; +#X text 200 8741 get/set display properties; +#X obj 30 8768 hw.kbd_light; +#X text 200 8768 Get/set keyboard light on some devices; +#X obj 30 8795 hw.motu.avb; +#X text 200 8795 controls Motu AVB devices over http requests; +#X obj 30 8822 hw.serial; +#X text 200 8822 serial port device; +#X obj 20 8849 cnv 5 47 31 empty empty lang 4 13 0 17 -262144 -49933 0; -#X obj 20 8350 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 8364 ui.link @title [lang.faust~] @url lang.faust~-help.pd; -#X text 200 8361 faust realtime compilation; -#X obj 30 8389 ui.link @title [ui.faust~] @url ui.faust~-help.pd; -#X text 200 8386 faust compiled ui object; -#X obj 20 8411 cnv 5 37 31 empty empty lfo 4 13 0 17 -262144 -49933 0; -#X obj 20 8452 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 8463 lfo.+pulse~; -#X text 200 8463 Unit-amplitude nonnegative low frequency pulse train; -#X obj 30 8490 lfo.+saw~; -#X text 200 8490 Positive unit-amplitude low frequency saw wave; -#X obj 30 8517 lfo.+square~; -#X text 200 8517 Positive low frequency square wave; -#X obj 30 8544 lfo.+tri~; -#X text 200 8544 Positive unit-amplitude low frequency triangle wave; -#X obj 30 8571 lfo.impulse~; -#X text 200 8571 Unit-amplitude low-frequency impulse train; -#X obj 30 8598 lfo.mosc~; -#X text 200 8598 multi-oscillator with various waveforms; -#X obj 30 8625 lfo.pulse~; -#X text 200 8625 Full-range unit-amplitude low frequency pulse train; -#X obj 30 8652 lfo.saw~; -#X text 200 8652 Full-range unit-amplitude low frequency saw; -#X obj 30 8679 lfo.square~; -#X text 200 8679 Zero-mean unit-amplitude low frequency square wave; -#X obj 30 8706 lfo.tri~; -#X text 200 8706 Zero-mean unit-amplitude low frequency triangle wave; -#X obj 20 8733 cnv 5 47 31 empty empty list 4 13 0 17 -262144 -49933 +#X obj 20 8890 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 8904 ui.link @title [lang.faust~] @url lang.faust~-help.pd; +#X text 200 8901 faust realtime compilation; +#X obj 30 8926 lang.lua; +#X text 200 8926 Lua JIT language bindings; +#X obj 30 8956 ui.link @title [ui.faust~] @url ui.faust~-help.pd; +#X text 200 8953 faust compiled ui object; +#X obj 20 8978 cnv 5 37 31 empty empty lfo 4 13 0 17 -262144 -49933 0; +#X obj 20 9019 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 9030 lfo.+pulse~; +#X text 200 9030 Unit-amplitude nonnegative low frequency pulse train; +#X obj 30 9057 lfo.+saw~; +#X text 200 9057 Positive unit-amplitude low frequency saw wave; +#X obj 30 9084 lfo.+square~; +#X text 200 9084 Positive low frequency square wave; +#X obj 30 9111 lfo.+tri~; +#X text 200 9111 Positive unit-amplitude low frequency triangle wave; +#X obj 30 9138 lfo.impulse~; +#X text 200 9138 Unit-amplitude low-frequency impulse train; +#X obj 30 9165 lfo.mosc~; +#X text 200 9165 multi-oscillator with various waveforms; +#X obj 30 9192 lfo.pulse~; +#X text 200 9192 Full-range unit-amplitude low frequency pulse train; +#X obj 30 9219 lfo.saw~; +#X text 200 9219 Full-range unit-amplitude low frequency saw; +#X obj 30 9246 lfo.square~; +#X text 200 9246 Zero-mean unit-amplitude low frequency square wave; +#X obj 30 9273 lfo.tri~; +#X text 200 9273 Zero-mean unit-amplitude low frequency triangle wave; +#X obj 20 9300 cnv 5 47 31 empty empty list 4 13 0 17 -262144 -49933 0; -#X obj 20 8774 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 8785 list.^at; -#X text 200 8785 on input index(es) outputs list element(s); -#X obj 30 8812 list.^contains; -#X text 200 8812 checks if input atom is found in the list; -#X obj 30 8839 list.^search; -#X text 200 8839 on input atom returns it index in list; -#X obj 30 8866 list.all_of; -#X text 200 8866 checks if all list atoms accepted by predicate; -#X obj 30 8893 list.any_of; -#X text 200 8893 checks if at least one list element is accepted by +#X obj 20 9341 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 9352 list.^at; +#X text 200 9352 on input index(es) outputs list element(s); +#X obj 30 9379 list.^contains; +#X text 200 9379 checks if input atom is found in the list; +#X obj 30 9406 list.^search; +#X text 200 9406 on input atom returns it index in list; +#X obj 30 9433 list.all_of; +#X text 200 9433 checks if all list atoms accepted by predicate; +#X obj 30 9460 list.any_of; +#X text 200 9460 checks if at least one list element is accepted by predicate; -#X obj 30 8920 list.append; -#X text 200 8920 append atom or list to the end of input list; -#X obj 30 8947 list.apply_to; -#X text 200 8947 modifies list value at specified position \, filtering +#X obj 30 9487 list.append; +#X text 200 9487 append atom or list to the end of input list; +#X obj 30 9514 list.apply_to; +#X text 200 9514 modifies list value at specified position \, filtering it via external object; -#X obj 30 8987 list.at; -#X text 200 8987 outputs list element(s) at specified index(es); -#X obj 30 9014 list.choice; -#X text 200 9014 outputs random element from list; -#X obj 30 9041 list.contains; -#X text 200 9041 checks if input list contains specified atoms; -#X obj 30 9068 list.convolve; -#X text 200 9068 convolution for lists; -#X obj 30 9095 list.correlate; -#X text 200 9095 list cross-correlation; -#X obj 30 9122 list.count; -#X text 200 9122 output the number of items that equal to specified +#X obj 30 9554 list.at; +#X text 200 9554 outputs list element(s) at specified index(es); +#X obj 30 9581 list.choice; +#X text 200 9581 outputs random element from list; +#X obj 30 9608 list.contains; +#X text 200 9608 checks if input list contains specified atoms; +#X obj 30 9635 list.convolve; +#X text 200 9635 convolution for lists; +#X obj 30 9662 list.correlate; +#X text 200 9662 list cross-correlation; +#X obj 30 9689 list.count; +#X text 200 9689 output the number of items that equal to specified value; -#X obj 30 9149 list.count_if; -#X text 200 9149 output the number of items that satisfy to external +#X obj 30 9716 list.count_if; +#X text 200 9716 output the number of items that satisfy to external predicate; -#X obj 30 9176 list.delta; -#X text 200 9176 returns the difference between the current list of +#X obj 30 9743 list.delta; +#X text 200 9743 returns the difference between the current list of floats and the previous one.; -#X obj 30 9216 list.distribution; -#X text 200 9216 list value distribution; -#X obj 30 9243 list.do; -#X text 200 9243 iterate and modify list contents via side-chain; -#X obj 30 9270 list.each; -#X text 200 9270 maps each list value via external side-chain; -#X obj 30 9297 list.enumerate; -#X text 200 9297 enumerates input list; -#X obj 30 9324 list.equal; -#X text 200 9324 checks if given lists are equal; -#X obj 30 9351 list.first; -#X text 200 9351 returns first list element; -#X obj 30 9378 list.gen; -#X text 200 9378 generates list of specified length via external generator; -#X obj 30 9405 list.histogram; -#X text 200 9405 outputs distribution histogram; -#X obj 30 9432 list.insert; -#X text 200 9432 insert atom or list to the specified position of input +#X obj 30 9783 list.distribution; +#X text 200 9783 list value distribution; +#X obj 30 9810 list.do; +#X text 200 9810 iterate and modify list contents via side-chain; +#X obj 30 9837 list.each; +#X text 200 9837 maps each list value via external side-chain; +#X obj 30 9864 list.enumerate; +#X text 200 9864 enumerates input list; +#X obj 30 9891 list.equal; +#X text 200 9891 checks if given lists are equal; +#X obj 30 9918 list.first; +#X text 200 9918 returns first list element; +#X obj 30 9945 list.gen; +#X text 200 9945 generates list of specified length via external generator; +#X obj 30 9972 list.histogram; +#X text 200 9972 outputs distribution histogram; +#X obj 30 9999 list.insert; +#X text 200 9999 insert atom or list to the specified position of input list; -#X obj 30 9459 list.integrator; -#X text 200 9459 returns the sum of the previously stored list and +#X obj 30 10026 list.integrator; +#X text 200 10026 returns the sum of the previously stored list and the current one then stores this sum; -#X obj 30 9499 list.last; -#X text 200 9499 output last list element; -#X obj 30 9526 list.length; -#X text 200 9526 output the number of atoms in the list; -#X obj 30 9553 list.max; -#X text 200 9553 output largest element in the list; -#X obj 30 9580 list.mean; -#X text 200 9580 calculates average of list of floats; -#X obj 30 9607 list.min; -#X text 200 9607 returns smallest element in the list; -#X obj 30 9634 list.none_of; -#X text 200 9634 checks if none of list atoms is accepted by predicate; -#X obj 30 9661 list.normalize; -#X text 200 9661 normalizes float list values to get their sum = 1.0; -#X obj 30 9688 list.pass_if; -#X text 200 9688 leave only elements accepted by predicate; -#X obj 30 9715 list.prepend; -#X text 200 9715 prepend atom or list before input list; -#X obj 30 9742 list.product; -#X text 200 9742 calculates product of floats in list; -#X obj 30 9769 list.range; -#X text 200 9769 output list smallest and largest value; -#X obj 30 9796 list.reduce; -#X text 200 9796 apply function of two arguments cumulatively to the +#X obj 30 10066 list.last; +#X text 200 10066 output last list element; +#X obj 30 10093 list.length; +#X text 200 10093 output the number of atoms in the list; +#X obj 30 10120 list.map; +#X text 200 10120 map list values by specified dictionary; +#X obj 30 10147 list.max; +#X text 200 10147 output largest element in the list; +#X obj 30 10174 list.mean; +#X text 200 10174 calculates average of list of floats; +#X obj 30 10201 list.min; +#X text 200 10201 returns smallest element in the list; +#X obj 30 10228 list.none_of; +#X text 200 10228 checks if none of list atoms is accepted by predicate; +#X obj 30 10255 list.normalize; +#X text 200 10255 normalizes float list values to get their sum = 1.0; +#X obj 30 10282 list.pass; +#X text 200 10282 leave in list only specified elements; +#X obj 30 10309 list.pass_if; +#X text 200 10309 leave only elements accepted by predicate; +#X obj 30 10336 list.prepend; +#X text 200 10336 prepend atom or list before input list; +#X obj 30 10363 list.product; +#X text 200 10363 calculates product of floats in list; +#X obj 30 10390 list.range; +#X text 200 10390 output list smallest and largest value; +#X obj 30 10417 list.reduce; +#X text 200 10417 apply function of two arguments cumulatively to the list; -#X obj 30 9823 list.remove; -#X text 200 9823 remove list element(s) at specified positions; -#X obj 30 9850 list.remove_if; -#X text 200 9850 remove elements by predicate; -#X obj 30 9877 list.repack; -#X text 200 9877 repack list to specified size; -#X obj 30 9904 list.repeat; -#X text 200 9904 output new list by repeating input list specified +#X obj 30 10444 list.reject; +#X text 200 10444 remove specified element from list; +#X obj 30 10471 list.remove; +#X text 200 10471 remove list element(s) at specified positions; +#X obj 30 10498 list.remove_if; +#X text 200 10498 remove elements by predicate; +#X obj 30 10525 list.repack; +#X text 200 10525 repack list to specified size; +#X obj 30 10552 list.repeat; +#X text 200 10552 output new list by repeating input list specified times; -#X obj 30 9931 list.resample; -#X text 200 9931 resample list with specified ratio; -#X obj 30 9958 list.resize; -#X text 200 9958 changes list size; -#X obj 30 9985 list.reverse; -#X text 200 9985 reverses the order of the elements in the list; -#X obj 30 10012 list.rldecode; -#X text 200 10012 Run-length list decoder (RLE); -#X obj 30 10039 list.rlencode; -#X text 200 10039 RLE (run-length encoding) for lists; -#X obj 30 10066 list.rotate; -#X text 200 10066 rotates list; -#X obj 30 10093 list.route; -#X text 200 10093 acts like [route] but for lists; -#X obj 30 10120 list.rundiff; -#X text 200 10120 running difference; -#X obj 30 10147 list.runsum; -#X text 200 10147 running sum; -#X obj 30 10174 list.search; -#X text 200 10174 search specified items in input list; -#X obj 30 10201 list.separate; -#X text 200 10201 sends list elements one by one separately; -#X obj 30 10228 list.seq; -#X text 200 10228 numeric sequence list generator; -#X obj 30 10255 list.set; -#X text 200 10255 set list value at specified position; -#X obj 30 10282 list.shift; -#X text 200 10282 shifts the contents of the list with linear interpolation; -#X obj 30 10309 list.shuffle; -#X text 200 10309 randomly rearranges elements in list; -#X obj 30 10336 list.slice; -#X text 200 10336 extract sublist; -#X obj 30 10363 list.sort; -#X text 200 10363 sorts list values by ascending order; -#X obj 30 10390 list.sort_with; -#X text 200 10390 sort list with user defined side-chain; -#X obj 30 10417 list.split; -#X text 200 10417 splits list into two parts \, the length of first +#X obj 30 10579 list.resample; +#X text 200 10579 resample list with specified ratio; +#X obj 30 10606 list.resize; +#X text 200 10606 changes list size; +#X obj 30 10633 list.reverse; +#X text 200 10633 reverses the order of the elements in the list; +#X obj 30 10660 list.rldecode; +#X text 200 10660 Run-length list decoder (RLE); +#X obj 30 10687 list.rlencode; +#X text 200 10687 RLE (run-length encoding) for lists; +#X obj 30 10714 list.rotate; +#X text 200 10714 rotates list; +#X obj 30 10741 list.route; +#X text 200 10741 acts like [route] but for lists; +#X obj 30 10768 list.rundiff; +#X text 200 10768 running difference; +#X obj 30 10795 list.runsum; +#X text 200 10795 running sum; +#X obj 30 10822 list.search; +#X text 200 10822 search specified items in input list; +#X obj 30 10849 list.separate; +#X text 200 10849 sends list elements one by one separately; +#X obj 30 10876 list.seq; +#X text 200 10876 numeric sequence list generator; +#X obj 30 10903 list.set; +#X text 200 10903 set list value at specified position; +#X obj 30 10930 list.shift; +#X text 200 10930 shifts the contents of the list with linear interpolation; +#X obj 30 10957 list.shuffle; +#X text 200 10957 randomly rearranges elements in list; +#X obj 30 10984 list.slice; +#X text 200 10984 extract sublist; +#X obj 30 11011 list.sort; +#X text 200 11011 sorts list values by ascending order; +#X obj 30 11038 list.sort_with; +#X text 200 11038 sort list with user defined side-chain; +#X obj 30 11065 list.split; +#X text 200 11065 splits list into two parts \, the length of first list is specified by the argument; -#X obj 30 10457 list.stretch; -#X text 200 10457 stretches list - changes its size with linear interpolation; -#X obj 30 10484 list.sum; -#X text 200 10484 calculates sum of floats in list; -#X obj 30 10511 list.unique; -#X text 200 10511 removes duplicates from input list; -#X obj 30 10538 list.unpack; -#X text 200 10538 unpack list elements to separate outlets; -#X obj 30 10565 list.unzip; -#X text 200 10565 splits list to N lists \, each to separate output; -#X obj 30 10592 list.walk; -#X text 200 10592 Walks thru the list; -#X obj 30 10619 list.zip; -#X text 200 10619 takes n lists from n inlets (specified by argument) +#X obj 30 11105 list.stretch; +#X text 200 11105 stretches list - changes its size with linear interpolation; +#X obj 30 11132 list.sum; +#X text 200 11132 calculates sum of floats in list; +#X obj 30 11159 list.unique; +#X text 200 11159 removes duplicates from input list; +#X obj 30 11186 list.unpack; +#X text 200 11186 unpack list elements to separate outlets; +#X obj 30 11213 list.unzip; +#X text 200 11213 splits list to N lists \, each to separate output; +#X obj 30 11240 list.walk; +#X text 200 11240 Walks thru the list; +#X obj 30 11267 list.zip; +#X text 200 11267 takes n lists from n inlets (specified by argument) and output their elements sequentially (list1-1 list2-1 list1-2 list2-2 etc.).; -#X obj 20 10674 cnv 5 48 31 empty empty live 4 13 0 17 -262144 -49933 +#X obj 20 11322 cnv 5 48 31 empty empty live 4 13 0 17 -262144 -49933 0; -#X obj 20 10715 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10726 live.capture~; -#X text 200 10726 record up to 32s of sound and playback the recorded +#X obj 20 11363 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11374 live.capture~; +#X text 200 11374 record up to 32s of sound and playback the recorded sound in loop; -#X obj 20 10766 cnv 5 58 31 empty empty local 4 13 0 17 -262144 -49933 +#X obj 20 11414 cnv 5 58 31 empty empty local 4 13 0 17 -262144 -49933 0; -#X obj 20 10807 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 10818 local.dict; -#X text 200 10818 local named dict object; -#X obj 30 10845 local.float; -#X text 200 10845 canvas-scoped named float variable; -#X obj 30 10872 local.int; -#X text 200 10872 canvas-scoped named integer variable; -#X obj 30 10899 local.list; -#X text 200 10899 local named list object; -#X obj 30 10926 local.mlist; -#X text 200 10926 local named mlist object; -#X obj 30 10953 local.set; -#X text 200 10953 local named set object; -#X obj 20 10980 cnv 5 48 31 empty empty math 4 13 0 17 -262144 -49933 +#X obj 20 11455 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11466 local.dict; +#X text 200 11466 local named dict object; +#X obj 30 11493 local.float; +#X text 200 11493 canvas-scoped named float variable; +#X obj 30 11520 local.int; +#X text 200 11520 canvas-scoped named integer variable; +#X obj 30 11547 local.list; +#X text 200 11547 local named list object; +#X obj 30 11574 local.mlist; +#X text 200 11574 local named mlist object; +#X obj 30 11601 local.set; +#X text 200 11601 local named set object; +#X obj 20 11628 cnv 5 48 31 empty empty math 4 13 0 17 -262144 -49933 0; -#X obj 20 11021 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 11032 math.abs; -#X text 200 11032 absolute value function; -#X obj 30 11059 math.abs~; -#X text 200 11059 absolute value function for signals; -#X obj 30 11086 math.acos; -#X text 200 11086 arc cosine function; -#X obj 30 11113 math.acosh; -#X text 200 11113 inverse hyperbolic cosine function; -#X obj 30 11140 math.acosh~; -#X text 200 11140 hyperbolic arc cosine for signals; -#X obj 30 11167 math.acos~; -#X text 200 11167 arc cosine function for signals; -#X obj 30 11194 math.and; -#X text 200 11194 operation AND for multiple arguments; -#X obj 30 11221 math.approx; -#X text 200 11221 check if input value approximately equal to pattern; -#X obj 30 11248 math.asin; -#X text 200 11248 arc sine function; -#X obj 30 11275 math.asinh; -#X text 200 11275 inverse hyperbolic sine function; -#X obj 30 11302 math.asinh~; -#X text 200 11302 hyperbolic arc sine for signals; -#X obj 30 11329 math.asin~; -#X text 200 11329 arc sine for signals; -#X obj 30 11356 math.atan; -#X text 200 11356 arc tangent function; -#X obj 30 11383 math.atanh; -#X text 200 11383 inverse hyperbolic tangent function; -#X obj 30 11410 math.atanh~; -#X text 200 11410 hyperbolic arc tangent for signals; -#X obj 30 11437 math.atan~; -#X text 200 11437 arc tangent for signals; -#X obj 30 11464 math.binomial; -#X text 200 11464 binomial coefficient calculator; -#X obj 30 11491 math.cabs~; -#X text 200 11491 magnitude of a complex signals; -#X obj 30 11518 math.carg~; -#X text 200 11518 phase angle of a complex signals; -#X obj 30 11545 math.cbrt; -#X text 200 11545 cube root function; -#X obj 30 11572 math.cbrt~; -#X text 200 11572 cube root function for signals; -#X obj 30 11599 math.cdiv~; -#X text 200 11599 division of complex signals; -#X obj 30 11626 math.ceil; -#X text 200 11626 round to smallest integral value not less than input +#X obj 20 11669 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 11680 math.abs; +#X text 200 11680 absolute value function; +#X obj 30 11707 math.abs~; +#X text 200 11707 absolute value function for signals; +#X obj 30 11734 math.acos; +#X text 200 11734 arc cosine function; +#X obj 30 11761 math.acosh; +#X text 200 11761 inverse hyperbolic cosine function; +#X obj 30 11788 math.acosh~; +#X text 200 11788 hyperbolic arc cosine for signals; +#X obj 30 11815 math.acos~; +#X text 200 11815 arc cosine function for signals; +#X obj 30 11842 math.and; +#X text 200 11842 operation AND for multiple arguments; +#X obj 30 11869 math.approx; +#X text 200 11869 check if input value approximately equal to pattern; +#X obj 30 11896 math.asin; +#X text 200 11896 arc sine function; +#X obj 30 11923 math.asinh; +#X text 200 11923 inverse hyperbolic sine function; +#X obj 30 11950 math.asinh~; +#X text 200 11950 hyperbolic arc sine for signals; +#X obj 30 11977 math.asin~; +#X text 200 11977 arc sine for signals; +#X obj 30 12004 math.atan; +#X text 200 12004 arc tangent function; +#X obj 30 12031 math.atanh; +#X text 200 12031 inverse hyperbolic tangent function; +#X obj 30 12058 math.atanh~; +#X text 200 12058 hyperbolic arc tangent for signals; +#X obj 30 12085 math.atan~; +#X text 200 12085 arc tangent for signals; +#X obj 30 12112 math.binomial; +#X text 200 12112 binomial coefficient calculator; +#X obj 30 12139 math.cabs~; +#X text 200 12139 magnitude of a complex signals; +#X obj 30 12166 math.carg~; +#X text 200 12166 phase angle of a complex signals; +#X obj 30 12193 math.cbrt; +#X text 200 12193 cube root function; +#X obj 30 12220 math.cbrt~; +#X text 200 12220 cube root function for signals; +#X obj 30 12247 math.cdiv~; +#X text 200 12247 division of complex signals; +#X obj 30 12274 math.ceil; +#X text 200 12274 round to smallest integral value not less than input value; -#X obj 30 11653 math.ceil~; -#X text 200 11653 round to smallest integral value not less than input +#X obj 30 12301 math.ceil~; +#X text 200 12301 round to smallest integral value not less than input value; -#X obj 30 11680 math.cexp~; -#X text 200 11680 exponent of a complex signals; -#X obj 30 11707 math.cmul~; -#X text 200 11707 multiplication of complex signals; -#X obj 30 11734 math.cos; -#X text 200 11734 cosine function; -#X obj 30 11761 math.cosh; -#X text 200 11761 hyperbolic cosine function; -#X obj 30 11788 math.cosh~; -#X text 200 11788 hyperbolic cosine for signals; -#X obj 30 11815 math.cos~; -#X text 200 11815 cosine function; -#X obj 30 11842 math.div; -#X text 200 11842 division (on lists too); -#X obj 30 11869 math.e; -#X text 200 11869 mathematical constant \, base of the natural logarithm; -#X obj 30 11896 math.erf; -#X text 200 11896 error function; -#X obj 30 11923 math.erf~; -#X text 200 11923 error function for signals; -#X obj 30 11950 math.exp; -#X text 200 11950 exponential functions; -#X obj 30 11977 math.exp2; -#X text 200 11977 exponential functions; -#X obj 30 12004 math.exp2~; -#X text 200 12004 base-2 exponential for signal; -#X obj 30 12031 math.expr; -#X text 200 12031 dynamic [expr]; -#X obj 30 12058 math.exp~; -#X text 200 12058 base-e exponential for signal; -#X obj 30 12085 math.floor; -#X text 200 12085 round to largest integral value not greater than +#X obj 30 12328 math.cexp~; +#X text 200 12328 exponent of a complex signals; +#X obj 30 12355 math.cmul~; +#X text 200 12355 multiplication of complex signals; +#X obj 30 12382 math.cos; +#X text 200 12382 cosine function; +#X obj 30 12409 math.cosh; +#X text 200 12409 hyperbolic cosine function; +#X obj 30 12436 math.cosh~; +#X text 200 12436 hyperbolic cosine for signals; +#X obj 30 12463 math.cos~; +#X text 200 12463 cosine function; +#X obj 30 12490 math.div; +#X text 200 12490 division (on lists too); +#X obj 30 12517 math.e; +#X text 200 12517 mathematical constant \, base of the natural logarithm; +#X obj 30 12544 math.erf; +#X text 200 12544 error function; +#X obj 30 12571 math.erf~; +#X text 200 12571 error function for signals; +#X obj 30 12598 math.exp; +#X text 200 12598 exponential functions; +#X obj 30 12625 math.exp2; +#X text 200 12625 exponential functions; +#X obj 30 12652 math.exp2~; +#X text 200 12652 base-2 exponential for signal; +#X obj 30 12679 math.expr; +#X text 200 12679 dynamic [expr]; +#X obj 30 12706 math.exp~; +#X text 200 12706 base-e exponential for signal; +#X obj 30 12733 math.floor; +#X text 200 12733 round to largest integral value not greater than x; -#X obj 30 12112 math.floor~; -#X text 200 12112 round to largest integral value not greater than +#X obj 30 12760 math.floor~; +#X text 200 12760 round to largest integral value not greater than x; -#X obj 30 12139 math.gamma; -#X text 200 12139 gamma function; -#X obj 30 12166 math.gamma~; -#X text 200 12166 gamma function for floating point signals; -#X obj 30 12193 math.gcd; -#X text 200 12193 calculate greatest common divisor; -#X obj 30 12220 math.inf; -#X text 200 12220 infinity value that cannot be represented accurately; -#X obj 30 12247 math.inf~; -#X text 200 12247 inifinity signal generator; -#X obj 30 12274 math.lcm; -#X text 200 12274 calculate least common multiple; -#X obj 30 12301 math.lgamma; -#X text 200 12301 natural logarithm of the absolute value of the gamma +#X obj 30 12787 math.gamma; +#X text 200 12787 gamma function; +#X obj 30 12814 math.gamma~; +#X text 200 12814 gamma function for floating point signals; +#X obj 30 12841 math.gcd; +#X text 200 12841 calculate greatest common divisor; +#X obj 30 12868 math.inf; +#X text 200 12868 infinity value that cannot be represented accurately; +#X obj 30 12895 math.inf~; +#X text 200 12895 inifinity signal generator; +#X obj 30 12922 math.lcm; +#X text 200 12922 calculate least common multiple; +#X obj 30 12949 math.lgamma; +#X text 200 12949 natural logarithm of the absolute value of the gamma function; -#X obj 30 12328 math.lgamma~; -#X text 200 12328 natural logarithm of the absolute value of the gamma +#X obj 30 12976 math.lgamma~; +#X text 200 12976 natural logarithm of the absolute value of the gamma function for signals; -#X obj 30 12368 math.log; -#X text 200 12368 natural logarithm; -#X obj 30 12395 math.log10; -#X text 200 12395 logarithm functions; -#X obj 30 12422 math.log10~; -#X text 200 12422 natural logarithm; -#X obj 30 12449 math.log2; -#X text 200 12449 logarithm functions; -#X obj 30 12476 math.log2~; -#X text 200 12476 base-2 logarithm; -#X obj 30 12503 math.log~; -#X text 200 12503 natural logarithm; -#X obj 30 12530 math.mul; -#X text 200 12530 multiplication (on lists too); -#X obj 30 12557 math.nan; -#X text 200 12557 Not a Number \, unrepresentable value; -#X obj 30 12584 math.nan~; -#X text 200 12584 signal NaN; -#X obj 30 12611 math.neg; -#X text 200 12611 negate function; -#X obj 30 12638 math.or; -#X text 200 12638 operation OR for multiple arguments; -#X obj 30 12665 math.pi; -#X text 200 12665 mathematical constant; -#X obj 30 12692 math.pi~; -#X text 200 12692 mathematical constant; -#X obj 30 12719 math.polyeval; -#X text 200 12719 evaluates the polynomial described by the coefficients +#X obj 30 13016 math.log; +#X text 200 13016 natural logarithm; +#X obj 30 13043 math.log10; +#X text 200 13043 logarithm functions; +#X obj 30 13070 math.log10~; +#X text 200 13070 natural logarithm; +#X obj 30 13097 math.log2; +#X text 200 13097 logarithm functions; +#X obj 30 13124 math.log2~; +#X text 200 13124 base-2 logarithm; +#X obj 30 13151 math.log~; +#X text 200 13151 natural logarithm; +#X obj 30 13178 math.mul; +#X text 200 13178 multiplication (on lists too); +#X obj 30 13205 math.nan; +#X text 200 13205 Not a Number \, unrepresentable value; +#X obj 30 13232 math.nan~; +#X text 200 13232 signal NaN; +#X obj 30 13259 math.neg; +#X text 200 13259 negate function; +#X obj 30 13286 math.or; +#X text 200 13286 operation OR for multiple arguments; +#X obj 30 13313 math.pi; +#X text 200 13313 mathematical constant; +#X obj 30 13340 math.pi~; +#X text 200 13340 mathematical constant; +#X obj 30 13367 math.polyeval; +#X text 200 13367 evaluates the polynomial described by the coefficients list; -#X obj 30 12746 math.reciprocal; -#X text 200 12746 calculate reciprocal number; -#X obj 30 12773 math.reciprocal~; -#X text 200 12773 calculate reciprocal number for signals; -#X obj 30 12800 math.round; -#X text 200 12800 round to integral value \, regardless of rounding +#X obj 30 13394 math.reciprocal; +#X text 200 13394 calculate reciprocal number; +#X obj 30 13421 math.reciprocal~; +#X text 200 13421 calculate reciprocal number for signals; +#X obj 30 13448 math.round; +#X text 200 13448 round to integral value \, regardless of rounding direction; -#X obj 30 12827 math.round~; -#X text 200 12827 signal round; -#X obj 30 12854 math.sign; -#X text 200 12854 sign function; -#X obj 30 12881 math.sin; -#X text 200 12881 sine function; -#X obj 30 12908 math.sinh; -#X text 200 12908 hyperbolic sine function; -#X obj 30 12935 math.sinh~; -#X text 200 12935 hyperbolic sine for signals; -#X obj 30 12962 math.sin~; -#X text 200 12962 sine function; -#X obj 30 12989 math.sqrt; -#X text 200 12989 square root function; -#X obj 30 13016 math.sqrt~; -#X text 200 13016 square root for signal; -#X obj 30 13043 math.squared; -#X text 200 13043 value square; -#X obj 30 13070 math.squared~; -#X text 200 13070 signal value square; -#X obj 30 13097 math.sync_add; -#X text 200 13097 sync addition; -#X obj 30 13124 math.sync_and; -#X text 200 13124 sync logical AND operation; -#X obj 30 13151 math.sync_div; -#X text 200 13151 sync division; -#X obj 30 13178 math.sync_eq; -#X text 200 13178 sync equal numbers check; -#X obj 30 13205 math.sync_ge; -#X text 200 13205 sync greater equal numbers compare; -#X obj 30 13232 math.sync_gt; -#X text 200 13232 sync greater then numbers compare; -#X obj 30 13259 math.sync_le; -#X text 200 13259 sync less equal numbers compare; -#X obj 30 13286 math.sync_lshift; -#X text 200 13286 sync signed bit left shift; -#X obj 30 13313 math.sync_lt; -#X text 200 13313 sync less then numbers compare; -#X obj 30 13340 math.sync_mod; -#X text 200 13340 sync remainder of modulo division (float or integer); -#X obj 30 13367 math.sync_mul; -#X text 200 13367 sync multiplication; -#X obj 30 13394 math.sync_ne; -#X text 200 13394 sync numbers for not equality; -#X obj 30 13421 math.sync_or; -#X text 200 13421 sync logical OR operation; -#X obj 30 13448 math.sync_rshift; -#X text 200 13448 sync signed bit right shift; -#X obj 30 13475 math.sync_sub; -#X text 200 13475 sync subtraction; -#X obj 30 13502 math.sync_xor; -#X text 200 13502 sync logical XOR operation; -#X obj 30 13529 math.tan; -#X text 200 13529 tangent function; -#X obj 30 13556 math.tanh; -#X text 200 13556 hyperbolic tangent function; -#X obj 30 13583 math.tanh~; -#X text 200 13583 hyperbolic tangent for signals; -#X obj 30 13610 math.tan~; -#X text 200 13610 tangent function; -#X obj 30 13637 math.trunc; -#X text 200 13637 truncate to integer value; -#X obj 30 13664 math.trunc~; -#X text 200 13664 truncate to integer value; -#X obj 20 13691 cnv 5 49 31 empty empty midi 4 13 0 17 -262144 -49933 +#X obj 30 13475 math.round~; +#X text 200 13475 signal round; +#X obj 30 13502 math.sign; +#X text 200 13502 sign function; +#X obj 30 13529 math.sin; +#X text 200 13529 sine function; +#X obj 30 13556 math.sinh; +#X text 200 13556 hyperbolic sine function; +#X obj 30 13583 math.sinh~; +#X text 200 13583 hyperbolic sine for signals; +#X obj 30 13610 math.sin~; +#X text 200 13610 sine function; +#X obj 30 13637 math.sqrt; +#X text 200 13637 square root function; +#X obj 30 13664 math.sqrt~; +#X text 200 13664 square root for signal; +#X obj 30 13691 math.squared; +#X text 200 13691 value square; +#X obj 30 13718 math.squared~; +#X text 200 13718 signal value square; +#X obj 30 13745 math.sync_add; +#X text 200 13745 sync addition; +#X obj 30 13772 math.sync_and; +#X text 200 13772 sync logical AND operation; +#X obj 30 13799 math.sync_div; +#X text 200 13799 sync division; +#X obj 30 13826 math.sync_eq; +#X text 200 13826 sync equal numbers check; +#X obj 30 13853 math.sync_ge; +#X text 200 13853 sync greater equal numbers compare; +#X obj 30 13880 math.sync_gt; +#X text 200 13880 sync greater then numbers compare; +#X obj 30 13907 math.sync_le; +#X text 200 13907 sync less equal numbers compare; +#X obj 30 13934 math.sync_lshift; +#X text 200 13934 sync signed bit left shift; +#X obj 30 13961 math.sync_lt; +#X text 200 13961 sync less then numbers compare; +#X obj 30 13988 math.sync_mod; +#X text 200 13988 sync remainder of modulo division (float or integer); +#X obj 30 14015 math.sync_mul; +#X text 200 14015 sync multiplication; +#X obj 30 14042 math.sync_ne; +#X text 200 14042 sync numbers for not equality; +#X obj 30 14069 math.sync_or; +#X text 200 14069 sync logical OR operation; +#X obj 30 14096 math.sync_rshift; +#X text 200 14096 sync signed bit right shift; +#X obj 30 14123 math.sync_sub; +#X text 200 14123 sync subtraction; +#X obj 30 14150 math.sync_xor; +#X text 200 14150 sync logical XOR operation; +#X obj 30 14177 math.tan; +#X text 200 14177 tangent function; +#X obj 30 14204 math.tanh; +#X text 200 14204 hyperbolic tangent function; +#X obj 30 14231 math.tanh~; +#X text 200 14231 hyperbolic tangent for signals; +#X obj 30 14258 math.tan~; +#X text 200 14258 tangent function; +#X obj 30 14285 math.trunc; +#X text 200 14285 truncate to integer value; +#X obj 30 14312 math.trunc~; +#X text 200 14312 truncate to integer value; +#X obj 20 14339 cnv 5 49 31 empty empty midi 4 13 0 17 -262144 -49933 0; -#X obj 20 13732 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 13743 midi.cc; -#X text 200 13743 enhanced version of vanilla ctlin; -#X obj 30 13770 midi.clock; -#X text 200 13770 midi clock toolbox; -#X obj 30 13797 midi.ctl2str; -#X text 200 13797 convert Standard MIDI Controllers number to name; -#X obj 30 13824 midi.event2ctl; -#X text 200 13824 convert MidiEvent message to controller channel/value +#X obj 20 14380 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 14391 midi.arp; +#X text 200 14391 MIDI arpeggiator; +#X obj 30 14418 midi.cc; +#X text 200 14418 enhanced version of vanilla ctlin; +#X obj 30 14445 midi.clock; +#X text 200 14445 midi clock toolbox; +#X obj 30 14472 midi.ctl2str; +#X text 200 14472 convert Standard MIDI Controllers number to name; +#X obj 30 14499 midi.event2ctl; +#X text 200 14499 convert MidiEvent message to controller channel/value pair; -#X obj 30 13851 midi.event2note; -#X text 200 13851 convert MidiEvent message to midi note/velocity pair; -#X obj 30 13878 midi.event2prg; -#X text 200 13878 convert MidiEvent message to midi program change +#X obj 30 14526 midi.event2note; +#X text 200 14526 convert MidiEvent message to midi note/velocity pair; +#X obj 30 14553 midi.event2prg; +#X text 200 14553 convert MidiEvent message to midi program change value; -#X obj 30 13905 midi.file; -#X text 200 13905 standard midi file SMF reader and writer; -#X obj 30 13932 midi.kbd; -#X text 200 13932 computer keyboard midi; -#X obj 30 13959 midi.key2str; -#X text 200 13959 convert key number to SPN name according to tonality; -#X obj 30 13986 midi.oct; -#X text 200 13986 midi octave transpose; -#X obj 30 14013 midi.prg2str; -#X text 200 14013 convert GM Instrument number to name (string or symbol); -#X obj 30 14040 midi.sustain; -#X text 200 14040 sustain pedal emulation; -#X obj 30 14067 midi.sysex; -#X text 200 14067 sysex input messages as list; -#X obj 30 14094 midi.track; -#X text 200 14094 extract track from MidiFile; -#X obj 30 14121 midi.tuning; -#X text 200 14121 apply tuning to midi messages; -#X obj 30 14148 midi.vramp; -#X text 200 14148 apply crescendo or diminuendo for midi message flow; -#X obj 30 14175 midi.vrand; -#X text 200 14175 midi velocity randomizer; -#X obj 20 14202 cnv 5 48 31 empty empty misc 4 13 0 17 -262144 -49933 +#X obj 30 14580 midi.file; +#X text 200 14580 standard midi file SMF reader and writer; +#X obj 30 14607 midi.kbd; +#X text 200 14607 computer keyboard midi; +#X obj 30 14634 midi.key2str; +#X text 200 14634 convert key number to SPN name according to tonality; +#X obj 30 14661 midi.modus; +#X text 200 14661 snap/skip midi pitches according modus; +#X obj 30 14688 midi.oct; +#X text 200 14688 midi octave transpose; +#X obj 30 14715 midi.prg2str; +#X text 200 14715 convert GM Instrument number to name (string or symbol); +#X obj 30 14742 midi.split; +#X text 200 14742 midi note splitter; +#X obj 30 14769 midi.sustain; +#X text 200 14769 sustain pedal emulation; +#X obj 30 14796 midi.sysex; +#X text 200 14796 sysex input messages as list; +#X obj 30 14823 midi.track; +#X text 200 14823 extract track from MidiFile; +#X obj 30 14850 midi.tuning; +#X text 200 14850 apply tuning to midi messages; +#X obj 30 14877 midi.vramp; +#X text 200 14877 apply crescendo or diminuendo for midi message flow; +#X obj 30 14904 midi.vrand; +#X text 200 14904 midi velocity randomizer; +#X obj 20 14931 cnv 5 48 31 empty empty misc 4 13 0 17 -262144 -49933 0; -#X obj 20 14243 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 14254 click~; -#X text 200 14254 Output single impulse on bang; -#X obj 30 14281 fluid~; -#X text 200 14281 FluidSynth SoundFont 2 player; -#X obj 30 14308 modplug~; -#X text 200 14308 MOD file player (using libmodplug); -#X obj 30 14335 sfizz~; -#X text 200 14335 SFZ format sample player; -#X obj 30 14362 speech.flite; -#X text 200 14362 render speech to array; -#X obj 30 14389 speech.flite~; -#X text 200 14389 render speech to array; -#X obj 20 14416 cnv 5 38 31 empty empty msg 4 13 0 17 -262144 -49933 +#X obj 20 14972 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 14983 click~; +#X text 200 14983 Output single impulse on bang; +#X obj 30 15010 fluid~; +#X text 200 15010 FluidSynth SoundFont 2 player; +#X obj 30 15037 modplug~; +#X text 200 15037 MOD file player (using libmodplug); +#X obj 30 15064 risset.gliss; +#X text 200 15064 Sheppard/Risset glissando calculator; +#X obj 30 15091 sfizz~; +#X text 200 15091 SFZ format sample player; +#X obj 30 15118 speech.flite; +#X text 200 15118 render speech to array; +#X obj 30 15145 speech.flite~; +#X text 200 15145 render speech to array; +#X obj 30 15172 speech.rhvoice~; +#X text 200 15172 RHVoice text to speech synthesis; +#X obj 20 15199 cnv 5 38 31 empty empty msg 4 13 0 17 -262144 -49933 0; -#X obj 20 14457 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 14468 loadexpr; -#X text 200 14468 send message when patch loads; -#X obj 30 14495 msg; -#X text 200 14495 message constructor; -#X obj 30 14522 msg.after; -#X text 200 14522 send specified message after incoming message; -#X obj 30 14549 msg.onload; -#X text 200 14549 send message when patch loads; -#X obj 30 14576 msg.sched; -#X text 200 14576 message scheduler; -#X obj 20 14603 cnv 5 37 31 empty empty net 4 13 0 17 -262144 -49933 +#X obj 20 15240 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 15251 loadexpr; +#X text 200 15251 send message when patch loads; +#X obj 30 15278 msg; +#X text 200 15278 message constructor; +#X obj 30 15305 msg.after; +#X text 200 15305 send specified message after incoming message; +#X obj 30 15332 msg.onload; +#X text 200 15332 send message when patch loads; +#X obj 30 15359 msg.sched; +#X text 200 15359 message scheduler; +#X obj 20 15386 cnv 5 37 31 empty empty net 4 13 0 17 -262144 -49933 0; -#X obj 20 14644 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 14655 net.host2ip; -#X text 200 14655 returns IP address by DNS name; -#X obj 20 14682 cnv 5 58 31 empty empty noise 4 13 0 17 -262144 -49933 +#X obj 20 15427 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 15438 net.artnet.send; +#X text 200 15438 ArtNet DMX message sender; +#X obj 30 15465 net.host2ip; +#X text 200 15465 returns IP address by DNS name; +#X obj 30 15492 net.http.send; +#X text 200 15492 HTTP request sender; +#X obj 30 15519 net.osc.receive; +#X text 200 15519 OSC message listener; +#X obj 30 15546 net.osc.send; +#X text 200 15546 OSC message sender; +#X obj 30 15573 net.osc.server; +#X text 200 15573 OSC server control; +#X obj 20 15600 cnv 5 58 31 empty empty noise 4 13 0 17 -262144 -49933 0; -#X obj 20 14723 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 14734 noise.baker; -#X text 200 14734 Part of a-chaos library; -#X obj 30 14761 noise.clifford; -#X text 200 14761 Part of a-chaos library; -#X obj 30 14788 noise.collatz; -#X text 200 14788 Part of a-chaos library; -#X obj 30 14815 noise.crackle~; -#X text 200 14815 sparse noise generator; -#X obj 30 14842 noise.duffing; -#X text 200 14842 Part of a-chaos library; -#X obj 30 14869 noise.ginger; -#X text 200 14869 Gingerbreadman map chaotic generator; -#X obj 30 14896 noise.henon; -#X text 200 14896 Part of a-chaos library; -#X obj 30 14923 noise.henon_heilles; -#X text 200 14923 Part of a-chaos library; -#X obj 30 14950 noise.henon_phase; -#X text 200 14950 Part of a-chaos library; -#X obj 30 14977 noise.henonf; -#X text 200 14977 Part of a-chaos library; -#X obj 30 15004 noise.ikeda; -#X text 200 15004 Part of a-chaos library; -#X obj 30 15031 noise.lfreq0~; -#X text 200 15031 sampled/held noise (piecewise constant); -#X obj 30 15058 noise.lfreq~; -#X text 200 15058 noise.lfreq0~ smoothed with no overshoot; -#X obj 30 15085 noise.lorenz; -#X text 200 15085 Part of a-chaos library; -#X obj 30 15112 noise.lyapunov; -#X text 200 15112 Part of a-chaos library; -#X obj 30 15139 noise.navier_stokes; -#X text 200 15139 Part of a-chaos library; -#X obj 30 15166 noise.pink~; -#X text 200 15166 Pink noise generator; -#X obj 30 15193 noise.rossler; -#X text 200 15193 Part of a-chaos library; -#X obj 30 15220 noise.stein; -#X text 200 15220 Part of a-chaos library; -#X obj 30 15247 noise.torus; -#X text 200 15247 Part of a-chaos library; -#X obj 30 15274 noise.verhulst; -#X text 200 15274 Part of a-chaos library; -#X obj 30 15301 noise.white~; -#X text 200 15301 White noise generator; -#X obj 20 15328 cnv 5 38 31 empty empty osc 4 13 0 17 -262144 -49933 +#X obj 20 15641 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 15652 noise.baker; +#X text 200 15652 Part of a-chaos library; +#X obj 30 15679 noise.clifford; +#X text 200 15679 clifford attractor; +#X obj 30 15706 noise.collatz; +#X text 200 15706 collatz conjecture output; +#X obj 30 15733 noise.colored~; +#X text 200 15733 colored noise generator with an arbitrary spectral +roll; +#X obj 30 15760 noise.crackle~; +#X text 200 15760 sparse noise generator; +#X obj 30 15787 noise.duffing; +#X text 200 15787 duffing attractor; +#X obj 30 15814 noise.ginger; +#X text 200 15814 Gingerbreadman map chaotic generator; +#X obj 30 15841 noise.henon; +#X text 200 15841 henon attractor; +#X obj 30 15868 noise.henon_heilles; +#X text 200 15868 Hénon–Heiles_system; +#X obj 30 15895 noise.henon_phase; +#X text 200 15895 henon phase Ddagrams; +#X obj 30 15922 noise.henonf; +#X text 200 15922 Henon phase; +#X obj 30 15949 noise.ikeda; +#X text 200 15949 Ikeda attractor; +#X obj 30 15976 noise.lfreq0~; +#X text 200 15976 sampled/held noise (piecewise constant); +#X obj 30 16003 noise.lfreq~; +#X text 200 16003 noise.lfreq0~ smoothed with no overshoot; +#X obj 30 16030 noise.lorenz; +#X text 200 16030 Lorenz chaos; +#X obj 30 16057 noise.lyapunov; +#X text 200 16057 lyapunov random attractor; +#X obj 30 16084 noise.navier_stokes; +#X text 200 16084 navier-stokes diff equations; +#X obj 30 16111 noise.pink~; +#X text 200 16111 Pink noise generator; +#X obj 30 16138 noise.rossler; +#X text 200 16138 Rössler attractor; +#X obj 30 16165 noise.stein; +#X text 200 16165 Stein distribution; +#X obj 30 16192 noise.torus; +#X text 200 16192 torus attractor; +#X obj 30 16219 noise.verhulst; +#X text 200 16219 verhulst distribution; +#X obj 30 16246 noise.white~; +#X text 200 16246 White noise generator; +#X obj 20 16273 cnv 5 38 31 empty empty osc 4 13 0 17 -262144 -49933 0; -#X obj 20 15369 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 15380 osc.blit~; -#X text 200 15380 Bandlimited impulse train oscillator; -#X obj 30 15407 osc.impulse~; -#X text 200 15407 Bandlimited impulse train generator; -#X obj 30 15434 osc.pulse~; -#X text 200 15434 Bandlimited pulse train oscillator; -#X obj 30 15461 osc.saw4~; -#X text 200 15461 Bandlimited sawtooth wave; -#X obj 30 15488 osc.saw~; -#X text 200 15488 Alias-free sawtooth wave; -#X obj 30 15515 osc.sinfb~; -#X text 200 15515 Sine oscilator with feedback; -#X obj 30 15542 osc.sin~; -#X text 200 15542 Sine wave oscillator; -#X obj 30 15569 osc.square~; -#X text 200 15569 Bandlimited square wave oscillator; -#X obj 30 15596 osc.tri~; -#X text 200 15596 Bandlimited triangle wave oscillator; -#X obj 20 15623 cnv 5 58 31 empty empty patch 4 13 0 17 -262144 -49933 +#X obj 20 16314 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 16325 osc.blit~; +#X text 200 16325 Bandlimited impulse train oscillator; +#X obj 30 16352 osc.impulse~; +#X text 200 16352 Bandlimited impulse train generator; +#X obj 30 16379 osc.pulse~; +#X text 200 16379 Bandlimited pulse train oscillator; +#X obj 30 16406 osc.saw4~; +#X text 200 16406 Bandlimited sawtooth wave; +#X obj 30 16433 osc.saw~; +#X text 200 16433 Alias-free sawtooth wave; +#X obj 30 16460 osc.sinfb~; +#X text 200 16460 Sine oscilator with feedback; +#X obj 30 16487 osc.sin~; +#X text 200 16487 Sine wave oscillator; +#X obj 30 16514 osc.square~; +#X text 200 16514 Bandlimited square wave oscillator; +#X obj 30 16541 osc.tri~; +#X text 200 16541 Bandlimited triangle wave oscillator; +#X obj 20 16568 cnv 5 58 31 empty empty patch 4 13 0 17 -262144 -49933 0; -#X obj 20 15664 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 15675 canvas.current; -#X text 200 15675 verbose information about current canvas; -#X obj 30 15702 canvas.dir; -#X text 200 15702 current canvas directory; -#X obj 30 15729 canvas.name; -#X text 200 15729 current canvas name; -#X obj 30 15756 canvas.path; -#X text 200 15756 current canvas fullpath; -#X obj 30 15783 canvas.top; -#X text 200 15783 verbose information about top-level canvas; -#X obj 30 15810 patch.args; -#X text 200 15810 Get patch or subpatch arguments; -#X obj 30 15837 patch.deps; -#X text 200 15837 patch dependencies: used objects and abstractions; -#X obj 30 15864 patch.tree; -#X text 200 15864 patch tree; -#X obj 20 15891 cnv 5 47 31 empty empty path 4 13 0 17 -262144 -49933 +#X obj 20 16609 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 16620 canvas.current; +#X text 200 16620 verbose information about current canvas; +#X obj 30 16647 canvas.dir; +#X text 200 16647 current canvas directory; +#X obj 30 16674 canvas.name; +#X text 200 16674 current canvas name; +#X obj 30 16701 canvas.path; +#X text 200 16701 current canvas fullpath; +#X obj 30 16728 canvas.top; +#X text 200 16728 verbose information about top-level canvas; +#X obj 30 16755 patch.args; +#X text 200 16755 Get patch or subpatch arguments; +#X obj 30 16782 patch.deps; +#X text 200 16782 patch dependencies: used objects and abstractions; +#X obj 30 16809 patch.tree; +#X text 200 16809 patch tree; +#X obj 20 16836 cnv 5 47 31 empty empty path 4 13 0 17 -262144 -49933 0; -#X obj 20 15932 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 15943 file.size; -#X text 200 15943 output file size; -#X obj 30 15970 path.basename; -#X text 200 15970 outputs filename portion of pathname; -#X obj 30 15997 path.dirname; -#X text 200 15997 outputs directory portion of pathname; -#X obj 30 16024 path.exists; -#X text 200 16024 checks if given path exists; -#X obj 30 16051 path.is_dir; -#X text 200 16051 check if path is directory; -#X obj 30 16078 path.lsdir; -#X text 200 16078 list directory contents; -#X obj 30 16105 path.normalize; -#X text 200 16105 normalize file paths; -#X obj 30 16132 path.search; -#X text 200 16132 file search; -#X obj 30 16159 path.split; -#X text 200 16159 file path split; -#X obj 20 16186 cnv 5 109 31 empty empty predicates 4 13 0 17 -262144 +#X obj 20 16877 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 16888 file.size; +#X text 200 16888 output file size; +#X obj 30 16915 path.basename; +#X text 200 16915 outputs filename portion of pathname; +#X obj 30 16942 path.dirname; +#X text 200 16942 outputs directory portion of pathname; +#X obj 30 16969 path.exists; +#X text 200 16969 checks if given path exists; +#X obj 30 16996 path.file; +#X text 200 16996 file input/output; +#X obj 30 17023 path.is_dir; +#X text 200 17023 check if path is directory; +#X obj 30 17050 path.lsdir; +#X text 200 17050 list directory contents; +#X obj 30 17077 path.monitor; +#X text 200 17077 filesystem event monitor; +#X obj 30 17104 path.normalize; +#X text 200 17104 normalize file paths; +#X obj 30 17131 path.pattern; +#X text 200 17131 pattern filename generator; +#X obj 30 17158 path.search; +#X text 200 17158 file search; +#X obj 30 17185 path.split; +#X text 200 17185 file path split; +#X obj 20 17212 cnv 5 109 31 empty empty predicates 4 13 0 17 -262144 -49933 0; -#X obj 20 16227 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 16238 is_any; -#X text 200 16238 checks if input data has *any* type; -#X obj 30 16265 is_bang; -#X text 200 16265 checks if input data has *bang* type; -#X obj 30 16292 is_data; -#X text 200 16292 checks if input data has *data* type; -#X obj 30 16319 is_dict; -#X text 200 16319 checks if input data has *dict* type; -#X obj 30 16346 is_even; -#X text 200 16346 checks if input number is even; -#X obj 30 16373 is_file; -#X text 200 16373 checks if file exists and accessible; -#X obj 30 16400 is_float; -#X text 200 16400 checks if input data has *float* type; -#X obj 30 16427 is_list; -#X text 200 16427 checks if input data has *list* type; -#X obj 30 16454 is_odd; -#X text 200 16454 checks if input number is odd; -#X obj 30 16481 is_pointer; -#X text 200 16481 checks if input data has *pointer* type; -#X obj 30 16508 is_symbol; -#X text 200 16508 checks if input data has *symbol* type; -#X obj 20 16535 cnv 5 68 31 empty empty preset 4 13 0 17 -262144 +#X obj 20 17253 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 17264 is_any; +#X text 200 17264 checks if input data has *any* type; +#X obj 30 17291 is_bang; +#X text 200 17291 checks if input data has *bang* type; +#X obj 30 17318 is_data; +#X text 200 17318 checks if input data has *data* type; +#X obj 30 17345 is_dict; +#X text 200 17345 checks if input data has *dict* type; +#X obj 30 17372 is_even; +#X text 200 17372 checks if input number is even; +#X obj 30 17399 is_file; +#X text 200 17399 checks if file exists and accessible; +#X obj 30 17426 is_float; +#X text 200 17426 checks if input data has *float* type; +#X obj 30 17453 is_list; +#X text 200 17453 checks if input data has *list* type; +#X obj 30 17480 is_odd; +#X text 200 17480 checks if input number is odd; +#X obj 30 17507 is_pointer; +#X text 200 17507 checks if input data has *pointer* type; +#X obj 30 17534 is_prop; +#X text 200 17534 checks if input message is *property* message; +#X obj 30 17561 is_symbol; +#X text 200 17561 checks if input data has *symbol* type; +#X obj 20 17588 cnv 5 68 31 empty empty preset 4 13 0 17 -262144 -49933 0; -#X obj 20 16576 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 16587 preset.float; -#X text 200 16587 load/store float preset; -#X obj 30 16614 preset.list; -#X text 200 16614 load/store symbol preset; -#X obj 30 16641 preset.storage; -#X text 200 16641 preset storage control; -#X obj 30 16668 preset.symbol; -#X text 200 16668 load/store symbol preset; -#X obj 20 16695 cnv 5 89 31 empty empty property 4 13 0 17 -262144 +#X obj 20 17629 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 17640 preset.float; +#X text 200 17640 load/store float preset; +#X obj 30 17667 preset.list; +#X text 200 17667 load/store symbol preset; +#X obj 30 17694 preset.storage; +#X text 200 17694 preset storage control; +#X obj 30 17721 preset.symbol; +#X text 200 17721 load/store symbol preset; +#X obj 20 17748 cnv 5 89 31 empty empty property 4 13 0 17 -262144 -49933 0; -#X obj 20 16736 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 16747 patch.props; -#X text 200 16747 patch properties manager; -#X obj 30 16774 prop; -#X text 200 16774 get/set named property value for subpatch or abstraction; -#X obj 30 16801 prop.declare; -#X text 200 16801 declare named property for subpatch or abstraction; -#X obj 30 16828 prop.get; -#X text 200 16828 get property from connected object/subpatch/abstraction; -#X obj 30 16855 prop.get~; -#X text 200 16855 Property extractor from sound stream; -#X obj 30 16882 prop.join; -#X text 200 16882 join property to main data flow; -#X obj 30 16909 prop.random; -#X text 200 16909 property randomizer; -#X obj 30 16936 prop.set; -#X text 200 16936 set property for connected object/subpatch/abstraction; -#X obj 30 16963 prop.split; -#X text 200 16963 separate properties from dataflow; -#X obj 20 16990 cnv 5 58 31 empty empty proto 4 13 0 17 -262144 -49933 +#X obj 20 17789 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 17800 patch.props; +#X text 200 17800 patch properties manager; +#X obj 30 17827 prop; +#X text 200 17827 get/set named property value for subpatch or abstraction; +#X obj 30 17854 prop.declare; +#X text 200 17854 declare named property for subpatch or abstraction; +#X obj 30 17881 prop.get; +#X text 200 17881 get property from connected object/subpatch/abstraction; +#X obj 30 17908 prop.get~; +#X text 200 17908 Property extractor from sound stream; +#X obj 30 17935 prop.join; +#X text 200 17935 join property to main data flow; +#X obj 30 17962 prop.random; +#X text 200 17962 property randomizer; +#X obj 30 17989 prop.set; +#X text 200 17989 set property for connected object/subpatch/abstraction; +#X obj 30 18016 prop.split; +#X text 200 18016 separate properties from dataflow; +#X obj 20 18043 cnv 5 58 31 empty empty proto 4 13 0 17 -262144 -49933 0; -#X obj 20 17031 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 17042 proto.firmata; -#X text 200 17042 Firmata Arduino protocol support; -#X obj 30 17069 proto.midi; -#X text 200 17069 raw midi encoder/parser; -#X obj 30 17096 proto.midi.cc; -#X text 200 17096 raw midi CC encoder/parser; -#X obj 30 17123 proto.midi.sysex; -#X text 200 17123 raw midi SYSex encoder/parser; -#X obj 30 17150 proto.mpv; -#X text 200 17150 mpv video player control; -#X obj 30 17177 proto.sp.alpaca; -#X text 200 17177 protocol parser for Arduino-based CEAMMC footswitch; -#X obj 30 17204 proto.xtouch_ext; -#X text 200 17204 Behringer XTouch Extender XMidi protocol; -#X obj 20 17231 cnv 5 67 31 empty empty random 4 13 0 17 -262144 +#X obj 20 18084 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 18095 proto.feelworld; +#X text 200 18095 protocol for FeelWorld LivePro L1 HDMI mixer; +#X obj 30 18122 proto.firmata; +#X text 200 18122 Firmata Arduino protocol support; +#X obj 30 18149 proto.inscore; +#X text 200 18149 INScore message creator; +#X obj 30 18176 proto.midi; +#X text 200 18176 raw midi encoder/parser; +#X obj 30 18203 proto.midi.cc; +#X text 200 18203 raw midi CC encoder/parser; +#X obj 30 18230 proto.midi.sysex; +#X text 200 18230 raw midi SYSex encoder/parser; +#X obj 30 18257 proto.moppy; +#X text 200 18257 protocol for Musical flOPPY controller; +#X obj 30 18284 proto.mpv; +#X text 200 18284 mpv video player control; +#X obj 30 18311 proto.sp.alpaca; +#X text 200 18311 protocol parser for Arduino-based CEAMMC footswitch; +#X obj 30 18338 proto.vlc; +#X text 200 18338 VLC video player control over HTTP; +#X obj 30 18365 proto.whammy; +#X text 200 18365 Control for Digitech Whammy pedal; +#X obj 30 18392 proto.xtouch_ext; +#X text 200 18392 Behringer XTouch Extender XMidi protocol; +#X obj 20 18419 cnv 5 67 31 empty empty random 4 13 0 17 -262144 -49933 0; -#X obj 20 17272 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 17283 random.atom; -#X text 200 17283 weighted atom generation from specified list; -#X obj 30 17310 random.discrete; -#X text 200 17310 random weighted integers on interval [0 \, n); -#X obj 30 17337 random.float; -#X text 200 17337 uniform random float generator in specified range; -#X obj 30 17364 random.gauss; -#X text 200 17364 gaussian random distribution; -#X obj 30 17391 random.int; -#X text 200 17391 uniform random integer generator in specified range; -#X obj 30 17418 random.linear; -#X text 200 17418 random linear distribution; -#X obj 30 17445 random.pw_const; -#X text 200 17445 piecewise constant random distribution; -#X obj 30 17472 random.pw_lin; -#X text 200 17472 piecewise linear random distribution; -#X obj 20 17499 cnv 5 48 31 empty empty samp 4 13 0 17 -262144 -49933 +#X obj 20 18460 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 18471 random.atom; +#X text 200 18471 weighted atom generation from specified list; +#X obj 30 18498 random.discrete; +#X text 200 18498 random weighted integers on interval [0 \, n); +#X obj 30 18525 random.float; +#X text 200 18525 uniform random float generator in specified range; +#X obj 30 18552 random.gauss; +#X text 200 18552 gaussian random distribution; +#X obj 30 18579 random.int; +#X text 200 18579 uniform random integer generator in specified range; +#X obj 30 18606 random.linear; +#X text 200 18606 random linear distribution; +#X obj 30 18633 random.pw_const; +#X text 200 18633 piecewise constant random distribution; +#X obj 30 18660 random.pw_lin; +#X text 200 18660 piecewise linear random distribution; +#X obj 20 18687 cnv 5 48 31 empty empty samp 4 13 0 17 -262144 -49933 0; -#X obj 20 17540 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 17551 samp.time~; -#X text 200 17551 sample counter; -#X obj 20 17578 cnv 5 37 31 empty empty seq 4 13 0 17 -262144 -49933 +#X obj 20 18728 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 18739 samp.time~; +#X text 200 18739 sample counter; +#X obj 20 18766 cnv 5 37 31 empty empty seq 4 13 0 17 -262144 -49933 0; -#X obj 20 17619 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 17630 seq.arp; -#X text 200 17630 sequence arpeggiator; -#X obj 30 17657 seq.bangs; -#X text 200 17657 bang sequencer; -#X obj 30 17684 seq.counter; -#X text 200 17684 sequencer counter; -#X obj 30 17711 seq.life; -#X text 200 17711 Conway gamw of life sequencer; -#X obj 30 17738 seq.matrix; -#X text 200 17738 sequencer control for ui.matrix; -#X obj 30 17765 seq.nbangs; -#X text 200 17765 output specified number of bang with time intervals; -#X obj 30 17792 seq.phasor; -#X text 200 17792 control rate phasor (saw) generator; -#X obj 30 17819 seq.toggles; -#X text 200 17819 toggle sequencer; -#X obj 30 17846 sequencer; -#X text 200 17846 basic sequence player; -#X obj 20 17873 cnv 5 37 31 empty empty snd 4 13 0 17 -262144 -49933 +#X obj 20 18807 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 18818 seq.arp; +#X text 200 18818 sequence arpeggiator; +#X obj 30 18845 seq.bangs; +#X text 200 18845 bang sequencer; +#X obj 30 18872 seq.counter; +#X text 200 18872 sequencer counter; +#X obj 30 18899 seq.life; +#X text 200 18899 Conway gamw of life sequencer; +#X obj 30 18926 seq.matrix; +#X text 200 18926 sequencer control for ui.matrix; +#X obj 30 18953 seq.nbangs; +#X text 200 18953 output specified number of bang with time intervals; +#X obj 30 18980 seq.phasor; +#X text 200 18980 control rate phasor (saw) generator; +#X obj 30 19007 seq.toggles; +#X text 200 19007 toggle sequencer; +#X obj 30 19034 sequencer; +#X text 200 19034 basic sequence player; +#X obj 20 19061 cnv 5 37 31 empty empty snd 4 13 0 17 -262144 -49933 0; -#X obj 20 17914 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 17925 snd.file; -#X text 200 17925 Sound file loader on steroids; -#X obj 20 17952 cnv 5 47 31 empty empty spat 4 13 0 17 -262144 -49933 +#X obj 20 19102 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 19113 snd.file; +#X text 200 19113 Sound file loader on steroids; +#X obj 20 19140 cnv 5 47 31 empty empty spat 4 13 0 17 -262144 -49933 0; -#X obj 20 17993 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 18004 hoa.2d.decoder~; -#X text 200 18004 hoa 2d decoder; -#X obj 30 18031 hoa.2d.encoder~; -#X text 200 18031 hoa 2d encoder; -#X obj 30 18058 hoa.2d.map~; -#X text 200 18058 a 2d ambisonic multisource spatializer; -#X obj 30 18085 hoa.2d.optim~; -#X text 200 18085 a 2D ambisonic optimization tool; -#X obj 30 18112 hoa.2d.projector~; -#X text 200 18112 a plane waves decomposer from circular harmonics +#X obj 20 19181 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 19192 hoa.2d.decoder~; +#X text 200 19192 hoa 2d decoder; +#X obj 30 19219 hoa.2d.encoder~; +#X text 200 19219 hoa 2d encoder; +#X obj 30 19246 hoa.2d.map~; +#X text 200 19246 a 2d ambisonic multisource spatializer; +#X obj 30 19273 hoa.2d.optim~; +#X text 200 19273 a 2D ambisonic optimization tool; +#X obj 30 19300 hoa.2d.projector~; +#X text 200 19300 a plane waves decomposer from circular harmonics domain; -#X obj 30 18139 hoa.2d.recomposer~; -#X text 200 18139 recomposes a 2d plane wave decomposition into circular +#X obj 30 19327 hoa.2d.recomposer~; +#X text 200 19327 recomposes a 2d plane wave decomposition into circular harmonics; -#X obj 30 18179 hoa.2d.rotate~; -#X text 200 18179 a 2D ambisonic sound field rotation; -#X obj 30 18206 hoa.2d.wider~; -#X text 200 18206 a 2d fractional ambisonic order simulator; -#X obj 30 18233 hoa.@process; -#X text 200 18233 process properties manager for hoa.process~; -#X obj 30 18260 hoa.in; -#X text 200 18260 message inlet for a patcher loaded by hoa.process~; -#X obj 30 18287 hoa.in~; -#X text 200 18287 signal inlet for a patcher loaded by hoa.process~; -#X obj 30 18314 hoa.out; -#X text 200 18314 message outlet for a patcher loaded by hoa.process~; -#X obj 30 18341 hoa.out~; -#X text 200 18341 signal inlet for a patcher loaded by hoa.process~; -#X obj 30 18368 hoa.process~; -#X text 200 18368 patcher loader for multichannel processing; -#X obj 30 18398 ui.link @title [hoa.scope~] @url hoa.scope~-help.pd; -#X text 200 18395 a 2d ambisonic harmonic scope; -#X obj 30 18420 pan.cos~; -#X text 200 18420 two channel equal power sine/cosine panner; -#X obj 30 18447 pan.linsig~; -#X text 200 18447 two channel linear panner with signal control; -#X obj 30 18474 pan.lin~; -#X text 200 18474 two channel linear panner; -#X obj 30 18501 pan.spread~; -#X text 200 18501 spreads input channels across the stereo field; -#X obj 30 18528 pan.sqrt~; -#X text 200 18528 two channel equal power square root panner; -#X obj 30 18555 spat.pan4~; -#X text 200 18555 GMEM SPAT: 4-outputs spatializer; -#X obj 30 18582 spat.pan8~; -#X text 200 18582 GMEM SPAT: 8-outputs spatializer; -#X obj 30 18609 spat.zita6x8~; -#X text 200 18609 spat with 6 inputs sources to 8 channel output; -#X obj 30 18636 spat.zita8~; -#X text 200 18636 8 channel reverb spatializer; -#X obj 20 18663 cnv 5 68 31 empty empty string 4 13 0 17 -262144 +#X obj 30 19367 hoa.2d.rotate~; +#X text 200 19367 a 2D ambisonic sound field rotation; +#X obj 30 19394 hoa.2d.wider~; +#X text 200 19394 a 2d fractional ambisonic order simulator; +#X obj 30 19421 hoa.@process; +#X text 200 19421 process properties manager for hoa.process~; +#X obj 30 19448 hoa.in; +#X text 200 19448 message inlet for a patcher loaded by hoa.process~; +#X obj 30 19475 hoa.in~; +#X text 200 19475 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 19502 hoa.out; +#X text 200 19502 message outlet for a patcher loaded by hoa.process~; +#X obj 30 19529 hoa.out~; +#X text 200 19529 signal inlet for a patcher loaded by hoa.process~; +#X obj 30 19556 hoa.process~; +#X text 200 19556 patcher loader for multichannel processing; +#X obj 30 19586 ui.link @title [hoa.scope~] @url hoa.scope~-help.pd; +#X text 200 19583 a 2d ambisonic harmonic scope; +#X obj 30 19608 pan.cos~; +#X text 200 19608 two channel equal power sine/cosine panner; +#X obj 30 19635 pan.linsig~; +#X text 200 19635 two channel linear panner with signal control; +#X obj 30 19662 pan.lin~; +#X text 200 19662 two channel linear panner; +#X obj 30 19689 pan.spread~; +#X text 200 19689 spreads input channels across the stereo field; +#X obj 30 19716 pan.sqrt~; +#X text 200 19716 two channel equal power square root panner; +#X obj 30 19743 spat.pan4~; +#X text 200 19743 GMEM SPAT: 4-outputs spatializer; +#X obj 30 19770 spat.pan8~; +#X text 200 19770 GMEM SPAT: 8-outputs spatializer; +#X obj 30 19797 spat.zita6x8~; +#X text 200 19797 spat with 6 inputs sources to 8 channel output; +#X obj 30 19824 spat.zita8~; +#X text 200 19824 8 channel reverb spatializer; +#X obj 20 19851 cnv 5 68 31 empty empty string 4 13 0 17 -262144 -49933 0; -#X obj 20 18704 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 18715 string; -#X text 200 18715 string constructor; -#X obj 30 18742 string.contains; -#X text 200 18742 checks if string contains specified substring; -#X obj 30 18769 string.ends_with; -#X text 200 18769 checks if string ends with specified substring; -#X obj 30 18796 string.equal; -#X text 200 18796 check strings or symbols for equality; -#X obj 30 18823 string.format; -#X text 200 18823 formats string like printf.; -#X obj 30 18850 string.join; -#X text 200 18850 joins (concatenates) strings with separator; -#X obj 30 18877 string.length; -#X text 200 18877 number of characters in string (unicode supported); -#X obj 30 18904 string.match; -#X text 200 18904 check if string match regular expression; -#X obj 30 18931 string.remove; -#X text 200 18931 remove substring from input string; -#X obj 30 18958 string.replace; -#X text 200 18958 replace from one substring to another in input string; -#X obj 30 18985 string.split; -#X text 200 18985 split string or symbol by separator; -#X obj 30 19012 string.starts_with; -#X text 200 19012 checks if string starts with specified substring; -#X obj 30 19039 string.substr; -#X text 200 19039 extract substring from input string; -#X obj 30 19066 string2symbol; -#X text 200 19066 converts string to symbol; -#X obj 20 19093 cnv 5 68 31 empty empty symbol 4 13 0 17 -262144 +#X obj 20 19892 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 19903 string; +#X text 200 19903 string constructor; +#X obj 30 19930 string.contains; +#X text 200 19930 checks if string contains specified substring; +#X obj 30 19957 string.ends_with; +#X text 200 19957 checks if string ends with specified substring; +#X obj 30 19984 string.equal; +#X text 200 19984 check strings or symbols for equality; +#X obj 30 20011 string.format; +#X text 200 20011 formats string like printf.; +#X obj 30 20038 string.join; +#X text 200 20038 joins (concatenates) list to string with separator; +#X obj 30 20065 string.length; +#X text 200 20065 number of characters in string (unicode supported); +#X obj 30 20092 string.match; +#X text 200 20092 check if string match regular expression; +#X obj 30 20119 string.remove; +#X text 200 20119 remove substring from input string; +#X obj 30 20146 string.replace; +#X text 200 20146 replace from one substring to another in input string; +#X obj 30 20173 string.split; +#X text 200 20173 split string or symbol by separator; +#X obj 30 20200 string.starts_with; +#X text 200 20200 checks if string starts with specified substring; +#X obj 30 20227 string.substr; +#X text 200 20227 extract substring from input string; +#X obj 30 20254 string2symbol; +#X text 200 20254 converts string to symbol; +#X obj 20 20281 cnv 5 68 31 empty empty symbol 4 13 0 17 -262144 -49933 0; -#X obj 20 19134 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 19145 symbol.equal; -#X text 200 19145 check symbols for equality; -#X obj 30 19172 symbol.length; -#X text 200 19172 number of characters in symbol (unicode supported); -#X obj 30 19199 symbol.num_compare; -#X text 200 19199 numeric symbol compare; -#X obj 30 19226 symbol2any; -#X text 200 19226 converts symbol or string to message; -#X obj 30 19253 symbol2intlist; -#X text 200 19253 converts symbol to list of character codes; -#X obj 20 19280 cnv 5 57 31 empty empty synth 4 13 0 17 -262144 -49933 +#X obj 20 20322 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 20333 symbol.equal; +#X text 200 20333 check symbols for equality; +#X obj 30 20360 symbol.length; +#X text 200 20360 number of characters in symbol (unicode supported); +#X obj 30 20387 symbol.num_compare; +#X text 200 20387 numeric symbol compare; +#X obj 30 20414 symbol2any; +#X text 200 20414 converts symbol or string to message; +#X obj 30 20441 symbol2intlist; +#X text 200 20441 converts symbol to list of character codes; +#X obj 20 20468 cnv 5 57 31 empty empty synth 4 13 0 17 -262144 -49933 0; -#X obj 20 19321 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 19332 synth.bee3~; -#X text 200 19332 Hammond-oid organ FM synthesis instrument; -#X obj 30 19359 synth.birds~; -#X text 200 19359 bird singing generator; -#X obj 30 19386 synth.church_bell~; -#X text 200 19386 generic church bell modal model; -#X obj 30 19413 synth.dubdub~; -#X text 200 19413 simple synth based on a sawtooth wave filtered by +#X obj 20 20509 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 20520 synth.bee3~; +#X text 200 20520 Hammond-oid organ FM synthesis instrument; +#X obj 30 20547 synth.birds~; +#X text 200 20547 bird singing generator; +#X obj 30 20574 synth.church_bell~; +#X text 200 20574 generic church bell modal model; +#X obj 30 20601 synth.clap~; +#X text 200 20601 clap synth from faust librariest; +#X obj 30 20628 synth.dubdub~; +#X text 200 20628 simple synth based on a sawtooth wave filtered by a resonant lowpass; -#X obj 30 19453 synth.dx7~; -#X text 200 19453 FAUST dx7 implementation; -#X obj 30 19480 synth.eguitar~; -#X text 200 19480 simple electric guitar model with steel strings; -#X obj 30 19507 synth.english_bell~; -#X text 200 19507 english church bell modal model; -#X obj 30 19534 synth.fgrain~; -#X text 200 19534 file granulator from STK; -#X obj 30 19561 synth.french_bell~; -#X text 200 19561 french church bell modal model; -#X obj 30 19588 synth.german_bell~; -#X text 200 19588 german church bell modal model; -#X obj 30 19615 synth.glass_harm~; -#X text 200 19615 nonlinear banded waveguide modeled Glass Harmonica; -#X obj 30 19642 synth.glitch~; -#X text 200 19642 Glitch synthesizer by naivesound; -#X obj 30 19669 synth.harpsichord~; -#X text 200 19669 waveguide commuted harpsichord; -#X obj 30 19696 synth.kick~; -#X text 200 19696 low-kick synth from Guitarix project; -#X obj 30 19723 synth.ks~; -#X text 200 19723 Karplus-Strong string; -#X obj 30 19750 synth.marimba~; -#X text 200 19750 simple marimba physical model implementing a single +#X obj 30 20668 synth.dx7~; +#X text 200 20668 FAUST dx7 implementation; +#X obj 30 20695 synth.eguitar~; +#X text 200 20695 simple electric guitar model with steel strings; +#X obj 30 20722 synth.english_bell~; +#X text 200 20722 english church bell modal model; +#X obj 30 20749 synth.fgrain~; +#X text 200 20749 file granulator from STK; +#X obj 30 20776 synth.french_bell~; +#X text 200 20776 french church bell modal model; +#X obj 30 20803 synth.german_bell~; +#X text 200 20803 german church bell modal model; +#X obj 30 20830 synth.glass_harm~; +#X text 200 20830 nonlinear banded waveguide modeled Glass Harmonica; +#X obj 30 20857 synth.glitch~; +#X text 200 20857 Glitch synthesizer by naivesound; +#X obj 30 20884 synth.harpsichord~; +#X text 200 20884 waveguide commuted harpsichord; +#X obj 30 20911 synth.hat~; +#X text 200 20911 hi-hat synth from faust librariest; +#X obj 30 20938 synth.kick2~; +#X text 200 20938 low-kick synth from faust librariest; +#X obj 30 20965 synth.kick~; +#X text 200 20965 low-kick synth from Guitarix project; +#X obj 30 20992 synth.ks~; +#X text 200 20992 Karplus-Strong string; +#X obj 30 21019 synth.marimba~; +#X text 200 21019 simple marimba physical model implementing a single tone bar connected to tube; -#X obj 30 19790 synth.piano~; -#X text 200 19790 waveguide commuted piano; -#X obj 30 19817 synth.rhodey~; -#X text 200 19817 STK Fender Rhodes electric piano FM synthesis instrument; -#X obj 30 19844 synth.risset_arp~; -#X text 200 19844 Jean Claude Risset's harmonic arpeggio effect; -#X obj 30 19871 synth.risset_bell~; -#X text 200 19871 Jean Claude Risset's bell synth; -#X obj 30 19898 synth.risset_tone~; -#X text 200 19898 Jean Claude Risset's endless glissando; -#X obj 30 19925 synth.russian_bell~; -#X text 200 19925 russian church bell modal model; -#X obj 30 19952 synth.shakers~; -#X text 200 19952 various percussion sounds from STK library; -#X obj 30 19979 synth.sitar~; -#X text 200 19979 STK sitar; -#X obj 30 20006 synth.snare~; -#X text 200 20006 Snare drum synth from Guitarix project; -#X obj 30 20033 synth.standard_bell~; -#X text 200 20033 german church bell modal model; -#X obj 30 20060 synth.tube_bell~; -#X text 200 20060 STK tubular bell (orchestral chime) FM synthesis +#X obj 30 21059 synth.piano~; +#X text 200 21059 waveguide commuted piano; +#X obj 30 21086 synth.rhodey~; +#X text 200 21086 STK Fender Rhodes electric piano FM synthesis instrument; +#X obj 30 21113 synth.risset_arp~; +#X text 200 21113 Jean Claude Risset's harmonic arpeggio effect; +#X obj 30 21140 synth.risset_bell~; +#X text 200 21140 Jean Claude Risset's bell synth; +#X obj 30 21167 synth.risset_tone~; +#X text 200 21167 Jean Claude Risset's endless glissando; +#X obj 30 21194 synth.russian_bell~; +#X text 200 21194 russian church bell modal model; +#X obj 30 21221 synth.shakers~; +#X text 200 21221 various percussion sounds from STK library; +#X obj 30 21248 synth.sitar~; +#X text 200 21248 STK sitar; +#X obj 30 21275 synth.snare~; +#X text 200 21275 Snare drum synth from Guitarix project; +#X obj 30 21302 synth.standard_bell~; +#X text 200 21302 german church bell modal model; +#X obj 30 21329 synth.tube_bell~; +#X text 200 21329 STK tubular bell (orchestral chime) FM synthesis instrument; -#X obj 30 20087 synth.wurley~; -#X text 200 20087 Wurlitzer electric piano FM synthesis instrument; -#X obj 20 20114 cnv 5 68 31 empty empty system 4 13 0 17 -262144 +#X obj 30 21356 synth.voice_fofc~; +#X text 200 21356 Simple formant/vocal synthesizer with FOF-cycle filterbank.; +#X obj 30 21383 synth.voice_fofs~; +#X text 200 21383 Simple formant/vocal synthesizer with FOF-smooth +filterbank.; +#X obj 30 21410 synth.wurley~; +#X text 200 21410 Wurlitzer electric piano FM synthesis instrument; +#X obj 20 21437 cnv 5 68 31 empty empty system 4 13 0 17 -262144 -49933 0; -#X obj 20 20155 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 20166 system.colorpanel; -#X text 200 20166 System color panel dialog popup; -#X obj 30 20193 system.cursor; -#X text 200 20193 Output cursor motion \, mousewheel and button clicks; -#X obj 30 20220 system.exec; -#X text 200 20220 run external command in separate process; -#X obj 30 20247 system.exit; -#X text 200 20247 quit PureData; -#X obj 30 20274 system.getenv; -#X text 200 20274 Get system environment variables; -#X obj 30 20301 system.hostname; -#X text 200 20301 outputs system hostname; -#X obj 30 20328 system.memsize; -#X text 200 20328 returns the size of physical memory (RAM) in bytes +#X obj 20 21478 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 21489 system.colorpanel; +#X text 200 21489 System color panel dialog popup; +#X obj 30 21516 system.cursor; +#X text 200 21516 Output cursor motion \, mousewheel and button clicks; +#X obj 30 21543 system.exec; +#X text 200 21543 run external command in separate process; +#X obj 30 21570 system.exit; +#X text 200 21570 quit PureData; +#X obj 30 21597 system.getenv; +#X text 200 21597 Get system environment variables; +#X obj 30 21624 system.hostname; +#X text 200 21624 outputs system hostname; +#X obj 30 21651 system.memsize; +#X text 200 21651 returns the size of physical memory (RAM) in bytes round to float data type.; -#X obj 30 20368 system.memused; -#X text 200 20368 returns the process physical memory use - current +#X obj 30 21691 system.memused; +#X text 200 21691 returns the process physical memory use - current and peak; -#X obj 30 20395 system.screen_size; -#X text 200 20395 returns current screen size in pixels; -#X obj 20 20422 cnv 5 28 31 empty empty tl 4 13 0 17 -262144 -49933 0; -#X obj 20 20463 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 20474 tl.bang; -#X text 200 20474 Timeline bang (with possible delay); -#X obj 30 20504 ui.link @title [tl.cue] @url tl.cue-help.pd; -#X text 200 20501 Timeline section; -#X obj 30 20526 tl.timeline; -#X text 200 20526 Timeline - event scheduler; -#X obj 30 20553 tl.toggle; -#X text 200 20553 Timeline bang; -#X obj 30 20580 tl.transport; -#X text 200 20580 Timeline transport control; -#X obj 20 20607 cnv 5 28 31 empty empty ui 4 13 0 17 -262144 -49933 0; -#X obj 20 20648 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 30 20662 ui.link @title [ui.aview] @url ui.aview-help.pd; -#X text 200 20659 array view with cursor and selection; -#X obj 30 20687 ui.link @title [ui.bang] @url ui.bang-help.pd; -#X text 200 20684 A bang... that's all; -#X obj 30 20712 ui.link @title [ui.button] @url ui.button-help.pd; -#X text 200 20709 button widget; -#X obj 30 20737 ui.link @title [ui.colorpanel] @url +#X obj 30 21718 system.screen_size; +#X text 200 21718 returns current screen size in pixels; +#X obj 20 21745 cnv 5 28 31 empty empty tl 4 13 0 17 -262144 -49933 0; +#X obj 20 21786 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 21797 tl.bang; +#X text 200 21797 Timeline bang (with possible delay); +#X obj 30 21827 ui.link @title [tl.cue] @url tl.cue-help.pd; +#X text 200 21824 Timeline section; +#X obj 30 21849 tl.timeline; +#X text 200 21849 Timeline - event scheduler; +#X obj 30 21876 tl.toggle; +#X text 200 21876 Timeline bang; +#X obj 30 21903 tl.transport; +#X text 200 21903 Timeline transport control; +#X obj 20 21930 cnv 5 28 31 empty empty ui 4 13 0 17 -262144 -49933 0; +#X obj 20 21971 cnv 1 720 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 30 21985 ui.link @title [ui.aview] @url ui.aview-help.pd; +#X text 200 21982 array view with cursor and selection; +#X obj 30 22010 ui.link @title [ui.bang] @url ui.bang-help.pd; +#X text 200 22007 A bang... that's all; +#X obj 30 22035 ui.link @title [ui.button] @url ui.button-help.pd; +#X text 200 22032 button widget; +#X obj 30 22060 ui.link @title [ui.colorpanel] @url ui.colorpanel-help.pd; -#X text 200 20734 colorchooser widget; -#X obj 30 20762 ui.link @title [ui.display] @url ui.display-help.pd; -#X text 200 20759 Display GUI object; -#X obj 30 20787 ui.link @title [ui.dsp~] @url ui.dsp~-help.pd; -#X text 200 20784 GUI for turning DSP on/off; -#X obj 30 20812 ui.link @title [ui.env] @url ui.env-help.pd; -#X text 200 20809 envelope editor widget; -#X obj 30 20837 ui.link @title [ui.filter] @url ui.filter-help.pd; -#X text 200 20834 UI filter object calculator for biquad filter; -#X obj 30 20862 ui.link @title [ui.filter~] @url ui.filter~-help.pd; -#X text 200 20859 UI filter object based on biquad filter; -#X obj 30 20887 ui.link @title [ui.gain2~] @url ui.gain2~-help.pd; -#X text 200 20884 UI stereo gain control; -#X obj 30 20912 ui.link @title [ui.gain~] @url ui.gain~-help.pd; -#X text 200 20909 UI gain control; -#X obj 30 20937 ui.link @title [ui.icon] @url ui.icon-help.pd; -#X text 200 20934 simple icon with button capabilities; -#X obj 30 20962 ui.link @title [ui.incdec] @url ui.incdec-help.pd; -#X text 200 20959 value increment/decrement; -#X obj 30 20987 ui.link @title [ui.keyboard] @url ui.keyboard-help.pd; -#X text 200 20984 keyboard widget; -#X obj 30 21012 ui.link @title [ui.knob] @url ui.knob-help.pd; -#X text 200 21009 knob widget; -#X obj 30 21037 ui.link @title [ui.label] @url ui.label-help.pd; -#X text 200 21034 simple label widget; -#X obj 30 21062 ui.link @title [ui.link] @url ui.link-help.pd; -#X text 200 21059 Hyperlink widget; -#X obj 30 21087 ui.link @title [ui.matrix] @url ui.matrix-help.pd; -#X text 200 21084 The matrix of toggles has you.; -#X obj 30 21112 ui.link @title [ui.menu] @url ui.menu-help.pd; -#X text 200 21109 Dropdown menu; -#X obj 30 21137 ui.link @title [ui.meter~] @url ui.meter~-help.pd; -#X text 200 21134 Shows peak and rms signal level; -#X obj 30 21162 ui.link @title [ui.midi] @url ui.midi-help.pd; -#X text 200 21159 incoming MIDI message viewport; -#X obj 30 21187 ui.link @title [ui.mouse_filter] @url +#X text 200 22057 colorchooser widget; +#X obj 30 22085 ui.link @title [ui.display] @url ui.display-help.pd; +#X text 200 22082 Display GUI object; +#X obj 30 22110 ui.link @title [ui.dsp~] @url ui.dsp~-help.pd; +#X text 200 22107 GUI for turning DSP on/off; +#X obj 30 22135 ui.link @title [ui.env] @url ui.env-help.pd; +#X text 200 22132 envelope editor widget; +#X obj 30 22160 ui.link @title [ui.filter] @url ui.filter-help.pd; +#X text 200 22157 UI filter object calculator for biquad filter; +#X obj 30 22185 ui.link @title [ui.filter~] @url ui.filter~-help.pd; +#X text 200 22182 UI filter object based on biquad filter; +#X obj 30 22210 ui.link @title [ui.gain2~] @url ui.gain2~-help.pd; +#X text 200 22207 UI stereo gain control; +#X obj 30 22235 ui.link @title [ui.gain~] @url ui.gain~-help.pd; +#X text 200 22232 UI gain control; +#X obj 30 22260 ui.link @title [ui.icon] @url ui.icon-help.pd; +#X text 200 22257 simple icon with button capabilities; +#X obj 30 22285 ui.link @title [ui.incdec] @url ui.incdec-help.pd; +#X text 200 22282 value increment/decrement; +#X obj 30 22310 ui.link @title [ui.keyboard] @url ui.keyboard-help.pd; +#X text 200 22307 keyboard widget; +#X obj 30 22335 ui.link @title [ui.knob] @url ui.knob-help.pd; +#X text 200 22332 knob widget; +#X obj 30 22360 ui.link @title [ui.label] @url ui.label-help.pd; +#X text 200 22357 simple label widget; +#X obj 30 22385 ui.link @title [ui.link] @url ui.link-help.pd; +#X text 200 22382 Hyperlink widget; +#X obj 30 22410 ui.link @title [ui.matrix] @url ui.matrix-help.pd; +#X text 200 22407 The matrix of toggles has you.; +#X obj 30 22435 ui.link @title [ui.menu] @url ui.menu-help.pd; +#X text 200 22432 Dropdown menu; +#X obj 30 22460 ui.link @title [ui.meter~] @url ui.meter~-help.pd; +#X text 200 22457 Shows peak and rms signal level; +#X obj 30 22485 ui.link @title [ui.midi] @url ui.midi-help.pd; +#X text 200 22482 incoming MIDI message viewport; +#X obj 30 22510 ui.link @title [ui.mouse_filter] @url ui.mouse_filter-help.pd; -#X text 200 21184 filter mouse events from ui objects; -#X obj 30 21212 ui.link @title [ui.mouse_route] @url +#X text 200 22507 filter mouse events from ui objects; +#X obj 30 22535 ui.link @title [ui.mouse_route] @url ui.mouse_route-help.pd; -#X text 200 21209 routes mouse events from ui objects; -#X obj 30 21237 ui.link @title [ui.number] @url ui.number-help.pd; -#X text 200 21234 counterpart of the vanilla [nbx]; -#X obj 30 21262 ui.link @title [ui.number~] @url ui.number~-help.pd; -#X text 200 21259 counterpart of the vanilla [nbx] for signal; -#X obj 30 21287 ui.link @title [ui.plot~] @url ui.plot~-help.pd; -#X text 200 21284 signal plotter; -#X obj 30 21312 ui.link @title [ui.polar] @url ui.polar-help.pd; -#X text 200 21309 2D slider in polar coordinates; -#X obj 30 21337 ui.link @title [ui.preset] @url ui.preset-help.pd; -#X text 200 21334 Preset manager; -#X obj 30 21362 ui.link @title [ui.radio] @url ui.radio-help.pd; -#X text 200 21359 counterpart of the vanilla radio toggle; -#X obj 30 21387 ui.link @title [ui.rslider] @url ui.rslider-help.pd; -#X text 200 21384 range slider; -#X obj 30 21412 ui.link @title [ui.scope~] @url ui.scope~-help.pd; -#X text 200 21409 Scope GUI object; -#X obj 30 21437 ui.link @title [ui.slider] @url ui.slider-help.pd; -#X text 200 21434 counterpart of the vanilla slider; -#X obj 30 21462 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; -#X text 200 21459 2D slider widget; -#X obj 30 21487 ui.link @title [ui.sliders] @url ui.sliders-help.pd; -#X text 200 21484 Multiple slider widget; -#X obj 30 21512 ui.link @title [ui.spectroscope~] @url +#X text 200 22532 routes mouse events from ui objects; +#X obj 30 22560 ui.link @title [ui.number] @url ui.number-help.pd; +#X text 200 22557 counterpart of the vanilla [nbx]; +#X obj 30 22585 ui.link @title [ui.number~] @url ui.number~-help.pd; +#X text 200 22582 counterpart of the vanilla [nbx] for signal; +#X obj 30 22610 ui.link @title [ui.plot~] @url ui.plot~-help.pd; +#X text 200 22607 signal plotter; +#X obj 30 22635 ui.link @title [ui.polar] @url ui.polar-help.pd; +#X text 200 22632 2D slider in polar coordinates; +#X obj 30 22660 ui.link @title [ui.preset] @url ui.preset-help.pd; +#X text 200 22657 Preset manager; +#X obj 30 22685 ui.link @title [ui.radio] @url ui.radio-help.pd; +#X text 200 22682 counterpart of the vanilla radio toggle; +#X obj 30 22710 ui.link @title [ui.rslider] @url ui.rslider-help.pd; +#X text 200 22707 range slider; +#X obj 30 22735 ui.link @title [ui.scope~] @url ui.scope~-help.pd; +#X text 200 22732 Scope GUI object; +#X obj 30 22760 ui.link @title [ui.slider] @url ui.slider-help.pd; +#X text 200 22757 counterpart of the vanilla slider; +#X obj 30 22785 ui.link @title [ui.slider2d] @url ui.slider2d-help.pd; +#X text 200 22782 2D slider widget; +#X obj 30 22810 ui.link @title [ui.sliders] @url ui.sliders-help.pd; +#X text 200 22807 Multiple slider widget; +#X obj 30 22835 ui.link @title [ui.spectroscope~] @url ui.spectroscope~-help.pd; -#X text 200 21509 Spectroscope GUI object; -#X obj 30 21537 ui.link @title [ui.tab] @url ui.tab-help.pd; -#X text 200 21534 displays a list of text buttons or text toggles; -#X obj 30 21562 ui.link @title [ui.toggle] @url ui.toggle-help.pd; -#X text 200 21559 modern toggle widget; +#X text 200 22832 Spectroscope GUI object; +#X obj 30 22860 ui.link @title [ui.tab] @url ui.tab-help.pd; +#X text 200 22857 displays a list of text buttons or text toggles; +#X obj 30 22885 ui.link @title [ui.toggle] @url ui.toggle-help.pd; +#X text 200 22882 modern toggle widget; #X obj 1 1 cnv 5 740 40 empty empty ceammc 20 20 0 20 -104026 -4096 0; -#X obj 1 21584 cnv 5 740 80 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 21584 version: v0.9.4 \, license: GPL3; -#X obj 20 21612 ui.link @title https://github.com/uliss/pure-data @url +#X obj 1 22907 cnv 5 740 80 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 22907 version: v0.9.6 \, license: GPL3; +#X obj 20 22935 ui.link @title https://github.com/uliss/pure-data @url https://github.com/uliss/pure-data; -#X obj 20 21635 ui.link @title Generated with pddoc @url +#X obj 20 22958 ui.link @title Generated with pddoc @url http://github.com/uliss/pddoc; -#X obj 670 21599 msg 0; -#X obj 670 21634 switch~; -#X connect 1504 0 1505 0; \ No newline at end of file +#X obj 670 22922 msg 0; +#X obj 670 22957 switch~; +#X connect 1602 0 1603 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.an-help.pd b/ceammc/ext/doc/ceammc.an-help.pd index adffb02402..7d20482c61 100644 --- a/ceammc/ext/doc/ceammc.an-help.pd +++ b/ceammc/ext/doc/ceammc.an-help.pd @@ -12,6 +12,8 @@ #X text 200 197 root mean square with moving-average algorithm.; #X obj 30 224 an.tempo~; #X text 200 224 tempo detector; +#X obj 30 251 an.zero~; +#X text 200 251 zero crossing count/rate/freq calculator; #X obj 1 1 cnv 5 740 40 empty empty ceammc::an 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.array-help.pd b/ceammc/ext/doc/ceammc.array-help.pd index 5a544b7e0b..8543366c18 100644 --- a/ceammc/ext/doc/ceammc.array-help.pd +++ b/ceammc/ext/doc/ceammc.array-help.pd @@ -4,63 +4,67 @@ #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; #X obj 30 116 array.bpm; #X text 200 116 BPM calculator; -#X obj 30 143 array.circular~; -#X text 200 143 circular buffer for arrays; -#X obj 30 170 array.copy; -#X text 200 170 copy samples from one array to another; -#X obj 30 197 array.do; -#X text 200 197 iterate and modify array content via side-chain; -#X obj 30 224 array.each; -#X text 200 224 process each array elements via side-chain; -#X obj 30 251 array.fill; -#X text 200 251 fill array with single value or pattern; -#X obj 30 278 array.grainer~; -#X text 200 278 array granulator; -#X obj 30 305 array.hist; -#X text 200 305 calculates array histogram; -#X obj 30 332 array.mean; -#X text 200 332 calculates array arithmetic mean value; -#X obj 30 359 array.minmax; -#X text 200 359 find array min and max element value; -#X obj 30 386 array.play~; -#X text 200 386 array player with variable speed and amplitude; -#X obj 30 413 array.plot; -#X text 200 413 array data plotter; -#X obj 30 440 array.plot~; -#X text 200 440 plot signal on specified array; -#X obj 30 467 array.resample; -#X text 200 467 array resampler; -#X obj 30 494 array.rms; -#X text 200 494 calculates root mean square value for array; -#X obj 30 521 array.set; -#X text 200 521 set array content from list; -#X obj 30 548 array.stddev; -#X text 200 548 calculates standard deviation for array values; -#X obj 30 575 array.stretch; -#X text 200 575 array time-stretch \, pitch-shift or rate-change; -#X obj 30 602 array.sum; -#X text 200 602 calculates sum of array elements; -#X obj 30 629 array.sum2; -#X text 200 629 calculates sum of squares of array elements; -#X obj 30 656 array.variance; -#X text 200 656 calculates variance of array values; -#X obj 30 683 array.vplay; -#X text 200 683 simple array player for using with vline~; -#X obj 30 710 array.window; -#X text 200 710 fill array with window; -#X obj 30 737 plot.geomspace~; -#X text 200 737 outputs numbers spaced evenly on a log scale (a geometric +#X obj 30 143 array.circular; +#X text 200 143 array read/write as circular buffer; +#X obj 30 170 array.circular~; +#X text 200 170 circular buffer for arrays; +#X obj 30 197 array.convolve; +#X text 200 197 array FFT convolution; +#X obj 30 224 array.copy; +#X text 200 224 copy samples from one array to another; +#X obj 30 251 array.do; +#X text 200 251 iterate and modify array content via side-chain; +#X obj 30 278 array.each; +#X text 200 278 process each array elements via side-chain; +#X obj 30 305 array.fill; +#X text 200 305 fill array with single value or pattern; +#X obj 30 332 array.grainer~; +#X text 200 332 array granulator; +#X obj 30 359 array.hist; +#X text 200 359 calculates array histogram; +#X obj 30 386 array.mean; +#X text 200 386 calculates array arithmetic mean value; +#X obj 30 413 array.minmax; +#X text 200 413 find array min and max element value; +#X obj 30 440 array.play~; +#X text 200 440 array player with variable speed and amplitude; +#X obj 30 467 array.plot; +#X text 200 467 array data plotter; +#X obj 30 494 array.plot~; +#X text 200 494 plot signal on specified array; +#X obj 30 521 array.resample; +#X text 200 521 array resampler; +#X obj 30 548 array.rms; +#X text 200 548 calculates root mean square value for array; +#X obj 30 575 array.set; +#X text 200 575 set array content from list; +#X obj 30 602 array.stddev; +#X text 200 602 calculates standard deviation for array values; +#X obj 30 629 array.stretch; +#X text 200 629 array time-stretch \, pitch-shift or rate-change; +#X obj 30 656 array.sum; +#X text 200 656 calculates sum of array elements; +#X obj 30 683 array.sum2; +#X text 200 683 calculates sum of squares of array elements; +#X obj 30 710 array.variance; +#X text 200 710 calculates variance of array values; +#X obj 30 737 array.vplay; +#X text 200 737 simple array player for using with vline~; +#X obj 30 764 array.window; +#X text 200 764 fill array with window; +#X obj 30 791 plot.geomspace~; +#X text 200 791 outputs numbers spaced evenly on a log scale (a geometric progression); -#X obj 30 777 plot.hist~; -#X text 200 777 calculate and output signal histogram; -#X obj 30 804 plot.linspace~; -#X text 200 804 outputs numbers spaced evenly spaced over a specified +#X obj 30 831 plot.hist~; +#X text 200 831 calculate and output signal histogram; +#X obj 30 858 plot.linspace~; +#X text 200 858 outputs numbers spaced evenly spaced over a specified interval; -#X obj 30 844 plot.logspace~; -#X text 200 844 outputs numbers spaced evenly on a log scale; -#X obj 30 871 plot.response~; -#X text 200 871 output amp/phase freq response to impulse; +#X obj 30 898 plot.logspace~; +#X text 200 898 outputs numbers spaced evenly on a log scale; +#X obj 30 925 plot.response~; +#X text 200 925 output amp/phase freq response to impulse; #X obj 1 1 cnv 5 740 40 empty empty ceammc::array 20 20 0 20 -104026 -4096 0; -#X obj 1 898 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 908 library: ceammc; \ No newline at end of file +#X obj 1 952 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 962 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.base-help.pd b/ceammc/ext/doc/ceammc.base-help.pd index 43487d184c..a6c3d47fd1 100644 --- a/ceammc/ext/doc/ceammc.base-help.pd +++ b/ceammc/ext/doc/ceammc.base-help.pd @@ -40,7 +40,9 @@ #X text 200 573 multi stereo-signal crossfade; #X obj 30 600 xfade~; #X text 200 600 multi signal crossfade; +#X obj 30 627 z~; +#X text 200 627 sample delay; #X obj 1 1 cnv 5 740 40 empty empty ceammc::base 20 20 0 20 -104026 -4096 0; -#X obj 1 627 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 637 library: ceammc; \ No newline at end of file +#X obj 1 654 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 664 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.conv-help.pd b/ceammc/ext/doc/ceammc.conv-help.pd index 9891ae0f73..86c836dc3a 100644 --- a/ceammc/ext/doc/ceammc.conv-help.pd +++ b/ceammc/ext/doc/ceammc.conv-help.pd @@ -19,7 +19,7 @@ #X obj 30 305 conv.bits2pos; #X text 200 305 convert list of bits to list of bit position; #X obj 30 332 conv.bpm2hz; -#X text 200 332 converts BPM to frequency in herz; +#X text 200 332 converts BPM to frequency in hertz; #X obj 30 359 conv.bpm2ms; #X text 200 359 convert frequency in BPM to period in milliseconds; #X obj 30 386 conv.bpm2sec; @@ -61,41 +61,43 @@ to current samplerate; #X obj 30 871 conv.ms2samp~; #X text 200 871 convert time in milliseconds to number of samples according to current samplerate; -#X obj 30 911 conv.phase2rad; -#X text 200 911 convert phase value [0-1] to radians [0-2π]; -#X obj 30 938 conv.phase2rad~; +#X obj 30 911 conv.note2guido; +#X text 200 911 convert MIDI note to Guido notation; +#X obj 30 938 conv.phase2rad; #X text 200 938 convert phase value [0-1] to radians [0-2π]; -#X obj 30 965 conv.pitch2midi; -#X text 200 965 converts symbol pitch name to MIDI note number; -#X obj 30 992 conv.pol2car; -#X text 200 992 convert from polar coordinates to cartesian; -#X obj 30 1019 conv.rad2phase; -#X text 200 1019 convert radians value to phase; -#X obj 30 1046 conv.rad2phase~; +#X obj 30 965 conv.phase2rad~; +#X text 200 965 convert phase value [0-1] to radians [0-2π]; +#X obj 30 992 conv.pitch2midi; +#X text 200 992 converts symbol pitch name to MIDI note number; +#X obj 30 1019 conv.pol2car; +#X text 200 1019 convert from polar coordinates to cartesian; +#X obj 30 1046 conv.rad2phase; #X text 200 1046 convert radians value to phase; -#X obj 30 1073 conv.samp2ms; -#X text 200 1073 convert samples to time according to samplerate; -#X obj 30 1100 conv.samp2ms~; -#X text 200 1100 convert samples to milliseconds according to samplerate; -#X obj 30 1127 conv.samp2sec; -#X text 200 1127 convert samples to time according to samplerate; -#X obj 30 1154 conv.sec2bpm; -#X text 200 1154 convert period in seconds to frequency in BPM; -#X obj 30 1181 conv.sec2samp; -#X text 200 1181 convert time in seconds to number of samples according +#X obj 30 1073 conv.rad2phase~; +#X text 200 1073 convert radians value to phase; +#X obj 30 1100 conv.samp2ms; +#X text 200 1100 convert samples to time according to samplerate; +#X obj 30 1127 conv.samp2ms~; +#X text 200 1127 convert samples to milliseconds according to samplerate; +#X obj 30 1154 conv.samp2sec; +#X text 200 1154 convert samples to time according to samplerate; +#X obj 30 1181 conv.sec2bpm; +#X text 200 1181 convert period in seconds to frequency in BPM; +#X obj 30 1208 conv.sec2samp; +#X text 200 1208 convert time in seconds to number of samples according to current samplerate; -#X obj 30 1221 conv.sec2str; -#X text 200 1221 converts float time in seconds to formated symbol +#X obj 30 1248 conv.sec2str; +#X text 200 1248 converts float time in seconds to formated symbol (or string); -#X obj 30 1248 conv.sig2float~; -#X text 200 1248 convert signal to floats; -#X obj 30 1275 conv.str2sec; -#X text 200 1275 converts formatted time to float value in seconds; -#X obj 30 1302 music.dur2time; -#X text 200 1302 convert duration list to time; -#X obj 30 1329 music.voice2midi; -#X text 200 1329 convert voice music list of midi pitches; +#X obj 30 1275 conv.sig2float~; +#X text 200 1275 convert signal to floats; +#X obj 30 1302 conv.str2sec; +#X text 200 1302 converts formatted time to float value in seconds; +#X obj 30 1329 music.dur2time; +#X text 200 1329 convert duration list to time; +#X obj 30 1356 music.voice2midi; +#X text 200 1356 convert voice music list of midi pitches; #X obj 1 1 cnv 5 740 40 empty empty ceammc::conv 20 20 0 20 -104026 -4096 0; -#X obj 1 1356 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 1366 library: ceammc; \ No newline at end of file +#X obj 1 1383 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1393 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.db b/ceammc/ext/doc/ceammc.db index d8bebb8a35..427e5efb53 100644 --- a/ceammc/ext/doc/ceammc.db +++ b/ceammc/ext/doc/ceammc.db @@ -3,8 +3,11 @@ an.onset~ ~ .. an.pitchtrack~,ceammc/helmholtz~,helmholtz~ ~ ~.. an.rms~ ~ ~ an.tempo~ ~ .. +an.zero~ ~ ~ array.bpm . . -array.circular~ ~~~ ~ +array.circular . . +array.circular~ ~~. ~ +array.convolve .. . array.copy . . array.do .. .. array.each .. .. @@ -38,7 +41,7 @@ chaos.gbman0 . .. chaos.gbman0~ ~ ~~ chaos.jong,noise.jong . .. chaos.logistic,noise.logistic . . -chaos.std0 . .. +chaos.std0 .. .. chaos.std0~ ~~ ~~ click~,ceammc/click~ . ~ conv.amp2dbfs,ceammc/amp->dbfs,amp->dbfs . . @@ -67,6 +70,7 @@ conv.midi2freq,ceammc/midi->freq,midi->freq,ceammc/m->f,m->f . . conv.ms2bpm,ceammc/ms->bpm,ms->bpm . . conv.ms2samp,ceammc/ms->samp,ms->samp . . conv.ms2samp~,ceammc/ms->samp~,ms->samp~ ~ ~ +conv.note2guido,ceammc/note->guido,note->guido . . conv.phase2rad,ceammc/phase->rad,phase->rad . . conv.phase2rad~,ceammc/phase->rad~,phase->rad~ ~ ~ conv.pitch2midi,ceammc/pitch->midi,pitch->midi . . @@ -79,7 +83,7 @@ conv.samp2sec,ceammc/samp->sec,samp->sec . . conv.sec2bpm,ceammc/sec->bpm,sec->bpm . . conv.sec2samp,ceammc/sec->samp,sec->samp . . conv.sec2str,ceammc/sec->str,sec->str . . -conv.sig2float~,ceammc/sig->float~,sig->float~,ceammc/s->f~,s->f~ ~ . +conv.sig2float~,ceammc/sig->float~,sig->float~,ceammc/s->f~,s->f~ ~. . conv.str2sec,ceammc/str->sec,str->sec . . data.copy . . data.dict,ceammc/dict,dict . . @@ -100,8 +104,8 @@ dict.reject .. . dict.size . . dict.to_list,ceammc/dict->list,dict->list . . dict.values . . -dyn.comp2~ ~~ ~~. -dyn.comp~ ~ ~. +dyn.comp2~ ~~ ~~ +dyn.comp~ ~ ~ dyn.gate2~ ~~ ~~ dyn.gate~ ~ ~ dyn.limit2~ ~~ ~~ @@ -109,7 +113,7 @@ dyn.limit~ ~ ~ dyn.softclip~ ~ ~ env.adsr~ ~ ~. env.ar~ ~ ~. -env.asr~ ~ ~. +env.asr~ ~. ~. env.concat .. . env.follow~ ~ ~ env.mix ... . @@ -157,6 +161,7 @@ flow.reject_if,ceammc/reject_if,reject_if .. .. flow.ring,flow.>> .. ? flow.route . ? flow.select,flow.sel . ? +flow.seqdelay,flow.seqdel .. ? flow.space .. .. flow.speedlim,ceammc/speedlim,speedlim .. . flow.split,ceammc/split,split .. ... @@ -164,6 +169,7 @@ flow.stack .. . flow.sync,flow.' ? ? flow.sync_pack,flow.pack' ? . flow.tee~,ceammc/tee~,tee~,ceammc/~->,~-> ~ ~. +flt.a-weight . . flt.biquad~ ~~~~~~ ~ flt.bpf12~ ~ ~ flt.bpf24~ ~ ~ @@ -182,7 +188,7 @@ flt.c_pole,ceammc/pole->biquad,pole->biquad . . flt.dcblock2~ ~~ ~~ flt.dcblock~ ~ ~ flt.eq10~ ~ ~ -flt.eq_peak_cq~ . ~ +flt.eq_peak_cq~ ~ ~ flt.eq_peak~ ~ ~ flt.fb_comb~ ~~ ~ flt.fbank5x1~ ~ ~~~~~ @@ -190,20 +196,23 @@ flt.ff_comb~ ~~ ~ flt.freqz . ... flt.freqz~ ~ ~~ flt.highshelf~ ~ ~ -flt.hpf12~ ~ ~ -flt.hpf24~ ~ ~ +flt.hpf12~ ~. ~ +flt.hpf24~ ~. ~ flt.lowshelf~ ~ ~ -flt.lpf12~ ~ ~ -flt.lpf24~ ~ ~ +flt.lpf12~ ~. ~ +flt.lpf24~ ~. ~ flt.median . . flt.moog_vcf~ ~~ ~ flt.notch~ ~ ~ -flt.resonbp~ ~ ~ -fluid~,ceammc/fluid~ . ~~ +flt.resonbp~ ~.. ~ +flt.resonhp~ ~.. ~ +flt.resonlp~ ~.. ~ +fluid~,ceammc/fluid~ . ~~. function,func,ceammc/func,ceammc/function .. .. function.call,func.call .. . fx.bitdown~ ~ ~ fx.chorus~ ~ ~ +fx.dattorro~ ~~ ~~ fx.distortion1~ ~ ~ fx.distortion2~ ~ ~ fx.distortion3~ ~ ~ @@ -219,15 +228,18 @@ fx.freqshift~ ~~ ~~ fx.granulator~ ~ ~~ fx.greyhole~ ~~ ~~ fx.infrev~ ~~ ~~ +fx.jcrev~ ~. ~~~~ fx.looper~ ~ ~. fx.pitchshift_s~ ~~ ~ fx.pitchshift~ ~. ~ fx.rb_pitchshift~ ~. ~ fx.recho~ ~ ~ -fx.room~ ~ ~ +fx.room~ ~. ~ +fx.satrev~ ~. ~~ fx.sdelay~ ~ ~ fx.secho~ ~ ~ fx.shimmer~ ~~ ~~ +fx.stutter~ ~. ~ fx.tapiir~ ~~ ~~ fx.vocoder~ ~~ ~ fx.wahwah~ ~ ~ @@ -251,7 +263,7 @@ hoa.@process . . hoa.in - . hoa.in~ - ~ hoa.out . - -hoa.out~ - ~ +hoa.out~ ~ - hoa.process~ ? ? hoa.scope~ ? - hw.apple_smc . . @@ -260,24 +272,27 @@ hw.arduino . . hw.cpu_temp . . hw.display . . hw.kbd_light . . +hw.motu.avb . . hw.serial . . is_any . .. is_bang . .. is_data,ceammc/is_data . .. is_dict,ceammc/is_dict . .. is_even . .. -is_file,ceammc/is_file . . +is_file,ceammc/is_file . .. is_float . .. is_list . .. is_odd . .. is_pointer . .. +is_prop . .. is_symbol . .. lang.faust~ ? ? +lang.lua ? ? lfo.+pulse~ ~. ~ lfo.+saw~ ~. ~ lfo.+square~ ~. ~ lfo.+tri~ ~. ~ -lfo.impulse~ ~ ~ +lfo.impulse~ ~. ~ lfo.mosc~ ~. ~ lfo.pulse~ ~. ~ lfo.saw~ ~. ~ @@ -305,27 +320,30 @@ list.enumerate . . list.equal .. . list.first . . list.gen .. .. -list.histogram . . +list.histogram .. . list.insert ... . list.integrator . . list.last . . list.length,list.size . . +list.map .. . list.max . . list.mean,list.average . . list.min . . list.none_of .. .. list.normalize . . +list.pass .. . list.pass_if,list.filter .. .. list.prepend .. . list.product . . list.range,list.minmax . . list.reduce,list.foldl .. .. +list.reject .. . list.remove .. . list.remove_if .. .. list.repack . .. list.repeat .. . list.resample,list.r .. . -list.resize . . +list.resize .. . list.reverse . . list.rldecode,list.unwrap .. . list.rlencode,list.wrap . .. @@ -348,7 +366,7 @@ list.sum . . list.unique . . list.unpack . ? list.unzip,list.deinterleave . ? -list.walk . . +list.walk . .. list.zip,list.interleave ? . live.capture~ ~. ~ loadexpr,ceammc/loadexpr - . @@ -420,12 +438,12 @@ math.nan~ . ~ math.neg,ceammc/-x,-x . . math.or,ceammc/or,or ? . math.pi,ceammc/pi,pi . . -math.pi~,ceammc/pi~,pi~ - . +math.pi~,ceammc/pi~,pi~ - ~ math.polyeval .. . math.reciprocal,ceammc/1/x,1/x . . math.reciprocal~,ceammc/1/x~,1/x~ ~ ~ -math.round . . -math.round~,round~ . . +math.round,round,ceammc/round . . +math.round~,round~,ceammc/round~ ~ ~ math.sign . . math.sin . . math.sinh . . @@ -434,7 +452,7 @@ math.sin~ ~ ~ math.sqrt . . math.sqrt~ ~ ~ math.squared,math.^2,ceammc/^2,^2 . . -math.squared~,math.^2~,ceammc/^2~,^2~ ~ . +math.squared~,math.^2~,ceammc/^2~,^2~ ~ ~ math.sync_add,math.+',ceammc/+',+' .. . math.sync_and,math.&&',ceammc/&&',&&' .. . math.sync_div,math./',ceammc//',/' .. . @@ -455,23 +473,26 @@ math.tan . . math.tanh . . math.tanh~ ~ ~ math.tan~ ~ ~ -math.trunc ~ ~ +math.trunc . . math.trunc~ ~ ~ matrix~,ceammc/matrix~ ? ? metro.pattern . .. metro.random .. . metro.seq . . +midi.arp .. .. midi.cc . . midi.clock . .. midi.ctl2str,midi.ctl->str . . midi.event2ctl,midi.ev->ctl . .. midi.event2note,midi.ev->note . ... -midi.event2prg,midi.ev->prg . . +midi.event2prg,midi.ev->prg . .. midi.file . . midi.kbd .. . midi.key2str,midi.key->str . . +midi.modus . .. midi.oct .. . midi.prg2str,midi.prg->str . . +midi.split . ? midi.sustain .. . midi.sysex . . midi.track . .. @@ -487,27 +508,33 @@ msg.onload,ceammc/loadmsg,loadmsg - . msg.sched .. . music.dur2time,music.d->t . . music.voice2midi,music.v->m . . +net.artnet.send,artnet.send . . net.host2ip,net.host->ip . . +net.http.send,http.send . .. +net.osc.receive,net.osc.r .. . +net.osc.send,net.osc.s . . +net.osc.server,net.osc . . noise.baker . . -noise.clifford . . +noise.clifford . .. noise.collatz . . +noise.colored~ . ~ noise.crackle~ . ~ -noise.duffing . . +noise.duffing . .. noise.ginger . .. -noise.henon . . -noise.henon_heilles . .. -noise.henon_phase . . -noise.henonf . . -noise.ikeda . . +noise.henon . .. +noise.henon_heilles . .... +noise.henon_phase . .. +noise.henonf . .. +noise.ikeda . .. noise.lfreq0~ . ~ noise.lfreq~ . ~ -noise.lorenz . . -noise.lyapunov . . -noise.navier_stokes . . +noise.lorenz . ... +noise.lyapunov . .. +noise.navier_stokes . ..... noise.pink~ - ~ -noise.rossler . . +noise.rossler . ... noise.stein . . -noise.torus . . +noise.torus . .. noise.verhulst . . noise.white~ - ~ nsig~,ceammc/nsig~ ? ? @@ -533,9 +560,12 @@ patch.tree . . path.basename . . path.dirname . . path.exists . . +path.file . .. path.is_dir . .. path.lsdir,path.ls .. . +path.monitor . . path.normalize,path.norm . . +path.pattern . . path.search . .. path.split . .. plot.geomspace~ . ~. @@ -550,20 +580,25 @@ preset.symbol,preset.s . . prop,ceammc/prop . . prop.declare - - prop.get,p.get . ? -prop.get~,prop~>,@~> ~ ? +prop.get~,prop~>,@~>,ceammc/prop~>,ceammc/@~> ~ ? prop.join,prop<- ? . prop.random ? .. prop.set,p.set ? . -prop.split,prop->,@-> . ? +prop.split,prop->,@->,ceammc/prop->,ceammc/@-> . ? +proto.feelworld . . proto.firmata . . +proto.inscore . . proto.midi . . proto.midi.cc . . proto.midi.sysex . . +proto.moppy . . proto.mpv . . proto.sp.alpaca . . +proto.vlc . .. +proto.whammy . . proto.xtouch_ext . .. radio,ceammc/radio . ? -random.atom,random.a . . +random.atom,random.a .. . random.discrete . . random.float,random.f ... . random.gauss . . @@ -572,9 +607,16 @@ random.linear . . random.pw_const . . random.pw_lin . . replace,ceammc/replace ... . +risset.gliss . .. +route.any . .. +route.bang,route.b . .. route.float,route.f . .. +route.list,route.l . .. +route.prop . .. +route.random,route.r . ? +route.symbol,route.s . .. rtree.to_list,ceammc/rtree->list,rtree->list . . -samp.time~,samp.t~ ~. . +samp.time~,samp.t~ ~. ~ seq.arp . .. seq.bangs,seq.b .. .. seq.counter .. .. @@ -599,6 +641,7 @@ spat.zita6x8~ ~~~~~~ ~~~~~~~~ spat.zita8~ ~ ~~~~~~~~ speech.flite .. . speech.flite~ . ~. +speech.rhvoice~,ceammc/rhvoice~,rhvoice~ . ~. spring,ceammc/spring .. .. string,ceammc/string,ceammc/str,str . . string.contains,str.contains .. . @@ -610,7 +653,7 @@ string.length,str.length . . string.match,str.match .. . string.remove,str.remove .. . string.replace,str.replace ... . -string.split,str.split,symbol.split . . +string.split,str.split,symbol.split .. . string.starts_with,str.starts_with .. . string.substr,str.substr ... . string2symbol,ceammc/string2symbol,ceammc/str->sym,str->sym . . @@ -623,6 +666,7 @@ sync,ceammc/sync ? ? synth.bee3~ . ~ synth.birds~ . ~~ synth.church_bell~ . ~ +synth.clap~ . ~. synth.dubdub~ . ~ synth.dx7~ . ~ synth.eguitar~ . ~ @@ -633,6 +677,8 @@ synth.german_bell~ . ~ synth.glass_harm~ . ~~ synth.glitch~ . ~ synth.harpsichord~ . ~~ +synth.hat~ . ~. +synth.kick2~ . ~. synth.kick~ . ~. synth.ks~ . ~ synth.marimba~ . ~ @@ -647,6 +693,8 @@ synth.sitar~ . ~ synth.snare~ . ~. synth.standard_bell~ . ~ synth.tube_bell~ . ~ +synth.voice_fofc~ . ~ +synth.voice_fofs~ . ~ synth.wurley~ . ~ system.colorpanel . . system.cursor . . @@ -671,7 +719,7 @@ ui.dsp~ . - ui.env . .. ui.faust~ ? ? ui.filter . . -ui.filter~ ~ ~ +ui.filter~ ~ ~. ui.gain2~,ui.hgain2~,ui.vgain2~ ~~ ~~ ui.gain~,ui.hgain~,ui.vgain~ ~ ~ ui.icon . . @@ -693,9 +741,9 @@ ui.polar . . ui.preset . - ui.radio,ui.radio*,ui.hrd,ui.hrd*,ui.vrd,ui.vrd* . . ui.rslider,ui.rsl . . -ui.scope~ . - +ui.scope~ ~ - ui.slider,ui.hsl,ui.vsl . . -ui.slider2d . . +ui.slider2d,ui.s2d . . ui.sliders,ui.vsliders . . ui.spectroscope~,ui.ssc~ ~ - ui.tab . . @@ -705,3 +753,4 @@ window,ceammc/window,ceammc/win,win . . xdac~,ceammc/xdac~ ? - xfade2~,ceammc/xfade2~ ? ~~ xfade~,ceammc/xfade~ ? ~ +z~,ceammc/z~ ~. ~ diff --git a/ceammc/ext/doc/ceammc.flow-help.pd b/ceammc/ext/doc/ceammc.flow-help.pd index 9d6d58a542..113f1751c1 100644 --- a/ceammc/ext/doc/ceammc.flow-help.pd +++ b/ceammc/ext/doc/ceammc.flow-help.pd @@ -74,26 +74,41 @@ #X text 200 1034 advanced message router; #X obj 30 1061 flow.select; #X text 200 1061 vanilla flow on steroids; -#X obj 30 1088 flow.space; -#X text 200 1088 space in time messages received at the same logical +#X obj 30 1088 flow.seqdelay; +#X text 200 1088 sequential delay/router for input flow; +#X obj 30 1115 flow.space; +#X text 200 1115 space in time messages received at the same logical time; -#X obj 30 1115 flow.speedlim; -#X text 200 1115 control stream speed limiter; -#X obj 30 1142 flow.split; -#X text 200 1142 split data flow by external side-chain predicate; -#X obj 30 1169 flow.stack; -#X text 200 1169 any message stack; -#X obj 30 1196 flow.sync; -#X text 200 1196 bus with only hot inlets; -#X obj 30 1223 flow.sync_pack; -#X text 200 1223 flow pack with all hot inlets; -#X obj 30 1250 flow.tee~; -#X text 200 1250 separate audio and control streams; -#X obj 30 1277 replace; -#X text 200 1277 Replace atoms in data stream; -#X obj 30 1304 route.float; -#X text 200 1304 separate float messages from other types; +#X obj 30 1142 flow.speedlim; +#X text 200 1142 control stream speed limiter; +#X obj 30 1169 flow.split; +#X text 200 1169 split data flow by external side-chain predicate; +#X obj 30 1196 flow.stack; +#X text 200 1196 any message stack; +#X obj 30 1223 flow.sync; +#X text 200 1223 bus with only hot inlets; +#X obj 30 1250 flow.sync_pack; +#X text 200 1250 flow pack with all hot inlets; +#X obj 30 1277 flow.tee~; +#X text 200 1277 separate audio and control streams; +#X obj 30 1304 replace; +#X text 200 1304 Replace atoms in data stream; +#X obj 30 1331 route.any; +#X text 200 1331 separate any messages from bangs \, floats \, symbols +and lists; +#X obj 30 1358 route.bang; +#X text 200 1358 separate bang messages from other types; +#X obj 30 1385 route.float; +#X text 200 1385 separate float messages from other types; +#X obj 30 1412 route.list; +#X text 200 1412 separate list messages from other types; +#X obj 30 1439 route.prop; +#X text 200 1439 separate property messages from other types; +#X obj 30 1466 route.random; +#X text 200 1466 routes input flow to random outlet; +#X obj 30 1493 route.symbol; +#X text 200 1493 separate symbol messages from other types; #X obj 1 1 cnv 5 740 40 empty empty ceammc::flow 20 20 0 20 -104026 -4096 0; -#X obj 1 1331 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 1341 library: ceammc; \ No newline at end of file +#X obj 1 1520 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1530 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.flt-help.pd b/ceammc/ext/doc/ceammc.flt-help.pd index 80342520a2..18e6b7f634 100644 --- a/ceammc/ext/doc/ceammc.flt-help.pd +++ b/ceammc/ext/doc/ceammc.flt-help.pd @@ -2,78 +2,84 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 flt.biquad~; -#X text 200 116 second order IIR filter.; -#X obj 30 143 flt.bpf12~; -#X text 200 143 Two pole band-pass butterworth filter; -#X obj 30 170 flt.bpf24~; -#X text 200 170 Four pole band-pass butterworth filter; -#X obj 30 197 flt.c_apf; -#X text 200 197 Allpass filter coefficient calculator for biquad; -#X obj 30 224 flt.c_bpf~; -#X text 200 224 BPF coefficient calculator for biquad filter; -#X obj 30 251 flt.c_highshelf~; -#X text 200 251 Highshelf filter coefficient calculator for biquad; -#X obj 30 278 flt.c_hpf; -#X text 200 278 HPF coefficient calculator for biquad filter; -#X obj 30 305 flt.c_hpf~; +#X obj 30 116 flt.a-weight; +#X text 200 116 convert frequency to A-weight value; +#X obj 30 143 flt.biquad~; +#X text 200 143 second order IIR filter.; +#X obj 30 170 flt.bpf12~; +#X text 200 170 Two pole band-pass butterworth filter; +#X obj 30 197 flt.bpf24~; +#X text 200 197 Four pole band-pass butterworth filter; +#X obj 30 224 flt.c_apf; +#X text 200 224 Allpass filter coefficient calculator for biquad; +#X obj 30 251 flt.c_bpf~; +#X text 200 251 BPF coefficient calculator for biquad filter; +#X obj 30 278 flt.c_highshelf~; +#X text 200 278 Highshelf filter coefficient calculator for biquad; +#X obj 30 305 flt.c_hpf; #X text 200 305 HPF coefficient calculator for biquad filter; -#X obj 30 332 flt.c_lowshelf~; -#X text 200 332 Lowshelf filter coefficient calculator for biquad; -#X obj 30 359 flt.c_lpf; -#X text 200 359 LPF coefficient calculator for biquad filter; -#X obj 30 386 flt.c_lpf~; +#X obj 30 332 flt.c_hpf~; +#X text 200 332 HPF coefficient calculator for biquad filter; +#X obj 30 359 flt.c_lowshelf~; +#X text 200 359 Lowshelf filter coefficient calculator for biquad; +#X obj 30 386 flt.c_lpf; #X text 200 386 LPF coefficient calculator for biquad filter; -#X obj 30 413 flt.c_notch; -#X text 200 413 Notch filter coefficient calculator for biquad; -#X obj 30 440 flt.c_notch~; -#X text 200 440 Band-reject coefficient calculator for biquad filter; -#X obj 30 467 flt.c_peak~; -#X text 200 467 Peaking equalizer calculator for biquad; -#X obj 30 494 flt.c_pole; -#X text 200 494 One-pole coefficient calculator for biquad filter; -#X obj 30 521 flt.dcblock2~; -#X text 200 521 stereo DC blocker; -#X obj 30 548 flt.dcblock~; -#X text 200 548 mono DC blocker; -#X obj 30 575 flt.eq10~; -#X text 200 575 graphic 10 band equalizer; -#X obj 30 602 flt.eq_peak_cq~; -#X text 200 602 constant-Q second order peaking equalizer section; -#X obj 30 629 flt.eq_peak~; -#X text 200 629 second order "peaking equalizer" section (gain boost +#X obj 30 413 flt.c_lpf~; +#X text 200 413 LPF coefficient calculator for biquad filter; +#X obj 30 440 flt.c_notch; +#X text 200 440 Notch filter coefficient calculator for biquad; +#X obj 30 467 flt.c_notch~; +#X text 200 467 Band-reject coefficient calculator for biquad filter; +#X obj 30 494 flt.c_peak~; +#X text 200 494 Peaking equalizer calculator for biquad; +#X obj 30 521 flt.c_pole; +#X text 200 521 One-pole coefficient calculator for biquad filter; +#X obj 30 548 flt.dcblock2~; +#X text 200 548 stereo DC blocker; +#X obj 30 575 flt.dcblock~; +#X text 200 575 mono DC blocker; +#X obj 30 602 flt.eq10~; +#X text 200 602 graphic 10 band equalizer; +#X obj 30 629 flt.eq_peak_cq~; +#X text 200 629 constant-Q second order peaking equalizer section; +#X obj 30 656 flt.eq_peak~; +#X text 200 656 second order "peaking equalizer" section (gain boost or cut near some frequency). Also called a "parametric equalizer" section.; -#X obj 30 684 flt.fb_comb~; -#X text 200 684 feedback comb filter; -#X obj 30 711 flt.fbank5x1~; -#X text 200 711 5 band one octave butterworth filterbank; -#X obj 30 738 flt.ff_comb~; -#X text 200 738 feed forward comb filter; -#X obj 30 765 flt.freqz; -#X text 200 765 compute the frequency response of a digital filter; -#X obj 30 792 flt.freqz~; +#X obj 30 711 flt.fb_comb~; +#X text 200 711 feedback comb filter; +#X obj 30 738 flt.fbank5x1~; +#X text 200 738 5 band one octave butterworth filterbank; +#X obj 30 765 flt.ff_comb~; +#X text 200 765 feed forward comb filter; +#X obj 30 792 flt.freqz; #X text 200 792 compute the frequency response of a digital filter; -#X obj 30 819 flt.highshelf~; -#X text 200 819 gain boost|cut above some frequency; -#X obj 30 846 flt.hpf12~; -#X text 200 846 High-pass second order Butterworth filter; -#X obj 30 873 flt.hpf24~; -#X text 200 873 High-pass fourth order Butterworth filter; -#X obj 30 900 flt.lowshelf~; -#X text 200 900 gain boost|cut below some frequency; -#X obj 30 927 flt.lpf12~; -#X text 200 927 Low-pass second order Butterworth filter; -#X obj 30 954 flt.lpf24~; -#X text 200 954 Low-pass fourth order Butterworth filter; -#X obj 30 981 flt.median; -#X text 200 981 Median control flow filter; -#X obj 30 1008 flt.moog_vcf~; -#X text 200 1008 Moog Voltage Controlled Filter; -#X obj 30 1035 flt.notch~; -#X text 200 1035 band-rejection filter; -#X obj 30 1062 flt.resonbp~; -#X text 200 1062 Simple resonant bandpass filter; +#X obj 30 819 flt.freqz~; +#X text 200 819 compute the frequency response of a digital filter; +#X obj 30 846 flt.highshelf~; +#X text 200 846 gain boost|cut above some frequency; +#X obj 30 873 flt.hpf12~; +#X text 200 873 High-pass second order Butterworth filter; +#X obj 30 900 flt.hpf24~; +#X text 200 900 High-pass fourth order Butterworth filter; +#X obj 30 927 flt.lowshelf~; +#X text 200 927 gain boost|cut below some frequency; +#X obj 30 954 flt.lpf12~; +#X text 200 954 Low-pass second order Butterworth filter; +#X obj 30 981 flt.lpf24~; +#X text 200 981 Low-pass fourth order Butterworth filter; +#X obj 30 1008 flt.median; +#X text 200 1008 Median control flow filter; +#X obj 30 1035 flt.moog_vcf~; +#X text 200 1035 Moog Voltage Controlled Filter; +#X obj 30 1062 flt.notch~; +#X text 200 1062 band-rejection filter; +#X obj 30 1089 flt.resonbp~; +#X text 200 1089 Simple resonant bandpass filter; +#X obj 30 1116 flt.resonhp~; +#X text 200 1116 Simple resonant highpass filter; +#X obj 30 1143 flt.resonlp~; +#X text 200 1143 Simple resonant lowpass filter; #X obj 1 1 cnv 5 740 40 empty empty ceammc::flt 20 20 0 20 -104026 -4096 0; -#X obj 1 1089 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 1099 library: ceammc; \ No newline at end of file +#X obj 1 1170 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1180 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.fx-help.pd b/ceammc/ext/doc/ceammc.fx-help.pd index b6c23883da..4869ba42d7 100644 --- a/ceammc/ext/doc/ceammc.fx-help.pd +++ b/ceammc/ext/doc/ceammc.fx-help.pd @@ -6,65 +6,73 @@ #X text 200 116 bit downer and downsampler effect; #X obj 30 143 fx.chorus~; #X text 200 143 Chorus effect; -#X obj 30 170 fx.distortion1~; -#X text 200 170 distortion #1 from Guitarix effects set; -#X obj 30 197 fx.distortion2~; -#X text 200 197 distortion #2 from Guitarix effects set; -#X obj 30 224 fx.distortion3~; -#X text 200 224 simple distortion #3 from Guitarix effects set; -#X obj 30 251 fx.distortion~; -#X text 200 251 cubic nonlinearity distortion; -#X obj 30 278 fx.drive~; -#X text 200 278 Guitarix drive effect; -#X obj 30 305 fx.drone_box~; -#X text 200 305 mono sympathetic resonance generator; -#X obj 30 332 fx.echo2~; -#X text 200 332 stereo echo effect; -#X obj 30 359 fx.echo~; -#X text 200 359 simple echo effect; -#X obj 30 386 fx.flanger~; -#X text 200 386 mono flanging effect; -#X obj 30 413 fx.freeverb2~; -#X text 200 413 freeverb2 - stereo version of freeverb; -#X obj 30 440 fx.freeverb~; -#X text 200 440 freeverb - common used open-source reverb; -#X obj 30 467 fx.freqshift~; -#X text 200 467 frequency shifter or single-sideband ring modulation; -#X obj 30 494 fx.granulator~; -#X text 200 494 simple input stream granulator; -#X obj 30 521 fx.greyhole~; -#X text 200 521 A complex echo-like effect; -#X obj 30 548 fx.infrev~; -#X text 200 548 port of Infinity VST plugin from airwindows; -#X obj 30 575 fx.looper~; -#X text 200 575 One track looper; -#X obj 30 602 fx.pitchshift_s~; -#X text 200 602 signal version of fx.pitchshift~; -#X obj 30 629 fx.pitchshift~; -#X text 200 629 simple pitch shifter based on 2 delay lines; -#X obj 30 656 fx.rb_pitchshift~; -#X text 200 656 rubber band pitchshift; -#X obj 30 683 fx.recho~; -#X text 200 683 reversed echo effect; -#X obj 30 710 fx.room~; -#X text 200 710 Gardners room emulation algorithms; -#X obj 30 737 fx.sdelay~; -#X text 200 737 smooth delay with a feedback control; -#X obj 30 764 fx.secho~; -#X text 200 764 enchanced echo effect that does not click on delay +#X obj 30 170 fx.dattorro~; +#X text 200 170 dattorro reverb; +#X obj 30 197 fx.distortion1~; +#X text 200 197 distortion #1 from Guitarix effects set; +#X obj 30 224 fx.distortion2~; +#X text 200 224 distortion #2 from Guitarix effects set; +#X obj 30 251 fx.distortion3~; +#X text 200 251 simple distortion #3 from Guitarix effects set; +#X obj 30 278 fx.distortion~; +#X text 200 278 cubic nonlinearity distortion; +#X obj 30 305 fx.drive~; +#X text 200 305 Guitarix drive effect; +#X obj 30 332 fx.drone_box~; +#X text 200 332 mono sympathetic resonance generator; +#X obj 30 359 fx.echo2~; +#X text 200 359 stereo echo effect; +#X obj 30 386 fx.echo~; +#X text 200 386 simple echo effect; +#X obj 30 413 fx.flanger~; +#X text 200 413 mono flanging effect; +#X obj 30 440 fx.freeverb2~; +#X text 200 440 freeverb2 - stereo version of freeverb; +#X obj 30 467 fx.freeverb~; +#X text 200 467 freeverb - common used open-source reverb; +#X obj 30 494 fx.freqshift~; +#X text 200 494 frequency shifter or single-sideband ring modulation; +#X obj 30 521 fx.granulator~; +#X text 200 521 simple input stream granulator; +#X obj 30 548 fx.greyhole~; +#X text 200 548 A complex echo-like effect; +#X obj 30 575 fx.infrev~; +#X text 200 575 port of Infinity VST plugin from airwindows; +#X obj 30 602 fx.jcrev~; +#X text 200 602 Schroeder quad reverberator from 1972; +#X obj 30 629 fx.looper~; +#X text 200 629 One track looper; +#X obj 30 656 fx.pitchshift_s~; +#X text 200 656 signal version of fx.pitchshift~; +#X obj 30 683 fx.pitchshift~; +#X text 200 683 simple pitch shifter based on 2 delay lines; +#X obj 30 710 fx.rb_pitchshift~; +#X text 200 710 rubber band pitchshift; +#X obj 30 737 fx.recho~; +#X text 200 737 reversed echo effect; +#X obj 30 764 fx.room~; +#X text 200 764 Gardners room emulation algorithms; +#X obj 30 791 fx.satrev~; +#X text 200 791 Schroeder reverberator from 1971; +#X obj 30 818 fx.sdelay~; +#X text 200 818 smooth delay with a feedback control; +#X obj 30 845 fx.secho~; +#X text 200 845 enchanced echo effect that does not click on delay change; -#X obj 30 791 fx.shimmer~; -#X text 200 791 shimmer reverb effect effect; -#X obj 30 818 fx.tapiir~; -#X text 200 818 multi-tap delay; -#X obj 30 845 fx.vocoder~; -#X text 200 845 very simple vocoder where the spectrum of the modulation +#X obj 30 872 fx.shimmer~; +#X text 200 872 shimmer reverb effect effect; +#X obj 30 899 fx.stutter~; +#X text 200 899 stutter effect; +#X obj 30 926 fx.tapiir~; +#X text 200 926 multi-tap delay; +#X obj 30 953 fx.vocoder~; +#X text 200 953 very simple vocoder where the spectrum of the modulation signal is analyzed using a 32-band filter bank; -#X obj 30 885 fx.wahwah~; -#X text 200 885 digitized CryBaby wah pedal; -#X obj 30 912 fx.zita_rev1~; -#X text 200 912 Zita stereo reverb; +#X obj 30 993 fx.wahwah~; +#X text 200 993 digitized CryBaby wah pedal; +#X obj 30 1020 fx.zita_rev1~; +#X text 200 1020 Zita stereo reverb; #X obj 1 1 cnv 5 740 40 empty empty ceammc::fx 20 20 0 20 -104026 -4096 0; -#X obj 1 939 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 949 library: ceammc; \ No newline at end of file +#X obj 1 1047 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1057 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.hw-help.pd b/ceammc/ext/doc/ceammc.hw-help.pd index 6665dd5403..a42afd97ca 100644 --- a/ceammc/ext/doc/ceammc.hw-help.pd +++ b/ceammc/ext/doc/ceammc.hw-help.pd @@ -14,8 +14,10 @@ #X text 200 224 get/set display properties; #X obj 30 251 hw.kbd_light; #X text 200 251 Get/set keyboard light on some devices; -#X obj 30 278 hw.serial; -#X text 200 278 serial port device; +#X obj 30 278 hw.motu.avb; +#X text 200 278 controls Motu AVB devices over http requests; +#X obj 30 305 hw.serial; +#X text 200 305 serial port device; #X obj 1 1 cnv 5 740 40 empty empty ceammc::hw 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.lang-help.pd b/ceammc/ext/doc/ceammc.lang-help.pd index 39bf67a8db..7848f459fa 100644 --- a/ceammc/ext/doc/ceammc.lang-help.pd +++ b/ceammc/ext/doc/ceammc.lang-help.pd @@ -4,8 +4,10 @@ #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; #X obj 30 119 ui.link @title [lang.faust~] @url lang.faust~-help.pd; #X text 200 116 faust realtime compilation; -#X obj 30 144 ui.link @title [ui.faust~] @url ui.faust~-help.pd; -#X text 200 141 faust compiled ui object; +#X obj 30 141 lang.lua; +#X text 200 141 Lua JIT language bindings; +#X obj 30 171 ui.link @title [ui.faust~] @url ui.faust~-help.pd; +#X text 200 168 faust compiled ui object; #X obj 1 1 cnv 5 740 40 empty empty ceammc::lang 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.list-help.pd b/ceammc/ext/doc/ceammc.list-help.pd index 9e2cd1e1e9..92aaa2af7f 100644 --- a/ceammc/ext/doc/ceammc.list-help.pd +++ b/ceammc/ext/doc/ceammc.list-help.pd @@ -65,92 +65,98 @@ current one then stores this sum; #X text 200 830 output last list element; #X obj 30 857 list.length; #X text 200 857 output the number of atoms in the list; -#X obj 30 884 list.max; -#X text 200 884 output largest element in the list; -#X obj 30 911 list.mean; -#X text 200 911 calculates average of list of floats; -#X obj 30 938 list.min; -#X text 200 938 returns smallest element in the list; -#X obj 30 965 list.none_of; -#X text 200 965 checks if none of list atoms is accepted by predicate; -#X obj 30 992 list.normalize; -#X text 200 992 normalizes float list values to get their sum = 1.0; -#X obj 30 1019 list.pass_if; -#X text 200 1019 leave only elements accepted by predicate; -#X obj 30 1046 list.prepend; -#X text 200 1046 prepend atom or list before input list; -#X obj 30 1073 list.product; -#X text 200 1073 calculates product of floats in list; -#X obj 30 1100 list.range; -#X text 200 1100 output list smallest and largest value; -#X obj 30 1127 list.reduce; -#X text 200 1127 apply function of two arguments cumulatively to the +#X obj 30 884 list.map; +#X text 200 884 map list values by specified dictionary; +#X obj 30 911 list.max; +#X text 200 911 output largest element in the list; +#X obj 30 938 list.mean; +#X text 200 938 calculates average of list of floats; +#X obj 30 965 list.min; +#X text 200 965 returns smallest element in the list; +#X obj 30 992 list.none_of; +#X text 200 992 checks if none of list atoms is accepted by predicate; +#X obj 30 1019 list.normalize; +#X text 200 1019 normalizes float list values to get their sum = 1.0; +#X obj 30 1046 list.pass; +#X text 200 1046 leave in list only specified elements; +#X obj 30 1073 list.pass_if; +#X text 200 1073 leave only elements accepted by predicate; +#X obj 30 1100 list.prepend; +#X text 200 1100 prepend atom or list before input list; +#X obj 30 1127 list.product; +#X text 200 1127 calculates product of floats in list; +#X obj 30 1154 list.range; +#X text 200 1154 output list smallest and largest value; +#X obj 30 1181 list.reduce; +#X text 200 1181 apply function of two arguments cumulatively to the list; -#X obj 30 1154 list.remove; -#X text 200 1154 remove list element(s) at specified positions; -#X obj 30 1181 list.remove_if; -#X text 200 1181 remove elements by predicate; -#X obj 30 1208 list.repack; -#X text 200 1208 repack list to specified size; -#X obj 30 1235 list.repeat; -#X text 200 1235 output new list by repeating input list specified +#X obj 30 1208 list.reject; +#X text 200 1208 remove specified element from list; +#X obj 30 1235 list.remove; +#X text 200 1235 remove list element(s) at specified positions; +#X obj 30 1262 list.remove_if; +#X text 200 1262 remove elements by predicate; +#X obj 30 1289 list.repack; +#X text 200 1289 repack list to specified size; +#X obj 30 1316 list.repeat; +#X text 200 1316 output new list by repeating input list specified times; -#X obj 30 1262 list.resample; -#X text 200 1262 resample list with specified ratio; -#X obj 30 1289 list.resize; -#X text 200 1289 changes list size; -#X obj 30 1316 list.reverse; -#X text 200 1316 reverses the order of the elements in the list; -#X obj 30 1343 list.rldecode; -#X text 200 1343 Run-length list decoder (RLE); -#X obj 30 1370 list.rlencode; -#X text 200 1370 RLE (run-length encoding) for lists; -#X obj 30 1397 list.rotate; -#X text 200 1397 rotates list; -#X obj 30 1424 list.route; -#X text 200 1424 acts like [route] but for lists; -#X obj 30 1451 list.rundiff; -#X text 200 1451 running difference; -#X obj 30 1478 list.runsum; -#X text 200 1478 running sum; -#X obj 30 1505 list.search; -#X text 200 1505 search specified items in input list; -#X obj 30 1532 list.separate; -#X text 200 1532 sends list elements one by one separately; -#X obj 30 1559 list.seq; -#X text 200 1559 numeric sequence list generator; -#X obj 30 1586 list.set; -#X text 200 1586 set list value at specified position; -#X obj 30 1613 list.shift; -#X text 200 1613 shifts the contents of the list with linear interpolation; -#X obj 30 1640 list.shuffle; -#X text 200 1640 randomly rearranges elements in list; -#X obj 30 1667 list.slice; -#X text 200 1667 extract sublist; -#X obj 30 1694 list.sort; -#X text 200 1694 sorts list values by ascending order; -#X obj 30 1721 list.sort_with; -#X text 200 1721 sort list with user defined side-chain; -#X obj 30 1748 list.split; -#X text 200 1748 splits list into two parts \, the length of first +#X obj 30 1343 list.resample; +#X text 200 1343 resample list with specified ratio; +#X obj 30 1370 list.resize; +#X text 200 1370 changes list size; +#X obj 30 1397 list.reverse; +#X text 200 1397 reverses the order of the elements in the list; +#X obj 30 1424 list.rldecode; +#X text 200 1424 Run-length list decoder (RLE); +#X obj 30 1451 list.rlencode; +#X text 200 1451 RLE (run-length encoding) for lists; +#X obj 30 1478 list.rotate; +#X text 200 1478 rotates list; +#X obj 30 1505 list.route; +#X text 200 1505 acts like [route] but for lists; +#X obj 30 1532 list.rundiff; +#X text 200 1532 running difference; +#X obj 30 1559 list.runsum; +#X text 200 1559 running sum; +#X obj 30 1586 list.search; +#X text 200 1586 search specified items in input list; +#X obj 30 1613 list.separate; +#X text 200 1613 sends list elements one by one separately; +#X obj 30 1640 list.seq; +#X text 200 1640 numeric sequence list generator; +#X obj 30 1667 list.set; +#X text 200 1667 set list value at specified position; +#X obj 30 1694 list.shift; +#X text 200 1694 shifts the contents of the list with linear interpolation; +#X obj 30 1721 list.shuffle; +#X text 200 1721 randomly rearranges elements in list; +#X obj 30 1748 list.slice; +#X text 200 1748 extract sublist; +#X obj 30 1775 list.sort; +#X text 200 1775 sorts list values by ascending order; +#X obj 30 1802 list.sort_with; +#X text 200 1802 sort list with user defined side-chain; +#X obj 30 1829 list.split; +#X text 200 1829 splits list into two parts \, the length of first list is specified by the argument; -#X obj 30 1788 list.stretch; -#X text 200 1788 stretches list - changes its size with linear interpolation; -#X obj 30 1815 list.sum; -#X text 200 1815 calculates sum of floats in list; -#X obj 30 1842 list.unique; -#X text 200 1842 removes duplicates from input list; -#X obj 30 1869 list.unpack; -#X text 200 1869 unpack list elements to separate outlets; -#X obj 30 1896 list.unzip; -#X text 200 1896 splits list to N lists \, each to separate output; -#X obj 30 1923 list.walk; -#X text 200 1923 Walks thru the list; -#X obj 30 1950 list.zip; -#X text 200 1950 takes n lists from n inlets (specified by argument) +#X obj 30 1869 list.stretch; +#X text 200 1869 stretches list - changes its size with linear interpolation; +#X obj 30 1896 list.sum; +#X text 200 1896 calculates sum of floats in list; +#X obj 30 1923 list.unique; +#X text 200 1923 removes duplicates from input list; +#X obj 30 1950 list.unpack; +#X text 200 1950 unpack list elements to separate outlets; +#X obj 30 1977 list.unzip; +#X text 200 1977 splits list to N lists \, each to separate output; +#X obj 30 2004 list.walk; +#X text 200 2004 Walks thru the list; +#X obj 30 2031 list.zip; +#X text 200 2031 takes n lists from n inlets (specified by argument) and output their elements sequentially (list1-1 list2-1 list1-2 list2-2 etc.).; #X obj 1 1 cnv 5 740 40 empty empty ceammc::list 20 20 0 20 -104026 -4096 0; -#X obj 1 2005 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 2015 library: ceammc; \ No newline at end of file +#X obj 1 2086 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 2096 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.midi-help.pd b/ceammc/ext/doc/ceammc.midi-help.pd index 5a60e22cc7..c253ed28da 100644 --- a/ceammc/ext/doc/ceammc.midi-help.pd +++ b/ceammc/ext/doc/ceammc.midi-help.pd @@ -2,42 +2,48 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 midi.cc; -#X text 200 116 enhanced version of vanilla ctlin; -#X obj 30 143 midi.clock; -#X text 200 143 midi clock toolbox; -#X obj 30 170 midi.ctl2str; -#X text 200 170 convert Standard MIDI Controllers number to name; -#X obj 30 197 midi.event2ctl; -#X text 200 197 convert MidiEvent message to controller channel/value +#X obj 30 116 midi.arp; +#X text 200 116 MIDI arpeggiator; +#X obj 30 143 midi.cc; +#X text 200 143 enhanced version of vanilla ctlin; +#X obj 30 170 midi.clock; +#X text 200 170 midi clock toolbox; +#X obj 30 197 midi.ctl2str; +#X text 200 197 convert Standard MIDI Controllers number to name; +#X obj 30 224 midi.event2ctl; +#X text 200 224 convert MidiEvent message to controller channel/value pair; -#X obj 30 224 midi.event2note; -#X text 200 224 convert MidiEvent message to midi note/velocity pair; -#X obj 30 251 midi.event2prg; -#X text 200 251 convert MidiEvent message to midi program change value; -#X obj 30 278 midi.file; -#X text 200 278 standard midi file SMF reader and writer; -#X obj 30 305 midi.kbd; -#X text 200 305 computer keyboard midi; -#X obj 30 332 midi.key2str; -#X text 200 332 convert key number to SPN name according to tonality; -#X obj 30 359 midi.oct; -#X text 200 359 midi octave transpose; -#X obj 30 386 midi.prg2str; -#X text 200 386 convert GM Instrument number to name (string or symbol); -#X obj 30 413 midi.sustain; -#X text 200 413 sustain pedal emulation; -#X obj 30 440 midi.sysex; -#X text 200 440 sysex input messages as list; -#X obj 30 467 midi.track; -#X text 200 467 extract track from MidiFile; -#X obj 30 494 midi.tuning; -#X text 200 494 apply tuning to midi messages; -#X obj 30 521 midi.vramp; -#X text 200 521 apply crescendo or diminuendo for midi message flow; -#X obj 30 548 midi.vrand; -#X text 200 548 midi velocity randomizer; +#X obj 30 251 midi.event2note; +#X text 200 251 convert MidiEvent message to midi note/velocity pair; +#X obj 30 278 midi.event2prg; +#X text 200 278 convert MidiEvent message to midi program change value; +#X obj 30 305 midi.file; +#X text 200 305 standard midi file SMF reader and writer; +#X obj 30 332 midi.kbd; +#X text 200 332 computer keyboard midi; +#X obj 30 359 midi.key2str; +#X text 200 359 convert key number to SPN name according to tonality; +#X obj 30 386 midi.modus; +#X text 200 386 snap/skip midi pitches according modus; +#X obj 30 413 midi.oct; +#X text 200 413 midi octave transpose; +#X obj 30 440 midi.prg2str; +#X text 200 440 convert GM Instrument number to name (string or symbol); +#X obj 30 467 midi.split; +#X text 200 467 midi note splitter; +#X obj 30 494 midi.sustain; +#X text 200 494 sustain pedal emulation; +#X obj 30 521 midi.sysex; +#X text 200 521 sysex input messages as list; +#X obj 30 548 midi.track; +#X text 200 548 extract track from MidiFile; +#X obj 30 575 midi.tuning; +#X text 200 575 apply tuning to midi messages; +#X obj 30 602 midi.vramp; +#X text 200 602 apply crescendo or diminuendo for midi message flow; +#X obj 30 629 midi.vrand; +#X text 200 629 midi velocity randomizer; #X obj 1 1 cnv 5 740 40 empty empty ceammc::midi 20 20 0 20 -104026 -4096 0; -#X obj 1 575 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 585 library: ceammc; \ No newline at end of file +#X obj 1 656 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 666 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.misc-help.pd b/ceammc/ext/doc/ceammc.misc-help.pd index 58be31b15f..3f2821d98f 100644 --- a/ceammc/ext/doc/ceammc.misc-help.pd +++ b/ceammc/ext/doc/ceammc.misc-help.pd @@ -8,12 +8,16 @@ #X text 200 143 FluidSynth SoundFont 2 player; #X obj 30 170 modplug~; #X text 200 170 MOD file player (using libmodplug); -#X obj 30 197 sfizz~; -#X text 200 197 SFZ format sample player; -#X obj 30 224 speech.flite; -#X text 200 224 render speech to array; -#X obj 30 251 speech.flite~; +#X obj 30 197 risset.gliss; +#X text 200 197 Sheppard/Risset glissando calculator; +#X obj 30 224 sfizz~; +#X text 200 224 SFZ format sample player; +#X obj 30 251 speech.flite; #X text 200 251 render speech to array; +#X obj 30 278 speech.flite~; +#X text 200 278 render speech to array; +#X obj 30 305 speech.rhvoice~; +#X text 200 305 RHVoice text to speech synthesis; #X obj 1 1 cnv 5 740 40 empty empty ceammc::misc 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.net-help.pd b/ceammc/ext/doc/ceammc.net-help.pd index 6d87c70521..d12104046b 100644 --- a/ceammc/ext/doc/ceammc.net-help.pd +++ b/ceammc/ext/doc/ceammc.net-help.pd @@ -2,8 +2,18 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 net.host2ip; -#X text 200 116 returns IP address by DNS name; +#X obj 30 116 net.artnet.send; +#X text 200 116 ArtNet DMX message sender; +#X obj 30 143 net.host2ip; +#X text 200 143 returns IP address by DNS name; +#X obj 30 170 net.http.send; +#X text 200 170 HTTP request sender; +#X obj 30 197 net.osc.receive; +#X text 200 197 OSC message listener; +#X obj 30 224 net.osc.send; +#X text 200 224 OSC message sender; +#X obj 30 251 net.osc.server; +#X text 200 251 OSC server control; #X obj 1 1 cnv 5 740 40 empty empty ceammc::net 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.noise-help.pd b/ceammc/ext/doc/ceammc.noise-help.pd index 4148cf0e41..7890a79cce 100644 --- a/ceammc/ext/doc/ceammc.noise-help.pd +++ b/ceammc/ext/doc/ceammc.noise-help.pd @@ -5,48 +5,51 @@ #X obj 30 116 noise.baker; #X text 200 116 Part of a-chaos library; #X obj 30 143 noise.clifford; -#X text 200 143 Part of a-chaos library; +#X text 200 143 clifford attractor; #X obj 30 170 noise.collatz; -#X text 200 170 Part of a-chaos library; -#X obj 30 197 noise.crackle~; -#X text 200 197 sparse noise generator; -#X obj 30 224 noise.duffing; -#X text 200 224 Part of a-chaos library; -#X obj 30 251 noise.ginger; -#X text 200 251 Gingerbreadman map chaotic generator; -#X obj 30 278 noise.henon; -#X text 200 278 Part of a-chaos library; -#X obj 30 305 noise.henon_heilles; -#X text 200 305 Part of a-chaos library; -#X obj 30 332 noise.henon_phase; -#X text 200 332 Part of a-chaos library; -#X obj 30 359 noise.henonf; -#X text 200 359 Part of a-chaos library; -#X obj 30 386 noise.ikeda; -#X text 200 386 Part of a-chaos library; -#X obj 30 413 noise.lfreq0~; -#X text 200 413 sampled/held noise (piecewise constant); -#X obj 30 440 noise.lfreq~; -#X text 200 440 noise.lfreq0~ smoothed with no overshoot; -#X obj 30 467 noise.lorenz; -#X text 200 467 Part of a-chaos library; -#X obj 30 494 noise.lyapunov; -#X text 200 494 Part of a-chaos library; -#X obj 30 521 noise.navier_stokes; -#X text 200 521 Part of a-chaos library; -#X obj 30 548 noise.pink~; -#X text 200 548 Pink noise generator; -#X obj 30 575 noise.rossler; -#X text 200 575 Part of a-chaos library; -#X obj 30 602 noise.stein; -#X text 200 602 Part of a-chaos library; -#X obj 30 629 noise.torus; -#X text 200 629 Part of a-chaos library; -#X obj 30 656 noise.verhulst; -#X text 200 656 Part of a-chaos library; -#X obj 30 683 noise.white~; -#X text 200 683 White noise generator; +#X text 200 170 collatz conjecture output; +#X obj 30 197 noise.colored~; +#X text 200 197 colored noise generator with an arbitrary spectral +roll; +#X obj 30 224 noise.crackle~; +#X text 200 224 sparse noise generator; +#X obj 30 251 noise.duffing; +#X text 200 251 duffing attractor; +#X obj 30 278 noise.ginger; +#X text 200 278 Gingerbreadman map chaotic generator; +#X obj 30 305 noise.henon; +#X text 200 305 henon attractor; +#X obj 30 332 noise.henon_heilles; +#X text 200 332 Hénon–Heiles_system; +#X obj 30 359 noise.henon_phase; +#X text 200 359 henon phase Ddagrams; +#X obj 30 386 noise.henonf; +#X text 200 386 Henon phase; +#X obj 30 413 noise.ikeda; +#X text 200 413 Ikeda attractor; +#X obj 30 440 noise.lfreq0~; +#X text 200 440 sampled/held noise (piecewise constant); +#X obj 30 467 noise.lfreq~; +#X text 200 467 noise.lfreq0~ smoothed with no overshoot; +#X obj 30 494 noise.lorenz; +#X text 200 494 Lorenz chaos; +#X obj 30 521 noise.lyapunov; +#X text 200 521 lyapunov random attractor; +#X obj 30 548 noise.navier_stokes; +#X text 200 548 navier-stokes diff equations; +#X obj 30 575 noise.pink~; +#X text 200 575 Pink noise generator; +#X obj 30 602 noise.rossler; +#X text 200 602 Rössler attractor; +#X obj 30 629 noise.stein; +#X text 200 629 Stein distribution; +#X obj 30 656 noise.torus; +#X text 200 656 torus attractor; +#X obj 30 683 noise.verhulst; +#X text 200 683 verhulst distribution; +#X obj 30 710 noise.white~; +#X text 200 710 White noise generator; #X obj 1 1 cnv 5 740 40 empty empty ceammc::noise 20 20 0 20 -104026 -4096 0; -#X obj 1 710 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 720 library: ceammc; \ No newline at end of file +#X obj 1 737 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 747 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc.path-help.pd b/ceammc/ext/doc/ceammc.path-help.pd index ff34888d39..877847423f 100644 --- a/ceammc/ext/doc/ceammc.path-help.pd +++ b/ceammc/ext/doc/ceammc.path-help.pd @@ -10,16 +10,22 @@ #X text 200 170 outputs directory portion of pathname; #X obj 30 197 path.exists; #X text 200 197 checks if given path exists; -#X obj 30 224 path.is_dir; -#X text 200 224 check if path is directory; -#X obj 30 251 path.lsdir; -#X text 200 251 list directory contents; -#X obj 30 278 path.normalize; -#X text 200 278 normalize file paths; -#X obj 30 305 path.search; -#X text 200 305 file search; -#X obj 30 332 path.split; -#X text 200 332 file path split; +#X obj 30 224 path.file; +#X text 200 224 file input/output; +#X obj 30 251 path.is_dir; +#X text 200 251 check if path is directory; +#X obj 30 278 path.lsdir; +#X text 200 278 list directory contents; +#X obj 30 305 path.monitor; +#X text 200 305 filesystem event monitor; +#X obj 30 332 path.normalize; +#X text 200 332 normalize file paths; +#X obj 30 359 path.pattern; +#X text 200 359 pattern filename generator; +#X obj 30 386 path.search; +#X text 200 386 file search; +#X obj 30 413 path.split; +#X text 200 413 file path split; #X obj 1 1 cnv 5 740 40 empty empty ceammc::path 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.predicates-help.pd b/ceammc/ext/doc/ceammc.predicates-help.pd index 4d4bfb0440..a3a95b0677 100644 --- a/ceammc/ext/doc/ceammc.predicates-help.pd +++ b/ceammc/ext/doc/ceammc.predicates-help.pd @@ -22,8 +22,10 @@ #X text 200 332 checks if input number is odd; #X obj 30 359 is_pointer; #X text 200 359 checks if input data has *pointer* type; -#X obj 30 386 is_symbol; -#X text 200 386 checks if input data has *symbol* type; +#X obj 30 386 is_prop; +#X text 200 386 checks if input message is *property* message; +#X obj 30 413 is_symbol; +#X text 200 413 checks if input data has *symbol* type; #X obj 1 1 cnv 5 740 40 empty empty ceammc::predicates 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.proto-help.pd b/ceammc/ext/doc/ceammc.proto-help.pd index 1948ae3f11..2803787070 100644 --- a/ceammc/ext/doc/ceammc.proto-help.pd +++ b/ceammc/ext/doc/ceammc.proto-help.pd @@ -2,20 +2,30 @@ #X obj 20 53 ui.link @title index @url ../index-help.pd; #X text 62 50 ::; #X obj 79 53 ui.link @title ceammc @url ceammc-help.pd; -#X obj 30 116 proto.firmata; -#X text 200 116 Firmata Arduino protocol support; -#X obj 30 143 proto.midi; -#X text 200 143 raw midi encoder/parser; -#X obj 30 170 proto.midi.cc; -#X text 200 170 raw midi CC encoder/parser; -#X obj 30 197 proto.midi.sysex; -#X text 200 197 raw midi SYSex encoder/parser; -#X obj 30 224 proto.mpv; -#X text 200 224 mpv video player control; -#X obj 30 251 proto.sp.alpaca; -#X text 200 251 protocol parser for Arduino-based CEAMMC footswitch; -#X obj 30 278 proto.xtouch_ext; -#X text 200 278 Behringer XTouch Extender XMidi protocol; +#X obj 30 116 proto.feelworld; +#X text 200 116 protocol for FeelWorld LivePro L1 HDMI mixer; +#X obj 30 143 proto.firmata; +#X text 200 143 Firmata Arduino protocol support; +#X obj 30 170 proto.inscore; +#X text 200 170 INScore message creator; +#X obj 30 197 proto.midi; +#X text 200 197 raw midi encoder/parser; +#X obj 30 224 proto.midi.cc; +#X text 200 224 raw midi CC encoder/parser; +#X obj 30 251 proto.midi.sysex; +#X text 200 251 raw midi SYSex encoder/parser; +#X obj 30 278 proto.moppy; +#X text 200 278 protocol for Musical flOPPY controller; +#X obj 30 305 proto.mpv; +#X text 200 305 mpv video player control; +#X obj 30 332 proto.sp.alpaca; +#X text 200 332 protocol parser for Arduino-based CEAMMC footswitch; +#X obj 30 359 proto.vlc; +#X text 200 359 VLC video player control over HTTP; +#X obj 30 386 proto.whammy; +#X text 200 386 Control for Digitech Whammy pedal; +#X obj 30 413 proto.xtouch_ext; +#X text 200 413 Behringer XTouch Extender XMidi protocol; #X obj 1 1 cnv 5 740 40 empty empty ceammc::proto 20 20 0 20 -104026 -4096 0; #X obj 1 513 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; diff --git a/ceammc/ext/doc/ceammc.search-help.pd b/ceammc/ext/doc/ceammc.search-help.pd index 971dbfb830..5486d92ef2 100644 --- a/ceammc/ext/doc/ceammc.search-help.pd +++ b/ceammc/ext/doc/ceammc.search-help.pd @@ -46,13 +46,13 @@ value: 10\. Range: 1\...50\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 596 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 599 library: ceammc v0.9.4; +#X text 10 599 library: ceammc v0.9.6; #N canvas 10 618 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ceammc.search; #X text 10 76 category:; @@ -60,7 +60,7 @@ value: 10\. Range: 1\...50\.; #X text 10 98 since:; #X text 120 98 0.9.1; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/ceammc.search.pddoc b/ceammc/ext/doc/ceammc.search.pddoc index 1e2ff5ff40..34dd0cb224 100644 --- a/ceammc/ext/doc/ceammc.search.pddoc +++ b/ceammc/ext/doc/ceammc.search.pddoc @@ -4,7 +4,7 @@ ceammc.search - Serge Poltavski + Serge Poltavsky ceammc library search object GPL3 or later diff --git a/ceammc/ext/doc/ceammc.string-help.pd b/ceammc/ext/doc/ceammc.string-help.pd index badf81f537..0c5491905c 100644 --- a/ceammc/ext/doc/ceammc.string-help.pd +++ b/ceammc/ext/doc/ceammc.string-help.pd @@ -13,7 +13,7 @@ #X obj 30 224 string.format; #X text 200 224 formats string like printf.; #X obj 30 251 string.join; -#X text 200 251 joins (concatenates) strings with separator; +#X text 200 251 joins (concatenates) list to string with separator; #X obj 30 278 string.length; #X text 200 278 number of characters in string (unicode supported); #X obj 30 305 string.match; diff --git a/ceammc/ext/doc/ceammc.synth-help.pd b/ceammc/ext/doc/ceammc.synth-help.pd index dd4ab83912..44b8788738 100644 --- a/ceammc/ext/doc/ceammc.synth-help.pd +++ b/ceammc/ext/doc/ceammc.synth-help.pd @@ -8,59 +8,69 @@ #X text 200 143 bird singing generator; #X obj 30 170 synth.church_bell~; #X text 200 170 generic church bell modal model; -#X obj 30 197 synth.dubdub~; -#X text 200 197 simple synth based on a sawtooth wave filtered by a +#X obj 30 197 synth.clap~; +#X text 200 197 clap synth from faust librariest; +#X obj 30 224 synth.dubdub~; +#X text 200 224 simple synth based on a sawtooth wave filtered by a resonant lowpass; -#X obj 30 237 synth.dx7~; -#X text 200 237 FAUST dx7 implementation; -#X obj 30 264 synth.eguitar~; -#X text 200 264 simple electric guitar model with steel strings; -#X obj 30 291 synth.english_bell~; -#X text 200 291 english church bell modal model; -#X obj 30 318 synth.fgrain~; -#X text 200 318 file granulator from STK; -#X obj 30 345 synth.french_bell~; -#X text 200 345 french church bell modal model; -#X obj 30 372 synth.german_bell~; -#X text 200 372 german church bell modal model; -#X obj 30 399 synth.glass_harm~; -#X text 200 399 nonlinear banded waveguide modeled Glass Harmonica; -#X obj 30 426 synth.glitch~; -#X text 200 426 Glitch synthesizer by naivesound; -#X obj 30 453 synth.harpsichord~; -#X text 200 453 waveguide commuted harpsichord; -#X obj 30 480 synth.kick~; -#X text 200 480 low-kick synth from Guitarix project; -#X obj 30 507 synth.ks~; -#X text 200 507 Karplus-Strong string; -#X obj 30 534 synth.marimba~; -#X text 200 534 simple marimba physical model implementing a single +#X obj 30 264 synth.dx7~; +#X text 200 264 FAUST dx7 implementation; +#X obj 30 291 synth.eguitar~; +#X text 200 291 simple electric guitar model with steel strings; +#X obj 30 318 synth.english_bell~; +#X text 200 318 english church bell modal model; +#X obj 30 345 synth.fgrain~; +#X text 200 345 file granulator from STK; +#X obj 30 372 synth.french_bell~; +#X text 200 372 french church bell modal model; +#X obj 30 399 synth.german_bell~; +#X text 200 399 german church bell modal model; +#X obj 30 426 synth.glass_harm~; +#X text 200 426 nonlinear banded waveguide modeled Glass Harmonica; +#X obj 30 453 synth.glitch~; +#X text 200 453 Glitch synthesizer by naivesound; +#X obj 30 480 synth.harpsichord~; +#X text 200 480 waveguide commuted harpsichord; +#X obj 30 507 synth.hat~; +#X text 200 507 hi-hat synth from faust librariest; +#X obj 30 534 synth.kick2~; +#X text 200 534 low-kick synth from faust librariest; +#X obj 30 561 synth.kick~; +#X text 200 561 low-kick synth from Guitarix project; +#X obj 30 588 synth.ks~; +#X text 200 588 Karplus-Strong string; +#X obj 30 615 synth.marimba~; +#X text 200 615 simple marimba physical model implementing a single tone bar connected to tube; -#X obj 30 574 synth.piano~; -#X text 200 574 waveguide commuted piano; -#X obj 30 601 synth.rhodey~; -#X text 200 601 STK Fender Rhodes electric piano FM synthesis instrument; -#X obj 30 628 synth.risset_arp~; -#X text 200 628 Jean Claude Risset's harmonic arpeggio effect; -#X obj 30 655 synth.risset_bell~; -#X text 200 655 Jean Claude Risset's bell synth; -#X obj 30 682 synth.risset_tone~; -#X text 200 682 Jean Claude Risset's endless glissando; -#X obj 30 709 synth.russian_bell~; -#X text 200 709 russian church bell modal model; -#X obj 30 736 synth.shakers~; -#X text 200 736 various percussion sounds from STK library; -#X obj 30 763 synth.sitar~; -#X text 200 763 STK sitar; -#X obj 30 790 synth.snare~; -#X text 200 790 Snare drum synth from Guitarix project; -#X obj 30 817 synth.standard_bell~; -#X text 200 817 german church bell modal model; -#X obj 30 844 synth.tube_bell~; -#X text 200 844 STK tubular bell (orchestral chime) FM synthesis instrument; -#X obj 30 871 synth.wurley~; -#X text 200 871 Wurlitzer electric piano FM synthesis instrument; +#X obj 30 655 synth.piano~; +#X text 200 655 waveguide commuted piano; +#X obj 30 682 synth.rhodey~; +#X text 200 682 STK Fender Rhodes electric piano FM synthesis instrument; +#X obj 30 709 synth.risset_arp~; +#X text 200 709 Jean Claude Risset's harmonic arpeggio effect; +#X obj 30 736 synth.risset_bell~; +#X text 200 736 Jean Claude Risset's bell synth; +#X obj 30 763 synth.risset_tone~; +#X text 200 763 Jean Claude Risset's endless glissando; +#X obj 30 790 synth.russian_bell~; +#X text 200 790 russian church bell modal model; +#X obj 30 817 synth.shakers~; +#X text 200 817 various percussion sounds from STK library; +#X obj 30 844 synth.sitar~; +#X text 200 844 STK sitar; +#X obj 30 871 synth.snare~; +#X text 200 871 Snare drum synth from Guitarix project; +#X obj 30 898 synth.standard_bell~; +#X text 200 898 german church bell modal model; +#X obj 30 925 synth.tube_bell~; +#X text 200 925 STK tubular bell (orchestral chime) FM synthesis instrument; +#X obj 30 952 synth.voice_fofc~; +#X text 200 952 Simple formant/vocal synthesizer with FOF-cycle filterbank.; +#X obj 30 979 synth.voice_fofs~; +#X text 200 979 Simple formant/vocal synthesizer with FOF-smooth filterbank.; +#X obj 30 1006 synth.wurley~; +#X text 200 1006 Wurlitzer electric piano FM synthesis instrument; #X obj 1 1 cnv 5 740 40 empty empty ceammc::synth 20 20 0 20 -104026 -4096 0; -#X obj 1 898 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 20 908 library: ceammc; \ No newline at end of file +#X obj 1 1033 cnv 5 740 40 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 20 1043 library: ceammc; \ No newline at end of file diff --git a/ceammc/ext/doc/ceammc_deken_objlist.txt b/ceammc/ext/doc/ceammc_deken_objlist.txt index 11980c8594..1fbf6ee9d2 100644 --- a/ceammc/ext/doc/ceammc_deken_objlist.txt +++ b/ceammc/ext/doc/ceammc_deken_objlist.txt @@ -5,8 +5,11 @@ ceammc/helmholtz~ pitch tracker helmholtz~ pitch tracker an.rms~ root mean square with moving-average algorithm. an.tempo~ tempo detector +an.zero~ zero crossing count/rate/freq calculator array.bpm BPM calculator +array.circular array read/write as circular buffer array.circular~ circular buffer for arrays +array.convolve array FFT convolution array.copy copy samples from one array to another array.do iterate and modify array content via side-chain array.each process each array elements via side-chain @@ -82,6 +85,8 @@ xfade2~ multi stereo-signal crossfade ceammc/xfade2~ multi stereo-signal crossfade xfade~ multi signal crossfade ceammc/xfade~ multi signal crossfade +z~ sample delay +ceammc/z~ sample delay chaos.gbman0 Gingerbreadman map chaotic generator chaos.gbman0~ Gingerbreadman map chaotic generator chaos.jong Peter de Jong attractor @@ -114,9 +119,9 @@ bits->note convert list of bits to note events conv.bits2pos convert list of bits to list of bit position ceammc/bits->pos convert list of bits to list of bit position bits->pos convert list of bits to list of bit position -conv.bpm2hz converts BPM to frequency in herz -ceammc/bpm->hz converts BPM to frequency in herz -bpm->hz converts BPM to frequency in herz +conv.bpm2hz converts BPM to frequency in hertz +ceammc/bpm->hz converts BPM to frequency in hertz +bpm->hz converts BPM to frequency in hertz conv.bpm2ms convert frequency in BPM to period in milliseconds ceammc/bpm->ms convert frequency in BPM to period in milliseconds bpm->ms convert frequency in BPM to period in milliseconds @@ -182,6 +187,9 @@ ms->samp convert time in milliseconds to number of samples according to current conv.ms2samp~ convert time in milliseconds to number of samples according to current samplerate ceammc/ms->samp~ convert time in milliseconds to number of samples according to current samplerate ms->samp~ convert time in milliseconds to number of samples according to current samplerate +conv.note2guido convert MIDI note to Guido notation +ceammc/note->guido convert MIDI note to Guido notation +note->guido convert MIDI note to Guido notation conv.phase2rad convert phase value [0-1] to radians [0-2π] ceammc/phase->rad convert phase value [0-1] to radians [0-2π] phase->rad convert phase value [0-1] to radians [0-2π] @@ -387,6 +395,8 @@ flow.>> dataflow ring buffer flow.route advanced message router flow.select vanilla flow on steroids flow.sel vanilla flow on steroids +flow.seqdelay sequential delay/router for input flow +flow.seqdel sequential delay/router for input flow flow.space space in time messages received at the same logical time flow.speedlim control stream speed limiter ceammc/speedlim control stream speed limiter @@ -406,8 +416,19 @@ ceammc/~-> separate audio and control streams ~-> separate audio and control streams replace Replace atoms in data stream ceammc/replace Replace atoms in data stream +route.any separate any messages from bangs, floats, symbols and lists +route.bang separate bang messages from other types +route.b separate bang messages from other types route.float separate float messages from other types route.f separate float messages from other types +route.list separate list messages from other types +route.l separate list messages from other types +route.prop separate property messages from other types +route.random routes input flow to random outlet +route.r routes input flow to random outlet +route.symbol separate symbol messages from other types +route.s separate symbol messages from other types +flt.a-weight convert frequency to A-weight value flt.biquad~ second order IIR filter. flt.bpf12~ Two pole band-pass butterworth filter flt.bpf24~ Four pole band-pass butterworth filter @@ -453,8 +474,11 @@ flt.median Median control flow filter flt.moog_vcf~ Moog Voltage Controlled Filter flt.notch~ band-rejection filter flt.resonbp~ Simple resonant bandpass filter +flt.resonhp~ Simple resonant highpass filter +flt.resonlp~ Simple resonant lowpass filter fx.bitdown~ bit downer and downsampler effect fx.chorus~ Chorus effect +fx.dattorro~ dattorro reverb fx.distortion1~ distortion #1 from Guitarix effects set fx.distortion2~ distortion #2 from Guitarix effects set fx.distortion3~ simple distortion #3 from Guitarix effects set @@ -470,15 +494,18 @@ fx.freqshift~ frequency shifter or single-sideband ring modulation fx.granulator~ simple input stream granulator fx.greyhole~ A complex echo-like effect fx.infrev~ port of Infinity VST plugin from airwindows +fx.jcrev~ Schroeder quad reverberator from 1972 fx.looper~ One track looper fx.pitchshift_s~ signal version of fx.pitchshift~ fx.pitchshift~ simple pitch shifter based on 2 delay lines fx.rb_pitchshift~ rubber band pitchshift fx.recho~ reversed echo effect fx.room~ Gardners room emulation algorithms +fx.satrev~ Schroeder reverberator from 1971 fx.sdelay~ smooth delay with a feedback control fx.secho~ enchanced echo effect that does not click on delay change fx.shimmer~ shimmer reverb effect effect +fx.stutter~ stutter effect fx.tapiir~ multi-tap delay fx.vocoder~ very simple vocoder where the spectrum of the modulation signal is analyzed using a 32-band filter bank fx.wahwah~ digitized CryBaby wah pedal @@ -496,8 +523,10 @@ hw.arduino Arduino device hw.cpu_temp get CPU temperature hw.display get/set display properties hw.kbd_light Get/set keyboard light on some devices +hw.motu.avb controls Motu AVB devices over http requests hw.serial serial port device lang.faust~ faust realtime compilation +lang.lua Lua JIT language bindings ui.faust~ faust compiled ui object lfo.+pulse~ Unit-amplitude nonnegative low frequency pulse train lfo.+saw~ Positive unit-amplitude low frequency saw wave @@ -538,12 +567,14 @@ list.integrator returns the sum of the previously stored list and the current on list.last output last list element list.length output the number of atoms in the list list.size output the number of atoms in the list +list.map map list values by specified dictionary list.max output largest element in the list list.mean calculates average of list of floats list.average calculates average of list of floats list.min returns smallest element in the list list.none_of checks if none of list atoms is accepted by predicate list.normalize normalizes float list values to get their sum = 1.0 +list.pass leave in list only specified elements list.pass_if leave only elements accepted by predicate list.filter leave only elements accepted by predicate list.prepend prepend atom or list before input list @@ -552,6 +583,7 @@ list.range output list smallest and largest value list.minmax output list smallest and largest value list.reduce apply function of two arguments cumulatively to the list list.foldl apply function of two arguments cumulatively to the list +list.reject remove specified element from list list.remove remove list element(s) at specified positions list.remove_if remove elements by predicate list.repack repack list to specified size @@ -693,8 +725,11 @@ math.reciprocal~ calculate reciprocal number for signals ceammc/1/x~ calculate reciprocal number for signals 1/x~ calculate reciprocal number for signals math.round round to integral value, regardless of rounding direction +round round to integral value, regardless of rounding direction +ceammc/round round to integral value, regardless of rounding direction math.round~ signal round round~ signal round +ceammc/round~ signal round math.sign sign function math.sin sine function math.sinh hyperbolic sine function @@ -780,6 +815,7 @@ math.tanh~ hyperbolic tangent for signals math.tan~ tangent function math.trunc truncate to integer value math.trunc~ truncate to integer value +midi.arp MIDI arpeggiator midi.cc enhanced version of vanilla ctlin midi.clock midi clock toolbox midi.ctl2str convert Standard MIDI Controllers number to name @@ -794,9 +830,11 @@ midi.file standard midi file SMF reader and writer midi.kbd computer keyboard midi midi.key2str convert key number to SPN name according to tonality midi.key->str convert key number to SPN name according to tonality +midi.modus snap/skip midi pitches according modus midi.oct midi octave transpose midi.prg2str convert GM Instrument number to name (string or symbol) midi.prg->str convert GM Instrument number to name (string or symbol) +midi.split midi note splitter midi.sustain sustain pedal emulation midi.sysex sysex input messages as list midi.track extract track from MidiFile @@ -809,10 +847,14 @@ fluid~ FluidSynth SoundFont 2 player ceammc/fluid~ FluidSynth SoundFont 2 player modplug~ MOD file player (using libmodplug) ceammc/modplug~ MOD file player (using libmodplug) +risset.gliss Sheppard/Risset glissando calculator sfizz~ SFZ format sample player ceammc/sfizz~ SFZ format sample player speech.flite render speech to array speech.flite~ render speech to array +speech.rhvoice~ RHVoice text to speech synthesis +ceammc/rhvoice~ RHVoice text to speech synthesis +rhvoice~ RHVoice text to speech synthesis loadexpr send message when patch loads ceammc/loadexpr send message when patch loads msg message constructor @@ -826,29 +868,40 @@ msg.onload send message when patch loads ceammc/loadmsg send message when patch loads loadmsg send message when patch loads msg.sched message scheduler +net.artnet.send ArtNet DMX message sender +artnet.send ArtNet DMX message sender net.host2ip returns IP address by DNS name net.host->ip returns IP address by DNS name +net.http.send HTTP request sender +http.send HTTP request sender +net.osc.receive OSC message listener +net.osc.r OSC message listener +net.osc.send OSC message sender +net.osc.s OSC message sender +net.osc.server OSC server control +net.osc OSC server control noise.baker Part of a-chaos library -noise.clifford Part of a-chaos library -noise.collatz Part of a-chaos library +noise.clifford clifford attractor +noise.collatz collatz conjecture output +noise.colored~ colored noise generator with an arbitrary spectral roll noise.crackle~ sparse noise generator -noise.duffing Part of a-chaos library +noise.duffing duffing attractor noise.ginger Gingerbreadman map chaotic generator -noise.henon Part of a-chaos library -noise.henon_heilles Part of a-chaos library -noise.henon_phase Part of a-chaos library -noise.henonf Part of a-chaos library -noise.ikeda Part of a-chaos library +noise.henon henon attractor +noise.henon_heilles Hénon–Heiles_system +noise.henon_phase henon phase Ddagrams +noise.henonf Henon phase +noise.ikeda Ikeda attractor noise.lfreq0~ sampled/held noise (piecewise constant) noise.lfreq~ noise.lfreq0~ smoothed with no overshoot -noise.lorenz Part of a-chaos library -noise.lyapunov Part of a-chaos library -noise.navier_stokes Part of a-chaos library +noise.lorenz Lorenz chaos +noise.lyapunov lyapunov random attractor +noise.navier_stokes navier-stokes diff equations noise.pink~ Pink noise generator -noise.rossler Part of a-chaos library -noise.stein Part of a-chaos library -noise.torus Part of a-chaos library -noise.verhulst Part of a-chaos library +noise.rossler Rössler attractor +noise.stein Stein distribution +noise.torus torus attractor +noise.verhulst verhulst distribution noise.white~ White noise generator osc.blit~ Bandlimited impulse train oscillator osc.impulse~ Bandlimited impulse train generator @@ -871,11 +924,14 @@ file.size output file size path.basename outputs filename portion of pathname path.dirname outputs directory portion of pathname path.exists checks if given path exists +path.file file input/output path.is_dir check if path is directory path.lsdir list directory contents path.ls list directory contents +path.monitor filesystem event monitor path.normalize normalize file paths path.norm normalize file paths +path.pattern pattern filename generator path.search file search path.split file path split is_any checks if input data has *any* type @@ -891,6 +947,7 @@ is_float checks if input data has *float* type is_list checks if input data has *list* type is_odd checks if input number is odd is_pointer checks if input data has *pointer* type +is_prop checks if input message is *property* message is_symbol checks if input data has *symbol* type preset.float load/store float preset preset.f load/store float preset @@ -908,6 +965,8 @@ p.get get property from connected object/subpatch/abstraction prop.get~ Property extractor from sound stream prop~> Property extractor from sound stream @~> Property extractor from sound stream +ceammc/prop~> Property extractor from sound stream +ceammc/@~> Property extractor from sound stream prop.join join property to main data flow prop<- join property to main data flow prop.random property randomizer @@ -916,12 +975,19 @@ p.set set property for connected object/subpatch/abstraction prop.split separate properties from dataflow prop-> separate properties from dataflow @-> separate properties from dataflow +ceammc/prop-> separate properties from dataflow +ceammc/@-> separate properties from dataflow +proto.feelworld protocol for FeelWorld LivePro L1 HDMI mixer proto.firmata Firmata Arduino protocol support +proto.inscore INScore message creator proto.midi raw midi encoder/parser proto.midi.cc raw midi CC encoder/parser proto.midi.sysex raw midi SYSex encoder/parser +proto.moppy protocol for Musical flOPPY controller proto.mpv mpv video player control proto.sp.alpaca protocol parser for Arduino-based CEAMMC footswitch +proto.vlc VLC video player control over HTTP +proto.whammy Control for Digitech Whammy pedal proto.xtouch_ext Behringer XTouch Extender XMidi protocol random.atom weighted atom generation from specified list random.a weighted atom generation from specified list @@ -1002,8 +1068,8 @@ string.equal check strings or symbols for equality str.equal check strings or symbols for equality string.format formats string like printf. str.format formats string like printf. -string.join joins (concatenates) strings with separator -str.join joins (concatenates) strings with separator +string.join joins (concatenates) list to string with separator +str.join joins (concatenates) list to string with separator string.length number of characters in string (unicode supported) str.length number of characters in string (unicode supported) string.match check if string match regular expression @@ -1041,6 +1107,7 @@ sym->ilist converts symbol to list of character codes synth.bee3~ Hammond-oid organ FM synthesis instrument synth.birds~ bird singing generator synth.church_bell~ generic church bell modal model +synth.clap~ clap synth from faust librariest synth.dubdub~ simple synth based on a sawtooth wave filtered by a resonant lowpass synth.dx7~ FAUST dx7 implementation synth.eguitar~ simple electric guitar model with steel strings @@ -1051,6 +1118,8 @@ synth.german_bell~ german church bell modal model synth.glass_harm~ nonlinear banded waveguide modeled Glass Harmonica synth.glitch~ Glitch synthesizer by naivesound synth.harpsichord~ waveguide commuted harpsichord +synth.hat~ hi-hat synth from faust librariest +synth.kick2~ low-kick synth from faust librariest synth.kick~ low-kick synth from Guitarix project synth.ks~ Karplus-Strong string synth.marimba~ simple marimba physical model implementing a single tone bar connected to tube @@ -1065,6 +1134,8 @@ synth.sitar~ STK sitar synth.snare~ Snare drum synth from Guitarix project synth.standard_bell~ german church bell modal model synth.tube_bell~ STK tubular bell (orchestral chime) FM synthesis instrument +synth.voice_fofc~ Simple formant/vocal synthesizer with FOF-cycle filterbank. +synth.voice_fofs~ Simple formant/vocal synthesizer with FOF-smooth filterbank. synth.wurley~ Wurlitzer electric piano FM synthesis instrument system.colorpanel System color panel dialog popup system.cursor Output cursor motion, mousewheel and button clicks @@ -1144,6 +1215,7 @@ ui.slider counterpart of the vanilla slider ui.hsl counterpart of the vanilla slider ui.vsl counterpart of the vanilla slider ui.slider2d 2D slider widget +ui.s2d 2D slider widget ui.sliders Multiple slider widget ui.vsliders Multiple slider widget ui.spectroscope~ Spectroscope GUI object diff --git a/ceammc/ext/doc/ceammc_lib.xml b/ceammc/ext/doc/ceammc_lib.xml index fc49a75ba5..ed661727e4 100644 --- a/ceammc/ext/doc/ceammc_lib.xml +++ b/ceammc/ext/doc/ceammc_lib.xml @@ -16,14 +16,23 @@ + + + + + + + + + @@ -161,6 +170,9 @@ + + + @@ -207,7 +219,7 @@ - + @@ -267,6 +279,9 @@ + + + @@ -578,6 +593,9 @@ + + + @@ -602,11 +620,32 @@ + + + + + + + + + + + + + + + + + + + + + @@ -712,6 +751,12 @@ + + + + + + @@ -720,6 +765,9 @@ + + + @@ -765,6 +813,9 @@ + + + @@ -783,6 +834,9 @@ + + + @@ -792,6 +846,9 @@ + + + @@ -844,6 +901,9 @@ + + + @@ -852,6 +912,9 @@ + + + @@ -970,6 +1033,9 @@ + + + @@ -985,6 +1051,9 @@ + + + @@ -1000,6 +1069,9 @@ + + + @@ -1415,6 +1487,9 @@ + + + @@ -1442,12 +1517,18 @@ + + + + + + @@ -1477,6 +1558,9 @@ + + + @@ -1486,6 +1570,9 @@ + + + @@ -1505,42 +1592,60 @@ + + + + + + + + + + + + + + + - + - + + + + - + - + - + - + - + - + @@ -1549,28 +1654,28 @@ - + - + - + - + - + - + - + @@ -1645,15 +1750,24 @@ + + + + + + + + + @@ -1692,6 +1806,9 @@ + + + @@ -1740,9 +1857,15 @@ + + + + + + @@ -1752,12 +1875,21 @@ + + + + + + + + + @@ -1917,7 +2049,7 @@ - + @@ -1972,6 +2104,9 @@ + + + @@ -2002,6 +2137,12 @@ + + + + + + @@ -2044,6 +2185,12 @@ + + + + + + @@ -2208,7 +2355,7 @@ - 0.9.4 + 0.9.6 Albert Graef Alex Nadzharov @@ -2226,7 +2373,6 @@ Pierre Guillot Richard Dudas Romain Michon - Serge Poltavski Serge Poltavsky Serge Potlavsky Thomas Le Meur diff --git a/ceammc/ext/doc/chaos.gbman0-help.pd b/ceammc/ext/doc/chaos.gbman0-help.pd index 0333225254..2ff3ce2282 100644 --- a/ceammc/ext/doc/chaos.gbman0-help.pd +++ b/ceammc/ext/doc/chaos.gbman0-help.pd @@ -76,7 +76,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; #X obj 1 890 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 893 library: ceammc v0.9.4; +#X text 10 893 library: ceammc v0.9.6; #X text 579 905 see also:; #X obj 653 905 chaos.gbman0; #N canvas 10 912 400 290 info 0; @@ -84,7 +84,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.gbman0; #X text 10 76 category:; @@ -92,7 +92,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 10 98 since:; #X text 120 98 0.9; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/chaos.gbman0.pddoc b/ceammc/ext/doc/chaos.gbman0.pddoc index 5320e395de..f220728624 100644 --- a/ceammc/ext/doc/chaos.gbman0.pddoc +++ b/ceammc/ext/doc/chaos.gbman0.pddoc @@ -4,7 +4,7 @@ chaos.gbman0 - Serge Poltavski + Serge Poltavsky Gingerbreadman map chaotic generator GPL3 or later diff --git a/ceammc/ext/doc/chaos.gbman0~-help.pd b/ceammc/ext/doc/chaos.gbman0~-help.pd index e93b1cc854..e62977e4b7 100644 --- a/ceammc/ext/doc/chaos.gbman0~-help.pd +++ b/ceammc/ext/doc/chaos.gbman0~-help.pd @@ -63,7 +63,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; #X obj 1 746 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 749 library: ceammc v0.9.4; +#X text 10 749 library: ceammc v0.9.6; #X text 579 761 see also:; #X obj 653 761 chaos.gbman0; #N canvas 10 768 400 290 info 0; @@ -71,7 +71,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.gbman0~; #X text 10 76 category:; @@ -79,7 +79,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 10 98 since:; #X text 120 98 0.9; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/chaos.gbman0~.pddoc b/ceammc/ext/doc/chaos.gbman0~.pddoc index b42012c15c..fa8025a4f5 100644 --- a/ceammc/ext/doc/chaos.gbman0~.pddoc +++ b/ceammc/ext/doc/chaos.gbman0~.pddoc @@ -4,7 +4,7 @@ chaos.gbman0~ - Serge Poltavski + Serge Poltavsky Gingerbreadman map chaotic generator GPL3 or later diff --git a/ceammc/ext/doc/chaos.jong-help.pd b/ceammc/ext/doc/chaos.jong-help.pd index 6376e769ba..a39ef37c20 100644 --- a/ceammc/ext/doc/chaos.jong-help.pd +++ b/ceammc/ext/doc/chaos.jong-help.pd @@ -110,7 +110,7 @@ value.; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; #X obj 1 1281 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1284 library: ceammc v0.9.4; +#X text 10 1284 library: ceammc v0.9.6; #X text 594 1296 see also:; #X obj 668 1296 chaos.std0; #N canvas 10 1303 400 290 info 0; @@ -118,7 +118,7 @@ value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.jong; #X text 10 76 category:; diff --git a/ceammc/ext/doc/chaos.logistic-help.pd b/ceammc/ext/doc/chaos.logistic-help.pd index 0ad7bf4219..91f51051e1 100644 --- a/ceammc/ext/doc/chaos.logistic-help.pd +++ b/ceammc/ext/doc/chaos.logistic-help.pd @@ -110,7 +110,7 @@ Default is 0\. Type: int.; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; #X obj 1 1544 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1547 library: ceammc v0.9.4; +#X text 10 1547 library: ceammc v0.9.6; #X text 594 1559 see also:; #X obj 668 1559 chaos.std0; #N canvas 10 1566 400 290 info 0; @@ -118,7 +118,7 @@ Default is 0\. Type: int.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.logistic; #X text 10 76 category:; diff --git a/ceammc/ext/doc/chaos.std0-help.pd b/ceammc/ext/doc/chaos.std0-help.pd index 2daba217b2..f1444ed55f 100644 --- a/ceammc/ext/doc/chaos.std0-help.pd +++ b/ceammc/ext/doc/chaos.std0-help.pd @@ -65,28 +65,31 @@ by Boris Chirikov in 1969; #X text 110 931 1\.; #X text 150 931 *bang*; #X text 245 931 generates and outputs next x-value.; -#X obj 20 961 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 966 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 951 2\.; +#X text 150 951 *float*; +#X text 245 951 set k value.; +#X obj 20 981 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 986 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 967 1\.; -#X text 245 967 outputs x-value mapped to [-1\..1] range.; -#X text 110 987 2\.; -#X text 245 987 outputs y-value mapped to [-1\..1] range.; +#X text 110 987 1\.; +#X text 245 987 outputs x-value mapped to [-1\..1] range.; +#X text 110 1007 2\.; +#X text 245 1007 outputs y-value mapped to [-1\..1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; -#X obj 1 1037 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1040 library: ceammc v0.9.4; -#X text 586 1052 see also:; -#X obj 660 1052 chaos.std0~; -#N canvas 10 1059 400 290 info 0; +#X obj 1 1057 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1060 library: ceammc v0.9.6; +#X text 586 1072 see also:; +#X obj 660 1072 chaos.std0~; +#N canvas 10 1079 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.std0; #X text 10 76 category:; @@ -94,7 +97,7 @@ by Boris Chirikov in 1969; #X text 10 98 since:; #X text 120 98 0.9; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; @@ -105,7 +108,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1059 pd info; +#X restore 10 1079 pd info; #X connect 10 0 13 0; #X connect 12 0 14 0; #X connect 13 0 15 0; diff --git a/ceammc/ext/doc/chaos.std0.pddoc b/ceammc/ext/doc/chaos.std0.pddoc index ad2d89bdae..3f01ee6c54 100644 --- a/ceammc/ext/doc/chaos.std0.pddoc +++ b/ceammc/ext/doc/chaos.std0.pddoc @@ -4,7 +4,7 @@ chaos.std0 - Serge Poltavski + Serge Poltavsky Standard map chaotic generator GPL3 or later @@ -35,6 +35,9 @@ generates and outputs next x-value + + set k value + outputs x-value mapped to [-1..1] range diff --git a/ceammc/ext/doc/chaos.std0~-help.pd b/ceammc/ext/doc/chaos.std0~-help.pd index 779b999ed1..6ad0766766 100644 --- a/ceammc/ext/doc/chaos.std0~-help.pd +++ b/ceammc/ext/doc/chaos.std0~-help.pd @@ -64,7 +64,7 @@ by Boris Chirikov in 1969; #X text 115 45 ::; #X obj 131 48 ui.link @title chaos @url ceammc.chaos-help.pd; #X obj 1 835 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 838 library: ceammc v0.9.4; +#X text 10 838 library: ceammc v0.9.6; #X text 594 850 see also:; #X obj 668 850 chaos.std0; #N canvas 10 857 400 290 info 0; @@ -72,7 +72,7 @@ by Boris Chirikov in 1969; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 chaos.std0~; #X text 10 76 category:; @@ -80,7 +80,7 @@ by Boris Chirikov in 1969; #X text 10 98 since:; #X text 120 98 0.9; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/chaos.std0~.pddoc b/ceammc/ext/doc/chaos.std0~.pddoc index 6bde2acf10..473ef47049 100644 --- a/ceammc/ext/doc/chaos.std0~.pddoc +++ b/ceammc/ext/doc/chaos.std0~.pddoc @@ -4,7 +4,7 @@ chaos.std0~ - Serge Poltavski + Serge Poltavsky Standard map chaotic generator GPL3 or later diff --git a/ceammc/ext/doc/click~-help.pd b/ceammc/ext/doc/click~-help.pd index 241e5006f9..f0795fee14 100644 --- a/ceammc/ext/doc/click~-help.pd +++ b/ceammc/ext/doc/click~-help.pd @@ -30,13 +30,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 click~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.amp2dbfs-help.pd b/ceammc/ext/doc/conv.amp2dbfs-help.pd index 0e95d7ad95..87ee6066c7 100644 --- a/ceammc/ext/doc/conv.amp2dbfs-help.pd +++ b/ceammc/ext/doc/conv.amp2dbfs-help.pd @@ -36,7 +36,7 @@ range); #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 600 520 see also:; #X obj 674 520 dbfs->amp; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ range); #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.amp2dbfs; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.amp2dbfs~-help.pd b/ceammc/ext/doc/conv.amp2dbfs~-help.pd index dd02b7d978..a675de59c0 100644 --- a/ceammc/ext/doc/conv.amp2dbfs~-help.pd +++ b/ceammc/ext/doc/conv.amp2dbfs~-help.pd @@ -33,7 +33,7 @@ range); #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 584 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 587 library: ceammc v0.9.4; +#X text 10 587 library: ceammc v0.9.6; #X text 593 599 see also:; #X obj 667 599 dbfs->amp~; #N canvas 10 606 400 290 info 0; @@ -41,7 +41,7 @@ range); #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.amp2dbfs~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bits2bang-help.pd b/ceammc/ext/doc/conv.bits2bang-help.pd index 8cc71698b6..0de9332dec 100644 --- a/ceammc/ext/doc/conv.bits2bang-help.pd +++ b/ceammc/ext/doc/conv.bits2bang-help.pd @@ -33,40 +33,47 @@ to single outlet; #X obj 50 544 ui.hgain~; #X obj 50 573 dac~; #X obj 20 622 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 627 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 627 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 662 @n; -#X text 245 662 (readonly) Get 123\. Type: int. Default value: 8\. -Range: 1\...64\.; -#X msg 110 704 @poly; -#X text 245 704 polyphonic mode for using with [clone] object.; -#X msg 110 733 @rev; -#X text 245 733 Get/Set reversed bit order. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X obj 20 785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 790 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 662 1\.; +#X text 150 662 int; +#X obj 246 663 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 662 N: number of outlets. Type: int. Range: 1\...64; +#X obj 20 692 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 697 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 732 @n; +#X text 245 732 (initonly) Get/Set number of outlets. Type: int. Default +value: 8\. Range: 1\...64\.; +#X msg 110 774 @poly; +#X text 245 774 polyphonic mode for using with [clone] object.; +#X msg 110 803 @rev; +#X text 245 803 Get/Set reversed bit order. Type: bool. Default value: +0\.; +#X obj 20 842 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 847 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 791 1\.; -#X text 150 791 *list*; -#X text 245 791 input bit list.; -#X obj 20 821 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 826 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 848 1\.; +#X text 150 848 *list*; +#X text 245 848 input bit list.; +#X obj 20 878 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 883 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 827 1\.; -#X text 245 827 output.; +#X text 110 884 1\.; +#X text 245 884 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 877 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 880 library: ceammc v0.9.4; -#N canvas 10 899 400 290 info 0; +#X obj 1 934 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 937 library: ceammc v0.9.6; +#N canvas 10 956 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bits2bang; #X text 10 76 category:; @@ -85,7 +92,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 899 pd info; +#X restore 10 956 pd info; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 12 0 16 0; diff --git a/ceammc/ext/doc/conv.bits2bang.pddoc b/ceammc/ext/doc/conv.bits2bang.pddoc index 1fe782004b..1e7c336b31 100644 --- a/ceammc/ext/doc/conv.bits2bang.pddoc +++ b/ceammc/ext/doc/conv.bits2bang.pddoc @@ -21,12 +21,15 @@ in default mode if bit is on - sends bang to corresponding outlet in @poly mode if bit is on - send list (BIT_IDX bang) to single outlet + + number of outlets + - - 123 - reversed bit order - polyphonic mode for using with [clone] - object + number of outlets + reversed bit order + polyphonic mode for using with + [clone] object diff --git a/ceammc/ext/doc/conv.bits2int-help.pd b/ceammc/ext/doc/conv.bits2int-help.pd index a18084ca07..744817d767 100644 --- a/ceammc/ext/doc/conv.bits2int-help.pd +++ b/ceammc/ext/doc/conv.bits2int-help.pd @@ -17,26 +17,26 @@ rightmost \, this can be changed with @rev property; #X obj 20 270 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 305 @rev; -#X text 245 305 Get/Set reversed bit order. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X obj 20 357 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 362 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 305 Get/Set reversed bit order. Type: bool. Default value: +0\.; +#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 363 1\.; -#X text 150 363 *list*; -#X text 245 363 input bit list.; -#X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 398 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 350 1\.; +#X text 150 350 *list*; +#X text 245 350 input bit list.; +#X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 385 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 399 1\.; -#X text 245 399 list of bits.; +#X text 110 386 1\.; +#X text 245 386 list of bits.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 conv.int2bits; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ rightmost \, this can be changed with @rev property; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bits2int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bits2int.pddoc b/ceammc/ext/doc/conv.bits2int.pddoc index 900992e669..3d02ce44d4 100644 --- a/ceammc/ext/doc/conv.bits2int.pddoc +++ b/ceammc/ext/doc/conv.bits2int.pddoc @@ -25,7 +25,7 @@ with @rev property - reversed bit order + reversed bit order diff --git a/ceammc/ext/doc/conv.bits2note-help.pd b/ceammc/ext/doc/conv.bits2note-help.pd index fdece1f28c..4c8ef186ab 100644 --- a/ceammc/ext/doc/conv.bits2note-help.pd +++ b/ceammc/ext/doc/conv.bits2note-help.pd @@ -38,7 +38,7 @@ outlet; #X obj 20 581 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 616 @keys; -#X text 245 616 Get/Set list of mapped keys. Type: list.; +#X text 245 616 (initonly) Get/Set list of mapped keys. Type: list.; #X msg 110 645 @mode; #X text 245 645 Get/Set mode for repeated notes. If 'off' - send note off before retriggering \, if 'tie' - ignore repeated events \, if @@ -67,13 +67,13 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 903 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 906 library: ceammc v0.9.4; +#X text 10 906 library: ceammc v0.9.6; #N canvas 10 925 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bits2note; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bits2note.pddoc b/ceammc/ext/doc/conv.bits2note.pddoc index 3855b3aa20..13618c4b6c 100644 --- a/ceammc/ext/doc/conv.bits2note.pddoc +++ b/ceammc/ext/doc/conv.bits2note.pddoc @@ -26,12 +26,13 @@ list of note keys - polyphonic mode. (for using with [clone] - object) + polyphonic mode. (for + using with [clone] object) mode for repeated notes. If 'off' - send note off before retriggering, if 'tie' - ignore repeated events, if 'raw' - always send on/off events - list of mapped keys + list of mapped + keys output velocity diff --git a/ceammc/ext/doc/conv.bits2pos-help.pd b/ceammc/ext/doc/conv.bits2pos-help.pd index 7f7d7d4e0d..820b8f6d9b 100644 --- a/ceammc/ext/doc/conv.bits2pos-help.pd +++ b/ceammc/ext/doc/conv.bits2pos-help.pd @@ -19,26 +19,26 @@ rightmost \, this can be changed with @rev property; #X obj 20 299 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 334 @rev; -#X text 245 334 Get/Set reversed bit order. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X obj 20 386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 391 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 334 Get/Set reversed bit order. Type: bool. Default value: +0\.; +#X obj 20 373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 378 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 392 1\.; -#X text 150 392 *list*; -#X text 245 392 input bit list.; -#X obj 20 422 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 427 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 379 1\.; +#X text 150 379 *list*; +#X text 245 379 input bit list.; +#X obj 20 409 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 414 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 428 1\.; -#X text 245 428 list of bit positions.; +#X text 110 415 1\.; +#X text 245 415 list of bit positions.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 conv.bits2int; #N canvas 10 527 400 290 info 0; @@ -46,7 +46,7 @@ rightmost \, this can be changed with @rev property; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bits2pos; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bits2pos.pddoc b/ceammc/ext/doc/conv.bits2pos.pddoc index 587d2838d3..13fa06543d 100644 --- a/ceammc/ext/doc/conv.bits2pos.pddoc +++ b/ceammc/ext/doc/conv.bits2pos.pddoc @@ -25,7 +25,7 @@ with @rev property - reversed bit order + reversed bit order diff --git a/ceammc/ext/doc/conv.bpm2hz-help.pd b/ceammc/ext/doc/conv.bpm2hz-help.pd index eea3078b9a..08d0fa3759 100644 --- a/ceammc/ext/doc/conv.bpm2hz-help.pd +++ b/ceammc/ext/doc/conv.bpm2hz-help.pd @@ -1,14 +1,14 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 507 50 cnv 1 258 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 507 50 converts BPM to frequency in herz; +#X obj 500 50 cnv 1 265 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 500 50 converts BPM to frequency in hertz; #X obj 1 1 cnv 5 765 40 empty empty conv.bpm2hz 20 20 0 20 -104026 -4096 0; #X obj 460 11 ceammc/bpm->hz; #X obj 586 11 bpm->hz; #X obj 661 11 conv.bpm2hz; #X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Converts frequency from BPM (beats per minute) to herz. +#X text 215 80 Converts frequency from BPM (beats per minute) to hertz. It's simple as /60 \, but more readable; #X msg 50 158 120; #X floatatom 50 187 5 0 0 0 - - -; @@ -30,14 +30,14 @@ It's simple as /60 \, but more readable; #X obj 20 450 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X text 110 451 1\.; -#X text 245 451 frequency in herz.; +#X text 245 451 frequency in hertz.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 587 520 see also:; #X obj 661 520 conv.bpm2ms; #N canvas 10 527 400 290 info 0; @@ -45,7 +45,7 @@ It's simple as /60 \, but more readable; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bpm2hz; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bpm2hz.pddoc b/ceammc/ext/doc/conv.bpm2hz.pddoc index d037d4ab8f..f71b503bc3 100644 --- a/ceammc/ext/doc/conv.bpm2hz.pddoc +++ b/ceammc/ext/doc/conv.bpm2hz.pddoc @@ -6,7 +6,7 @@ Serge Poltavsky - converts BPM to frequency in herz + converts BPM to frequency in hertz GPL3 or later ceammc conv @@ -21,7 +21,7 @@ - Converts frequency from BPM (beats per minute) to herz. It's simple as /60, but + Converts frequency from BPM (beats per minute) to hertz. It's simple as /60, but more readable @@ -30,7 +30,7 @@ - frequency in herz + frequency in hertz diff --git a/ceammc/ext/doc/conv.bpm2ms-help.pd b/ceammc/ext/doc/conv.bpm2ms-help.pd index 6056ca2006..1b1d86423e 100644 --- a/ceammc/ext/doc/conv.bpm2ms-help.pd +++ b/ceammc/ext/doc/conv.bpm2ms-help.pd @@ -41,7 +41,7 @@ in ms. It is simple as (60 / f) * 1000 \, but more readable.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 559 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 562 library: ceammc v0.9.4; +#X text 10 562 library: ceammc v0.9.6; #X text 485 574 see also:; #X obj 559 574 conv.bpm2sec; #X obj 661 574 conv.bpm2hz; @@ -50,7 +50,7 @@ in ms. It is simple as (60 / f) * 1000 \, but more readable.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bpm2ms; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.bpm2sec-help.pd b/ceammc/ext/doc/conv.bpm2sec-help.pd index 5a9137c9fb..f2e3c5cf75 100644 --- a/ceammc/ext/doc/conv.bpm2sec-help.pd +++ b/ceammc/ext/doc/conv.bpm2sec-help.pd @@ -31,7 +31,7 @@ in seconds. It's simple as 60/f \, but more readable.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 493 520 see also:; #X obj 567 520 conv.bpm2ms; #X obj 661 520 conv.bpm2hz; @@ -40,7 +40,7 @@ in seconds. It's simple as 60/f \, but more readable.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.bpm2sec; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.car2pol-help.pd b/ceammc/ext/doc/conv.car2pol-help.pd index f087d5ab76..48ae5872f0 100644 --- a/ceammc/ext/doc/conv.car2pol-help.pd +++ b/ceammc/ext/doc/conv.car2pol-help.pd @@ -17,8 +17,8 @@ -49933 0; #X msg 110 351 @positive; #X text 245 351 Get/Set output in positive range. If true output is -in [0\..2π) range \, otherwise output range is [-π..+π]. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +in [0\..2π) range \, otherwise output range is [-π..+π]. Type: bool. +Default value: 0\.; #X obj 20 418 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 423 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -36,7 +36,7 @@ Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 510 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 513 library: ceammc v0.9.4; +#X text 10 513 library: ceammc v0.9.6; #X text 579 525 see also:; #X obj 653 525 conv.pol2car; #N canvas 10 532 400 290 info 0; @@ -44,7 +44,7 @@ Default value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.car2pol; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.car2pol.pddoc b/ceammc/ext/doc/conv.car2pol.pddoc index 235e447e4b..c7d7e70058 100644 --- a/ceammc/ext/doc/conv.car2pol.pddoc +++ b/ceammc/ext/doc/conv.car2pol.pddoc @@ -21,8 +21,8 @@ - output in positive range. - If true output is in [0..2π) range, otherwise output range is [-π..+π] + output in positive range. If true + output is in [0..2π) range, otherwise output range is [-π..+π] diff --git a/ceammc/ext/doc/conv.cc2amp-help.pd b/ceammc/ext/doc/conv.cc2amp-help.pd index c0c6631924..15129e26f8 100644 --- a/ceammc/ext/doc/conv.cc2amp-help.pd +++ b/ceammc/ext/doc/conv.cc2amp-help.pd @@ -53,7 +53,7 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 595 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 598 library: ceammc v0.9.4; +#X text 10 598 library: ceammc v0.9.6; #X text 522 610 see also:; #X obj 596 610 lin->lin; #X obj 668 610 lin->curve; @@ -62,7 +62,7 @@ value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.cc2amp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.dbfs2amp-help.pd b/ceammc/ext/doc/conv.dbfs2amp-help.pd index 541d015105..081302ac0b 100644 --- a/ceammc/ext/doc/conv.dbfs2amp-help.pd +++ b/ceammc/ext/doc/conv.dbfs2amp-help.pd @@ -34,7 +34,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 amp->dbfs; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.dbfs2amp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.dbfs2amp~-help.pd b/ceammc/ext/doc/conv.dbfs2amp~-help.pd index 8c1603efb4..896558d5b0 100644 --- a/ceammc/ext/doc/conv.dbfs2amp~-help.pd +++ b/ceammc/ext/doc/conv.dbfs2amp~-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 512 520 see also:; #X obj 586 520 amp->dbfs~; #X obj 674 520 dbfs->amp; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.dbfs2amp~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.degree2key-help.pd b/ceammc/ext/doc/conv.degree2key-help.pd index ff245f984a..12e847f9a8 100644 --- a/ceammc/ext/doc/conv.degree2key-help.pd +++ b/ceammc/ext/doc/conv.degree2key-help.pd @@ -24,10 +24,17 @@ #X obj 50 417 ui.hgain~; #X obj 50 446 dac~; #X obj 20 495 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 500 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 500 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 535 @all; -#X text 245 535 (readonly) Get list all supported scales. Type: list. +#X text 110 535 1\.; +#X text 150 535 symbol; +#X obj 246 536 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 535 SCALE: scale name. Type: symbol.; +#X obj 20 565 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 570 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 605 @all; +#X text 245 605 (readonly) Get list all supported scales. Type: list. Default value: aeolian ahirbhairav ajam atharKurd augmented augmented2 bartok bastanikar bayati bhairav chinese chromatic chromatic24 diminished diminished2 dorian egyptian enigmatic farahfaza gong hex_aeolian hex_dorian @@ -43,40 +50,60 @@ partch_u4 partch_u5 partch_u6 pelog phrygian prometheus purvi rast rast_desc ritusen saba scriabin shang shawq_afza sikah sikah_desc spanish super_locrian suznak todi ushaq_mashri whole whole_leading yakah yakah_desc yu zamzam zanjaran zhi.; -#X msg 110 833 @scale; -#X text 245 833 Get/Set scale name. Type: symbol. Default value: major.; -#X obj 20 872 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 877 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 903 @scale; +#X text 245 903 Get/Set scale name. Type: symbol. Default value: major. +Allowed values: aeolian \, ahirbhairav \, ajam \, atharKurd \, augmented +\, augmented2 \, bartok \, bastanikar \, bayati \, bhairav \, chinese +\, chromatic \, chromatic24 \, diminished \, diminished2 \, dorian +\, egyptian \, enigmatic \, farahfaza \, gong \, hex_aeolian \, hex_dorian +\, hex_major6 \, hex_major7 \, hex_phrygian \, hex_sus \, hijaz \, +hijaz_desc \, hijaz_kar \, hindu \, hirajoshi \, husseini \, huzam +\, indian \, ionian \, iraq \, iwato \, jiao \, jiharkah \, karjighar +\, kijaz_kar_kurd \, kumoi \, kurd \, locrian \, lydian \, mahur \, +major \, major_harmonic \, major_locrian \, major_melodic \, major_neapolitan +\, major_pentatonic \, marva \, minor \, minor_harmonic \, minor_hungarian +\, minor_lydian \, minor_melodic \, minor_melodic_desc \, minor_neapolitan +\, minor_pentatonic \, minor_romanian \, mixolydian \, murassah \, +mustar \, nahawand \, nahawand_desc \, nairuz \, nawa_athar \, nikriz +\, partch_o1 \, partch_o2 \, partch_o3 \, partch_o4 \, partch_o5 \, +partch_o6 \, partch_u1 \, partch_u2 \, partch_u3 \, partch_u4 \, partch_u5 +\, partch_u6 \, pelog \, phrygian \, prometheus \, purvi \, rast \, +rast_desc \, ritusen \, saba \, scriabin \, shang \, shawq_afza \, +sikah \, sikah_desc \, spanish \, super_locrian \, suznak \, todi \, +ushaq_mashri \, whole \, whole_leading \, yakah \, yakah_desc \, yu +\, zamzam \, zanjaran \, zhi.; +#X obj 20 1256 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1261 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 912 random; -#X text 245 912 choose random degree from current scale and convert +#X msg 110 1296 random; +#X text 245 1296 choose random degree from current scale and convert it to key.; -#X obj 20 962 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 967 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 -0; -#X text 110 968 1\.; -#X text 150 968 *float*; -#X text 245 968 input value.; -#X text 150 988 *list*; -#X text 245 988 input values.; -#X obj 20 1018 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1023 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1346 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1351 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1352 1\.; +#X text 150 1352 *float*; +#X text 245 1352 input value.; +#X text 150 1372 *list*; +#X text 245 1372 input values.; +#X obj 20 1402 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1407 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1024 1\.; -#X text 245 1024 float or float list: converted value(s).; +#X text 110 1408 1\.; +#X text 245 1408 float or float list: converted value(s).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 1074 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1077 library: ceammc v0.9.4; -#N canvas 10 1096 400 290 info 0; +#X obj 1 1458 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1461 library: ceammc v0.9.6; +#N canvas 10 1480 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.degree2key; #X text 10 76 category:; @@ -95,7 +122,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1096 pd info; +#X restore 10 1480 pd info; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/conv.degree2key.pddoc b/ceammc/ext/doc/conv.degree2key.pddoc index 880e741189..b14bc5114f 100644 --- a/ceammc/ext/doc/conv.degree2key.pddoc +++ b/ceammc/ext/doc/conv.degree2key.pddoc @@ -24,11 +24,16 @@ choose random degree from current scale and convert it to key + + scale name + - list all supported scales - scale name + + scale name diff --git a/ceammc/ext/doc/conv.edge2bang-help.pd b/ceammc/ext/doc/conv.edge2bang-help.pd index 0239282c51..202fdf67bf 100644 --- a/ceammc/ext/doc/conv.edge2bang-help.pd +++ b/ceammc/ext/doc/conv.edge2bang-help.pd @@ -56,13 +56,13 @@ value: up. Allowed values: up \, down \, both.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 585 library: ceammc v0.9.4; +#X text 10 585 library: ceammc v0.9.6; #N canvas 10 604 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.edge2bang; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.hex2int-help.pd b/ceammc/ext/doc/conv.hex2int-help.pd index dc23617c12..e7ecf97aa8 100644 --- a/ceammc/ext/doc/conv.hex2int-help.pd +++ b/ceammc/ext/doc/conv.hex2int-help.pd @@ -37,13 +37,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.hex2int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.hex2int.pddoc b/ceammc/ext/doc/conv.hex2int.pddoc index f6a2929c8a..337054589a 100644 --- a/ceammc/ext/doc/conv.hex2int.pddoc +++ b/ceammc/ext/doc/conv.hex2int.pddoc @@ -18,7 +18,7 @@ - ignore parsing error + ignore parsing error diff --git a/ceammc/ext/doc/conv.int2bits-help.pd b/ceammc/ext/doc/conv.int2bits-help.pd index 43957e0c4a..4fff285516 100644 --- a/ceammc/ext/doc/conv.int2bits-help.pd +++ b/ceammc/ext/doc/conv.int2bits-help.pd @@ -23,40 +23,47 @@ https://en.wikipedia.org/wiki/Two%27s_complement; #X obj 50 354 int->bits 32 @rev 1; #X obj 50 383 ui.hrd* 32; #X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 437 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 437 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 472 @rev; -#X text 245 472 Get/Set reversed bit order. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 514 @size; -#X text 245 514 Get/Set output bit-length. Type: int. Default value: +#X text 110 472 1\.; +#X text 150 472 int; +#X obj 246 473 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 472 SIZE: output bit-length. Type: int. Range: 1\...32; +#X obj 20 502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 507 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 542 @rev; +#X text 245 542 Get/Set reversed bit order. Type: bool. Default value: +0\.; +#X msg 110 571 @size; +#X text 245 571 Get/Set output bit-length. Type: int. Default value: 32\. Range: 1\...32\.; -#X obj 20 566 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 571 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 623 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 628 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 572 1\.; -#X text 150 572 *float*; -#X text 245 572 input value.; -#X obj 20 602 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 607 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 629 1\.; +#X text 150 629 *float*; +#X text 245 629 input value.; +#X obj 20 659 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 664 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 608 1\.; -#X text 245 608 list of bits.; +#X text 110 665 1\.; +#X text 245 665 list of bits.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 658 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 661 library: ceammc v0.9.4; -#X text 572 673 see also:; -#X obj 646 673 conv.bits2int; -#N canvas 10 680 400 290 info 0; +#X obj 1 715 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 718 library: ceammc v0.9.6; +#X text 572 730 see also:; +#X obj 646 730 conv.bits2int; +#N canvas 10 737 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.int2bits; #X text 10 76 category:; @@ -75,7 +82,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 680 pd info; +#X restore 10 737 pd info; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 13 0 14 0; diff --git a/ceammc/ext/doc/conv.int2bits.pddoc b/ceammc/ext/doc/conv.int2bits.pddoc index 5fc7666284..b6f48c83bf 100644 --- a/ceammc/ext/doc/conv.int2bits.pddoc +++ b/ceammc/ext/doc/conv.int2bits.pddoc @@ -25,10 +25,14 @@ complement Two's complement + + output + bit-length + output bit-length - reversed bit order + reversed bit order diff --git a/ceammc/ext/doc/conv.lin2curve-help.pd b/ceammc/ext/doc/conv.lin2curve-help.pd index a7b3656965..5afe40c673 100644 --- a/ceammc/ext/doc/conv.lin2curve-help.pd +++ b/ceammc/ext/doc/conv.lin2curve-help.pd @@ -39,20 +39,20 @@ the output range may include zero. If the input exceeds the input range -49933 0; #X text 110 465 1\.; #X text 150 465 float; -#X obj 246 466 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 465 FROM: begin of input range. Type: float.; +#X obj 246 466 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 465 IN_FROM: begin of input range. Type: float.; #X text 110 485 2\.; #X text 150 485 float; -#X obj 246 486 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 485 TO: end of input range. Type: float.; +#X obj 246 486 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 485 IN_TO: end of input range. Type: float.; #X text 110 505 3\.; #X text 150 505 float; -#X obj 246 506 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 505 FROM: begin of output range. Type: float.; +#X obj 246 506 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 505 OUT_FROM: begin of output range. Type: float.; #X text 110 525 4\.; #X text 150 525 float; -#X obj 246 526 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 525 TO: end of output range. Type: float.; +#X obj 246 526 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 525 OUT_TO: end of output range. Type: float.; #X text 110 545 5\.; #X text 150 545 float; #X obj 246 546 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -93,26 +93,28 @@ value: 0\.; #X text 110 975 1\.; #X text 150 975 *float*; #X text 245 975 input value.; -#X obj 20 1005 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1010 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 995 *list*; +#X text 245 995 input list.; +#X obj 20 1025 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1030 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1011 1\.; -#X text 245 1011 converted value.; +#X text 110 1031 1\.; +#X text 245 1031 converted value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 1061 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1064 library: ceammc v0.9.4; -#X text 579 1076 see also:; -#X obj 653 1076 conv.lin2exp; -#N canvas 10 1083 400 290 info 0; +#X obj 1 1081 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1084 library: ceammc v0.9.6; +#X text 579 1096 see also:; +#X obj 653 1096 conv.lin2exp; +#N canvas 10 1103 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.lin2curve; #X text 10 76 category:; @@ -131,7 +133,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1083 pd info; +#X restore 10 1103 pd info; #X connect 8 0 11 0; #X connect 9 0 12 0; #X connect 11 0 13 0; diff --git a/ceammc/ext/doc/conv.lin2curve.pddoc b/ceammc/ext/doc/conv.lin2curve.pddoc index 14d9e4aad3..c59d993494 100644 --- a/ceammc/ext/doc/conv.lin2curve.pddoc +++ b/ceammc/ext/doc/conv.lin2curve.pddoc @@ -41,15 +41,16 @@ alias to @clip minmax - begin of input range - end of input range - begin of output range - end of output range + begin of input range + end of input range + begin of output range + end of output range curve shape input value + input list diff --git a/ceammc/ext/doc/conv.lin2exp-help.pd b/ceammc/ext/doc/conv.lin2exp-help.pd index 1f76ae0946..9a64ffcf16 100644 --- a/ceammc/ext/doc/conv.lin2exp-help.pd +++ b/ceammc/ext/doc/conv.lin2exp-help.pd @@ -54,20 +54,20 @@ exceeds the input range \, by default clip is applied.; -49933 0; #X text 110 391 1\.; #X text 150 391 float; -#X obj 246 392 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 391 FROM: begin of input range. Type: float.; +#X obj 246 392 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 391 IN_FROM: begin of input range. Type: float.; #X text 110 411 2\.; #X text 150 411 float; -#X obj 246 412 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 411 TO: end of input range. Type: float.; +#X obj 246 412 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 411 IN_TO: end of input range. Type: float.; #X text 110 431 3\.; #X text 150 431 float; -#X obj 246 432 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 431 FROM: begin of output range. Type: float.; +#X obj 246 432 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 431 OUT_FROM: begin of output range. Type: float.; #X text 110 451 4\.; #X text 150 451 float; -#X obj 246 452 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 451 TO: end of input output. Type: float.; +#X obj 246 452 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 451 OUT_TO: end of input output. Type: float.; #X obj 20 481 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 486 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -101,27 +101,29 @@ value: 0.01\.; #X text 110 839 1\.; #X text 150 839 *float*; #X text 245 839 input value.; -#X obj 20 869 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 874 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 859 *list*; +#X text 245 859 input list.; +#X obj 20 889 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 894 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 875 1\.; -#X text 245 875 converted value.; +#X text 110 895 1\.; +#X text 245 895 converted value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 925 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 928 library: ceammc v0.9.4; -#X text 464 940 see also:; -#X obj 538 940 conv.lin2lin; -#X obj 639 940 conv.lin2curve; -#N canvas 10 947 400 290 info 0; +#X obj 1 945 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 948 library: ceammc v0.9.6; +#X text 464 960 see also:; +#X obj 538 960 conv.lin2lin; +#X obj 639 960 conv.lin2curve; +#N canvas 10 967 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.lin2exp; #X text 10 76 category:; @@ -140,7 +142,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 947 pd info; +#X restore 10 967 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/conv.lin2exp.pddoc b/ceammc/ext/doc/conv.lin2exp.pddoc index 39192a2e5d..da7de99aa7 100644 --- a/ceammc/ext/doc/conv.lin2exp.pddoc +++ b/ceammc/ext/doc/conv.lin2exp.pddoc @@ -38,14 +38,15 @@ alias to @clip minmax - begin of input range - end of input range - begin of output range - end of input output + begin of input range + end of input range + begin of output range + end of input output input value + input list diff --git a/ceammc/ext/doc/conv.lin2lin-help.pd b/ceammc/ext/doc/conv.lin2lin-help.pd index 785096a671..fdaf5e4262 100644 --- a/ceammc/ext/doc/conv.lin2lin-help.pd +++ b/ceammc/ext/doc/conv.lin2lin-help.pd @@ -21,20 +21,20 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 float; -#X obj 246 295 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 FROM: begin of input range. Type: float.; +#X obj 246 295 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 IN_FROM: begin of input range. Type: float.; #X text 110 314 2\.; #X text 150 314 float; -#X obj 246 315 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 314 TO: end of input range. Type: float.; +#X obj 246 315 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 314 IN_TO: end of input range. Type: float.; #X text 110 334 3\.; #X text 150 334 float; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 FROM: begin of output range. Type: float.; +#X obj 246 335 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 OUT_FROM: begin of output range. Type: float.; #X text 110 354 4\.; #X text 150 354 float; -#X obj 246 355 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 354 TO: end of input output. Type: float.; +#X obj 246 355 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 354 OUT_TO: end of input output. Type: float.; #X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 389 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -81,7 +81,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 851 library: ceammc v0.9.4; +#X text 10 851 library: ceammc v0.9.6; #X text 586 863 see also:; #X obj 660 863 conv.cc2amp; #N canvas 10 870 400 290 info 0; @@ -89,7 +89,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.lin2lin; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.lin2lin.pddoc b/ceammc/ext/doc/conv.lin2lin.pddoc index 1fe0df2c39..6fdb041a2f 100644 --- a/ceammc/ext/doc/conv.lin2lin.pddoc +++ b/ceammc/ext/doc/conv.lin2lin.pddoc @@ -35,10 +35,10 @@ alias to @clip minmax - begin of input range - end of input range - begin of output range - end of input output + begin of input range + end of input range + begin of output range + end of input output diff --git a/ceammc/ext/doc/conv.lin2lin~-help.pd b/ceammc/ext/doc/conv.lin2lin~-help.pd index 058b7c96cf..81e439d5c7 100644 --- a/ceammc/ext/doc/conv.lin2lin~-help.pd +++ b/ceammc/ext/doc/conv.lin2lin~-help.pd @@ -21,20 +21,20 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 float; -#X obj 246 295 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 FROM: begin of input range. Type: float.; +#X obj 246 295 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 IN_FROM: begin of input range. Type: float.; #X text 110 314 2\.; #X text 150 314 float; -#X obj 246 315 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 314 TO: end of input range. Type: float.; +#X obj 246 315 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 314 IN_TO: end of input range. Type: float.; #X text 110 334 3\.; #X text 150 334 float; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 FROM: begin of output range. Type: float.; +#X obj 246 335 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 OUT_FROM: begin of output range. Type: float.; #X text 110 354 4\.; #X text 150 354 float; -#X obj 246 355 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 354 TO: end of input output. Type: float.; +#X obj 246 355 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 354 OUT_TO: end of input output. Type: float.; #X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 389 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -78,7 +78,7 @@ value: -1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 841 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 844 library: ceammc v0.9.4; +#X text 10 844 library: ceammc v0.9.6; #X text 580 856 see also:; #X obj 654 856 conv.lin2lin; #N canvas 10 863 400 290 info 0; @@ -86,7 +86,7 @@ value: -1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.lin2lin~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.lin2lin~.pddoc b/ceammc/ext/doc/conv.lin2lin~.pddoc index 7ec5965d59..0dd61080d3 100644 --- a/ceammc/ext/doc/conv.lin2lin~.pddoc +++ b/ceammc/ext/doc/conv.lin2lin~.pddoc @@ -35,10 +35,10 @@ alias to @clip minmax - begin of input range - end of input range - begin of output range - end of input output + begin of input range + end of input range + begin of output range + end of input output diff --git a/ceammc/ext/doc/conv.list2props-help.pd b/ceammc/ext/doc/conv.list2props-help.pd index b0ce0e935f..edd0f04d86 100644 --- a/ceammc/ext/doc/conv.list2props-help.pd +++ b/ceammc/ext/doc/conv.list2props-help.pd @@ -38,13 +38,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.list2props; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.midi2freq-help.pd b/ceammc/ext/doc/conv.midi2freq-help.pd index 54a0f52c7b..cf1de33557 100644 --- a/ceammc/ext/doc/conv.midi2freq-help.pd +++ b/ceammc/ext/doc/conv.midi2freq-help.pd @@ -30,8 +30,8 @@ pythagorean rameau valotti zarlino; -49933 0; #X text 110 481 1\.; #X text 150 481 float; -#X obj 246 482 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 481 APITCH: pitch standard. Type: float. Range: 200\...600; +#X obj 246 482 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 481 A(Hz): A pitch frequency. Type: float. Range: 200\...600; #X obj 20 511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 516 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -61,7 +61,7 @@ pythagorean \, rameau \, valotti \, zarlino.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 772 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 775 library: ceammc v0.9.4; +#X text 10 775 library: ceammc v0.9.6; #X text 637 787 see also:; #X obj 711 787 mtof; #N canvas 10 794 400 290 info 0; @@ -69,7 +69,7 @@ pythagorean \, rameau \, valotti \, zarlino.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.midi2freq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.midi2freq.pddoc b/ceammc/ext/doc/conv.midi2freq.pddoc index 483d7a5e28..c6acf4c972 100644 --- a/ceammc/ext/doc/conv.midi2freq.pddoc +++ b/ceammc/ext/doc/conv.midi2freq.pddoc @@ -24,12 +24,12 @@ - pitch - standard + A pitch + frequency A pitch frequency + units="hertz">A pitch frequency temperament diff --git a/ceammc/ext/doc/conv.ms2bpm-help.pd b/ceammc/ext/doc/conv.ms2bpm-help.pd index 9dcf96c180..27a0e8c3dc 100644 --- a/ceammc/ext/doc/conv.ms2bpm-help.pd +++ b/ceammc/ext/doc/conv.ms2bpm-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 477 520 see also:; #X obj 551 520 conv.bpm2sec; #X obj 653 520 conv.sec2bpm; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.ms2bpm; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.ms2samp-help.pd b/ceammc/ext/doc/conv.ms2samp-help.pd index ff531cbaa1..7e59b8e35f 100644 --- a/ceammc/ext/doc/conv.ms2samp-help.pd +++ b/ceammc/ext/doc/conv.ms2samp-help.pd @@ -30,7 +30,7 @@ to current samplerate; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 580 520 see also:; #X obj 654 520 conv.samp2ms; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ to current samplerate; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.ms2samp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.ms2samp~-help.pd b/ceammc/ext/doc/conv.ms2samp~-help.pd index 4c80af7376..030a48f5b2 100644 --- a/ceammc/ext/doc/conv.ms2samp~-help.pd +++ b/ceammc/ext/doc/conv.ms2samp~-help.pd @@ -30,7 +30,7 @@ to current samplerate; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.9.4; +#X text 10 550 library: ceammc v0.9.6; #X text 571 562 see also:; #X obj 645 562 conv.samp2ms~; #N canvas 10 569 400 290 info 0; @@ -38,7 +38,7 @@ to current samplerate; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.ms2samp~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.note2guido-help.pd b/ceammc/ext/doc/conv.note2guido-help.pd new file mode 100644 index 0000000000..330348ec4e --- /dev/null +++ b/ceammc/ext/doc/conv.note2guido-help.pd @@ -0,0 +1,80 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 492 50 cnv 1 273 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 492 50 convert MIDI note to Guido notation; +#X obj 1 1 cnv 5 765 40 empty empty conv.note2guido 20 20 0 20 -104026 +-4096 0; +#X obj 372 11 ceammc/note->guido; +#X obj 527 11 note->guido; +#X obj 632 11 conv.note2guido; +#X obj 50 118 ui.keyboard; +#X msg 50 190 \$1; +#X msg 98 190 60 61 62; +#X msg 203 190 note 61 4.5; +#X msg 338 190 note 61 4.25; +#X obj 50 234 conv.note2guido; +#X obj 50 262 ui.dt; +#X obj 50 291 conv.note2guido.inscore; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 380 note; +#X text 245 380 Arguments are:; +#X obj 255 403 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 403 PITCH: note pitch (pitch <0 treated as rest). Type: +int.; +#X obj 255 426 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 426 DUR: note duration. Type: float.; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 467 1\.; +#X text 150 467 *float*; +#X text 245 467 pitch.; +#X text 150 487 *list*; +#X text 245 487 list of pitches.; +#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 522 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 523 1\.; +#X text 245 523 symbol: converted value.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; +#X obj 1 573 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 576 library: ceammc v0.9.6; +#X text 572 588 see also:; +#X obj 646 588 proto.inscore; +#N canvas 10 595 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 conv.note2guido; +#X text 10 76 category:; +#X text 120 76 conv; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 conv \, guido \, midi; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 595 pd info; +#X connect 6 0 7 0; +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.note2guido.inscore.pd b/ceammc/ext/doc/conv.note2guido.inscore.pd new file mode 100644 index 0000000000..2d7d546be8 --- /dev/null +++ b/ceammc/ext/doc/conv.note2guido.inscore.pd @@ -0,0 +1,12 @@ +#N canvas 0 0 464 284 12; +#X obj 20 48 ui.keyboard; +#X msg 20 120 note \$1 4.125; +#X obj 20 149 conv.note2guido; +#X msg 20 178 gmn M [ \$1 ]; +#X obj 20 207 proto.inscore; +#X obj 20 235 net.osc.send osc.udp://localhost:7000; +#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 4 0 5 0; diff --git a/ceammc/ext/doc/conv.note2guido.pddoc b/ceammc/ext/doc/conv.note2guido.pddoc new file mode 100644 index 0000000000..f1089a9878 --- /dev/null +++ b/ceammc/ext/doc/conv.note2guido.pddoc @@ -0,0 +1,77 @@ + + + + conv.note2guido + + + Serge Poltavsky + + convert MIDI note to Guido notation + GPL3 or later + ceammc + conv + conv guido midi + 0.9.5 + + proto.inscore + + + ceammc/note->guido + note->guido + + + + + note pitch (pitch <0 treated as + rest) + note duration + + + + + pitch + list of pitches + + + + symbol: converted value + + + + + + + + + + + diff --git a/ceammc/ext/doc/conv.phase2rad-help.pd b/ceammc/ext/doc/conv.phase2rad-help.pd index 58ca77cf8f..94c99dc2ad 100644 --- a/ceammc/ext/doc/conv.phase2rad-help.pd +++ b/ceammc/ext/doc/conv.phase2rad-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 conv.rad2phase; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.phase2rad; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.phase2rad~-help.pd b/ceammc/ext/doc/conv.phase2rad~-help.pd index ae1fa0cb55..a013c6af8d 100644 --- a/ceammc/ext/doc/conv.phase2rad~-help.pd +++ b/ceammc/ext/doc/conv.phase2rad~-help.pd @@ -27,7 +27,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 557 520 see also:; #X obj 631 520 conv.rad2phase~; #N canvas 10 527 400 290 info 0; @@ -35,7 +35,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.phase2rad~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.pitch2midi-help.pd b/ceammc/ext/doc/conv.pitch2midi-help.pd index a10cd5cfab..b539aee042 100644 --- a/ceammc/ext/doc/conv.pitch2midi-help.pd +++ b/ceammc/ext/doc/conv.pitch2midi-help.pd @@ -48,13 +48,13 @@ C4 is middle C (MIDI: 60). The rest symtol is R (-1 output); #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 662 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 665 library: ceammc v0.9.4; +#X text 10 665 library: ceammc v0.9.6; #N canvas 10 684 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.pitch2midi; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.pol2car-help.pd b/ceammc/ext/doc/conv.pol2car-help.pd index 00e327ed51..3efe942125 100644 --- a/ceammc/ext/doc/conv.pol2car-help.pd +++ b/ceammc/ext/doc/conv.pol2car-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 515 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 518 library: ceammc v0.9.4; +#X text 10 518 library: ceammc v0.9.6; #X text 579 530 see also:; #X obj 653 530 conv.car2pol; #N canvas 10 537 400 290 info 0; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.pol2car; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.rad2phase-help.pd b/ceammc/ext/doc/conv.rad2phase-help.pd index c158acf014..cae531f379 100644 --- a/ceammc/ext/doc/conv.rad2phase-help.pd +++ b/ceammc/ext/doc/conv.rad2phase-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 conv.phase2rad; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.rad2phase; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.rad2phase~-help.pd b/ceammc/ext/doc/conv.rad2phase~-help.pd index 719850805c..ced88e21f9 100644 --- a/ceammc/ext/doc/conv.rad2phase~-help.pd +++ b/ceammc/ext/doc/conv.rad2phase~-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 557 520 see also:; #X obj 631 520 conv.phase2rad~; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.rad2phase~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.samp2ms-help.pd b/ceammc/ext/doc/conv.samp2ms-help.pd index e7f8a74bf1..ffdbda48e6 100644 --- a/ceammc/ext/doc/conv.samp2ms-help.pd +++ b/ceammc/ext/doc/conv.samp2ms-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 conv.sec2samp; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.samp2ms; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.samp2ms~-help.pd b/ceammc/ext/doc/conv.samp2ms~-help.pd index 5e39a7b8e4..0140489570 100644 --- a/ceammc/ext/doc/conv.samp2ms~-help.pd +++ b/ceammc/ext/doc/conv.samp2ms~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.9.4; +#X text 10 550 library: ceammc v0.9.6; #X text 571 562 see also:; #X obj 645 562 conv.samp2ms~; #N canvas 10 569 400 290 info 0; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.samp2ms~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.samp2sec-help.pd b/ceammc/ext/doc/conv.samp2sec-help.pd index 49fea73c50..f8116f008a 100644 --- a/ceammc/ext/doc/conv.samp2sec-help.pd +++ b/ceammc/ext/doc/conv.samp2sec-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 conv.sec2samp; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.samp2sec; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.sec2bpm-help.pd b/ceammc/ext/doc/conv.sec2bpm-help.pd index bc4111609b..6f957f4f9f 100644 --- a/ceammc/ext/doc/conv.sec2bpm-help.pd +++ b/ceammc/ext/doc/conv.sec2bpm-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 484 520 see also:; #X obj 558 520 conv.bpm2sec; #X obj 660 520 conv.ms2bpm; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.sec2bpm; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.sec2samp-help.pd b/ceammc/ext/doc/conv.sec2samp-help.pd index cd5bf4008b..229829efb2 100644 --- a/ceammc/ext/doc/conv.sec2samp-help.pd +++ b/ceammc/ext/doc/conv.sec2samp-help.pd @@ -31,7 +31,7 @@ to current samplerate; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 conv.samp2sec; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ to current samplerate; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.sec2samp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.sec2str-help.pd b/ceammc/ext/doc/conv.sec2str-help.pd index d69c60a956..d4dc771b33 100644 --- a/ceammc/ext/doc/conv.sec2str-help.pd +++ b/ceammc/ext/doc/conv.sec2str-help.pd @@ -44,7 +44,7 @@ as string. Default value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 579 520 see also:; #X obj 653 520 conv.str2sec; #N canvas 10 527 400 290 info 0; @@ -52,7 +52,7 @@ as string. Default value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.sec2str; #X text 10 76 category:; diff --git a/ceammc/ext/doc/conv.sec2str.pddoc b/ceammc/ext/doc/conv.sec2str.pddoc index 7386427445..1c3ff9f189 100644 --- a/ceammc/ext/doc/conv.sec2str.pddoc +++ b/ceammc/ext/doc/conv.sec2str.pddoc @@ -22,9 +22,10 @@ - output milliseconds - if specified - output formatted time - as symbol, otherwise as string. + output + milliseconds + if specified - + output formatted time as symbol, otherwise as string. diff --git a/ceammc/ext/doc/conv.sig2float~-help.pd b/ceammc/ext/doc/conv.sig2float~-help.pd index 1199c57484..82f18367b7 100644 --- a/ceammc/ext/doc/conv.sig2float~-help.pd +++ b/ceammc/ext/doc/conv.sig2float~-help.pd @@ -12,7 +12,7 @@ #X restore 533 11 pd aliases; #X obj 631 11 conv.sig2float~; #X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 convert signal to float via specified time invervals; +#X text 215 80 convert signal to float via specified time intervals; #X obj 50 143 phasor~ 0.5; #X msg 184 143 bang; #X obj 50 172 sig->float~ 500; @@ -22,14 +22,15 @@ #X obj 20 255 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; #X text 110 290 Right-click; -#X text 285 290 sample immidiately.; +#X text 285 290 sample immediately.; #X obj 20 320 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 325 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 360 1\.; #X text 150 360 float; -#X obj 246 361 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 360 INTERV: sampling interval. Type: float.; +#X obj 246 361 cnv 1 100 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 360 INTERVAL(ms): sampling interval. Type: float. Min value: +-1; #X obj 20 390 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 395 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -45,27 +46,30 @@ Units: samp. Default value: 0\. Range: 0\...8192\.; #X text 110 530 1\.; #X text 245 530 input signal.; #X text 150 550 *bang*; -#X text 245 550 sample immidiately.; -#X obj 20 580 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 585 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 245 550 sample immediately.; +#X text 110 570 2\.; +#X text 150 570 *float*; +#X text 245 570 set sample interval.; +#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 605 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 586 1\.; -#X text 245 586 float: sample.; +#X text 110 606 1\.; +#X text 245 606 float: sample.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 636 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 639 library: ceammc v0.9.4; -#X text 600 651 see also:; -#X obj 674 651 snapshot~; -#N canvas 10 658 400 290 info 0; +#X obj 1 656 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 659 library: ceammc v0.9.6; +#X text 600 671 see also:; +#X obj 674 671 snapshot~; +#N canvas 10 678 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.sig2float~; #X text 10 76 category:; @@ -84,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 658 pd info; +#X restore 10 678 pd info; #X connect 7 0 9 0; #X connect 8 0 9 0; #X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/conv.sig2float~.pddoc b/ceammc/ext/doc/conv.sig2float~.pddoc index 543498f8e0..abbd1b9050 100644 --- a/ceammc/ext/doc/conv.sig2float~.pddoc +++ b/ceammc/ext/doc/conv.sig2float~.pddoc @@ -23,13 +23,14 @@ - convert signal to float via specified time invervals + convert signal to float via specified time intervals - sample immidiately + sample immediately - sampling interval + sampling + interval @@ -40,7 +41,10 @@ input signal - sample immidiately + sample immediately + + + set sample interval diff --git a/ceammc/ext/doc/conv.str2sec-help.pd b/ceammc/ext/doc/conv.str2sec-help.pd index 8f70a67b47..391f0ac005 100644 --- a/ceammc/ext/doc/conv.str2sec-help.pd +++ b/ceammc/ext/doc/conv.str2sec-help.pd @@ -42,7 +42,7 @@ Type: float. Default value: -1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 538 library: ceammc v0.9.4; +#X text 10 538 library: ceammc v0.9.6; #X text 579 550 see also:; #X obj 653 550 conv.sec2str; #N canvas 10 557 400 290 info 0; @@ -50,7 +50,7 @@ Type: float. Default value: -1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 conv.str2sec; #X text 10 76 category:; diff --git a/ceammc/ext/doc/data.copy-help.pd b/ceammc/ext/doc/data.copy-help.pd index 84552f7210..076a41577f 100644 --- a/ceammc/ext/doc/data.copy-help.pd +++ b/ceammc/ext/doc/data.copy-help.pd @@ -44,13 +44,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 605 library: ceammc v0.9.4; +#X text 10 605 library: ceammc v0.9.6; #N canvas 10 624 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.copy; #X text 10 76 category:; diff --git a/ceammc/ext/doc/data.dict-help.pd b/ceammc/ext/doc/data.dict-help.pd index 1c7ae65fec..42b74ca99b 100644 --- a/ceammc/ext/doc/data.dict-help.pd +++ b/ceammc/ext/doc/data.dict-help.pd @@ -25,86 +25,93 @@ are supported: [a: [A:1 B:2]]).; #X obj 50 302 data.dict \[tempo: 120 title: "New Masterpiece"\]; #X obj 50 331 ui.display @display_type 1; #X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 385 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 385 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 420 @empty; -#X text 245 420 (readonly) Get 1 if dict is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 462 @keys; -#X text 245 462 (readonly) Get keys of dictionary. Type: list.; -#X msg 110 491 @size; -#X text 245 491 (readonly) Get number of entries in dictionary. Type: +#X text 110 420 Left-click; +#X text 285 420 open data editor.; +#X obj 20 450 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 455 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 490 @empty; +#X text 245 490 (readonly) Get 1 if dict is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 532 @keys; +#X text 245 532 (readonly) Get keys of dictionary. Type: list.; +#X msg 110 561 @size; +#X text 245 561 (readonly) Get number of entries in dictionary. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 548 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 613 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 618 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 583 add; -#X text 245 583 adds entry to dictionary. Arguments are:; -#X obj 255 606 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 606 KEY: entry key. Type: symbol.; -#X obj 255 629 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 629 VAL: single value or list. Type: list.; -#X msg 110 654 clear; -#X text 245 654 removes all dict values. No output.; -#X msg 110 681 get_key; -#X text 245 681 get entry from dictionary. Arguments are:; -#X obj 255 704 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 704 KEY: entry key. Type: symbol.; -#X msg 110 729 read; -#X text 245 729 read dict from JSON file. Arguments are:; -#X obj 255 752 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 752 PATH: file path. Type: symbol.; -#X msg 110 777 remove; -#X text 245 777 remove entry from dictionary. Arguments are:; -#X obj 255 800 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 800 KEY: entry key. Type: symbol.; -#X msg 110 825 set; -#X text 245 825 set dict content without output.; -#X msg 110 852 set_key; -#X text 245 852 change entry in dictionary. If it's not exists \, do +#X msg 110 653 add; +#X text 245 653 adds entry to dictionary. Arguments are:; +#X obj 255 676 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 676 KEY: entry key. Type: symbol.; +#X obj 255 699 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 699 VAL: single value or list. Type: list.; +#X msg 110 724 choose; +#X text 245 724 choose random key and output it.; +#X msg 110 751 clear; +#X text 245 751 removes all dict values. No output.; +#X msg 110 778 get_key; +#X text 245 778 get entry from dictionary. Arguments are:; +#X obj 255 801 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 801 KEY: entry key. Type: symbol.; +#X msg 110 826 read; +#X text 245 826 read dict from JSON file. Arguments are:; +#X obj 255 849 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 849 PATH: file path. Type: symbol.; +#X msg 110 874 remove; +#X text 245 874 remove entry from dictionary. Arguments are:; +#X obj 255 897 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 897 KEY: entry key. Type: symbol.; +#X msg 110 922 set; +#X text 245 922 set dict content without output.; +#X msg 110 949 set_key; +#X text 245 949 change entry in dictionary. If it's not exists \, do nothing. Arguments are:; -#X obj 255 890 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 890 KEY: key. Type: symbol.; -#X obj 255 913 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 913 VAL: single value or list. Type: list.; -#X msg 110 938 write; -#X text 245 938 write dict as JSON file. Arguments are:; -#X obj 255 961 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 961 PATH: file path. Type: symbol.; -#X msg 110 986 [....]; -#X text 245 986 sets new content without output.; -#X obj 20 1023 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1028 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 987 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 987 KEY: key. Type: symbol.; +#X obj 255 1010 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1010 VAL: single value or list. Type: list.; +#X msg 110 1035 write; +#X text 245 1035 write dict as JSON file. Arguments are:; +#X obj 255 1058 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1058 PATH: file path. Type: symbol.; +#X msg 110 1083 [....]; +#X text 245 1083 sets new content without output.; +#X obj 20 1120 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1125 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1029 1\.; -#X text 150 1029 *bang*; -#X text 245 1029 output current dictionary value.; -#X text 150 1049 *list*; -#X text 245 1049 set dict from list. Key-value pairs are expected. +#X text 110 1126 1\.; +#X text 150 1126 *bang*; +#X text 245 1126 output current dictionary value.; +#X text 150 1146 *list*; +#X text 245 1146 set dict from list. Key-value pairs are expected. [1 2 3 4( becames dict with keys: 1 and 3 \, values: 2 and 4\. No output.; -#X text 150 1084 *data:dict*; -#X text 245 1084 set and output new dict.; -#X obj 20 1114 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1119 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1181 *data:dict*; +#X text 245 1181 set and output new dict.; +#X obj 20 1211 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1216 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1120 1\.; -#X text 245 1120 output dictionary.; +#X text 110 1217 1\.; +#X text 245 1217 output dictionary.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 1170 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1173 library: ceammc v0.9.4; -#X text 521 1185 see also:; -#X obj 595 1185 data.set; -#X obj 668 1185 data.mlist; -#N canvas 10 1192 400 290 info 0; +#X obj 1 1267 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1270 library: ceammc v0.9.6; +#X text 521 1282 see also:; +#X obj 595 1282 data.set; +#X obj 668 1282 data.mlist; +#N canvas 10 1289 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.dict; #X text 10 76 category:; @@ -123,7 +130,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1192 pd info; +#X restore 10 1289 pd info; #X connect 15 0 16 0; #X connect 16 0 18 0; #X connect 8 0 19 0; diff --git a/ceammc/ext/doc/data.dict.pddoc b/ceammc/ext/doc/data.dict.pddoc index 8dbe78a063..32c507329a 100644 --- a/ceammc/ext/doc/data.dict.pddoc +++ b/ceammc/ext/doc/data.dict.pddoc @@ -25,11 +25,15 @@ Syntax: [key1: value key2 : "with space"]. Nested dictionaries are supported: [a: [A:1 B:2]]). + + open data editor + - keys of dictionary - 1 if dict is - empty, otherwise 0 - number of + keys of + dictionary + 1 if dict is empty, + otherwise 0 + number of entries in dictionary @@ -39,6 +43,7 @@ removes all dict values. No output get entry from dictionary entry key + choose random key and output it change entry in dictionary. If it's not exists, do nothing. key single value or list diff --git a/ceammc/ext/doc/data.fifo-help.pd b/ceammc/ext/doc/data.fifo-help.pd index 93960840a5..db442d7b44 100644 --- a/ceammc/ext/doc/data.fifo-help.pd +++ b/ceammc/ext/doc/data.fifo-help.pd @@ -29,15 +29,15 @@ first value in queue.; -49933 0; #X text 110 378 1\.; #X text 150 378 int; -#X obj 246 379 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 378 size: if specified \, creates fixed-size queue. Value +#X obj 246 379 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 378 SIZE: if specified \, creates fixed-size queue. Value '0' means default size (1024). Type: int. Min value: 0; #X obj 20 423 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 428 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 463 @empty; -#X text 245 463 (readonly) Get if queue is empty. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 463 (readonly) Get if queue is empty. Type: bool. Default +value: 1\.; #X msg 110 505 @filled; #X text 245 505 (readonly) Get current number of elements in queue. Type: int. Default value: 0\. Min value: 0\.; @@ -78,7 +78,7 @@ any) are silently removed. Type: int. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 927 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 930 library: ceammc v0.9.4; +#X text 10 930 library: ceammc v0.9.6; #X text 601 942 see also:; #X obj 675 942 data.list; #N canvas 10 949 400 290 info 0; @@ -86,7 +86,7 @@ any) are silently removed. Type: int. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.fifo; #X text 10 76 category:; diff --git a/ceammc/ext/doc/data.fifo.pddoc b/ceammc/ext/doc/data.fifo.pddoc index eb6eb2604a..99a21766d7 100644 --- a/ceammc/ext/doc/data.fifo.pddoc +++ b/ceammc/ext/doc/data.fifo.pddoc @@ -21,7 +21,7 @@ exceed this limit, outputs and removes first value in queue. - if specified, creates fixed-size queue. + if specified, creates fixed-size queue. Value '0' means default size (1024) @@ -34,13 +34,13 @@ - if queue is + if queue is empty - current + current number of elements in queue size of queue - number of + number of elements you can add to queue until it full diff --git a/ceammc/ext/doc/data.float-help.pd b/ceammc/ext/doc/data.float-help.pd index 8449b1c21a..8a930871b8 100644 --- a/ceammc/ext/doc/data.float-help.pd +++ b/ceammc/ext/doc/data.float-help.pd @@ -21,8 +21,8 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 VAL: set initial value. Type: float.; +#X obj 246 352 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 VALUE: set initial value. Type: float.; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -63,7 +63,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 777 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 780 library: ceammc v0.9.4; +#X text 10 780 library: ceammc v0.9.6; #X text 608 792 see also:; #X obj 682 792 data.int; #N canvas 10 799 400 290 info 0; @@ -71,7 +71,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/data.float.pddoc b/ceammc/ext/doc/data.float.pddoc index 8b3ad52b7e..2c4bc37d12 100644 --- a/ceammc/ext/doc/data.float.pddoc +++ b/ceammc/ext/doc/data.float.pddoc @@ -21,10 +21,10 @@ - set initial value + set initial value - current + current value diff --git a/ceammc/ext/doc/data.int-help.pd b/ceammc/ext/doc/data.int-help.pd index 38b2545ee0..6bbe56ba80 100644 --- a/ceammc/ext/doc/data.int-help.pd +++ b/ceammc/ext/doc/data.int-help.pd @@ -21,8 +21,8 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 int; -#X obj 246 352 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 INT: set initial value. Type: int.; +#X obj 246 352 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 VALUE: set initial value. Type: int.; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -63,7 +63,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 777 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 780 library: ceammc v0.9.4; +#X text 10 780 library: ceammc v0.9.6; #X text 594 792 see also:; #X obj 668 792 data.float; #N canvas 10 799 400 290 info 0; @@ -71,7 +71,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/data.int.pddoc b/ceammc/ext/doc/data.int.pddoc index 4de2b094f8..e4327b4425 100644 --- a/ceammc/ext/doc/data.int.pddoc +++ b/ceammc/ext/doc/data.int.pddoc @@ -21,10 +21,11 @@ - set initial value + set initial value - current value + current + value sets new value without output diff --git a/ceammc/ext/doc/data.list-help.pd b/ceammc/ext/doc/data.list-help.pd index ba5c9f86b1..17a240dbb7 100644 --- a/ceammc/ext/doc/data.list-help.pd +++ b/ceammc/ext/doc/data.list-help.pd @@ -20,15 +20,15 @@ #X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 323 1\.; -#X text 150 323 any; -#X obj 246 324 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 X: initial list values. Type: any.; +#X text 150 323 list; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 VALUE: initial list values. Type: list.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 393 @empty; #X text 245 393 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; +Type: bool. Default value: 1\.; #X msg 110 435 @value; #X text 245 435 Get/Set current value. Type: list.; #X msg 110 464 @size; @@ -41,81 +41,90 @@ Default value: 0\. Min value: 0\.; #X text 245 556 adds values to the end of the list. Arguments are:; #X obj 255 579 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; #X text 255 579 VAL: appended value. Type: atom.; -#X msg 110 604 choose; -#X text 245 604 choose random element in list and output it.; -#X msg 110 631 clear; -#X text 245 631 removes all list elements.; -#X msg 110 658 fill; -#X text 245 658 fills with specified value. Arguments are:; -#X obj 255 681 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 681 VAL: fill value. Type: atom.; -#X msg 110 706 insert; -#X text 245 706 inserts values to the specified position. Arguments +#X msg 110 604 at; +#X text 245 604 outputs atom at the specified position. Arguments are:; +#X obj 255 627 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 627 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 667 back; +#X text 245 667 output last list element.; +#X msg 110 694 choose; +#X text 245 694 choose random element in list and output it.; +#X msg 110 721 clear; +#X text 245 721 removes all list elements.; +#X msg 110 748 fill; +#X text 245 748 fills with specified value. Arguments are:; +#X obj 255 771 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 771 VAL: fill value. Type: atom.; +#X msg 110 796 front; +#X text 245 796 output first list element.; +#X msg 110 823 insert; +#X text 245 823 inserts values to the specified position. Arguments are:; -#X obj 255 729 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 729 IDX: insert position. Type: int.; -#X obj 255 752 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 752 VAL: value. Type: atom.; -#X msg 110 777 pop; -#X text 245 777 removes last list element.; -#X msg 110 804 prepend; -#X text 245 804 inserts values to the list beginning. Arguments are:; -#X obj 255 827 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 827 VAL: prepended value. Type: atom.; -#X msg 110 852 remove; -#X text 245 852 removes specified element. Arguments are:; -#X obj 255 875 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 875 IDX: element index. Type: int.; -#X msg 110 900 reverse; -#X text 245 900 reverses list.; -#X msg 110 927 set; -#X text 245 927 sets new list without output. Arguments are:; -#X obj 255 950 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 950 LIST: new list content. Type: list.; -#X msg 110 975 shuffle; -#X text 245 975 put elements in random order.; -#X msg 110 1002 sort; -#X text 245 1002 sorts list.; -#X msg 110 1029 dump; -#X text 245 1029 dump object info to Pd window.; -#X obj 20 1066 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1071 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 846 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 846 IDX: insert position. Type: int.; +#X obj 255 869 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 869 VAL: value. Type: atom.; +#X msg 110 894 pop; +#X text 245 894 removes last list element.; +#X msg 110 921 prepend; +#X text 245 921 inserts values to the list beginning. Arguments are:; +#X obj 255 944 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 944 VAL: prepended value. Type: atom.; +#X msg 110 969 remove; +#X text 245 969 removes specified element. Arguments are:; +#X obj 255 992 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 992 IDX: element index. Type: int.; +#X msg 110 1017 reverse; +#X text 245 1017 reverses list.; +#X msg 110 1044 set; +#X text 245 1044 sets new list without output. Arguments are:; +#X obj 255 1067 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1067 LIST: new list content. Type: list.; +#X msg 110 1092 shuffle; +#X text 245 1092 put elements in random order.; +#X msg 110 1119 sort; +#X text 245 1119 sorts list.; +#X msg 110 1146 dump; +#X text 245 1146 dump object info to Pd window.; +#X obj 20 1183 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1188 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1072 1\.; -#X text 150 1072 *bang*; -#X text 245 1072 output list content.; -#X text 150 1092 *float*; -#X text 245 1092 outputs list element at specified position. Negative +#X text 110 1189 1\.; +#X text 150 1189 *bang*; +#X text 245 1189 output list content.; +#X text 150 1209 *float*; +#X text 245 1209 outputs list element at specified position. Negative indexes are supported.; -#X text 150 1127 *symbol*; -#X text 245 1127 set new list with single symbol element and output.; -#X text 150 1147 *list*; -#X text 245 1147 set new list content and output.; -#X text 150 1167 *data:mlist*; -#X text 245 1167 same as list.; -#X text 110 1187 2\.; -#X text 150 1187 *list*; -#X text 245 1187 sets new list without output.; -#X obj 20 1217 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1222 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1244 *symbol*; +#X text 245 1244 set new list with single symbol element and output.; +#X text 150 1264 *list*; +#X text 245 1264 set new list content and output.; +#X text 150 1284 *data:mlist*; +#X text 245 1284 same as list.; +#X text 110 1304 2\.; +#X text 150 1304 *list*; +#X text 245 1304 sets new list without output.; +#X obj 20 1334 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1339 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1223 1\.; -#X text 245 1223 output list or list elements.; +#X text 110 1340 1\.; +#X text 245 1340 output list or list elements.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 1273 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1276 library: ceammc v0.9.4; -#X text 601 1288 see also:; -#X obj 675 1288 data.fifo; -#N canvas 10 1295 400 290 info 0; +#X obj 1 1390 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1393 library: ceammc v0.9.6; +#X text 601 1405 see also:; +#X obj 675 1405 data.fifo; +#N canvas 10 1412 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.list; #X text 10 76 category:; @@ -134,7 +143,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1295 pd info; +#X restore 10 1412 pd info; #X connect 6 0 10 0; #X connect 7 0 11 0; #X connect 4 0 12 0; diff --git a/ceammc/ext/doc/data.list.pddoc b/ceammc/ext/doc/data.list.pddoc index ab3467d854..5827b9144b 100644 --- a/ceammc/ext/doc/data.list.pddoc +++ b/ceammc/ext/doc/data.list.pddoc @@ -17,20 +17,25 @@ - initial list values + initial list values - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list - current value + current value adds values to the end of the list appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/data.mlist-help.pd b/ceammc/ext/doc/data.mlist-help.pd index 25278d8109..3134f3a20c 100644 --- a/ceammc/ext/doc/data.mlist-help.pd +++ b/ceammc/ext/doc/data.mlist-help.pd @@ -22,98 +22,112 @@ of 1 \, 2 and 3; #X obj 50 295 data.mlist (1 2 3 (1 3 3)); #X obj 50 324 ui.d @display_type 1; #X obj 20 373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 378 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 20 378 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 413 1\.; -#X text 150 413 any; -#X obj 246 414 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 413 X: initial list values in (). For example: (1 2 3 (1 +#X text 110 413 Left-click; +#X text 285 413 open data editor.; +#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 448 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 483 1\.; +#X text 150 483 any; +#X obj 246 484 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 483 X: initial list values in (). For example: (1 2 3 (1 2) 4). Type: any.; -#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 463 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 528 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 533 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 498 @empty; -#X text 245 498 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 540 @size; -#X text 245 540 (readonly) Get number of elements in list. Type: int. +#X msg 110 568 @empty; +#X text 245 568 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 610 @size; +#X text 245 610 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 597 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 662 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 667 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 632 append; -#X text 245 632 adds values to the end of the list. Arguments are:; -#X obj 255 655 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 655 VAL: appended value. Type: atom.; -#X msg 110 680 choose; -#X text 245 680 choose random element in list and output it.; -#X msg 110 707 clear; -#X text 245 707 removes all list elements.; -#X msg 110 734 fill; -#X text 245 734 fills with specified value. Arguments are:; -#X obj 255 757 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 757 VAL: fill value. Type: atom.; -#X msg 110 782 insert; -#X text 245 782 inserts values to the specified position. Arguments +#X msg 110 702 append; +#X text 245 702 adds values to the end of the list. Arguments are:; +#X obj 255 725 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 725 VAL: appended value. Type: atom.; +#X msg 110 750 at; +#X text 245 750 outputs atom at the specified position. Arguments are:; +#X obj 255 773 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 773 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 813 back; +#X text 245 813 output last list element.; +#X msg 110 840 choose; +#X text 245 840 choose random element in list and output it.; +#X msg 110 867 clear; +#X text 245 867 removes all list elements.; +#X msg 110 894 fill; +#X text 245 894 fills with specified value. Arguments are:; +#X obj 255 917 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 917 VAL: fill value. Type: atom.; +#X msg 110 942 front; +#X text 245 942 output first list element.; +#X msg 110 969 insert; +#X text 245 969 inserts values to the specified position. Arguments are:; -#X obj 255 805 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 805 IDX: insert position. Type: int.; -#X obj 255 828 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 828 VAL: value. Type: atom.; -#X msg 110 853 pop; -#X text 245 853 removes last list element.; -#X msg 110 880 prepend; -#X text 245 880 inserts values to the list beginning. Arguments are:; -#X obj 255 903 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 903 VAL: prepended value. Type: atom.; -#X msg 110 928 remove; -#X text 245 928 removes specified element. Arguments are:; -#X obj 255 951 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 951 IDX: element index. Type: int.; -#X msg 110 976 reverse; -#X text 245 976 reverses list.; -#X msg 110 1003 set; -#X text 245 1003 sets new list without output. Arguments are:; -#X obj 255 1026 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1026 LIST: new list content. Type: list.; -#X msg 110 1051 shuffle; -#X text 245 1051 put elements in random order.; -#X msg 110 1078 sort; -#X text 245 1078 sorts list.; -#X msg 110 1105 (....); -#X text 245 1105 sets new list without output.; -#X msg 110 1132 dump; -#X text 245 1132 dump object info to Pd window.; -#X obj 20 1169 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1174 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 992 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 992 IDX: insert position. Type: int.; +#X obj 255 1015 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1015 VAL: value. Type: atom.; +#X msg 110 1040 pop; +#X text 245 1040 removes last list element.; +#X msg 110 1067 prepend; +#X text 245 1067 inserts values to the list beginning. Arguments are:; +#X obj 255 1090 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1090 VAL: prepended value. Type: atom.; +#X msg 110 1115 remove; +#X text 245 1115 removes specified element. Arguments are:; +#X obj 255 1138 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1138 IDX: element index. Type: int.; +#X msg 110 1163 reverse; +#X text 245 1163 reverses list.; +#X msg 110 1190 set; +#X text 245 1190 sets new list without output. Arguments are:; +#X obj 255 1213 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1213 LIST: new list content. Type: list.; +#X msg 110 1238 shuffle; +#X text 245 1238 put elements in random order.; +#X msg 110 1265 sort; +#X text 245 1265 sorts list.; +#X msg 110 1292 (....); +#X text 245 1292 sets new list without output.; +#X msg 110 1319 dump; +#X text 245 1319 dump object info to Pd window.; +#X obj 20 1356 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1361 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1175 1\.; -#X text 150 1175 *bang*; -#X text 245 1175 output current list value.; -#X text 150 1195 *symbol*; -#X text 245 1195 set new list with single symbol element and output.; -#X text 150 1215 *list*; -#X text 245 1215 sets new list and output it.; -#X obj 20 1245 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1250 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1362 1\.; +#X text 150 1362 *bang*; +#X text 245 1362 output current list value.; +#X text 150 1382 *symbol*; +#X text 245 1382 set new list with single symbol element and output.; +#X text 150 1402 *list*; +#X text 245 1402 sets new list and output it.; +#X obj 20 1432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1437 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1251 1\.; -#X text 245 1251 output list or list elements.; +#X text 110 1438 1\.; +#X text 245 1438 output list or list elements.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 1301 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1304 library: ceammc v0.9.4; -#X text 601 1316 see also:; -#X obj 675 1316 data.list; -#N canvas 10 1323 400 290 info 0; +#X obj 1 1488 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1491 library: ceammc v0.9.6; +#X text 601 1503 see also:; +#X obj 675 1503 data.list; +#N canvas 10 1510 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.mlist; #X text 10 76 category:; @@ -132,7 +146,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1323 pd info; +#X restore 10 1510 pd info; #X connect 9 0 12 0; #X connect 10 0 12 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/data.mlist.pddoc b/ceammc/ext/doc/data.mlist.pddoc index 0274fb8813..c55e65d4d1 100644 --- a/ceammc/ext/doc/data.mlist.pddoc +++ b/ceammc/ext/doc/data.mlist.pddoc @@ -27,14 +27,17 @@ Nested lists: (1 2 3 (nested liat values)) Symbols with spaces: ("single item list") + + open data editor + initial list values in (). For example: (1 2 3 (1 2) 4) - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list @@ -42,6 +45,11 @@ appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/data.set-help.pd b/ceammc/ext/doc/data.set-help.pd index 6448d132ee..364c3bc1f4 100644 --- a/ceammc/ext/doc/data.set-help.pd +++ b/ceammc/ext/doc/data.set-help.pd @@ -23,64 +23,64 @@ -49933 0; #X msg 110 364 @empty; #X text 245 364 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 406 @value; -#X text 245 406 Get/Set current value. Type: list.; -#X msg 110 435 @size; -#X text 245 435 (readonly) Get number of elements in list. Type: int. +Type: bool. Default value: 1\.; +#X msg 110 406 @size; +#X text 245 406 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 492 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 463 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 527 add; -#X text 245 527 add values to the set. Arguments are:; -#X obj 255 550 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 550 VAL: added values. Type: list.; -#X msg 110 575 clear; -#X text 245 575 removes all set elements.; -#X msg 110 602 remove; -#X text 245 602 remove elements from the set. Arguments are:; -#X obj 255 625 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 625 VAL: elements. Type: list.; -#X msg 110 650 set; -#X text 245 650 sets new set content without output. Arguments are:; -#X obj 255 673 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 673 LIST: new set content. Type: list.; -#X obj 20 708 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 713 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 498 add; +#X text 245 498 add values to the set. Arguments are:; +#X obj 255 521 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 521 VAL: added values. Type: list.; +#X msg 110 546 choose; +#X text 245 546 choose random element and output it.; +#X msg 110 573 clear; +#X text 245 573 removes all set elements.; +#X msg 110 600 remove; +#X text 245 600 remove elements from the set. Arguments are:; +#X obj 255 623 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 623 VAL: elements. Type: list.; +#X msg 110 648 set; +#X text 245 648 sets new set content without output. Arguments are:; +#X obj 255 671 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 671 LIST: new set content. Type: list.; +#X obj 20 706 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 711 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 714 1\.; -#X text 150 714 *bang*; -#X text 245 714 output set content.; -#X text 150 734 *float*; -#X text 245 734 adds new element to set \, no output.; -#X text 150 754 *symbol*; -#X text 245 754 adds new element to set \, no output.; -#X text 150 774 *list*; -#X text 245 774 adds new elements to set \, no output.; -#X text 150 794 *data:set*; -#X text 245 794 set new set content and output.; -#X obj 20 824 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 829 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 712 1\.; +#X text 150 712 *bang*; +#X text 245 712 output set content.; +#X text 150 732 *float*; +#X text 245 732 adds new element to set \, no output.; +#X text 150 752 *symbol*; +#X text 245 752 adds new element to set \, no output.; +#X text 150 772 *list*; +#X text 245 772 adds new elements to set \, no output.; +#X text 150 792 *data:set*; +#X text 245 792 set new set content and output.; +#X obj 20 822 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 827 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 830 1\.; -#X text 245 830 set output.; +#X text 110 828 1\.; +#X text 245 828 set output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 880 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 883 library: ceammc v0.9.4; -#X text 521 895 see also:; -#X obj 595 895 set->list; -#X obj 675 895 data.list; -#N canvas 10 902 400 290 info 0; +#X obj 1 878 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 881 library: ceammc v0.9.6; +#X text 521 893 see also:; +#X obj 595 893 set->list; +#X obj 675 893 data.list; +#N canvas 10 900 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.set; #X text 10 76 category:; @@ -99,7 +99,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 902 pd info; +#X restore 10 900 pd info; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/data.set.pddoc b/ceammc/ext/doc/data.set.pddoc index cdc95c9d83..df704d9a23 100644 --- a/ceammc/ext/doc/data.set.pddoc +++ b/ceammc/ext/doc/data.set.pddoc @@ -21,11 +21,10 @@ set elements - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list - current value add values to the set @@ -35,6 +34,7 @@ elements sets new set content without output new set content + choose random element and output it diff --git a/ceammc/ext/doc/data.set2list-help.pd b/ceammc/ext/doc/data.set2list-help.pd index e57f8afcec..51314e300a 100644 --- a/ceammc/ext/doc/data.set2list-help.pd +++ b/ceammc/ext/doc/data.set2list-help.pd @@ -18,40 +18,38 @@ use @sort flag to get sorted output; #X obj 50 245 data.set a b c d; #X obj 50 274 set->list; #X obj 165 274 set->list @sort; -#X obj 50 302 msg set; -#X obj 165 302 msg set; -#X msg 50 331 ; -#X msg 165 331 ; -#X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 385 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 302 ui.dt; +#X obj 165 302 ui.dt; +#X obj 20 351 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 420 @sort; -#X text 245 420 if specified - sort output list. Default value: 0\.; -#X obj 20 459 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 464 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 391 @sort; +#X text 245 391 if specified - sort output list. Default value: 0\.; +#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 465 1\.; -#X text 245 465 input set.; -#X obj 20 495 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 500 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 436 1\.; +#X text 245 436 input set.; +#X obj 20 466 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 471 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 501 1\.; -#X text 245 501 output list.; +#X text 110 472 1\.; +#X text 245 472 output list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 551 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 554 library: ceammc v0.9.4; -#X text 608 566 see also:; -#X obj 682 566 data.set; -#N canvas 10 573 400 290 info 0; +#X obj 1 522 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 525 library: ceammc v0.9.6; +#X text 608 537 see also:; +#X obj 682 537 data.set; +#N canvas 10 544 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 data.set2list; #X text 10 76 category:; @@ -70,7 +68,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 573 pd info; +#X restore 10 544 pd info; #X connect 8 0 12 0; #X connect 9 0 12 0; #X connect 10 0 12 0; @@ -78,6 +76,4 @@ https://github.com/uliss/pure-data; #X connect 12 0 13 0; #X connect 12 0 14 0; #X connect 13 0 15 0; -#X connect 14 0 16 0; -#X connect 15 0 17 0; -#X connect 16 0 18 0; \ No newline at end of file +#X connect 14 0 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/data.set2list.pddoc b/ceammc/ext/doc/data.set2list.pddoc index ea7ce7932c..ab1f840a16 100644 --- a/ceammc/ext/doc/data.set2list.pddoc +++ b/ceammc/ext/doc/data.set2list.pddoc @@ -25,8 +25,8 @@ output - if specified - sort output - list + if specified - sort + output list @@ -49,9 +49,7 @@ | | [set->list] [set->list @sort] | | -[msg set] [msg set] -| | -[ ( [ ( +[ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/dict.contains-help.pd b/ceammc/ext/doc/dict.contains-help.pd index b616bd712d..1e38ed280d 100644 --- a/ceammc/ext/doc/dict.contains-help.pd +++ b/ceammc/ext/doc/dict.contains-help.pd @@ -15,8 +15,8 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 list; -#X obj 246 295 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 KEY: checked keys. Type: list.; +#X obj 246 295 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 KEYS: checked keys. Type: list.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 530 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 533 library: ceammc v0.9.4; +#X text 10 533 library: ceammc v0.9.6; #X text 521 545 see also:; #X obj 595 545 data.dict; #X obj 675 545 dict.keys; @@ -52,7 +52,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.contains; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.contains.pddoc b/ceammc/ext/doc/dict.contains.pddoc index 096cd795b2..13d0f79a90 100644 --- a/ceammc/ext/doc/dict.contains.pddoc +++ b/ceammc/ext/doc/dict.contains.pddoc @@ -18,10 +18,10 @@ - checked keys + checked keys - checked keys + checked keys diff --git a/ceammc/ext/doc/dict.each-help.pd b/ceammc/ext/doc/dict.each-help.pd index 0df83dac97..21e9638c66 100644 --- a/ceammc/ext/doc/dict.each-help.pd +++ b/ceammc/ext/doc/dict.each-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.each; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.from_list-help.pd b/ceammc/ext/doc/dict.from_list-help.pd index 6a6bb9d667..cf067bdf07 100644 --- a/ceammc/ext/doc/dict.from_list-help.pd +++ b/ceammc/ext/doc/dict.from_list-help.pd @@ -46,7 +46,7 @@ Default value: 2\. Min value: 2\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 563 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 566 library: ceammc v0.9.4; +#X text 10 566 library: ceammc v0.9.6; #X text 601 578 see also:; #X obj 675 578 data.dict; #N canvas 10 585 400 290 info 0; @@ -54,7 +54,7 @@ Default value: 2\. Min value: 2\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.from_list; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.get-help.pd b/ceammc/ext/doc/dict.get-help.pd index 50dcca7b00..36b939600c 100644 --- a/ceammc/ext/doc/dict.get-help.pd +++ b/ceammc/ext/doc/dict.get-help.pd @@ -24,40 +24,41 @@ -49933 0; #X msg 110 421 @default; #X text 245 421 Get/Set default value when key is not found in dictionary. -If not specified no output is performed. Type: atom.; -#X msg 110 463 @keys; -#X text 245 463 Get/Set extracted keys. Type: list.; -#X obj 20 502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 507 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +If not specified no output is performed. Type: atom. Default value: +null.; +#X msg 110 478 @keys; +#X text 245 478 (initonly) Get/Set extracted keys. Type: list.; +#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 522 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 508 1\.; -#X text 150 508 *data:dict*; -#X text 245 508 input dictionary.; -#X obj 20 538 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 543 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 523 1\.; +#X text 150 523 *data:dict*; +#X text 245 523 input dictionary.; +#X obj 20 553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 558 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 544 1\.; -#X text 245 544 first key output.; -#X text 110 564 ....; -#X text 245 564 ... key output.; -#X text 110 584 n.; -#X text 245 584 nth key output.; +#X text 110 559 1\.; +#X text 245 559 first key output.; +#X text 110 579 ....; +#X text 245 579 ... key output.; +#X text 110 599 n.; +#X text 245 599 nth key output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; -#X obj 1 634 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 637 library: ceammc v0.9.4; -#X text 514 649 see also:; -#X obj 588 649 data.dict; -#X obj 668 649 flow.route; -#N canvas 10 656 400 290 info 0; +#X obj 1 649 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 652 library: ceammc v0.9.6; +#X text 514 664 see also:; +#X obj 588 664 data.dict; +#X obj 668 664 flow.route; +#N canvas 10 671 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.get; #X text 10 76 category:; @@ -76,7 +77,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 656 pd info; +#X restore 10 671 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/dict.get.pddoc b/ceammc/ext/doc/dict.get.pddoc index bcf2ab57e1..4b4460872a 100644 --- a/ceammc/ext/doc/dict.get.pddoc +++ b/ceammc/ext/doc/dict.get.pddoc @@ -21,9 +21,10 @@ keys - extracted keys - default value when key is not found in - dictionary. If not specified no output is performed. + extracted + keys + default value when key is not + found in dictionary. If not specified no output is performed. diff --git a/ceammc/ext/doc/dict.keys-help.pd b/ceammc/ext/doc/dict.keys-help.pd index 2f33463e02..155ed378bf 100644 --- a/ceammc/ext/doc/dict.keys-help.pd +++ b/ceammc/ext/doc/dict.keys-help.pd @@ -27,7 +27,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 506 520 see also:; #X obj 580 520 data.dict; #X obj 660 520 dict.values; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.keys; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.pass-help.pd b/ceammc/ext/doc/dict.pass-help.pd index 5bdd730255..99f60960d6 100644 --- a/ceammc/ext/doc/dict.pass-help.pd +++ b/ceammc/ext/doc/dict.pass-help.pd @@ -40,7 +40,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 515 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 518 library: ceammc v0.9.4; +#X text 10 518 library: ceammc v0.9.6; #X text 601 530 see also:; #X obj 675 530 data.dict; #N canvas 10 537 400 290 info 0; @@ -48,7 +48,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.pass; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.pass.pddoc b/ceammc/ext/doc/dict.pass.pddoc index 4e15d3f538..4692ab128b 100644 --- a/ceammc/ext/doc/dict.pass.pddoc +++ b/ceammc/ext/doc/dict.pass.pddoc @@ -20,7 +20,7 @@ keys - passed keys + passed keys diff --git a/ceammc/ext/doc/dict.reject-help.pd b/ceammc/ext/doc/dict.reject-help.pd index ab638d7065..1615aae8f2 100644 --- a/ceammc/ext/doc/dict.reject-help.pd +++ b/ceammc/ext/doc/dict.reject-help.pd @@ -41,7 +41,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 515 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 518 library: ceammc v0.9.4; +#X text 10 518 library: ceammc v0.9.6; #X text 601 530 see also:; #X obj 675 530 data.dict; #N canvas 10 537 400 290 info 0; @@ -49,7 +49,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.reject; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.reject.pddoc b/ceammc/ext/doc/dict.reject.pddoc index bcd9bb5086..95d0501ec3 100644 --- a/ceammc/ext/doc/dict.reject.pddoc +++ b/ceammc/ext/doc/dict.reject.pddoc @@ -20,7 +20,7 @@ keys - rejected keys + rejected keys diff --git a/ceammc/ext/doc/dict.size-help.pd b/ceammc/ext/doc/dict.size-help.pd index 4f8687e394..3acc57074c 100644 --- a/ceammc/ext/doc/dict.size-help.pd +++ b/ceammc/ext/doc/dict.size-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 521 520 see also:; #X obj 595 520 data.dict; #X obj 675 520 dict.keys; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.size; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.to_list-help.pd b/ceammc/ext/doc/dict.to_list-help.pd index 33962e0d48..981ef44f34 100644 --- a/ceammc/ext/doc/dict.to_list-help.pd +++ b/ceammc/ext/doc/dict.to_list-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.to_list; #X text 10 76 category:; diff --git a/ceammc/ext/doc/dict.values-help.pd b/ceammc/ext/doc/dict.values-help.pd index 944e8a612b..d1bd19902a 100644 --- a/ceammc/ext/doc/dict.values-help.pd +++ b/ceammc/ext/doc/dict.values-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 434 520 see also:; #X obj 508 520 data.dict; #X obj 588 520 data.mlist; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dict.values; #X text 10 76 category:; diff --git a/ceammc/ext/doc/docs.cmake b/ceammc/ext/doc/docs.cmake index aa927d3364..5719c6753b 100644 --- a/ceammc/ext/doc/docs.cmake +++ b/ceammc/ext/doc/docs.cmake @@ -4,8 +4,11 @@ set(DOC_FILES an.pitchtrack~ an.rms~ an.tempo~ + an.zero~ array.bpm + array.circular array.circular~ + array.convolve array.copy array.do array.each @@ -56,9 +59,9 @@ set(DOC_FILES conv.dbfs2amp conv.dbfs2amp~ conv.degree2key - conv.int2bits conv.edge2bang conv.hex2int + conv.int2bits conv.lin2curve conv.lin2exp conv.lin2lin @@ -68,6 +71,7 @@ set(DOC_FILES conv.ms2bpm conv.ms2samp conv.ms2samp~ + conv.note2guido conv.phase2rad conv.phase2rad~ conv.pitch2midi @@ -83,9 +87,9 @@ set(DOC_FILES conv.sig2float~ conv.str2sec data.copy + data.dict data.fifo data.float - data.dict data.int data.list data.mlist @@ -108,20 +112,19 @@ set(DOC_FILES dyn.limit2~ dyn.limit~ dyn.softclip~ - envelope - env.mix - env.tshift - env.tscale - env.vscale - env.concat env.adsr~ - env.asr~ env.ar~ + env.asr~ + env.concat env.follow~ + env.mix env.smooth~ + env.tscale + env.tshift + env.vscale env2array env2vline - vline2env + envelope expand_env file.size flow.append @@ -152,13 +155,14 @@ set(DOC_FILES flow.pass flow.pass_if flow.pipe + flow.queue flow.record flow.reject flow.reject_if flow.ring flow.route - flow.queue flow.select + flow.seqdelay flow.space flow.speedlim flow.split @@ -166,6 +170,7 @@ set(DOC_FILES flow.sync flow.sync_pack flow.tee~ + flt.a-weight flt.biquad~ flt.bpf12~ flt.bpf24~ @@ -179,8 +184,8 @@ set(DOC_FILES flt.c_lpf~ flt.c_notch flt.c_notch~ - flt.c_pole flt.c_peak~ + flt.c_pole flt.dcblock2~ flt.dcblock~ flt.eq10~ @@ -201,19 +206,22 @@ set(DOC_FILES flt.moog_vcf~ flt.notch~ flt.resonbp~ + flt.resonhp~ + flt.resonlp~ fluid~ function function.call fx.bitdown~ fx.chorus~ - fx.distortion~ + fx.dattorro~ fx.distortion1~ fx.distortion2~ fx.distortion3~ + fx.distortion~ fx.drive~ fx.drone_box~ - fx.echo~ fx.echo2~ + fx.echo~ fx.flanger~ fx.freeverb2~ fx.freeverb~ @@ -221,22 +229,25 @@ set(DOC_FILES fx.granulator~ fx.greyhole~ fx.infrev~ + fx.jcrev~ fx.looper~ - fx.pitchshift~ fx.pitchshift_s~ + fx.pitchshift~ fx.rb_pitchshift~ fx.recho~ fx.room~ + fx.satrev~ fx.sdelay~ fx.secho~ fx.shimmer~ + fx.stutter~ fx.tapiir~ fx.vocoder~ fx.wahwah~ fx.zita_rev1~ gain~ - global.float global.dict + global.float global.int global.list global.mlist @@ -249,19 +260,20 @@ set(DOC_FILES hoa.2d.recomposer~ hoa.2d.rotate~ hoa.2d.wider~ + hoa.@process hoa.in hoa.in~ hoa.out hoa.out~ hoa.process~ hoa.scope~ - hoa.@process hw.apple_smc hw.apple_sms hw.arduino hw.cpu_temp hw.display hw.kbd_light + hw.motu.avb hw.serial is_any is_bang @@ -273,18 +285,20 @@ set(DOC_FILES is_list is_odd is_pointer + is_prop is_symbol lang.faust~ + lang.lua lfo.+pulse~ lfo.+saw~ lfo.+square~ lfo.+tri~ lfo.impulse~ lfo.mosc~ + lfo.pulse~ lfo.saw~ lfo.square~ lfo.tri~ - lfo.pulse~ list.^at list.^contains list.^search @@ -312,16 +326,19 @@ set(DOC_FILES list.integrator list.last list.length + list.map list.max list.mean list.min list.none_of list.normalize + list.pass list.pass_if list.prepend list.product list.range list.reduce + list.reject list.remove list.remove_if list.repack @@ -337,8 +354,8 @@ set(DOC_FILES list.runsum list.search list.separate - list.set list.seq + list.set list.shift list.shuffle list.slice @@ -354,8 +371,8 @@ set(DOC_FILES list.zip live.capture~ loadexpr - local.float local.dict + local.float local.int local.list local.mlist @@ -364,19 +381,19 @@ set(DOC_FILES math.abs math.abs~ math.acos - math.acos~ math.acosh math.acosh~ + math.acos~ math.and math.approx math.asin - math.asin~ math.asinh math.asinh~ + math.asin~ math.atan - math.atan~ math.atanh math.atanh~ + math.atan~ math.binomial math.cabs~ math.carg~ @@ -388,18 +405,18 @@ set(DOC_FILES math.cexp~ math.cmul~ math.cos - math.cos~ math.cosh math.cosh~ + math.cos~ math.div math.e math.erf math.erf~ math.exp - math.exp~ math.exp2 math.exp2~ math.expr + math.exp~ math.floor math.floor~ math.gamma @@ -411,11 +428,11 @@ set(DOC_FILES math.lgamma math.lgamma~ math.log - math.log~ math.log10 math.log10~ math.log2 math.log2~ + math.log~ math.mul math.nan math.nan~ @@ -430,9 +447,9 @@ set(DOC_FILES math.round~ math.sign math.sin - math.sin~ math.sinh math.sinh~ + math.sin~ math.sqrt math.sqrt~ math.squared @@ -444,25 +461,26 @@ set(DOC_FILES math.sync_ge math.sync_gt math.sync_le + math.sync_lshift math.sync_lt math.sync_mod math.sync_mul math.sync_ne math.sync_or + math.sync_rshift math.sync_sub math.sync_xor - math.sync_lshift - math.sync_rshift math.tan - math.tan~ math.tanh math.tanh~ + math.tan~ math.trunc math.trunc~ matrix~ metro.pattern metro.random metro.seq + midi.arp midi.cc midi.clock midi.ctl2str @@ -472,8 +490,10 @@ set(DOC_FILES midi.file midi.kbd midi.key2str + midi.modus midi.oct midi.prg2str + midi.split midi.sustain midi.sysex midi.track @@ -489,10 +509,16 @@ set(DOC_FILES msg.sched music.dur2time music.voice2midi + net.artnet.send net.host2ip + net.http.send + net.osc.receive + net.osc.send + net.osc.server noise.baker noise.clifford noise.collatz + noise.colored~ noise.crackle~ noise.duffing noise.ginger @@ -517,15 +543,15 @@ set(DOC_FILES osc.blit~ osc.impulse~ osc.pulse~ - osc.saw~ osc.saw4~ - osc.sin~ + osc.saw~ osc.sinfb~ + osc.sin~ osc.square~ osc.tri~ pan.cos~ - pan.lin~ pan.linsig~ + pan.lin~ pan.spread~ pan.sqrt~ patch.args @@ -535,13 +561,16 @@ set(DOC_FILES path.basename path.dirname path.exists + path.file path.is_dir path.lsdir + path.monitor path.normalize + path.pattern path.search path.split - plot.hist~ plot.geomspace~ + plot.hist~ plot.linspace~ plot.logspace~ plot.response~ @@ -557,34 +586,38 @@ set(DOC_FILES prop.random prop.set prop.split + proto.feelworld proto.firmata + proto.inscore proto.midi proto.midi.cc proto.midi.sysex + proto.moppy proto.mpv - proto.xtouch_ext proto.sp.alpaca + proto.vlc + proto.whammy + proto.xtouch_ext radio random.atom + random.discrete random.float random.gauss random.int random.linear - random.pw_lin random.pw_const - random.discrete + random.pw_lin replace + risset.gliss + route.any + route.bang route.float + route.list + route.prop + route.random + route.symbol rtree.to_list samp.time~ - set.contains - set.diff - set.equal - set.intersect - set.size - set.symdiff - set.union - sequencer seq.arp seq.bangs seq.counter @@ -593,14 +626,23 @@ set(DOC_FILES seq.nbangs seq.phasor seq.toggles + sequencer + set.contains + set.diff + set.equal + set.intersect + set.size + set.symdiff + set.union sfizz~ snd.file spat.pan4~ spat.pan8~ - spat.zita8~ spat.zita6x8~ + spat.zita8~ speech.flite speech.flite~ + speech.rhvoice~ spring string string.contains @@ -619,22 +661,25 @@ set(DOC_FILES symbol.equal symbol.length symbol.num_compare - symbol2intlist symbol2any + symbol2intlist sync synth.bee3~ synth.birds~ synth.church_bell~ + synth.clap~ synth.dubdub~ synth.dx7~ synth.eguitar~ synth.english_bell~ synth.fgrain~ synth.french_bell~ - synth.harpsichord~ synth.german_bell~ synth.glass_harm~ synth.glitch~ + synth.harpsichord~ + synth.hat~ + synth.kick2~ synth.kick~ synth.ks~ synth.marimba~ @@ -644,21 +689,23 @@ set(DOC_FILES synth.risset_bell~ synth.risset_tone~ synth.russian_bell~ - synth.tube_bell~ synth.shakers~ synth.sitar~ synth.snare~ synth.standard_bell~ + synth.tube_bell~ + synth.voice_fofc~ + synth.voice_fofs~ synth.wurley~ system.colorpanel system.cursor + system.exec + system.exit system.exit system.getenv system.hostname system.memsize system.memused - system.exec - system.exit system.screen_size tl.bang tl.cue @@ -675,36 +722,40 @@ set(DOC_FILES ui.faust~ ui.filter ui.filter~ - ui.gain~ ui.gain2~ + ui.gain~ ui.icon ui.incdec ui.keyboard ui.knob + ui.label + ui.link ui.matrix ui.menu + ui.meter~ ui.midi ui.mouse_filter ui.mouse_route ui.number - ui.label - ui.link ui.number~ ui.plot~ ui.polar ui.preset + ui.radio + ui.rslider ui.scope~ ui.slider ui.slider2d ui.sliders - ui.radio - ui.rslider - ui.tab ui.spectroscope~ + ui.tab ui.toggle - ui.meter~ + vline2env window - xfade~ - xfade2~ xdac~ + xfade2~ + xfade~ + z~ +# array.risset_rythm~ +# proto.midi.casio ) diff --git a/ceammc/ext/doc/dyn.comp2~-help.pd b/ceammc/ext/doc/dyn.comp2~-help.pd index 42b67c7ce9..a3cd1237ed 100644 --- a/ceammc/ext/doc/dyn.comp2~-help.pd +++ b/ceammc/ext/doc/dyn.comp2~-help.pd @@ -9,91 +9,87 @@ #X obj 184 118 ui.dsp~; #X obj 50 147 *~ 100; #X obj 50 176 clip~ 0 1; -#X floatatom 184 176 5 0 0 0 - - -; +#X obj 184 176 ui.hsl 1.5 10 @show_value 1; #X obj 50 205 *~ 20; #X msg 184 205 @ratio \$1; -#X obj 50 234 dyn.comp2~ 3 90 10 100 id; -#X obj 50 262 ui.hgain2~; -#X obj 50 291 dac~; -#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 345 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 248 dyn.comp2~ 3 90 10 100; +#X obj 50 277 ui.hgain2~; +#X obj 50 305 dac~; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 380 1\.; -#X text 150 380 float; -#X obj 246 381 cnv 1 45 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 ratio: compression ratio (1 = no compression \, >1 -means compression). Type: float. Min value: 1; -#X text 110 415 2\.; -#X text 150 415 float; -#X obj 246 416 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 415 threshold(db): level threshold above which compression +#X text 110 394 1\.; +#X text 150 394 float; +#X obj 246 395 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 394 RATIO: compression ratio (1 = no compression \, >1 +means compression). Type: float. Range: 1\...10; +#X text 110 429 2\.; +#X text 150 429 float; +#X obj 246 430 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 429 THRESHOLD(db): level threshold above which compression kicks in (100 dB = max level). Type: float. Range: 0\...100; -#X text 110 450 3\.; -#X text 150 450 float; -#X obj 246 451 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 450 attack(ms): attack time = time constant when level -& compression going up. Type: float.; -#X text 110 485 4\.; -#X text 150 485 float; -#X obj 246 486 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 485 release(ms): release time = time constant coming out -of compression. Type: float.; -#X text 110 520 5\.; -#X text 150 520 symbol; -#X obj 246 521 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 520 ID: object ID for OSC control path. Type: symbol.; -#X obj 20 550 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 555 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 464 3\.; +#X text 150 464 float; +#X obj 246 465 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 464 ATTACK(ms): attack time = time constant when level +& compression going up. Type: float. Range: 1\...100; +#X text 110 499 4\.; +#X text 150 499 float; +#X obj 246 500 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 499 RELEASE(ms): release time = time constant coming out +of compression. Type: float. Range: 1\...500; +#X obj 20 544 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 549 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 590 @active; -#X text 245 590 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 632 @attack; -#X text 245 632 Get/Set time constant when level & compression going +#X msg 110 584 @active; +#X text 245 584 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 613 @attack; +#X text 245 613 Get/Set time constant when level & compression going up. Type: float. Units: ms. Default value: 10\. Range: 1\...100\.; -#X msg 110 674 @ratio; -#X text 245 674 Get/Set compression ratio (1 = no compression \, >1 +#X msg 110 655 @gain; +#X text 245 655 Get/Set make up gain: applied to the signal after the +compression takes place. Type: float. Units: db. Default value: 0\. +Range: -12\...12\.; +#X msg 110 712 @ratio; +#X text 245 712 Get/Set compression ratio (1 = no compression \, >1 means compression). Type: float. Default value: 1\. Range: 1\...10\.; -#X msg 110 731 @release; -#X text 245 731 Get/Set release time = time constant coming out of +#X msg 110 769 @release; +#X text 245 769 Get/Set release time = time constant coming out of compression. Type: float. Units: ms. Default value: 50\. Range: 1\...500\.; -#X msg 110 788 @threshold; -#X text 245 788 Get/Set level threshold above which compression kicks +#X msg 110 826 @threshold; +#X text 245 826 Get/Set level threshold above which compression kicks in (100 dB = max level). Type: float. Units: db. Default value: 100\. Range: 0\...100\.; -#X obj 20 855 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 860 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 893 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 898 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 861 1\.; -#X text 245 861 left input signal.; -#X text 150 881 *bang*; -#X text 245 881 outputs object internal state to rightmost outlet.; -#X text 110 901 2\.; -#X text 245 901 right input signal.; -#X obj 20 931 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 936 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 899 1\.; +#X text 245 899 left input signal.; +#X text 110 919 2\.; +#X text 245 919 right input signal.; +#X obj 20 949 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 954 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 937 1\.; -#X text 245 937 left output signal.; -#X text 110 957 2\.; -#X text 245 957 right output signal.; -#X text 110 977 3\.; -#X text 245 977 information output.; +#X text 110 955 1\.; +#X text 245 955 left output signal.; +#X text 110 975 2\.; +#X text 245 975 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 1027 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1030 library: ceammc v0.9.4; -#X text 600 1042 see also:; -#X obj 674 1042 dyn.comp~; -#N canvas 10 1049 400 290 info 0; +#X obj 1 1025 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1028 library: ceammc v0.9.6; +#X text 600 1040 see also:; +#X obj 674 1040 dyn.comp~; +#N canvas 10 1047 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.comp2~; #X text 10 76 category:; @@ -112,12 +108,13 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1049 pd info; +#X restore 10 1047 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 9 0; #X connect 8 0 10 0; #X connect 9 0 11 0; +#X connect 9 0 11 1; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 11 1 12 1; diff --git a/ceammc/ext/doc/dyn.comp2~.pddoc b/ceammc/ext/doc/dyn.comp2~.pddoc index 84c9210214..83841ebbbb 100644 --- a/ceammc/ext/doc/dyn.comp2~.pddoc +++ b/ceammc/ext/doc/dyn.comp2~.pddoc @@ -17,6 +17,16 @@ dyn.comp~ + + compression ratio (1 = + no compression, >1 means compression) + + level threshold above which compression kicks in (100 dB = max level) + + attack time = time constant when level & compression going up + + release time = time constant coming out of compression + compression ratio (1 = no compression, >1 means compression) @@ -27,24 +37,14 @@ maxvalue="100">time constant when level & compression going up release time = time constant coming out of compression - on/off dsp - processing + make up gain: applied to the signal after the compression takes + place + on/off dsp processing - - compression ratio (1 = no compression, - >1 means compression) - - level threshold above which compression kicks in (100 dB = max level) - attack time = time constant - when level & compression going up - release time = time constant - coming out of compression - object ID for OSC control path - left input signal - outputs object internal state to rightmost outlet right input signal @@ -53,7 +53,6 @@ left output signal right output signal - information output @@ -62,11 +61,12 @@ | [*~ 100] | -[clip~ 0 1] [F] +[clip~ 0 1] [ui.hsl 1.5 10 @show_value 1] | | [*~ 20] [@ratio $1( -| | -[dyn.comp2~ 3 90 10 100 id] +|* | +|* | +[dyn.comp2~ 3 90 10 100] *|* [ui.hgain2~] *|* diff --git a/ceammc/ext/doc/dyn.comp~-help.pd b/ceammc/ext/doc/dyn.comp~-help.pd index 12dcf81a1e..314de5f7ab 100644 --- a/ceammc/ext/doc/dyn.comp~-help.pd +++ b/ceammc/ext/doc/dyn.comp~-help.pd @@ -13,85 +13,81 @@ #X obj 50 176 *~ 4; #X msg 146 205 @ratio \$1; #X msg 261 205 @threshold \$1; -#X obj 50 234 dyn.comp~ 3 40 10 100 id; -#X obj 318 234 ui.dsp~; -#X obj 50 262 ui.hgain~; -#X obj 50 291 dac~; -#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 345 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 248 dyn.comp~ 3 40 10 100; +#X obj 290 248 ui.dsp~; +#X obj 50 277 ui.hgain~; +#X obj 50 305 dac~; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 380 1\.; -#X text 150 380 float; -#X obj 246 381 cnv 1 45 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 ratio: compression ratio (1 = no compression \, >1 -means compression). Type: float. Min value: 1; -#X text 110 415 2\.; -#X text 150 415 float; -#X obj 246 416 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 415 threshold(db): level threshold above which compression +#X text 110 394 1\.; +#X text 150 394 float; +#X obj 246 395 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 394 RATIO: compression ratio (1 = no compression \, >1 +means compression). Type: float. Range: 1\...10; +#X text 110 429 2\.; +#X text 150 429 float; +#X obj 246 430 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 429 THRESHOLD(db): level threshold above which compression kicks in (100 dB = max level). Type: float. Range: 0\...100; -#X text 110 450 3\.; -#X text 150 450 float; -#X obj 246 451 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 450 attack(ms): attack time = time constant when level -& compression going up. Type: float.; -#X text 110 485 4\.; -#X text 150 485 float; -#X obj 246 486 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 485 release(ms): release time = time constant coming out -of compression. Type: float.; -#X text 110 520 5\.; -#X text 150 520 symbol; -#X obj 246 521 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 520 ID: object ID for OSC control path. Type: symbol.; -#X obj 20 550 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 555 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 464 3\.; +#X text 150 464 float; +#X obj 246 465 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 464 ATTACK(ms): attack time = time constant when level +& compression going up. Type: float. Range: 1\...100; +#X text 110 499 4\.; +#X text 150 499 float; +#X obj 246 500 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 499 RELEASE(ms): release time = time constant coming out +of compression. Type: float. Range: 1\...500; +#X obj 20 544 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 549 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 590 @active; -#X text 245 590 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 632 @attack; -#X text 245 632 Get/Set time constant when level & compression going +#X msg 110 584 @active; +#X text 245 584 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 613 @attack; +#X text 245 613 Get/Set time constant when level & compression going up. Type: float. Units: ms. Default value: 10\. Range: 1\...100\.; -#X msg 110 674 @ratio; -#X text 245 674 Get/Set compression ratio (1 = no compression \, >1 +#X msg 110 655 @gain; +#X text 245 655 Get/Set make up gain: applied to the signal after the +compression takes place. Type: float. Units: db. Default value: 0\. +Range: -12\...12\.; +#X msg 110 712 @ratio; +#X text 245 712 Get/Set compression ratio (1 = no compression \, >1 means compression). Type: float. Default value: 1\. Range: 1\...10\.; -#X msg 110 731 @release; -#X text 245 731 Get/Set release time = time constant coming out of +#X msg 110 769 @release; +#X text 245 769 Get/Set release time = time constant coming out of compression. Type: float. Units: ms. Default value: 50\. Range: 1\...500\.; -#X msg 110 788 @threshold; -#X text 245 788 Get/Set level threshold above which compression kicks +#X msg 110 826 @threshold; +#X text 245 826 Get/Set level threshold above which compression kicks in (100 dB = max level). Type: float. Units: db. Default value: 100\. Range: 0\...100\.; -#X obj 20 855 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 860 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 893 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 898 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 861 1\.; -#X text 245 861 input signal.; -#X text 150 881 *bang*; -#X text 245 881 outputs object internal state to rightmost outlet.; -#X obj 20 911 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 916 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 899 1\.; +#X text 245 899 input signal.; +#X obj 20 929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 934 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 917 1\.; -#X text 245 917 output signal.; -#X text 110 937 2\.; -#X text 245 937 information output.; +#X text 110 935 1\.; +#X text 245 935 output compressed signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 987 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 990 library: ceammc v0.9.4; -#X text 593 1002 see also:; -#X obj 667 1002 dyn.comp2~; -#N canvas 10 1009 400 290 info 0; +#X obj 1 985 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 988 library: ceammc v0.9.6; +#X text 593 1000 see also:; +#X obj 667 1000 dyn.comp2~; +#N canvas 10 1007 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.comp~; #X text 10 76 category:; @@ -110,7 +106,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1009 pd info; +#X restore 10 1007 pd info; #X connect 4 0 6 0; #X connect 5 0 6 1; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/dyn.comp~.pddoc b/ceammc/ext/doc/dyn.comp~.pddoc index 3d0d8c4b8a..45e4ba80a1 100644 --- a/ceammc/ext/doc/dyn.comp~.pddoc +++ b/ceammc/ext/doc/dyn.comp~.pddoc @@ -18,15 +18,14 @@ - compression ratio (1 = no compression, - >1 means compression) - + compression ratio (1 = + no compression, >1 means compression) + level threshold above which compression kicks in (100 dB = max level) - attack time = time constant - when level & compression going up - release time = time constant - coming out of compression - object ID for OSC control path + + attack time = time constant when level & compression going up + + release time = time constant coming out of compression compression @@ -38,18 +37,18 @@ maxvalue="100">time constant when level & compression going up release time = time constant coming out of compression - on/off dsp - processing + make up gain: applied to the signal after the compression takes + place + on/off dsp processing input signal - outputs object internal state to rightmost outlet - output signal - information output + output compressed signal @@ -62,7 +61,8 @@ | | | | [@ratio $1( [@threshold $1( | | | -[dyn.comp~ 3 40 10 100 id] [ui.dsp~] +| | | +[dyn.comp~ 3 40 10 100] [ui.dsp~] *|* [ui.hgain~] |\ diff --git a/ceammc/ext/doc/dyn.gate2~-help.pd b/ceammc/ext/doc/dyn.gate2~-help.pd index 93765e89a9..630742f757 100644 --- a/ceammc/ext/doc/dyn.gate2~-help.pd +++ b/ceammc/ext/doc/dyn.gate2~-help.pd @@ -20,77 +20,73 @@ #X text 110 380 1\.; #X text 150 380 float; #X obj 246 381 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 threshold(db): dB level threshold above which gate +#X text 245 380 THRESHOLD(db): dB level threshold above which gate opens (e.g. \, 40 dB). Type: float. Range: 0\...100; #X text 110 415 2\.; #X text 150 415 float; #X obj 246 416 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 415 attack(ms): attack time = time constant (ms) for gate +#X text 245 415 ATTACK(ms): attack time = time constant (ms) for gate to open. Type: float. Range: 0\...500; #X text 110 450 3\.; #X text 150 450 float; -#X obj 246 451 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 450 hold(ms): hold time = time (ms) gate stays open after +#X obj 246 451 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 450 HOLD(ms): hold time = time (ms) gate stays open after signal level < threshold. Type: float. Range: 1\...500; #X text 110 485 4\.; #X text 150 485 float; -#X obj 246 486 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 485 release(ms): release time = time constant (ms) for +#X obj 246 486 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 485 RELEASE(ms): release time = time constant (ms) for gate to close. Type: float. Range: 1\...500; -#X text 110 520 5\.; -#X text 150 520 symbol; -#X obj 246 521 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 520 ID: object ID for OSC control path. Type: symbol.; -#X obj 20 550 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 555 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 530 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 535 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 590 @active; -#X text 245 590 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 632 @attack; -#X text 245 632 Get/Set attack time = time constant (ms) for gate to +#X msg 110 570 @active; +#X text 245 570 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 599 @attack; +#X text 245 599 Get/Set attack time = time constant (ms) for gate to open. Type: float. Units: ms. Default value: 0.1\. Range: 0\...500\.; -#X msg 110 689 @hold; -#X text 245 689 Get/Set hold time = time (ms) gate stays open after +#X msg 110 656 @hold; +#X text 245 656 Get/Set hold time = time (ms) gate stays open after signal level < threshold. Type: float. Units: ms. Default value: 100\. Range: 1\...500\.; -#X msg 110 746 @release; -#X text 245 746 Get/Set release time = time constant (ms) for gate +#X msg 110 713 @release; +#X text 245 713 Get/Set release time = time constant (ms) for gate to close. Type: float. Units: ms. Default value: 20\. Range: 1\...500\.; -#X msg 110 788 @threshold; -#X text 245 788 Get/Set dB level threshold above which gate opens. +#X msg 110 755 @threshold; +#X text 245 755 Get/Set dB level threshold above which gate opens. Type: float. Units: db. Default value: 40\. Range: 0\...100\.; -#X obj 20 840 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 845 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 812 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 846 1\.; -#X text 245 846 left input signal.; -#X text 150 866 *bang*; -#X text 245 866 outputs object internal state to rightmost outlet.; -#X text 110 886 2\.; -#X text 245 886 right input signal.; -#X obj 20 916 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 921 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 813 1\.; +#X text 245 813 left input signal.; +#X text 150 833 *bang*; +#X text 245 833 outputs object internal state to rightmost outlet.; +#X text 110 853 2\.; +#X text 245 853 right input signal.; +#X obj 20 883 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 888 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 922 1\.; -#X text 245 922 left output signal.; -#X text 110 942 2\.; -#X text 245 942 right output signal.; +#X text 110 889 1\.; +#X text 245 889 left output signal.; +#X text 110 909 2\.; +#X text 245 909 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 992 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 995 library: ceammc v0.9.4; -#X text 600 1007 see also:; -#X obj 674 1007 dyn.gate~; -#N canvas 10 1014 400 290 info 0; +#X obj 1 959 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 962 library: ceammc v0.9.6; +#X text 600 974 see also:; +#X obj 674 974 dyn.gate~; +#N canvas 10 981 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.gate2~; #X text 10 76 category:; @@ -109,7 +105,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1014 pd info; +#X restore 10 981 pd info; #X connect 5 0 6 0; #X connect 4 0 7 0; #X connect 6 0 7 1; diff --git a/ceammc/ext/doc/dyn.gate2~.pddoc b/ceammc/ext/doc/dyn.gate2~.pddoc index f462cf8b9b..7715fee752 100644 --- a/ceammc/ext/doc/dyn.gate2~.pddoc +++ b/ceammc/ext/doc/dyn.gate2~.pddoc @@ -27,19 +27,17 @@ threshold release time = time constant (ms) for gate to close - on/off dsp - processing + on/off dsp processing - dB + dB level threshold above which gate opens (e.g., 40 dB) - + attack time = time constant (ms) for gate to open - hold + hold time = time (ms) gate stays open after signal level < threshold - + release time = time constant (ms) for gate to close - object ID for OSC control path diff --git a/ceammc/ext/doc/dyn.gate~-help.pd b/ceammc/ext/doc/dyn.gate~-help.pd index 726aa45288..b44de3420b 100644 --- a/ceammc/ext/doc/dyn.gate~-help.pd +++ b/ceammc/ext/doc/dyn.gate~-help.pd @@ -21,73 +21,69 @@ #X text 110 380 1\.; #X text 150 380 float; #X obj 246 381 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 threshold(db): dB level threshold above which gate +#X text 245 380 THRESHOLD(db): dB level threshold above which gate opens (e.g. \, 40 dB). Type: float. Range: 0\...100; #X text 110 415 2\.; #X text 150 415 float; #X obj 246 416 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 415 attack(ms): attack time = time constant (ms) for gate +#X text 245 415 ATTACK(ms): attack time = time constant (ms) for gate to open. Type: float. Range: 0\...500; #X text 110 450 3\.; #X text 150 450 float; -#X obj 246 451 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 450 hold(ms): hold time = time (ms) gate stays open after +#X obj 246 451 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 450 HOLD(ms): hold time = time (ms) gate stays open after signal level < threshold. Type: float. Range: 1\...500; #X text 110 485 4\.; #X text 150 485 float; -#X obj 246 486 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 485 release(ms): release time = time constant (ms) for +#X obj 246 486 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 485 RELEASE(ms): release time = time constant (ms) for gate to close. Type: float. Range: 1\...500; -#X text 110 520 5\.; -#X text 150 520 symbol; -#X obj 246 521 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 520 ID: object ID for OSC control path. Type: symbol.; -#X obj 20 550 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 555 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 530 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 535 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 590 @active; -#X text 245 590 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 632 @attack; -#X text 245 632 Get/Set attack time = time constant (ms) for gate to +#X msg 110 570 @active; +#X text 245 570 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 599 @attack; +#X text 245 599 Get/Set attack time = time constant (ms) for gate to open. Type: float. Units: ms. Default value: 0.1\. Range: 0\...500\.; -#X msg 110 689 @hold; -#X text 245 689 Get/Set hold time = time (ms) gate stays open after +#X msg 110 656 @hold; +#X text 245 656 Get/Set hold time = time (ms) gate stays open after signal level < threshold. Type: float. Units: ms. Default value: 100\. Range: 1\...500\.; -#X msg 110 746 @release; -#X text 245 746 Get/Set release time = time constant (ms) for gate +#X msg 110 713 @release; +#X text 245 713 Get/Set release time = time constant (ms) for gate to close. Type: float. Units: ms. Default value: 20\. Range: 1\...500\.; -#X msg 110 788 @threshold; -#X text 245 788 Get/Set dB level threshold above which gate opens. +#X msg 110 755 @threshold; +#X text 245 755 Get/Set dB level threshold above which gate opens. Type: float. Units: db. Default value: 40\. Range: 0\...100\.; -#X obj 20 840 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 845 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 812 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 846 1\.; -#X text 245 846 input signal.; -#X text 150 866 *bang*; -#X text 245 866 outputs object internal state to rightmost outlet.; -#X obj 20 896 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 901 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 813 1\.; +#X text 245 813 input signal.; +#X text 150 833 *bang*; +#X text 245 833 outputs object internal state to rightmost outlet.; +#X obj 20 863 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 868 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 902 1\.; -#X text 245 902 output signal.; +#X text 110 869 1\.; +#X text 245 869 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 952 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 955 library: ceammc v0.9.4; -#X text 593 967 see also:; -#X obj 667 967 dyn.gate2~; -#N canvas 10 974 400 290 info 0; +#X obj 1 919 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 922 library: ceammc v0.9.6; +#X text 593 934 see also:; +#X obj 667 934 dyn.gate2~; +#N canvas 10 941 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.gate~; #X text 10 76 category:; @@ -106,7 +102,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 974 pd info; +#X restore 10 941 pd info; #X connect 5 0 6 0; #X connect 4 0 7 0; #X connect 6 0 7 1; diff --git a/ceammc/ext/doc/dyn.gate~.pddoc b/ceammc/ext/doc/dyn.gate~.pddoc index 56e3552053..7176aebc46 100644 --- a/ceammc/ext/doc/dyn.gate~.pddoc +++ b/ceammc/ext/doc/dyn.gate~.pddoc @@ -27,19 +27,17 @@ threshold release time = time constant (ms) for gate to close - on/off dsp - processing + on/off dsp processing - dB + dB level threshold above which gate opens (e.g., 40 dB) - + attack time = time constant (ms) for gate to open - hold + hold time = time (ms) gate stays open after signal level < threshold - + release time = time constant (ms) for gate to close - object ID for OSC control path diff --git a/ceammc/ext/doc/dyn.limit2~-help.pd b/ceammc/ext/doc/dyn.limit2~-help.pd index 54849590b0..d365805bef 100644 --- a/ceammc/ext/doc/dyn.limit2~-help.pd +++ b/ceammc/ext/doc/dyn.limit2~-help.pd @@ -19,38 +19,38 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 424 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 438 1\.; -#X text 245 438 left input signal.; -#X text 110 458 2\.; -#X text 245 458 right input signal.; -#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 493 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 425 1\.; +#X text 245 425 left input signal.; +#X text 110 445 2\.; +#X text 245 445 right input signal.; +#X obj 20 475 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 480 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 494 1\.; -#X text 245 494 left output signal.; -#X text 110 514 2\.; -#X text 245 514 right output signal.; +#X text 110 481 1\.; +#X text 245 481 left output signal.; +#X text 110 501 2\.; +#X text 245 501 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 564 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 567 library: ceammc v0.9.4; -#X text 512 579 see also:; -#X obj 586 579 dyn.limit~; -#X obj 674 579 dyn.comp~; -#N canvas 10 586 400 290 info 0; +#X obj 1 551 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 554 library: ceammc v0.9.6; +#X text 512 566 see also:; +#X obj 586 566 dyn.limit~; +#X obj 674 566 dyn.comp~; +#N canvas 10 573 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.limit2~; #X text 10 76 category:; @@ -69,7 +69,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 586 pd info; +#X restore 10 573 pd info; #X connect 4 0 6 0; #X connect 5 0 6 1; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/dyn.limit2~.pddoc b/ceammc/ext/doc/dyn.limit2~.pddoc index c7951e21f9..f856ea8217 100644 --- a/ceammc/ext/doc/dyn.limit2~.pddoc +++ b/ceammc/ext/doc/dyn.limit2~.pddoc @@ -19,8 +19,7 @@ - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/dyn.limit~-help.pd b/ceammc/ext/doc/dyn.limit~-help.pd index b307d2a1ad..b926e37f77 100644 --- a/ceammc/ext/doc/dyn.limit~-help.pd +++ b/ceammc/ext/doc/dyn.limit~-help.pd @@ -17,34 +17,34 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 424 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 438 1\.; -#X text 245 438 input signal.; -#X obj 20 468 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 473 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 425 1\.; +#X text 245 425 input signal.; +#X obj 20 455 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 460 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 474 1\.; -#X text 245 474 output signal.; +#X text 110 461 1\.; +#X text 245 461 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 524 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 527 library: ceammc v0.9.4; -#X text 504 539 see also:; -#X obj 578 539 dyn.limit2~; -#X obj 674 539 dyn.comp~; -#N canvas 10 546 400 290 info 0; +#X obj 1 511 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 514 library: ceammc v0.9.6; +#X text 504 526 see also:; +#X obj 578 526 dyn.limit2~; +#X obj 674 526 dyn.comp~; +#N canvas 10 533 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.limit~; #X text 10 76 category:; @@ -63,7 +63,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 546 pd info; +#X restore 10 533 pd info; #X connect 4 0 6 0; #X connect 5 0 6 1; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/dyn.limit~.pddoc b/ceammc/ext/doc/dyn.limit~.pddoc index d0772b549a..4e454e76b0 100644 --- a/ceammc/ext/doc/dyn.limit~.pddoc +++ b/ceammc/ext/doc/dyn.limit~.pddoc @@ -19,8 +19,7 @@ - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/dyn.softclip~-help.pd b/ceammc/ext/doc/dyn.softclip~-help.pd index 2708ea0f1c..855be09019 100644 --- a/ceammc/ext/doc/dyn.softclip~-help.pd +++ b/ceammc/ext/doc/dyn.softclip~-help.pd @@ -20,31 +20,31 @@ #X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 409 @active; -#X text 245 409 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 466 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 409 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 448 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 453 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 467 1\.; -#X text 245 467 input signal.; -#X obj 20 497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 502 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 454 1\.; +#X text 245 454 input signal.; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 503 1\.; -#X text 245 503 output signal.; +#X text 110 490 1\.; +#X text 245 490 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title dyn @url ceammc.dyn-help.pd; -#X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.9.4; -#N canvas 10 575 400 290 info 0; +#X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 543 library: ceammc v0.9.6; +#N canvas 10 562 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 dyn.softclip~; #X text 10 76 category:; @@ -63,7 +63,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 575 pd info; +#X restore 10 562 pd info; #X connect 4 0 8 0; #X connect 5 0 8 1; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/dyn.softclip~.pddoc b/ceammc/ext/doc/dyn.softclip~.pddoc index 44fd619133..4a614d2717 100644 --- a/ceammc/ext/doc/dyn.softclip~.pddoc +++ b/ceammc/ext/doc/dyn.softclip~.pddoc @@ -14,8 +14,7 @@ 0.1 - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/env.adsr~-help.pd b/ceammc/ext/doc/env.adsr~-help.pd index 897ef1844b..42b3e087dc 100644 --- a/ceammc/ext/doc/env.adsr~-help.pd +++ b/ceammc/ext/doc/env.adsr~-help.pd @@ -28,85 +28,84 @@ generator; #X text 110 510 1\.; #X text 150 510 float; #X obj 246 511 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 510 attack(ms): attack time. Type: float. Min value: 0; +#X text 245 510 ATTACK(ms): attack time. Type: float. Range: 0\...100000; #X text 110 530 2\.; #X text 150 530 float; #X obj 246 531 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 530 decay(ms): decay time. Type: float. Min value: 0; +#X text 245 530 DECAY(ms): decay time. Type: float. Range: 0\...100000; #X text 110 550 3\.; #X text 150 550 float; -#X obj 246 551 cnv 1 84 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 550 sustain(%): sustain level (percentage of trigger). +#X obj 246 551 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 550 SUSTAIN(%): sustain level (percentage of trigger). Type: float. Range: 0\...100; #X text 110 585 4\.; #X text 150 585 float; -#X obj 246 586 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 585 release(ms): release time. Type: float. Min value: -0; +#X obj 246 586 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 585 RELEASE(ms): release time. Type: float. Range: 0\...100000; #X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 620 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 655 @active; -#X text 245 655 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 697 @adsr; -#X text 245 697 (readonly) Get attack decay sustain release tuple. +#X text 245 655 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 684 @adsr; +#X text 245 684 (readonly) Get attack decay sustain release tuple. Type: list.; -#X msg 110 739 @attack; -#X text 245 739 Get/Set attack time. Type: float. Units: ms. Default +#X msg 110 726 @attack; +#X text 245 726 Get/Set attack time. Type: float. Units: ms. Default value: 10\. Range: 0\...100000\.; -#X msg 110 781 @decay; -#X text 245 781 Get/Set decay time. Type: float. Units: ms. Default +#X msg 110 768 @decay; +#X text 245 768 Get/Set decay time. Type: float. Units: ms. Default value: 10\. Range: 0\...100000\.; -#X msg 110 823 @gate; -#X text 245 823 Get/Set trigger. If > 0 - starts envelope. Type: float. +#X msg 110 810 @gate; +#X text 245 810 Get/Set trigger. If > 0 - starts envelope. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 865 @release; -#X text 245 865 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 852 @release; +#X text 245 852 Get/Set release time. Type: float. Units: ms. Default value: 300\. Range: 0\...100000\.; -#X msg 110 907 @sustain; -#X text 245 907 Get/Set sustain level - percent from trigger signal. +#X msg 110 894 @sustain; +#X text 245 894 Get/Set sustain level - percent from trigger signal. Type: float. Units: %. Default value: 50\. Range: 0\...100\.; -#X obj 20 959 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 964 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 946 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 951 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 999 play; -#X text 245 999 runs envelope and release it after specified time. +#X msg 110 986 play; +#X text 245 986 runs envelope and release it after specified time. Arguments are:; -#X obj 255 1037 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1037 [DUR]: duration. Type: float. Min value: 0\.; -#X msg 110 1062 reset; -#X text 245 1062 reset envelope to initial state.; -#X obj 20 1099 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1104 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1024 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1024 [DUR]: duration. Type: float. Min value: 0\.; +#X msg 110 1049 reset; +#X text 245 1049 reset envelope to initial state.; +#X obj 20 1086 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1091 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1105 1\.; -#X text 245 1105 input signal.; -#X text 150 1125 *list*; -#X text 245 1125 ATTACK \, DECAY \, SUSTAIN \, RELEASE values are expected.; -#X text 150 1145 *data*; -#X text 245 1145 Envelope data type.; -#X obj 20 1175 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1180 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1092 1\.; +#X text 245 1092 input signal.; +#X text 150 1112 *list*; +#X text 245 1112 ATTACK \, DECAY \, SUSTAIN \, RELEASE values are expected.; +#X text 150 1132 *data*; +#X text 245 1132 Envelope data type.; +#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1167 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1181 1\.; -#X text 245 1181 output signal with applied envelope.; -#X text 110 1201 2\.; -#X text 245 1201 outputs 1 when attack/decay phase finished \, 0 - +#X text 110 1168 1\.; +#X text 245 1168 output signal with applied envelope.; +#X text 110 1188 2\.; +#X text 245 1188 outputs 1 when attack/decay phase finished \, 0 - when release phase finished.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 1266 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1269 library: ceammc v0.9.4; -#N canvas 10 1288 400 290 info 0; +#X obj 1 1253 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1256 library: ceammc v0.9.6; +#N canvas 10 1275 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.adsr~; #X text 10 76 category:; @@ -125,7 +124,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1288 pd info; +#X restore 10 1275 pd info; #X connect 4 0 5 0; #X connect 5 1 7 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/env.adsr~.pddoc b/ceammc/ext/doc/env.adsr~.pddoc index a4c5008851..fc2703a5a7 100644 --- a/ceammc/ext/doc/env.adsr~.pddoc +++ b/ceammc/ext/doc/env.adsr~.pddoc @@ -14,14 +14,14 @@ 0.7 - attack - time - decay - time - + attack time + + decay time + sustain level (percentage of trigger) - release - time + release time release time trigger. If > 0 - starts envelope. - attack decay sustain release - tuple - on/off dsp - processing + attack decay sustain + release tuple + on/off dsp processing runs envelope and release it after specified time diff --git a/ceammc/ext/doc/env.ar~-help.pd b/ceammc/ext/doc/env.ar~-help.pd index ceee1409f3..0df49b13fe 100644 --- a/ceammc/ext/doc/env.ar~-help.pd +++ b/ceammc/ext/doc/env.ar~-help.pd @@ -25,71 +25,71 @@ #X text 110 477 1\.; #X text 150 477 float; #X obj 246 478 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 477 attack(ms): attack time. Type: float. Range: 0\...100000; +#X text 245 477 ATTACK(ms): attack time. Type: float. Range: 0\...100000; #X text 110 497 2\.; #X text 150 497 float; -#X obj 246 498 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 497 release(ms): release time. Type: float. Range: 0\...100000; +#X obj 246 498 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 497 RELEASE(ms): release time. Type: float. Range: 0\...100000; #X obj 20 527 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 532 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 567 @active; -#X text 245 567 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 609 @ar; -#X text 245 609 (readonly) Get attack release pair. Type: list.; -#X msg 110 638 @attack; -#X text 245 638 Get/Set attack time. Type: float. Units: ms. Default +#X text 245 567 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 596 @ar; +#X text 245 596 (readonly) Get attack release pair. Type: list.; +#X msg 110 625 @attack; +#X text 245 625 Get/Set attack time. Type: float. Units: ms. Default value: 10\. Range: 0\...100000\.; -#X msg 110 680 @gate; -#X text 245 680 Get/Set trigger signal. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 722 @length; -#X text 245 722 (readonly) Get envelope length. Type: float. Units: +#X msg 110 667 @gate; +#X text 245 667 Get/Set trigger signal. Type: bool. Default value: +0\.; +#X msg 110 696 @length; +#X text 245 696 (readonly) Get envelope length. Type: float. Units: ms. Default value: 310\.; -#X msg 110 764 @release; -#X text 245 764 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 738 @release; +#X text 245 738 Get/Set release time. Type: float. Units: ms. Default value: 300\. Range: 0\...100000\.; -#X obj 20 816 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 821 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 790 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 795 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 856 play; -#X text 245 856 run envelope.; -#X msg 110 883 reset; -#X text 245 883 reset envelope to initial state.; -#X obj 20 920 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 925 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 830 play; +#X text 245 830 run envelope.; +#X msg 110 857 reset; +#X text 245 857 reset envelope to initial state.; +#X obj 20 894 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 899 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 926 1\.; -#X text 245 926 input signal.; -#X text 150 946 *bang*; -#X text 245 946 runs envelope.; -#X text 150 966 *list*; -#X text 245 966 ATTACK \, DECAY \, SUSTAIN \, RELEASE values are expected.; -#X text 150 986 *data*; -#X text 245 986 Envelope data type.; -#X obj 20 1016 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1021 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 900 1\.; +#X text 245 900 input signal.; +#X text 150 920 *bang*; +#X text 245 920 runs envelope.; +#X text 150 940 *list*; +#X text 245 940 ATTACK \, RELEASE values are expected.; +#X text 150 960 *data*; +#X text 245 960 Envelope data type.; +#X obj 20 990 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 995 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1022 1\.; -#X text 245 1022 output signal with applied envelope.; -#X text 110 1042 2\.; -#X text 245 1042 bang on done.; +#X text 110 996 1\.; +#X text 245 996 output signal with applied envelope.; +#X text 110 1016 2\.; +#X text 245 1016 bang on done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 1092 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1095 library: ceammc v0.9.4; -#X text 600 1107 see also:; -#X obj 674 1107 env.adsr~; -#N canvas 10 1114 400 290 info 0; +#X obj 1 1066 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1069 library: ceammc v0.9.6; +#X text 600 1081 see also:; +#X obj 674 1081 env.adsr~; +#N canvas 10 1088 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.ar~; #X text 10 76 category:; @@ -108,7 +108,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1114 pd info; +#X restore 10 1088 pd info; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 6 0 11 0; diff --git a/ceammc/ext/doc/env.ar~.pddoc b/ceammc/ext/doc/env.ar~.pddoc index dd37e697d2..9632ec8e32 100644 --- a/ceammc/ext/doc/env.ar~.pddoc +++ b/ceammc/ext/doc/env.ar~.pddoc @@ -24,17 +24,17 @@ maxvalue="100000" default="10">attack time release time - trigger signal - attack release pair - trigger signal + attack release + pair + envelope length - on/off dsp - processing + on/off dsp processing - attack time - release time @@ -45,7 +45,7 @@ input signal runs envelope - ATTACK, DECAY, SUSTAIN, RELEASE values are expected + ATTACK, RELEASE values are expected Envelope data type diff --git a/ceammc/ext/doc/env.asr~-help.pd b/ceammc/ext/doc/env.asr~-help.pd index 0154c98c8c..a6f2fc06e2 100644 --- a/ceammc/ext/doc/env.asr~-help.pd +++ b/ceammc/ext/doc/env.asr~-help.pd @@ -11,93 +11,97 @@ #X obj 50 219 mtof; #X obj 126 219 cc->amp; #X obj 280 219 ui.env @size 200 60; -#X obj 50 262 osc~; -#X msg 126 262 @gate \$1; -#X obj 50 291 env.asr~ 2 100 2000; -#X obj 50 320 ui.gain~ @size 140 16; -#X obj 280 320 ui.dsp~; -#X obj 50 349 dac~; -#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 248 osc~; +#X msg 126 248 @gate \$1; +#X obj 184 277 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 305 env.asr~ 2 100 2000; +#X obj 184 334 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 363 ui.gain~ @size 140 16; +#X obj 280 363 ui.dsp~; +#X obj 50 392 dac~; +#X obj 20 441 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 446 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 438 1\.; -#X text 150 438 float; -#X obj 246 439 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 438 attack(ms): attack time. Type: float. Min value: 0; -#X text 110 458 2\.; -#X text 150 458 float; -#X obj 246 459 cnv 1 84 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 458 sustain(%): sustain level (percentage of trigger). +#X text 110 481 1\.; +#X text 150 481 float; +#X obj 246 482 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 481 ATTACK(ms): attack time. Type: float. Range: 0\...100000; +#X text 110 501 2\.; +#X text 150 501 float; +#X obj 246 502 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 501 SUSTAIN(%): sustain level (percentage of trigger). Type: float. Range: 0\...100; -#X text 110 493 3\.; -#X text 150 493 float; -#X obj 246 494 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 493 release(ms): release time. Type: float. Min value: -0; -#X obj 20 523 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 528 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 536 3\.; +#X text 150 536 float; +#X obj 246 537 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 536 RELEASE(ms): release time. Type: float. Range: 0\...100000; +#X obj 20 566 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 571 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 563 @active; -#X text 245 563 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 605 @asr; -#X text 245 605 (readonly) Get attack sustain release triplet. Type: +#X msg 110 606 @active; +#X text 245 606 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 635 @asr; +#X text 245 635 (readonly) Get attack sustain release triplet. Type: list.; -#X msg 110 634 @attack; -#X text 245 634 Get/Set attack time. Type: float. Units: ms. Default +#X msg 110 664 @attack; +#X text 245 664 Get/Set attack time. Type: float. Units: ms. Default value: 10\. Range: 0\...100000\.; -#X msg 110 676 @gate; -#X text 245 676 Get/Set trigger. If > 0 - starts envelope. Type: float. +#X msg 110 706 @gate; +#X text 245 706 Get/Set trigger. If > 0 - starts envelope. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 718 @release; -#X text 245 718 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 748 @release; +#X text 245 748 Get/Set release time. Type: float. Units: ms. Default value: 300\. Range: 0\...100000\.; -#X msg 110 760 @sustain; -#X text 245 760 Get/Set sustain level - percent from trigger signal. +#X msg 110 790 @sustain; +#X text 245 790 Get/Set sustain level - percent from trigger signal. Type: float. Units: %. Default value: 100\. Range: 0\...100\.; -#X obj 20 812 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 817 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 842 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 847 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 852 play; -#X text 245 852 runs envelope and release it after specified time. +#X msg 110 882 play; +#X text 245 882 runs envelope and release it after specified time. Arguments are:; -#X obj 255 890 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 890 [DUR]: duration. Type: float. Min value: 0\.; -#X msg 110 915 reset; -#X text 245 915 reset envelope to initial state.; -#X obj 20 952 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 957 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 255 920 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 920 [DUR]: duration. Type: float. Min value: 0\.; +#X msg 110 945 reset; +#X text 245 945 reset envelope to initial state.; +#X obj 20 982 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 987 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 958 1\.; -#X text 245 958 input signal.; -#X text 150 978 *list*; -#X text 245 978 ATTACK \, SUSTAIN \, RELEASE values are expected.; -#X text 150 998 *data*; -#X text 245 998 Envelope data type.; -#X obj 20 1028 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1033 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 988 1\.; +#X text 245 988 input signal.; +#X text 150 1008 *list*; +#X text 245 1008 ATTACK \, SUSTAIN \, RELEASE values are expected.; +#X text 150 1028 *data*; +#X text 245 1028 Envelope data type.; +#X text 110 1048 2\.; +#X text 150 1048 *float*; +#X text 245 1048 float: 1 - start envelope \, 0 - stop.; +#X obj 20 1078 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1083 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1034 1\.; -#X text 245 1034 output signal with applied envelope.; -#X text 110 1054 2\.; -#X text 245 1054 outputs 1 when attack phase finished \, 0 - when release +#X text 110 1084 1\.; +#X text 245 1084 output signal with applied envelope.; +#X text 110 1104 2\.; +#X text 245 1104 outputs 1 when attack phase finished \, 0 - when release phase finished.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 1119 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1122 library: ceammc v0.9.4; -#X text 533 1134 see also:; -#X obj 607 1134 env.adsr~; -#X obj 688 1134 env.ar~; -#N canvas 10 1141 400 290 info 0; +#X obj 1 1169 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1172 library: ceammc v0.9.6; +#X text 533 1184 see also:; +#X obj 607 1184 env.adsr~; +#X obj 688 1184 env.ar~; +#N canvas 10 1191 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.asr~; #X text 10 76 category:; @@ -116,16 +120,18 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1141 pd info; +#X restore 10 1191 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 5 1 8 0; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 8 0 11 0; -#X connect 10 0 12 0; -#X connect 11 0 12 0; -#X connect 9 0 12 0; -#X connect 12 0 13 0; +#X connect 10 0 13 0; +#X connect 11 0 13 0; +#X connect 12 0 13 1; +#X connect 9 0 13 0; +#X connect 13 1 14 0; #X connect 13 0 15 0; -#X connect 13 0 15 1; \ No newline at end of file +#X connect 15 0 17 0; +#X connect 15 0 17 1; \ No newline at end of file diff --git a/ceammc/ext/doc/env.asr~.pddoc b/ceammc/ext/doc/env.asr~.pddoc index 7add1897f6..12e17667fb 100644 --- a/ceammc/ext/doc/env.asr~.pddoc +++ b/ceammc/ext/doc/env.asr~.pddoc @@ -18,12 +18,12 @@ - attack - time - + attack time + sustain level (percentage of trigger) - release - time + release time release time trigger. If > 0 - starts envelope. - attack sustain release + attack sustain release triplet - on/off dsp - processing + on/off dsp processing runs envelope and release it after specified time @@ -50,6 +49,9 @@ ATTACK, SUSTAIN, RELEASE values are expected Envelope data type + + float: 1 - start envelope, 0 - stop + output signal with applied envelope @@ -67,10 +69,13 @@ | ^| | [mtof] [cc->amp] [ui.env @size 200 60] | | | -| | | [osc~] [@gate $1( | | | | +| | [T] | +| | |. | [env.asr~ 2 100 2000 ] +| ^| +| [T] | [ui.gain~ @size 140 16] [ui.dsp~] |\ diff --git a/ceammc/ext/doc/env.concat-help.pd b/ceammc/ext/doc/env.concat-help.pd index b3515df917..6f17485fdb 100644 --- a/ceammc/ext/doc/env.concat-help.pd +++ b/ceammc/ext/doc/env.concat-help.pd @@ -40,7 +40,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 569 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 572 library: ceammc v0.9.4; +#X text 10 572 library: ceammc v0.9.6; #X text 521 584 see also:; #X obj 595 584 env.tshift; #X obj 682 584 envelope; @@ -49,7 +49,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.concat; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env.follow~-help.pd b/ceammc/ext/doc/env.follow~-help.pd index 1c8917bc58..0d4ee7e6a9 100644 --- a/ceammc/ext/doc/env.follow~-help.pd +++ b/ceammc/ext/doc/env.follow~-help.pd @@ -20,49 +20,49 @@ times; #X text 110 323 1\.; #X text 150 323 float; #X obj 246 324 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 attack(ms): attack time. Type: float. Range: 1\...1000; +#X text 245 323 ATTACK(ms): attack time. Type: float. Range: 1\...1000; #X text 110 343 2\.; #X text 150 343 float; -#X obj 246 344 cnv 1 91 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 343 release(ms): release time. Type: float. Range: 1\...1000; +#X obj 246 344 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 343 RELEASE(ms): release time. Type: float. Range: 1\...1000; #X obj 20 373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 378 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 413 @active; -#X text 245 413 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 455 @attack; -#X text 245 455 Get/Set attack time. Type: float. Default value: 200\. -Range: 1\...1000\.; -#X msg 110 497 @release; -#X text 245 497 Get/Set release time. Type: float. Default value: 200\. -Range: 1\...1000\.; -#X obj 20 549 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 554 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 413 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 442 @attack; +#X text 245 442 Get/Set attack time. Type: float. Units: ms. Default +value: 200\. Range: 1\...1000\.; +#X msg 110 484 @release; +#X text 245 484 Get/Set release time. Type: float. Units: ms. Default +value: 200\. Range: 1\...1000\.; +#X obj 20 536 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 541 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 555 1\.; -#X text 245 555 input signal.; -#X obj 20 585 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 590 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 542 1\.; +#X text 245 542 input signal.; +#X obj 20 572 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 577 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 591 1\.; -#X text 245 591 amplitude envelope that follows the absolute value +#X text 110 578 1\.; +#X text 245 578 amplitude envelope that follows the absolute value going up/down.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 656 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 659 library: ceammc v0.9.4; -#X text 600 671 see also:; -#X obj 674 671 env.adsr~; -#N canvas 10 678 400 290 info 0; +#X obj 1 643 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 646 library: ceammc v0.9.6; +#X text 600 658 see also:; +#X obj 674 658 env.adsr~; +#N canvas 10 665 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.follow~; #X text 10 76 category:; @@ -81,7 +81,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 678 pd info; +#X restore 10 665 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; diff --git a/ceammc/ext/doc/env.follow~.pddoc b/ceammc/ext/doc/env.follow~.pddoc index bdcd3623fa..89409eecbc 100644 --- a/ceammc/ext/doc/env.follow~.pddoc +++ b/ceammc/ext/doc/env.follow~.pddoc @@ -16,20 +16,19 @@ env.adsr~ - - attack - time - - release time - on/off dsp - processing - - + attack time - + release time + + attack time + release time + on/off dsp processing + input signal diff --git a/ceammc/ext/doc/env.mix-help.pd b/ceammc/ext/doc/env.mix-help.pd index 1bfb2bad84..3b0797a314 100644 --- a/ceammc/ext/doc/env.mix-help.pd +++ b/ceammc/ext/doc/env.mix-help.pd @@ -42,7 +42,7 @@ equal number of segments; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 541 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 544 library: ceammc v0.9.4; +#X text 10 544 library: ceammc v0.9.6; #X text 520 556 see also:; #X obj 594 556 env.tscale; #X obj 682 556 envelope; @@ -51,7 +51,7 @@ equal number of segments; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.mix; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env.smooth~-help.pd b/ceammc/ext/doc/env.smooth~-help.pd index cd2b51f46e..52169fc6b7 100644 --- a/ceammc/ext/doc/env.smooth~-help.pd +++ b/ceammc/ext/doc/env.smooth~-help.pd @@ -21,57 +21,57 @@ #X text 110 394 1\.; #X text 150 394 float; #X obj 246 395 cnv 1 100 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 394 duration(ms): attack time. Type: float. Range: 0\...100000; +#X text 245 394 DURATION(ms): attack time. Type: float. Range: 0\...100000; #X obj 20 424 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 429 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 464 @active; -#X text 245 464 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 506 @duration; -#X text 245 506 Get/Set attack/release time (time to get -60db level). +#X text 245 464 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 493 @duration; +#X text 245 493 Get/Set attack/release time (time to get -60db level). Type: float. Units: ms. Default value: 100\. Range: 0\...100000\.; -#X msg 110 548 @gate; -#X text 245 548 Get/Set trigger signal. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 605 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 535 @gate; +#X text 245 535 Get/Set trigger signal. Type: bool. Default value: +0\.; +#X obj 20 574 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 579 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 640 play; -#X text 245 640 runs envelope and release it after specified time. +#X msg 110 614 play; +#X text 245 614 runs envelope and release it after specified time. Arguments are:; -#X obj 255 678 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 678 [DUR]: duration. Type: float. Min value: 0\. Units: +#X obj 255 652 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 652 [DUR]: duration. Type: float. Min value: 0\. Units: ms.; -#X msg 110 703 reset; -#X text 245 703 reset envelope to initial state.; -#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 745 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 677 reset; +#X text 245 677 reset envelope to initial state.; +#X obj 20 714 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 719 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 746 1\.; -#X text 245 746 input signal.; -#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 781 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 720 1\.; +#X text 245 720 input signal.; +#X obj 20 750 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 755 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 782 1\.; -#X text 245 782 output signal with applied envelope.; -#X text 110 802 2\.; -#X text 245 802 bang on done.; +#X text 110 756 1\.; +#X text 245 756 output signal with applied envelope.; +#X text 110 776 2\.; +#X text 245 776 bang on done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; -#X obj 1 852 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 855 library: ceammc v0.9.4; -#X text 600 867 see also:; -#X obj 674 867 env.adsr~; -#N canvas 10 874 400 290 info 0; +#X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 829 library: ceammc v0.9.6; +#X text 600 841 see also:; +#X obj 674 841 env.adsr~; +#N canvas 10 848 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.smooth~; #X text 10 76 category:; @@ -90,7 +90,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 874 pd info; +#X restore 10 848 pd info; #X connect 6 0 7 0; #X connect 4 0 8 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/env.smooth~.pddoc b/ceammc/ext/doc/env.smooth~.pddoc index 1426dc7671..a0f7e65652 100644 --- a/ceammc/ext/doc/env.smooth~.pddoc +++ b/ceammc/ext/doc/env.smooth~.pddoc @@ -17,16 +17,15 @@ - attack time attack/release time (time to get -60db level) - trigger signal - on/off dsp - processing + trigger signal + on/off dsp processing runs envelope and release it after specified time @@ -66,15 +65,13 @@ dbfs~] | +[env.smooth~ 5] | | |. -[ui.plot~ @xlabels 1 @ylabels 1 @size 360 170 @ymin_ticks 0 @ymin -60 @ymax 0] +[ui.plot~ @xlabels 1 @ylabels 1 @size 360 170 @ymin_ticks 0 @ymin 0 @ymax 1] diff --git a/ceammc/ext/doc/env.smooth~.plot.pd b/ceammc/ext/doc/env.smooth~.plot.pd index 3ab14533a2..37102bcbad 100644 --- a/ceammc/ext/doc/env.smooth~.plot.pd +++ b/ceammc/ext/doc/env.smooth~.plot.pd @@ -1,17 +1,15 @@ -#N canvas 0 0 634 428 12; +#N canvas 0 0 620 400 12; #X msg 20 48 bang; -#X obj 20 77 plot.linspace~ 0 12 1024; +#X obj 20 77 plot.linspace~ 0 10 1024; #X obj 20 106 sig~ 1; -#X msg 106 106 play 12; -#X obj 20 135 env.smooth~ 6; -#X obj 20 164 amp->dbfs~; -#X obj 20 192 ui.plot~ @xlabels 1 @ylabels 1 @size 360 170 @ymin_ticks -0 @ymin -60 @ymax 0; -#X obj 20 379 ui.dsp~; +#X msg 106 106 play 10; +#X obj 20 135 env.smooth~ 5; +#X obj 20 164 ui.plot~ @xlabels 1 @ylabels 1 @size 360 170 @ymin_ticks +0 @ymin 0 @ymax 1; +#X obj 20 351 ui.dsp~; #X connect 0 0 1 0; #X connect 2 0 4 0; #X connect 3 0 4 0; #X connect 4 0 5 0; -#X connect 5 0 6 0; -#X connect 1 1 6 1; +#X connect 1 1 5 1; #X connect 0 0 3 0; diff --git a/ceammc/ext/doc/env.tscale-help.pd b/ceammc/ext/doc/env.tscale-help.pd index 5b1f313016..5ba21edc46 100644 --- a/ceammc/ext/doc/env.tscale-help.pd +++ b/ceammc/ext/doc/env.tscale-help.pd @@ -307,7 +307,7 @@ #X text 110 449 1\.; #X text 150 449 float; #X obj 246 450 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 449 SCALE: time-scale. Type: float.; +#X text 245 449 SCALE: time-scale. Type: float. Min value: 0; #X obj 20 479 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 484 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -331,7 +331,7 @@ Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 666 library: ceammc v0.9.4; +#X text 10 666 library: ceammc v0.9.6; #X text 521 678 see also:; #X obj 595 678 env.tshift; #X obj 682 678 envelope; @@ -340,7 +340,7 @@ Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.tscale; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env.tscale.pddoc b/ceammc/ext/doc/env.tscale.pddoc index a5df23ea58..6507dcc466 100644 --- a/ceammc/ext/doc/env.tscale.pddoc +++ b/ceammc/ext/doc/env.tscale.pddoc @@ -18,7 +18,7 @@ - time-scale + time-scale time-scale diff --git a/ceammc/ext/doc/env.tshift-help.pd b/ceammc/ext/doc/env.tshift-help.pd index 2cf2a8e417..7136755024 100644 --- a/ceammc/ext/doc/env.tshift-help.pd +++ b/ceammc/ext/doc/env.tshift-help.pd @@ -48,7 +48,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 666 library: ceammc v0.9.4; +#X text 10 666 library: ceammc v0.9.6; #X text 520 678 see also:; #X obj 594 678 env.tscale; #X obj 682 678 envelope; @@ -57,7 +57,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.tshift; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env.vscale-help.pd b/ceammc/ext/doc/env.vscale-help.pd index f85d25172b..9c22f773d0 100644 --- a/ceammc/ext/doc/env.vscale-help.pd +++ b/ceammc/ext/doc/env.vscale-help.pd @@ -330,7 +330,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 650 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 653 library: ceammc v0.9.4; +#X text 10 653 library: ceammc v0.9.6; #X text 520 665 see also:; #X obj 594 665 env.tscale; #X obj 682 665 envelope; @@ -339,7 +339,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env.vscale; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env2array-help.pd b/ceammc/ext/doc/env2array-help.pd index a831ba1978..9d073a1793 100644 --- a/ceammc/ext/doc/env2array-help.pd +++ b/ceammc/ext/doc/env2array-help.pd @@ -79,8 +79,8 @@ raw.; #X msg 110 706 @raw; #X text 245 706 alias to @mode raw property.; #X msg 110 735 @redraw; -#X text 245 735 Get/Set redraw after array change. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 735 Get/Set redraw after array change. Type: bool. Default +value: 1\.; #X msg 110 777 @resize; #X text 245 777 alias to @mode resize property.; #X obj 20 816 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -100,7 +100,7 @@ was resized - output this new size.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 926 library: ceammc v0.9.4; +#X text 10 926 library: ceammc v0.9.6; #X text 593 938 see also:; #X obj 667 938 env->vline; #N canvas 10 945 400 290 info 0; @@ -108,7 +108,7 @@ was resized - output this new size.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env2array; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env2array.pddoc b/ceammc/ext/doc/env2array.pddoc index e0e6f4a773..fdad2dd381 100644 --- a/ceammc/ext/doc/env2array.pddoc +++ b/ceammc/ext/doc/env2array.pddoc @@ -25,9 +25,8 @@ array name - target array name - redraw after array - change + target array name + redraw after array change rendering mode: *fit* to array size, *resize* array to envelope length or *raw* render while enough space in array diff --git a/ceammc/ext/doc/env2vline-help.pd b/ceammc/ext/doc/env2vline-help.pd index e8ac844af3..7a6298e0fd 100644 --- a/ceammc/ext/doc/env2vline-help.pd +++ b/ceammc/ext/doc/env2vline-help.pd @@ -57,8 +57,8 @@ non-linear envelopes are outputted using linear approximation; -49933 0; #X msg 110 723 @sync; #X text 245 723 Get/Set sync with input data. When set to 1 outputs -envelope (as fixed) on every input data. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; +envelope (as fixed) on every input data. Type: bool. Default value: +0\.; #X obj 20 790 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 795 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -91,7 +91,7 @@ one stop-point.; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 1069 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1072 library: ceammc v0.9.4; +#X text 10 1072 library: ceammc v0.9.6; #X text 505 1084 see also:; #X obj 579 1084 vline->env; #X obj 667 1084 env->array; @@ -100,7 +100,7 @@ one stop-point.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 env2vline; #X text 10 76 category:; diff --git a/ceammc/ext/doc/env2vline.pddoc b/ceammc/ext/doc/env2vline.pddoc index 8a0f1637b3..7b5765982c 100644 --- a/ceammc/ext/doc/env2vline.pddoc +++ b/ceammc/ext/doc/env2vline.pddoc @@ -27,8 +27,8 @@ outputted using linear approximation - sync with input data. When set - to 1 outputs envelope (as fixed) on every input data + sync with input data. When set to 1 + outputs envelope (as fixed) on every input data diff --git a/ceammc/ext/doc/envelope-help.pd b/ceammc/ext/doc/envelope-help.pd index 28362f2c40..25cabf87ef 100644 --- a/ceammc/ext/doc/envelope-help.pd +++ b/ceammc/ext/doc/envelope-help.pd @@ -355,7 +355,7 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 3923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3926 library: ceammc v0.9.4; +#X text 10 3926 library: ceammc v0.9.6; #X text 505 3938 see also:; #X obj 579 3938 env->array; #X obj 667 3938 env->vline; @@ -364,7 +364,7 @@ Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 envelope; #X text 10 76 category:; diff --git a/ceammc/ext/doc/envelope.pddoc b/ceammc/ext/doc/envelope.pddoc index d91c9230a9..c31e47ca15 100644 --- a/ceammc/ext/doc/envelope.pddoc +++ b/ceammc/ext/doc/envelope.pddoc @@ -209,14 +209,16 @@ release(ms), release_curve - no sustain point - number of - points - number + of points + total envelope time length - list of point times + list of point times (ms) - list of point values - list of stop points + list of point + values + list of stop + points diff --git a/ceammc/ext/doc/expand_env-help.pd b/ceammc/ext/doc/expand_env-help.pd index 0734b6a4b3..388ed78980 100644 --- a/ceammc/ext/doc/expand_env-help.pd +++ b/ceammc/ext/doc/expand_env-help.pd @@ -59,7 +59,7 @@ Default value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 829 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 832 library: ceammc v0.9.4; +#X text 10 832 library: ceammc v0.9.6; #X text 616 844 see also:; #X obj 690 844 replace; #N canvas 10 851 400 290 info 0; @@ -67,7 +67,7 @@ Default value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 expand_env; #X text 10 76 category:; diff --git a/ceammc/ext/doc/expand_env.pddoc b/ceammc/ext/doc/expand_env.pddoc index 83bba1a4fd..e0208a604f 100644 --- a/ceammc/ext/doc/expand_env.pddoc +++ b/ceammc/ext/doc/expand_env.pddoc @@ -26,8 +26,8 @@ path to ceammc library directory - if specified - also do substitution in - message selector + if specified - also do + substitution in message selector diff --git a/ceammc/ext/doc/faust/blow.dsp b/ceammc/ext/doc/faust/blow.dsp new file mode 100644 index 0000000000..3f92ee56bc --- /dev/null +++ b/ceammc/ext/doc/faust/blow.dsp @@ -0,0 +1,10 @@ +import("stdfaust.lib"); + +fluteModel_ui(pressure) = pm.fluteModel(len, mouth_pos, pressure) * gain +with{ + len = hslider("tube_len",10,0.01,20,0.01) : si.smoo; + mouth_pos = hslider("mouth_pos",0.5,0,1,0.01) : si.smoo; + gain = hslider("gain",0.5,0,1,0.01); +}; + +process = pm.blower_ui : fluteModel_ui : ef.cubicnl(0.5, 0) : fi.highpass(3, 10) <: re.dattorro_rev_default; diff --git a/ceammc/ext/doc/faust/ex2.dsp b/ceammc/ext/doc/faust/ex2.dsp new file mode 100644 index 0000000000..328eaa6d2b --- /dev/null +++ b/ceammc/ext/doc/faust/ex2.dsp @@ -0,0 +1,6 @@ +import("stdfaust.lib"); +amp = hslider("amp", 0.35, 0, 1, 0.001) * 1000: si.smoo; +freq = hslider("freq", 6, 0, 10, 0.001) * 50 : si.smoo; +process = os.osc(200 + (os.osc(freq) * amp)), _ : _, !; + + diff --git a/ceammc/ext/doc/faust/ks.dsp b/ceammc/ext/doc/faust/ks.dsp new file mode 100644 index 0000000000..f18de7d803 --- /dev/null +++ b/ceammc/ext/doc/faust/ks.dsp @@ -0,0 +1,23 @@ +import("stdfaust.lib"); + +maxStringLength = 100; + +my_ks(length,damping,excitation) = pm.endChain(ksChain) +with{ + // maxStringLength = pm.maxLength; + lengthTuning = 0.5; // tuned "by hand" + tunedLength = length-lengthTuning; + refCoef = (1-damping)*0.2+0.8; + refFilter = pm.ksReflexionFilter*refCoef; + ksChain = pm.terminations(_, pm.chain(pm.in(excitation) : + pm.stringSegment(maxStringLength,tunedLength) : pm.out),refFilter); +}; + +process = my_ks(length,damping,g) : fi.dcblocker : fi.dcblocker : aa.tanh1 with { + g = pm.blower(pressure,0.5,1,5,0.25); + pressure = hslider("pressure", 0.5, 0, 1, 0.01); + length = hslider("length", 0.01, 0.005, maxStringLength, 0.001) : si.smoo; + offset = hslider("offset", 0.5, 0, 1, 0.01) *0.6 +0.3; + freq = hslider("freq", 10, 1, 20, 0.01); + damping = no.lfnoiseN(0, freq) * 0.3 + offset; +}; diff --git a/ceammc/ext/doc/faust/xfm.dsp b/ceammc/ext/doc/faust/xfm.dsp new file mode 100644 index 0000000000..dd51f09309 --- /dev/null +++ b/ceammc/ext/doc/faust/xfm.dsp @@ -0,0 +1,21 @@ +import("stdfaust.lib"); + +process = _~xmod : fx : fi.dcblocker +with { + mod0 = hslider("@mod0", 600, 0, 3000, 0.001) : si.smoo; + mod1 = hslider("@mod1", 600, 0, 3000, 0.001) : si.smoo; + mod2 = hslider("@mod2", 600, 1, 3000, 0.001) : si.smoo; + mod3 = hslider("@mod3", 0.1, 0, 1, 0.001) : si.smoo; + + idx0 = hslider("@freq0", 532, 1, 3000, 0.001) : si.smoo; + idx1 = hslider("@freq1", 369, 1, 3000, 0.001) : si.smoo; + + fm(f, i) = (_ * f) + i : os.oscsin; + fm0 = fm(mod0, idx0); + fm1 = fm(mod1, idx1); + xmod = _ : fm0 : fm1 : _; + fx(in) = in : ef.cubicnl(drive * mod3, off) with { + drive = in : ba.downSample(mod2); + off = 0.1; + }; +}; diff --git a/ceammc/ext/doc/file.size-help.pd b/ceammc/ext/doc/file.size-help.pd index f2a31ceb68..99605933c9 100644 --- a/ceammc/ext/doc/file.size-help.pd +++ b/ceammc/ext/doc/file.size-help.pd @@ -18,36 +18,35 @@ #X obj 20 299 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 334 @async; -#X text 245 334 Get/Set async mode. Type: int. Default value: 1\. Allowed -values: 0 \, 1\.; -#X msg 110 376 @sync; -#X text 245 376 alias for @async 0\.; -#X obj 20 415 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 420 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 334 Get/Set async mode. Type: bool. Default value: 1\.; +#X msg 110 363 @sync; +#X text 245 363 alias for @async 0\.; +#X obj 20 402 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 407 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 421 1\.; -#X text 150 421 *symbol*; -#X text 245 421 file path.; -#X text 150 441 *data:string*; -#X text 245 441 file path.; -#X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 476 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 408 1\.; +#X text 150 408 *symbol*; +#X text 245 408 file path.; +#X text 150 428 *data:string*; +#X text 245 428 file path.; +#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 463 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 477 1\.; -#X text 245 477 float: size in bytes.; +#X text 110 464 1\.; +#X text 245 464 float: size in bytes.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; -#X obj 1 527 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 530 library: ceammc v0.9.4; -#N canvas 10 549 400 290 info 0; +#X obj 1 514 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 517 library: ceammc v0.9.6; +#N canvas 10 536 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 file.size; #X text 10 76 category:; @@ -66,7 +65,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 549 pd info; +#X restore 10 536 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/file.size.pddoc b/ceammc/ext/doc/file.size.pddoc index 8e135f4beb..437f3dda65 100644 --- a/ceammc/ext/doc/file.size.pddoc +++ b/ceammc/ext/doc/file.size.pddoc @@ -18,7 +18,7 @@ short delay between input and output - async mode + async mode alias for @async 0 diff --git a/ceammc/ext/doc/flow.append-help.pd b/ceammc/ext/doc/flow.append-help.pd index dc2fff0cd7..90e2de82ff 100644 --- a/ceammc/ext/doc/flow.append-help.pd +++ b/ceammc/ext/doc/flow.append-help.pd @@ -15,7 +15,7 @@ #X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 323 @delay; -#X text 245 323 Get/Set append delay. If <0 append immidiately at the +#X text 245 323 Get/Set append delay. If <0 append immediately at the same logical time \, if equal zero - output after next DSP block. Type: float. Units: ms. Default value: -1\. Min value: -1\.; #X obj 20 390 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -38,13 +38,13 @@ float. Units: ms. Default value: -1\. Min value: -1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.append; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.append.pddoc b/ceammc/ext/doc/flow.append.pddoc index 5abf31c61c..4d7c30588a 100644 --- a/ceammc/ext/doc/flow.append.pddoc +++ b/ceammc/ext/doc/flow.append.pddoc @@ -15,7 +15,7 @@ - append delay. If <0 append immidiately at the same logical time, if equal zero - + append delay. If <0 append immediately at the same logical time, if equal zero - output after next DSP block. diff --git a/ceammc/ext/doc/flow.change-help.pd b/ceammc/ext/doc/flow.change-help.pd index 2a4e59b293..eee2fbd9a1 100644 --- a/ceammc/ext/doc/flow.change-help.pd +++ b/ceammc/ext/doc/flow.change-help.pd @@ -44,7 +44,7 @@ You can "set" the current value \, or bang to force output.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 559 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 562 library: ceammc v0.9.4; +#X text 10 562 library: ceammc v0.9.6; #X text 622 574 see also:; #X obj 696 574 change; #N canvas 10 581 400 290 info 0; @@ -52,7 +52,7 @@ You can "set" the current value \, or bang to force output.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.change; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.change.pddoc b/ceammc/ext/doc/flow.change.pddoc index f11cedb40a..9dc7e394d3 100644 --- a/ceammc/ext/doc/flow.change.pddoc +++ b/ceammc/ext/doc/flow.change.pddoc @@ -22,7 +22,8 @@ Note: [list a b c( and [a b c( are different values! - function called when repeat occurs + function called when repeat + occurs diff --git a/ceammc/ext/doc/flow.count-help.pd b/ceammc/ext/doc/flow.count-help.pd index 6edcfb50e2..841beaa1af 100644 --- a/ceammc/ext/doc/flow.count-help.pd +++ b/ceammc/ext/doc/flow.count-help.pd @@ -17,8 +17,8 @@ -49933 0; #X text 110 323 1\.; #X text 150 323 int; -#X obj 246 324 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 N: counter init value. Type: int. Min value: 0; +#X obj 246 324 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 VALUE: counter init value. Type: int. Min value: 0; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -34,28 +34,31 @@ to second(!) inlet or [prop.set] object. Type: int. Default value: #X text 245 466 input messages.; #X text 110 486 2\.; #X text 150 486 *bang*; -#X text 245 486 reset counter to init value.; +#X text 245 486 reset counter to init value (no output).; #X text 150 506 *int*; -#X text 245 506 set current value.; -#X text 245 526 @value X - set current value.; -#X obj 20 556 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 561 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 245 506 set current value (no output).; +#X text 245 526 @value X - set current value (no output).; +#X text 245 546 @value? - output current value.; +#X text 245 566 + X - add specified value (no output).; +#X text 245 586 - X - subtract specified value (no output).; +#X obj 20 616 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 621 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 562 1\.; -#X text 245 562 outputs event number.; +#X text 110 622 1\.; +#X text 245 622 outputs event number.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 612 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 615 library: ceammc v0.9.4; -#N canvas 10 634 400 290 info 0; +#X obj 1 672 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 675 library: ceammc v0.9.6; +#N canvas 10 694 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.count; #X text 10 76 category:; @@ -74,7 +77,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 634 pd info; +#X restore 10 694 pd info; #X connect 4 0 5 0; #X connect 6 0 8 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/flow.count.pddoc b/ceammc/ext/doc/flow.count.pddoc index 77bfdb69c2..9589cbbe39 100644 --- a/ceammc/ext/doc/flow.count.pddoc +++ b/ceammc/ext/doc/flow.count.pddoc @@ -14,7 +14,7 @@ 0.4 - counter init value + counter init value current counter state. Can @@ -25,9 +25,12 @@ input messages - reset counter to init value - set current value - @value X - set current value + reset counter to init value (no output) + set current value (no output) + @value X - set current value (no output) + @value? - output current value + + X - add specified value (no output) + - X - subtract specified value (no output) diff --git a/ceammc/ext/doc/flow.delay-help.pd b/ceammc/ext/doc/flow.delay-help.pd index 7b6ef61ae7..8f43838103 100644 --- a/ceammc/ext/doc/flow.delay-help.pd +++ b/ceammc/ext/doc/flow.delay-help.pd @@ -43,8 +43,8 @@ or [prop.set] object; -49933 0; #X text 110 789 1\.; #X text 150 789 float; -#X obj 246 790 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 789 MS(ms): init @delay property. Type: float. Min value: +#X obj 246 790 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 789 DELAY(ms): init @delay property. Type: float. Min value: 0; #X obj 20 819 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 824 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -53,7 +53,7 @@ or [prop.set] object; #X text 245 859 Get/Set blocking mode. If true \, discards incoming messages until scheduled message will output \, after that is ready to accept the new one. Otherwise acts like vanilla [del] object. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 931 @delay; #X text 245 931 Get/Set delay time. Type: float. Units: ms. Default value: 0\. Min value: 0\.; @@ -79,7 +79,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 1135 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1138 library: ceammc v0.9.4; +#X text 10 1138 library: ceammc v0.9.6; #X text 629 1150 see also:; #X obj 703 1150 delay; #N canvas 10 1157 400 290 info 0; @@ -87,7 +87,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.delay; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.delay.pddoc b/ceammc/ext/doc/flow.delay.pddoc index 1cae7e79c4..33782203af 100644 --- a/ceammc/ext/doc/flow.delay.pddoc +++ b/ceammc/ext/doc/flow.delay.pddoc @@ -28,15 +28,15 @@ Note: @delay property can be set only via right inlet or [prop.set] object - init @delay + init @delay property delay time - blocking mode. If true, - discards incoming messages until scheduled message will output, after that is ready to - accept the new one. Otherwise acts like vanilla [del] object. + blocking mode. If true, discards + incoming messages until scheduled message will output, after that is ready to accept + the new one. Otherwise acts like vanilla [del] object. diff --git a/ceammc/ext/doc/flow.demultiplex-help.pd b/ceammc/ext/doc/flow.demultiplex-help.pd index 203adfdaaf..a121b5ef30 100644 --- a/ceammc/ext/doc/flow.demultiplex-help.pd +++ b/ceammc/ext/doc/flow.demultiplex-help.pd @@ -51,7 +51,7 @@ Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 605 library: ceammc v0.9.4; +#X text 10 605 library: ceammc v0.9.6; #X text 564 617 see also:; #X obj 638 617 flow.multiplex; #N canvas 10 624 400 290 info 0; @@ -59,7 +59,7 @@ Default value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.demultiplex; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.demultiplex2~-help.pd b/ceammc/ext/doc/flow.demultiplex2~-help.pd index a34a3c4ea5..77ec01f3ba 100644 --- a/ceammc/ext/doc/flow.demultiplex2~-help.pd +++ b/ceammc/ext/doc/flow.demultiplex2~-help.pd @@ -68,7 +68,7 @@ Default value: 1 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 777 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 780 library: ceammc v0.9.4; +#X text 10 780 library: ceammc v0.9.6; #X text 411 792 see also:; #X obj 485 792 flow.demultiplex~; #X obj 624 792 flow.demultiplex; @@ -77,7 +77,7 @@ Default value: 1 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.demultiplex2~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.demultiplex~-help.pd b/ceammc/ext/doc/flow.demultiplex~-help.pd index cb23dcf025..0f57e26a73 100644 --- a/ceammc/ext/doc/flow.demultiplex~-help.pd +++ b/ceammc/ext/doc/flow.demultiplex~-help.pd @@ -58,7 +58,7 @@ Default value: 1 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 654 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 657 library: ceammc v0.9.4; +#X text 10 657 library: ceammc v0.9.6; #X text 404 669 see also:; #X obj 478 669 flow.demultiplex2~; #X obj 624 669 flow.demultiplex; @@ -67,7 +67,7 @@ Default value: 1 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.demultiplex~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.dollar-help.pd b/ceammc/ext/doc/flow.dollar-help.pd index aadccf1359..d51068b29c 100644 --- a/ceammc/ext/doc/flow.dollar-help.pd +++ b/ceammc/ext/doc/flow.dollar-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.dollar; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.dup-help.pd b/ceammc/ext/doc/flow.dup-help.pd index ac5e2af651..3ae6274d56 100644 --- a/ceammc/ext/doc/flow.dup-help.pd +++ b/ceammc/ext/doc/flow.dup-help.pd @@ -48,7 +48,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 585 library: ceammc v0.9.4; +#X text 10 585 library: ceammc v0.9.6; #X text 608 597 see also:; #X obj 682 597 flow.mem; #N canvas 10 604 400 290 info 0; @@ -56,7 +56,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.dup; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.float-help.pd b/ceammc/ext/doc/flow.float-help.pd index 250c694954..3157423684 100644 --- a/ceammc/ext/doc/flow.float-help.pd +++ b/ceammc/ext/doc/flow.float-help.pd @@ -40,13 +40,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.gate-help.pd b/ceammc/ext/doc/flow.gate-help.pd index fd0741467c..8b78b883db 100644 --- a/ceammc/ext/doc/flow.gate-help.pd +++ b/ceammc/ext/doc/flow.gate-help.pd @@ -20,16 +20,16 @@ object \, since object accepts all incoming messages; #X obj 20 299 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 334 1\.; -#X text 150 334 int; -#X obj 246 335 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 PASS: init gate state. 1 means open \, 0 - closed. -By default gate is closed. Type: int.; +#X text 150 334 bool; +#X obj 246 335 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 STATE: init gate state. 1 means open \, 0 - closed. +By default gate is closed. Type: bool.; #X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 419 @state; #X text 245 419 Get/Set gate state. 1 means open \, 0 - closed. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -51,7 +51,7 @@ closes.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 583 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 586 library: ceammc v0.9.4; +#X text 10 586 library: ceammc v0.9.6; #X text 601 598 see also:; #X obj 675 598 flow.pass; #N canvas 10 605 400 290 info 0; @@ -59,7 +59,7 @@ closes.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.gate; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.gate.pddoc b/ceammc/ext/doc/flow.gate.pddoc index 39d9b34a93..82dfbdaad5 100644 --- a/ceammc/ext/doc/flow.gate.pddoc +++ b/ceammc/ext/doc/flow.gate.pddoc @@ -25,9 +25,13 @@ accepts all incoming messages - init gate state. 1 means open, 0 - closed. By default - gate is closed + init gate state. 1 means open, 0 - closed. By + default gate is closed + + gate state. 1 means open, 0 - + closed + input flow @@ -36,10 +40,6 @@ gate control inlet. Sending *1* opens gate, *0* - closes - - gate state. 1 means open, 0 - - closed - output flow diff --git a/ceammc/ext/doc/flow.greater-help.pd b/ceammc/ext/doc/flow.greater-help.pd index 3e89bada10..91baf197ac 100644 --- a/ceammc/ext/doc/flow.greater-help.pd +++ b/ceammc/ext/doc/flow.greater-help.pd @@ -20,15 +20,15 @@ are passed to N-th inlet; -49933 0; #X text 110 334 1\.; #X text 150 334 list; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 LIST: compare values: list of floats in descending +#X obj 246 335 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 VALUES: compare values: list of floats in descending order. Type: list.; #X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 419 @values; -#X text 245 419 Get/Set compare values: list of floats in descending -order. Type: list.; +#X text 245 419 (initonly) Get/Set compare values: list of floats in +descending order. Type: list.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -52,7 +52,7 @@ order. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 623 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 626 library: ceammc v0.9.4; +#X text 10 626 library: ceammc v0.9.6; #X text 601 638 see also:; #X obj 675 638 flow.less; #N canvas 10 645 400 290 info 0; @@ -60,7 +60,7 @@ order. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.greater; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.greater.pddoc b/ceammc/ext/doc/flow.greater.pddoc index edb5d7cbbd..d8e0e66c03 100644 --- a/ceammc/ext/doc/flow.greater.pddoc +++ b/ceammc/ext/doc/flow.greater.pddoc @@ -24,12 +24,12 @@ inlet - compare values: list of floats in descending + compare values: list of floats in descending order - compare values: list of floats in descending - order + compare values: list + of floats in descending order diff --git a/ceammc/ext/doc/flow.greater_eq-help.pd b/ceammc/ext/doc/flow.greater_eq-help.pd index c7af1030fa..91968a02e5 100644 --- a/ceammc/ext/doc/flow.greater_eq-help.pd +++ b/ceammc/ext/doc/flow.greater_eq-help.pd @@ -20,15 +20,15 @@ to N+1 inlet; -49933 0; #X text 110 334 1\.; #X text 150 334 list; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 LIST: compare values: list of floats in descending +#X obj 246 335 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 VALUES: compare values: list of floats in descending order. Type: list.; #X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 419 @values; -#X text 245 419 Get/Set compare values: list of floats in descending -order. Type: list.; +#X text 245 419 (initonly) Get/Set compare values: list of floats in +descending order. Type: list.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -52,7 +52,7 @@ order. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 623 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 626 library: ceammc v0.9.4; +#X text 10 626 library: ceammc v0.9.6; #X text 601 638 see also:; #X obj 675 638 flow.less; #N canvas 10 645 400 290 info 0; @@ -60,7 +60,7 @@ order. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.greater_eq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.greater_eq.pddoc b/ceammc/ext/doc/flow.greater_eq.pddoc index e0e9279b91..d42f62756c 100644 --- a/ceammc/ext/doc/flow.greater_eq.pddoc +++ b/ceammc/ext/doc/flow.greater_eq.pddoc @@ -23,12 +23,12 @@ Numbers thar are *less* then last argument are passed to N+1 inlet - compare values: list of floats in descending + compare values: list of floats in descending order - compare values: list of floats in descending - order + compare values: list + of floats in descending order diff --git a/ceammc/ext/doc/flow.group-help.pd b/ceammc/ext/doc/flow.group-help.pd index 202ecbe58e..416217316c 100644 --- a/ceammc/ext/doc/flow.group-help.pd +++ b/ceammc/ext/doc/flow.group-help.pd @@ -60,13 +60,13 @@ Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 719 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 722 library: ceammc v0.9.4; +#X text 10 722 library: ceammc v0.9.6; #N canvas 10 741 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.group; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.group.pddoc b/ceammc/ext/doc/flow.group.pddoc index df736bd82b..0e2cde3963 100644 --- a/ceammc/ext/doc/flow.group.pddoc +++ b/ceammc/ext/doc/flow.group.pddoc @@ -26,7 +26,7 @@ group size - free space + free space left in group diff --git a/ceammc/ext/doc/flow.interval-help.pd b/ceammc/ext/doc/flow.interval-help.pd index e3454020e8..017d455993 100644 --- a/ceammc/ext/doc/flow.interval-help.pd +++ b/ceammc/ext/doc/flow.interval-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 629 520 see also:; #X obj 703 520 timer; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.interval; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.less-help.pd b/ceammc/ext/doc/flow.less-help.pd index 06cc7670aa..3d807d4b59 100644 --- a/ceammc/ext/doc/flow.less-help.pd +++ b/ceammc/ext/doc/flow.less-help.pd @@ -21,15 +21,15 @@ to N-th inlet; -49933 0; #X text 110 334 1\.; #X text 150 334 list; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 LIST: compare values: list of floats in ascending order. -Type: list.; +#X obj 246 335 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 VALUES: compare values: list of floats in ascending +order. Type: list.; #X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 419 @values; -#X text 245 419 Get/Set compare values: list of floats in ascending -order. Type: list.; +#X text 245 419 (initonly) Get/Set compare values: list of floats in +ascending order. Type: list.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -53,7 +53,7 @@ order. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 623 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 626 library: ceammc v0.9.4; +#X text 10 626 library: ceammc v0.9.6; #X text 477 638 see also:; #X obj 551 638 flow.greater; #X obj 653 638 flow.less_eq; @@ -62,7 +62,7 @@ order. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.less; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.less.pddoc b/ceammc/ext/doc/flow.less.pddoc index 80009d4fd7..b0505bf262 100644 --- a/ceammc/ext/doc/flow.less.pddoc +++ b/ceammc/ext/doc/flow.less.pddoc @@ -24,12 +24,12 @@ Numbers thar are *less* then N-th argument are passed to N-th inlet - compare values: list of floats in ascending + compare values: list of floats in ascending order - compare values: list of floats in ascending - order + compare values: list + of floats in ascending order diff --git a/ceammc/ext/doc/flow.less_eq-help.pd b/ceammc/ext/doc/flow.less_eq-help.pd index 6e02ecb388..85e3e244b8 100644 --- a/ceammc/ext/doc/flow.less_eq-help.pd +++ b/ceammc/ext/doc/flow.less_eq-help.pd @@ -21,15 +21,15 @@ passed to N-th inlet; -49933 0; #X text 110 334 1\.; #X text 150 334 list; -#X obj 246 335 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 LIST: compare values: list of floats in ascending order. -Type: list.; +#X obj 246 335 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 VALUES: compare values: list of floats in ascending +order. Type: list.; #X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 419 @values; -#X text 245 419 Get/Set compare values: list of floats in ascending -order. Type: list.; +#X text 245 419 (initonly) Get/Set compare values: list of floats in +ascending order. Type: list.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -53,7 +53,7 @@ order. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 623 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 626 library: ceammc v0.9.4; +#X text 10 626 library: ceammc v0.9.6; #X text 601 638 see also:; #X obj 675 638 flow.less; #N canvas 10 645 400 290 info 0; @@ -61,7 +61,7 @@ order. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.less_eq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.less_eq.pddoc b/ceammc/ext/doc/flow.less_eq.pddoc index 1f8db7f10a..59247ba034 100644 --- a/ceammc/ext/doc/flow.less_eq.pddoc +++ b/ceammc/ext/doc/flow.less_eq.pddoc @@ -23,12 +23,12 @@ Numbers thar are *less equal* then N-th argument are passed to N-th inlet - compare values: list of floats in ascending + compare values: list of floats in ascending order - compare values: list of floats in ascending - order + compare values: list + of floats in ascending order diff --git a/ceammc/ext/doc/flow.list2many-help.pd b/ceammc/ext/doc/flow.list2many-help.pd index ce7ca2eb9d..6f1c320a50 100644 --- a/ceammc/ext/doc/flow.list2many-help.pd +++ b/ceammc/ext/doc/flow.list2many-help.pd @@ -52,13 +52,13 @@ outlet message: [s⁰ l⁰( \, [s¹ l¹( etc...; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 585 library: ceammc v0.9.4; +#X text 10 585 library: ceammc v0.9.6; #N canvas 10 604 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.list2many; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.match-help.pd b/ceammc/ext/doc/flow.match-help.pd index f3cfb0853c..40842d7d3a 100644 --- a/ceammc/ext/doc/flow.match-help.pd +++ b/ceammc/ext/doc/flow.match-help.pd @@ -34,16 +34,17 @@ arg list: "@prop+"; -49933 0; #X text 110 497 1\.; #X text 150 497 list; -#X obj 246 498 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 497 RE_LST: list of regular expressions. Type: list.; +#X obj 246 498 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 497 PATTERNS: list of regular expressions. Type: list.; #X obj 20 527 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 532 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 567 @cut; -#X text 245 567 Get/Set cut or pass message selector. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 567 Get/Set cut or pass message selector. Type: bool. Default +value: 0\.; #X msg 110 609 @patterns; -#X text 245 609 Get/Set list of regular expressions. Type: list.; +#X text 245 609 (initonly) Get/Set list of regular expressions. Type: +list.; #X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 653 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -80,7 +81,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 900 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 903 library: ceammc v0.9.4; +#X text 10 903 library: ceammc v0.9.6; #X text 580 915 see also:; #X obj 654 915 string.match; #N canvas 10 922 400 290 info 0; @@ -88,7 +89,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.match; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.match.pddoc b/ceammc/ext/doc/flow.match.pddoc index 0950436370..a34946f060 100644 --- a/ceammc/ext/doc/flow.match.pddoc +++ b/ceammc/ext/doc/flow.match.pddoc @@ -22,13 +22,13 @@ Regexp library: RE2 - list of regular + list of regular expressions - list of regular expressions - cut or pass message - selector + list of regular + expressions + cut or pass message selector diff --git a/ceammc/ext/doc/flow.mem-help.pd b/ceammc/ext/doc/flow.mem-help.pd index 962963383d..3dadd3aaab 100644 --- a/ceammc/ext/doc/flow.mem-help.pd +++ b/ceammc/ext/doc/flow.mem-help.pd @@ -24,60 +24,63 @@ #X text 110 481 1\.; #X text 150 481 int; #X obj 246 482 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 481 N: number of memory cells. Type: int.; -#X obj 20 511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 516 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 245 481 N: number of memory cells. Type: int. Range: 1\...32; +#X text 110 501 2\.; +#X text 150 501 int; +#X obj 246 502 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 501 TTL: see @ttl property. Type: int. Range: 0\...1024; +#X obj 20 531 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 536 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 551 @free; -#X text 245 551 Get/Set clear cell mode. If on - clear cell counter -after zero was reached. Type: int. Default value: 1\. Allowed values: -0 \, 1\.; -#X msg 110 608 @n; -#X text 245 608 Get/Set number of memory cells. Type: int. Default +#X msg 110 571 @free; +#X text 245 571 Get/Set clear cell mode. If on - clear cell counter +after zero was reached. Type: bool. Default value: 1\.; +#X msg 110 613 @n; +#X text 245 613 Get/Set number of memory cells. Type: int. Default value: 1\. Range: 1\...32\.; -#X msg 110 650 @ttl; -#X text 245 650 Get/Set time to live counter. Each time you set new +#X msg 110 655 @ttl; +#X text 245 655 Get/Set time to live counter. Each time you set new value its memory cell counter is set to this. Each time memory cell is outputted individual memory cell ttl counter (not this property!) is decremented until zero reached. After that if @free property is on memory cell is cleared. If this property equals zero memory cell never expires. Type: int. Default value: 0\. Range: 0\...1024\.; -#X obj 20 777 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 782 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 782 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 787 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 783 1\.; -#X text 245 783 input: store in 1st memory cell.; -#X text 110 803 ....; -#X text 245 803 input: store in ... memory cell.; -#X text 110 823 n.; -#X text 245 823 input: store in n-th memory cell.; -#X text 110 843 n+1\.; -#X text 150 843 *bang*; -#X text 245 843 output all cells.; -#X text 150 863 *int*; -#X text 245 863 output specified cell.; -#X obj 20 893 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 898 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 788 1\.; +#X text 245 788 input: store in 1st memory cell.; +#X text 110 808 ....; +#X text 245 808 input: store in ... memory cell.; +#X text 110 828 n.; +#X text 245 828 input: store in n-th memory cell.; +#X text 110 848 n+1\.; +#X text 150 848 *bang*; +#X text 245 848 output all cells.; +#X text 150 868 *int*; +#X text 245 868 output specified cell.; +#X obj 20 898 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 903 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 899 1\.; -#X text 245 899 output 1st cell.; -#X text 110 919 ....; -#X text 245 919 output ... cell.; -#X text 110 939 n.; -#X text 245 939 output n-th cell.; +#X text 110 904 1\.; +#X text 245 904 output 1st cell.; +#X text 110 924 ....; +#X text 245 924 output ... cell.; +#X text 110 944 n.; +#X text 245 944 output n-th cell.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 989 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 992 library: ceammc v0.9.4; -#N canvas 10 1011 400 290 info 0; +#X obj 1 994 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 997 library: ceammc v0.9.6; +#N canvas 10 1016 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.mem; #X text 10 76 category:; @@ -96,7 +99,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1011 pd info; +#X restore 10 1016 pd info; #X connect 4 0 7 0; #X connect 5 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/flow.mem.pddoc b/ceammc/ext/doc/flow.mem.pddoc index 56f698928d..038981524b 100644 --- a/ceammc/ext/doc/flow.mem.pddoc +++ b/ceammc/ext/doc/flow.mem.pddoc @@ -14,13 +14,16 @@ 0.9.1 - number of memory cells + number of memory + cells + see @ttl + property number of memory cells - clear cell mode. If on - clear - cell counter after zero was reached. + clear cell mode. If on - clear cell + counter after zero was reached. time to live counter. Each time you set new value its memory cell counter is set to this. Each time memory cell is outputted individual memory cell ttl counter (not this property!) is diff --git a/ceammc/ext/doc/flow.multiplex-help.pd b/ceammc/ext/doc/flow.multiplex-help.pd index 745b441ecb..5983526b12 100644 --- a/ceammc/ext/doc/flow.multiplex-help.pd +++ b/ceammc/ext/doc/flow.multiplex-help.pd @@ -61,7 +61,7 @@ Range: 0\...23\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 675 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 678 library: ceammc v0.9.4; +#X text 10 678 library: ceammc v0.9.6; #X text 550 690 see also:; #X obj 624 690 flow.demultiplex; #N canvas 10 697 400 290 info 0; @@ -69,7 +69,7 @@ Range: 0\...23\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.multiplex; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.multiplex2~-help.pd b/ceammc/ext/doc/flow.multiplex2~-help.pd index 4006a34bb2..36690fd702 100644 --- a/ceammc/ext/doc/flow.multiplex2~-help.pd +++ b/ceammc/ext/doc/flow.multiplex2~-help.pd @@ -61,7 +61,7 @@ Default value: 1 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 748 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 751 library: ceammc v0.9.4; +#X text 10 751 library: ceammc v0.9.6; #X text 440 763 see also:; #X obj 514 763 flow.multiplex~; #X obj 638 763 flow.multiplex; @@ -70,7 +70,7 @@ Default value: 1 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.multiplex2~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.multiplex~-help.pd b/ceammc/ext/doc/flow.multiplex~-help.pd index 58546f3761..54c2002788 100644 --- a/ceammc/ext/doc/flow.multiplex~-help.pd +++ b/ceammc/ext/doc/flow.multiplex~-help.pd @@ -49,7 +49,7 @@ Default value: 1 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 620 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 623 library: ceammc v0.9.4; +#X text 10 623 library: ceammc v0.9.6; #X text 433 635 see also:; #X obj 507 635 flow.multiplex2~; #X obj 638 635 flow.multiplex; @@ -58,7 +58,7 @@ Default value: 1 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.multiplex~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.once-help.pd b/ceammc/ext/doc/flow.once-help.pd index bb000a6579..2fcdffb51a 100644 --- a/ceammc/ext/doc/flow.once-help.pd +++ b/ceammc/ext/doc/flow.once-help.pd @@ -39,7 +39,7 @@ Type: int.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 flow.gate; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ Type: int.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.once; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.pack-help.pd b/ceammc/ext/doc/flow.pack-help.pd index 1dba0119fe..47266c6876 100644 --- a/ceammc/ext/doc/flow.pack-help.pd +++ b/ceammc/ext/doc/flow.pack-help.pd @@ -20,20 +20,20 @@ #X text 110 279 1\.; #X text 150 279 int; #X obj 246 280 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 279 N: number of inputs. Type: int. Min value: 1; +#X text 245 279 N: number of inputs. Type: int. Range: 1\...255; #X text 110 299 2\.; #X text 150 299 list; -#X obj 246 300 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 299 VALS: default values for all inlets. If not enough +#X obj 246 300 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 INIT: default values for all inlets. If not enough default values given it sets to 0\.. Type: list.; #X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 349 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 384 @init; -#X text 245 384 Get/Set default init values. Type: list.; +#X text 245 384 (initonly) Get/Set default init values. Type: list.; #X msg 110 413 @n; -#X text 245 413 Get/Set number of inlets. Type: int. Default value: -1\. Range: 1\...255\.; +#X text 245 413 (initonly) Get/Set number of inlets. Type: int. Default +value: 1\. Range: 1\...255\.; #X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 470 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -73,7 +73,7 @@ default values given it sets to 0\.. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 757 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 760 library: ceammc v0.9.4; +#X text 10 760 library: ceammc v0.9.6; #X text 439 772 see also:; #X obj 513 772 pack; #X obj 558 772 flow.sync; @@ -83,7 +83,7 @@ default values given it sets to 0\.. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.pack; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.pack.pddoc b/ceammc/ext/doc/flow.pack.pddoc index cdfa096322..db57192729 100644 --- a/ceammc/ext/doc/flow.pack.pddoc +++ b/ceammc/ext/doc/flow.pack.pddoc @@ -19,14 +19,15 @@ - number of inputs - default values for all inlets. If not enough default + number of inputs + default values for all inlets. If not enough default values given it sets to 0. - number of - inlets - default init values + number of inlets + default init + values diff --git a/ceammc/ext/doc/flow.pass-help.pd b/ceammc/ext/doc/flow.pass-help.pd index abd07c52d7..48b37bb0d6 100644 --- a/ceammc/ext/doc/flow.pass-help.pd +++ b/ceammc/ext/doc/flow.pass-help.pd @@ -16,48 +16,55 @@ #X obj 50 190 flow.pass 1 10 100 a z; #X obj 50 219 ui.display @display_type 1; #X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 273 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 273 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 308 @values; -#X text 245 308 Get/Set atoms to pass. Type: list.; -#X obj 20 347 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 352 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 308 1\.; +#X text 150 308 list; +#X obj 246 309 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 308 VALUES: atoms to pass. Type: list.; +#X obj 20 338 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 343 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 378 @values; +#X text 245 378 Get/Set atoms to pass. Type: list.; +#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 353 1\.; -#X text 150 353 *bang*; -#X text 245 353 pass.; -#X text 150 373 *float*; -#X text 245 373 pass if float found in pass list.; -#X text 150 393 *symbol*; -#X text 245 393 pass if symbol found in pass list.; -#X text 150 413 *list*; -#X text 245 413 pass if first atom found in pass list.; -#X text 150 433 *any*; -#X text 245 433 pass if message selector found in pass list.; -#X text 110 453 2\.; -#X text 150 453 *list*; -#X text 245 453 set pass list.; -#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 488 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 423 1\.; +#X text 150 423 *bang*; +#X text 245 423 pass.; +#X text 150 443 *float*; +#X text 245 443 pass if float found in pass list.; +#X text 150 463 *symbol*; +#X text 245 463 pass if symbol found in pass list.; +#X text 150 483 *list*; +#X text 245 483 pass if first atom found in pass list.; +#X text 150 503 *any*; +#X text 245 503 pass if message selector found in pass list.; +#X text 110 523 2\.; +#X text 150 523 *list*; +#X text 245 523 set pass list.; +#X obj 20 553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 558 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 489 1\.; -#X text 245 489 passed values.; +#X text 110 559 1\.; +#X text 245 559 passed values.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 539 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 542 library: ceammc v0.9.4; -#X text 485 554 see also:; -#X obj 559 554 flow.pass_if; -#X obj 661 554 flow.reject; -#N canvas 10 561 400 290 info 0; +#X obj 1 609 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 612 library: ceammc v0.9.6; +#X text 485 624 see also:; +#X obj 559 624 flow.pass_if; +#X obj 661 624 flow.reject; +#N canvas 10 631 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.pass; #X text 10 76 category:; @@ -76,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 561 pd info; +#X restore 10 631 pd info; #X connect 6 0 11 0; #X connect 9 0 11 0; #X connect 7 0 11 0; diff --git a/ceammc/ext/doc/flow.pass.pddoc b/ceammc/ext/doc/flow.pass.pddoc index 0623878819..f846045eae 100644 --- a/ceammc/ext/doc/flow.pass.pddoc +++ b/ceammc/ext/doc/flow.pass.pddoc @@ -21,8 +21,11 @@ flow.reject + + atoms to pass + - atoms to pass + atoms to pass diff --git a/ceammc/ext/doc/flow.pass_if-help.pd b/ceammc/ext/doc/flow.pass_if-help.pd index c4d339a48f..5c644be02f 100644 --- a/ceammc/ext/doc/flow.pass_if-help.pd +++ b/ceammc/ext/doc/flow.pass_if-help.pd @@ -49,7 +49,7 @@ pass \, '0' means reject. Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 538 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 541 library: ceammc v0.9.4; +#X text 10 541 library: ceammc v0.9.6; #X text 601 553 see also:; #X obj 675 553 flow.pass; #N canvas 10 560 400 290 info 0; @@ -57,7 +57,7 @@ pass \, '0' means reject. Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.pass_if; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.pipe-help.pd b/ceammc/ext/doc/flow.pipe-help.pd index 377a08ab42..e2a14382eb 100644 --- a/ceammc/ext/doc/flow.pipe-help.pd +++ b/ceammc/ext/doc/flow.pipe-help.pd @@ -24,8 +24,8 @@ or [prop.set] object; -49933 0; #X text 110 532 1\.; #X text 150 532 float; -#X obj 246 533 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 532 MS(ms): init @delay property. Type: float. Min value: +#X obj 246 533 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 532 DELAY(ms): init @delay property. Type: float. Min value: 0; #X obj 20 562 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 567 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -35,7 +35,7 @@ or [prop.set] object; value: 0\. Min value: 0\.; #X msg 110 644 @empty; #X text 245 644 (readonly) Get 1 if pipe is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; +Type: bool. Default value: 1\.; #X msg 110 686 @size; #X text 245 686 (readonly) Get pipe size. Type: int. Default value: 0\.; @@ -62,7 +62,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 897 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 900 library: ceammc v0.9.4; +#X text 10 900 library: ceammc v0.9.6; #X text 593 912 see also:; #X obj 667 912 flow.delay; #N canvas 10 919 400 290 info 0; @@ -70,7 +70,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.pipe; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.pipe.pddoc b/ceammc/ext/doc/flow.pipe.pddoc index a70e7c4eb8..f683808bc8 100644 --- a/ceammc/ext/doc/flow.pipe.pddoc +++ b/ceammc/ext/doc/flow.pipe.pddoc @@ -21,15 +21,15 @@ Note: @delay property can be set only via right inlet or [prop.set] object - init @delay + init @delay property delay time - 1 if pipe is - empty, otherwise 0. - pipe size + 1 if pipe is empty, + otherwise 0. + pipe size diff --git a/ceammc/ext/doc/flow.queue-help.pd b/ceammc/ext/doc/flow.queue-help.pd index 464202776e..48f086b6eb 100644 --- a/ceammc/ext/doc/flow.queue-help.pd +++ b/ceammc/ext/doc/flow.queue-help.pd @@ -23,8 +23,8 @@ -49933 0; #X text 110 467 1\.; #X text 150 467 int; -#X obj 246 468 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 467 MAX: max queue size. Type: int. Range: 1\...1024; +#X obj 246 468 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 467 MAX_SIZE: max queue size. Type: int. Range: 1\...1024; #X text 110 487 2\.; #X text 150 487 int; #X obj 246 488 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -34,51 +34,50 @@ -49933 0; #X msg 110 557 @auto_pop; #X text 245 557 Get/Set auto pop mode. If true automatically pops oldest -elements when queue is full. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 614 @max_size; -#X text 245 614 Get/Set max queue size. Type: int. Default value: 32\. +elements when queue is full. Type: bool. Default value: 0\.; +#X msg 110 599 @max_size; +#X text 245 599 Get/Set max queue size. Type: int. Default value: 32\. Range: 1\...1024\.; -#X obj 20 666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 671 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 656 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 672 1\.; -#X text 150 672 *any*; -#X text 245 672 1st queue input messages.; -#X text 110 692 ....; -#X text 150 692 *any*; -#X text 245 692 ... queue input messages.; -#X text 110 712 n.; -#X text 150 712 *any*; -#X text 245 712 n-th queue input messages.; -#X text 110 732 n+1\.; -#X text 150 732 *any*; -#X text 245 732 clear: remove all elements from all queues \, output: +#X text 110 657 1\.; +#X text 150 657 *any*; +#X text 245 657 1st queue input messages.; +#X text 110 677 ....; +#X text 150 677 *any*; +#X text 245 677 ... queue input messages.; +#X text 110 697 n.; +#X text 150 697 *any*; +#X text 245 697 n-th queue input messages.; +#X text 110 717 n+1\.; +#X text 150 717 *any*; +#X text 245 717 clear: remove all elements from all queues \, output: output all element from all queues \, flush: output and clear all element from all queues \, bang or pop: output and remove first message in all queues.; -#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 812 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 797 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 813 1\.; -#X text 245 813 1st queue output.; -#X text 110 833 ....; -#X text 245 833 ... queue output.; -#X text 110 853 n.; -#X text 245 853 n-th queue output.; +#X text 110 798 1\.; +#X text 245 798 1st queue output.; +#X text 110 818 ....; +#X text 245 818 ... queue output.; +#X text 110 838 n.; +#X text 245 838 n-th queue output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 903 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 906 library: ceammc v0.9.4; -#N canvas 10 925 400 290 info 0; +#X obj 1 888 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 891 library: ceammc v0.9.6; +#N canvas 10 910 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.queue; #X text 10 76 category:; @@ -97,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 925 pd info; +#X restore 10 910 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/flow.queue.pddoc b/ceammc/ext/doc/flow.queue.pddoc index 4ca1d2afa3..ae920165fe 100644 --- a/ceammc/ext/doc/flow.queue.pddoc +++ b/ceammc/ext/doc/flow.queue.pddoc @@ -14,14 +14,15 @@ 0.9.1 - max queue size + max queue + size number of lines max queue size - auto pop mode. If true - automatically pops oldest elements when queue is full + auto pop mode. If true automatically + pops oldest elements when queue is full diff --git a/ceammc/ext/doc/flow.record-help.pd b/ceammc/ext/doc/flow.record-help.pd index 9ae345a2b7..e6b6a3aa8e 100644 --- a/ceammc/ext/doc/flow.record-help.pd +++ b/ceammc/ext/doc/flow.record-help.pd @@ -25,7 +25,7 @@ -49933 0; #X msg 110 510 @auto; #X text 245 510 Get/Set autostart record on first input atom. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 552 @max; #X text 245 552 Get/Set max number of events \, if 0: no max size check. If @auto is set - starts playback when max size reached. Type: int. @@ -35,10 +35,10 @@ Default value: 256\. Range: 0\...65536\.; infinitely. Type: int. Default value: 1\. Min value: -1\.; #X msg 110 651 @speed; #X text 245 651 Get/Set play speed. Type: float. Default value: 1\. -Range: 0.015625\...64\.; +Range: 0.0156\...64\.; #X msg 110 693 @sync; #X text 245 693 Get/Set use external bang pulse to sync recorded events -with. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +with. Type: bool. Default value: 0\.; #X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 750 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -67,13 +67,13 @@ after specified length).; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 1012 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1015 library: ceammc v0.9.4; +#X text 10 1015 library: ceammc v0.9.6; #N canvas 10 1034 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.record; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.record.pddoc b/ceammc/ext/doc/flow.record.pddoc index 1ee94c3f2a..6c3932b0c7 100644 --- a/ceammc/ext/doc/flow.record.pddoc +++ b/ceammc/ext/doc/flow.record.pddoc @@ -22,12 +22,12 @@ max number of events, if 0: no max size check. If @auto is set - starts playback when max size reached. - play + play speed - autostart record on first - input atom - use external bang pulse to - sync recorded events with. + autostart record on first input + atom + use external bang pulse to sync recorded + events with. diff --git a/ceammc/ext/doc/flow.reject-help.pd b/ceammc/ext/doc/flow.reject-help.pd index 773156afd4..8e9d55976d 100644 --- a/ceammc/ext/doc/flow.reject-help.pd +++ b/ceammc/ext/doc/flow.reject-help.pd @@ -17,8 +17,8 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 list; -#X obj 246 295 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 values: list of atoms to reject. Type: list.; +#X obj 246 295 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 VALUES: list of atoms to reject. Type: list.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -33,7 +33,7 @@ #X text 150 429 *float*; #X text 245 429 reject if float is in reject list.; #X text 150 449 *symbol*; -#X text 245 449 reject if float is in reject list.; +#X text 245 449 reject if symbol is in reject list.; #X text 150 469 *list*; #X text 245 469 reject if first atom is in reject list.; #X text 150 489 *any*; @@ -52,7 +52,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 595 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 598 library: ceammc v0.9.4; +#X text 10 598 library: ceammc v0.9.6; #X text 485 610 see also:; #X obj 559 610 flow.reject_if; #X obj 675 610 flow.pass; @@ -61,7 +61,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.reject; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.reject.pddoc b/ceammc/ext/doc/flow.reject.pddoc index b5fdbc9e76..1bee5972c3 100644 --- a/ceammc/ext/doc/flow.reject.pddoc +++ b/ceammc/ext/doc/flow.reject.pddoc @@ -23,16 +23,16 @@ - list of atoms to reject + list of atoms to reject - atoms to reject + atoms to reject pass reject if float is in reject list - reject if float is in reject list + reject if symbol is in reject list reject if first atom is in reject list reject if message selector is in reject list diff --git a/ceammc/ext/doc/flow.reject_if-help.pd b/ceammc/ext/doc/flow.reject_if-help.pd index b71a533fc6..9d77c20e78 100644 --- a/ceammc/ext/doc/flow.reject_if-help.pd +++ b/ceammc/ext/doc/flow.reject_if-help.pd @@ -37,7 +37,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 420 520 see also:; #X obj 494 520 flow.pass_if; #X obj 596 520 flow.reject; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.reject_if; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.ring-help.pd b/ceammc/ext/doc/flow.ring-help.pd index 21e0d0d102..375a97d559 100644 --- a/ceammc/ext/doc/flow.ring-help.pd +++ b/ceammc/ext/doc/flow.ring-help.pd @@ -22,14 +22,14 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 int; -#X obj 246 295 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 N: buffer length. Type: int. Min value: 1; +#X obj 246 295 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 LENGTH: buffer length. Type: int. Range: 1\...24; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 364 @length; -#X text 245 364 Get/Set buffer length. Type: int. Default value: 2\. -Range: 1\...24\.; +#X text 245 364 (initonly) Get/Set buffer length. Type: int. Default +value: 2\. Range: 1\...24\.; #X obj 20 416 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 421 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -56,13 +56,13 @@ output).; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 608 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 611 library: ceammc v0.9.4; +#X text 10 611 library: ceammc v0.9.6; #N canvas 10 630 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.ring; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.ring.pddoc b/ceammc/ext/doc/flow.ring.pddoc index a4552a471e..25a2524a5f 100644 --- a/ceammc/ext/doc/flow.ring.pddoc +++ b/ceammc/ext/doc/flow.ring.pddoc @@ -17,11 +17,11 @@ - buffer length + buffer length - buffer - length + buffer length diff --git a/ceammc/ext/doc/flow.route-help.pd b/ceammc/ext/doc/flow.route-help.pd index 81ec47014b..0f1188ba58 100644 --- a/ceammc/ext/doc/flow.route-help.pd +++ b/ceammc/ext/doc/flow.route-help.pd @@ -63,13 +63,13 @@ corresponding outlets \, if starts with * output with matched key.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 862 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 865 library: ceammc v0.9.4; +#X text 10 865 library: ceammc v0.9.6; #N canvas 10 884 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.route; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.select-help.pd b/ceammc/ext/doc/flow.select-help.pd index a88f83d354..325313dc77 100644 --- a/ceammc/ext/doc/flow.select-help.pd +++ b/ceammc/ext/doc/flow.select-help.pd @@ -39,11 +39,10 @@ #X obj 20 599 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 634 @keep_value; -#X text 245 634 Get/Set vakue output mode. If false (by default) acts +#X text 245 634 Get/Set value output mode. If false (by default) acts like vanilla select: output bang on match or full unmatched message to last outlet. If true always outputs full matched message to corresponding -outlet. Type: int. Default value: 0\. Allowed values: 0 \, 1 \, on -\, off.; +outlet. Type: bool. Default value: 0\.; #X msg 110 721 @v; #X text 245 721 alias to @keep_value 1\.; #X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -75,7 +74,7 @@ outlet. Type: int. Default value: 0\. Allowed values: 0 \, 1 \, on #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 972 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 975 library: ceammc v0.9.4; +#X text 10 975 library: ceammc v0.9.6; #X text 594 987 see also:; #X obj 668 987 flow.match; #N canvas 10 994 400 290 info 0; @@ -83,7 +82,7 @@ outlet. Type: int. Default value: 0\. Allowed values: 0 \, 1 \, on #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.select; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.select.pddoc b/ceammc/ext/doc/flow.select.pddoc index c2addefac5..c2f03d2bb1 100644 --- a/ceammc/ext/doc/flow.select.pddoc +++ b/ceammc/ext/doc/flow.select.pddoc @@ -33,10 +33,10 @@ alias to @keep_value 1 - vakue output - mode. If false (by default) acts like vanilla select: output bang on match or full - unmatched message to last outlet. If true always outputs full matched message to - corresponding outlet. + value output mode. If false (by + default) acts like vanilla select: output bang on match or full unmatched message to + last outlet. If true always outputs full matched message to corresponding + outlet. diff --git a/ceammc/ext/doc/flow.seqdelay-help.pd b/ceammc/ext/doc/flow.seqdelay-help.pd new file mode 100644 index 0000000000..e8509561f9 --- /dev/null +++ b/ceammc/ext/doc/flow.seqdelay-help.pd @@ -0,0 +1,127 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 468 50 cnv 1 297 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 468 50 sequential delay/router for input flow; +#X obj 1 1 cnv 5 765 40 empty empty flow.seqdelay 20 20 0 20 -104026 +-4096 0; +#X obj 541 11 flow.seqdel; +#X obj 646 11 flow.seqdelay; +#X obj 210 80 cnv 1 555 160 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Delay any route incoming message by specified relative +time list. If @block=0 if new message has arrived while delay time +is not expired \, old message is discarded and new delay time is set +from current moment.; +#X text 215 150 Zero delay time means output message on next Pd runloop +iteration (as soon as possible); +#X text 215 190 Note: @t and @block property can be set only via right +inlet or with [prop.set] object; +#X msg 50 268 bang; +#X msg 242 268 list 0 500 120 110; +#X text 443 268 - change pattern; +#X obj 126 297 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 270 297 list 0 400 100 300; +#X msg 126 326 @block \$1; +#X obj 50 355 flow.seqdel 0 0 0 0; +#X obj 203 384 synth.church_bell~; +#X obj 155 412 synth.german_bell~; +#X obj 98 441 synth.english_bell~; +#X obj 50 470 synth.russian_bell~; +#X obj 290 470 ui.dsp~; +#X obj 50 499 pan.spread~ 4, f 21; +#X obj 50 528 ui.hgain2~ @size 15 151; +#X obj 50 556 dac~ 1 2, f 21; +#X obj 20 605 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 610 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 645 1\.; +#X text 150 645 list; +#X obj 246 646 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 645 T(ms): List of delay times. See @t property.. Type: +list.; +#X obj 20 675 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 680 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 715 @block; +#X text 245 715 Get/Set blocking mode. If true \, discards incoming +messages until scheduled message will output \, after that is ready +to accept the new one. Type: bool. Default value: 0\.; +#X msg 110 772 @t; +#X text 245 772 Get/Set delay time list. Type: list. Units: ms. Min +value: 0\.; +#X obj 20 824 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 829 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 864 reset; +#X text 245 864 reset all scheduled delays.; +#X obj 20 901 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 906 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 907 1\.; +#X text 245 907 incoming message.; +#X text 110 927 2\.; +#X text 150 927 *list*; +#X text 245 927 set delay times.; +#X text 150 947 *any*; +#X text 245 947 'reset' - reset all scheduled delays \, '@t' - set +@t property \, '@block' - set @block property \, 'dump' - dump object +info to Pd window.; +#X obj 20 1007 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1012 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1013 1\.; +#X text 245 1013 first delayed output.; +#X text 110 1033 ....; +#X text 245 1033 ...-th delayed output.; +#X text 110 1053 n.; +#X text 245 1053 n-th delayed output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 1103 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1106 library: ceammc v0.9.6; +#X text 593 1118 see also:; +#X obj 667 1118 flow.delay; +#N canvas 10 1125 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 flow.seqdelay; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 flow \, seq \, delay; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1125 pd info; +#X connect 12 0 14 0; +#X connect 9 0 15 0; +#X connect 14 0 15 1; +#X connect 10 0 15 1; +#X connect 13 0 15 1; +#X connect 15 3 16 0; +#X connect 15 2 17 0; +#X connect 15 1 18 0; +#X connect 15 0 19 0; +#X connect 19 0 21 0; +#X connect 21 0 22 0; +#X connect 21 1 22 1; +#X connect 22 0 23 0; +#X connect 22 1 23 1; +#X connect 18 0 21 1; +#X connect 17 0 21 2; +#X connect 16 0 21 3; \ No newline at end of file diff --git a/ceammc/ext/doc/flow.seqdelay.pddoc b/ceammc/ext/doc/flow.seqdelay.pddoc new file mode 100644 index 0000000000..8901747013 --- /dev/null +++ b/ceammc/ext/doc/flow.seqdelay.pddoc @@ -0,0 +1,89 @@ + + + + flow.seqdelay + + + Serge Poltavsky + + sequential delay/router for input flow + GPL3 or later + ceammc + flow + flow seq delay + 0.9.5 + + flow.seqdel + + + flow.delay + + + + Delay any route incoming message by specified relative time list. If @block=0 if + new message has arrived while delay time is not expired, old message is discarded and + new delay time is set from current moment. + Zero delay time means output message on next Pd runloop iteration (as soon as + possible) + Note: @t and @block property can be set only via right inlet or with [prop.set] + object + + + List of delay times. See @t + property. + + + reset all scheduled delays + + + delay time + list + blocking mode. If true, discards + incoming messages until scheduled message will output, after that is ready to accept + the new one. + + + + incoming message + + + set delay times + 'reset' - reset all scheduled delays, '@t' - set @t property, + '@block' - set @block property, 'dump' - dump object info to Pd window. + + + + first delayed output + ...-th delayed output + n-th delayed output + + + +x:1] [X c->x:2] [X d->x:3] +]]> + + + + diff --git a/ceammc/ext/doc/flow.space-help.pd b/ceammc/ext/doc/flow.space-help.pd index 87dd7676a5..1c9a2b0d4c 100644 --- a/ceammc/ext/doc/flow.space-help.pd +++ b/ceammc/ext/doc/flow.space-help.pd @@ -10,72 +10,78 @@ time; #X text 215 80 first message is delayed to next scheduler time; #X msg 50 143 7 \, 2 \, 1 \, 2 \, 0 \, 2 \, 1 \, 2; #X msg 318 143 reset; -#X obj 50 172 flow.space 110; -#X obj 50 201 degree->key minor; -#X obj 50 230 + 60; -#X obj 50 259 mtof; -#X obj 50 287 osc~; -#X obj 117 287 b; -#X obj 50 316 env.ar~ 10 90; -#X obj 50 345 ui.hgain~; -#X obj 194 345 ui.dsp~; -#X obj 50 374 dac~; -#X obj 50 403 flow.space.done; -#X obj 20 452 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 457 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 88 172 ui.hsl @show_value 1; +#X msg 88 201 @dev \$1; +#X obj 50 230 flow.space 110; +#X obj 50 259 degree->key minor; +#X obj 50 287 + 60; +#X obj 50 316 mtof; +#X obj 50 345 osc~; +#X obj 117 345 b; +#X obj 50 374 env.ar~ 10 90; +#X obj 50 403 ui.hgain~; +#X obj 194 403 ui.dsp~; +#X obj 50 431 dac~; +#X obj 50 460 flow.space.done; +#X obj 20 509 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 514 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 492 1\.; -#X text 150 492 float; -#X obj 246 493 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 492 MS(ms): time space between messages. Type: float.; -#X text 110 512 2\.; -#X text 150 512 int; -#X obj 246 513 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 512 N: time space = N*space after last outputted message. +#X text 110 549 1\.; +#X text 150 549 float; +#X obj 246 550 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 549 DELAY(ms): time space between messages. Type: float. +Min value: 1; +#X text 110 584 2\.; +#X text 150 584 int; +#X obj 246 585 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 584 DONE: time space = N*space after last outputted message. Type: int. Min value: 0; -#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 562 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 629 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 634 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 597 @delay; -#X text 245 597 Get/Set time-space between messages. Type: float. Units: +#X msg 110 669 @delay; +#X text 245 669 Get/Set time-space between messages. Type: float. Units: ms. Default value: 1\. Min value: 1\.; -#X msg 110 639 @done; -#X text 245 639 Get/Set time space (=@done*@delay) after last outputted +#X msg 110 711 @dev; +#X text 245 711 Get/Set random deviation. Type: float. Default value: +0\. Range: 0\...1\.; +#X msg 110 753 @done; +#X text 245 753 Get/Set time space (=@done*@delay) after last outputted message. After that delay output bang to second outlet. Type: int. Default value: 1\. Min value: 0\.; -#X obj 20 706 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 711 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 820 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 825 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 712 1\.; -#X text 245 712 messages.; -#X text 110 732 2\.; -#X text 150 732 *float*; -#X text 245 732 set space interval (ms).; -#X text 245 752 reset: cancel all scheduled outputs and clear message +#X text 110 826 1\.; +#X text 245 826 messages.; +#X text 110 846 2\.; +#X text 150 846 *float*; +#X text 245 846 set space interval (ms).; +#X text 245 866 reset: cancel all scheduled outputs and clear message queue.; -#X text 245 772 @delay: set @delay property.; -#X text 245 792 @done: set @done property.; -#X obj 20 822 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 827 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 245 886 @delay: set @delay property.; +#X text 245 906 @done: set @done property.; +#X obj 20 936 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 941 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 828 1\.; -#X text 245 828 output.; -#X text 110 848 2\.; -#X text 245 848 bang on finish (after @delay*@done ms after last outputted +#X text 110 942 1\.; +#X text 245 942 output.; +#X text 110 962 2\.; +#X text 245 962 bang on finish (after @delay*@done ms after last outputted message).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; -#X obj 1 913 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 916 library: ceammc v0.9.4; -#N canvas 10 935 400 290 info 0; +#X obj 1 1027 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1030 library: ceammc v0.9.6; +#N canvas 10 1049 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.space; #X text 10 76 category:; @@ -94,17 +100,19 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 935 pd info; -#X connect 6 0 8 0; -#X connect 7 0 8 1; +#X restore 10 1049 pd info; #X connect 8 0 9 0; +#X connect 6 0 10 0; #X connect 9 0 10 0; +#X connect 7 0 10 1; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 11 0 13 0; -#X connect 12 0 14 0; +#X connect 12 0 13 0; #X connect 13 0 14 0; -#X connect 14 0 15 0; -#X connect 15 0 17 0; -#X connect 15 0 17 1; -#X connect 8 1 6 0; \ No newline at end of file +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X connect 17 0 19 0; +#X connect 17 0 19 1; +#X connect 10 1 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flow.space.done.pd b/ceammc/ext/doc/flow.space.done.pd index b67d23b4a0..bcbf7036ee 100644 --- a/ceammc/ext/doc/flow.space.done.pd +++ b/ceammc/ext/doc/flow.space.done.pd @@ -1,4 +1,4 @@ -#N canvas 0 0 421 357 12; +#N canvas 0 0 421 414 12; #X msg 20 48 3; #X obj 144 48 ui.hrd; #X obj 20 77 until; diff --git a/ceammc/ext/doc/flow.space.pddoc b/ceammc/ext/doc/flow.space.pddoc index 06a8c7c997..862bce34d8 100644 --- a/ceammc/ext/doc/flow.space.pddoc +++ b/ceammc/ext/doc/flow.space.pddoc @@ -17,8 +17,9 @@ first message is delayed to next scheduler time - time space between messages - time space = N*space after last outputted + time space between + messages + time space = N*space after last outputted message @@ -26,6 +27,8 @@ time-space between messages time space (=@done*@delay) after last outputted message. After that delay output bang to second outlet + random + deviation @@ -46,7 +49,11 @@ key minor {i=1,o=1}] diff --git a/ceammc/ext/doc/flow.speedlim-help.pd b/ceammc/ext/doc/flow.speedlim-help.pd index c3ef0bb87b..948e2c17bc 100644 --- a/ceammc/ext/doc/flow.speedlim-help.pd +++ b/ceammc/ext/doc/flow.speedlim-help.pd @@ -27,8 +27,8 @@ this interval expiried goes to opened state; -49933 0; #X text 110 480 1\.; #X text 150 480 int; -#X obj 246 481 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 480 TIME(ms): limit time. Type: int.; +#X obj 246 481 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 480 LIMIT(ms): limit time. Type: int. Min value: 0; #X obj 20 510 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 515 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -57,13 +57,13 @@ limitations. Type: int. Units: ms. Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 769 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 772 library: ceammc v0.9.4; +#X text 10 772 library: ceammc v0.9.6; #N canvas 10 791 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.speedlim; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.speedlim.pddoc b/ceammc/ext/doc/flow.speedlim.pddoc index 9e50987f69..a40914c7ec 100644 --- a/ceammc/ext/doc/flow.speedlim.pddoc +++ b/ceammc/ext/doc/flow.speedlim.pddoc @@ -24,7 +24,8 @@ After this interval expiried goes to opened state - limit time + limit + time speed diff --git a/ceammc/ext/doc/flow.split-help.pd b/ceammc/ext/doc/flow.split-help.pd index 7f528e3f37..5e9aea42af 100644 --- a/ceammc/ext/doc/flow.split-help.pd +++ b/ceammc/ext/doc/flow.split-help.pd @@ -48,7 +48,7 @@ for first outlet. If 0 - to second.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 507 520 see also:; #X obj 581 520 flow.pass; #X obj 661 520 flow.reject; @@ -57,7 +57,7 @@ for first outlet. If 0 - to second.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.split; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.stack-help.pd b/ceammc/ext/doc/flow.stack-help.pd index 858c18a675..8fda658804 100644 --- a/ceammc/ext/doc/flow.stack-help.pd +++ b/ceammc/ext/doc/flow.stack-help.pd @@ -20,14 +20,14 @@ -49933 0; #X text 110 323 1\.; #X text 150 323 int; -#X obj 246 324 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 N: max stack size. Type: int.; +#X obj 246 324 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 MAX_SIZE: max stack size. Type: int. Min value: 1; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 393 @empty; -#X text 245 393 (readonly) Get if stack is empty. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 393 (readonly) Get if stack is empty. Type: bool. Default +value: 1\.; #X msg 110 435 @max_size; #X text 245 435 Get/Set maximum stack grow size. Type: int. Default value: 100\. Min value: 1\.; @@ -65,13 +65,13 @@ Type: int. Default value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 865 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 868 library: ceammc v0.9.4; +#X text 10 868 library: ceammc v0.9.6; #N canvas 10 887 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.stack; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.stack.pddoc b/ceammc/ext/doc/flow.stack.pddoc index 388042b9e6..ece65bef8e 100644 --- a/ceammc/ext/doc/flow.stack.pddoc +++ b/ceammc/ext/doc/flow.stack.pddoc @@ -14,21 +14,21 @@ 0.9.1 - max stack size + max stack size maximum stack grow size - current number of + current number of elements in stack - if stack is + if stack is empty - message send to destination address when stack - becomes empty. First list element is address to send, other additional elements treated - as message or bang if not specified. - message send to destination address when stack - becomes full. First list element is address to send, other additional elements treated - as message or bang if not specified. + message send to destination address + when stack becomes empty. First list element is address to send, other additional + elements treated as message or bang if not specified. + message send to destination address + when stack becomes full. First list element is address to send, other additional + elements treated as message or bang if not specified. diff --git a/ceammc/ext/doc/flow.sync-help.pd b/ceammc/ext/doc/flow.sync-help.pd index 22e251d929..a5f83172df 100644 --- a/ceammc/ext/doc/flow.sync-help.pd +++ b/ceammc/ext/doc/flow.sync-help.pd @@ -51,7 +51,7 @@ stored values from all inlets from rightmost to leftmost; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 637 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 640 library: ceammc v0.9.4; +#X text 10 640 library: ceammc v0.9.6; #X text 596 652 see also:; #X obj 670 652 flow.pack'; #N canvas 10 659 400 290 info 0; @@ -59,7 +59,7 @@ stored values from all inlets from rightmost to leftmost; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.sync; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.sync_pack-help.pd b/ceammc/ext/doc/flow.sync_pack-help.pd index bdb5548be8..a42f7c83ee 100644 --- a/ceammc/ext/doc/flow.sync_pack-help.pd +++ b/ceammc/ext/doc/flow.sync_pack-help.pd @@ -21,20 +21,20 @@ #X text 110 279 1\.; #X text 150 279 int; #X obj 246 280 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 279 N: number of inputs. Type: int. Min value: 1; +#X text 245 279 N: number of inputs. Type: int. Range: 1\...255; #X text 110 299 2\.; #X text 150 299 list; -#X obj 246 300 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 299 VALS: default values for all inlets. If not enough +#X obj 246 300 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 299 INIT: default values for all inlets. If not enough default values given it sets to 0\. Type: list.; #X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 349 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 384 @init; -#X text 245 384 Get/Set default init values. Type: list.; +#X text 245 384 (initonly) Get/Set default init values. Type: list.; #X msg 110 413 @n; -#X text 245 413 Get/Set number of inlets. Type: int. Default value: -1\. Range: 1\...255\.; +#X text 245 413 (initonly) Get/Set number of inlets. Type: int. Default +value: 1\. Range: 1\...255\.; #X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 470 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -78,7 +78,7 @@ default values given it sets to 0\. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 797 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 800 library: ceammc v0.9.4; +#X text 10 800 library: ceammc v0.9.6; #X text 555 812 see also:; #X obj 629 812 pack; #X obj 674 812 flow.pack; @@ -87,7 +87,7 @@ default values given it sets to 0\. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.sync_pack; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flow.sync_pack.pddoc b/ceammc/ext/doc/flow.sync_pack.pddoc index 59a9749450..616d926986 100644 --- a/ceammc/ext/doc/flow.sync_pack.pddoc +++ b/ceammc/ext/doc/flow.sync_pack.pddoc @@ -21,14 +21,15 @@ - number of inputs - default values for all inlets. If not enough default + number of inputs + default values for all inlets. If not enough default values given it sets to 0 - number of - inlets - default init values + number of inlets + default init + values diff --git a/ceammc/ext/doc/flow.tee~-help.pd b/ceammc/ext/doc/flow.tee~-help.pd index a58d7dfe7c..9e6a3a3893 100644 --- a/ceammc/ext/doc/flow.tee~-help.pd +++ b/ceammc/ext/doc/flow.tee~-help.pd @@ -40,13 +40,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flow.tee~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.a-weight-help.pd b/ceammc/ext/doc/flt.a-weight-help.pd new file mode 100644 index 0000000000..2a7624dfba --- /dev/null +++ b/ceammc/ext/doc/flt.a-weight-help.pd @@ -0,0 +1,72 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 491 50 cnv 1 274 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 491 50 convert frequency to A-weight value; +#X obj 1 1 cnv 5 765 40 empty empty flt.a-weight 20 20 0 20 -104026 +-4096 0; +#X obj 654 11 flt.a-weight; +#X msg 50 118 bang; +#N canvas 0 22 450 300 (subpatch) 0; +#X array A-WEIGHT 100 float 1; +#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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 1 100 0 400 140 1; +#X restore 280 118 graph; +#X obj 50 147 list.seq 20 20000 50; +#X obj 50 176 flt.a-weight; +#X obj 50 205 list->array A-WEIGHT; +#X obj 20 290 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 295 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 330 @db; +#X text 245 330 output in decibels. Default value: 0\.; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 375 1\.; +#X text 150 375 *float*; +#X text 245 375 input frequency in Herz.; +#X text 150 395 *list*; +#X text 245 395 list of input frequencies in Herz \, non float types +are ignored.; +#X obj 20 440 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 445 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 446 1\.; +#X text 245 446 float or list A-weight amplitudes or decibel values.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 flt.a-weight; +#X text 10 76 category:; +#X text 120 76 flt; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 filter \, weight \, A; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 4 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flt.a-weight.pddoc b/ceammc/ext/doc/flt.a-weight.pddoc new file mode 100644 index 0000000000..4b22b8a65c --- /dev/null +++ b/ceammc/ext/doc/flt.a-weight.pddoc @@ -0,0 +1,44 @@ + + + + flt.a-weight + + + Serge Poltavsky + + convert frequency to A-weight value + GPL3 or later + ceammc + flt + filter weight A + 0.9.5 + + + output in + decibels + + + + input frequency in Herz + list of input frequencies in Herz, non float types are + ignored + + + + float or list A-weight amplitudes or decibel values + + + +array A-WEIGHT] +]]> + + + + diff --git a/ceammc/ext/doc/flt.biquad~-help.pd b/ceammc/ext/doc/flt.biquad~-help.pd index 41189633ef..077cba9169 100644 --- a/ceammc/ext/doc/flt.biquad~-help.pd +++ b/ceammc/ext/doc/flt.biquad~-help.pd @@ -28,49 +28,49 @@ https://en.wikipedia.org/wiki/Digital_biquad_filter; #X obj 20 592 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 627 @active; -#X text 245 627 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 679 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 684 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 627 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 671 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 719 reset; -#X text 245 719 reset filter state.; -#X obj 20 756 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 761 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 706 reset; +#X text 245 706 reset filter state.; +#X obj 20 743 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 748 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 762 1\.; -#X text 245 762 input signal.; -#X text 110 782 2\.; -#X text 245 782 b0\.; -#X text 110 802 3\.; -#X text 245 802 b1\.; -#X text 110 822 4\.; -#X text 245 822 b2\.; -#X text 110 842 5\.; -#X text 245 842 a1\.; -#X text 110 862 6\.; -#X text 245 862 a2\.; -#X obj 20 892 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 897 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 749 1\.; +#X text 245 749 input signal.; +#X text 110 769 2\.; +#X text 245 769 b0\.; +#X text 110 789 3\.; +#X text 245 789 b1\.; +#X text 110 809 4\.; +#X text 245 809 b2\.; +#X text 110 829 5\.; +#X text 245 829 a1\.; +#X text 110 849 6\.; +#X text 245 849 a2\.; +#X obj 20 879 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 884 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 898 1\.; -#X text 245 898 filtered signal.; +#X text 110 885 1\.; +#X text 245 885 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 948 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 951 library: ceammc v0.9.4; -#X text 505 963 see also:; -#X obj 579 963 flt.c_bpf~; -#X obj 667 963 flt.c_hpf~; -#N canvas 10 970 400 290 info 0; +#X obj 1 935 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 938 library: ceammc v0.9.6; +#X text 505 950 see also:; +#X obj 579 950 flt.c_bpf~; +#X obj 667 950 flt.c_hpf~; +#N canvas 10 957 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.biquad~; #X text 10 76 category:; @@ -89,7 +89,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 970 pd info; +#X restore 10 957 pd info; #X connect 8 0 12 0; #X connect 9 0 13 0; #X connect 10 0 13 0; diff --git a/ceammc/ext/doc/flt.biquad~.pddoc b/ceammc/ext/doc/flt.biquad~.pddoc index 64ac865ed4..56f2dde119 100644 --- a/ceammc/ext/doc/flt.biquad~.pddoc +++ b/ceammc/ext/doc/flt.biquad~.pddoc @@ -29,8 +29,7 @@ reset filter state - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.bpf12~-help.pd b/ceammc/ext/doc/flt.bpf12~-help.pd index 2ce52b270d..ea97f782df 100644 --- a/ceammc/ext/doc/flt.bpf12~-help.pd +++ b/ceammc/ext/doc/flt.bpf12~-help.pd @@ -38,55 +38,55 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 685 1\.; #X text 150 685 float; #X obj 246 686 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 685 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 685 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 705 2\.; #X text 150 705 float; #X obj 246 706 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 705 q: quality factory: @freq/BANDWIDTH. Type: float. Range: +#X text 245 705 Q: quality factory: @freq/BANDWIDTH. Type: float. Range: 0.01\...100; #X obj 20 750 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 755 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 790 @active; -#X text 245 790 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 832 @freq; -#X text 245 832 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 790 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 819 @freq; +#X text 245 819 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 874 @q; -#X text 245 874 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 861 @q; +#X text 245 861 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 2\. Range: 0.01\...100\.; -#X obj 20 926 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 931 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 913 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 918 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 966 reset; -#X text 245 966 reset filter state.; -#X obj 20 1003 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1008 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 953 reset; +#X text 245 953 reset filter state.; +#X obj 20 990 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 995 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 996 1\.; +#X text 245 996 input signal.; +#X obj 20 1026 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1031 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1009 1\.; -#X text 245 1009 input signal.; -#X obj 20 1039 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1044 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 110 1045 1\.; -#X text 245 1045 filtered signal.; +#X text 110 1032 1\.; +#X text 245 1032 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1095 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1098 library: ceammc v0.9.4; -#X text 505 1110 see also:; -#X obj 579 1110 flt.bpf24~; -#X obj 667 1110 flt.c_bpf~; -#N canvas 10 1117 400 290 info 0; +#X obj 1 1082 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1085 library: ceammc v0.9.6; +#X text 505 1097 see also:; +#X obj 579 1097 flt.bpf24~; +#X obj 667 1097 flt.c_bpf~; +#N canvas 10 1104 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.bpf12~; #X text 10 76 category:; @@ -105,7 +105,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1117 pd info; +#X restore 10 1104 pd info; #X connect 8 0 15 0; #X connect 9 0 15 0; #X connect 10 0 15 0; diff --git a/ceammc/ext/doc/flt.bpf12~.pddoc b/ceammc/ext/doc/flt.bpf12~.pddoc index 55c1c2f376..74ad3a464c 100644 --- a/ceammc/ext/doc/flt.bpf12~.pddoc +++ b/ceammc/ext/doc/flt.bpf12~.pddoc @@ -27,16 +27,15 @@ center frequency + units="hertz">center frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing - center + center frequency - quality factory: + quality factory: @freq/BANDWIDTH diff --git a/ceammc/ext/doc/flt.bpf24~-help.pd b/ceammc/ext/doc/flt.bpf24~-help.pd index 5a0cb5912f..5d03ba280f 100644 --- a/ceammc/ext/doc/flt.bpf24~-help.pd +++ b/ceammc/ext/doc/flt.bpf24~-help.pd @@ -35,58 +35,54 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 742 1\.; #X text 150 742 float; #X obj 246 743 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 742 freq(Hz): center frequency. Type: float.; +#X text 245 742 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 762 2\.; #X text 150 762 float; #X obj 246 763 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 762 q: quality factory: @freq/BANDWIDTH. Type: float. Range: +#X text 245 762 Q: quality factory: @freq/BANDWIDTH. Type: float. Range: 0.01\...100; -#X text 110 797 3\.; -#X text 150 797 symbol; -#X obj 246 798 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 797 ID: object ID for OSC control. Type: symbol.; -#X obj 20 827 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 832 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 812 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 867 @active; -#X text 245 867 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 909 @freq; -#X text 245 909 Get/Set cutoff frequency. Type: float. Units: Hz. Default +#X msg 110 847 @active; +#X text 245 847 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 876 @freq; +#X text 245 876 Get/Set cutoff frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 951 @q; -#X text 245 951 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 918 @q; +#X text 245 918 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 2\. Range: 0.01\...100\.; -#X obj 20 1003 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1008 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 970 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 975 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1043 reset; -#X text 245 1043 reset filter state.; -#X obj 20 1080 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1085 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1010 reset; +#X text 245 1010 reset filter state.; +#X obj 20 1047 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1052 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1086 1\.; -#X text 245 1086 input signal.; -#X obj 20 1116 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1121 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1053 1\.; +#X text 245 1053 input signal.; +#X obj 20 1083 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1088 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1122 1\.; -#X text 245 1122 filtered signal.; +#X text 110 1089 1\.; +#X text 245 1089 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1172 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1175 library: ceammc v0.9.4; -#X text 593 1187 see also:; -#X obj 667 1187 flt.bpf12~; -#N canvas 10 1194 400 290 info 0; +#X obj 1 1139 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1142 library: ceammc v0.9.6; +#X text 593 1154 see also:; +#X obj 667 1154 flt.bpf12~; +#N canvas 10 1161 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.bpf24~; #X text 10 76 category:; @@ -105,7 +101,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1194 pd info; +#X restore 10 1161 pd info; #X connect 8 0 9 0; #X connect 9 0 10 0; #X connect 10 0 14 0; diff --git a/ceammc/ext/doc/flt.bpf24~.pddoc b/ceammc/ext/doc/flt.bpf24~.pddoc index 77687f7f1b..b92a95a5c5 100644 --- a/ceammc/ext/doc/flt.bpf24~.pddoc +++ b/ceammc/ext/doc/flt.bpf24~.pddoc @@ -25,18 +25,17 @@ wiki: Butterworth filter - cutoff frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing - center frequency - quality factory: + center + frequency + quality factory: @freq/BANDWIDTH - object ID for OSC control reset filter state diff --git a/ceammc/ext/doc/flt.c_apf-help.pd b/ceammc/ext/doc/flt.c_apf-help.pd index 67be5afc25..244a09f7fa 100644 --- a/ceammc/ext/doc/flt.c_apf-help.pd +++ b/ceammc/ext/doc/flt.c_apf-help.pd @@ -38,7 +38,7 @@ https://en.wikipedia.org/wiki/All-pass_filter; #X text 110 582 1\.; #X text 150 582 float; #X obj 246 583 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 582 freq(Hz): center frequency. Type: float. Range: 0\...22050; +#X text 245 582 FREQ(Hz): center frequency. Type: float. Range: 0\...22050; #X obj 20 612 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 617 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -47,7 +47,7 @@ https://en.wikipedia.org/wiki/All-pass_filter; value: 0\. Range: 0\...22050\.; #X msg 110 694 @q; #X text 245 694 Get/Set quality factor: @freq/BANDWIDTH. Type: float. -Default value: 0.707107\. Range: 0.01\...100\.; +Default value: 0.7071\. Range: 0.01\...100\.; #X msg 110 736 @rad; #X text 245 736 use angular frequency.; #X obj 20 775 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -74,7 +74,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 965 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 968 library: ceammc v0.9.4; +#X text 10 968 library: ceammc v0.9.6; #X text 527 980 see also:; #X obj 601 980 flt.c_lpf; #X obj 681 980 hilbert~; @@ -83,7 +83,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_apf; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.c_apf.pddoc b/ceammc/ext/doc/flt.c_apf.pddoc index 27183ce37b..0390c9ea18 100644 --- a/ceammc/ext/doc/flt.c_apf.pddoc +++ b/ceammc/ext/doc/flt.c_apf.pddoc @@ -32,15 +32,15 @@ Allpass filter - center + center frequency center frequency - + units="hertz">center frequency + quality factor: @freq/BANDWIDTH - use angular frequency + use angular frequency set bandwidth in octaves diff --git a/ceammc/ext/doc/flt.c_bpf~-help.pd b/ceammc/ext/doc/flt.c_bpf~-help.pd index 150ecf66af..dd817e2a55 100644 --- a/ceammc/ext/doc/flt.c_bpf~-help.pd +++ b/ceammc/ext/doc/flt.c_bpf~-help.pd @@ -26,58 +26,58 @@ #X text 110 463 1\.; #X text 150 463 float; #X obj 246 464 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 463 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 463 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 483 2\.; #X text 150 483 float; #X obj 246 484 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 483 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 483 Q: quality factory. Type: float. Range: 0.01\...100; #X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 518 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 553 @active; -#X text 245 553 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 595 @freq; -#X text 245 595 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 553 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 582 @freq; +#X text 245 582 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 637 @q; -#X text 245 637 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 624 @q; +#X text 245 624 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 0.1\. Range: 0.01\...100\.; -#X obj 20 689 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 694 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 695 1\.; -#X text 245 695 control signal.; -#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 730 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 682 1\.; +#X text 245 682 control signal.; +#X obj 20 712 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 717 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 731 1\.; -#X text 245 731 b0\.; -#X text 110 751 2\.; -#X text 245 751 b1\.; -#X text 110 771 3\.; -#X text 245 771 b2\.; -#X text 110 791 4\.; -#X text 245 791 a1\.; -#X text 110 811 5\.; -#X text 245 811 a2\.; +#X text 110 718 1\.; +#X text 245 718 b0\.; +#X text 110 738 2\.; +#X text 245 738 b1\.; +#X text 110 758 3\.; +#X text 245 758 b2\.; +#X text 110 778 4\.; +#X text 245 778 a1\.; +#X text 110 798 5\.; +#X text 245 798 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 861 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 864 library: ceammc v0.9.4; -#X text 396 876 see also:; -#X obj 470 876 flt.biquad~; -#X obj 565 876 flt.bpf12~; -#X obj 653 876 flt.c_notch~; -#N canvas 10 883 400 290 info 0; +#X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 851 library: ceammc v0.9.6; +#X text 396 863 see also:; +#X obj 470 863 flt.biquad~; +#X obj 565 863 flt.bpf12~; +#X obj 653 863 flt.c_notch~; +#N canvas 10 870 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_bpf~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 883 pd info; +#X restore 10 870 pd info; #X connect 6 0 10 0; #X connect 7 0 10 1; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/flt.c_bpf~.pddoc b/ceammc/ext/doc/flt.c_bpf~.pddoc index 5f518c84fc..a0948a9da0 100644 --- a/ceammc/ext/doc/flt.c_bpf~.pddoc +++ b/ceammc/ext/doc/flt.c_bpf~.pddoc @@ -24,18 +24,17 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency - quality + quality factory center frequency + units="hertz">center frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.c_highshelf~-help.pd b/ceammc/ext/doc/flt.c_highshelf~-help.pd index b480e24623..d5ccffd955 100644 --- a/ceammc/ext/doc/flt.c_highshelf~-help.pd +++ b/ceammc/ext/doc/flt.c_highshelf~-help.pd @@ -27,57 +27,57 @@ #X text 110 546 1\.; #X text 150 546 float; #X obj 246 547 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 546 freq(Hz): cutoff frequency. Type: float.; +#X text 245 546 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X text 110 566 2\.; #X text 150 566 float; #X obj 246 567 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 566 gain(db): filter gain. Type: float. Range: -15\...+15; +#X text 245 566 GAIN(db): filter gain. Type: float. Range: -15\...+15; #X obj 20 596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 601 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 636 @active; -#X text 245 636 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 678 @freq; -#X text 245 678 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 636 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 665 @freq; +#X text 245 665 Get/Set center frequency. Type: float. Units: Hz. Default value: 10000\. Range: 20\...20000\.; -#X msg 110 720 @gain; -#X text 245 720 Get/Set filter gain. Type: float. Units: db. Default +#X msg 110 707 @gain; +#X text 245 707 Get/Set filter gain. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X obj 20 772 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 777 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 778 1\.; -#X text 245 778 control input.; -#X obj 20 808 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 813 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 765 1\.; +#X text 245 765 control input.; +#X obj 20 795 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 800 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 814 1\.; -#X text 245 814 b0\.; -#X text 110 834 2\.; -#X text 245 834 b1\.; -#X text 110 854 3\.; -#X text 245 854 b2\.; -#X text 110 874 4\.; -#X text 245 874 a1\.; -#X text 110 894 5\.; -#X text 245 894 a2\.; +#X text 110 801 1\.; +#X text 245 801 b0\.; +#X text 110 821 2\.; +#X text 245 821 b1\.; +#X text 110 841 3\.; +#X text 245 841 b2\.; +#X text 110 861 4\.; +#X text 245 861 a1\.; +#X text 110 881 5\.; +#X text 245 881 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 944 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 947 library: ceammc v0.9.4; -#X text 469 959 see also:; -#X obj 543 959 flt.highshelf~; -#X obj 660 959 flt.biquad~; -#N canvas 10 966 400 290 info 0; +#X obj 1 931 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 934 library: ceammc v0.9.6; +#X text 469 946 see also:; +#X obj 543 946 flt.highshelf~; +#X obj 660 946 flt.biquad~; +#N canvas 10 953 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_highshelf~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 966 pd info; +#X restore 10 953 pd info; #X connect 7 0 9 0; #X connect 8 0 9 1; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.c_highshelf~.pddoc b/ceammc/ext/doc/flt.c_highshelf~.pddoc index bbed527e48..42ba18ff5e 100644 --- a/ceammc/ext/doc/flt.c_highshelf~.pddoc +++ b/ceammc/ext/doc/flt.c_highshelf~.pddoc @@ -25,15 +25,15 @@ center frequency + units="hertz">center frequency filter gain - on/off dsp - processing + on/off dsp processing - cutoff frequency - filter + cutoff + frequency + filter gain diff --git a/ceammc/ext/doc/flt.c_hpf-help.pd b/ceammc/ext/doc/flt.c_hpf-help.pd index 45a24aec8f..c00925110e 100644 --- a/ceammc/ext/doc/flt.c_hpf-help.pd +++ b/ceammc/ext/doc/flt.c_hpf-help.pd @@ -27,7 +27,7 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 434 FREQ(Hz): center frequency. Type: float. Range: 20\...22050; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -36,7 +36,7 @@ value: 1000\. Range: 20\...22050\.; #X msg 110 546 @q; #X text 245 546 Get/Set quality factor: @freq/BANDWIDTH. Type: float. -Default value: 0.707107\. Range: 0.01\...100\.; +Default value: 0.7071\. Range: 0.01\...100\.; #X msg 110 588 @rad; #X text 245 588 use angular frequency.; #X obj 20 627 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -63,7 +63,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 820 library: ceammc v0.9.4; +#X text 10 820 library: ceammc v0.9.6; #X text 601 832 see also:; #X obj 675 832 flt.c_lpf; #N canvas 10 839 400 290 info 0; @@ -71,7 +71,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_hpf; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.c_hpf.pddoc b/ceammc/ext/doc/flt.c_hpf.pddoc index d9b61b5222..2f9c915321 100644 --- a/ceammc/ext/doc/flt.c_hpf.pddoc +++ b/ceammc/ext/doc/flt.c_hpf.pddoc @@ -25,15 +25,15 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency center frequency - + units="hertz">center frequency + quality factor: @freq/BANDWIDTH - use angular frequency + use angular frequency set bandwidth in octaves diff --git a/ceammc/ext/doc/flt.c_hpf~-help.pd b/ceammc/ext/doc/flt.c_hpf~-help.pd index 0551c8db6d..7e53c618ef 100644 --- a/ceammc/ext/doc/flt.c_hpf~-help.pd +++ b/ceammc/ext/doc/flt.c_hpf~-help.pd @@ -24,57 +24,57 @@ #X text 110 449 1\.; #X text 150 449 float; #X obj 246 450 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 449 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 449 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 469 2\.; #X text 150 469 float; #X obj 246 470 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 469 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 469 Q: quality factory. Type: float. Range: 0.01\...100; #X obj 20 499 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 504 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 539 @active; -#X text 245 539 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 581 @freq; -#X text 245 581 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 539 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 568 @freq; +#X text 245 568 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 623 @q; -#X text 245 623 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 610 @q; +#X text 245 610 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 1\. Range: 0.01\...100\.; -#X obj 20 675 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 680 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 662 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 667 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 681 1\.; -#X text 245 681 control signal.; -#X obj 20 711 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 716 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 668 1\.; +#X text 245 668 control signal.; +#X obj 20 698 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 703 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 717 1\.; -#X text 245 717 b0\.; -#X text 110 737 2\.; -#X text 245 737 b1\.; -#X text 110 757 3\.; -#X text 245 757 b2\.; -#X text 110 777 4\.; -#X text 245 777 a1\.; -#X text 110 797 5\.; -#X text 245 797 a2\.; +#X text 110 704 1\.; +#X text 245 704 b0\.; +#X text 110 724 2\.; +#X text 245 724 b1\.; +#X text 110 744 3\.; +#X text 245 744 b2\.; +#X text 110 764 4\.; +#X text 245 764 a1\.; +#X text 110 784 5\.; +#X text 245 784 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 847 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 850 library: ceammc v0.9.4; -#X text 498 862 see also:; -#X obj 572 862 flt.biquad~; -#X obj 667 862 flt.hpf12~; -#N canvas 10 869 400 290 info 0; +#X obj 1 834 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 837 library: ceammc v0.9.6; +#X text 498 849 see also:; +#X obj 572 849 flt.biquad~; +#X obj 667 849 flt.hpf12~; +#N canvas 10 856 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_hpf~; #X text 10 76 category:; @@ -93,7 +93,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 869 pd info; +#X restore 10 856 pd info; #X connect 7 0 9 0; #X connect 8 0 10 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/flt.c_hpf~.pddoc b/ceammc/ext/doc/flt.c_hpf~.pddoc index fb2e7b32ac..cda410a9b5 100644 --- a/ceammc/ext/doc/flt.c_hpf~.pddoc +++ b/ceammc/ext/doc/flt.c_hpf~.pddoc @@ -23,18 +23,17 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency - quality + quality factory center frequency + units="hertz">center frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.c_lowshelf~-help.pd b/ceammc/ext/doc/flt.c_lowshelf~-help.pd index eb6a91df19..c1440c0fc7 100644 --- a/ceammc/ext/doc/flt.c_lowshelf~-help.pd +++ b/ceammc/ext/doc/flt.c_lowshelf~-help.pd @@ -27,57 +27,57 @@ #X text 110 546 1\.; #X text 150 546 float; #X obj 246 547 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 546 freq(Hz): cutoff frequency. Type: float.; +#X text 245 546 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X text 110 566 2\.; #X text 150 566 float; #X obj 246 567 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 566 gain(db): filter gain. Type: float. Range: -15\...15; +#X text 245 566 GAIN(db): filter gain. Type: float. Range: -15\...15; #X obj 20 596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 601 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 636 @active; -#X text 245 636 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 678 @freq; -#X text 245 678 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 636 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 665 @freq; +#X text 245 665 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 720 @gain; -#X text 245 720 Get/Set filter gain. Type: float. Units: db. Default +#X msg 110 707 @gain; +#X text 245 707 Get/Set filter gain. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X obj 20 772 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 777 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 778 1\.; -#X text 245 778 control input.; -#X obj 20 808 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 813 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 765 1\.; +#X text 245 765 control input.; +#X obj 20 795 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 800 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 814 1\.; -#X text 245 814 b0\.; -#X text 110 834 2\.; -#X text 245 834 b1\.; -#X text 110 854 3\.; -#X text 245 854 b2\.; -#X text 110 874 4\.; -#X text 245 874 a1\.; -#X text 110 894 5\.; -#X text 245 894 a2\.; +#X text 110 801 1\.; +#X text 245 801 b0\.; +#X text 110 821 2\.; +#X text 245 821 b1\.; +#X text 110 841 3\.; +#X text 245 841 b2\.; +#X text 110 861 4\.; +#X text 245 861 a1\.; +#X text 110 881 5\.; +#X text 245 881 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 944 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 947 library: ceammc v0.9.4; -#X text 476 959 see also:; -#X obj 550 959 flt.lowshelf~; -#X obj 660 959 flt.biquad~; -#N canvas 10 966 400 290 info 0; +#X obj 1 931 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 934 library: ceammc v0.9.6; +#X text 476 946 see also:; +#X obj 550 946 flt.lowshelf~; +#X obj 660 946 flt.biquad~; +#N canvas 10 953 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_lowshelf~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 966 pd info; +#X restore 10 953 pd info; #X connect 7 0 9 0; #X connect 8 0 9 1; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.c_lowshelf~.pddoc b/ceammc/ext/doc/flt.c_lowshelf~.pddoc index 93b22ec520..baacb1f9a1 100644 --- a/ceammc/ext/doc/flt.c_lowshelf~.pddoc +++ b/ceammc/ext/doc/flt.c_lowshelf~.pddoc @@ -25,15 +25,15 @@ center frequency + units="hertz">center frequency filter gain - on/off dsp - processing + on/off dsp processing - cutoff frequency - filter + cutoff + frequency + filter gain diff --git a/ceammc/ext/doc/flt.c_lpf-help.pd b/ceammc/ext/doc/flt.c_lpf-help.pd index 86f1eebe33..c0f0846432 100644 --- a/ceammc/ext/doc/flt.c_lpf-help.pd +++ b/ceammc/ext/doc/flt.c_lpf-help.pd @@ -27,7 +27,7 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 434 FREQ(Hz): center frequency. Type: float. Range: 20\...22050; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -36,7 +36,7 @@ value: 1000\. Range: 20\...22050\.; #X msg 110 546 @q; #X text 245 546 Get/Set quality factor: @freq/BANDWIDTH. Type: float. -Default value: 0.707107\. Range: 0.01\...100\.; +Default value: 0.7071\. Range: 0.01\...100\.; #X msg 110 588 @rad; #X text 245 588 use angular frequency.; #X obj 20 627 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -63,7 +63,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 820 library: ceammc v0.9.4; +#X text 10 820 library: ceammc v0.9.6; #X text 601 832 see also:; #X obj 675 832 flt.c_hpf; #N canvas 10 839 400 290 info 0; @@ -71,7 +71,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_lpf; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.c_lpf.pddoc b/ceammc/ext/doc/flt.c_lpf.pddoc index f1f2331e58..338d3a8b17 100644 --- a/ceammc/ext/doc/flt.c_lpf.pddoc +++ b/ceammc/ext/doc/flt.c_lpf.pddoc @@ -25,15 +25,15 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency center frequency - + units="hertz">center frequency + quality factor: @freq/BANDWIDTH - use angular frequency + use angular frequency set bandwidth in octaves diff --git a/ceammc/ext/doc/flt.c_lpf~-help.pd b/ceammc/ext/doc/flt.c_lpf~-help.pd index aaa491df24..17f8246968 100644 --- a/ceammc/ext/doc/flt.c_lpf~-help.pd +++ b/ceammc/ext/doc/flt.c_lpf~-help.pd @@ -26,57 +26,57 @@ #X text 110 463 1\.; #X text 150 463 float; #X obj 246 464 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 463 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 463 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 483 2\.; #X text 150 483 float; #X obj 246 484 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 483 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 483 Q: quality factory. Type: float. Range: 0.01\...100; #X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 518 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 553 @active; -#X text 245 553 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 595 @freq; -#X text 245 595 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 553 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 582 @freq; +#X text 245 582 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 637 @q; -#X text 245 637 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 624 @q; +#X text 245 624 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 1\. Range: 0.01\...100\.; -#X obj 20 689 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 694 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 695 1\.; -#X text 245 695 control signal.; -#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 730 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 682 1\.; +#X text 245 682 control signal.; +#X obj 20 712 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 717 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 731 1\.; -#X text 245 731 b0\.; -#X text 110 751 2\.; -#X text 245 751 b1\.; -#X text 110 771 3\.; -#X text 245 771 b2\.; -#X text 110 791 4\.; -#X text 245 791 a1\.; -#X text 110 811 5\.; -#X text 245 811 a2\.; +#X text 110 718 1\.; +#X text 245 718 b0\.; +#X text 110 738 2\.; +#X text 245 738 b1\.; +#X text 110 758 3\.; +#X text 245 758 b2\.; +#X text 110 778 4\.; +#X text 245 778 a1\.; +#X text 110 798 5\.; +#X text 245 798 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 861 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 864 library: ceammc v0.9.4; -#X text 498 876 see also:; -#X obj 572 876 flt.biquad~; -#X obj 667 876 flt.lpf12~; -#N canvas 10 883 400 290 info 0; +#X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 851 library: ceammc v0.9.6; +#X text 498 863 see also:; +#X obj 572 863 flt.biquad~; +#X obj 667 863 flt.lpf12~; +#N canvas 10 870 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_lpf~; #X text 10 76 category:; @@ -95,7 +95,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 883 pd info; +#X restore 10 870 pd info; #X connect 6 0 10 0; #X connect 7 0 10 1; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/flt.c_lpf~.pddoc b/ceammc/ext/doc/flt.c_lpf~.pddoc index 05a2e42b61..3a2391df51 100644 --- a/ceammc/ext/doc/flt.c_lpf~.pddoc +++ b/ceammc/ext/doc/flt.c_lpf~.pddoc @@ -23,18 +23,17 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency - quality + quality factory center frequency + units="hertz">center frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.c_notch-help.pd b/ceammc/ext/doc/flt.c_notch-help.pd index 8d91008e73..41d4d81295 100644 --- a/ceammc/ext/doc/flt.c_notch-help.pd +++ b/ceammc/ext/doc/flt.c_notch-help.pd @@ -27,7 +27,7 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 434 FREQ(Hz): center frequency. Type: float. Range: 20\...22050; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -36,7 +36,7 @@ value: 1000\. Range: 20\...22050\.; #X msg 110 546 @q; #X text 245 546 Get/Set quality factor: @freq/BANDWIDTH. Type: float. -Default value: 0.707107\. Range: 0.01\...100\.; +Default value: 0.7071\. Range: 0.01\...100\.; #X msg 110 588 @rad; #X text 245 588 use angular frequency.; #X obj 20 627 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -63,7 +63,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 820 library: ceammc v0.9.4; +#X text 10 820 library: ceammc v0.9.6; #X text 601 832 see also:; #X obj 675 832 flt.c_lpf; #N canvas 10 839 400 290 info 0; @@ -71,7 +71,7 @@ Default value: 0.707107\. Range: 0.01\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_notch; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.c_notch.pddoc b/ceammc/ext/doc/flt.c_notch.pddoc index 770e727e35..8d16ea59c3 100644 --- a/ceammc/ext/doc/flt.c_notch.pddoc +++ b/ceammc/ext/doc/flt.c_notch.pddoc @@ -25,15 +25,15 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency center frequency - + units="hertz">center frequency + quality factor: @freq/BANDWIDTH - use angular frequency + use angular frequency set bandwidth in octaves diff --git a/ceammc/ext/doc/flt.c_notch~-help.pd b/ceammc/ext/doc/flt.c_notch~-help.pd index 4d79d7412b..6ab09be9ce 100644 --- a/ceammc/ext/doc/flt.c_notch~-help.pd +++ b/ceammc/ext/doc/flt.c_notch~-help.pd @@ -26,58 +26,58 @@ #X text 110 463 1\.; #X text 150 463 float; #X obj 246 464 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 463 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 463 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 483 2\.; #X text 150 483 float; #X obj 246 484 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 483 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 483 Q: quality factory. Type: float. Range: 0.01\...100; #X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 518 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 553 @active; -#X text 245 553 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 595 @freq; -#X text 245 595 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 553 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 582 @freq; +#X text 245 582 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 637 @q; -#X text 245 637 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 624 @q; +#X text 245 624 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 1\. Range: 0.01\...100\.; -#X obj 20 689 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 694 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 695 1\.; -#X text 245 695 control signal.; -#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 730 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 682 1\.; +#X text 245 682 control signal.; +#X obj 20 712 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 717 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 731 1\.; -#X text 245 731 b0\.; -#X text 110 751 2\.; -#X text 245 751 b1\.; -#X text 110 771 3\.; -#X text 245 771 b2\.; -#X text 110 791 4\.; -#X text 245 791 a1\.; -#X text 110 811 5\.; -#X text 245 811 a2\.; +#X text 110 718 1\.; +#X text 245 718 b0\.; +#X text 110 738 2\.; +#X text 245 738 b1\.; +#X text 110 758 3\.; +#X text 245 758 b2\.; +#X text 110 778 4\.; +#X text 245 778 a1\.; +#X text 110 798 5\.; +#X text 245 798 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 861 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 864 library: ceammc v0.9.4; -#X text 410 876 see also:; -#X obj 484 876 flt.c_bpf~; -#X obj 572 876 flt.notch~; -#X obj 660 876 flt.biquad~; -#N canvas 10 883 400 290 info 0; +#X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 851 library: ceammc v0.9.6; +#X text 410 863 see also:; +#X obj 484 863 flt.c_bpf~; +#X obj 572 863 flt.notch~; +#X obj 660 863 flt.biquad~; +#N canvas 10 870 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_notch~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 883 pd info; +#X restore 10 870 pd info; #X connect 6 0 10 0; #X connect 7 0 10 1; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/flt.c_notch~.pddoc b/ceammc/ext/doc/flt.c_notch~.pddoc index 4d059f4ca6..692e6e3648 100644 --- a/ceammc/ext/doc/flt.c_notch~.pddoc +++ b/ceammc/ext/doc/flt.c_notch~.pddoc @@ -24,18 +24,17 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency - quality + quality factory center frequency + units="hertz">center frequency quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.c_peak~-help.pd b/ceammc/ext/doc/flt.c_peak~-help.pd index 5f71e101ff..44ea3d6639 100644 --- a/ceammc/ext/doc/flt.c_peak~-help.pd +++ b/ceammc/ext/doc/flt.c_peak~-help.pd @@ -24,64 +24,64 @@ #X text 110 463 1\.; #X text 150 463 float; #X obj 246 464 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 463 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 463 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 483 2\.; #X text 150 483 float; #X obj 246 484 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 483 gain(db): filter gain. Type: float. Range: -15\...+15; +#X text 245 483 GAIN(db): filter gain. Type: float. Range: -15\...+15; #X text 110 503 3\.; #X text 150 503 float; #X obj 246 504 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 503 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 503 Q: quality factory. Type: float. Range: 0.01\...100; #X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 538 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 573 @active; -#X text 245 573 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 615 @freq; -#X text 245 615 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 573 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 602 @freq; +#X text 245 602 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 657 @gain; -#X text 245 657 Get/Set filter gain. Type: float. Units: db. Default +#X msg 110 644 @gain; +#X text 245 644 Get/Set filter gain. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X msg 110 699 @q; -#X text 245 699 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 686 @q; +#X text 245 686 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 1\. Range: 0.01\...100\.; -#X obj 20 751 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 756 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 738 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 743 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 757 1\.; -#X text 245 757 control signal.; -#X obj 20 787 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 792 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 744 1\.; +#X text 245 744 control signal.; +#X obj 20 774 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 779 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 793 1\.; -#X text 245 793 b0\.; -#X text 110 813 2\.; -#X text 245 813 b1\.; -#X text 110 833 3\.; -#X text 245 833 b2\.; -#X text 110 853 4\.; -#X text 245 853 a1\.; -#X text 110 873 5\.; -#X text 245 873 a2\.; +#X text 110 780 1\.; +#X text 245 780 b0\.; +#X text 110 800 2\.; +#X text 245 800 b1\.; +#X text 110 820 3\.; +#X text 245 820 b2\.; +#X text 110 840 4\.; +#X text 245 840 a1\.; +#X text 110 860 5\.; +#X text 245 860 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 923 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 926 library: ceammc v0.9.4; -#X text 484 938 see also:; -#X obj 558 938 flt.eq_peak~; -#X obj 660 938 flt.biquad~; -#N canvas 10 945 400 290 info 0; +#X obj 1 910 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 913 library: ceammc v0.9.6; +#X text 484 925 see also:; +#X obj 558 925 flt.eq_peak~; +#X obj 660 925 flt.biquad~; +#N canvas 10 932 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_peak~; #X text 10 76 category:; @@ -100,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 945 pd info; +#X restore 10 932 pd info; #X connect 7 0 9 0; #X connect 8 0 10 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/flt.c_peak~.pddoc b/ceammc/ext/doc/flt.c_peak~.pddoc index 4627b601eb..d6931479dc 100644 --- a/ceammc/ext/doc/flt.c_peak~.pddoc +++ b/ceammc/ext/doc/flt.c_peak~.pddoc @@ -23,22 +23,21 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency - filter + filter gain - quality + quality factory center frequency + units="hertz">center frequency filter gain quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.c_pole-help.pd b/ceammc/ext/doc/flt.c_pole-help.pd index f32e00045b..b8977c7dcb 100644 --- a/ceammc/ext/doc/flt.c_pole-help.pd +++ b/ceammc/ext/doc/flt.c_pole-help.pd @@ -27,7 +27,7 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 434 FREQ(Hz): center frequency. Type: float. Range: 0\...22050; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -60,7 +60,7 @@ lpf. Allowed values: hpf \, lpf.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 777 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 780 library: ceammc v0.9.4; +#X text 10 780 library: ceammc v0.9.6; #X text 601 792 see also:; #X obj 675 792 flt.c_lpf; #N canvas 10 799 400 290 info 0; @@ -68,7 +68,7 @@ lpf. Allowed values: hpf \, lpf.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.c_pole; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.c_pole.pddoc b/ceammc/ext/doc/flt.c_pole.pddoc index 214704ee25..9e3ce116d3 100644 --- a/ceammc/ext/doc/flt.c_pole.pddoc +++ b/ceammc/ext/doc/flt.c_pole.pddoc @@ -25,13 +25,13 @@ a1*z⁻¹ + a2*z⁻²) - center + center frequency center frequency - use angular frequency + units="hertz">center frequency + use angular frequency filter modey to @mode lpf diff --git a/ceammc/ext/doc/flt.dcblock2~-help.pd b/ceammc/ext/doc/flt.dcblock2~-help.pd index 6d87bd8404..ce791f8338 100644 --- a/ceammc/ext/doc/flt.dcblock2~-help.pd +++ b/ceammc/ext/doc/flt.dcblock2~-help.pd @@ -20,37 +20,37 @@ #X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 391 @active; -#X text 245 391 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 448 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 391 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 449 1\.; -#X text 245 449 right input signal.; -#X text 110 469 2\.; -#X text 245 469 left input signal.; -#X obj 20 499 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 504 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 436 1\.; +#X text 245 436 right input signal.; +#X text 110 456 2\.; +#X text 245 456 left input signal.; +#X obj 20 486 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 491 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 505 1\.; -#X text 245 505 left filtered signal.; -#X text 110 525 2\.; -#X text 245 525 right filtered signal.; +#X text 110 492 1\.; +#X text 245 492 left filtered signal.; +#X text 110 512 2\.; +#X text 245 512 right filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.9.4; -#X text 579 590 see also:; -#X obj 653 590 flt.dcblock~; -#N canvas 10 597 400 290 info 0; +#X obj 1 562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 565 library: ceammc v0.9.6; +#X text 579 577 see also:; +#X obj 653 577 flt.dcblock~; +#N canvas 10 584 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.dcblock2~; #X text 10 76 category:; @@ -69,7 +69,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 597 pd info; +#X restore 10 584 pd info; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/flt.dcblock2~.pddoc b/ceammc/ext/doc/flt.dcblock2~.pddoc index 4f62e2d2ed..1a3de032a1 100644 --- a/ceammc/ext/doc/flt.dcblock2~.pddoc +++ b/ceammc/ext/doc/flt.dcblock2~.pddoc @@ -17,8 +17,7 @@ - on/off dsp - processing + on/off dsp processing Stereo DC blocker. It has -3dB point near 35 Hz (at 44.1 kHz) and high-frequency diff --git a/ceammc/ext/doc/flt.dcblock~-help.pd b/ceammc/ext/doc/flt.dcblock~-help.pd index 313835d29b..5639675146 100644 --- a/ceammc/ext/doc/flt.dcblock~-help.pd +++ b/ceammc/ext/doc/flt.dcblock~-help.pd @@ -18,33 +18,33 @@ kHz) and high-frequency gain near 1.0025 (due to no scaling); #X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 391 @active; -#X text 245 391 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 448 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 391 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 449 1\.; -#X text 245 449 input signal.; -#X obj 20 479 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 484 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 436 1\.; +#X text 245 436 input signal.; +#X obj 20 466 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 471 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 485 1\.; -#X text 245 485 output signal.; +#X text 110 472 1\.; +#X text 245 472 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 538 library: ceammc v0.9.4; -#X text 571 550 see also:; -#X obj 645 550 flt.dcblock2~; -#N canvas 10 557 400 290 info 0; +#X obj 1 522 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 525 library: ceammc v0.9.6; +#X text 571 537 see also:; +#X obj 645 537 flt.dcblock2~; +#N canvas 10 544 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.dcblock~; #X text 10 76 category:; @@ -63,7 +63,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 557 pd info; +#X restore 10 544 pd info; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/flt.dcblock~.pddoc b/ceammc/ext/doc/flt.dcblock~.pddoc index a0eb473220..da8dcd372e 100644 --- a/ceammc/ext/doc/flt.dcblock~.pddoc +++ b/ceammc/ext/doc/flt.dcblock~.pddoc @@ -18,8 +18,7 @@ - on/off dsp - processing + on/off dsp processing Mono DC blocker. It has -3dB point near 35 Hz (at 44.1 kHz) and high-frequency diff --git a/ceammc/ext/doc/flt.eq10~-help.pd b/ceammc/ext/doc/flt.eq10~-help.pd index 0cf26c6435..516374071f 100644 --- a/ceammc/ext/doc/flt.eq10~-help.pd +++ b/ceammc/ext/doc/flt.eq10~-help.pd @@ -24,70 +24,70 @@ #X obj 20 500 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 535 @active; -#X text 245 535 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 577 @f1000; -#X text 245 577 Get/Set gain at 1000Hz. Type: float. Units: db. Default +#X text 245 535 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 564 @f1000; +#X text 245 564 Get/Set gain at 1000Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 619 @f125; -#X text 245 619 Get/Set gain at 125Hz. Type: float. Units: db. Default +#X msg 110 606 @f125; +#X text 245 606 Get/Set gain at 125Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 661 @f16000; -#X text 245 661 Get/Set gain at 16000Hz. Type: float. Units: db. Default +#X msg 110 648 @f16000; +#X text 245 648 Get/Set gain at 16000Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 703 @f2000; -#X text 245 703 Get/Set gain at 2000Hz. Type: float. Units: db. Default +#X msg 110 690 @f2000; +#X text 245 690 Get/Set gain at 2000Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 745 @f250; -#X text 245 745 Get/Set gain at 250Hz. Type: float. Units: db. Default +#X msg 110 732 @f250; +#X text 245 732 Get/Set gain at 250Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 787 @f31; -#X text 245 787 Get/Set gain at 31.25Hz. Type: float. Units: db. Default +#X msg 110 774 @f31; +#X text 245 774 Get/Set gain at 31.25Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 829 @f4000; -#X text 245 829 Get/Set gain at 4000Hz. Type: float. Units: db. Default +#X msg 110 816 @f4000; +#X text 245 816 Get/Set gain at 4000Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 871 @f500; -#X text 245 871 Get/Set gain at 500Hz. Type: float. Units: db. Default +#X msg 110 858 @f500; +#X text 245 858 Get/Set gain at 500Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 913 @f62; -#X text 245 913 Get/Set gain at 62.5Hz. Type: float. Units: db. Default +#X msg 110 900 @f62; +#X text 245 900 Get/Set gain at 62.5Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X msg 110 955 @f8000; -#X text 245 955 Get/Set gain at 8000Hz. Type: float. Units: db. Default +#X msg 110 942 @f8000; +#X text 245 942 Get/Set gain at 8000Hz. Type: float. Units: db. Default value: 0\. Range: -70\...10\.; -#X obj 20 1007 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1012 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 994 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 999 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1047 reset; -#X text 245 1047 reset filter state to default.; -#X obj 20 1084 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1089 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1034 reset; +#X text 245 1034 reset filter state to default.; +#X obj 20 1071 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1076 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1090 1\.; -#X text 245 1090 input signal.; -#X text 150 1110 *list*; -#X text 245 1110 sets equalizer coefficients.; -#X obj 20 1140 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1145 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1077 1\.; +#X text 245 1077 input signal.; +#X text 150 1097 *list*; +#X text 245 1097 sets equalizer coefficients.; +#X obj 20 1127 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1132 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1146 1\.; -#X text 245 1146 output signal.; +#X text 110 1133 1\.; +#X text 245 1133 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1196 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1199 library: ceammc v0.9.4; -#X text 579 1211 see also:; -#X obj 653 1211 flt.eq_peak~; -#N canvas 10 1218 400 290 info 0; +#X obj 1 1183 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1186 library: ceammc v0.9.6; +#X text 579 1198 see also:; +#X obj 653 1198 flt.eq_peak~; +#N canvas 10 1205 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.eq10~; #X text 10 76 category:; @@ -106,7 +106,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1218 pd info; +#X restore 10 1205 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/flt.eq10~.pddoc b/ceammc/ext/doc/flt.eq10~.pddoc index c1cfd62584..4519fd8b64 100644 --- a/ceammc/ext/doc/flt.eq10~.pddoc +++ b/ceammc/ext/doc/flt.eq10~.pddoc @@ -40,8 +40,7 @@ units="decibel">gain at 8000Hz gain at 16000Hz - on/off dsp - processing + on/off dsp processing reset filter state to default diff --git a/ceammc/ext/doc/flt.eq_peak_cq~-help.pd b/ceammc/ext/doc/flt.eq_peak_cq~-help.pd index fc91b145b7..777a7a85e9 100644 --- a/ceammc/ext/doc/flt.eq_peak_cq~-help.pd +++ b/ceammc/ext/doc/flt.eq_peak_cq~-help.pd @@ -21,55 +21,55 @@ #X text 110 423 1\.; #X text 150 423 float; #X obj 246 424 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 423 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 423 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 443 2\.; #X text 150 443 float; #X obj 246 444 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 443 gain(db): filter gain. Type: float. Range: -15\...+15; +#X text 245 443 GAIN(db): filter gain. Type: float. Range: -15\...+15; #X text 110 463 3\.; #X text 150 463 float; #X obj 246 464 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 463 q: quality factory. Type: float. Range: 0.01\...100; +#X text 245 463 Q: quality factory. Type: float. Range: 0.1\...100; #X obj 20 493 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 498 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 533 @active; -#X text 245 533 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 575 @freq; -#X text 245 575 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 533 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 562 @freq; +#X text 245 562 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 617 @gain; -#X text 245 617 Get/Set filter gain. Type: float. Units: db. Default +#X msg 110 604 @gain; +#X text 245 604 Get/Set filter gain. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X msg 110 659 @q; -#X text 245 659 Get/Set quality factor: @freq/BANDWIDTH. Type: float. +#X msg 110 646 @q; +#X text 245 646 Get/Set quality factor: @freq/BANDWIDTH. Type: float. Default value: 3\. Range: 0.1\...100\.; -#X obj 20 711 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 716 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 698 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 703 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 717 1\.; -#X text 245 717 input signal.; -#X obj 20 747 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 752 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 704 1\.; +#X text 245 704 input signal.; +#X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 739 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 753 1\.; -#X text 245 753 filtered signal.; +#X text 110 740 1\.; +#X text 245 740 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 803 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 806 library: ceammc v0.9.4; -#X text 579 818 see also:; -#X obj 653 818 flt.eq_peak~; -#N canvas 10 825 400 290 info 0; +#X obj 1 790 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 793 library: ceammc v0.9.6; +#X text 579 805 see also:; +#X obj 653 805 flt.eq_peak~; +#N canvas 10 812 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.eq_peak_cq~; #X text 10 76 category:; @@ -88,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 825 pd info; +#X restore 10 812 pd info; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/flt.eq_peak_cq~.pddoc b/ceammc/ext/doc/flt.eq_peak_cq~.pddoc index 01cb8f0b35..0eb2d8faa8 100644 --- a/ceammc/ext/doc/flt.eq_peak_cq~.pddoc +++ b/ceammc/ext/doc/flt.eq_peak_cq~.pddoc @@ -17,25 +17,24 @@ - center + center frequency - filter + filter gain - quality + quality factory center frequency + units="hertz">center frequency filter gain quality factor: @freq/BANDWIDTH - on/off dsp - processing + on/off dsp processing - + input signal diff --git a/ceammc/ext/doc/flt.eq_peak~-help.pd b/ceammc/ext/doc/flt.eq_peak~-help.pd index c884c23a9b..0ec8c4e5ef 100644 --- a/ceammc/ext/doc/flt.eq_peak~-help.pd +++ b/ceammc/ext/doc/flt.eq_peak~-help.pd @@ -22,59 +22,59 @@ or cut near some frequency). Also called a "parametric equalizer" section.; #X text 110 423 1\.; #X text 150 423 float; #X obj 246 424 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 423 freq(Hz): peak frequency. Type: float. Range: 20\...20000; +#X text 245 423 FREQ(Hz): peak frequency. Type: float. Range: 20\...20000; #X text 110 443 2\.; #X text 150 443 float; #X obj 246 444 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 443 gain(db): level at fx (boost if >0 or cut if <0). Type: +#X text 245 443 GAIN(db): level at fx (boost if >0 or cut if <0). Type: float. Range: -15\...15; #X text 110 478 3\.; #X text 150 478 float; -#X obj 246 479 cnv 1 107 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 478 bandwidth(Hz): bandwidth of peak. Type: float. Range: +#X obj 246 479 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 478 BANDWIDTH(Hz): bandwidth of peak. Type: float. Range: 1\...5000; #X obj 20 523 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 528 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 563 @active; -#X text 245 563 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 605 @bandwidth; -#X text 245 605 Get/Set bandwidth of peak. Type: float. Units: Hz. +#X text 245 563 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 592 @bandwidth; +#X text 245 592 Get/Set bandwidth of peak. Type: float. Units: Hz. Default value: 100\. Range: 1\...5000\.; -#X msg 110 647 @freq; -#X text 245 647 Get/Set peak frequency. Type: float. Units: Hz. Default +#X msg 110 634 @freq; +#X text 245 634 Get/Set peak frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 689 @gain; -#X text 245 689 Get/Set level at fx (boost if >0 or cut if <0). Type: +#X msg 110 676 @gain; +#X text 245 676 Get/Set level at fx (boost if >0 or cut if <0). Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X obj 20 741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 746 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 728 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 733 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 747 1\.; -#X text 245 747 input signal.; -#X obj 20 777 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 782 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 734 1\.; +#X text 245 734 input signal.; +#X obj 20 764 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 769 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 783 1\.; -#X text 245 783 filtered signal.; +#X text 110 770 1\.; +#X text 245 770 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 833 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 836 library: ceammc v0.9.4; -#X text 330 848 see also:; -#X obj 404 848 flt.eq_peak_cq~; -#X obj 528 848 flt.lowshelf~; -#X obj 638 848 flt.highshelf~; -#N canvas 10 855 400 290 info 0; +#X obj 1 820 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 823 library: ceammc v0.9.6; +#X text 330 835 see also:; +#X obj 404 835 flt.eq_peak_cq~; +#X obj 528 835 flt.lowshelf~; +#X obj 638 835 flt.highshelf~; +#N canvas 10 842 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.eq_peak~; #X text 10 76 category:; @@ -93,7 +93,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 855 pd info; +#X restore 10 842 pd info; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/flt.eq_peak~.pddoc b/ceammc/ext/doc/flt.eq_peak~.pddoc index 05e052b94b..4a9207e542 100644 --- a/ceammc/ext/doc/flt.eq_peak~.pddoc +++ b/ceammc/ext/doc/flt.eq_peak~.pddoc @@ -21,22 +21,21 @@ - peak + peak frequency - level + level at fx (boost if >0 or cut if <0) - + bandwidth of peak - peak frequency level at fx (boost if >0 or cut if <0) - bandwidth of peak - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.fb_comb~-help.pd b/ceammc/ext/doc/flt.fb_comb~-help.pd index c2558450fb..228a0dfcbd 100644 --- a/ceammc/ext/doc/flt.fb_comb~-help.pd +++ b/ceammc/ext/doc/flt.fb_comb~-help.pd @@ -34,8 +34,8 @@ https://en.wikipedia.org/wiki/Comb_filter; -49933 0; #X text 110 700 1\.; #X text 150 700 float; -#X obj 246 701 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 700 a: scaling factor of delayed sum. Type: float. Range: +#X obj 246 701 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 700 A: scaling factor of delayed sum. Type: float. Range: -1\...1; #X obj 20 730 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 735 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -44,40 +44,40 @@ https://en.wikipedia.org/wiki/Comb_filter; #X text 245 770 Get/Set scaling factor of delayed signal sum. Type: float. Default value: 0.75\. Range: -1\...1\.; #X msg 110 812 @active; -#X text 245 812 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 864 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 869 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 812 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 851 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 856 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 904 reset; -#X text 245 904 reset filter state.; -#X obj 20 941 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 946 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 891 reset; +#X text 245 891 reset filter state.; +#X obj 20 928 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 933 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 947 1\.; -#X text 245 947 input signal.; -#X text 110 967 2\.; -#X text 245 967 filter notch frequency.; -#X obj 20 997 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1002 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 934 1\.; +#X text 245 934 input signal.; +#X text 110 954 2\.; +#X text 245 954 filter notch frequency.; +#X obj 20 984 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 989 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1003 1\.; -#X text 245 1003 filtered signal.; +#X text 110 990 1\.; +#X text 245 990 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1053 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1056 library: ceammc v0.9.4; -#X text 579 1068 see also:; -#X obj 653 1068 flt.ff_comb~; -#N canvas 10 1075 400 290 info 0; +#X obj 1 1040 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1043 library: ceammc v0.9.6; +#X text 579 1055 see also:; +#X obj 653 1055 flt.ff_comb~; +#N canvas 10 1062 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.fb_comb~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1075 pd info; +#X restore 10 1062 pd info; #X connect 8 0 11 0; #X connect 9 0 12 0; #X connect 12 0 13 0; diff --git a/ceammc/ext/doc/flt.fb_comb~.pddoc b/ceammc/ext/doc/flt.fb_comb~.pddoc index 453d6cc9ff..0f29198d40 100644 --- a/ceammc/ext/doc/flt.fb_comb~.pddoc +++ b/ceammc/ext/doc/flt.fb_comb~.pddoc @@ -25,14 +25,13 @@ wiki: Comb filter - scaling factor of delayed + scaling factor of delayed sum scaling factor of delayed signal sum - on/off dsp - processing + on/off dsp processing reset filter state diff --git a/ceammc/ext/doc/flt.fbank5x1~-help.pd b/ceammc/ext/doc/flt.fbank5x1~-help.pd index 4498dbb320..2c4339a7c3 100644 --- a/ceammc/ext/doc/flt.fbank5x1~-help.pd +++ b/ceammc/ext/doc/flt.fbank5x1~-help.pd @@ -28,87 +28,87 @@ an "allpass-complementary filter bank"; #X text 110 659 1\.; #X text 150 659 float; #X obj 246 660 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 659 f250(db): @f250 property init value. Type: float. Range: +#X text 245 659 F250(db): @f250 property init value. Type: float. Range: -6\...6; #X text 110 694 2\.; #X text 150 694 float; #X obj 246 695 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 694 f500(db): @f500 property init value. Type: float. Range: +#X text 245 694 F500(db): @f500 property init value. Type: float. Range: -6\...6; #X text 110 729 3\.; #X text 150 729 float; #X obj 246 730 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 729 f1000(db): @f1000 property init value. Type: float. +#X text 245 729 F1000(db): @f1000 property init value. Type: float. Range: -6\...6; #X text 110 764 4\.; #X text 150 764 float; #X obj 246 765 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 764 f2000(db): @f2000 property init value. Type: float. +#X text 245 764 F2000(db): @f2000 property init value. Type: float. Range: -6\...6; #X text 110 799 5\.; #X text 150 799 float; #X obj 246 800 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 799 f4000(db): @f4000 property init value. Type: float. +#X text 245 799 F4000(db): @f4000 property init value. Type: float. Range: -6\...6; #X obj 20 844 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 849 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 884 @active; -#X text 245 884 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 926 @f1000; -#X text 245 926 Get/Set third filter (bandpass) gain at 1000Hz. Type: +#X text 245 884 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 913 @f1000; +#X text 245 913 Get/Set third filter (bandpass) gain at 1000Hz. Type: float. Units: db. Default value: 0\. Range: -6\...6\.; -#X msg 110 968 @f2000; -#X text 245 968 Get/Set fourth filter (bandpass) gain at 2000Hz. Type: +#X msg 110 955 @f2000; +#X text 245 955 Get/Set fourth filter (bandpass) gain at 2000Hz. Type: float. Units: db. Default value: 0\. Range: -6\...6\.; -#X msg 110 1010 @f250; -#X text 245 1010 Get/Set first filter (lowpass) gain at 250Hz. Type: +#X msg 110 997 @f250; +#X text 245 997 Get/Set first filter (lowpass) gain at 250Hz. Type: float. Units: db. Default value: 0\. Range: -6\...6\.; -#X msg 110 1052 @f4000; -#X text 245 1052 Get/Set fifth filter (highpass) gain at 4000Hz. Type: +#X msg 110 1039 @f4000; +#X text 245 1039 Get/Set fifth filter (highpass) gain at 4000Hz. Type: float. Units: db. Default value: 0\. Range: -6\...6\.; -#X msg 110 1094 @f500; -#X text 245 1094 Get/Set second filter (bandpass) gain at 500Hz. Type: +#X msg 110 1081 @f500; +#X text 245 1081 Get/Set second filter (bandpass) gain at 500Hz. Type: float. Units: db. Default value: 0\. Range: -6\...6\.; -#X obj 20 1146 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1151 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1133 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1138 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1186 reset; -#X text 245 1186 reset filter state.; -#X obj 20 1223 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1228 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1173 reset; +#X text 245 1173 reset filter state.; +#X obj 20 1210 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1215 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1229 1\.; -#X text 245 1229 input signal.; -#X text 150 1249 *list*; -#X text 245 1249 5 element list of db gains.; -#X obj 20 1279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1284 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1216 1\.; +#X text 245 1216 input signal.; +#X text 150 1236 *list*; +#X text 245 1236 5 element list of db gains.; +#X obj 20 1266 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1271 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1285 1\.; -#X text 245 1285 lpf: 250Hz.; -#X text 110 1305 2\.; -#X text 245 1305 bpf: 500Hz.; -#X text 110 1325 3\.; -#X text 245 1325 bpf: 1000Hz.; -#X text 110 1345 4\.; -#X text 245 1345 bpf: 2000Hz.; -#X text 110 1365 5\.; -#X text 245 1365 hpf: 4000Hz.; +#X text 110 1272 1\.; +#X text 245 1272 lpf: 250Hz.; +#X text 110 1292 2\.; +#X text 245 1292 bpf: 500Hz.; +#X text 110 1312 3\.; +#X text 245 1312 bpf: 1000Hz.; +#X text 110 1332 4\.; +#X text 245 1332 bpf: 2000Hz.; +#X text 110 1352 5\.; +#X text 245 1352 hpf: 4000Hz.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1415 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1418 library: ceammc v0.9.4; -#N canvas 10 1437 400 290 info 0; +#X obj 1 1402 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1405 library: ceammc v0.9.6; +#N canvas 10 1424 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.fbank5x1~; #X text 10 76 category:; @@ -127,7 +127,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1437 pd info; +#X restore 10 1424 pd info; #X connect 8 0 10 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.fbank5x1~.pddoc b/ceammc/ext/doc/flt.fbank5x1~.pddoc index f8aba6468d..b933585c4e 100644 --- a/ceammc/ext/doc/flt.fbank5x1~.pddoc +++ b/ceammc/ext/doc/flt.fbank5x1~.pddoc @@ -22,15 +22,15 @@ conventional term for this is an "allpass-complementary filter bank" - @f250 + @f250 property init value - @f500 + @f500 property init value - @f1000 + @f1000 property init value - @f2000 + @f2000 property init value - @f4000 + @f4000 property init value @@ -44,8 +44,7 @@ units="decibel">fourth filter (bandpass) gain at 2000Hz fifth filter (highpass) gain at 4000Hz - on/off dsp - processing + on/off dsp processing reset filter state diff --git a/ceammc/ext/doc/flt.ff_comb~-help.pd b/ceammc/ext/doc/flt.ff_comb~-help.pd index 829a52ae28..a3e1fbfb52 100644 --- a/ceammc/ext/doc/flt.ff_comb~-help.pd +++ b/ceammc/ext/doc/flt.ff_comb~-help.pd @@ -34,9 +34,9 @@ https://en.wikipedia.org/wiki/Comb_filter; -49933 0; #X text 110 700 1\.; #X text 150 700 float; -#X obj 246 701 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 700 a: scaling factor of delayed signal. Type: float. Range: -0\...1; +#X obj 246 701 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 700 A: scaling factor of delayed signal. Type: float. Range: +-1\...1; #X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 750 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -44,40 +44,40 @@ https://en.wikipedia.org/wiki/Comb_filter; #X text 245 785 Get/Set scaling factor of delayed signal. Type: float. Default value: 1\. Range: -1\...1\.; #X msg 110 827 @active; -#X text 245 827 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 879 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 884 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 827 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 866 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 871 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 919 reset; -#X text 245 919 reset filter state.; -#X obj 20 956 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 961 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 906 reset; +#X text 245 906 reset filter state.; +#X obj 20 943 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 948 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 962 1\.; -#X text 245 962 input signal.; -#X text 110 982 2\.; -#X text 245 982 filter notch frequency.; -#X obj 20 1012 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1017 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 949 1\.; +#X text 245 949 input signal.; +#X text 110 969 2\.; +#X text 245 969 filter notch frequency.; +#X obj 20 999 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1004 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1018 1\.; -#X text 245 1018 filtered signal.; +#X text 110 1005 1\.; +#X text 245 1005 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 1068 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1071 library: ceammc v0.9.4; -#X text 579 1083 see also:; -#X obj 653 1083 flt.fb_comb~; -#N canvas 10 1090 400 290 info 0; +#X obj 1 1055 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1058 library: ceammc v0.9.6; +#X text 579 1070 see also:; +#X obj 653 1070 flt.fb_comb~; +#N canvas 10 1077 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.ff_comb~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1090 pd info; +#X restore 10 1077 pd info; #X connect 8 0 11 0; #X connect 9 0 12 0; #X connect 12 0 13 0; diff --git a/ceammc/ext/doc/flt.ff_comb~.pddoc b/ceammc/ext/doc/flt.ff_comb~.pddoc index f9b239e8f5..0145c6dabd 100644 --- a/ceammc/ext/doc/flt.ff_comb~.pddoc +++ b/ceammc/ext/doc/flt.ff_comb~.pddoc @@ -25,14 +25,13 @@ wiki: Comb filter - scaling factor of delayed + scaling factor of delayed signal scaling factor of delayed signal - on/off dsp - processing + on/off dsp processing reset filter state diff --git a/ceammc/ext/doc/flt.freqz-help.pd b/ceammc/ext/doc/flt.freqz-help.pd index f48dcf1923..b4576ea033 100644 --- a/ceammc/ext/doc/flt.freqz-help.pd +++ b/ceammc/ext/doc/flt.freqz-help.pd @@ -51,8 +51,8 @@ list.; #X text 245 606 Get/Set numerator (zeros) coefficients. Type: list. Default value: 1\.; #X msg 110 648 @db; -#X text 245 648 Get/Set output amp response in db scale. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +#X text 245 648 Get/Set output amp response in db scale. Type: bool. +Default value: 0\.; #X msg 110 690 @n; #X text 245 690 Get/Set number of points. Type: int. Default value: 256\. Range: 4\...1024\.; @@ -93,7 +93,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 1064 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1067 library: ceammc v0.9.4; +#X text 10 1067 library: ceammc v0.9.6; #X text 593 1079 see also:; #X obj 667 1079 flt.freqz~; #N canvas 10 1086 400 290 info 0; @@ -101,7 +101,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.freqz; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.freqz.pddoc b/ceammc/ext/doc/flt.freqz.pddoc index 0bb9257550..ad20893d9e 100644 --- a/ceammc/ext/doc/flt.freqz.pddoc +++ b/ceammc/ext/doc/flt.freqz.pddoc @@ -25,13 +25,12 @@ number of points - denominator (poles) coefficients. 'a0' always - implicitly set to 1, property value set a1...an coefficients + denominator (poles) coefficients. 'a0' + always implicitly set to 1, property value set a1...an coefficients numerator (zeros) coefficients number of points - output amp response in db - scale + output amp response in db scale set 'b' and 'a' coefficients, no output diff --git a/ceammc/ext/doc/flt.freqz~-help.pd b/ceammc/ext/doc/flt.freqz~-help.pd index 6666390d79..d38f18673f 100644 --- a/ceammc/ext/doc/flt.freqz~-help.pd +++ b/ceammc/ext/doc/flt.freqz~-help.pd @@ -32,11 +32,11 @@ list.; #X text 245 766 Get/Set numerator (zeros) coefficients. Type: list. Default value: 1\.; #X msg 110 808 @db; -#X text 245 808 Get/Set output amp response in db scale. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +#X text 245 808 Get/Set output amp response in db scale. Type: bool. +Default value: 0\.; #X msg 110 850 @sr; -#X text 245 850 Get/Set normalize using current samplerate. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +#X text 245 850 Get/Set normalize using current samplerate. Type: bool. +Default value: 0\.; #X obj 20 902 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 907 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -56,13 +56,13 @@ sr/2] if @sr property is true.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 1029 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1032 library: ceammc v0.9.4; +#X text 10 1032 library: ceammc v0.9.6; #N canvas 10 1051 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.freqz~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.freqz~.pddoc b/ceammc/ext/doc/flt.freqz~.pddoc index 7b9677399d..b360eef83e 100644 --- a/ceammc/ext/doc/flt.freqz~.pddoc +++ b/ceammc/ext/doc/flt.freqz~.pddoc @@ -19,13 +19,12 @@ (b⁰+b¹e⁻ʲʷ+...+bᴹe⁻ʲʷᴹ)/(1+a¹e⁻ʲʷ+...+aᴺe⁻ʲʷᴺ) - denominator (poles) coefficients. 'a0' always - implicitly set to 1, property value set a1...an coefficients + denominator (poles) coefficients. 'a0' + always implicitly set to 1, property value set a1...an coefficients numerator (zeros) coefficients - normalize using current + normalize using current samplerate - output amp response in db - scale + output amp response in db scale diff --git a/ceammc/ext/doc/flt.highshelf~-help.pd b/ceammc/ext/doc/flt.highshelf~-help.pd index 3074a9fce6..461d6807da 100644 --- a/ceammc/ext/doc/flt.highshelf~-help.pd +++ b/ceammc/ext/doc/flt.highshelf~-help.pd @@ -20,51 +20,51 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): starting frequency for the shelf. Type: float. +#X text 245 351 FREQ(Hz): starting frequency for the shelf. Type: float. Range: 20\...20000; #X text 110 386 2\.; #X text 150 386 float; #X obj 246 387 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 386 gain(db): amount of boost or cut apply to the signal. +#X text 245 386 GAIN(db): amount of boost or cut apply to the signal. Type: float. Range: -15\...15; #X obj 20 431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 436 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 471 @active; -#X text 245 471 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 513 @freq; -#X text 245 513 Get/Set starting frequency for the shelf. Type: float. +#X text 245 471 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 500 @freq; +#X text 245 500 Get/Set starting frequency for the shelf. Type: float. Units: Hz. Default value: 10000\. Range: 20\...20000\.; -#X msg 110 555 @gain; -#X text 245 555 Get/Set amount of boost or cut apply to the signal. +#X msg 110 542 @gain; +#X text 245 542 Get/Set amount of boost or cut apply to the signal. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X obj 20 607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 612 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 594 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 599 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 613 1\.; -#X text 245 613 input signal.; -#X obj 20 643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 648 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 600 1\.; +#X text 245 600 input signal.; +#X obj 20 630 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 635 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 649 1\.; -#X text 245 649 filtered signal.; +#X text 110 636 1\.; +#X text 245 636 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 699 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 702 library: ceammc v0.9.4; -#X text 440 714 see also:; -#X obj 514 714 flt.lowshelf~; -#X obj 624 714 flt.c_highshelf~; -#N canvas 10 721 400 290 info 0; +#X obj 1 686 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 689 library: ceammc v0.9.6; +#X text 440 701 see also:; +#X obj 514 701 flt.lowshelf~; +#X obj 624 701 flt.c_highshelf~; +#N canvas 10 708 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.highshelf~; #X text 10 76 category:; @@ -83,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 721 pd info; +#X restore 10 708 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; diff --git a/ceammc/ext/doc/flt.highshelf~.pddoc b/ceammc/ext/doc/flt.highshelf~.pddoc index 9b9dc0b690..9ab3ff70b4 100644 --- a/ceammc/ext/doc/flt.highshelf~.pddoc +++ b/ceammc/ext/doc/flt.highshelf~.pddoc @@ -19,18 +19,17 @@ - starting - frequency for the shelf - amount + + starting frequency for the shelf + amount of boost or cut apply to the signal - starting frequency for the shelf amount of boost or cut apply to the signal - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.hpf12~-help.pd b/ceammc/ext/doc/flt.hpf12~-help.pd index 5e254c8e67..d4ec217648 100644 --- a/ceammc/ext/doc/flt.hpf12~-help.pd +++ b/ceammc/ext/doc/flt.hpf12~-help.pd @@ -30,43 +30,46 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 628 1\.; #X text 150 628 float; #X obj 246 629 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 628 freq(Hz): cutoff frequency. Type: float. Range: 20\...20000; +#X text 245 628 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 663 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 698 @active; -#X text 245 698 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 740 @freq; -#X text 245 740 Get/Set cutoff frequency. Type: float. Units: Hz. Default +#X text 245 698 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 727 @freq; +#X text 245 727 Get/Set cutoff frequency. Type: float. Units: Hz. Default value: 10000\. Range: 20\...20000\.; -#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 797 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 798 1\.; -#X text 245 798 input signal.; -#X obj 20 828 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 833 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 785 1\.; +#X text 245 785 input signal.; +#X text 110 805 2\.; +#X text 150 805 *float*; +#X text 245 805 set frequency.; +#X obj 20 835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 840 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 834 1\.; -#X text 245 834 filtered signal.; +#X text 110 841 1\.; +#X text 245 841 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 884 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 887 library: ceammc v0.9.4; -#X text 417 899 see also:; -#X obj 491 899 flt.hpf24~; -#X obj 579 899 flt.lpf12~; -#X obj 667 899 flt.c_hpf~; -#N canvas 10 906 400 290 info 0; +#X obj 1 891 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 894 library: ceammc v0.9.6; +#X text 417 906 see also:; +#X obj 491 906 flt.hpf24~; +#X obj 579 906 flt.lpf12~; +#X obj 667 906 flt.c_hpf~; +#N canvas 10 913 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.hpf12~; #X text 10 76 category:; @@ -85,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 906 pd info; +#X restore 10 913 pd info; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.hpf12~.pddoc b/ceammc/ext/doc/flt.hpf12~.pddoc index b81d317980..32e96fef8f 100644 --- a/ceammc/ext/doc/flt.hpf12~.pddoc +++ b/ceammc/ext/doc/flt.hpf12~.pddoc @@ -28,19 +28,21 @@ wiki: Butterworth filter - cutoff + cutoff frequency - cutoff frequency - on/off dsp - processing + on/off dsp processing input signal + + set frequency + filtered signal diff --git a/ceammc/ext/doc/flt.hpf24~-help.pd b/ceammc/ext/doc/flt.hpf24~-help.pd index 60b1c222b2..285064aaa2 100644 --- a/ceammc/ext/doc/flt.hpf24~-help.pd +++ b/ceammc/ext/doc/flt.hpf24~-help.pd @@ -30,43 +30,46 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 628 1\.; #X text 150 628 float; #X obj 246 629 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 628 freq(Hz): cutoff frequency. Type: float. Range: 20\...20000; +#X text 245 628 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 663 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 698 @active; -#X text 245 698 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 740 @freq; -#X text 245 740 Get/Set cutoff frequency. Type: float. Units: Hz. Default +#X text 245 698 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 727 @freq; +#X text 245 727 Get/Set cutoff frequency. Type: float. Units: Hz. Default value: 10000\. Range: 20\...20000\.; -#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 797 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 798 1\.; -#X text 245 798 input signal.; -#X obj 20 828 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 833 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 785 1\.; +#X text 245 785 input signal.; +#X text 110 805 2\.; +#X text 150 805 *float*; +#X text 245 805 set frequency.; +#X obj 20 835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 840 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 834 1\.; -#X text 245 834 filtered signal.; +#X text 110 841 1\.; +#X text 245 841 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 884 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 887 library: ceammc v0.9.4; -#X text 417 899 see also:; -#X obj 491 899 flt.hpf12~; -#X obj 579 899 flt.lpf12~; -#X obj 667 899 flt.c_hpf~; -#N canvas 10 906 400 290 info 0; +#X obj 1 891 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 894 library: ceammc v0.9.6; +#X text 417 906 see also:; +#X obj 491 906 flt.hpf12~; +#X obj 579 906 flt.lpf12~; +#X obj 667 906 flt.c_hpf~; +#N canvas 10 913 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.hpf24~; #X text 10 76 category:; @@ -85,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 906 pd info; +#X restore 10 913 pd info; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.hpf24~.pddoc b/ceammc/ext/doc/flt.hpf24~.pddoc index 406254367c..71e1783365 100644 --- a/ceammc/ext/doc/flt.hpf24~.pddoc +++ b/ceammc/ext/doc/flt.hpf24~.pddoc @@ -28,19 +28,21 @@ wiki: Butterworth filter - cutoff frequency - on/off dsp - processing + on/off dsp processing - cutoff + cutoff frequency input signal + + set frequency + filtered signal diff --git a/ceammc/ext/doc/flt.lowshelf~-help.pd b/ceammc/ext/doc/flt.lowshelf~-help.pd index 68655eee5d..9c5d62b1cf 100644 --- a/ceammc/ext/doc/flt.lowshelf~-help.pd +++ b/ceammc/ext/doc/flt.lowshelf~-help.pd @@ -20,51 +20,51 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): corner frequency for the shelf. Type: float. +#X text 245 351 FREQ(Hz): corner frequency for the shelf. Type: float. Range: 20\...20000; #X text 110 386 2\.; #X text 150 386 float; #X obj 246 387 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 386 gain(db): amount of boost or cut apply to the signal. +#X text 245 386 GAIN(db): amount of boost or cut apply to the signal. Type: float. Range: -15\...15; #X obj 20 431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 436 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 471 @active; -#X text 245 471 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 513 @freq; -#X text 245 513 Get/Set corner frequency for the shelf. Type: float. +#X text 245 471 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 500 @freq; +#X text 245 500 Get/Set corner frequency for the shelf. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 555 @gain; -#X text 245 555 Get/Set amount of boost or cut apply to the signal. +#X msg 110 542 @gain; +#X text 245 542 Get/Set amount of boost or cut apply to the signal. Type: float. Units: db. Default value: 0\. Range: -15\...15\.; -#X obj 20 607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 612 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 594 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 599 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 613 1\.; -#X text 245 613 input signal.; -#X obj 20 643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 648 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 600 1\.; +#X text 245 600 input signal.; +#X obj 20 630 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 635 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 649 1\.; -#X text 245 649 filtered signal.; +#X text 110 636 1\.; +#X text 245 636 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 699 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 702 library: ceammc v0.9.4; -#X text 440 714 see also:; -#X obj 514 714 flt.highshelf~; -#X obj 631 714 flt.c_lowshelf~; -#N canvas 10 721 400 290 info 0; +#X obj 1 686 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 689 library: ceammc v0.9.6; +#X text 440 701 see also:; +#X obj 514 701 flt.highshelf~; +#X obj 631 701 flt.c_lowshelf~; +#N canvas 10 708 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.lowshelf~; #X text 10 76 category:; @@ -83,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 721 pd info; +#X restore 10 708 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; diff --git a/ceammc/ext/doc/flt.lowshelf~.pddoc b/ceammc/ext/doc/flt.lowshelf~.pddoc index cceb721523..63b22575a1 100644 --- a/ceammc/ext/doc/flt.lowshelf~.pddoc +++ b/ceammc/ext/doc/flt.lowshelf~.pddoc @@ -19,18 +19,17 @@ - corner + corner frequency for the shelf - amount + amount of boost or cut apply to the signal - corner frequency for the shelf amount of boost or cut apply to the signal - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.lpf12~-help.pd b/ceammc/ext/doc/flt.lpf12~-help.pd index 434a75e69c..5c7728e37f 100644 --- a/ceammc/ext/doc/flt.lpf12~-help.pd +++ b/ceammc/ext/doc/flt.lpf12~-help.pd @@ -31,43 +31,46 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 643 1\.; #X text 150 643 float; #X obj 246 644 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 643 freq(Hz): cutoff frequency. Type: float. Range: 20\...20000; +#X text 245 643 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X obj 20 673 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 678 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 713 @active; -#X text 245 713 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 755 @freq; -#X text 245 755 Get/Set cutoff frequency. Type: float. Units: Hz. Default +#X text 245 713 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 742 @freq; +#X text 245 742 Get/Set cutoff frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 812 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 794 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 799 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 813 1\.; -#X text 245 813 input signal.; -#X obj 20 843 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 848 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 800 1\.; +#X text 245 800 input signal.; +#X text 110 820 2\.; +#X text 150 820 *float*; +#X text 245 820 set frequency.; +#X obj 20 850 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 855 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 849 1\.; -#X text 245 849 filtered signal.; +#X text 110 856 1\.; +#X text 245 856 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 899 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 902 library: ceammc v0.9.4; -#X text 417 914 see also:; -#X obj 491 914 flt.lpf24~; -#X obj 579 914 flt.hpf12~; -#X obj 667 914 flt.c_lpf~; -#N canvas 10 921 400 290 info 0; +#X obj 1 906 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 909 library: ceammc v0.9.6; +#X text 417 921 see also:; +#X obj 491 921 flt.lpf24~; +#X obj 579 921 flt.hpf12~; +#X obj 667 921 flt.c_lpf~; +#N canvas 10 928 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.lpf12~; #X text 10 76 category:; @@ -86,7 +89,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 921 pd info; +#X restore 10 928 pd info; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.lpf12~.pddoc b/ceammc/ext/doc/flt.lpf12~.pddoc index 5b14d11f69..dc4b545c3a 100644 --- a/ceammc/ext/doc/flt.lpf12~.pddoc +++ b/ceammc/ext/doc/flt.lpf12~.pddoc @@ -28,19 +28,21 @@ wiki: Butterworth filter - cutoff frequency - on/off dsp - processing + on/off dsp processing - cutoff + cutoff frequency input signal + + set frequency + filtered signal diff --git a/ceammc/ext/doc/flt.lpf24~-help.pd b/ceammc/ext/doc/flt.lpf24~-help.pd index d9a0b83273..fca4e98150 100644 --- a/ceammc/ext/doc/flt.lpf24~-help.pd +++ b/ceammc/ext/doc/flt.lpf24~-help.pd @@ -31,43 +31,46 @@ https://en.wikipedia.org/wiki/Butterworth_filter; #X text 110 643 1\.; #X text 150 643 float; #X obj 246 644 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 643 freq(Hz): cutoff frequency. Type: float. Range: 20\...20000; +#X text 245 643 FREQ(Hz): cutoff frequency. Type: float. Range: 20\...20000; #X obj 20 673 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 678 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 713 @active; -#X text 245 713 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 755 @freq; -#X text 245 755 Get/Set cutoff frequency. Type: float. Units: Hz. Default +#X text 245 713 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 742 @freq; +#X text 245 742 Get/Set cutoff frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 812 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 794 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 799 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 813 1\.; -#X text 245 813 input signal.; -#X obj 20 843 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 848 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 800 1\.; +#X text 245 800 input signal.; +#X text 110 820 2\.; +#X text 150 820 *float*; +#X text 245 820 set frequency.; +#X obj 20 850 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 855 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 849 1\.; -#X text 245 849 filtered signal.; +#X text 110 856 1\.; +#X text 245 856 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 899 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 902 library: ceammc v0.9.4; -#X text 417 914 see also:; -#X obj 491 914 flt.lpf12~; -#X obj 579 914 flt.hpf12~; -#X obj 667 914 flt.c_lpf~; -#N canvas 10 921 400 290 info 0; +#X obj 1 906 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 909 library: ceammc v0.9.6; +#X text 417 921 see also:; +#X obj 491 921 flt.lpf12~; +#X obj 579 921 flt.hpf12~; +#X obj 667 921 flt.c_lpf~; +#N canvas 10 928 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.lpf24~; #X text 10 76 category:; @@ -86,7 +89,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 921 pd info; +#X restore 10 928 pd info; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/flt.lpf24~.pddoc b/ceammc/ext/doc/flt.lpf24~.pddoc index bf674dbd79..6fd63611e9 100644 --- a/ceammc/ext/doc/flt.lpf24~.pddoc +++ b/ceammc/ext/doc/flt.lpf24~.pddoc @@ -28,19 +28,21 @@ wiki: Butterworth filter - cutoff frequency - on/off dsp - processing + on/off dsp processing - cutoff + cutoff frequency input signal + + set frequency + filtered signal diff --git a/ceammc/ext/doc/flt.median-help.pd b/ceammc/ext/doc/flt.median-help.pd index 09987d7c24..b01012f73a 100644 --- a/ceammc/ext/doc/flt.median-help.pd +++ b/ceammc/ext/doc/flt.median-help.pd @@ -42,13 +42,13 @@ Default value: 9\. Range: 1\...128\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; #X obj 1 575 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 578 library: ceammc v0.9.4; +#X text 10 578 library: ceammc v0.9.6; #N canvas 10 597 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.median; #X text 10 76 category:; diff --git a/ceammc/ext/doc/flt.moog_vcf~-help.pd b/ceammc/ext/doc/flt.moog_vcf~-help.pd index 42d52dd031..a7d2636b19 100644 --- a/ceammc/ext/doc/flt.moog_vcf~-help.pd +++ b/ceammc/ext/doc/flt.moog_vcf~-help.pd @@ -20,48 +20,48 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 30 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 res: normalized amount of corner-resonance. Type: float. +#X obj 246 352 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 RES: normalized amount of corner-resonance. Type: float. Range: 0\...1; #X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 401 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 436 @active; -#X text 245 436 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 478 @res; -#X text 245 478 Get/Set normalized amount of corner-resonance. Type: +#X text 245 436 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 465 @res; +#X text 245 465 Get/Set normalized amount of corner-resonance. Type: float. Default value: 0.4\. Range: 0\...1\.; -#X obj 20 530 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 535 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 522 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 570 reset; -#X text 245 570 reset object state.; -#X obj 20 607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 612 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 557 reset; +#X text 245 557 reset object state.; +#X obj 20 594 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 599 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 613 1\.; -#X text 245 613 input signal.; -#X text 110 633 2\.; -#X text 245 633 filter center frequency in Hz.; -#X obj 20 663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 668 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 600 1\.; +#X text 245 600 input signal.; +#X text 110 620 2\.; +#X text 245 620 filter center frequency in Hz.; +#X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 655 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 669 1\.; -#X text 245 669 filtered signal.; +#X text 110 656 1\.; +#X text 245 656 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 719 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 722 library: ceammc v0.9.4; -#N canvas 10 741 400 290 info 0; +#X obj 1 706 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 709 library: ceammc v0.9.6; +#N canvas 10 728 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.moog_vcf~; #X text 10 76 category:; @@ -80,7 +80,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 741 pd info; +#X restore 10 728 pd info; #X connect 4 0 6 0; #X connect 7 0 8 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/flt.moog_vcf~.pddoc b/ceammc/ext/doc/flt.moog_vcf~.pddoc index d6996a6683..dd15d3714c 100644 --- a/ceammc/ext/doc/flt.moog_vcf~.pddoc +++ b/ceammc/ext/doc/flt.moog_vcf~.pddoc @@ -14,7 +14,7 @@ 0.6 - normalized amount of + normalized amount of corner-resonance @@ -23,8 +23,7 @@ normalized amount of corner-resonance - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/flt.notch~-help.pd b/ceammc/ext/doc/flt.notch~-help.pd index 1af78a5075..59e082df5e 100644 --- a/ceammc/ext/doc/flt.notch~-help.pd +++ b/ceammc/ext/doc/flt.notch~-help.pd @@ -24,48 +24,49 @@ opposite of a band-pass filter.; #X text 110 464 1\.; #X text 150 464 float; #X obj 246 465 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 464 freq(Hz): center frequency. Type: float.; +#X text 245 464 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 484 2\.; #X text 150 484 float; #X obj 246 485 cnv 1 78 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 484 width(Hz): band width (approximate). Type: float.; -#X obj 20 514 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 519 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 245 484 WIDTH(Hz): band width (approximate). Type: float. Range: +1\...10000; +#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 534 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 554 @active; -#X text 245 554 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 596 @freq; -#X text 245 596 Get/Set center frequency. Type: float. Units: Hz. Default +#X msg 110 569 @active; +#X text 245 569 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 598 @freq; +#X text 245 598 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 638 @width; -#X text 245 638 Get/Set band width (approximate). Type: float. Units: +#X msg 110 640 @width; +#X text 245 640 Get/Set band width (approximate). Type: float. Units: Hz. Default value: 50\. Range: 1\...10000\.; -#X obj 20 690 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 695 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 692 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 697 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 696 1\.; -#X text 245 696 input signal.; -#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 731 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 698 1\.; +#X text 245 698 input signal.; +#X obj 20 728 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 733 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 732 1\.; -#X text 245 732 filtered signal.; +#X text 110 734 1\.; +#X text 245 734 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 782 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 785 library: ceammc v0.9.4; -#X text 593 797 see also:; -#X obj 667 797 flt.bpf12~; -#N canvas 10 804 400 290 info 0; +#X obj 1 784 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 787 library: ceammc v0.9.6; +#X text 593 799 see also:; +#X obj 667 799 flt.bpf12~; +#N canvas 10 806 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.notch~; #X text 10 76 category:; @@ -84,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 804 pd info; +#X restore 10 806 pd info; #X connect 6 0 8 0; #X connect 7 0 8 1; #X connect 9 0 10 0; diff --git a/ceammc/ext/doc/flt.notch~.pddoc b/ceammc/ext/doc/flt.notch~.pddoc index 11f87b1de9..6200ffc007 100644 --- a/ceammc/ext/doc/flt.notch~.pddoc +++ b/ceammc/ext/doc/flt.notch~.pddoc @@ -22,15 +22,16 @@ center frequency - center frequency + band width (approximate) - on/off dsp - processing + on/off dsp processing - center frequency - band width (approximate) + center + frequency + band + width (approximate) diff --git a/ceammc/ext/doc/flt.resonbp~-help.pd b/ceammc/ext/doc/flt.resonbp~-help.pd index f392f2ee41..66666b93eb 100644 --- a/ceammc/ext/doc/flt.resonbp~-help.pd +++ b/ceammc/ext/doc/flt.resonbp~-help.pd @@ -20,48 +20,55 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 245 351 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; #X text 110 371 2\.; #X text 150 371 float; #X obj 246 372 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 q: Q. Type: float. Range: 0.1\...300; +#X text 245 371 Q: Q. Type: float. Range: 0.1\...300; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @freq; -#X text 245 483 Get/Set center frequency. Type: float. Units: Hz. Default +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @freq; +#X text 245 470 Get/Set center frequency. Type: float. Units: Hz. Default value: 1000\. Range: 20\...20000\.; -#X msg 110 525 @q; -#X text 245 525 Get/Set Q. Type: float. Default value: 80\. Range: +#X msg 110 512 @q; +#X text 245 512 Get/Set Q. Type: float. Default value: 80\. Range: 0.1\...300\.; -#X obj 20 577 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 582 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 564 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 569 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 583 1\.; -#X text 245 583 input signal.; -#X obj 20 613 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 618 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 570 1\.; +#X text 245 570 input signal.; +#X text 110 590 2\.; +#X text 150 590 *float*; +#X text 245 590 set frequency.; +#X text 110 610 3\.; +#X text 150 610 *float*; +#X text 245 610 set Q-factor.; +#X obj 20 640 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 645 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 619 1\.; -#X text 245 619 filtered signal.; +#X text 110 646 1\.; +#X text 245 646 filtered signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; -#X obj 1 669 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 672 library: ceammc v0.9.4; -#X text 593 684 see also:; -#X obj 667 684 flt.bpf12~; -#N canvas 10 691 400 290 info 0; +#X obj 1 696 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 699 library: ceammc v0.9.6; +#X text 491 711 see also:; +#X obj 565 711 flt.resonlp~; +#X obj 667 711 flt.bpf12~; +#N canvas 10 718 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 flt.resonbp~; #X text 10 76 category:; @@ -80,7 +87,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 691 pd info; +#X restore 10 718 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; diff --git a/ceammc/ext/doc/flt.resonbp~.pddoc b/ceammc/ext/doc/flt.resonbp~.pddoc index 5571a55c1f..6e83e76fb8 100644 --- a/ceammc/ext/doc/flt.resonbp~.pddoc +++ b/ceammc/ext/doc/flt.resonbp~.pddoc @@ -13,26 +13,32 @@ filter resonant 0.1 + flt.resonlp~ flt.bpf12~ - center + center frequency - Q + Q - center frequency Q - on/off dsp - processing + on/off dsp processing input signal + + set frequency + + + set Q-factor + filtered signal diff --git a/ceammc/ext/doc/flt.resonhp~-help.pd b/ceammc/ext/doc/flt.resonhp~-help.pd new file mode 100644 index 0000000000..0bfeaed886 --- /dev/null +++ b/ceammc/ext/doc/flt.resonhp~-help.pd @@ -0,0 +1,108 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 521 50 cnv 1 244 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 521 50 Simple resonant highpass filter; +#X obj 1 1 cnv 5 765 40 empty empty flt.resonhp~ 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 flt.resonhp~; +#X obj 50 118 osc.saw~ 15; +#X obj 184 118 noise~; +#X obj 290 118 ui.dsp~; +#X obj 213 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 176 mux~ 2; +#X obj 78 205 ui.hsl 20 4000 @show_value 1; +#X msg 78 234 @freq \$1; +#X obj 184 234 ui.hsl 0.5 50 @show_value 1; +#X msg 184 262 @q \$1; +#X obj 50 291 flt.resonhp~ 440 10; +#X obj 50 320 dyn.limit~; +#X obj 50 349 ui.gain~ @size 120 14; +#X obj 290 349 ui.ssc~ @size 400 120 @log_scale 1; +#X obj 50 435 dac~; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 524 1\.; +#X text 150 524 float; +#X obj 246 525 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 524 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 110 544 2\.; +#X text 150 544 float; +#X obj 246 545 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 544 Q: Quality factor. Type: float. Range: 0.1\...100; +#X obj 20 574 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 579 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 614 @active; +#X text 245 614 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 643 @freq; +#X text 245 643 Get/Set center frequency. Type: float. Units: Hz. Default +value: 100\. Range: 20\...20000\.; +#X msg 110 685 @q; +#X text 245 685 Get/Set Quality factor. Type: float. Default value: +20\. Range: 0.1\...100\.; +#X obj 20 737 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 742 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 743 1\.; +#X text 245 743 input signal.; +#X text 110 763 2\.; +#X text 150 763 *float*; +#X text 245 763 set frequency.; +#X text 110 783 3\.; +#X text 150 783 *float*; +#X text 245 783 set Q-factor.; +#X obj 20 813 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 818 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 819 1\.; +#X text 245 819 filtered signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; +#X obj 1 869 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 872 library: ceammc v0.9.6; +#X text 477 884 see also:; +#X obj 551 884 flt.resonbp~; +#X obj 653 884 flt.resonlp~; +#N canvas 10 891 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 flt.resonhp~; +#X text 10 76 category:; +#X text 120 76 flt; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 filter \, resonant \, highpass; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 891 pd info; +#X connect 4 0 8 0; +#X connect 5 0 8 1; +#X connect 7 0 8 2; +#X connect 9 0 10 0; +#X connect 11 0 12 0; +#X connect 8 0 13 0; +#X connect 10 0 13 0; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 17 0; +#X connect 15 0 17 1; +#X connect 13 0 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flt.resonhp~.pddoc b/ceammc/ext/doc/flt.resonhp~.pddoc new file mode 100644 index 0000000000..e8618243d9 --- /dev/null +++ b/ceammc/ext/doc/flt.resonhp~.pddoc @@ -0,0 +1,77 @@ + + + + flt.resonhp~ + + + Serge Poltavsky + + Simple resonant highpass filter + GPL3 or later + ceammc + flt + filter resonant highpass + 0.9.6 + + flt.resonbp~ + flt.resonlp~ + + + + center + frequency + Quality factor + + + center frequency + Quality + factor + on/off dsp processing + + + + input signal + + + set frequency + + + set Q-factor + + + + filtered signal + + + +x] +]]> + + + + diff --git a/ceammc/ext/doc/flt.resonlp~-help.pd b/ceammc/ext/doc/flt.resonlp~-help.pd new file mode 100644 index 0000000000..71903ac79b --- /dev/null +++ b/ceammc/ext/doc/flt.resonlp~-help.pd @@ -0,0 +1,99 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 529 50 cnv 1 236 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 529 50 Simple resonant lowpass filter; +#X obj 1 1 cnv 5 765 40 empty empty flt.resonlp~ 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 flt.resonlp~; +#X obj 50 118 osc.saw~ 200; +#X obj 299 118 ui.dsp~; +#X obj 78 147 ui.hsl 500 5000 @show_value 1; +#X msg 78 176 @freq \$1; +#X obj 184 176 ui.hsl 0.5 50 @show_value 1; +#X msg 184 205 @q \$1; +#X obj 50 234 flt.resonlp~ 1000 20; +#X obj 50 262 ui.gain~ @size 120 14; +#X obj 290 262 ui.ssc~ @size 400 120; +#X obj 50 349 dac~; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 438 1\.; +#X text 150 438 float; +#X obj 246 439 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 FREQ(Hz): center frequency. Type: float. Range: 20\...20000; +#X text 110 458 2\.; +#X text 150 458 float; +#X obj 246 459 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 458 Q: Quality factor. Type: float. Range: 0.1\...100; +#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 493 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 528 @active; +#X text 245 528 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 557 @freq; +#X text 245 557 Get/Set center frequency. Type: float. Units: Hz. Default +value: 1000\. Range: 20\...20000\.; +#X msg 110 599 @q; +#X text 245 599 Get/Set Quality factor. Type: float. Default value: +40\. Range: 0.1\...100\.; +#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 656 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 657 1\.; +#X text 245 657 input signal.; +#X text 110 677 2\.; +#X text 150 677 *float*; +#X text 245 677 set frequency.; +#X text 110 697 3\.; +#X text 150 697 *float*; +#X text 245 697 set Q-factor.; +#X obj 20 727 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 732 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 733 1\.; +#X text 245 733 filtered signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flt @url ceammc.flt-help.pd; +#X obj 1 783 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 786 library: ceammc v0.9.6; +#X text 579 798 see also:; +#X obj 653 798 flt.resonbp~; +#N canvas 10 805 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 flt.resonlp~; +#X text 10 76 category:; +#X text 120 76 flt; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 filter \, resonant \, lowpass; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 805 pd info; +#X connect 6 0 7 0; +#X connect 8 0 9 0; +#X connect 4 0 10 0; +#X connect 7 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 0 13 1; +#X connect 10 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/flt.resonlp~.pddoc b/ceammc/ext/doc/flt.resonlp~.pddoc new file mode 100644 index 0000000000..f3cf40421b --- /dev/null +++ b/ceammc/ext/doc/flt.resonlp~.pddoc @@ -0,0 +1,70 @@ + + + + flt.resonlp~ + + + Serge Poltavsky + + Simple resonant lowpass filter + GPL3 or later + ceammc + flt + filter resonant lowpass + 0.9.6 + + flt.resonbp~ + + + + center + frequency + Quality factor + + + center frequency + Quality + factor + on/off dsp processing + + + + input signal + + + set frequency + + + set Q-factor + + + + filtered signal + + + +x] +]]> + + + + diff --git a/ceammc/ext/doc/fluid~-help.pd b/ceammc/ext/doc/fluid~-help.pd index f050b4f150..06d33fa06d 100644 --- a/ceammc/ext/doc/fluid~-help.pd +++ b/ceammc/ext/doc/fluid~-help.pd @@ -45,273 +45,284 @@ value: 0\.; #X msg 110 686 @bufsize; #X text 245 686 (readonly) Get internal buffer size. Type: float. Units: samp. Default value: 0\.; -#X msg 110 728 @gain; -#X text 245 728 Get/Set output gain. Type: float. Default value: 0\. +#X msg 110 728 @cpuload; +#X text 245 728 (readonly) Get current cpu load. Type: float. Default +value: 0\.; +#X msg 110 770 @gain; +#X text 245 770 Get/Set output gain. Type: float. Default value: 0\. Range: 0\...10\.; -#X msg 110 770 @n; -#X text 245 770 (readonly) Get number of active voices. Type: int. +#X msg 110 812 @n; +#X text 245 812 (readonly) Get number of active voices. Type: int. Default value: 16\.; -#X msg 110 812 @poly; -#X text 245 812 Get/Set max number of voices. Type: float. Default +#X msg 110 854 @poly; +#X text 245 854 Get/Set max number of voices. Type: float. Default value: 0\. Range: 1\...1024\.; -#X msg 110 854 @reverb_damp; -#X text 245 854 Get/Set reverberation damp. Type: float. Default value: +#X msg 110 896 @reverb_damp; +#X text 245 896 Get/Set reverberation damp. Type: float. Default value: 0\.; -#X msg 110 883 @reverb_level; -#X text 245 883 Get/Set reverberation level. Type: float. Default value: +#X msg 110 925 @reverb_level; +#X text 245 925 Get/Set reverberation level. Type: float. Default value: 0\.; -#X msg 110 912 @reverb_room; -#X text 245 912 Get/Set reverberation room size. Type: float. Default +#X msg 110 954 @reverb_room; +#X text 245 954 Get/Set reverberation room size. Type: float. Default value: 0\.; -#X msg 110 954 @reverb_width; -#X text 245 954 Get/Set reverberation spread width. Type: float. Default +#X msg 110 996 @reverb_width; +#X text 245 996 Get/Set reverberation spread width. Type: float. Default value: 0\.; -#X msg 110 996 @sf; -#X text 245 996 Get/Set soundfont path \, you can use **default** value -to load default soundfont. Type: symbol.; -#X msg 110 1038 @version; -#X text 245 1038 (readonly) Get FluidSynth version. Type: symbol. Default -value: 2.1.9\.; -#X msg 110 1080 @volume; -#X text 245 1080 Get/Set output volume (same as @gain but in db). Type: +#X msg 110 1038 @sf; +#X text 245 1038 Get/Set soundfont path \, you can use **default** +value to load default soundfont. Type: symbol.; +#X msg 110 1080 @version; +#X text 245 1080 (readonly) Get FluidSynth version. Type: symbol. Default +value: 2.0.0\.; +#X msg 110 1122 @volume; +#X text 245 1122 Get/Set output volume (same as @gain but in db). Type: float. Units: db. Default value: 0\. Range: -60\...10\.; -#X msg 110 1122 @soundfonts; -#X text 245 1122 (readonly) Get list of found soundfonts. Type: list.; -#X obj 20 1161 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1166 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 1164 @soundfonts; +#X text 245 1164 (readonly) Get list of found soundfonts. Type: list.; +#X obj 20 1203 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1208 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1201 aftertouch; -#X text 245 1201 aftertouch channel pressure. Arguments are:; -#X obj 255 1224 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1224 [CHAN=0]: MIDI channel \, ignored. Type: int. Range: +#X msg 110 1243 aftertouch; +#X text 245 1243 aftertouch channel pressure. Arguments are:; +#X obj 255 1266 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1266 [CHAN=0]: MIDI channel \, ignored. Type: int. Range: 0\...16\.; -#X obj 255 1247 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1247 VEL: MIDI velocity. Type: int. Range: 0\...127\.; -#X msg 110 1272 bank; -#X text 245 1272 select instrument bank number on a MIDI channel \, +#X obj 255 1289 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1289 VEL: MIDI velocity. Type: int. Range: 0\...127\.; +#X msg 110 1314 bank; +#X text 245 1314 select instrument bank number on a MIDI channel \, but doesn't change instrument \, it should be done with after that with *prog* message. Arguments are:; -#X obj 255 1325 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1325 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X obj 255 1367 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1367 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 1363 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1363 BANK: instrument bank number. Type: int. Range: 0\...16383\.; -#X msg 110 1388 bend; -#X text 245 1388 pitchband change. Arguments are:; -#X obj 255 1411 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1411 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X obj 255 1405 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1405 BANK: instrument bank number. Type: int. Range: 0\...16383\.; +#X msg 110 1430 bend; +#X text 245 1430 pitchband change. Arguments are:; +#X obj 255 1453 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1453 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 1449 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1449 VALUE: value in 0\..0x3fff range \, with 0x2000 center. +#X obj 255 1491 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1491 VALUE: value in 0\..0x3fff range \, with 0x2000 center. Type: int. Range: 0\...16383\.; -#X msg 110 1489 bend:f; -#X text 245 1489 pitchband change. Arguments are:; -#X obj 255 1512 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1512 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 1531 bend:f; +#X text 245 1531 pitchband change. Arguments are:; +#X obj 255 1554 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1554 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 1550 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1550 VALUE: value in -1\..+1 range \, with 0 center. Type: +#X obj 255 1592 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1592 VALUE: value in -1\..+1 range \, with 0 center. Type: float. Range: -1\...1\.; -#X msg 110 1590 bend:i; -#X text 245 1590 pitchband change. Arguments are:; -#X obj 255 1613 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1613 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 1632 bend:i; +#X text 245 1632 pitchband change. Arguments are:; +#X obj 255 1655 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1655 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 1651 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1651 VALUE: value in -0x2000\..0x1fff range \, with 0 center. +#X obj 255 1693 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1693 VALUE: value in -0x2000\..0x1fff range \, with 0 center. Type: int. Range: -8192\...8191\.; -#X msg 110 1691 bendsens; -#X text 245 1691 set pitchbend sensivity. Arguments are:; -#X obj 255 1714 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1714 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 1733 bendsens; +#X text 245 1733 set pitchbend sensitivity. Arguments are:; +#X obj 255 1756 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1756 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 1752 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1752 RANGE: semitones sensivity. Type: int. Range: 0\...64\. +#X obj 255 1794 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1794 RANGE: semitones sensitivity. Type: int. Range: 0\...64\. Units: semitone.; -#X msg 110 1792 cc; -#X text 245 1792 control change. Arguments are:; -#X obj 255 1815 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1815 [CHAN=0]: MIDI channel \, if zero or ommited set on +#X msg 110 1834 cc; +#X text 245 1834 control change. Arguments are:; +#X obj 255 1857 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1857 [CHAN=0]: MIDI channel \, if zero or ommited set on all channel. Type: int. Range: 0\...16\.; -#X obj 255 1853 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1853 CC: MIDI control number. Type: int. Range: 0\...127\.; -#X obj 255 1876 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1876 VAL: MIDI control value. Type: int. Range: 0\...127\.; -#X msg 110 1901 gen; -#X text 245 1901 set a SoundFont generator (effect) value on a MIDI +#X obj 255 1895 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1895 CC: MIDI control number. Type: int. Range: 0\...127\.; +#X obj 255 1918 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1918 VAL: MIDI control value. Type: int. Range: 0\...127\.; +#X msg 110 1943 gen; +#X text 245 1943 set a SoundFont generator (effect) value on a MIDI channel in real-time (CHANNEL \, PARAM \, VALUE or PARAM \, VALUE expected).; -#X msg 110 1941 hold; -#X text 245 1941 hold (sustain \, right) pedal \, ignore note release +#X msg 110 1983 hold; +#X text 245 1983 hold (sustain \, right) pedal \, ignore note release when active \, release all notes when set to off. Arguments are:; -#X obj 255 1979 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1979 CHAN=0: MIDI channel \, if zero or ommited sustain +#X obj 255 2021 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2021 CHAN=0: MIDI channel \, if zero or ommited sustain all channels. Type: int. Range: 0\...16\.; -#X obj 255 2017 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2017 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 2059 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2059 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 2042 legato; -#X text 245 2042 enable or disable legato/smooth transitions between +#X msg 110 2084 legato; +#X text 245 2084 enable or disable legato/smooth transitions between consecutive notes. Arguments are:; -#X obj 255 2080 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2080 CHAN: MIDI channel \, if zero or ommited apply to +#X obj 255 2122 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2122 CHAN: MIDI channel \, if zero or ommited apply to all channels. Type: int. Range: 0\...15\.; -#X obj 255 2118 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2118 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 2160 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2160 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 2143 midi; -#X text 245 2143 send raw midi message to synth. Arguments are:; -#X obj 255 2166 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2166 BYTES: list of bytes. Type: list.; -#X msg 110 2191 note; -#X text 245 2191 play note. Arguments are:; -#X obj 255 2214 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2214 [CHAN=0]: MIDI channel \, if zero or ommited play +#X msg 110 2185 midi; +#X text 245 2185 send raw midi message to synth. Arguments are:; +#X obj 255 2208 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2208 BYTES: list of bytes. Type: list.; +#X msg 110 2233 note; +#X text 245 2233 play note. Arguments are:; +#X obj 255 2256 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2256 [CHAN=0]: MIDI channel \, if zero or ommited play on first(!) channel. Type: int. Range: 0\...16\.; -#X obj 255 2252 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2252 NOTE: MIDI note. Type: int. Range: 0\...127\.; -#X obj 255 2275 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2275 VEL: MIDI velocity. Type: int. Range: 0\...127\.; -#X msg 110 2300 notes_off; -#X text 245 2300 turn off all notes on a MIDI channel (put them into +#X obj 255 2294 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2294 NOTE: MIDI note. Type: int. Range: 0\...127\.; +#X obj 255 2317 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2317 VEL: MIDI velocity. Type: int. Range: 0\...127\.; +#X msg 110 2342 notes_off; +#X text 245 2342 turn off all notes on a MIDI channel (put them into release phase). Arguments are:; -#X obj 255 2338 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2338 [CHAN=0]: MIDI channel \, if zero or not specified +#X obj 255 2380 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2380 [CHAN=0]: MIDI channel \, if zero or not specified turn notes on all channels. Type: int. Range: 0\...16\.; -#X msg 110 2378 pan; -#X text 245 2378 set channel panning. Arguments are:; -#X obj 255 2401 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2401 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 2420 pan; +#X text 245 2420 set channel panning. Arguments are:; +#X obj 255 2443 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2443 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 2439 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2439 PAN: pan value \, 0: left \, 8192(0x2000): center +#X obj 255 2481 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2481 PAN: pan value \, 0: left \, 8192(0x2000): center \, 16383(0x3fff): right. Type: float. Range: 0\...16383\.; -#X msg 110 2479 pan:f; -#X text 245 2479 set channel panning. Arguments are:; -#X obj 255 2502 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2502 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 2521 pan:f; +#X text 245 2521 set channel panning. Arguments are:; +#X obj 255 2544 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2544 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 2540 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2540 PAN: pan value \, -1: left \, 0: center \, 1): right. +#X obj 255 2582 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2582 PAN: pan value \, -1: left \, 0: center \, 1): right. Type: float. Range: -1\...1\.; -#X msg 110 2580 pan:i; -#X text 245 2580 set channel panning. Arguments are:; -#X obj 255 2603 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2603 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X msg 110 2622 pan:i; +#X text 245 2622 set channel panning. Arguments are:; +#X obj 255 2645 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2645 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 2641 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2641 PAN: pan value \, -8192(-0x2000): left \, 0: center +#X obj 255 2683 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2683 PAN: pan value \, -8192(-0x2000): left \, 0: center \, 8191(0x1fff): right. Type: float. Range: -8192\...8191\.; -#X msg 110 2681 panic; -#X text 245 2681 send MIDI system reset command (big red 'panic' button) +#X msg 110 2723 panic; +#X text 245 2723 send MIDI system reset command (big red 'panic' button) \, turns off notes \, resets controllers and restores initial basic channel configuration.; -#X msg 110 2736 polytouch; -#X text 245 2736 polytouch key pressure. Arguments are:; -#X obj 255 2759 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2759 [CHAN=0]: MIDI channel \, ignored. Type: int. Range: +#X msg 110 2778 polytouch; +#X text 245 2778 polytouch key pressure. Arguments are:; +#X obj 255 2801 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2801 [CHAN=0]: MIDI channel \, ignored. Type: int. Range: 0\...16\.; -#X obj 255 2782 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2782 NOTE: MIDI note. Type: int. Range: 0\...127\.; -#X obj 255 2805 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2805 VEL: MIDI velocity. Type: int. Range: 0\...127\.; -#X msg 110 2830 prog; -#X text 245 2830 program change. Arguments are:; -#X obj 255 2853 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2853 [CHAN=0]: MIDI channel \, if zero or ommited set for +#X obj 255 2824 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2824 NOTE: MIDI note. Type: int. Range: 0\...127\.; +#X obj 255 2847 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2847 VEL: MIDI velocity. Type: int. Range: 0\...127\.; +#X msg 110 2872 prog; +#X text 245 2872 program change. Arguments are:; +#X obj 255 2895 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2895 [CHAN=0]: MIDI channel \, if zero or ommited set for all channels. Type: int. Range: 0\...16\.; -#X obj 255 2891 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2891 PGM: program number. Type: int. Range: 0\...16383\.; -#X msg 110 2916 reset; -#X text 245 2916 reset synth channels. Arguments are:; -#X obj 255 2939 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2939 [CHAN=0]: MIDI channel \, if zero or not specified +#X obj 255 2933 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2933 PGM: program number. Type: int. Range: 0\...16383\.; +#X msg 110 2958 reset; +#X text 245 2958 reset synth channels. Arguments are:; +#X obj 255 2981 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2981 [CHAN=0]: MIDI channel \, if zero or not specified reset all channels. Type: int. Range: 0\...16\.; -#X msg 110 2979 soft; -#X text 245 2979 soft (left) pedal \, activate the soft strike effect. +#X msg 110 3021 soft; +#X text 245 3021 soft (left) pedal \, activate the soft strike effect. Arguments are:; -#X obj 255 3017 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3017 CHAN: MIDI channel \, if zero or ommited apply to +#X obj 255 3059 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3059 CHAN: MIDI channel \, if zero or ommited apply to all channels. Type: int. Range: 0\...15\.; -#X obj 255 3055 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3055 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 3097 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3097 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 3080 sostenuto; -#X text 245 3080 sostenuto (middle) pedal \, hold notes pressed before +#X msg 110 3122 sostenuto; +#X text 245 3122 sostenuto (middle) pedal \, hold notes pressed before pedal activation \, new notes are passed untouched. Release holded notes when set to off. Arguments are:; -#X obj 255 3133 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3133 CHAN: MIDI channel \, if zero or ommited apply to +#X obj 255 3175 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3175 CHAN: MIDI channel \, if zero or ommited apply to all channels. Type: int. Range: 0\...15\.; -#X obj 255 3171 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3171 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 3213 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3213 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 3196 sounds_off; -#X text 245 3196 immediately stop all notes (skips release phase). +#X msg 110 3238 sounds_off; +#X text 245 3238 immediately stop all notes (skips release phase). Arguments are:; -#X obj 255 3234 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3234 [CHAN=0]: MIDI channel \, if zero or not specified +#X obj 255 3276 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3276 [CHAN=0]: MIDI channel \, if zero or not specified stop notes on all channels. Type: int. Range: 0\...16\.; -#X msg 110 3274 tune:12; -#X text 245 3274 set and activate octave tuning program in cents deviations. +#X msg 110 3316 sysex; +#X text 245 3316 accept SYSEX message. Arguments are:; +#X obj 255 3339 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3339 BYTES: list of bytes. Type: list.; +#X msg 110 3364 tune.; +#X text 245 3364 set fine tuninig in cents \, see tune:s.; +#X msg 110 3391 tune:12; +#X text 245 3391 set and activate octave tuning program in cents deviations. Arguments are:; -#X obj 255 3312 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3312 BANK: tuning bank (not related to MIDI instrument +#X obj 255 3429 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3429 BANK: tuning bank (not related to MIDI instrument bank). Type: int. Range: 1\...256\.; -#X obj 255 3350 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3350 PRESET: tuning preset (not related to MIDI instrument +#X obj 255 3467 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3467 PRESET: tuning preset (not related to MIDI instrument program). Type: int. Range: 1\...256\.; -#X obj 255 3388 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3388 TUNES: list of scale deviations from 12TET in cents. +#X obj 255 3505 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3505 TUNES: list of scale deviations from 12TET in cents. Type: list.; -#X msg 110 3428 tune:c; -#X text 245 3428 set fine tuning in cents. Arguments are:; -#X obj 255 3451 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3451 [CHAN=0]: MIDI channel \, if zero or not specified +#X msg 110 3545 tune:c; +#X text 245 3545 set fine tuning in cents. Arguments are:; +#X obj 255 3568 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3568 [CHAN=0]: MIDI channel \, if zero or not specified apply tuning to all channels. Type: int. Range: 0\...16\.; -#X obj 255 3489 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3489 CENTS: cents (float) tuning. Type: float. Range: -100\...100\.; -#X msg 110 3529 tune:s; -#X text 245 3529 set tuninig in semitones. Arguments are:; -#X obj 255 3552 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3552 [CHAN=0]: MIDI channel \, if zero or not specified +#X obj 255 3606 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3606 CENTS: cents (float) tuning. Type: float. Range: -100\...100\.; +#X msg 110 3646 tune:s; +#X text 245 3646 set tuninig in semitones. Arguments are:; +#X obj 255 3669 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3669 [CHAN=0]: MIDI channel \, if zero or not specified apply tuning to all channels. Type: int. Range: 0\...16\.; -#X obj 255 3590 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3590 SEMI: semitones (float) tuning. Type: float. Range: +#X obj 255 3707 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3707 SEMI: semitones (float) tuning. Type: float. Range: -64\...63\.; -#X msg 110 3630 tunesel; -#X text 245 3630 select tuning bank and preset. Arguments are:; -#X obj 255 3653 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3653 BANK: tuning bank (not related to MIDI instrument +#X msg 110 3747 tunesel; +#X text 245 3747 select tuning bank and preset. Arguments are:; +#X obj 255 3770 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3770 BANK: tuning bank (not related to MIDI instrument bank). Type: int. Range: 1\...256\.; -#X obj 255 3691 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3691 PRESET: tuning preset (not related to MIDI instrument +#X obj 255 3808 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3808 PRESET: tuning preset (not related to MIDI instrument program). Type: int. Range: 1\...256\.; -#X obj 20 3741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3746 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 3858 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3863 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3747 1\.; -#X text 150 3747 *symbol*; -#X text 245 3747 load mod file.; -#X obj 20 3777 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3782 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 3864 1\.; +#X text 150 3864 *symbol*; +#X text 245 3864 load mod file.; +#X obj 20 3894 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3899 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3783 1\.; -#X text 245 3783 left channel and property output.; -#X text 110 3803 2\.; -#X text 245 3803 right channel.; +#X text 110 3900 1\.; +#X text 245 3900 left channel and property output.; +#X text 110 3920 2\.; +#X text 245 3920 right channel.; +#X text 110 3940 3\.; +#X text 245 3940 int: number of active voices (output only on change).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; -#X obj 1 3853 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3856 library: ceammc v0.9.4; -#N canvas 10 3875 400 290 info 0; +#X obj 1 3990 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 3993 library: ceammc v0.9.6; +#N canvas 10 4012 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fluid~; #X text 10 76 category:; @@ -330,7 +341,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 3875 pd info; +#X restore 10 4012 pd info; #X connect 8 0 10 0; #X connect 9 0 11 0; #X connect 10 0 14 0; diff --git a/ceammc/ext/doc/fluid~.pddoc b/ceammc/ext/doc/fluid~.pddoc index 5037a652ee..729b5eb409 100644 --- a/ceammc/ext/doc/fluid~.pddoc +++ b/ceammc/ext/doc/fluid~.pddoc @@ -26,9 +26,9 @@ soundfont path, you can use **default** value to load default soundfont - FluidSynth + FluidSynth version - list of found + list of found soundfonts output gain @@ -42,11 +42,13 @@ reverberation damp max number of voices - number midi + number midi channels - number of active + number of active voices - + current cpu + load + internal buffer size @@ -109,17 +111,19 @@ MIDI channel, if zero or ommited set for all channels value in -1..+1 range, with 0 center. - set pitchbend sensivity + set pitchbend sensitivity MIDI channel, if zero or ommited set for all channels semitones sensivity + required="true">semitones sensitivity set tuninig in semitones MIDI channel, if zero or not specified apply tuning to all channels semitones (float) tuning + + set fine tuninig in cents, see tune:s set fine tuning in cents @@ -200,6 +204,9 @@ send raw midi message to synth list of bytes + + accept SYSEX message + list of bytes @@ -209,6 +216,7 @@ left channel and property output right channel + int: number of active voices (output only on change) diff --git a/ceammc/ext/doc/function-help.pd b/ceammc/ext/doc/function-help.pd index ef38ebb261..2ab05e13b9 100644 --- a/ceammc/ext/doc/function-help.pd +++ b/ceammc/ext/doc/function-help.pd @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 function.call; #N canvas 10 527 400 290 info 0; @@ -52,7 +52,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 function; #X text 10 76 category:; diff --git a/ceammc/ext/doc/function.call-help.pd b/ceammc/ext/doc/function.call-help.pd index c158b19b8b..35e160329c 100644 --- a/ceammc/ext/doc/function.call-help.pd +++ b/ceammc/ext/doc/function.call-help.pd @@ -41,7 +41,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 606 520 see also:; #X obj 680 523 ui.link @background_color 0.78431 0.78431 0.78431 @title [function] @url function-help.pd; @@ -50,7 +50,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 function.call; #X text 10 76 category:; diff --git a/ceammc/ext/doc/fx.bitdown~-help.pd b/ceammc/ext/doc/fx.bitdown~-help.pd index bd675ba098..6542e539ff 100644 --- a/ceammc/ext/doc/fx.bitdown~-help.pd +++ b/ceammc/ext/doc/fx.bitdown~-help.pd @@ -22,50 +22,50 @@ #X text 110 380 1\.; #X text 150 380 int; #X obj 246 381 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 bits: number of bits. Type: int. Range: 1\...16; +#X text 245 380 BITS: number of bits. Type: int. Range: 1\...16; #X text 110 400 2\.; #X text 150 400 int; -#X obj 246 401 cnv 1 116 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 400 downsamp(samp): number of samples to skip. Type: int. +#X obj 246 401 cnv 1 115 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 400 DOWNSAMP(samp): number of samples to skip. Type: int. Range: 1\...200; #X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 450 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 485 @active; -#X text 245 485 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 527 @bits; -#X text 245 527 Get/Set output bits. Type: int. Default value: 16\. +#X text 245 485 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 514 @bits; +#X text 245 514 Get/Set output bits. Type: int. Default value: 16\. Range: 1\...16\.; -#X msg 110 569 @bypass; -#X text 245 569 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 611 @downsamp; -#X text 245 611 Get/Set number samples to skip. Type: int. Units: samp. +#X msg 110 556 @bypass; +#X text 245 556 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 598 @downsamp; +#X text 245 598 Get/Set number samples to skip. Type: int. Units: samp. Default value: 1\. Range: 1\...200\.; -#X obj 20 663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 668 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 655 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 669 1\.; -#X text 245 669 left channel.; -#X obj 20 699 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 704 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 656 1\.; +#X text 245 656 left channel.; +#X obj 20 686 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 691 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 705 1\.; -#X text 245 705 output.; +#X text 110 692 1\.; +#X text 245 692 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 755 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 758 library: ceammc v0.9.4; -#N canvas 10 777 400 290 info 0; +#X obj 1 742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 745 library: ceammc v0.9.6; +#N canvas 10 764 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.bitdown~; #X text 10 76 category:; @@ -84,7 +84,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 777 pd info; +#X restore 10 764 pd info; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/fx.bitdown~.pddoc b/ceammc/ext/doc/fx.bitdown~.pddoc index 8b73ff12cf..c3f5823f19 100644 --- a/ceammc/ext/doc/fx.bitdown~.pddoc +++ b/ceammc/ext/doc/fx.bitdown~.pddoc @@ -15,8 +15,8 @@ 0.7 - number of bits - number + number of bits + number of samples to skip @@ -24,10 +24,9 @@ bits number samples to skip - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.chorus~-help.pd b/ceammc/ext/doc/fx.chorus~-help.pd index 3368c59c83..4acb6c8865 100644 --- a/ceammc/ext/doc/fx.chorus~-help.pd +++ b/ceammc/ext/doc/fx.chorus~-help.pd @@ -22,51 +22,51 @@ #X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 409 @active; -#X text 245 409 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 451 @bypass; -#X text 245 451 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 493 @delay; -#X text 245 493 Get/Set delay amount. Type: float. Units: ms. Default +#X text 245 409 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 438 @bypass; +#X text 245 438 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 480 @delay; +#X text 245 480 Get/Set delay amount. Type: float. Units: ms. Default value: 25\. Range: 0\...200\.; -#X msg 110 535 @depth; -#X text 245 535 Get/Set effect depth. Type: float. Default value: 0.02\. +#X msg 110 522 @depth; +#X text 245 522 Get/Set effect depth. Type: float. Default value: 0.02\. Range: 0\...1\.; -#X msg 110 577 @drywet; -#X text 245 577 Get/Set Ratio between processed signal (wet) and source +#X msg 110 564 @drywet; +#X text 245 564 Get/Set Ratio between processed signal (wet) and source signal. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 619 @freq; -#X text 245 619 Get/Set effect freq. Type: float. Units: Hz. Default +#X msg 110 606 @freq; +#X text 245 606 Get/Set effect freq. Type: float. Units: Hz. Default value: 3\. Range: 0\...10\.; -#X obj 20 671 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 676 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 663 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 711 reset; -#X text 245 711 same as reset.; -#X obj 20 748 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 753 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 698 reset; +#X text 245 698 same as reset.; +#X obj 20 735 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 740 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 754 1\.; -#X text 245 754 input signal.; -#X obj 20 784 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 789 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 741 1\.; +#X text 245 741 input signal.; +#X obj 20 771 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 776 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 790 1\.; -#X text 245 790 output.; +#X text 110 777 1\.; +#X text 245 777 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 840 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 843 library: ceammc v0.9.4; -#N canvas 10 862 400 290 info 0; +#X obj 1 827 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 830 library: ceammc v0.9.6; +#N canvas 10 849 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.chorus~; #X text 10 76 category:; @@ -85,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 862 pd info; +#X restore 10 849 pd info; #X connect 4 0 5 0; #X connect 5 0 9 0; #X connect 6 0 10 0; diff --git a/ceammc/ext/doc/fx.chorus~.pddoc b/ceammc/ext/doc/fx.chorus~.pddoc index b9353feef7..8c96386533 100644 --- a/ceammc/ext/doc/fx.chorus~.pddoc +++ b/ceammc/ext/doc/fx.chorus~.pddoc @@ -21,15 +21,14 @@ delay amount effect freq + units="hertz">effect freq effect depth Ratio between processed signal (wet) and source signal - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.dattorro~-help.pd b/ceammc/ext/doc/fx.dattorro~-help.pd new file mode 100644 index 0000000000..66f4f73ee5 --- /dev/null +++ b/ceammc/ext/doc/fx.dattorro~-help.pd @@ -0,0 +1,145 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 644 50 cnv 1 121 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 644 50 dattorro reverb; +#X obj 1 1 cnv 5 765 40 empty empty fx.dattorro~ 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 fx.dattorro~; +#X obj 210 80 cnv 1 555 73 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Reverberator based on the Dattorro reverb topology with +default reverb parameters from the original paper; +#X obj 215 120 ui.link @background_color 0.98039 0.98039 0.98039 +@title +https://ccrma.stanford.edu/~dattorro/EffectDesignPart1.pdf @url +https://ccrma.stanford.edu/~dattorro/EffectDesignPart1.pdf; +#X msg 50 181 open %CEAMMC%/guitar1.wav \, 1; +#X obj 50 210 expand_env; +#X obj 174 239 ui.knob; +#X obj 290 239 ui.knob; +#X obj 395 239 ui.knob; +#X obj 50 268 readsf~; +#X msg 174 297 @decay \$1; +#X msg 290 297 @damp \$1; +#X msg 395 297 @drywet \$1; +#X obj 414 325 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 414 354 @bypass \$1; +#X obj 50 383 fx.dattorro~ 0.5; +#X obj 50 412 ui.gain~ @size 120 16; +#X obj 280 412 ui.dsp~; +#X obj 50 441 dac~; +#X obj 20 490 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 495 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 530 1\.; +#X text 150 530 float; +#X obj 246 531 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 530 DECAY: decay rate \, infinite decay = 1.0\. Type: float. +Range: 0\...1; +#X text 110 565 2\.; +#X text 150 565 float; +#X obj 246 566 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 565 DRYWET: proportion of mix between the original (dry) +and 'effected' (wet) signals. Type: float. Range: 0\...1; +#X obj 20 610 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 615 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 650 @active; +#X text 245 650 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 679 @bw; +#X text 245 679 Get/Set band-width filter (pre filtering). Type: float. +Default value: 0.9995\. Range: 0\...1\.; +#X msg 110 721 @bypass; +#X text 245 721 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 763 @damp; +#X text 245 763 Get/Set high-frequency damping. No damping = 0.0\. +Type: float. Default value: 0.0005\. Range: 0\...1\.; +#X msg 110 805 @ddiff1; +#X text 245 805 Get/Set decay diffusion factor 1\. Type: float. Default +value: 0.5\. Range: 0\...1\.; +#X msg 110 847 @ddiff2; +#X text 245 847 Get/Set decay diffusion factor 2\. Type: float. Default +value: 0.7\. Range: 0\...1\.; +#X msg 110 889 @decay; +#X text 245 889 Get/Set decay rate. Infinite decay = 1.0\. Type: float. +Default value: 0.5\. Range: 0\...1\.; +#X msg 110 931 @drywet; +#X text 245 931 Get/Set proportion of mix between the original (dry) +and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. +Default value: 0.33\. Range: 0\...1\.; +#X msg 110 988 @idiff1; +#X text 245 988 Get/Set input diffusion factor 1\. Type: float. Default +value: 0.625\. Range: 0\...1\.; +#X msg 110 1030 @idiff2; +#X text 245 1030 Get/Set input diffusion factor 2\. Type: float. Default +value: 0.75\. Range: 0\...1\.; +#X msg 110 1072 @predelay; +#X text 245 1072 Get/Set a delay operating on the 'wet' signal. Large +values will provide the impression of a larger room. Type: float. Units: +ms. Default value: 40\. Range: 0\...100\.; +#X obj 20 1139 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1144 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 1179 reset; +#X text 245 1179 reset reverb.; +#X obj 20 1216 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1221 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1222 1\.; +#X text 245 1222 left channel.; +#X text 110 1242 2\.; +#X text 245 1242 right channel.; +#X obj 20 1272 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1277 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1278 1\.; +#X text 245 1278 output left.; +#X text 110 1298 2\.; +#X text 245 1298 output right.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; +#X obj 1 1348 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1351 library: ceammc v0.9.6; +#N canvas 10 1370 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 fx.dattorro~; +#X text 10 76 category:; +#X text 120 76 fx; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 fx \, reverb; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1370 pd info; +#X connect 7 0 8 0; +#X connect 8 0 12 0; +#X connect 9 0 13 0; +#X connect 10 0 14 0; +#X connect 11 0 15 0; +#X connect 16 0 17 0; +#X connect 12 0 18 0; +#X connect 13 0 18 0; +#X connect 14 0 18 0; +#X connect 15 0 18 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 21 0; +#X connect 19 0 21 1; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.dattorro~.pddoc b/ceammc/ext/doc/fx.dattorro~.pddoc new file mode 100644 index 0000000000..6024ddf840 --- /dev/null +++ b/ceammc/ext/doc/fx.dattorro~.pddoc @@ -0,0 +1,94 @@ + + + + fx.dattorro~ + + + Serge Poltavsky + + dattorro reverb + GPL3 or later + ceammc + fx + fx reverb + 0.9.6 + + + Reverberator based on the Dattorro reverb topology with default reverb parameters + from the original paper + + https://ccrma.stanford.edu/~dattorro/EffectDesignPart1.pdf + + + decay rate, infinite + decay = 1.0 + proportion of mix + between the original (dry) and 'effected' (wet) signals + + + reset reverb + + + decay + rate. Infinite decay = 1.0 + + high-frequency damping. No damping = 0.0 + + proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry + signal, 1 - wet + a delay operating on the 'wet' signal. Large values will provide + the impression of a larger room + input + diffusion factor 1 + input + diffusion factor 2 + if set to 1 - bypass 'effected' + signal + on/off dsp processing + decay + diffusion factor 1 + decay + diffusion factor 2 + band-width + filter (pre filtering) + + + + left channel + + + right channel + + + + output left + output right + + + + + + + + diff --git a/ceammc/ext/doc/fx.distortion1~-help.pd b/ceammc/ext/doc/fx.distortion1~-help.pd index 3eacbbf869..725f01da73 100644 --- a/ceammc/ext/doc/fx.distortion1~-help.pd +++ b/ceammc/ext/doc/fx.distortion1~-help.pd @@ -22,104 +22,103 @@ #X obj 20 417 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 452 @active; -#X text 245 452 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 494 @drive; -#X text 245 494 Get/Set distortion amount. Type: float. Default value: +#X text 245 452 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 481 @drive; +#X text 245 481 Get/Set distortion amount. Type: float. Default value: 0.64\. Range: 0\...1\.; -#X msg 110 536 @flt_on_off; -#X text 245 536 Get/Set filter processing. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 578 @gain; -#X text 245 578 Get/Set total effect gain. Type: float. Units: db. +#X msg 110 523 @flt_on_off; +#X text 245 523 Get/Set filter processing. Type: bool. Default value: +0\.; +#X msg 110 552 @gain; +#X text 245 552 Get/Set total effect gain. Type: float. Units: db. Default value: 2\. Range: -10\...10\.; -#X msg 110 620 @high_drive; -#X text 245 620 Get/Set distortion amount on high frequencies. Type: +#X msg 110 594 @high_drive; +#X text 245 594 Get/Set distortion amount on high frequencies. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 662 @high_gain; -#X text 245 662 Get/Set gain on high frequencies. Type: float. Units: +#X msg 110 636 @high_gain; +#X text 245 636 Get/Set gain on high frequencies. Type: float. Units: db. Default value: 10\. Range: -10\...20\.; -#X msg 110 704 @hp_freq; -#X text 245 704 Get/Set high pass frequency. Type: float. Units: Hz. +#X msg 110 678 @hp_freq; +#X text 245 678 Get/Set high pass frequency. Type: float. Units: Hz. Default value: 130\. Range: 20\...7040\.; -#X msg 110 746 @level; -#X text 245 746 Get/Set effect level. Type: float. Default value: 0.01\. +#X msg 110 720 @level; +#X text 245 720 Get/Set effect level. Type: float. Default value: 0.01\. Range: 0\...0.5\.; -#X msg 110 788 @low_drive; -#X text 245 788 Get/Set distortion amount on low frequencies. Type: +#X msg 110 762 @low_drive; +#X text 245 762 Get/Set distortion amount on low frequencies. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 830 @low_gain; -#X text 245 830 Get/Set gain on low frequencies. Type: float. Units: +#X msg 110 804 @low_gain; +#X text 245 804 Get/Set gain on low frequencies. Type: float. Units: db. Default value: 10\. Range: -10\...20\.; -#X msg 110 872 @lp_freq; -#X text 245 872 Get/Set low pass frequency. Type: float. Units: Hz. +#X msg 110 846 @lp_freq; +#X text 245 846 Get/Set low pass frequency. Type: float. Units: Hz. Default value: 5000\. Range: 20\...12000\.; -#X msg 110 914 @middle_h_drive; -#X text 245 914 Get/Set distortion amount on middle high frequencies. +#X msg 110 888 @middle_h_drive; +#X text 245 888 Get/Set distortion amount on middle high frequencies. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 956 @middle_h_gain; -#X text 245 956 Get/Set gain on middle high frequencies. Type: float. +#X msg 110 930 @middle_h_gain; +#X text 245 930 Get/Set gain on middle high frequencies. Type: float. Units: db. Default value: 10\. Range: -10\...20\.; -#X msg 110 998 @middle_l_drive; -#X text 245 998 Get/Set distortion amount on middle low frequencies. +#X msg 110 972 @middle_l_drive; +#X text 245 972 Get/Set distortion amount on middle low frequencies. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1040 @middle_l_gain; -#X text 245 1040 Get/Set gain on middle low frequencies. Type: float. +#X msg 110 1014 @middle_l_gain; +#X text 245 1014 Get/Set gain on middle low frequencies. Type: float. Units: db. Default value: 10\. Range: -10\...20\.; -#X msg 110 1082 @res_on_off; -#X text 245 1082 Get/Set resonator. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 1124 @sp_high_freq; -#X text 245 1124 Get/Set speaker emulation high frequency. Type: float. +#X msg 110 1056 @res_on_off; +#X text 245 1056 Get/Set resonator. Type: bool. Default value: 0\.; +#X msg 110 1085 @sp_high_freq; +#X text 245 1085 Get/Set speaker emulation high frequency. Type: float. Units: Hz. Default value: 5000\. Range: 1000\...12000\.; -#X msg 110 1166 @sp_low_freq; -#X text 245 1166 Get/Set speaker emulation low frequency. Type: float. +#X msg 110 1127 @sp_low_freq; +#X text 245 1127 Get/Set speaker emulation low frequency. Type: float. Units: Hz. Default value: 130\. Range: 20\...1000\.; -#X msg 110 1208 @sp_on_off; -#X text 245 1208 Get/Set speaker emulation turn on/off. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1250 @split_high_freq; -#X text 245 1250 Get/Set high split frequency. Type: float. Units: +#X msg 110 1169 @sp_on_off; +#X text 245 1169 Get/Set speaker emulation turn on/off. Type: bool. +Default value: 0\.; +#X msg 110 1211 @split_high_freq; +#X text 245 1211 Get/Set high split frequency. Type: float. Units: Hz. Default value: 1250\. Range: 1250\...12000\.; -#X msg 110 1292 @split_low_freq; -#X text 245 1292 Get/Set low split frequency. Type: float. Units: Hz. +#X msg 110 1253 @split_low_freq; +#X text 245 1253 Get/Set low split frequency. Type: float. Units: Hz. Default value: 250\. Range: 20\...600\.; -#X msg 110 1334 @split_middle_freq; -#X text 245 1334 Get/Set middle split frequency. Type: float. Units: +#X msg 110 1295 @split_middle_freq; +#X text 245 1295 Get/Set middle split frequency. Type: float. Units: Hz. Default value: 650\. Range: 600\...1250\.; -#X msg 110 1376 @trigger; -#X text 245 1376 Get/Set resonator trigger. Type: float. Default value: +#X msg 110 1337 @trigger; +#X text 245 1337 Get/Set resonator trigger. Type: float. Default value: 0.12\. Range: 0\...1\.; -#X msg 110 1418 @vibrato; -#X text 245 1418 Get/Set resonator vibration. Type: float. Default +#X msg 110 1379 @vibrato; +#X text 245 1379 Get/Set resonator vibration. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 1470 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1475 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1436 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1476 1\.; -#X text 245 1476 input signal.; -#X obj 20 1506 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1511 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1437 1\.; +#X text 245 1437 input signal.; +#X obj 20 1467 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1472 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1512 1\.; -#X text 245 1512 output signal.; +#X text 110 1473 1\.; +#X text 245 1473 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1565 library: ceammc v0.9.4; -#X text 316 1577 see also:; -#X obj 390 1577 fx.distortion~; -#X obj 507 1577 fx.distortion2~; -#X obj 631 1577 fx.distortion3~; -#N canvas 10 1584 400 290 info 0; +#X obj 1 1523 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1526 library: ceammc v0.9.6; +#X text 316 1538 see also:; +#X obj 390 1538 fx.distortion~; +#X obj 507 1538 fx.distortion2~; +#X obj 631 1538 fx.distortion3~; +#N canvas 10 1545 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.distortion1~; #X text 10 76 category:; @@ -138,7 +137,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1584 pd info; +#X restore 10 1545 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/fx.distortion1~.pddoc b/ceammc/ext/doc/fx.distortion1~.pddoc index 567c45b620..a078ac22dd 100644 --- a/ceammc/ext/doc/fx.distortion1~.pddoc +++ b/ceammc/ext/doc/fx.distortion1~.pddoc @@ -20,25 +20,24 @@ - speaker emulation low frequency - speaker emulation high frequency - speaker emulation turn + speaker emulation high frequency + speaker emulation turn on/off - low pass frequency - high pass frequency - filter - processing + filter processing - low split frequency - middle split frequency - high split frequency effect @@ -65,13 +64,12 @@ distortion amount on middle high frequencies - resonator + resonator resonator vibration resonator trigger - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/fx.distortion2~-help.pd b/ceammc/ext/doc/fx.distortion2~-help.pd index 265026a42a..fe4c097d64 100644 --- a/ceammc/ext/doc/fx.distortion2~-help.pd +++ b/ceammc/ext/doc/fx.distortion2~-help.pd @@ -22,71 +22,70 @@ #X obj 20 417 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 452 @active; -#X text 245 452 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 494 @drive; -#X text 245 494 Get/Set distortion amount. Type: float. Default value: +#X text 245 452 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 481 @drive; +#X text 245 481 Get/Set distortion amount. Type: float. Default value: 0.64\. Range: 0\...1\.; -#X msg 110 536 @flt_on_off; -#X text 245 536 Get/Set filter processing. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 578 @gain; -#X text 245 578 Get/Set total effect gain. Type: float. Units: db. +#X msg 110 523 @flt_on_off; +#X text 245 523 Get/Set filter processing. Type: bool. Default value: +0\.; +#X msg 110 552 @gain; +#X text 245 552 Get/Set total effect gain. Type: float. Units: db. Default value: 2\. Range: -10\...10\.; -#X msg 110 620 @hp_freq; -#X text 245 620 Get/Set high pass frequency. Type: float. Units: Hz. +#X msg 110 594 @hp_freq; +#X text 245 594 Get/Set high pass frequency. Type: float. Units: Hz. Default value: 130\. Range: 20\...7040\.; -#X msg 110 662 @level; -#X text 245 662 Get/Set effect level. Type: float. Default value: 0.01\. +#X msg 110 636 @level; +#X text 245 636 Get/Set effect level. Type: float. Default value: 0.01\. Range: 0\...0.5\.; -#X msg 110 704 @lp_freq; -#X text 245 704 Get/Set low pass frequency. Type: float. Units: Hz. +#X msg 110 678 @lp_freq; +#X text 245 678 Get/Set low pass frequency. Type: float. Units: Hz. Default value: 5000\. Range: 20\...12000\.; -#X msg 110 746 @res_on_off; -#X text 245 746 Get/Set resonator. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 788 @sp_high_freq; -#X text 245 788 Get/Set speaker emulation high frequency. Type: float. +#X msg 110 720 @res_on_off; +#X text 245 720 Get/Set resonator. Type: bool. Default value: 0\.; +#X msg 110 749 @sp_high_freq; +#X text 245 749 Get/Set speaker emulation high frequency. Type: float. Units: Hz. Default value: 5000\. Range: 1000\...12000\.; -#X msg 110 830 @sp_low_freq; -#X text 245 830 Get/Set speaker emulation low frequency. Type: float. +#X msg 110 791 @sp_low_freq; +#X text 245 791 Get/Set speaker emulation low frequency. Type: float. Units: Hz. Default value: 130\. Range: 20\...1000\.; -#X msg 110 872 @sp_on_off; -#X text 245 872 Get/Set speaker emulation turn on/off. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 914 @trigger; -#X text 245 914 Get/Set resonator trigger. Type: float. Default value: +#X msg 110 833 @sp_on_off; +#X text 245 833 Get/Set speaker emulation turn on/off. Type: bool. +Default value: 0\.; +#X msg 110 875 @trigger; +#X text 245 875 Get/Set resonator trigger. Type: float. Default value: 0.12\. Range: 0\...1\.; -#X msg 110 956 @vibrato; -#X text 245 956 Get/Set resonator vibration. Type: float. Default value: +#X msg 110 917 @vibrato; +#X text 245 917 Get/Set resonator vibration. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 1008 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1013 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 969 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 974 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 975 1\.; +#X text 245 975 input signal.; +#X obj 20 1005 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1010 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1014 1\.; -#X text 245 1014 input signal.; -#X obj 20 1044 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1049 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 110 1050 1\.; -#X text 245 1050 output signal.; +#X text 110 1011 1\.; +#X text 245 1011 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1100 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1103 library: ceammc v0.9.4; -#X text 316 1115 see also:; -#X obj 390 1115 fx.distortion~; -#X obj 507 1115 fx.distortion1~; -#X obj 631 1115 fx.distortion3~; -#N canvas 10 1122 400 290 info 0; +#X obj 1 1061 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1064 library: ceammc v0.9.6; +#X text 316 1076 see also:; +#X obj 390 1076 fx.distortion~; +#X obj 507 1076 fx.distortion1~; +#X obj 631 1076 fx.distortion3~; +#N canvas 10 1083 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.distortion2~; #X text 10 76 category:; @@ -105,7 +104,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1122 pd info; +#X restore 10 1083 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/fx.distortion2~.pddoc b/ceammc/ext/doc/fx.distortion2~.pddoc index 44b31d902a..ccd0097507 100644 --- a/ceammc/ext/doc/fx.distortion2~.pddoc +++ b/ceammc/ext/doc/fx.distortion2~.pddoc @@ -20,19 +20,18 @@ - speaker emulation low frequency - speaker emulation high frequency - speaker emulation turn + speaker emulation high frequency + speaker emulation turn on/off - low pass frequency - high pass frequency - filter - processing + filter processing effect level @@ -42,13 +41,12 @@ distortion amount - resonator + resonator resonator vibration resonator trigger - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/fx.distortion3~-help.pd b/ceammc/ext/doc/fx.distortion3~-help.pd index 15d0d61f02..f161cb17b8 100644 --- a/ceammc/ext/doc/fx.distortion3~-help.pd +++ b/ceammc/ext/doc/fx.distortion3~-help.pd @@ -24,54 +24,54 @@ #X obj 20 417 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 452 @active; -#X text 245 452 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 494 @bypass; -#X text 245 494 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 536 @drive; -#X text 245 536 Get/Set distortion amount. Type: float. Default value: +#X text 245 452 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 481 @bypass; +#X text 245 481 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 523 @drive; +#X text 245 523 Get/Set distortion amount. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 578 @drywet; -#X text 245 578 Get/Set proportion of mix between the original (dry) +#X msg 110 565 @drywet; +#X text 245 565 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 635 @gain; -#X text 245 635 Get/Set total effect gain. Type: float. Units: db. +#X msg 110 622 @gain; +#X text 245 622 Get/Set total effect gain. Type: float. Units: db. Default value: 0\. Range: -30\...10\.; -#X msg 110 677 @hp_freq; -#X text 245 677 Get/Set high pass frequency. Type: float. Units: Hz. +#X msg 110 664 @hp_freq; +#X text 245 664 Get/Set high pass frequency. Type: float. Units: Hz. Default value: 30\. Range: 20\...2000\.; -#X msg 110 719 @lp_freq; -#X text 245 719 Get/Set low pass frequency. Type: float. Units: Hz. +#X msg 110 706 @lp_freq; +#X text 245 706 Get/Set low pass frequency. Type: float. Units: Hz. Default value: 10000\. Range: 1000\...20000\.; -#X obj 20 771 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 776 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 758 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 763 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 777 1\.; -#X text 245 777 input signal.; -#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 812 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 764 1\.; +#X text 245 764 input signal.; +#X obj 20 794 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 799 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 813 1\.; -#X text 245 813 output signal.; +#X text 110 800 1\.; +#X text 245 800 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 863 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 866 library: ceammc v0.9.4; -#X text 316 878 see also:; -#X obj 390 878 fx.distortion~; -#X obj 507 878 fx.distortion1~; -#X obj 631 878 fx.distortion2~; -#N canvas 10 885 400 290 info 0; +#X obj 1 850 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 853 library: ceammc v0.9.6; +#X text 316 865 see also:; +#X obj 390 865 fx.distortion~; +#X obj 507 865 fx.distortion1~; +#X obj 631 865 fx.distortion2~; +#N canvas 10 872 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.distortion3~; #X text 10 76 category:; @@ -90,7 +90,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 885 pd info; +#X restore 10 872 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 11 0; diff --git a/ceammc/ext/doc/fx.distortion3~.pddoc b/ceammc/ext/doc/fx.distortion3~.pddoc index aaed922bcf..b4a96d9174 100644 --- a/ceammc/ext/doc/fx.distortion3~.pddoc +++ b/ceammc/ext/doc/fx.distortion3~.pddoc @@ -25,17 +25,16 @@ distortion amount - low pass frequency - high pass frequency - on/off dsp - processing + on/off dsp processing proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. + if set to 1 - bypass 'effected' + signal. diff --git a/ceammc/ext/doc/fx.distortion~-help.pd b/ceammc/ext/doc/fx.distortion~-help.pd index 83780d7cd4..f11eb47d5a 100644 --- a/ceammc/ext/doc/fx.distortion~-help.pd +++ b/ceammc/ext/doc/fx.distortion~-help.pd @@ -26,54 +26,54 @@ #X text 110 452 1\.; #X text 150 452 float; #X obj 246 453 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 452 drive: distortion amount. Type: float. Range: 0\...1; +#X text 245 452 DRIVE: distortion amount. Type: float. Range: 0\...1; #X text 110 472 2\.; #X text 150 472 float; #X obj 246 473 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 472 offset: constant added before nonlinearity to give -even harmonics. Type: float. Range: 0\...1; +#X text 245 472 OFFSET: constant added before nonlinearity to give +even harmonics. Type: float. Range: 0\...0.5; #X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 522 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 557 @active; -#X text 245 557 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 599 @bypass; -#X text 245 599 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 641 @drive; -#X text 245 641 Get/Set distortion amount. Type: float. Default value: +#X text 245 557 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 586 @bypass; +#X text 245 586 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 628 @drive; +#X text 245 628 Get/Set distortion amount. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 683 @drywet; -#X text 245 683 Get/Set proportion of mix between the original (dry) +#X msg 110 670 @drywet; +#X text 245 670 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 740 @offset; -#X text 245 740 Get/Set constant added before nonlinearity to give +#X msg 110 727 @offset; +#X text 245 727 Get/Set constant added before nonlinearity to give even harmonics. Type: float. Default value: 0\. Range: 0\...0.5\.; -#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 797 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 798 1\.; -#X text 245 798 input signal.; -#X obj 20 828 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 833 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 785 1\.; +#X text 245 785 input signal.; +#X obj 20 815 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 820 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 834 1\.; -#X text 245 834 output signal.; +#X text 110 821 1\.; +#X text 245 821 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 884 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 887 library: ceammc v0.9.4; -#N canvas 10 906 400 290 info 0; +#X obj 1 871 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 874 library: ceammc v0.9.6; +#N canvas 10 893 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.distortion~; #X text 10 76 category:; @@ -92,7 +92,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 906 pd info; +#X restore 10 893 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 11 0; diff --git a/ceammc/ext/doc/fx.distortion~.pddoc b/ceammc/ext/doc/fx.distortion~.pddoc index a3a146e318..2b27a416c0 100644 --- a/ceammc/ext/doc/fx.distortion~.pddoc +++ b/ceammc/ext/doc/fx.distortion~.pddoc @@ -14,9 +14,9 @@ 0.2 - distortion + distortion amount - constant added before + constant added before nonlinearity to give even harmonics @@ -27,10 +27,9 @@ wet. constant added before nonlinearity to give even harmonics - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.drive~-help.pd b/ceammc/ext/doc/fx.drive~-help.pd index 77942057a5..82b81a40fe 100644 --- a/ceammc/ext/doc/fx.drive~-help.pd +++ b/ceammc/ext/doc/fx.drive~-help.pd @@ -25,37 +25,37 @@ #X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 479 @active; -#X text 245 479 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 521 @bypass; -#X text 245 521 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 563 @drive; -#X text 245 563 Get/Set drive coefficient. Type: float. Default value: +#X text 245 479 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 508 @bypass; +#X text 245 508 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 550 @drive; +#X text 245 550 Get/Set drive coefficient. Type: float. Default value: 1\. Range: 1\...10\.; -#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 620 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 602 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 607 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 621 1\.; -#X text 245 621 input signal.; -#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 656 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 608 1\.; +#X text 245 608 input signal.; +#X obj 20 638 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 643 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 657 1\.; -#X text 245 657 output.; +#X text 110 644 1\.; +#X text 245 644 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 707 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 710 library: ceammc v0.9.4; -#N canvas 10 729 400 290 info 0; +#X obj 1 694 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 697 library: ceammc v0.9.6; +#N canvas 10 716 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.drive~; #X text 10 76 category:; @@ -74,7 +74,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 729 pd info; +#X restore 10 716 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/fx.drive~.pddoc b/ceammc/ext/doc/fx.drive~.pddoc index f11ed52882..d069edd119 100644 --- a/ceammc/ext/doc/fx.drive~.pddoc +++ b/ceammc/ext/doc/fx.drive~.pddoc @@ -20,10 +20,9 @@ drive coefficient - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.drone_box~-help.pd b/ceammc/ext/doc/fx.drone_box~-help.pd index dcf9b35580..1837bcdf1c 100644 --- a/ceammc/ext/doc/fx.drone_box~-help.pd +++ b/ceammc/ext/doc/fx.drone_box~-help.pd @@ -23,49 +23,49 @@ #X text 110 409 1\.; #X text 150 409 float; #X obj 246 410 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 pitch: drone MIDI pitch. Type: float. Range: 36\...60; +#X text 245 409 PITCH: drone MIDI pitch. Type: float. Range: 36\...60; #X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 479 @active; -#X text 245 479 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 521 @bypass; -#X text 245 521 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 563 @decay; -#X text 245 563 Get/Set drone pluck decay time. Type: float. Units: +#X text 245 479 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 508 @bypass; +#X text 245 508 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 550 @decay; +#X text 245 550 Get/Set drone pluck decay time. Type: float. Units: ms. Default value: 4000\. Range: 100\...120000\.; -#X msg 110 605 @drywet; -#X text 245 605 Get/Set proportion of mix between the original (dry) +#X msg 110 592 @drywet; +#X text 245 592 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 662 @pitch; -#X text 245 662 Get/Set drone MIDI pitch. Type: float. Default value: +#X msg 110 649 @pitch; +#X text 245 649 Get/Set drone MIDI pitch. Type: float. Default value: 48\. Range: 36\...60\.; -#X obj 20 714 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 719 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 701 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 706 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 720 1\.; -#X text 245 720 input signal.; -#X obj 20 750 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 755 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 707 1\.; +#X text 245 707 input signal.; +#X obj 20 737 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 742 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 756 1\.; -#X text 245 756 output signal.; +#X text 110 743 1\.; +#X text 245 743 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 806 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 809 library: ceammc v0.9.4; -#N canvas 10 828 400 290 info 0; +#X obj 1 793 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 796 library: ceammc v0.9.6; +#N canvas 10 815 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.drone_box~; #X text 10 76 category:; @@ -84,7 +84,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 828 pd info; +#X restore 10 815 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/fx.drone_box~.pddoc b/ceammc/ext/doc/fx.drone_box~.pddoc index 5273041e84..932516463a 100644 --- a/ceammc/ext/doc/fx.drone_box~.pddoc +++ b/ceammc/ext/doc/fx.drone_box~.pddoc @@ -15,7 +15,7 @@ 0.6 - drone MIDI + drone MIDI pitch @@ -26,10 +26,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.echo2~-help.pd b/ceammc/ext/doc/fx.echo2~-help.pd index 5258543c61..b5b0459515 100644 --- a/ceammc/ext/doc/fx.echo2~-help.pd +++ b/ceammc/ext/doc/fx.echo2~-help.pd @@ -19,73 +19,73 @@ -49933 0; #X text 110 380 1\.; #X text 150 380 float; -#X obj 246 381 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 time(ms): echo time. Type: float. Range: 10\...5000; +#X obj 246 381 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 380 DELAY(ms): echo time. Type: float. Range: 10\...5000; #X text 110 400 2\.; #X text 150 400 float; #X obj 246 401 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 400 feedback: feedback coefficient. Type: float. Range: +#X text 245 400 FEEDBACK: feedback coefficient. Type: float. Range: 0\...0.99; #X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 435 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 470 @active; -#X text 245 470 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 512 @bypass; -#X text 245 512 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 554 @delay; -#X text 245 554 Get/Set echo time. Type: float. Units: ms. Default +#X text 245 470 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 499 @bypass; +#X text 245 499 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 541 @delay; +#X text 245 541 Get/Set echo time. Type: float. Units: ms. Default value: 500\. Range: 10\...5000\.; -#X msg 110 596 @drywet; -#X text 245 596 Get/Set proportion of mix between the original (dry) +#X msg 110 583 @drywet; +#X text 245 583 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 653 @feedback; -#X text 245 653 Get/Set feedback coefficient. Type: float. Default +#X msg 110 640 @feedback; +#X text 245 640 Get/Set feedback coefficient. Type: float. Default value: 0.3\. Range: 0\...0.99\.; -#X msg 110 695 @stereo; -#X text 245 695 Get/Set The stereo parameter controls the amount of +#X msg 110 682 @stereo; +#X text 245 682 Get/Set The stereo parameter controls the amount of stereo spread. For stereo=0 you get a plain delay \, without crosstalk between the channels. For stereo=1 you get a pure ping-pong delay where the echos from the left first appear on the right channel and vice versa. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 807 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 812 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 794 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 799 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 847 reset; -#X text 245 847 reset to initial state.; -#X obj 20 884 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 889 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 834 reset; +#X text 245 834 reset to initial state.; +#X obj 20 871 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 876 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 890 1\.; -#X text 245 890 left input signal.; -#X text 110 910 2\.; -#X text 245 910 right input signal.; -#X obj 20 940 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 945 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 877 1\.; +#X text 245 877 left input signal.; +#X text 110 897 2\.; +#X text 245 897 right input signal.; +#X obj 20 927 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 932 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 946 1\.; -#X text 245 946 left output signal.; -#X text 110 966 2\.; -#X text 245 966 right output signal.; +#X text 110 933 1\.; +#X text 245 933 left output signal.; +#X text 110 953 2\.; +#X text 245 953 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1016 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1019 library: ceammc v0.9.4; -#X text 512 1031 see also:; -#X obj 586 1031 fx.echo2~; -#X obj 667 1031 fx.sdelay~; -#N canvas 10 1038 400 290 info 0; +#X obj 1 1003 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1006 library: ceammc v0.9.6; +#X text 512 1018 see also:; +#X obj 586 1018 fx.echo2~; +#X obj 667 1018 fx.sdelay~; +#N canvas 10 1025 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.echo2~; #X text 10 76 category:; @@ -104,7 +104,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1038 pd info; +#X restore 10 1025 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/fx.echo2~.pddoc b/ceammc/ext/doc/fx.echo2~.pddoc index 1ce06cdba2..459ebcd826 100644 --- a/ceammc/ext/doc/fx.echo2~.pddoc +++ b/ceammc/ext/doc/fx.echo2~.pddoc @@ -18,9 +18,9 @@ - + echo time - feedback + feedback coefficient @@ -39,10 +39,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing diff --git a/ceammc/ext/doc/fx.echo~-help.pd b/ceammc/ext/doc/fx.echo~-help.pd index 0205d595b2..acdb1a454d 100644 --- a/ceammc/ext/doc/fx.echo~-help.pd +++ b/ceammc/ext/doc/fx.echo~-help.pd @@ -19,62 +19,62 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 time(ms): echo time. Type: float. Range: 10\...10000; +#X obj 246 352 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 DELAY(ms): echo time. Type: float. Range: 10\...10000; #X text 110 371 2\.; #X text 150 371 float; #X obj 246 372 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 feedback: feedback coefficient. Type: float. Range: -0\...0.8; +#X text 245 371 FEEDBACK: feedback coefficient. Type: float. Range: +0\...0.99; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @bypass; -#X text 245 483 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 525 @delay; -#X text 245 525 Get/Set echo time. Type: float. Units: ms. Default +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @bypass; +#X text 245 470 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 512 @delay; +#X text 245 512 Get/Set echo time. Type: float. Units: ms. Default value: 500\. Range: 10\...10000\.; -#X msg 110 567 @drywet; -#X text 245 567 Get/Set proportion of mix between the original (dry) +#X msg 110 554 @drywet; +#X text 245 554 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 624 @feedback; -#X text 245 624 Get/Set feedback coefficient. Type: float. Default +#X msg 110 611 @feedback; +#X text 245 611 Get/Set feedback coefficient. Type: float. Default value: 0.3\. Range: 0\...0.99\.; -#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 681 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 668 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 716 reset; -#X text 245 716 reset to initial state.; -#X obj 20 753 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 758 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 703 reset; +#X text 245 703 reset to initial state.; +#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 745 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 759 1\.; -#X text 245 759 input signal.; -#X obj 20 789 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 794 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 746 1\.; +#X text 245 746 input signal.; +#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 781 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 795 1\.; -#X text 245 795 output signal.; +#X text 110 782 1\.; +#X text 245 782 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 845 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 848 library: ceammc v0.9.4; -#X text 593 860 see also:; -#X obj 667 860 fx.sdelay~; -#N canvas 10 867 400 290 info 0; +#X obj 1 832 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 835 library: ceammc v0.9.6; +#X text 593 847 see also:; +#X obj 667 847 fx.sdelay~; +#N canvas 10 854 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.echo~; #X text 10 76 category:; @@ -93,7 +93,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 867 pd info; +#X restore 10 854 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/fx.echo~.pddoc b/ceammc/ext/doc/fx.echo~.pddoc index a98e9ef361..cae70d8812 100644 --- a/ceammc/ext/doc/fx.echo~.pddoc +++ b/ceammc/ext/doc/fx.echo~.pddoc @@ -17,9 +17,9 @@ - + echo time - feedback + feedback coefficient @@ -33,10 +33,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing diff --git a/ceammc/ext/doc/fx.flanger~-help.pd b/ceammc/ext/doc/fx.flanger~-help.pd index 0534145a66..6af6fa4499 100644 --- a/ceammc/ext/doc/fx.flanger~-help.pd +++ b/ceammc/ext/doc/fx.flanger~-help.pd @@ -34,53 +34,53 @@ #X obj 20 518 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 553 @active; -#X text 245 553 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 595 @bypass; -#X text 245 595 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 637 @delay; -#X text 245 637 Get/Set flange delay. Type: float. Units: ms. Default +#X text 245 553 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 582 @bypass; +#X text 245 582 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 624 @delay; +#X text 245 624 Get/Set flange delay. Type: float. Units: ms. Default value: 10\. Range: 0\...20\.; -#X msg 110 679 @drywet; -#X text 245 679 Get/Set proportion of mix between the original (dry) +#X msg 110 666 @drywet; +#X text 245 666 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 736 @feedback; -#X text 245 736 Get/Set feedback gain. Type: float. Default value: +#X msg 110 723 @feedback; +#X text 245 723 Get/Set feedback gain. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 778 @invert; -#X text 245 778 Get/Set 0 for normal \, 1 to invert sign of flanging -sum. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 820 @offset; -#X text 245 820 Get/Set flange delay offset. Type: float. Units: ms. +#X msg 110 765 @invert; +#X text 245 765 Get/Set 0 for normal \, 1 to invert sign of flanging +sum. Type: bool. Default value: 0\.; +#X msg 110 807 @offset; +#X text 245 807 Get/Set flange delay offset. Type: float. Units: ms. Default value: 1\. Range: 0\...20\.; -#X msg 110 862 @speed; -#X text 245 862 Get/Set flanger frequency. Type: float. Units: Hz. +#X msg 110 849 @speed; +#X text 245 849 Get/Set flanger frequency. Type: float. Units: Hz. Default value: 0.5\. Range: 0\...10\.; -#X obj 20 914 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 919 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 901 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 906 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 920 1\.; -#X text 245 920 input signal.; -#X obj 20 950 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 955 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 907 1\.; +#X text 245 907 input signal.; +#X obj 20 937 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 942 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 956 1\.; -#X text 245 956 output signal.; +#X text 110 943 1\.; +#X text 245 943 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1006 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1009 library: ceammc v0.9.4; -#N canvas 10 1028 400 290 info 0; +#X obj 1 993 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 996 library: ceammc v0.9.6; +#N canvas 10 1015 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.flanger~; #X text 10 76 category:; @@ -99,7 +99,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1028 pd info; +#X restore 10 1015 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/fx.flanger~.pddoc b/ceammc/ext/doc/fx.flanger~.pddoc index d6feee3c63..a609cacd23 100644 --- a/ceammc/ext/doc/fx.flanger~.pddoc +++ b/ceammc/ext/doc/fx.flanger~.pddoc @@ -19,18 +19,17 @@ flange delay offset flanger frequency + units="hertz">flanger frequency feedback gain - 0 for normal, 1 to invert - sign of flanging sum + 0 for normal, 1 to invert sign of + flanging sum proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.freeverb2~-help.pd b/ceammc/ext/doc/fx.freeverb2~-help.pd index 69f5fd33cc..3a37c2dd94 100644 --- a/ceammc/ext/doc/fx.freeverb2~-help.pd +++ b/ceammc/ext/doc/fx.freeverb2~-help.pd @@ -42,68 +42,68 @@ and 'effected' (wet) signals. Type: float. Range: 0\...1; #X obj 20 622 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 657 @active; -#X text 245 657 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 699 @bypass; -#X text 245 699 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 741 @damp; -#X text 245 741 Get/Set damping of the lowpass comb filter. Type: float. +#X text 245 657 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 686 @bypass; +#X text 245 686 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 728 @damp; +#X text 245 728 Get/Set damping of the lowpass comb filter. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 783 @drywet; -#X text 245 783 Get/Set proportion of mix between the original (dry) +#X msg 110 770 @drywet; +#X text 245 770 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 0.33\. Range: 0\...1\.; -#X msg 110 840 @fr_damp; -#X text 245 840 Get/Set freeze room damp. Type: float. Default value: +#X msg 110 827 @fr_damp; +#X text 245 827 Get/Set freeze room damp. Type: float. Default value: 0.0001\. Range: 0\...1\.; -#X msg 110 882 @fr_room; -#X text 245 882 Get/Set freeze room size. Type: float. Default value: +#X msg 110 869 @fr_room; +#X text 245 869 Get/Set freeze room size. Type: float. Default value: 0.999\. Range: 0\...1\.; -#X msg 110 924 @fr_time; -#X text 245 924 Get/Set length of freeze tail. Type: float. Units: +#X msg 110 911 @fr_time; +#X text 245 911 Get/Set length of freeze tail. Type: float. Units: ms. Default value: 100\. Range: 0\...1000\.; -#X msg 110 966 @freeze; -#X text 245 966 Get/Set freeze reverberation tail. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1008 @room; -#X text 245 1008 Get/Set room size. Type: float. Default value: 0.5\. +#X msg 110 953 @freeze; +#X text 245 953 Get/Set freeze reverberation tail. Type: bool. Default +value: 0\.; +#X msg 110 995 @room; +#X text 245 995 Get/Set room size. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 1050 @spread; -#X text 245 1050 Get/Set spatial spread between 0 and 1 with 1 for +#X msg 110 1037 @spread; +#X text 245 1037 Get/Set spatial spread between 0 and 1 with 1 for maximum spread. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 1102 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1107 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1089 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1094 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1142 reset; -#X text 245 1142 reset reverb.; -#X obj 20 1179 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1184 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1129 reset; +#X text 245 1129 reset reverb.; +#X obj 20 1166 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1171 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1185 1\.; -#X text 245 1185 left channel.; -#X text 110 1205 2\.; -#X text 245 1205 right channel.; -#X obj 20 1235 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1240 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1172 1\.; +#X text 245 1172 left channel.; +#X text 110 1192 2\.; +#X text 245 1192 right channel.; +#X obj 20 1222 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1227 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1241 1\.; -#X text 245 1241 output left.; -#X text 110 1261 2\.; -#X text 245 1261 output right.; +#X text 110 1228 1\.; +#X text 245 1228 output left.; +#X text 110 1248 2\.; +#X text 245 1248 output right.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1311 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1314 library: ceammc v0.9.4; -#N canvas 10 1333 400 290 info 0; +#X obj 1 1298 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1301 library: ceammc v0.9.6; +#N canvas 10 1320 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.freeverb2~; #X text 10 76 category:; @@ -122,7 +122,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1333 pd info; +#X restore 10 1320 pd info; #X connect 6 0 7 0; #X connect 7 0 11 0; #X connect 8 0 12 0; diff --git a/ceammc/ext/doc/fx.freeverb2~.pddoc b/ceammc/ext/doc/fx.freeverb2~.pddoc index ccff660846..b0cef48274 100644 --- a/ceammc/ext/doc/fx.freeverb2~.pddoc +++ b/ceammc/ext/doc/fx.freeverb2~.pddoc @@ -37,12 +37,10 @@ signal, 1 - wet spatial spread between 0 and 1 with 1 for maximum spread - if set to 1 - bypass - 'effected' signal - on/off dsp - processing - freeze reverberation - tail + if set to 1 - bypass 'effected' + signal + on/off dsp processing + freeze reverberation tail freeze room size diff --git a/ceammc/ext/doc/fx.freeverb~-help.pd b/ceammc/ext/doc/fx.freeverb~-help.pd index 2340b1fed0..78fa1eb7da 100644 --- a/ceammc/ext/doc/fx.freeverb~-help.pd +++ b/ceammc/ext/doc/fx.freeverb~-help.pd @@ -44,63 +44,63 @@ and 'effected' (wet) signals. Type: float. Range: 0\...1; #X obj 20 593 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 628 @active; -#X text 245 628 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 670 @bypass; -#X text 245 670 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 712 @damp; -#X text 245 712 Get/Set damping of the lowpass comb filter. Type: float. +#X text 245 628 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 657 @bypass; +#X text 245 657 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 699 @damp; +#X text 245 699 Get/Set damping of the lowpass comb filter. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 754 @drywet; -#X text 245 754 Get/Set proportion of mix between the original (dry) +#X msg 110 741 @drywet; +#X text 245 741 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 0.33\. Range: 0\...1\.; -#X msg 110 811 @fr_damp; -#X text 245 811 Get/Set freeze room damp. Type: float. Default value: +#X msg 110 798 @fr_damp; +#X text 245 798 Get/Set freeze room damp. Type: float. Default value: 0.0001\. Range: 0\...1\.; -#X msg 110 853 @fr_room; -#X text 245 853 Get/Set freeze room size. Type: float. Default value: +#X msg 110 840 @fr_room; +#X text 245 840 Get/Set freeze room size. Type: float. Default value: 0.999\. Range: 0\...1\.; -#X msg 110 895 @fr_time; -#X text 245 895 Get/Set length of freeze tail. Type: float. Units: +#X msg 110 882 @fr_time; +#X text 245 882 Get/Set length of freeze tail. Type: float. Units: ms. Default value: 100\. Range: 0\...1000\.; -#X msg 110 937 @freeze; -#X text 245 937 Get/Set freeze reverberation tail. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 979 @room; -#X text 245 979 Get/Set room size. Type: float. Default value: 0.5\. +#X msg 110 924 @freeze; +#X text 245 924 Get/Set freeze reverberation tail. Type: bool. Default +value: 0\.; +#X msg 110 966 @room; +#X text 245 966 Get/Set room size. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 1031 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1036 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1018 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1023 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1071 reset; -#X text 245 1071 reset reverb.; -#X obj 20 1108 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1113 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1058 reset; +#X text 245 1058 reset reverb.; +#X obj 20 1095 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1100 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1114 1\.; -#X text 245 1114 input signal.; -#X obj 20 1144 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1149 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1101 1\.; +#X text 245 1101 input signal.; +#X obj 20 1131 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1136 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1150 1\.; -#X text 245 1150 output signal.; +#X text 110 1137 1\.; +#X text 245 1137 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1200 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1203 library: ceammc v0.9.4; -#X text 571 1215 see also:; -#X obj 645 1215 fx.freeverb2~; -#N canvas 10 1222 400 290 info 0; +#X obj 1 1187 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1190 library: ceammc v0.9.6; +#X text 571 1202 see also:; +#X obj 645 1202 fx.freeverb2~; +#N canvas 10 1209 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.freeverb~; #X text 10 76 category:; @@ -119,7 +119,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1222 pd info; +#X restore 10 1209 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 14 0; diff --git a/ceammc/ext/doc/fx.freeverb~.pddoc b/ceammc/ext/doc/fx.freeverb~.pddoc index 848755776a..82007a230a 100644 --- a/ceammc/ext/doc/fx.freeverb~.pddoc +++ b/ceammc/ext/doc/fx.freeverb~.pddoc @@ -38,12 +38,10 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing - freeze reverberation - tail + if set to 1 - bypass 'effected' + signal + on/off dsp processing + freeze reverberation tail freeze room size diff --git a/ceammc/ext/doc/fx.freqshift~-help.pd b/ceammc/ext/doc/fx.freqshift~-help.pd index 40c7e2e327..c38ae52955 100644 --- a/ceammc/ext/doc/fx.freqshift~-help.pd +++ b/ceammc/ext/doc/fx.freqshift~-help.pd @@ -18,35 +18,35 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 424 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 438 1\.; -#X text 245 438 input signal.; -#X text 110 458 2\.; -#X text 245 458 frequency shift in Hertz. Range: -10000\...10000\.; -#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 493 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 425 1\.; +#X text 245 425 input signal.; +#X text 110 445 2\.; +#X text 245 445 frequency shift in Hertz. Range: -10000\...10000\.; +#X obj 20 475 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 480 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 494 1\.; -#X text 245 494 output signal (freq + shift).; -#X text 110 514 2\.; -#X text 245 514 output signal (freq - shift).; +#X text 110 481 1\.; +#X text 245 481 output signal (freq + shift).; +#X text 110 501 2\.; +#X text 245 501 output signal (freq - shift).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 564 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 567 library: ceammc v0.9.4; -#N canvas 10 586 400 290 info 0; +#X obj 1 551 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 554 library: ceammc v0.9.6; +#N canvas 10 573 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.freqshift~; #X text 10 76 category:; @@ -65,7 +65,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 586 pd info; +#X restore 10 573 pd info; #X connect 4 0 5 0; #X connect 6 0 8 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/fx.freqshift~.pddoc b/ceammc/ext/doc/fx.freqshift~.pddoc index c7695bd14d..e7b07cb93e 100644 --- a/ceammc/ext/doc/fx.freqshift~.pddoc +++ b/ceammc/ext/doc/fx.freqshift~.pddoc @@ -15,8 +15,7 @@ 0.1 - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/fx.granulator~-help.pd b/ceammc/ext/doc/fx.granulator~-help.pd index 9919a3c2b3..a1b9bd6a0b 100644 --- a/ceammc/ext/doc/fx.granulator~-help.pd +++ b/ceammc/ext/doc/fx.granulator~-help.pd @@ -22,47 +22,47 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 422 @delay; -#X text 245 422 Get/Set grain total area length. Type: float. Units: +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 409 @delay; +#X text 245 409 Get/Set grain total area length. Type: float. Units: sec. Default value: 10\. Range: 0.5\...10\.; -#X msg 110 464 @density; -#X text 245 464 Get/Set number of grains. Type: int. Default value: +#X msg 110 451 @density; +#X text 245 451 Get/Set number of grains. Type: int. Default value: 10\. Range: 1\...64\.; -#X msg 110 506 @length; -#X text 245 506 Get/Set grain length. Type: float. Units: ms. Default +#X msg 110 493 @length; +#X text 245 493 Get/Set grain length. Type: float. Units: ms. Default value: 100\. Range: 10\...500\.; -#X obj 20 558 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 563 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 545 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 550 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 598 reset; -#X text 245 598 reset object state.; -#X obj 20 635 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 640 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 585 reset; +#X text 245 585 reset object state.; +#X obj 20 622 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 627 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 641 1\.; -#X text 245 641 left channel.; -#X obj 20 671 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 676 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 628 1\.; +#X text 245 628 left channel.; +#X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 663 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 677 1\.; -#X text 245 677 output.; -#X text 110 697 2\.; -#X text 245 697 output.; +#X text 110 664 1\.; +#X text 245 664 output.; +#X text 110 684 2\.; +#X text 245 684 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 747 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 750 library: ceammc v0.9.4; -#N canvas 10 769 400 290 info 0; +#X obj 1 734 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 737 library: ceammc v0.9.6; +#N canvas 10 756 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.granulator~; #X text 10 76 category:; @@ -81,7 +81,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 769 pd info; +#X restore 10 756 pd info; #X connect 4 0 5 0; #X connect 5 0 9 0; #X connect 6 0 10 0; diff --git a/ceammc/ext/doc/fx.granulator~.pddoc b/ceammc/ext/doc/fx.granulator~.pddoc index ed5af8adb7..36f0a752d1 100644 --- a/ceammc/ext/doc/fx.granulator~.pddoc +++ b/ceammc/ext/doc/fx.granulator~.pddoc @@ -24,8 +24,7 @@ units="millisecond">grain length grain total area length - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/fx.greyhole~-help.pd b/ceammc/ext/doc/fx.greyhole~-help.pd index b66a94ad23..c26990a086 100644 --- a/ceammc/ext/doc/fx.greyhole~-help.pd +++ b/ceammc/ext/doc/fx.greyhole~-help.pd @@ -24,77 +24,77 @@ Excels at producing spacey washes of sound.; #X obj 20 455 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 490 @active; -#X text 245 490 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 532 @bypass; -#X text 245 532 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 574 @damping; -#X text 245 574 Get/Set controls damping of high-frequencies as the +#X text 245 490 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 519 @bypass; +#X text 245 519 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 561 @damping; +#X text 245 561 Get/Set controls damping of high-frequencies as the delay decays. 0 is no damping \, 1 is very strong damping. Type: float. Default value: 0\. Range: 0\...0.99\.; -#X msg 110 631 @delaytime; -#X text 245 631 Get/Set approximate delay time in seconds. Type: float. +#X msg 110 618 @delaytime; +#X text 245 618 Get/Set approximate delay time in seconds. Type: float. Units: sec. Default value: 0.2\. Range: 0.001\...1.45\.; -#X msg 110 673 @diffusion; -#X text 245 673 Get/Set shape of the diffusion unit. Values greater +#X msg 110 660 @diffusion; +#X text 245 660 Get/Set shape of the diffusion unit. Values greater than 0.707 produce smooth exponential decay. Lower values produce a slower build-up of echoes. Type: float. Default value: 0.5\. Range: 0\...0.99\.; -#X msg 110 745 @drywet; -#X text 245 745 Get/Set proportion of mix between the original (dry) +#X msg 110 732 @drywet; +#X text 245 732 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 802 @feedback; -#X text 245 802 Get/Set amount of feedback for the delay line. Type: +#X msg 110 789 @feedback; +#X text 245 789 Get/Set amount of feedback for the delay line. Type: float. Default value: 0.9\. Range: 0\...1\.; -#X msg 110 844 @moddepth; -#X text 245 844 Get/Set depth of delay-line modulation. Use in combination +#X msg 110 831 @moddepth; +#X text 245 831 Get/Set depth of delay-line modulation. Use in combination with *@modfreq* to set amount of chorusing within the structure. Type: float. Default value: 0.1\. Range: 0\...1\.; -#X msg 110 901 @modfreq; -#X text 245 901 Get/Set frequency of delay-line modulation. Use in +#X msg 110 888 @modfreq; +#X text 245 888 Get/Set frequency of delay-line modulation. Use in combination with *@moddepth* to set amount of chorusing within the structure. Type: float. Default value: 2\. Range: 0\...10\.; -#X msg 110 973 @size; -#X text 245 973 Get/Set size of delay-lines within the diffusion unit +#X msg 110 960 @size; +#X text 245 960 Get/Set size of delay-lines within the diffusion unit \, producing the impression of a larger or smaller space. Values below 1 can sound quite metallic. Type: float. Default value: 1\. Range: 0.5\...3\.; -#X obj 20 1055 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1060 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1042 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1047 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1095 reset; -#X text 245 1095 reset to initial state.; -#X obj 20 1132 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1137 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1082 reset; +#X text 245 1082 reset to initial state.; +#X obj 20 1119 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1124 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1138 1\.; -#X text 245 1138 left channel.; -#X text 110 1158 2\.; -#X text 245 1158 right channel.; -#X obj 20 1188 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1193 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1125 1\.; +#X text 245 1125 left channel.; +#X text 110 1145 2\.; +#X text 245 1145 right channel.; +#X obj 20 1175 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1180 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1194 1\.; -#X text 245 1194 output signal.; -#X text 110 1214 2\.; -#X text 245 1214 output signal.; +#X text 110 1181 1\.; +#X text 245 1181 output signal.; +#X text 110 1201 2\.; +#X text 245 1201 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1264 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1267 library: ceammc v0.9.4; -#X text 571 1279 see also:; -#X obj 645 1279 fx.freeverb2~; -#N canvas 10 1286 400 290 info 0; +#X obj 1 1251 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1254 library: ceammc v0.9.6; +#X text 571 1266 see also:; +#X obj 645 1266 fx.freeverb2~; +#N canvas 10 1273 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.greyhole~; #X text 10 76 category:; @@ -113,7 +113,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1286 pd info; +#X restore 10 1273 pd info; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 9 0 10 0; diff --git a/ceammc/ext/doc/fx.greyhole~.pddoc b/ceammc/ext/doc/fx.greyhole~.pddoc index af2a35fa40..daa2b7e91a 100644 --- a/ceammc/ext/doc/fx.greyhole~.pddoc +++ b/ceammc/ext/doc/fx.greyhole~.pddoc @@ -51,10 +51,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.infrev~-help.pd b/ceammc/ext/doc/fx.infrev~-help.pd index cf5a74d334..bad1566309 100644 --- a/ceammc/ext/doc/fx.infrev~-help.pd +++ b/ceammc/ext/doc/fx.infrev~-help.pd @@ -43,7 +43,7 @@ and 'effected' (wet) signals. Type: float. Range: 0\...1; -49933 0; #X msg 110 548 @bypass; #X text 245 548 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 590 @damp; #X text 245 590 Get/Set damping of the lowpass comb filter. Type: float. Default value: 0\. Range: 0\...1\.; @@ -82,7 +82,7 @@ Range: 0\...1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 992 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 995 library: ceammc v0.9.4; +#X text 10 995 library: ceammc v0.9.6; #X text 469 1007 see also:; #X obj 543 1007 fx.freeverb~; #X obj 645 1007 fx.zita_rev1~; @@ -91,7 +91,7 @@ Range: 0\...1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.infrev~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/fx.infrev~.pddoc b/ceammc/ext/doc/fx.infrev~.pddoc index 86207ef00d..d1b88d1519 100644 --- a/ceammc/ext/doc/fx.infrev~.pddoc +++ b/ceammc/ext/doc/fx.infrev~.pddoc @@ -40,8 +40,8 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal + if set to 1 - bypass 'effected' + signal diff --git a/ceammc/ext/doc/fx.jcrev~-help.pd b/ceammc/ext/doc/fx.jcrev~-help.pd new file mode 100644 index 0000000000..b6d5ef396f --- /dev/null +++ b/ceammc/ext/doc/fx.jcrev~-help.pd @@ -0,0 +1,120 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 476 50 cnv 1 289 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 476 50 Schroeder quad reverberator from 1972; +#X obj 1 1 cnv 5 765 40 empty empty fx.jcrev~ 20 20 0 20 -104026 -4096 +0; +#X obj 674 11 fx.jcrev~; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 232 118 ui.dsp~; +#X obj 50 147 metro 250; +#X obj 50 176 random.a 68 26 84; +#X obj 50 205 makenote 127 200; +#X obj 232 205 ui.k; +#X obj 50 234 pack f f; +#X obj 366 234 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 262 synth.dubdub~; +#X msg 232 262 @drywet \$1; +#X msg 366 262 @bypass \$1; +#X obj 50 291 fx.jcrev~; +#X obj 232 320 ui.hsl -60 0 @show_value 1; +#X obj 232 349 dbfs->amp; +#X obj 50 378 gain~ 4, f 20; +#X obj 50 406 dac~ 1 2 3 4, f 20; +#X obj 20 455 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 460 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 495 1\.; +#X text 150 495 float; +#X obj 246 496 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 495 DRYWET: drywet mix. Type: float. Range: 0\...1; +#X obj 20 525 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 530 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 565 @active; +#X text 245 565 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 594 @bypass; +#X text 245 594 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 636 @drywet; +#X text 245 636 Get/Set proportion of mix between the original (dry) +and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. +Default value: 0.4\. Range: 0\...1\.; +#X obj 20 703 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 708 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 743 reset; +#X text 245 743 reset to initial state.; +#X obj 20 780 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 785 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 786 1\.; +#X text 245 786 input signal.; +#X text 110 806 2\.; +#X text 150 806 *float*; +#X text 245 806 set drywet.; +#X obj 20 836 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 841 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 842 1\.; +#X text 245 842 first output signal.; +#X text 110 862 2\.; +#X text 245 862 second output signal.; +#X text 110 882 3\.; +#X text 245 882 third output signal.; +#X text 110 902 4\.; +#X text 245 902 fourth output signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; +#X obj 1 952 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 955 library: ceammc v0.9.6; +#N canvas 10 974 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 fx.jcrev~; +#X text 10 76 category:; +#X text 120 76 fx; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 fx \, room \, reverb \, schroeder; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 974 pd info; +#X connect 4 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 8 1 10 1; +#X connect 10 0 12 0; +#X connect 9 0 13 0; +#X connect 11 0 14 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 14 0 15 0; +#X connect 16 0 17 0; +#X connect 15 0 18 0; +#X connect 15 1 18 1; +#X connect 15 2 18 2; +#X connect 15 3 18 3; +#X connect 18 0 19 0; +#X connect 18 1 19 1; +#X connect 18 2 19 2; +#X connect 18 3 19 3; +#X connect 17 0 18 4; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.jcrev~.pddoc b/ceammc/ext/doc/fx.jcrev~.pddoc new file mode 100644 index 0000000000..f88d35001d --- /dev/null +++ b/ceammc/ext/doc/fx.jcrev~.pddoc @@ -0,0 +1,73 @@ + + + + fx.jcrev~ + + + Serge Poltavsky + + Schroeder quad reverberator from 1972 + GPL3 or later + ceammc + fx + fx room reverb schroeder + 0.9.6 + + + reset to initial state + + + drywet mix + + + + proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry + signal, 1 - wet + if set to 1 - bypass 'effected' + signal + on/off dsp processing + + + + input signal + + + set drywet + + + + first output signal + second output signal + third output signal + fourth output signal + + + +amp #a] +*|* +[gain~ 4 {i=5,o=4,w=20} #x] +*|* +[dac~ 1 2 3 4 {w=20}] +[X a->x:4] +]]> + + + + diff --git a/ceammc/ext/doc/fx.looper~-help.pd b/ceammc/ext/doc/fx.looper~-help.pd index eb997552ef..7b56783a5a 100644 --- a/ceammc/ext/doc/fx.looper~-help.pd +++ b/ceammc/ext/doc/fx.looper~-help.pd @@ -22,8 +22,8 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 124 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 MAX_LENGTH(sec): max loop time. Type: float.; +#X obj 246 352 cnv 1 108 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 CAPACITY(sec): max loop time. Type: float. Range: 0\...120; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -43,8 +43,8 @@ to stop. Type: float. Units: ms. Default value: 20\. Min value: 0\.; #X text 245 604 (readonly) Get recorded loop length. Type: float. Units: sec. Default value: 0\. Min value: 0\.; #X msg 110 646 @loop_bang; -#X text 245 646 Get/Set output bang on each loop start. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; +#X text 245 646 Get/Set output bang on each loop start. Type: bool. +Default value: 1\.; #X msg 110 688 @loop_smooth; #X text 245 688 Get/Set time of lin fadein/fadeout applied to recorded loop for smooth playing. Type: float. Units: ms. Default value: 10\. @@ -121,13 +121,13 @@ true.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1598 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1601 library: ceammc v0.9.4; +#X text 10 1601 library: ceammc v0.9.6; #N canvas 10 1620 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.looper~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/fx.looper~.pddoc b/ceammc/ext/doc/fx.looper~.pddoc index 6632b1aa1f..d11e8374c5 100644 --- a/ceammc/ext/doc/fx.looper~.pddoc +++ b/ceammc/ext/doc/fx.looper~.pddoc @@ -14,22 +14,23 @@ 0.5 - max loop time + max + loop time max loop time recorded loop length + access="readonly">recorded loop length use specified array for record instead of internal buffer current playing position + access="readonly">current playing position current playing phase position + access="readonly">current playing phase position current state - output bang on each loop + access="readonly" default="init">current state + output bang on each loop start time of lin fadein/fadeout applied to recorded loop for smooth diff --git a/ceammc/ext/doc/fx.pitchshift_s~-help.pd b/ceammc/ext/doc/fx.pitchshift_s~-help.pd index ed3986a8ab..d5260a3cad 100644 --- a/ceammc/ext/doc/fx.pitchshift_s~-help.pd +++ b/ceammc/ext/doc/fx.pitchshift_s~-help.pd @@ -20,51 +20,51 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 422 @bypass; -#X text 245 422 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 464 @drywet; -#X text 245 464 Get/Set proportion of mix between the original (dry) +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 409 @bypass; +#X text 245 409 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 451 @drywet; +#X text 245 451 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 521 @fade; -#X text 245 521 Get/Set crossfade duration. Type: float. Units: ms. +#X msg 110 508 @fade; +#X text 245 508 Get/Set crossfade duration. Type: float. Units: ms. Default value: 100\. Range: 0\...1000\.; -#X msg 110 563 @window; -#X text 245 563 Get/Set the window size. Type: float. Units: ms. Default +#X msg 110 550 @window; +#X text 245 550 Get/Set the window size. Type: float. Units: ms. Default value: 200\. Range: 10\...2000\.; -#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 620 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 602 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 607 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 655 reset; -#X text 245 655 reset object state.; -#X obj 20 692 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 697 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 642 reset; +#X text 245 642 reset object state.; +#X obj 20 679 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 684 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 698 1\.; -#X text 245 698 input signal.; -#X text 110 718 2\.; -#X text 245 718 pitch shift in semitones.; -#X obj 20 748 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 753 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 685 1\.; +#X text 245 685 input signal.; +#X text 110 705 2\.; +#X text 245 705 pitch shift in semitones.; +#X obj 20 735 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 740 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 754 1\.; -#X text 245 754 output signal.; +#X text 110 741 1\.; +#X text 245 741 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 804 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 807 library: ceammc v0.9.4; -#N canvas 10 826 400 290 info 0; +#X obj 1 791 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 794 library: ceammc v0.9.6; +#N canvas 10 813 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.pitchshift_s~; #X text 10 76 category:; @@ -83,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 826 pd info; +#X restore 10 813 pd info; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 9 0; diff --git a/ceammc/ext/doc/fx.pitchshift_s~.pddoc b/ceammc/ext/doc/fx.pitchshift_s~.pddoc index 512802ae51..66131f005d 100644 --- a/ceammc/ext/doc/fx.pitchshift_s~.pddoc +++ b/ceammc/ext/doc/fx.pitchshift_s~.pddoc @@ -25,10 +25,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.pitchshift~-help.pd b/ceammc/ext/doc/fx.pitchshift~-help.pd index b858d20274..f0fe4e3dae 100644 --- a/ceammc/ext/doc/fx.pitchshift~-help.pd +++ b/ceammc/ext/doc/fx.pitchshift~-help.pd @@ -33,55 +33,55 @@ #X obj 20 473 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 508 @active; -#X text 245 508 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 550 @bypass; -#X text 245 550 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 592 @drywet; -#X text 245 592 Get/Set proportion of mix between the original (dry) +#X text 245 508 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 537 @bypass; +#X text 245 537 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 579 @drywet; +#X text 245 579 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 649 @fade; -#X text 245 649 Get/Set crossfade duration. Type: float. Units: ms. +#X msg 110 636 @fade; +#X text 245 636 Get/Set crossfade duration. Type: float. Units: ms. Default value: 100\. Range: 0\...1000\.; -#X msg 110 691 @pitch; -#X text 245 691 Get/Set pitchshift in semitones. Type: float. Default +#X msg 110 678 @pitch; +#X text 245 678 Get/Set pitchshift in semitones. Type: float. Default value: 0\. Range: -38\...60\.; -#X msg 110 733 @window; -#X text 245 733 Get/Set the window size. Type: float. Units: ms. Default +#X msg 110 720 @window; +#X text 245 720 Get/Set the window size. Type: float. Units: ms. Default value: 200\. Range: 10\...2000\.; -#X obj 20 785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 790 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 772 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 777 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 825 reset; -#X text 245 825 reset object state.; -#X obj 20 862 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 867 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 812 reset; +#X text 245 812 reset object state.; +#X obj 20 849 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 854 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 868 1\.; -#X text 245 868 input signal.; -#X text 110 888 2\.; -#X text 150 888 *float*; -#X text 245 888 pitch shift in semitones. Range: -38\...60\.; -#X obj 20 918 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 923 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 855 1\.; +#X text 245 855 input signal.; +#X text 110 875 2\.; +#X text 150 875 *float*; +#X text 245 875 pitch shift in semitones. Range: -38\...60\.; +#X obj 20 905 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 910 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 924 1\.; -#X text 245 924 output signal.; +#X text 110 911 1\.; +#X text 245 911 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 974 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 977 library: ceammc v0.9.4; -#N canvas 10 996 400 290 info 0; +#X obj 1 961 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 964 library: ceammc v0.9.6; +#N canvas 10 983 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.pitchshift~; #X text 10 76 category:; @@ -100,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 996 pd info; +#X restore 10 983 pd info; #X connect 4 0 5 0; #X connect 5 0 9 0; #X connect 6 0 10 0; diff --git a/ceammc/ext/doc/fx.pitchshift~.pddoc b/ceammc/ext/doc/fx.pitchshift~.pddoc index a0f5cc0f01..64cc26536f 100644 --- a/ceammc/ext/doc/fx.pitchshift~.pddoc +++ b/ceammc/ext/doc/fx.pitchshift~.pddoc @@ -31,10 +31,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.rb_pitchshift~-help.pd b/ceammc/ext/doc/fx.rb_pitchshift~-help.pd index 110e03535f..63a48c6f2d 100644 --- a/ceammc/ext/doc/fx.rb_pitchshift~-help.pd +++ b/ceammc/ext/doc/fx.rb_pitchshift~-help.pd @@ -22,41 +22,42 @@ -49933 0; #X text 110 409 1\.; #X text 150 409 float; -#X obj 246 410 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 PITCH: transposition in semitones. Type: float.; -#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 410 cnv 1 154 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 TRANSPOSE(semitone): transposition in semitones. Type: +float. Range: -24\...24; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 479 @detector; -#X text 245 479 Get/Set control the type of transient detector used. +#X msg 110 494 @detector; +#X text 245 494 Get/Set control the type of transient detector used. 'compound' a general-purpose transient detector which is likely to be good for most situations. 'precussive' detect percussive transients. 'piano' use an onset detector with less of a bias toward percussive transients. This may give better results with certain material (e.g. relatively monophonic piano music). Type: symbol. Default value: compound. Allowed values: compound \, percussive \, soft.; -#X msg 110 611 @formant; -#X text 245 611 Get/Set control the handling of formant shape (spectral +#X msg 110 626 @formant; +#X text 245 626 Get/Set control the handling of formant shape (spectral envelope) when pitch-shifting. If 'true' preserve the spectral envelope of the unshifted signal. This permits shifting the note frequency without so substantially affecting the perceived pitch profile of the voice or instrument. 'False' apply no special formant processing. The spectral -envelope will be pitch shifted as normal. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 743 @latency; -#X text 245 743 (readonly) Get object latency. Type: float. Units: +envelope will be pitch shifted as normal. Type: bool. Default value: +0\.; +#X msg 110 758 @latency; +#X text 245 758 (readonly) Get object latency. Type: float. Units: samp. Default value: 1024\.; -#X msg 110 785 @phase; -#X text 245 785 Get/Set control the adjustment of component frequency +#X msg 110 800 @phase; +#X text 245 800 Get/Set control the adjustment of component frequency phases from one analysis window to the next during non-transient segments. 'False' adjust the phase in each frequency bin independently from its neighbours. This usually results in a slightly softer \, phasier sound. 'True' adjust phases when stretching in such a way as to try to retain the continuity of phase relationships between adjacent frequency bins -whose phases are behaving in similar ways. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 932 @quality; -#X text 245 932 Get/Set method used for pitch shifting. 'speed' may +whose phases are behaving in similar ways. Type: bool. Default value: +1\.; +#X msg 110 947 @quality; +#X text 245 947 Get/Set method used for pitch shifting. 'speed' may sound less clear than 'quality' \, especially for large pitch shifts. 'quality' method has a CPU cost approximately proportional to the required frequency shift. 'consistency' gives greatest consistency when used @@ -66,15 +67,15 @@ across the 1.0 pitch scale in real-time; it also consumes more CPU than the others in the case where the pitch scale is exactly 1.0\. Type: symbol. Default value: speed. Allowed values: speed \, quality \, consistency.; -#X msg 110 1125 @scale; -#X text 245 1125 Get/Set transposition as ratio. Type: float. Default +#X msg 110 1140 @scale; +#X text 245 1140 Get/Set transposition as ratio. Type: float. Default value: 1\. Range: 0.25\...4\.; -#X msg 110 1167 @smooth; -#X text 245 1167 Get/Set control the use of window-presum FFT and time-domain +#X msg 110 1182 @smooth; +#X text 245 1182 Get/Set control the use of window-presum FFT and time-domain smoothing. If true result in a softer sound with some audible artifacts around sharp transients \, but it may be appropriate for longer stretches -of some instruments and can mix well with @window short. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +of some instruments and can mix well with @window short. Type: bool. +Default value: 0\.; #X msg 110 1269 @trans; #X text 245 1269 Get/Set control the component frequency phase-reset mechanism that may be used at transient points to provide clarity and @@ -121,13 +122,13 @@ standard. Allowed values: standard \, short \, long.; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; #X obj 1 1863 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1866 library: ceammc v0.9.4; +#X text 10 1866 library: ceammc v0.9.6; #N canvas 10 1885 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.rb_pitchshift~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/fx.rb_pitchshift~.pddoc b/ceammc/ext/doc/fx.rb_pitchshift~.pddoc index 00d2379cdb..4b6f9cbeed 100644 --- a/ceammc/ext/doc/fx.rb_pitchshift~.pddoc +++ b/ceammc/ext/doc/fx.rb_pitchshift~.pddoc @@ -14,7 +14,8 @@ 0.9.4 - transposition in semitones + + transposition in semitones @@ -32,26 +33,25 @@ where the pitch scale is exactly 1.0. transposition in semitones - control the adjustment of - component frequency phases from one analysis window to the next during non-transient - segments. 'False' adjust the phase in each frequency bin independently from its - neighbours. This usually results in a slightly softer, phasier sound. 'True' adjust - phases when stretching in such a way as to try to retain the continuity of phase - relationships between adjacent frequency bins whose phases are behaving in similar - ways - control the use of - window-presum FFT and time-domain smoothing. If true result in a softer sound with some - audible artifacts around sharp transients, but it may be appropriate for longer - stretches of some instruments and can mix well with @window short + control the adjustment of component + frequency phases from one analysis window to the next during non-transient segments. + 'False' adjust the phase in each frequency bin independently from its neighbours. This + usually results in a slightly softer, phasier sound. 'True' adjust phases when + stretching in such a way as to try to retain the continuity of phase relationships + between adjacent frequency bins whose phases are behaving in similar ways + control the use of window-presum FFT + and time-domain smoothing. If true result in a softer sound with some audible artifacts + around sharp transients, but it may be appropriate for longer stretches of some + instruments and can mix well with @window short transposition as ratio - control the handling of - formant shape (spectral envelope) when pitch-shifting. If 'true' preserve the spectral - envelope of the unshifted signal. This permits shifting the note frequency without so - substantially affecting the perceived pitch profile of the voice or instrument. 'False' - apply no special formant processing. The spectral envelope will be pitch shifted as + control the handling of formant shape + (spectral envelope) when pitch-shifting. If 'true' preserve the spectral envelope of + the unshifted signal. This permits shifting the note frequency without so substantially + affecting the perceived pitch profile of the voice or instrument. 'False' apply no + special formant processing. The spectral envelope will be pitch shifted as normal. - + object latency control the component frequency phase-reset mechanism that may be used at transient points to diff --git a/ceammc/ext/doc/fx.recho~-help.pd b/ceammc/ext/doc/fx.recho~-help.pd index 4bfad3de64..172ec75748 100644 --- a/ceammc/ext/doc/fx.recho~-help.pd +++ b/ceammc/ext/doc/fx.recho~-help.pd @@ -17,62 +17,62 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 time(ms): echo time. Type: float. Range: 0\...2000; +#X obj 246 352 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 DELAY(ms): echo time. Type: float. Range: 0\...2000; #X text 110 371 2\.; #X text 150 371 float; #X obj 246 372 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 feedback: feedback coefficient. Type: float. Range: +#X text 245 371 FEEDBACK: feedback coefficient. Type: float. Range: 0\...0.99; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @bypass; -#X text 245 483 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 525 @delay; -#X text 245 525 Get/Set echo time. Type: float. Units: ms. Default +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @bypass; +#X text 245 470 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 512 @delay; +#X text 245 512 Get/Set echo time. Type: float. Units: ms. Default value: 500\. Range: 0\...2000\.; -#X msg 110 567 @drywet; -#X text 245 567 Get/Set proportion of mix between the original (dry) +#X msg 110 554 @drywet; +#X text 245 554 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 624 @feedback; -#X text 245 624 Get/Set feedback coefficient. Type: float. Default +#X msg 110 611 @feedback; +#X text 245 611 Get/Set feedback coefficient. Type: float. Default value: 0.3\. Range: 0\...0.99\.; -#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 681 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 668 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 716 reset; -#X text 245 716 reset to initial state.; -#X obj 20 753 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 758 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 703 reset; +#X text 245 703 reset to initial state.; +#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 745 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 759 1\.; -#X text 245 759 input signal.; -#X obj 20 789 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 794 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 746 1\.; +#X text 245 746 input signal.; +#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 781 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 795 1\.; -#X text 245 795 output signal.; +#X text 110 782 1\.; +#X text 245 782 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 845 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 848 library: ceammc v0.9.4; -#X text 607 860 see also:; -#X obj 681 860 fx.echo~; -#N canvas 10 867 400 290 info 0; +#X obj 1 832 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 835 library: ceammc v0.9.6; +#X text 607 847 see also:; +#X obj 681 847 fx.echo~; +#N canvas 10 854 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.recho~; #X text 10 76 category:; @@ -91,7 +91,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 867 pd info; +#X restore 10 854 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/fx.recho~.pddoc b/ceammc/ext/doc/fx.recho~.pddoc index 27b7c5904b..ad5856dc7e 100644 --- a/ceammc/ext/doc/fx.recho~.pddoc +++ b/ceammc/ext/doc/fx.recho~.pddoc @@ -17,9 +17,9 @@ - + echo time - feedback + feedback coefficient @@ -33,10 +33,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing diff --git a/ceammc/ext/doc/fx.room~-help.pd b/ceammc/ext/doc/fx.room~-help.pd index 749c32511c..a0f8c4d4f5 100644 --- a/ceammc/ext/doc/fx.room~-help.pd +++ b/ceammc/ext/doc/fx.room~-help.pd @@ -6,82 +6,89 @@ 0; #X obj 681 11 fx.room~; #X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 147 metro 250; +#X obj 50 147 metro 1000; #X msg 50 176 60; #X obj 50 205 makenote 127 100; +#X obj 232 205 ui.hsl 0 3 @show_value 1; #X obj 50 234 pack f f; -#X obj 222 234 ui.hsl 0 3 @show_value 1; +#X obj 232 234 ui.hrd 4; +#X obj 366 234 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 50 262 synth.eguitar~; -#X msg 222 262 @size \$1; +#X msg 232 262 @size \$1; +#X msg 366 262 @bypass \$1; #X obj 50 291 fx.room~; #X obj 50 320 ui.hgain~; -#X obj 203 320 ui.dsp~; +#X obj 232 320 ui.dsp~; #X obj 50 349 dac~; #X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 438 1\.; #X text 150 438 float; -#X obj 246 439 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 438 size(ms): echo time. Type: float. Range: 0\...2000; +#X obj 246 439 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 SIZE: echo time. Type: float. Range: 0\...3; #X text 110 458 2\.; #X text 150 458 float; -#X obj 246 459 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 458 diffusion: feedback coefficient. Type: float. Range: -0\...0.99; -#X obj 20 503 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 508 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 459 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 458 FB: feedback coefficient. Type: float. Range: 0\...1; +#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 493 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 543 @active; -#X text 245 543 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 585 @bypass; -#X text 245 585 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 627 @drywet; -#X text 245 627 Get/Set proportion of mix between the original (dry) +#X msg 110 528 @active; +#X text 245 528 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 557 @bypass; +#X text 245 557 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 599 @drywet; +#X text 245 599 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 684 @fb; -#X text 245 684 Get/Set feedback coefficient. Type: float. Default +#X msg 110 656 @fb; +#X text 245 656 Get/Set feedback coefficient. Type: float. Default value: 0.3\. Range: 0\...1\.; -#X msg 110 726 @hfdamp; -#X text 245 726 Get/Set damping factor for high frequencies. Type: +#X msg 110 698 @hfdamp; +#X text 245 698 Get/Set damping factor for high frequencies. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 768 @predelay; -#X text 245 768 Get/Set pre delay. Type: float. Units: ms. Default +#X msg 110 740 @predelay; +#X text 245 740 Get/Set pre delay. Type: float. Units: ms. Default value: 20\. Range: 1\...200\.; -#X msg 110 810 @size; -#X text 245 810 Get/Set room size (1: small \, 2: medium \, 3: large). -Type: float. Default value: 1\. Range: 0\...3\.; -#X obj 20 862 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 867 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 782 @size; +#X text 245 782 Get/Set room size (0: no room \, 1: small \, 2: medium +\, 3: large). Non-integer values are interpolated betweed neighbours +\, for example 1.3 is interpoltation between first and second room +size with 0.3 ratio. Type: float. Default value: 1\. Range: 0\...3\.; +#X obj 20 879 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 884 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 902 reset; -#X text 245 902 reset to initial state.; -#X obj 20 939 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 944 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 919 reset; +#X text 245 919 reset to initial state.; +#X obj 20 956 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 961 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 945 1\.; -#X text 245 945 input signal.; -#X obj 20 975 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 980 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 962 1\.; +#X text 245 962 input signal.; +#X text 110 982 2\.; +#X text 150 982 *float*; +#X text 245 982 set room size.; +#X obj 20 1012 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1017 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 981 1\.; -#X text 245 981 output signal.; +#X text 110 1018 1\.; +#X text 245 1018 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1031 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1034 library: ceammc v0.9.4; -#N canvas 10 1053 400 290 info 0; +#X obj 1 1068 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1071 library: ceammc v0.9.6; +#N canvas 10 1090 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.room~; #X text 10 76 category:; @@ -100,16 +107,19 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1053 pd info; +#X restore 10 1090 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; -#X connect 7 0 8 0; -#X connect 7 1 8 1; -#X connect 8 0 10 0; -#X connect 9 0 11 0; -#X connect 10 0 12 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; +#X connect 7 0 9 0; +#X connect 7 1 9 1; +#X connect 9 0 12 0; +#X connect 10 0 13 0; +#X connect 11 0 14 0; +#X connect 12 0 15 0; #X connect 13 0 15 0; -#X connect 13 0 15 1; \ No newline at end of file +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 18 0; +#X connect 16 0 18 1; +#X connect 8 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.room~.pddoc b/ceammc/ext/doc/fx.room~.pddoc index c2f698484b..7a10805bf0 100644 --- a/ceammc/ext/doc/fx.room~.pddoc +++ b/ceammc/ext/doc/fx.room~.pddoc @@ -14,9 +14,8 @@ 0.9.4 - - echo time - feedback + echo time + feedback coefficient @@ -29,20 +28,24 @@ coefficient damping factor for high frequencies - room size (1: - small, 2: medium, 3: large) + room size (0: + no room, 1: small, 2: medium, 3: large). Non-integer values are interpolated betweed + neighbours, for example 1.3 is interpoltation between first and second room size with + 0.3 ratio. proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing input signal + + set room size + output signal @@ -52,21 +55,22 @@ b] ]]> diff --git a/ceammc/ext/doc/fx.satrev~-help.pd b/ceammc/ext/doc/fx.satrev~-help.pd new file mode 100644 index 0000000000..dc37ae9c96 --- /dev/null +++ b/ceammc/ext/doc/fx.satrev~-help.pd @@ -0,0 +1,108 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 514 50 cnv 1 251 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 514 50 Schroeder reverberator from 1971; +#X obj 1 1 cnv 5 765 40 empty empty fx.satrev~ 20 20 0 20 -104026 +-4096 0; +#X obj 667 11 fx.satrev~; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 147 metro 250; +#X obj 50 176 random.a 68 26 84; +#X obj 50 205 makenote 127 200; +#X obj 232 205 ui.k; +#X obj 50 234 pack f f; +#X obj 366 234 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 262 synth.dubdub~; +#X msg 232 262 @drywet \$1; +#X msg 366 262 @bypass \$1; +#X obj 50 291 fx.satrev~; +#X obj 50 320 ui.hgain2~; +#X obj 232 320 ui.dsp~; +#X obj 50 349 dac~; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 438 1\.; +#X text 150 438 float; +#X obj 246 439 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 DRYWET: drywet mix. Type: float. Range: 0\...1; +#X obj 20 468 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 473 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 508 @active; +#X text 245 508 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 537 @bypass; +#X text 245 537 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 579 @drywet; +#X text 245 579 Get/Set proportion of mix between the original (dry) +and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. +Default value: 0.25\. Range: 0\...1\.; +#X obj 20 646 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 651 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 686 reset; +#X text 245 686 reset to initial state.; +#X obj 20 723 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 728 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 729 1\.; +#X text 245 729 input signal.; +#X text 110 749 2\.; +#X text 150 749 *float*; +#X text 245 749 set drywet.; +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 785 1\.; +#X text 245 785 left output signal.; +#X text 110 805 2\.; +#X text 245 805 right output signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; +#X obj 1 855 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 858 library: ceammc v0.9.6; +#N canvas 10 877 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 fx.satrev~; +#X text 10 76 category:; +#X text 120 76 fx; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 fx \, room \, reverb \, schroeder; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 877 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 7 1 9 1; +#X connect 9 0 11 0; +#X connect 8 0 12 0; +#X connect 10 0 13 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 14 1 15 1; +#X connect 15 0 17 0; +#X connect 15 1 17 1; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.satrev~.pddoc b/ceammc/ext/doc/fx.satrev~.pddoc new file mode 100644 index 0000000000..f5a5c69f2e --- /dev/null +++ b/ceammc/ext/doc/fx.satrev~.pddoc @@ -0,0 +1,66 @@ + + + + fx.satrev~ + + + Serge Poltavsky + + Schroeder reverberator from 1971 + GPL3 or later + ceammc + fx + fx room reverb schroeder + 0.9.6 + + + reset to initial state + + + drywet mix + + + + proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry + signal, 1 - wet + if set to 1 - bypass 'effected' + signal + on/off dsp processing + + + + input signal + + + set drywet + + + + left output signal + right output signal + + + + + + + + diff --git a/ceammc/ext/doc/fx.sdelay~-help.pd b/ceammc/ext/doc/fx.sdelay~-help.pd index 2209890065..c0ed68aa6c 100644 --- a/ceammc/ext/doc/fx.sdelay~-help.pd +++ b/ceammc/ext/doc/fx.sdelay~-help.pd @@ -24,66 +24,66 @@ the delay time is changed; #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 delay(ms): delay time. Type: float. Range: 10\...6000; +#X text 245 434 DELAY(ms): delay time. Type: float. Range: 0\...6000; #X text 110 454 2\.; #X text 150 454 float; #X obj 246 455 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 454 feedback: feedback coefficient. Type: float. Range: +#X text 245 454 FEEDBACK: feedback coefficient. Type: float. Range: 0\...1; #X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 524 @active; -#X text 245 524 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 566 @bypass; -#X text 245 566 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 608 @delay; -#X text 245 608 Get/Set echo time. Type: float. Units: ms. Default +#X text 245 524 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 553 @bypass; +#X text 245 553 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 595 @delay; +#X text 245 595 Get/Set echo time. Type: float. Units: ms. Default value: 1\. Range: 0\...6000\.; -#X msg 110 650 @drywet; -#X text 245 650 Get/Set proportion of mix between the original (dry) +#X msg 110 637 @drywet; +#X text 245 637 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 707 @feedback; -#X text 245 707 Get/Set feedback coefficient. Type: float. Default +#X msg 110 694 @feedback; +#X text 245 694 Get/Set feedback coefficient. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 749 @interpolation; -#X text 245 749 Get/Set interpolation time. Type: float. Units: ms. +#X msg 110 736 @interpolation; +#X text 245 736 Get/Set interpolation time. Type: float. Units: ms. Default value: 20\. Range: 1\...200\.; -#X obj 20 801 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 806 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 788 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 793 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 841 clear; -#X text 245 841 clears delay line.; -#X msg 110 868 reset; -#X text 245 868 same as reset.; -#X obj 20 905 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 910 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 828 clear; +#X text 245 828 clears delay line.; +#X msg 110 855 reset; +#X text 245 855 same as reset.; +#X obj 20 892 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 897 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 911 1\.; -#X text 245 911 input signal.; -#X obj 20 941 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 946 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 898 1\.; +#X text 245 898 input signal.; +#X obj 20 928 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 933 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 947 1\.; -#X text 245 947 output signal.; +#X text 110 934 1\.; +#X text 245 934 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 997 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1000 library: ceammc v0.9.4; -#X text 607 1012 see also:; -#X obj 681 1012 fx.echo~; -#N canvas 10 1019 400 290 info 0; +#X obj 1 984 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 987 library: ceammc v0.9.6; +#X text 607 999 see also:; +#X obj 681 999 fx.echo~; +#N canvas 10 1006 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.sdelay~; #X text 10 76 category:; @@ -102,7 +102,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1019 pd info; +#X restore 10 1006 pd info; #X connect 6 0 7 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/fx.sdelay~.pddoc b/ceammc/ext/doc/fx.sdelay~.pddoc index 809af0a601..936381206e 100644 --- a/ceammc/ext/doc/fx.sdelay~.pddoc +++ b/ceammc/ext/doc/fx.sdelay~.pddoc @@ -22,9 +22,9 @@ changed - + delay time - feedback + feedback coefficient @@ -37,10 +37,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing clears delay line diff --git a/ceammc/ext/doc/fx.secho~-help.pd b/ceammc/ext/doc/fx.secho~-help.pd index 946289fdbe..c2e93166e5 100644 --- a/ceammc/ext/doc/fx.secho~-help.pd +++ b/ceammc/ext/doc/fx.secho~-help.pd @@ -19,63 +19,63 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 time(ms): echo time. Type: float. Range: 10\...10000; +#X obj 246 352 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 DELAY(ms): echo time. Type: float. Range: 10\...10000; #X text 110 371 2\.; #X text 150 371 float; #X obj 246 372 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 feedback: feedback coefficient. Type: float. Range: -0\...0.8; +#X text 245 371 FEEDBACK: feedback coefficient. Type: float. Range: +0\...0.99; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @bypass; -#X text 245 483 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 525 @delay; -#X text 245 525 Get/Set echo time. Type: float. Units: ms. Default +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @bypass; +#X text 245 470 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 512 @delay; +#X text 245 512 Get/Set echo time. Type: float. Units: ms. Default value: 500\. Range: 10\...10000\.; -#X msg 110 567 @drywet; -#X text 245 567 Get/Set proportion of mix between the original (dry) +#X msg 110 554 @drywet; +#X text 245 554 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 624 @feedback; -#X text 245 624 Get/Set feedback coefficient. Type: float. Default +#X msg 110 611 @feedback; +#X text 245 611 Get/Set feedback coefficient. Type: float. Default value: 0.3\. Range: 0\...0.99\.; -#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 681 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 668 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 716 reset; -#X text 245 716 reset to initial state.; -#X obj 20 753 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 758 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 703 reset; +#X text 245 703 reset to initial state.; +#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 745 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 759 1\.; -#X text 245 759 input signal.; -#X obj 20 789 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 794 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 746 1\.; +#X text 245 746 input signal.; +#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 781 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 795 1\.; -#X text 245 795 output signal.; +#X text 110 782 1\.; +#X text 245 782 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 845 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 848 library: ceammc v0.9.4; -#X text 526 860 see also:; -#X obj 600 860 fx.echo~; -#X obj 674 860 fx.echo2~; -#N canvas 10 867 400 290 info 0; +#X obj 1 832 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 835 library: ceammc v0.9.6; +#X text 526 847 see also:; +#X obj 600 847 fx.echo~; +#X obj 674 847 fx.echo2~; +#N canvas 10 854 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.secho~; #X text 10 76 category:; @@ -94,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 867 pd info; +#X restore 10 854 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/fx.secho~.pddoc b/ceammc/ext/doc/fx.secho~.pddoc index 7d9a5b5399..ca40284892 100644 --- a/ceammc/ext/doc/fx.secho~.pddoc +++ b/ceammc/ext/doc/fx.secho~.pddoc @@ -18,9 +18,9 @@ - + echo time - feedback + feedback coefficient @@ -34,10 +34,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing diff --git a/ceammc/ext/doc/fx.shimmer~-help.pd b/ceammc/ext/doc/fx.shimmer~-help.pd index 44eef965c9..15b8345778 100644 --- a/ceammc/ext/doc/fx.shimmer~-help.pd +++ b/ceammc/ext/doc/fx.shimmer~-help.pd @@ -22,94 +22,95 @@ -49933 0; #X text 110 438 1\.; #X text 150 438 float; -#X obj 246 439 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 438 size(ms): echo time. Type: float. Range: 0\...2000; -#X text 110 458 2\.; -#X text 150 458 float; -#X obj 246 459 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 458 diffusion: feedback coefficient. Type: float. Range: -0\...0.99; -#X obj 20 503 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 508 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 439 cnv 1 115 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 DECAY_LOW(sec): time to decay 60dB in low-frequency +band. Type: float. Range: 1\...8; +#X text 110 473 2\.; +#X text 150 473 float; +#X obj 246 474 cnv 1 115 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 473 DECAY_MID(sec): time to decay 60dB in mid-frequency +band. Type: float. Range: 1\...8; +#X obj 20 518 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 523 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 543 @active; -#X text 245 543 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 585 @bypass; -#X text 245 585 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 627 @control; -#X text 245 627 Get/Set envelope follower to pitch shifter influence +#X msg 110 558 @active; +#X text 245 558 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 587 @bypass; +#X text 245 587 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 629 @control; +#X text 245 629 Get/Set envelope follower to pitch shifter influence coefficient. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 684 @damp_hf; -#X text 245 684 Get/Set Frequency (Hz) at which the high-frequency +#X msg 110 686 @damp_hf; +#X text 245 686 Get/Set Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60\. Type: float. Units: Hz. Default value: 6000\. Range: 1500\...47040\.; -#X msg 110 741 @decay_low; -#X text 245 741 Get/Set time (in seconds) to decay 60dB in low-frequency +#X msg 110 743 @decay_low; +#X text 245 743 Get/Set time (in seconds) to decay 60dB in low-frequency band. Type: float. Units: sec. Default value: 3\. Range: 1\...8\.; -#X msg 110 798 @decay_mid; -#X text 245 798 Get/Set time (in seconds) to decay 60dB in mid-frequency +#X msg 110 800 @decay_mid; +#X text 245 800 Get/Set time (in seconds) to decay 60dB in mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 1\...8\.; -#X msg 110 855 @depth; -#X text 245 855 Get/Set pitchshift modulation amplitude. Type: float. +#X msg 110 857 @depth; +#X text 245 857 Get/Set pitchshift modulation amplitude. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 897 @drywet; -#X text 245 897 Get/Set proportion of mix between the original (dry) +#X msg 110 899 @drywet; +#X text 245 899 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 954 @envelope; -#X text 245 954 Get/Set amplitude-envelope time-constant going down. +#X msg 110 956 @envelope; +#X text 245 956 Get/Set amplitude-envelope time-constant going down. Type: float. Units: sec. Default value: 1\. Range: 0.1\...3\.; -#X msg 110 996 @freq_low; -#X text 245 996 Get/Set Crossover frequency (Hz) separating low and +#X msg 110 998 @freq_low; +#X text 245 998 Get/Set Crossover frequency (Hz) separating low and middle frequencies. Type: float. Units: Hz. Default value: 200\. Range: 50\...1000\.; -#X msg 110 1053 @mode; -#X text 245 1053 Get/Set correlation between pitchshift. Type: int. +#X msg 110 1055 @mode; +#X text 245 1055 Get/Set correlation between pitchshift. Type: int. Default value: 0\. Range: -3\...3\.; -#X msg 110 1095 @ps_drywet; -#X text 245 1095 Get/Set proportion of mix between original and pitchshift +#X msg 110 1097 @ps_drywet; +#X text 245 1097 Get/Set proportion of mix between original and pitchshift signal in shimmer feedback. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 1152 @shift; -#X text 245 1152 Get/Set frequency shifting. Type: float. Units: semitone. +#X msg 110 1154 @shift; +#X text 245 1154 Get/Set frequency shifting. Type: float. Units: semitone. Default value: 12\. Range: -12\...12\.; -#X msg 110 1194 @speed; -#X text 245 1194 Get/Set pitchshift modulation frequency. Type: float. +#X msg 110 1196 @speed; +#X text 245 1196 Get/Set pitchshift modulation frequency. Type: float. Units: Hz. Default value: 0.1\. Range: 0.1\...10\.; -#X obj 20 1246 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1251 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1248 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1253 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1286 reset; -#X text 245 1286 reset to initial state.; -#X obj 20 1323 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1328 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1288 reset; +#X text 245 1288 reset to initial state.; +#X obj 20 1325 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1330 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1329 1\.; -#X text 245 1329 input signal.; -#X text 110 1349 2\.; -#X text 245 1349 input signal.; -#X obj 20 1379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1384 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1331 1\.; +#X text 245 1331 input signal.; +#X text 110 1351 2\.; +#X text 245 1351 input signal.; +#X obj 20 1381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1386 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1385 1\.; -#X text 245 1385 output signal.; -#X text 110 1405 2\.; -#X text 245 1405 output signal.; +#X text 110 1387 1\.; +#X text 245 1387 output signal.; +#X text 110 1407 2\.; +#X text 245 1407 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1455 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1458 library: ceammc v0.9.4; -#N canvas 10 1477 400 290 info 0; +#X obj 1 1457 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1460 library: ceammc v0.9.6; +#N canvas 10 1479 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.shimmer~; #X text 10 76 category:; @@ -128,7 +129,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1477 pd info; +#X restore 10 1479 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/fx.shimmer~.pddoc b/ceammc/ext/doc/fx.shimmer~.pddoc index 79ca8ca51c..58fb082e69 100644 --- a/ceammc/ext/doc/fx.shimmer~.pddoc +++ b/ceammc/ext/doc/fx.shimmer~.pddoc @@ -15,10 +15,10 @@ 0.9.4 - - echo time - feedback - coefficient + time + to decay 60dB in low-frequency band + time + to decay 60dB in mid-frequency band reset to initial state @@ -29,9 +29,9 @@ time (in seconds) to decay 60dB in mid-frequency band Crossover frequency (Hz) separating low and middle frequencies + units="hertz">Crossover frequency (Hz) separating low and middle frequencies Frequency (Hz) at which the high-frequency T60 is half the middle-band's + units="hertz">Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60 amplitude-envelope time-constant going down @@ -40,7 +40,7 @@ pitchshift modulation amplitude pitchshift modulation frequency + units="hertz">pitchshift modulation frequency envelope follower to pitch shifter influence coefficient @@ -50,10 +50,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet - if set to 1 - bypass - 'effected' signal - on/off dsp - processing + if set to 1 - bypass 'effected' + signal + on/off dsp processing diff --git a/ceammc/ext/doc/fx.stutter~-help.pd b/ceammc/ext/doc/fx.stutter~-help.pd new file mode 100644 index 0000000000..66ec89fd96 --- /dev/null +++ b/ceammc/ext/doc/fx.stutter~-help.pd @@ -0,0 +1,99 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 653 50 cnv 1 112 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 653 50 stutter effect; +#X obj 1 1 cnv 5 765 40 empty empty fx.stutter~ 20 20 0 20 -104026 +-4096 0; +#X obj 660 11 fx.stutter~; +#X msg 50 118 open %CEAMMC%/guitar1.wav \, 1; +#X obj 50 147 expand_env; +#X msg 184 147 stop; +#X obj 50 176 readsf~; +#X obj 184 176 ui.btn; +#X obj 270 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 205 fx.stutter~ 60; +#X obj 50 234 ui.gain~ @size 120 14; +#X obj 280 234 ui.dsp~; +#X obj 50 262 dac~; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 351 1\.; +#X text 150 351 float; +#X obj 246 352 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 T(ms): stutter period. Type: float. Range: 1\...1000; +#X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 421 @maxsize; +#X text 245 421 (initonly) Get/Set max stutter period. Type: float. +Units: ms. Default value: 1000\. Range: 1\...10000\.; +#X msg 110 463 @mode; +#X text 245 463 Get/Set stutter mode. If 'fwd': play loop fragment +forwards \, 'back': play loop fragment backwards \, 'tri': play loop +fragment in both directions. Type: symbol. Default value: fwd. Allowed +values: fwd \, back \, tri.; +#X msg 110 535 @speed; +#X text 245 535 Get/Set loop fragment playing speed. Type: float. Default +value: 1\. Range: 0.25\...4\.; +#X msg 110 577 @t; +#X text 245 577 Get/Set stutter period. Type: float. Units: ms. Default +value: 50\. Range: 1\...1000\.; +#X obj 20 629 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 634 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 635 1\.; +#X text 245 635 left channel.; +#X text 110 655 2\.; +#X text 150 655 *bang*; +#X text 245 655 turn on effect for 3 periods.; +#X text 150 675 *float*; +#X text 245 675 1: turn on \, 0: turn off.; +#X obj 20 705 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 710 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 711 1\.; +#X text 245 711 output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; +#X obj 1 761 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 764 library: ceammc v0.9.6; +#N canvas 10 783 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 fx.stutter~; +#X text 10 76 category:; +#X text 120 76 fx; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 fx \, stutter \, glitch; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 783 pd info; +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 1; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 0 13 1; +#X connect 7 1 4 0; +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.stutter~.pddoc b/ceammc/ext/doc/fx.stutter~.pddoc new file mode 100644 index 0000000000..f2f40acaf0 --- /dev/null +++ b/ceammc/ext/doc/fx.stutter~.pddoc @@ -0,0 +1,64 @@ + + + + fx.stutter~ + + + Serge Poltavsky + + stutter effect + GPL3 or later + ceammc + fx + fx stutter glitch + 0.9.6 + + + + stutter period + + + stutter period + max stutter period + stutter mode. If + 'fwd': play loop fragment forwards, 'back': play loop fragment backwards, 'tri': play + loop fragment in both directions + loop + fragment playing speed + + + + left channel + + + turn on effect for 3 periods + 1: turn on, 0: turn off + + + + output + + + +c] +[X b->a] +]]> + + + + diff --git a/ceammc/ext/doc/fx.tapiir~-help.pd b/ceammc/ext/doc/fx.tapiir~-help.pd index 5f39c6fcf9..7b700c10ee 100644 --- a/ceammc/ext/doc/fx.tapiir~-help.pd +++ b/ceammc/ext/doc/fx.tapiir~-help.pd @@ -7,329 +7,350 @@ #X obj 667 11 fx.tapiir~; #X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; +#X msg 414 118 list 2 4_ 4 8_ 8 16_ 16; #X obj 50 147 click~; -#X msg 414 147 list 8_ 16 8_ 16 8_ 16; +#X msg 414 147 list 4_ 8 4_ 8 4_ 8; #X obj 50 176 flt.resonbp~ 1000 50; -#X obj 414 176 music.d->t @bpm 60 1; -#X obj 78 205 flt.resonbp~ 2000 50; +#X obj 414 176 music.d->t @bpm 120 1; +#X obj 78 205 flt.resonbp~ 1700 50; #X obj 88 234 ui.sliders 6 @size 84 50 @min 0 @max 1; #X obj 251 234 ui.sliders 6 @size 84 50 @min 0 @max 1; #X obj 414 234 ui.sliders 6 @size 84 50 @min 50 @max 1000; #X obj 88 291 m @outs0; #X obj 251 291 m @outs1; #X obj 414 291 m @delays; -#X obj 50 334 fx.tapiir~ @out0.in0 1 @out1.in1 1; -#X obj 50 363 ui.hgain2~; -#X obj 203 363 ui.dsp~; -#X obj 50 392 dac~; -#X obj 20 441 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 446 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X msg 88 320 reset; +#X msg 174 320 dump; +#X msg 414 320 random delays 200 3000 \, random fb 0.1 0.2; +#X msg 414 349 pingpong 250 0.7; +#X obj 50 378 fx.tapiir~ @out0.in0 1 @out1.in1 1; +#X obj 50 406 ui.hgain2~; +#X obj 414 406 ui.dsp~; +#X obj 50 435 dac~; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 481 @active; -#X text 245 481 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 523 @delays; -#X text 245 523 Get/Set list of all tap delays. Type: list. Units: +#X msg 110 524 @active; +#X text 245 524 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 553 @delays; +#X text 245 553 Get/Set list of all tap delays. Type: list. Units: ms. Default value: 0 0 0 0 0 0\.; -#X msg 110 565 @fbs0; -#X text 245 565 Get/Set list of all feedbacks to tap0\. Type: list. +#X msg 110 595 @fbs0; +#X text 245 595 Get/Set list of all feedbacks to tap0\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 607 @fbs1; -#X text 245 607 Get/Set list of all feedbacks to tap1\. Type: list. +#X msg 110 637 @fbs1; +#X text 245 637 Get/Set list of all feedbacks to tap1\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 649 @fbs2; -#X text 245 649 Get/Set list of all feedbacks to tap2\. Type: list. +#X msg 110 679 @fbs2; +#X text 245 679 Get/Set list of all feedbacks to tap2\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 691 @fbs3; -#X text 245 691 Get/Set list of all feedbacks to tap3\. Type: list. +#X msg 110 721 @fbs3; +#X text 245 721 Get/Set list of all feedbacks to tap3\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 733 @fbs4; -#X text 245 733 Get/Set list of all feedbacks to tap4\. Type: list. +#X msg 110 763 @fbs4; +#X text 245 763 Get/Set list of all feedbacks to tap4\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 775 @fbs5; -#X text 245 775 Get/Set list of all feedbacks to tap5\. Type: list. +#X msg 110 805 @fbs5; +#X text 245 805 Get/Set list of all feedbacks to tap5\. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 817 @gains; -#X text 245 817 Get/Set list of all tap gains. Type: list. Units: db. +#X msg 110 847 @gains; +#X text 245 847 Get/Set list of all tap gains. Type: list. Units: db. Default value: 0 0 0 0 0 0\.; -#X msg 110 859 @ins0; -#X text 245 859 Get/Set list of all taps left channel input levels. +#X msg 110 889 @ins0; +#X text 245 889 Get/Set list of all taps left channel input levels. Type: list. Default value: 1 1 1 1 1 1\. Range: 0\...1\.; -#X msg 110 901 @ins1; -#X text 245 901 Get/Set list of all taps right channel input levels. +#X msg 110 931 @ins1; +#X text 245 931 Get/Set list of all taps right channel input levels. Type: list. Default value: 1 1 1 1 1 1\. Range: 0\...1\.; -#X msg 110 943 @out0.gain; -#X text 245 943 Get/Set left channel output gain. Type: float. Units: +#X msg 110 973 @out0.gain; +#X text 245 973 Get/Set left channel output gain. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 985 @out0.in0; -#X text 245 985 Get/Set input left channel level to left output. Type: +#X msg 110 1015 @out0.in0; +#X text 245 1015 Get/Set input left channel level to left output. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1027 @out0.in1; -#X text 245 1027 Get/Set input right channel level to left output. +#X msg 110 1057 @out0.in1; +#X text 245 1057 Get/Set input right channel level to left output. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1069 @out0.tap0; -#X text 245 1069 Get/Set tap 0 output level to left channel. Type: +#X msg 110 1099 @out0.tap0; +#X text 245 1099 Get/Set tap 0 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1111 @out0.tap1; -#X text 245 1111 Get/Set tap 1 output level to left channel. Type: +#X msg 110 1141 @out0.tap1; +#X text 245 1141 Get/Set tap 1 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1153 @out0.tap2; -#X text 245 1153 Get/Set tap 2 output level to left channel. Type: +#X msg 110 1183 @out0.tap2; +#X text 245 1183 Get/Set tap 2 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1195 @out0.tap3; -#X text 245 1195 Get/Set tap 3 output level to left channel. Type: +#X msg 110 1225 @out0.tap3; +#X text 245 1225 Get/Set tap 3 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1237 @out0.tap4; -#X text 245 1237 Get/Set tap 4 output level to left channel. Type: +#X msg 110 1267 @out0.tap4; +#X text 245 1267 Get/Set tap 4 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1279 @out0.tap5; -#X text 245 1279 Get/Set tap 5 output level to left channel. Type: +#X msg 110 1309 @out0.tap5; +#X text 245 1309 Get/Set tap 5 output level to left channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1321 @out1.gain; -#X text 245 1321 Get/Set right channel output gain. Type: float. Units: +#X msg 110 1351 @out1.gain; +#X text 245 1351 Get/Set right channel output gain. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 1363 @out1.in0; -#X text 245 1363 Get/Set input left channel level to right output. +#X msg 110 1393 @out1.in0; +#X text 245 1393 Get/Set input left channel level to right output. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1405 @out1.in1; -#X text 245 1405 Get/Set input right channel level to right output. +#X msg 110 1435 @out1.in1; +#X text 245 1435 Get/Set input right channel level to right output. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1447 @out1.tap0; -#X text 245 1447 Get/Set tap 0 output level to right channel. Type: +#X msg 110 1477 @out1.tap0; +#X text 245 1477 Get/Set tap 0 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1489 @out1.tap1; -#X text 245 1489 Get/Set tap 1 output level to right channel. Type: +#X msg 110 1519 @out1.tap1; +#X text 245 1519 Get/Set tap 1 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1531 @out1.tap2; -#X text 245 1531 Get/Set tap 2 output level to right channel. Type: +#X msg 110 1561 @out1.tap2; +#X text 245 1561 Get/Set tap 2 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1573 @out1.tap3; -#X text 245 1573 Get/Set tap 3 output level to right channel. Type: +#X msg 110 1603 @out1.tap3; +#X text 245 1603 Get/Set tap 3 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1615 @out1.tap4; -#X text 245 1615 Get/Set tap 4 output level to right channel. Type: +#X msg 110 1645 @out1.tap4; +#X text 245 1645 Get/Set tap 4 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1657 @out1.tap5; -#X text 245 1657 Get/Set tap 5 output level to right channel. Type: +#X msg 110 1687 @out1.tap5; +#X text 245 1687 Get/Set tap 5 output level to right channel. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1699 @outs0; -#X text 245 1699 Get/Set list of all tap output levels to left channel. +#X msg 110 1729 @outs0; +#X text 245 1729 Get/Set list of all tap output levels to left channel. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 1741 @outs1; -#X text 245 1741 Get/Set list of all tap output levels to right channel. +#X msg 110 1771 @outs1; +#X text 245 1771 Get/Set list of all tap output levels to right channel. Type: list. Default value: 0 0 0 0 0 0\. Range: 0\...1\.; -#X msg 110 1783 @tap0.delay; -#X text 245 1783 Get/Set tap0 delay time. Type: float. Units: ms. Default +#X msg 110 1813 @tap0.delay; +#X text 245 1813 Get/Set tap0 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 1825 @tap0.fb0; -#X text 245 1825 Get/Set tap0 feedback to tap0\. Type: float. Default +#X msg 110 1855 @tap0.fb0; +#X text 245 1855 Get/Set tap0 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1867 @tap0.fb1; -#X text 245 1867 Get/Set tap1 feedback to tap0\. Type: float. Default +#X msg 110 1897 @tap0.fb1; +#X text 245 1897 Get/Set tap1 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1909 @tap0.fb2; -#X text 245 1909 Get/Set tap2 feedback to tap0\. Type: float. Default +#X msg 110 1939 @tap0.fb2; +#X text 245 1939 Get/Set tap2 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1951 @tap0.fb3; -#X text 245 1951 Get/Set tap3 feedback to tap0\. Type: float. Default +#X msg 110 1981 @tap0.fb3; +#X text 245 1981 Get/Set tap3 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1993 @tap0.fb4; -#X text 245 1993 Get/Set tap4 feedback to tap0\. Type: float. Default +#X msg 110 2023 @tap0.fb4; +#X text 245 2023 Get/Set tap4 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2035 @tap0.fb5; -#X text 245 2035 Get/Set tap5 feedback to tap0\. Type: float. Default +#X msg 110 2065 @tap0.fb5; +#X text 245 2065 Get/Set tap5 feedback to tap0\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2077 @tap0.gain; -#X text 245 2077 Get/Set tap0 common level. Type: float. Units: db. +#X msg 110 2107 @tap0.gain; +#X text 245 2107 Get/Set tap0 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 2119 @tap0.in0; -#X text 245 2119 Get/Set left input level to tap0\. Type: float. Default +#X msg 110 2149 @tap0.in0; +#X text 245 2149 Get/Set left input level to tap0\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 2161 @tap0.in1; -#X text 245 2161 Get/Set right input level to tap0\. Type: float. Default +#X msg 110 2191 @tap0.in1; +#X text 245 2191 Get/Set right input level to tap0\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 2203 @tap1.delay; -#X text 245 2203 Get/Set tap1 delay time. Type: float. Units: ms. Default +#X msg 110 2233 @tap1.delay; +#X text 245 2233 Get/Set tap1 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 2245 @tap1.fb0; -#X text 245 2245 Get/Set tap0 feedback to tap1\. Type: float. Default +#X msg 110 2275 @tap1.fb0; +#X text 245 2275 Get/Set tap0 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2287 @tap1.fb1; -#X text 245 2287 Get/Set tap1 feedback to tap1\. Type: float. Default +#X msg 110 2317 @tap1.fb1; +#X text 245 2317 Get/Set tap1 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2329 @tap1.fb2; -#X text 245 2329 Get/Set tap2 feedback to tap1\. Type: float. Default +#X msg 110 2359 @tap1.fb2; +#X text 245 2359 Get/Set tap2 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2371 @tap1.fb3; -#X text 245 2371 Get/Set tap3 feedback to tap1\. Type: float. Default +#X msg 110 2401 @tap1.fb3; +#X text 245 2401 Get/Set tap3 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2413 @tap1.fb4; -#X text 245 2413 Get/Set tap4 feedback to tap1\. Type: float. Default +#X msg 110 2443 @tap1.fb4; +#X text 245 2443 Get/Set tap4 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2455 @tap1.fb5; -#X text 245 2455 Get/Set tap5 feedback to tap1\. Type: float. Default +#X msg 110 2485 @tap1.fb5; +#X text 245 2485 Get/Set tap5 feedback to tap1\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2497 @tap1.gain; -#X text 245 2497 Get/Set tap1 common level. Type: float. Units: db. +#X msg 110 2527 @tap1.gain; +#X text 245 2527 Get/Set tap1 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 2539 @tap1.in0; -#X text 245 2539 Get/Set left input level to tap1\. Type: float. Default +#X msg 110 2569 @tap1.in0; +#X text 245 2569 Get/Set left input level to tap1\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 2581 @tap1.in1; -#X text 245 2581 Get/Set right input level to tap1\. Type: float. Default +#X msg 110 2611 @tap1.in1; +#X text 245 2611 Get/Set right input level to tap1\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 2623 @tap2.delay; -#X text 245 2623 Get/Set tap2 delay time. Type: float. Units: ms. Default +#X msg 110 2653 @tap2.delay; +#X text 245 2653 Get/Set tap2 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 2665 @tap2.fb0; -#X text 245 2665 Get/Set tap0 feedback to tap2\. Type: float. Default +#X msg 110 2695 @tap2.fb0; +#X text 245 2695 Get/Set tap0 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2707 @tap2.fb1; -#X text 245 2707 Get/Set tap1 feedback to tap2\. Type: float. Default +#X msg 110 2737 @tap2.fb1; +#X text 245 2737 Get/Set tap1 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2749 @tap2.fb2; -#X text 245 2749 Get/Set tap2 feedback to tap2\. Type: float. Default +#X msg 110 2779 @tap2.fb2; +#X text 245 2779 Get/Set tap2 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2791 @tap2.fb3; -#X text 245 2791 Get/Set tap3 feedback to tap2\. Type: float. Default +#X msg 110 2821 @tap2.fb3; +#X text 245 2821 Get/Set tap3 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2833 @tap2.fb4; -#X text 245 2833 Get/Set tap4 feedback to tap2\. Type: float. Default +#X msg 110 2863 @tap2.fb4; +#X text 245 2863 Get/Set tap4 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2875 @tap2.fb5; -#X text 245 2875 Get/Set tap5 feedback to tap2\. Type: float. Default +#X msg 110 2905 @tap2.fb5; +#X text 245 2905 Get/Set tap5 feedback to tap2\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 2917 @tap2.gain; -#X text 245 2917 Get/Set tap2 common level. Type: float. Units: db. +#X msg 110 2947 @tap2.gain; +#X text 245 2947 Get/Set tap2 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 2959 @tap2.in0; -#X text 245 2959 Get/Set left input level to tap2\. Type: float. Default +#X msg 110 2989 @tap2.in0; +#X text 245 2989 Get/Set left input level to tap2\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3001 @tap2.in1; -#X text 245 3001 Get/Set right input level to tap2\. Type: float. Default +#X msg 110 3031 @tap2.in1; +#X text 245 3031 Get/Set right input level to tap2\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3043 @tap3.delay; -#X text 245 3043 Get/Set tap3 delay time. Type: float. Units: ms. Default +#X msg 110 3073 @tap3.delay; +#X text 245 3073 Get/Set tap3 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 3085 @tap3.fb0; -#X text 245 3085 Get/Set tap0 feedback to tap3\. Type: float. Default +#X msg 110 3115 @tap3.fb0; +#X text 245 3115 Get/Set tap0 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3127 @tap3.fb1; -#X text 245 3127 Get/Set tap1 feedback to tap3\. Type: float. Default +#X msg 110 3157 @tap3.fb1; +#X text 245 3157 Get/Set tap1 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3169 @tap3.fb2; -#X text 245 3169 Get/Set tap2 feedback to tap3\. Type: float. Default +#X msg 110 3199 @tap3.fb2; +#X text 245 3199 Get/Set tap2 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3211 @tap3.fb3; -#X text 245 3211 Get/Set tap3 feedback to tap3\. Type: float. Default +#X msg 110 3241 @tap3.fb3; +#X text 245 3241 Get/Set tap3 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3253 @tap3.fb4; -#X text 245 3253 Get/Set tap4 feedback to tap3\. Type: float. Default +#X msg 110 3283 @tap3.fb4; +#X text 245 3283 Get/Set tap4 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3295 @tap3.fb5; -#X text 245 3295 Get/Set tap5 feedback to tap3\. Type: float. Default +#X msg 110 3325 @tap3.fb5; +#X text 245 3325 Get/Set tap5 feedback to tap3\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3337 @tap3.gain; -#X text 245 3337 Get/Set tap3 common level. Type: float. Units: db. +#X msg 110 3367 @tap3.gain; +#X text 245 3367 Get/Set tap3 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 3379 @tap3.in0; -#X text 245 3379 Get/Set left input level to tap3\. Type: float. Default +#X msg 110 3409 @tap3.in0; +#X text 245 3409 Get/Set left input level to tap3\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3421 @tap3.in1; -#X text 245 3421 Get/Set right input level to tap3\. Type: float. Default +#X msg 110 3451 @tap3.in1; +#X text 245 3451 Get/Set right input level to tap3\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3463 @tap4.delay; -#X text 245 3463 Get/Set tap4 delay time. Type: float. Units: ms. Default +#X msg 110 3493 @tap4.delay; +#X text 245 3493 Get/Set tap4 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 3505 @tap4.fb0; -#X text 245 3505 Get/Set tap0 feedback to tap4\. Type: float. Default +#X msg 110 3535 @tap4.fb0; +#X text 245 3535 Get/Set tap0 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3547 @tap4.fb1; -#X text 245 3547 Get/Set tap1 feedback to tap4\. Type: float. Default +#X msg 110 3577 @tap4.fb1; +#X text 245 3577 Get/Set tap1 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3589 @tap4.fb2; -#X text 245 3589 Get/Set tap2 feedback to tap4\. Type: float. Default +#X msg 110 3619 @tap4.fb2; +#X text 245 3619 Get/Set tap2 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3631 @tap4.fb3; -#X text 245 3631 Get/Set tap3 feedback to tap4\. Type: float. Default +#X msg 110 3661 @tap4.fb3; +#X text 245 3661 Get/Set tap3 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3673 @tap4.fb4; -#X text 245 3673 Get/Set tap4 feedback to tap4\. Type: float. Default +#X msg 110 3703 @tap4.fb4; +#X text 245 3703 Get/Set tap4 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3715 @tap4.fb5; -#X text 245 3715 Get/Set tap5 feedback to tap4\. Type: float. Default +#X msg 110 3745 @tap4.fb5; +#X text 245 3745 Get/Set tap5 feedback to tap4\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3757 @tap4.gain; -#X text 245 3757 Get/Set tap4 common level. Type: float. Units: db. +#X msg 110 3787 @tap4.gain; +#X text 245 3787 Get/Set tap4 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 3799 @tap4.in0; -#X text 245 3799 Get/Set left input level to tap4\. Type: float. Default +#X msg 110 3829 @tap4.in0; +#X text 245 3829 Get/Set left input level to tap4\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3841 @tap4.in1; -#X text 245 3841 Get/Set right input level to tap4\. Type: float. Default +#X msg 110 3871 @tap4.in1; +#X text 245 3871 Get/Set right input level to tap4\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 3883 @tap5.delay; -#X text 245 3883 Get/Set tap5 delay time. Type: float. Units: ms. Default +#X msg 110 3913 @tap5.delay; +#X text 245 3913 Get/Set tap5 delay time. Type: float. Units: ms. Default value: 0\. Range: 0\...5000\.; -#X msg 110 3925 @tap5.fb0; -#X text 245 3925 Get/Set tap0 feedback to tap5\. Type: float. Default +#X msg 110 3955 @tap5.fb0; +#X text 245 3955 Get/Set tap0 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 3967 @tap5.fb1; -#X text 245 3967 Get/Set tap1 feedback to tap5\. Type: float. Default +#X msg 110 3997 @tap5.fb1; +#X text 245 3997 Get/Set tap1 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 4009 @tap5.fb2; -#X text 245 4009 Get/Set tap2 feedback to tap5\. Type: float. Default +#X msg 110 4039 @tap5.fb2; +#X text 245 4039 Get/Set tap2 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 4051 @tap5.fb3; -#X text 245 4051 Get/Set tap3 feedback to tap5\. Type: float. Default +#X msg 110 4081 @tap5.fb3; +#X text 245 4081 Get/Set tap3 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 4093 @tap5.fb4; -#X text 245 4093 Get/Set tap4 feedback to tap5\. Type: float. Default +#X msg 110 4123 @tap5.fb4; +#X text 245 4123 Get/Set tap4 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 4135 @tap5.fb5; -#X text 245 4135 Get/Set tap5 feedback to tap5\. Type: float. Default +#X msg 110 4165 @tap5.fb5; +#X text 245 4165 Get/Set tap5 feedback to tap5\. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 4177 @tap5.gain; -#X text 245 4177 Get/Set tap5 common level. Type: float. Units: db. +#X msg 110 4207 @tap5.gain; +#X text 245 4207 Get/Set tap5 common level. Type: float. Units: db. Default value: 0\. Range: -60\...0\.; -#X msg 110 4219 @tap5.in0; -#X text 245 4219 Get/Set left input level to tap5\. Type: float. Default +#X msg 110 4249 @tap5.in0; +#X text 245 4249 Get/Set left input level to tap5\. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 4261 @tap5.in1; -#X text 245 4261 Get/Set right input level to tap5\. Type: float. Default +#X msg 110 4291 @tap5.in1; +#X text 245 4291 Get/Set right input level to tap5\. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 4313 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 4318 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 4343 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 4348 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 4353 reset; -#X text 245 4353 reset to initial state.; -#X obj 20 4390 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 4395 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 4383 pingpong; +#X text 245 4383 set pingpong delay values. Arguments are:; +#X obj 255 4406 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 4406 DELAY: delay time. Type: float. Units: ms.; +#X obj 255 4429 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 4429 FB: feedback value. Type: float. Range: 0\...1\.; +#X msg 110 4454 random; +#X text 245 4454 randomize values. Arguments are:; +#X obj 255 4477 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 4477 TYPE: group name. If 'delays' - randomize @delays +properties \, if 'fb' - randomize @fb* properties. Type: symbol. Allowed +values: delays \, fb \, inputs \, outputs \, gains.; +#X obj 255 4530 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 4530 [MIN]: minimal value. Type: float. Min value: 0\.; +#X obj 255 4553 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 4553 [MAX]: maximum value. Type: float. Min value: 0\.; +#X msg 110 4578 reset; +#X text 245 4578 reset to initial state.; +#X obj 20 4615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 4620 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 4396 1\.; -#X text 245 4396 left in channel.; -#X text 110 4416 2\.; -#X text 245 4416 right in channel.; -#X obj 20 4446 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 4451 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 4621 1\.; +#X text 245 4621 left in channel.; +#X text 110 4641 2\.; +#X text 245 4641 right in channel.; +#X obj 20 4671 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 4676 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 4452 1\.; -#X text 245 4452 left out channel.; -#X text 110 4472 2\.; -#X text 245 4472 right out channel.; +#X text 110 4677 1\.; +#X text 245 4677 left out channel.; +#X text 110 4697 2\.; +#X text 245 4697 right out channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 4522 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 4525 library: ceammc v0.9.4; -#N canvas 10 4544 400 290 info 0; +#X obj 1 4747 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 4750 library: ceammc v0.9.6; +#N canvas 10 4769 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.tapiir~; #X text 10 76 category:; @@ -348,21 +369,26 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 4544 pd info; -#X connect 4 0 5 0; -#X connect 5 0 7 0; +#X restore 10 4769 pd info; +#X connect 4 0 6 0; #X connect 6 0 8 0; -#X connect 8 0 12 0; -#X connect 10 0 13 0; -#X connect 12 0 15 0; -#X connect 7 0 16 0; -#X connect 16 0 17 0; -#X connect 16 1 17 1; -#X connect 17 0 19 0; -#X connect 17 1 19 1; -#X connect 15 0 16 0; -#X connect 13 0 16 0; +#X connect 7 0 9 0; +#X connect 9 0 13 0; #X connect 11 0 14 0; -#X connect 14 0 16 0; -#X connect 9 0 16 1; -#X connect 5 0 9 0; \ No newline at end of file +#X connect 13 0 16 0; +#X connect 8 0 21 0; +#X connect 17 0 21 0; +#X connect 18 0 21 0; +#X connect 21 0 22 0; +#X connect 21 1 22 1; +#X connect 22 0 24 0; +#X connect 22 1 24 1; +#X connect 16 0 21 0; +#X connect 14 0 21 0; +#X connect 12 0 15 0; +#X connect 15 0 21 0; +#X connect 19 0 21 0; +#X connect 5 0 9 0; +#X connect 20 0 21 0; +#X connect 10 0 21 1; +#X connect 6 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/fx.tapiir~.pddoc b/ceammc/ext/doc/fx.tapiir~.pddoc index 49b0b0b6c9..a67d1ff068 100644 --- a/ceammc/ext/doc/fx.tapiir~.pddoc +++ b/ceammc/ext/doc/fx.tapiir~.pddoc @@ -16,6 +16,16 @@ reset to initial state + randomize values + + group name. If 'delays' - randomize @delays properties, if 'fb' - randomize @fb* + properties. + minimal value + maximum value + set pingpong delay values + delay time + feedback + value list of @@ -210,8 +220,7 @@ tap5 feedback to tap5 - on/off dsp - processing + on/off dsp processing @@ -228,11 +237,11 @@ t @bpm 60 1 {i=1,o=1}] +[flt.resonbp~ #f0] [music.d->t @bpm 120 1 {i=1,o=1} #o8] | | | [flt.resonbp~ #f1] | | | @@ -242,23 +251,29 @@ | | | | [m #o3] [m #o5] [m @delays #o1] | -| +| [reset( [dump( [random delays 200 3000, random fb 0.1 0.2 #o6( +| | | +| | | [pingpong 250 0.7 #o10( +| | | [fx.tapiir~ #z] *|* -[ui.hgain2~] [ui.dsp~] +[ui.hgain2~] [ui.dsp~] *|* [dac~] [X o1->z] [X o3->z] [X o4->o5] [X o5->z] +[X o6->z] +[X o7->o8] +[X o10->z] [X f1->z:1] [X c0->f1] #o0 6 @size 84 50 @min 50 @max 1000 #o2 6 @size 84 50 @min 0 @max 1 #o4 6 @size 84 50 @min 0 @max 1 #f0 1000 50 -#f1 2000 50 +#f1 1700 50 #o3 @outs0 #o5 @outs1 #z @out0.in0 1 @out1.in1 1 diff --git a/ceammc/ext/doc/fx.vocoder~-help.pd b/ceammc/ext/doc/fx.vocoder~-help.pd index 5532d82149..bf0aec7a99 100644 --- a/ceammc/ext/doc/fx.vocoder~-help.pd +++ b/ceammc/ext/doc/fx.vocoder~-help.pd @@ -18,42 +18,42 @@ signal is analyzed using a 32-band filter bank; #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 422 @attack; -#X text 245 422 Get/Set attack time. Type: float. Units: ms. Default +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 409 @attack; +#X text 245 409 Get/Set attack time. Type: float. Units: ms. Default value: 5\. Range: 0.1\...100\.; -#X msg 110 464 @bwratio; -#X text 245 464 Get/Set coefficient to adjust the bandwidth of each +#X msg 110 451 @bwratio; +#X text 245 451 Get/Set coefficient to adjust the bandwidth of each band. Type: float. Default value: 0.5\. Range: 0.1\...2\.; -#X msg 110 506 @release; -#X text 245 506 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 493 @release; +#X text 245 493 Get/Set release time. Type: float. Units: ms. Default value: 5\. Range: 0.1\...100\.; -#X obj 20 558 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 563 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 545 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 550 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 564 1\.; -#X text 245 564 modulation signal.; -#X text 110 584 2\.; -#X text 245 584 excitation/carrier signal.; -#X obj 20 614 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 619 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 551 1\.; +#X text 245 551 modulation signal.; +#X text 110 571 2\.; +#X text 245 571 excitation/carrier signal.; +#X obj 20 601 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 606 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 620 1\.; -#X text 245 620; +#X text 110 607 1\.; +#X text 245 607; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 670 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 673 library: ceammc v0.9.4; -#N canvas 10 692 400 290 info 0; +#X obj 1 657 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 660 library: ceammc v0.9.6; +#N canvas 10 679 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.vocoder~; #X text 10 76 category:; @@ -72,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 692 pd info; +#X restore 10 679 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/fx.vocoder~.pddoc b/ceammc/ext/doc/fx.vocoder~.pddoc index f579021a27..1e2b4138ca 100644 --- a/ceammc/ext/doc/fx.vocoder~.pddoc +++ b/ceammc/ext/doc/fx.vocoder~.pddoc @@ -21,8 +21,7 @@ units="millisecond">release time coefficient to adjust the bandwidth of each band - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/fx.wahwah~-help.pd b/ceammc/ext/doc/fx.wahwah~-help.pd index 86bf5a3195..cdaf3ce182 100644 --- a/ceammc/ext/doc/fx.wahwah~-help.pd +++ b/ceammc/ext/doc/fx.wahwah~-help.pd @@ -14,47 +14,59 @@ #X obj 50 262 dac~; #X obj 50 291 ui.dsp~; #X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 345 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 422 @angle; -#X text 245 422 Get/Set pedal angle. Type: float. Default value: 0.6\. +#X text 110 380 1\.; +#X text 150 380 float; +#X obj 246 381 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 380 ANGLE: pedal angle. Type: float. Range: 0\...1; +#X text 110 400 2\.; +#X text 150 400 float; +#X obj 246 401 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 400 SPEED(bpm): automatisation speed. Type: float. Range: +360\...780; +#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 450 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 485 @active; +#X text 245 485 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 514 @angle; +#X text 245 514 Get/Set pedal angle. Type: float. Default value: 0.6\. Range: 0\...1\.; -#X msg 110 464 @bypass; -#X text 245 464 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 506 @drywet; -#X text 245 506 Get/Set proportion of mix between the original (dry) +#X msg 110 556 @bypass; +#X text 245 556 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 598 @drywet; +#X text 245 598 Get/Set proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal \, 1 - wet. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 563 @speed; -#X text 245 563 Get/Set automatisation speed. Type: float. Units: bpm. +#X msg 110 655 @speed; +#X text 245 655 Get/Set automatisation speed. Type: float. Units: bpm. Default value: 540\. Range: 360\...780\.; -#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 620 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 707 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 712 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 621 1\.; -#X text 245 621 input signal.; -#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 656 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 713 1\.; +#X text 245 713 input signal.; +#X obj 20 743 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 748 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 657 1\.; -#X text 245 657; +#X text 110 749 1\.; +#X text 245 749; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 707 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 710 library: ceammc v0.9.4; -#N canvas 10 729 400 290 info 0; +#X obj 1 799 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 802 library: ceammc v0.9.6; +#N canvas 10 821 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.wahwah~; #X text 10 76 category:; @@ -73,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 729 pd info; +#X restore 10 821 pd info; #X connect 4 0 5 0; #X connect 6 0 7 0; #X connect 5 0 8 0; diff --git a/ceammc/ext/doc/fx.wahwah~.pddoc b/ceammc/ext/doc/fx.wahwah~.pddoc index aaa5f6f10f..51cf8f4401 100644 --- a/ceammc/ext/doc/fx.wahwah~.pddoc +++ b/ceammc/ext/doc/fx.wahwah~.pddoc @@ -13,6 +13,11 @@ wahwah guitar crybaby 0.6 + + pedal angle + + automatisation speed + pedal angle @@ -21,10 +26,9 @@ proportion of mix between the original (dry) and 'effected' (wet) signals. 0 - dry signal, 1 - wet. - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing + if set to 1 - bypass 'effected' + signal. + on/off dsp processing diff --git a/ceammc/ext/doc/fx.zita_rev1~-help.pd b/ceammc/ext/doc/fx.zita_rev1~-help.pd index 0709e03ed7..b2a7d91b89 100644 --- a/ceammc/ext/doc/fx.zita_rev1~-help.pd +++ b/ceammc/ext/doc/fx.zita_rev1~-help.pd @@ -40,88 +40,93 @@ -49933 0; #X text 110 625 1\.; #X text 150 625 float; -#X obj 246 626 cnv 1 116 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 625 decay_low(sec): time (in seconds) to decay 60dB in -low-frequency band. Type: float. Range: 1\...8; +#X obj 246 626 cnv 1 115 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 625 DECAY_LOW(sec): time (in seconds) to decay 60dB in +low-frequency band. Type: float. Range: 1\...60; #X text 110 660 2\.; #X text 150 660 float; -#X obj 246 661 cnv 1 116 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 660 decay_mid(sec): time (in seconds) to decay 60dB in -mid-frequency band. Type: float. Range: 1\...8; -#X obj 20 705 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 710 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 661 cnv 1 115 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 660 DECAY_MID(sec): time (in seconds) to decay 60dB in +mid-frequency band. Type: float. Range: 1\...60; +#X text 110 695 3\.; +#X text 150 695 float; +#X obj 246 696 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 695 DRYWET: ratio between source signal (dry) and processed +signal (wet). Type: float. Range: 0\...1; +#X obj 20 740 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 745 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 745 @active; -#X text 245 745 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 787 @bypass; -#X text 245 787 Get/Set if set to 1 - bypass 'effected' signal. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 829 @damp_hf; -#X text 245 829 Get/Set Frequency (Hz) at which the high-frequency +#X msg 110 780 @active; +#X text 245 780 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 809 @bypass; +#X text 245 809 Get/Set if set to 1 - bypass 'effected' signal. Type: +bool. Default value: 0\.; +#X msg 110 851 @damp_hf; +#X text 245 851 Get/Set Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60\. Type: float. Units: Hz. Default value: 6000\. Range: 1500\...47040\.; -#X msg 110 886 @decay_low; -#X text 245 886 Get/Set time (in seconds) to decay 60dB in low-frequency +#X msg 110 908 @decay_low; +#X text 245 908 Get/Set time (in seconds) to decay 60dB in low-frequency band. Type: float. Units: sec. Default value: 3\. Range: 1\...60\.; -#X msg 110 943 @decay_mid; -#X text 245 943 Get/Set time (in seconds) to decay 60dB in mid-frequency +#X msg 110 965 @decay_mid; +#X text 245 965 Get/Set time (in seconds) to decay 60dB in mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 1\...60\.; -#X msg 110 1000 @delay; -#X text 245 1000 Get/Set a delay of 20 to 100 ms operating on the 'wet' -signal. Large values will provide the impression of a larger room. -Type: float. Units: ms. Default value: 60\. Range: 20\...100\.; -#X msg 110 1072 @drywet; -#X text 245 1072 Get/Set Ratio between processed signal (wet) and source -signal. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1114 @fr_ldecay; -#X text 245 1114 Get/Set time (in seconds) to decay 60dB in low-frequency +#X msg 110 1022 @drywet; +#X text 245 1022 Get/Set Ratio between source signal (dry) and processed +signal (wet). Type: float. Default value: 1\. Range: 0\...1\.; +#X msg 110 1064 @fr_ldecay; +#X text 245 1064 Get/Set time (in seconds) to decay 60dB in low-frequency band. Type: float. Units: sec. Default value: 40\. Range: 0\...60\.; -#X msg 110 1171 @fr_mdecay; -#X text 245 1171 Get/Set time (in seconds) to decay 60dB in mid-frequency +#X msg 110 1121 @fr_mdecay; +#X text 245 1121 Get/Set time (in seconds) to decay 60dB in mid-frequency band. Type: float. Units: sec. Default value: 40\. Range: 0\...60\.; -#X msg 110 1228 @fr_time; -#X text 245 1228 Get/Set length of freeze tail. Type: float. Units: +#X msg 110 1178 @fr_time; +#X text 245 1178 Get/Set length of freeze tail. Type: float. Units: ms. Default value: 100\. Range: 0\...1000\.; -#X msg 110 1270 @freeze; -#X text 245 1270 Get/Set freeze reverberation tail. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1312 @freq_low; -#X text 245 1312 Get/Set Crossover frequency (Hz) separating low and +#X msg 110 1220 @freeze; +#X text 245 1220 Get/Set freeze reverberation tail. Type: bool. Default +value: 0\.; +#X msg 110 1262 @freq_low; +#X text 245 1262 Get/Set Crossover frequency (Hz) separating low and middle frequencies. Type: float. Units: Hz. Default value: 200\. Range: 50\...1000\.; -#X obj 20 1379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1384 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 1319 @predelay; +#X text 245 1319 Get/Set a delay operating on the 'wet' signal. Large +values will provide the impression of a larger room. Type: float. Units: +ms. Default value: 40\. Range: 0\...100\.; +#X obj 20 1386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1391 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1419 reset; -#X text 245 1419 same as reset.; -#X obj 20 1456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1461 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1426 reset; +#X text 245 1426 same as reset.; +#X obj 20 1463 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1468 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1462 1\.; -#X text 245 1462 left channel.; -#X text 110 1482 2\.; -#X text 245 1482 right channel.; -#X obj 20 1512 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1517 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1469 1\.; +#X text 245 1469 left channel.; +#X text 110 1489 2\.; +#X text 245 1489 right channel.; +#X obj 20 1519 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1524 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1518 1\.; -#X text 245 1518 output left.; -#X text 110 1538 2\.; -#X text 245 1538 output right.; +#X text 110 1525 1\.; +#X text 245 1525 output left.; +#X text 110 1545 2\.; +#X text 245 1545 output right.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title fx @url ceammc.fx-help.pd; -#X obj 1 1588 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1591 library: ceammc v0.9.4; -#N canvas 10 1610 400 290 info 0; +#X obj 1 1595 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1598 library: ceammc v0.9.6; +#N canvas 10 1617 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 fx.zita_rev1~; #X text 10 76 category:; @@ -140,7 +145,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1610 pd info; +#X restore 10 1617 pd info; #X connect 4 0 7 0; #X connect 5 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/fx.zita_rev1~.pddoc b/ceammc/ext/doc/fx.zita_rev1~.pddoc index ee2cb5f28b..d36e367e7e 100644 --- a/ceammc/ext/doc/fx.zita_rev1~.pddoc +++ b/ceammc/ext/doc/fx.zita_rev1~.pddoc @@ -14,10 +14,12 @@ 0.2 - time + time (in seconds) to decay 60dB in low-frequency band - time + time (in seconds) to decay 60dB in mid-frequency band + ratio between source + signal (dry) and processed signal (wet) same as reset @@ -27,22 +29,20 @@ units="second">time (in seconds) to decay 60dB in low-frequency band time (in seconds) to decay 60dB in mid-frequency band - a delay of 20 to 100 ms operating on the 'wet' signal. Large values - will provide the impression of a larger room + a delay operating on the 'wet' signal. Large values will provide + the impression of a larger room Crossover frequency (Hz) separating low and middle frequencies + units="hertz">Crossover frequency (Hz) separating low and middle frequencies Frequency (Hz) at which the high-frequency T60 is half the middle-band's + units="hertz">Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60 Ratio - between processed signal (wet) and source signal - if set to 1 - bypass - 'effected' signal. - on/off dsp - processing - freeze reverberation - tail + between source signal (dry) and processed signal (wet) + if set to 1 - bypass 'effected' + signal. + on/off dsp processing + freeze reverberation tail time (in seconds) to decay 60dB in mid-frequency band Defines global scope dict variable, accessed by ID name and available from everywhere + + open data editor + object ID - keys of dictionary - 1 if dict is - empty, otherwise 0 - number of + keys of + dictionary + 1 if dict is empty, + otherwise 0 + number of entries in dictionary @@ -39,6 +43,7 @@ entry key single value or list removes all dict values. No output + choose random key and output it get entry from dictionary entry key change entry in dictionary. If it's not exists, do nothing. diff --git a/ceammc/ext/doc/global.float-help.pd b/ceammc/ext/doc/global.float-help.pd index ee00aae88e..f0295f2354 100644 --- a/ceammc/ext/doc/global.float-help.pd +++ b/ceammc/ext/doc/global.float-help.pd @@ -64,7 +64,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 768 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 771 library: ceammc v0.9.4; +#X text 10 771 library: ceammc v0.9.6; #X text 500 783 see also:; #X obj 574 783 local.float; #X obj 668 783 global.int; @@ -73,7 +73,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 global.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/global.float.pddoc b/ceammc/ext/doc/global.float.pddoc index e52ddc97da..42d57e9a1e 100644 --- a/ceammc/ext/doc/global.float.pddoc +++ b/ceammc/ext/doc/global.float.pddoc @@ -24,7 +24,7 @@ object ID - current + current value diff --git a/ceammc/ext/doc/global.int-help.pd b/ceammc/ext/doc/global.int-help.pd index 67fa0d4964..d6ca0fd8c1 100644 --- a/ceammc/ext/doc/global.int-help.pd +++ b/ceammc/ext/doc/global.int-help.pd @@ -64,7 +64,7 @@ ID name.; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; #X obj 1 768 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 771 library: ceammc v0.9.4; +#X text 10 771 library: ceammc v0.9.6; #X text 579 783 see also:; #X obj 653 783 global.float; #N canvas 10 790 400 290 info 0; @@ -72,7 +72,7 @@ ID name.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 global.int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/global.int.pddoc b/ceammc/ext/doc/global.int.pddoc index 391c7279a5..b4849a729e 100644 --- a/ceammc/ext/doc/global.int.pddoc +++ b/ceammc/ext/doc/global.int.pddoc @@ -23,7 +23,8 @@ object ID - current value + current + value sets new value without output diff --git a/ceammc/ext/doc/global.list-help.pd b/ceammc/ext/doc/global.list-help.pd index 4b6f110569..05ca176f12 100644 --- a/ceammc/ext/doc/global.list-help.pd +++ b/ceammc/ext/doc/global.list-help.pd @@ -25,95 +25,110 @@ name.; #X text 150 348 symbol; #X obj 246 349 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 348 ID: object ID. Type: symbol.; -#X obj 20 378 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 383 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 368 2\.; +#X text 150 368 list; +#X obj 246 369 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 368 VALUE: initial values. Type: list.; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 418 @empty; -#X text 245 418 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 460 @size; -#X text 245 460 (readonly) Get number of elements in list. Type: int. +#X msg 110 438 @empty; +#X text 245 438 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 480 @value; +#X text 245 480 Get/Set current value. Type: list.; +#X msg 110 509 @size; +#X text 245 509 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 512 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 517 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 561 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 566 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 552 append; -#X text 245 552 adds values to the end of the list. Arguments are:; -#X obj 255 575 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 575 VAL: appended value. Type: atom.; -#X msg 110 600 choose; -#X text 245 600 choose random element in list and output it.; -#X msg 110 627 clear; -#X text 245 627 removes all list elements.; -#X msg 110 654 fill; -#X text 245 654 fills with specified value. Arguments are:; -#X obj 255 677 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 677 VAL: fill value. Type: atom.; -#X msg 110 702 insert; -#X text 245 702 inserts values to the specified position. Arguments +#X msg 110 601 append; +#X text 245 601 adds values to the end of the list. Arguments are:; +#X obj 255 624 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 624 VAL: appended value. Type: atom.; +#X msg 110 649 at; +#X text 245 649 outputs atom at the specified position. Arguments are:; +#X obj 255 672 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 672 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 712 back; +#X text 245 712 output last list element.; +#X msg 110 739 choose; +#X text 245 739 choose random element in list and output it.; +#X msg 110 766 clear; +#X text 245 766 removes all list elements.; +#X msg 110 793 fill; +#X text 245 793 fills with specified value. Arguments are:; +#X obj 255 816 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 816 VAL: fill value. Type: atom.; +#X msg 110 841 front; +#X text 245 841 output first list element.; +#X msg 110 868 insert; +#X text 245 868 inserts values to the specified position. Arguments are:; -#X obj 255 725 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 725 IDX: insert position. Type: int.; -#X obj 255 748 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 748 VAL: value. Type: atom.; -#X msg 110 773 pop; -#X text 245 773 removes last list element.; -#X msg 110 800 prepend; -#X text 245 800 inserts values to the list beginning. Arguments are:; -#X obj 255 823 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 823 VAL: prepended value. Type: atom.; -#X msg 110 848 remove; -#X text 245 848 removes specified element. Arguments are:; -#X obj 255 871 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 871 IDX: element index. Type: int.; -#X msg 110 896 reverse; -#X text 245 896 reverses list.; -#X msg 110 923 set; -#X text 245 923 sets new list without output. Arguments are:; -#X obj 255 946 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 946 LIST: new list content. Type: list.; -#X msg 110 971 shuffle; -#X text 245 971 put elements in random order.; -#X msg 110 998 sort; -#X text 245 998 sorts list.; -#X msg 110 1025 dump; -#X text 245 1025 dump object info to Pd window.; -#X obj 20 1062 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1067 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 891 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 891 IDX: insert position. Type: int.; +#X obj 255 914 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 914 VAL: value. Type: atom.; +#X msg 110 939 pop; +#X text 245 939 removes last list element.; +#X msg 110 966 prepend; +#X text 245 966 inserts values to the list beginning. Arguments are:; +#X obj 255 989 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 989 VAL: prepended value. Type: atom.; +#X msg 110 1014 remove; +#X text 245 1014 removes specified element. Arguments are:; +#X obj 255 1037 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1037 IDX: element index. Type: int.; +#X msg 110 1062 reverse; +#X text 245 1062 reverses list.; +#X msg 110 1089 set; +#X text 245 1089 sets new list without output. Arguments are:; +#X obj 255 1112 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1112 LIST: new list content. Type: list.; +#X msg 110 1137 shuffle; +#X text 245 1137 put elements in random order.; +#X msg 110 1164 sort; +#X text 245 1164 sorts list.; +#X msg 110 1191 dump; +#X text 245 1191 dump object info to Pd window.; +#X obj 20 1228 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1233 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1068 1\.; -#X text 150 1068 *bang*; -#X text 245 1068 output list content.; -#X text 150 1088 *float*; -#X text 245 1088 outputs list element at specified position. Negative +#X text 110 1234 1\.; +#X text 150 1234 *bang*; +#X text 245 1234 output list content.; +#X text 150 1254 *float*; +#X text 245 1254 outputs list element at specified position. Negative indexes are supported.; -#X text 150 1123 *symbol*; -#X text 245 1123 set new list with single symbol element and output.; -#X text 150 1143 *list*; -#X text 245 1143 set new list content and output.; -#X text 150 1163 *data:mlist*; -#X text 245 1163 same as list.; -#X obj 20 1193 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1198 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1289 *symbol*; +#X text 245 1289 set new list with single symbol element and output.; +#X text 150 1309 *list*; +#X text 245 1309 set new list content and output.; +#X text 150 1329 *data:mlist*; +#X text 245 1329 same as list.; +#X obj 20 1359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1364 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1199 1\.; -#X text 245 1199 list output.; +#X text 110 1365 1\.; +#X text 245 1365 list output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; -#X obj 1 1249 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1252 library: ceammc v0.9.4; -#X text 492 1264 see also:; -#X obj 566 1264 global.float; -#X obj 668 1264 global.int; -#N canvas 10 1271 400 290 info 0; +#X obj 1 1415 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1418 library: ceammc v0.9.6; +#X text 492 1430 see also:; +#X obj 566 1430 global.float; +#X obj 668 1430 global.int; +#N canvas 10 1437 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 global.list; #X text 10 76 category:; @@ -132,7 +147,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1271 pd info; +#X restore 10 1437 pd info; #X connect 6 0 10 0; #X connect 8 0 10 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/global.list.pddoc b/ceammc/ext/doc/global.list.pddoc index 581326352a..c4490cd6f1 100644 --- a/ceammc/ext/doc/global.list.pddoc +++ b/ceammc/ext/doc/global.list.pddoc @@ -22,18 +22,25 @@ object ID + initial values - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list + current value adds values to the end of the list appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/global.mlist-help.pd b/ceammc/ext/doc/global.mlist-help.pd index 3c08dab2b7..0f65688b86 100644 --- a/ceammc/ext/doc/global.mlist-help.pd +++ b/ceammc/ext/doc/global.mlist-help.pd @@ -16,102 +16,116 @@ name; #X obj 318 201 ui.display @display_type 1; #X obj 50 230 ui.display @display_type 1; #X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 284 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 20 284 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 319 1\.; -#X text 150 319 symbol; -#X obj 246 320 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 ID: object ID. Type: symbol.; +#X text 110 319 Left-click; +#X text 285 319 open data editor.; #X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 354 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 354 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 389 @empty; -#X text 245 389 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 431 @size; -#X text 245 431 (readonly) Get number of elements in list. Type: int. +#X text 110 389 1\.; +#X text 150 389 symbol; +#X obj 246 390 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 389 ID: object ID. Type: symbol.; +#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 424 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 459 @empty; +#X text 245 459 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 501 @size; +#X text 245 501 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 488 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 558 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 523 append; -#X text 245 523 adds values to the end of the list. Arguments are:; -#X obj 255 546 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 546 VAL: appended value. Type: atom.; -#X msg 110 571 choose; -#X text 245 571 choose random element in list and output it.; -#X msg 110 598 clear; -#X text 245 598 removes all list elements.; -#X msg 110 625 fill; -#X text 245 625 fills with specified value. Arguments are:; -#X obj 255 648 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 648 VAL: fill value. Type: atom.; -#X msg 110 673 insert; -#X text 245 673 inserts values to the specified position. Arguments +#X msg 110 593 append; +#X text 245 593 adds values to the end of the list. Arguments are:; +#X obj 255 616 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 616 VAL: appended value. Type: atom.; +#X msg 110 641 at; +#X text 245 641 outputs atom at the specified position. Arguments are:; +#X obj 255 664 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 664 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 704 back; +#X text 245 704 output last list element.; +#X msg 110 731 choose; +#X text 245 731 choose random element in list and output it.; +#X msg 110 758 clear; +#X text 245 758 removes all list elements.; +#X msg 110 785 fill; +#X text 245 785 fills with specified value. Arguments are:; +#X obj 255 808 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 808 VAL: fill value. Type: atom.; +#X msg 110 833 front; +#X text 245 833 output first list element.; +#X msg 110 860 insert; +#X text 245 860 inserts values to the specified position. Arguments are:; -#X obj 255 696 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 696 IDX: insert position. Type: int.; -#X obj 255 719 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 719 VAL: value. Type: atom.; -#X msg 110 744 pop; -#X text 245 744 removes last list element.; -#X msg 110 771 prepend; -#X text 245 771 inserts values to the list beginning. Arguments are:; -#X obj 255 794 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 794 VAL: prepended value. Type: atom.; -#X msg 110 819 remove; -#X text 245 819 removes specified element. Arguments are:; -#X obj 255 842 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 842 IDX: element index. Type: int.; -#X msg 110 867 reverse; -#X text 245 867 reverses list.; -#X msg 110 894 set; -#X text 245 894 sets new list without output. Arguments are:; -#X obj 255 917 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 917 LIST: new list content. Type: list.; -#X msg 110 942 shuffle; -#X text 245 942 put elements in random order.; -#X msg 110 969 sort; -#X text 245 969 sorts list.; -#X msg 110 996 (....); -#X text 245 996 sets new list without output.; -#X msg 110 1023 dump; -#X text 245 1023 dump object info to Pd window.; -#X obj 20 1060 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1065 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 883 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 883 IDX: insert position. Type: int.; +#X obj 255 906 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 906 VAL: value. Type: atom.; +#X msg 110 931 pop; +#X text 245 931 removes last list element.; +#X msg 110 958 prepend; +#X text 245 958 inserts values to the list beginning. Arguments are:; +#X obj 255 981 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 981 VAL: prepended value. Type: atom.; +#X msg 110 1006 remove; +#X text 245 1006 removes specified element. Arguments are:; +#X obj 255 1029 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1029 IDX: element index. Type: int.; +#X msg 110 1054 reverse; +#X text 245 1054 reverses list.; +#X msg 110 1081 set; +#X text 245 1081 sets new list without output. Arguments are:; +#X obj 255 1104 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1104 LIST: new list content. Type: list.; +#X msg 110 1129 shuffle; +#X text 245 1129 put elements in random order.; +#X msg 110 1156 sort; +#X text 245 1156 sorts list.; +#X msg 110 1183 (....); +#X text 245 1183 sets new list without output.; +#X msg 110 1210 dump; +#X text 245 1210 dump object info to Pd window.; +#X obj 20 1247 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1252 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1066 1\.; -#X text 150 1066 *bang*; -#X text 245 1066 output list content.; -#X text 150 1086 *data:mlist*; -#X text 245 1086 same as list.; -#X text 150 1106 *float*; -#X text 245 1106 set new mlist content and output.; -#X text 150 1126 *symbol*; -#X text 245 1126 set new mlist content and output.; -#X text 150 1146 *list*; -#X text 245 1146 set new mlist content and output.; -#X obj 20 1176 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1181 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1253 1\.; +#X text 150 1253 *bang*; +#X text 245 1253 output list content.; +#X text 150 1273 *data:mlist*; +#X text 245 1273 same as list.; +#X text 150 1293 *float*; +#X text 245 1293 set new mlist content and output.; +#X text 150 1313 *symbol*; +#X text 245 1313 set new mlist content and output.; +#X text 150 1333 *list*; +#X text 245 1333 set new mlist content and output.; +#X obj 20 1363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1368 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1182 1\.; -#X text 245 1182 mlist output.; +#X text 110 1369 1\.; +#X text 245 1369 mlist output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; -#X obj 1 1232 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1235 library: ceammc v0.9.4; -#X text 500 1247 see also:; -#X obj 574 1247 data.mlist; -#X obj 661 1247 local.mlist; -#N canvas 10 1254 400 290 info 0; +#X obj 1 1419 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1422 library: ceammc v0.9.6; +#X text 500 1434 see also:; +#X obj 574 1434 data.mlist; +#X obj 661 1434 local.mlist; +#N canvas 10 1441 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 global.mlist; #X text 10 76 category:; @@ -130,7 +144,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1254 pd info; +#X restore 10 1441 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/global.mlist.pddoc b/ceammc/ext/doc/global.mlist.pddoc index 003e4bd293..03d1019d10 100644 --- a/ceammc/ext/doc/global.mlist.pddoc +++ b/ceammc/ext/doc/global.mlist.pddoc @@ -20,13 +20,16 @@ Defines global scope mlist variable, accessed by ID name + + open data editor + object ID - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list @@ -34,6 +37,11 @@ appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/global.set-help.pd b/ceammc/ext/doc/global.set-help.pd index 1da49d0486..2f71878aed 100644 --- a/ceammc/ext/doc/global.set-help.pd +++ b/ceammc/ext/doc/global.set-help.pd @@ -16,76 +16,84 @@ name; #X msg 328 143 bang; #X obj 50 201 global.set s1; #X obj 328 201 global.set s1; -#X obj 50 230 ui.display @display_type 1; -#X obj 328 230 ui.display @display_type 1; -#X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 284 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 230 ui.dt; +#X obj 328 230 ui.dt; +#X obj 50 259 global.set.abs; +#X obj 20 308 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 313 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 319 1\.; -#X text 150 319 symbol; -#X obj 246 320 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 ID: object ID. Type: symbol.; -#X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 354 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 348 Left-click; +#X text 285 348 open data editor.; +#X obj 20 378 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 383 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 389 @empty; -#X text 245 389 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 431 @size; -#X text 245 431 (readonly) Get number of elements in list. Type: int. +#X text 110 418 1\.; +#X text 150 418 symbol; +#X obj 246 419 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 418 ID: object ID. Type: symbol.; +#X obj 20 448 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 453 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 488 @empty; +#X text 245 488 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 530 @size; +#X text 245 530 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 488 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 582 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 587 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 523 add; -#X text 245 523 add values to the set. Arguments are:; -#X obj 255 546 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 546 VAL: added values. Type: list.; -#X msg 110 571 clear; -#X text 245 571 removes all set elements.; -#X msg 110 598 remove; -#X text 245 598 remove elements from the set. Arguments are:; -#X obj 255 621 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 621 VAL: elements. Type: list.; -#X msg 110 646 set; -#X text 245 646 sets new set content without output. Arguments are:; -#X obj 255 669 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 669 LIST: new set content. Type: list.; -#X obj 20 704 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 709 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 622 add; +#X text 245 622 add values to the set. Arguments are:; +#X obj 255 645 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 645 VAL: added values. Type: list.; +#X msg 110 670 choose; +#X text 245 670 choose random element and output it.; +#X msg 110 697 clear; +#X text 245 697 removes all set elements.; +#X msg 110 724 remove; +#X text 245 724 remove elements from the set. Arguments are:; +#X obj 255 747 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 747 VAL: elements. Type: list.; +#X msg 110 772 set; +#X text 245 772 sets new set content without output. Arguments are:; +#X obj 255 795 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 795 LIST: new set content. Type: list.; +#X obj 20 830 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 835 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 710 1\.; -#X text 150 710 *bang*; -#X text 245 710 output set content.; -#X text 150 730 *float*; -#X text 245 730 adds new element to set \, no output.; -#X text 150 750 *symbol*; -#X text 245 750 adds new element to set \, no output.; -#X text 150 770 *list*; -#X text 245 770 adds new elements to set \, no output.; -#X text 150 790 *data:set*; -#X text 245 790 set new set content and output.; -#X obj 20 820 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 825 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 836 1\.; +#X text 150 836 *bang*; +#X text 245 836 output set content.; +#X text 150 856 *float*; +#X text 245 856 adds new element to set \, no output.; +#X text 150 876 *symbol*; +#X text 245 876 adds new element to set \, no output.; +#X text 150 896 *list*; +#X text 245 896 adds new elements to set \, no output.; +#X text 150 916 *data:set*; +#X text 245 916 set new set content and output.; +#X obj 20 946 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 951 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 826 1\.; -#X text 245 826 set output.; +#X text 110 952 1\.; +#X text 245 952 set output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title global @url ceammc.global-help.pd; -#X obj 1 876 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 879 library: ceammc v0.9.4; -#X text 529 891 see also:; -#X obj 603 891 data.set; -#X obj 676 891 local.set; -#N canvas 10 898 400 290 info 0; +#X obj 1 1002 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1005 library: ceammc v0.9.6; +#X text 529 1017 see also:; +#X obj 603 1017 data.set; +#X obj 676 1017 local.set; +#N canvas 10 1024 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 global.set; #X text 10 76 category:; @@ -104,7 +112,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 898 pd info; +#X restore 10 1024 pd info; #X connect 6 0 11 0; #X connect 7 0 11 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/global.set.abs.pd b/ceammc/ext/doc/global.set.abs.pd new file mode 100644 index 0000000000..8d3d273bd1 --- /dev/null +++ b/ceammc/ext/doc/global.set.abs.pd @@ -0,0 +1,6 @@ +#N canvas 0 0 457 213 12; +#X msg 20 48 bang; +#X obj 20 77 global.set s1; +#X obj 20 106 ui.dt; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/ceammc/ext/doc/global.set.pddoc b/ceammc/ext/doc/global.set.pddoc index 670244c0d6..a5f63271d5 100644 --- a/ceammc/ext/doc/global.set.pddoc +++ b/ceammc/ext/doc/global.set.pddoc @@ -20,13 +20,16 @@ Defines global scope set variable, accessed by ID name + + open data editor + object ID - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list @@ -37,6 +40,7 @@ elements sets new set content without output new set content + choose random element and output it @@ -59,7 +63,18 @@ | | | | | [global.set s1] [global.set s1] | | -[ui.display @display_type 1] [ui.display @display_type 1] +[ui.dt] [ui.dt] + +[global.set.abs] +]]> + + + diff --git a/ceammc/ext/doc/hoa.2d.decoder~-help.pd b/ceammc/ext/doc/hoa.2d.decoder~-help.pd index 91439628ce..fd9399d2cf 100644 --- a/ceammc/ext/doc/hoa.2d.decoder~-help.pd +++ b/ceammc/ext/doc/hoa.2d.decoder~-help.pd @@ -52,7 +52,7 @@ mode). Type: int.; -49933 0; #X msg 110 739 @angles; #X text 245 739 Get/Set angles of loudspeakers. Only available for -@irregular mode. Type: list. Units: deg.; +@irregular mode. Type: list. Units: deg. Default value: 0 90 180 270\.; #X msg 110 781 @binaural; #X text 245 781 alias for @mode binaural.; #X msg 110 810 @crop; @@ -61,36 +61,36 @@ Type: int. Units: samp. Default value: 16\. Range: 0\...512\.; #X msg 110 852 @irregular; #X text 245 852 alias for @mode irregular.; #X msg 110 881 @mode; -#X text 245 881 (readonly) Get decoding mode. Type: symbol. Default -value: regular. Allowed values: regular \, irregular \, binaural.; +#X text 245 881 Get/Set decoding mode. Type: symbol. Default value: +regular. Allowed values: regular \, irregular \, binaural.; #X msg 110 923 @nharm; #X text 245 923 (readonly) Get number of circular harmonics. Type: int. Default value: 3\. Min value: 1\.; #X msg 110 965 @nwaves; -#X text 245 965 (readonly) Get number of plain waves. Type: int. Default -value: 0\. Min value: 1\.; +#X text 245 965 (initonly) Get/Set number of plain waves. Type: int. +Default value: 0\. Min value: 1\.; #X msg 110 1007 @offset; #X text 245 1007 Get/Set rotation of loudspeakers. Only available for @regular and @irregular mode. Type: float. Units: deg. Default value: 0\.; #X msg 110 1064 @order; -#X text 245 1064 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 1064 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X msg 110 1106 @pw_x; #X text 245 1106 (readonly) Get list of plain wave x-coordinates (abscissas). -1 is the left of the soundfield \, 0 is the center of the soundfield -and 1 is the right of the soundfield. Type: list. Units: rad. Range: --1\...1\.; +and 1 is the right of the soundfield. Type: list. Units: rad. Default +value: 0 -1 0 1\. Range: -1\...1\.; #X msg 110 1178 @pw_y; #X text 245 1178 (readonly) Get list of plain wave y-coordinates (ordinatas). -1 is the back of the soundfield \, 0 is the center of the soundfield -and 1 is the front of the soundfield. Type: list. Units: rad. Range: --1\...1\.; +and 1 is the front of the soundfield. Type: list. Units: rad. Default +value: 1 0 -1 0\. Range: -1\...1\.; #X msg 110 1250 @pw_z; #X text 245 1250 (readonly) Get list of plain wave z-coordinates (heights). -1 is the bottom of the soundfield \, 0 is the center of the soundfield -and 1 is the top of the soundfield. Type: list. Units: rad. Range: --1\...1\.; +and 1 is the top of the soundfield. Type: list. Units: rad. Default +value: 0 0 0 0\. Range: -1\...1\.; #X msg 110 1322 @regular; #X text 245 1322 alias for @mode regular.; #X obj 20 1361 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -117,7 +117,7 @@ and 1 is the top of the soundfield. Type: list. Units: rad. Range: #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 1533 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1536 library: ceammc v0.9.4; +#X text 10 1536 library: ceammc v0.9.6; #X text 579 1548 see also:; #X obj 653 1548 hoa.encoder~; #N canvas 10 1555 400 290 info 0; @@ -125,7 +125,7 @@ and 1 is the top of the soundfield. Type: list. Units: rad. Range: #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.decoder~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.decoder~.pddoc b/ceammc/ext/doc/hoa.2d.decoder~.pddoc index c99fa3e4c1..dcd0fcaf27 100644 --- a/ceammc/ext/doc/hoa.2d.decoder~.pddoc +++ b/ceammc/ext/doc/hoa.2d.decoder~.pddoc @@ -44,9 +44,9 @@ the order of decomposition + access="initonly">the order of decomposition decoding mode + enum="regular irregular binaural">decoding mode alias for @mode regular alias for @mode irregular alias for @mode binaural @@ -54,24 +54,24 @@ default="16">crop HRIR response. Only for @binaural mode. rotation of loudspeakers. Only available for @regular and @irregular mode. - angles of loudspeakers. Only - available for @irregular mode. + angles of + loudspeakers. Only available for @irregular mode. list of plain wave x-coordinates (abscissas). -1 is the left of the - soundfield, 0 is the center of the soundfield and 1 is the right of the - soundfield. + access="readonly" default="0 -1 0 1">list of plain wave x-coordinates (abscissas). -1 + is the left of the soundfield, 0 is the center of the soundfield and 1 is the right of + the soundfield. list of plain wave y-coordinates (ordinatas). -1 is the back of the - soundfield, 0 is the center of the soundfield and 1 is the front of the - soundfield. + access="readonly" default="1 0 -1 0">list of plain wave y-coordinates (ordinatas). -1 + is the back of the soundfield, 0 is the center of the soundfield and 1 is the front of + the soundfield. list of plain wave z-coordinates (heights). -1 is the bottom of the - soundfield, 0 is the center of the soundfield and 1 is the top of the + access="readonly" default="0 0 0 0">list of plain wave z-coordinates (heights). -1 is + the bottom of the soundfield, 0 is the center of the soundfield and 1 is the top of the soundfield. - number of + number of circular harmonics. - number of - plain waves. + number + of plain waves. diff --git a/ceammc/ext/doc/hoa.2d.encoder~-help.pd b/ceammc/ext/doc/hoa.2d.encoder~-help.pd index 71749cf1ae..75cbd0f2a2 100644 --- a/ceammc/ext/doc/hoa.2d.encoder~-help.pd +++ b/ceammc/ext/doc/hoa.2d.encoder~-help.pd @@ -31,8 +31,8 @@ of a given order and a position on a circle given in radians (θ).; #X obj 20 579 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 614 @order; -#X text 245 614 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 614 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X obj 20 666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 671 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -55,7 +55,7 @@ Default value: 1\. Range: 1\...63\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 818 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 821 library: ceammc v0.9.4; +#X text 10 821 library: ceammc v0.9.6; #X text 557 833 see also:; #X obj 631 833 hoa.2d.decoder~; #N canvas 10 840 400 290 info 0; @@ -63,7 +63,7 @@ Default value: 1\. Range: 1\...63\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.encoder~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.encoder~.pddoc b/ceammc/ext/doc/hoa.2d.encoder~.pddoc index a26406c3f5..17ce48e783 100644 --- a/ceammc/ext/doc/hoa.2d.encoder~.pddoc +++ b/ceammc/ext/doc/hoa.2d.encoder~.pddoc @@ -33,7 +33,7 @@ the order of decomposition + access="initonly">the order of decomposition diff --git a/ceammc/ext/doc/hoa.2d.map~-help.pd b/ceammc/ext/doc/hoa.2d.map~-help.pd index 85c1335ca2..03a5339569 100644 --- a/ceammc/ext/doc/hoa.2d.map~-help.pd +++ b/ceammc/ext/doc/hoa.2d.map~-help.pd @@ -48,74 +48,69 @@ values; #X text 150 1027 int; #X obj 246 1028 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 1027 NSRC: number of sources. Type: int. Min value: 1; -#X text 110 1047 3\.; -#X text 150 1047 symbol; -#X obj 246 1048 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 1047 MODE: decoding mode. Allowed values: cartesian \, -polar. . Type: symbol.; -#X obj 20 1092 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1097 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 1057 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1062 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 1132 @nsrc; -#X text 245 1132 (readonly) Get number of input sources. Type: int. -Default value: 1\. Range: 1\...63\.; -#X msg 110 1174 @order; -#X text 245 1174 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; -#X msg 110 1216 @ramp; -#X text 245 1216 Get/Set ramp time. Type: float. Default value: 100\. +#X msg 110 1097 @nsrc; +#X text 245 1097 (initonly) Get/Set number of input sources. Type: +int. Default value: 1\. Min value: 1\.; +#X msg 110 1139 @order; +#X text 245 1139 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; +#X msg 110 1181 @ramp; +#X text 245 1181 Get/Set ramp time. Type: float. Default value: 100\. Min value: 0\.; -#X obj 20 1268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1273 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1233 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1238 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1308 mute; -#X text 245 1308 mute/unmute specified source. Arguments are:; -#X obj 255 1331 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1331 IDX: source index. Type: int. Min value: 0\.; -#X obj 255 1354 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1354 STATE: mute value. Type: int. Allowed values: 0 \, +#X msg 110 1273 mute; +#X text 245 1273 mute/unmute specified source. Arguments are:; +#X obj 255 1296 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1296 IDX: source index. Type: int. Min value: 0\.; +#X obj 255 1319 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1319 STATE: mute value. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1379 polar; -#X text 245 1379 set source mapping in polar coordinates. Arguments +#X msg 110 1344 polar; +#X text 245 1344 set source mapping in polar coordinates. Arguments are:; -#X obj 255 1402 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1402 IDX: source index. Type: int. Min value: 0\.; -#X obj 255 1425 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1425 RAD: radius. Type: float. Range: 0\...1\.; -#X obj 255 1448 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1448 ANG: rotation angle. Type: float. Range: 0\...2π. +#X obj 255 1367 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1367 IDX: source index. Type: int. Min value: 0\.; +#X obj 255 1390 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1390 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 1413 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1413 ANG: rotation angle. Type: float. Range: 0\...2π. Units: rad.; -#X obj 20 1483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1488 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1448 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1453 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1489 1\.; -#X text 245 1489 first source input.; -#X text 110 1509 ....; -#X text 245 1509 ... source input.; -#X text 110 1529 n.; -#X text 245 1529 n-th source input.; -#X obj 20 1559 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1564 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1454 1\.; +#X text 245 1454 first source input.; +#X text 110 1474 ....; +#X text 245 1474 ... source input.; +#X text 110 1494 n.; +#X text 245 1494 n-th source input.; +#X obj 20 1524 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1529 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1565 1\.; -#X text 245 1565 first harmonic output.; -#X text 110 1585 ....; -#X text 245 1585 ... harmonic output.; -#X text 110 1605 n.; -#X text 245 1605 n-th harmonic output.; +#X text 110 1530 1\.; +#X text 245 1530 first harmonic output.; +#X text 110 1550 ....; +#X text 245 1550 ... harmonic output.; +#X text 110 1570 n.; +#X text 245 1570 n-th harmonic output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 1655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1658 library: ceammc v0.9.4; -#N canvas 10 1677 400 290 info 0; +#X obj 1 1620 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1623 library: ceammc v0.9.6; +#N canvas 10 1642 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.map~; #X text 10 76 category:; @@ -135,7 +130,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1677 pd info; +#X restore 10 1642 pd info; #X connect 10 0 12 0; #X connect 11 0 13 0; #X connect 9 0 14 0; diff --git a/ceammc/ext/doc/hoa.2d.map~.pddoc b/ceammc/ext/doc/hoa.2d.map~.pddoc index d393e198b6..980c01f604 100644 --- a/ceammc/ext/doc/hoa.2d.map~.pddoc +++ b/ceammc/ext/doc/hoa.2d.map~.pddoc @@ -28,13 +28,12 @@ the order of decomposition number of sources - decoding mode the order of decomposition - number of input sources + access="initonly">the order of decomposition + number of + input sources ramp time diff --git a/ceammc/ext/doc/hoa.2d.optim~-help.pd b/ceammc/ext/doc/hoa.2d.optim~-help.pd index 7fc4ac3622..e589d7d2f1 100644 --- a/ceammc/ext/doc/hoa.2d.optim~-help.pd +++ b/ceammc/ext/doc/hoa.2d.optim~-help.pd @@ -38,8 +38,8 @@ your ears.; #X text 110 791 1\.; #X text 150 791 int; #X obj 246 792 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 791 ORDER: the order of decomposition. Type: int. Min value: -1; +#X text 245 791 ORDER: the order of decomposition. Type: int. Range: +1\...63; #X text 110 811 2\.; #X text 150 811 symbol; #X obj 246 812 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -58,8 +58,8 @@ your ears.; #X text 245 983 Get/Set optimization mode. Type: symbol. Default value: basic. Allowed values: basic \, maxre \, inphase.; #X msg 110 1025 @order; -#X text 245 1025 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 1025 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X obj 20 1077 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 1082 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -84,7 +84,7 @@ Default value: 1\. Range: 1\...63\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 1249 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1252 library: ceammc v0.9.4; +#X text 10 1252 library: ceammc v0.9.6; #X text 557 1264 see also:; #X obj 631 1264 hoa.2d.decoder~; #N canvas 10 1271 400 290 info 0; @@ -92,7 +92,7 @@ Default value: 1\. Range: 1\...63\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.optim~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.optim~.pddoc b/ceammc/ext/doc/hoa.2d.optim~.pddoc index d154942e37..8eae434d86 100644 --- a/ceammc/ext/doc/hoa.2d.optim~.pddoc +++ b/ceammc/ext/doc/hoa.2d.optim~.pddoc @@ -33,13 +33,14 @@ CICM documentation - the order of decomposition + the order of + decomposition optimization mode the order of decomposition + access="initonly">the order of decomposition optimization mode alias for @mode basic (no optimization) diff --git a/ceammc/ext/doc/hoa.2d.projector~-help.pd b/ceammc/ext/doc/hoa.2d.projector~-help.pd index 78a4765afc..8323b6d73a 100644 --- a/ceammc/ext/doc/hoa.2d.projector~-help.pd +++ b/ceammc/ext/doc/hoa.2d.projector~-help.pd @@ -38,11 +38,11 @@ waves domain.; #X obj 20 590 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 625 @n; -#X text 245 625 (readonly) Get number of channels (planewaves). Type: -int. Default value: 0\. Range: 0\...63\.; +#X text 245 625 (initonly) Get/Set number of channels (planewaves). +Type: int. Default value: 0\. Range: 0\...63\.; #X msg 110 667 @order; -#X text 245 667 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 667 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X obj 20 719 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 724 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -67,7 +67,7 @@ Default value: 1\. Range: 1\...63\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 891 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 894 library: ceammc v0.9.4; +#X text 10 894 library: ceammc v0.9.6; #X text 535 906 see also:; #X obj 609 906 hoa.2d.recomposer~; #N canvas 10 913 400 290 info 0; @@ -75,7 +75,7 @@ Default value: 1\. Range: 1\...63\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.projector~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.projector~.pddoc b/ceammc/ext/doc/hoa.2d.projector~.pddoc index de1852ef23..371229da41 100644 --- a/ceammc/ext/doc/hoa.2d.projector~.pddoc +++ b/ceammc/ext/doc/hoa.2d.projector~.pddoc @@ -33,9 +33,9 @@ the order of decomposition - - number of channels (planewaves) + access="initonly">the order of decomposition + number of channels (planewaves) diff --git a/ceammc/ext/doc/hoa.2d.recomposer~-help.pd b/ceammc/ext/doc/hoa.2d.recomposer~-help.pd index e8ad703f9d..a8abdb4dc3 100644 --- a/ceammc/ext/doc/hoa.2d.recomposer~-help.pd +++ b/ceammc/ext/doc/hoa.2d.recomposer~-help.pd @@ -56,7 +56,7 @@ widening value for each channels.. Allowed values: fixe \, fisheye #X msg 110 1008 @free; #X text 245 1008 alias for @mode free.; #X msg 110 1037 @mode; -#X text 245 1037 (readonly) Get recomposition mode. There is three +#X text 245 1037 (initonly) Get/Set recomposition mode. There is three modes: *fixe* - simply recomposes a plane wave decomposition into circular harmonics. *fisheye* - allows you to perform an operation similar to the visual "fisheye" effect by distorsion of the sound field perspective @@ -64,11 +64,11 @@ to the front of the scene. *free* - allows you to change the angles and the widening value for each channels. Type: symbol. Default value: free. Allowed values: fixe \, fisheye \, free.; #X msg 110 1169 @n; -#X text 245 1169 (readonly) Get number of channels (planewaves). Type: -int. Default value: 0\. Range: 0\...63\.; +#X text 245 1169 (initonly) Get/Set number of channels (planewaves). +Type: int. Default value: 0\. Range: 0\...63\.; #X msg 110 1211 @order; -#X text 245 1211 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 1211 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X msg 110 1253 @ramp; #X text 245 1253 Get/Set ramp time. Type: float. Default value: 100\. Min value: 0\.; @@ -111,7 +111,7 @@ factor [0-1] in last inlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 1683 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1686 library: ceammc v0.9.4; +#X text 10 1686 library: ceammc v0.9.6; #X text 542 1698 see also:; #X obj 616 1698 hoa.2d.projector~; #N canvas 10 1705 400 290 info 0; @@ -119,7 +119,7 @@ factor [0-1] in last inlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.recomposer~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.recomposer~.pddoc b/ceammc/ext/doc/hoa.2d.recomposer~.pddoc index 30fee7bef9..5125c452b2 100644 --- a/ceammc/ext/doc/hoa.2d.recomposer~.pddoc +++ b/ceammc/ext/doc/hoa.2d.recomposer~.pddoc @@ -43,18 +43,19 @@ the order of decomposition - - number of channels (planewaves) + access="initonly">the order of decomposition + number of channels (planewaves) recomposition mode. There is three modes: *fixe* - simply recomposes a - plane wave decomposition into circular harmonics. *fisheye* - allows you to perform an - operation similar to the visual "fisheye" effect by distorsion of the sound field + access="initonly">recomposition mode. There is three modes: *fixe* - simply recomposes + a plane wave decomposition into circular harmonics. *fisheye* - allows you to perform + an operation similar to the visual "fisheye" effect by distorsion of the sound field perspective to the front of the scene. *free* - allows you to change the angles and the widening value for each channels. - alias for @mode fixe - alias for @mode fisheye - alias for @mode free + alias for @mode fixe + alias for @mode + fisheye + alias for @mode free ramp time diff --git a/ceammc/ext/doc/hoa.2d.rotate~-help.pd b/ceammc/ext/doc/hoa.2d.rotate~-help.pd index a7c13421bd..3d4651ae33 100644 --- a/ceammc/ext/doc/hoa.2d.rotate~-help.pd +++ b/ceammc/ext/doc/hoa.2d.rotate~-help.pd @@ -29,8 +29,8 @@ #X obj 20 559 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 594 @order; -#X text 245 594 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 594 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X obj 20 646 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 651 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -59,7 +59,7 @@ and 2π.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 868 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 871 library: ceammc v0.9.4; +#X text 10 871 library: ceammc v0.9.6; #X text 579 883 see also:; #X obj 653 883 hoa.encoder~; #N canvas 10 890 400 290 info 0; @@ -67,7 +67,7 @@ and 2π.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.rotate~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.rotate~.pddoc b/ceammc/ext/doc/hoa.2d.rotate~.pddoc index d7e5f9b33e..aff6808075 100644 --- a/ceammc/ext/doc/hoa.2d.rotate~.pddoc +++ b/ceammc/ext/doc/hoa.2d.rotate~.pddoc @@ -28,7 +28,7 @@ the order of decomposition + access="initonly">the order of decomposition diff --git a/ceammc/ext/doc/hoa.2d.wider~-help.pd b/ceammc/ext/doc/hoa.2d.wider~-help.pd index c667f7eb18..9ca951a603 100644 --- a/ceammc/ext/doc/hoa.2d.wider~-help.pd +++ b/ceammc/ext/doc/hoa.2d.wider~-help.pd @@ -31,8 +31,8 @@ in a logarithmic way to have linear changes.; #X obj 20 623 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 658 @order; -#X text 245 658 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; +#X text 245 658 (initonly) Get/Set the order of decomposition. Type: +int. Default value: 1\. Range: 1\...63\.; #X obj 20 710 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 715 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -59,13 +59,13 @@ Default value: 1\. Range: 1\...63\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 902 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 905 library: ceammc v0.9.4; +#X text 10 905 library: ceammc v0.9.6; #N canvas 10 924 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.2d.wider~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.2d.wider~.pddoc b/ceammc/ext/doc/hoa.2d.wider~.pddoc index 42e53c37da..199c9a15d9 100644 --- a/ceammc/ext/doc/hoa.2d.wider~.pddoc +++ b/ceammc/ext/doc/hoa.2d.wider~.pddoc @@ -31,7 +31,7 @@ the order of decomposition + access="initonly">the order of decomposition diff --git a/ceammc/ext/doc/hoa.@process-help.pd b/ceammc/ext/doc/hoa.@process-help.pd index 13e09ed4db..222d98f735 100644 --- a/ceammc/ext/doc/hoa.@process-help.pd +++ b/ceammc/ext/doc/hoa.@process-help.pd @@ -75,7 +75,7 @@ Type: int. Default value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 1041 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1044 library: ceammc v0.9.4; +#X text 10 1044 library: ceammc v0.9.6; #X text 579 1056 see also:; #X obj 653 1056 hoa.process~; #N canvas 10 1063 400 290 info 0; @@ -83,7 +83,7 @@ Type: int. Default value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.@process; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.@process.pddoc b/ceammc/ext/doc/hoa.@process.pddoc index 3ab9981ff1..a618945336 100644 --- a/ceammc/ext/doc/hoa.@process.pddoc +++ b/ceammc/ext/doc/hoa.@process.pddoc @@ -24,19 +24,19 @@ properties declared via [prop.declare] - current harmonic + current harmonic degree in hoa.process~ instance (only in harmonics mode) - current harmonic order - in hoa.process~ instance (only in harmonics mode) - current instance index + current harmonic + order in hoa.process~ instance (only in harmonics mode) + current instance index starting from 0 - order of parent + order of parent hoa.process~ - amibisonic + amibisonic mode - + amibisonic type - total number of + total number of hoa.process~ instances diff --git a/ceammc/ext/doc/hoa.in-help.pd b/ceammc/ext/doc/hoa.in-help.pd index 23e3cea723..a7d8d5daf1 100644 --- a/ceammc/ext/doc/hoa.in-help.pd +++ b/ceammc/ext/doc/hoa.in-help.pd @@ -50,7 +50,7 @@ value: 1\. Min value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 612 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 615 library: ceammc v0.9.4; +#X text 10 615 library: ceammc v0.9.6; #X text 476 627 see also:; #X obj 550 627 hoa.in~; #X obj 616 627 hoa.out; @@ -60,7 +60,7 @@ value: 1\. Min value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.in; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.in~-help.pd b/ceammc/ext/doc/hoa.in~-help.pd index 8ea9a513b6..c22bce650d 100644 --- a/ceammc/ext/doc/hoa.in~-help.pd +++ b/ceammc/ext/doc/hoa.in~-help.pd @@ -24,7 +24,7 @@ object; #X text 150 334 int; #X obj 246 335 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 334 EXTRA: shortcut for @extra property. Type: int. Min -value: 1; +value: 0; #X obj 20 364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 369 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -43,7 +43,7 @@ int. Default value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 527 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 530 library: ceammc v0.9.4; +#X text 10 530 library: ceammc v0.9.6; #X text 484 542 see also:; #X obj 558 542 hoa.in; #X obj 616 542 hoa.out; @@ -53,7 +53,7 @@ int. Default value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.in~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.in~.pddoc b/ceammc/ext/doc/hoa.in~.pddoc index 7494caab2b..a1318e39e8 100644 --- a/ceammc/ext/doc/hoa.in~.pddoc +++ b/ceammc/ext/doc/hoa.in~.pddoc @@ -25,7 +25,7 @@ defines a signal inlet for a patcher loaded by a hoa.process~ object - shortcut for @extra property + shortcut for @extra property extra inlet. Extra inlet diff --git a/ceammc/ext/doc/hoa.out-help.pd b/ceammc/ext/doc/hoa.out-help.pd index 47ea61e83c..ac9879cb88 100644 --- a/ceammc/ext/doc/hoa.out-help.pd +++ b/ceammc/ext/doc/hoa.out-help.pd @@ -64,7 +64,7 @@ object's message outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 767 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 770 library: ceammc v0.9.4; +#X text 10 770 library: ceammc v0.9.6; #X text 483 782 see also:; #X obj 557 782 hoa.out~; #X obj 631 782 hoa.in; @@ -74,7 +74,7 @@ object's message outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.out; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.out~-help.pd b/ceammc/ext/doc/hoa.out~-help.pd index 2f68c5d1ac..3e7c918346 100644 --- a/ceammc/ext/doc/hoa.out~-help.pd +++ b/ceammc/ext/doc/hoa.out~-help.pd @@ -32,8 +32,8 @@ value: 0; instance inlet and can be used to send signal to all instances. Type: int. Default value: 0\. Min value: 0\.; #X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 476 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; +#X obj 20 476 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; #X text 110 477 1\.; #X text 245 477 output signal in the corresponding hoa.process~ object's signal outlet.; @@ -43,7 +43,7 @@ signal outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 542 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 545 library: ceammc v0.9.4; +#X text 10 545 library: ceammc v0.9.6; #X text 492 557 see also:; #X obj 566 557 hoa.out; #X obj 631 557 hoa.in; @@ -53,7 +53,7 @@ signal outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.out~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hoa.out~.pddoc b/ceammc/ext/doc/hoa.out~.pddoc index 390a563da1..3f5bdcfb1f 100644 --- a/ceammc/ext/doc/hoa.out~.pddoc +++ b/ceammc/ext/doc/hoa.out~.pddoc @@ -32,10 +32,12 @@ are added to the "normal" instance inlet and can be used to send signal to all instances - - output signal in the corresponding hoa.process~ object's signal - outlet - + + + output signal in the corresponding hoa.process~ object's signal + outlet + + - the order of - decomposition - patch name + the order of decomposition + patch name process domain: harmonics or planewaves + instance arguments - - the order of decomposition/number of planewaves - patch name - the order of decomposition/number of planewaves + patch name + process domain: harmonics or planewaves - arguments passed to + arguments passed to instances diff --git a/ceammc/ext/doc/hoa.scope~-help.pd b/ceammc/ext/doc/hoa.scope~-help.pd index 670f11ffdd..7cadd34067 100644 --- a/ceammc/ext/doc/hoa.scope~-help.pd +++ b/ceammc/ext/doc/hoa.scope~-help.pd @@ -31,103 +31,98 @@ field; #X text 245 518 Get/Set gain. Type: float. Default value: 1\. Min value: 0\.; #X msg 110 547 @order; -#X text 245 547 (readonly) Get the order of decomposition. Type: int. -Default value: 1\. Range: 1\...63\.; -#X msg 110 589 @receive; -#X text 245 589 Get/Set receive source. Type: symbol. Default value: -(null).; -#X msg 110 618 @refresh; -#X text 245 618 Get/Set redraw time. Type: int. Units: ms. Default +#X text 245 547 Get/Set the order of decomposition. Type: int. Default +value: 1\. Range: 1\...63\.; +#X msg 110 589 @refresh; +#X text 245 589 Get/Set redraw time. Type: int. Units: ms. Default value: 100\. Range: 20\...1000\.; -#X msg 110 660 @send; -#X text 245 660 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 702 @view; -#X text 245 702 Get/Set view rotation. Type: float. Default value: +#X msg 110 631 @view; +#X text 245 631 Get/Set view rotation. Type: float. Default value: 0\.; -#X msg 110 731 @background_color; -#X text 245 731 Get/Set element background color (list of red \, green +#X msg 110 660 @background_color; +#X text 245 660 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 788 @border_color; -#X text 245 788 Get/Set border color (list of red \, green \, blue +#X msg 110 717 @border_color; +#X text 245 717 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 830 @label_color; -#X text 245 830 Get/Set label color in RGB format within 0-1 range +#X msg 110 759 @label_color; +#X text 245 759 Get/Set label color in RGB format within 0-1 range \, for example: 0.2 0.4 0.1\. Type: list. Default value: 0 0 0 1\.; -#X msg 110 872 @nh_color; -#X text 245 872 Get/Set negative harmonics color. Type: list. Default +#X msg 110 801 @nh_color; +#X text 245 801 Get/Set negative harmonics color. Type: list. Default value: 0 0 1 1\.; -#X msg 110 914 @ph_color; -#X text 245 914 Get/Set positive harmonics color. Type: list. Default +#X msg 110 843 @ph_color; +#X text 245 843 Get/Set positive harmonics color. Type: list. Default value: 1 0 0 1\.; -#X msg 110 956 @label; -#X text 245 956 Get/Set label text. Type: symbol. Default value: (null).; -#X msg 110 985 @label_align; -#X text 245 985 Get/Set label horizontal align. Type: symbol. Default +#X msg 110 885 @label; +#X text 245 885 Get/Set label text. Type: symbol. Default value: (null).; +#X msg 110 914 @label_align; +#X text 245 914 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1027 @label_inner; -#X text 245 1027 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1069 @label_margins; -#X text 245 1069 Get/Set label offset in pixels. Type: list. Default +#X msg 110 956 @label_inner; +#X text 245 956 Get/Set label position (1 - inner \, 0 - outer). Type: +bool. Default value: 0\.; +#X msg 110 998 @label_margins; +#X text 245 998 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1111 @label_side; -#X text 245 1111 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1040 @label_side; +#X text 245 1040 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1153 @label_valign; -#X text 245 1153 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1082 @label_valign; +#X text 245 1082 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1195 @fontname; -#X text 245 1195 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1224 @fontsize; -#X text 245 1224 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1266 @fontslant; -#X text 245 1266 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1124 @fontname; +#X text 245 1124 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1166 @fontsize; +#X text 245 1166 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1208 @fontslant; +#X text 245 1208 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1308 @fontweight; -#X text 245 1308 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1250 @fontweight; +#X text 245 1250 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1350 @pinned; -#X text 245 1350 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1392 @size; -#X text 245 1392 Get/Set element size (width \, height pair). Type: +#X msg 110 1292 @pinned; +#X text 245 1292 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1334 @size; +#X text 245 1334 Get/Set element size (width \, height pair). Type: list. Default value: 120 120\.; -#X obj 20 1444 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1449 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1391 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1484 pos; -#X text 245 1484 set UI element position. Arguments are:; -#X obj 255 1507 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1507 X: top left x-coord. Type: float.; -#X obj 255 1530 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1530 Y: top right y-coord. Type: float.; -#X msg 110 1555 dump; -#X text 245 1555 dumps all object info to Pd console window.; -#X obj 20 1592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1597 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1426 pos; +#X text 245 1426 set UI element position. Arguments are:; +#X obj 255 1449 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1449 X: top left x-coord. Type: float.; +#X obj 255 1472 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1472 Y: top right y-coord. Type: float.; +#X msg 110 1497 dump; +#X text 245 1497 dumps all object info to Pd console window.; +#X obj 20 1534 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1539 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1598 1\.; -#X text 245 1598 first input harmonic.; -#X text 110 1618 ....; -#X text 245 1618 ... input harmonic.; -#X text 110 1638 n.; -#X text 245 1638 n-th input harmonic.; +#X text 110 1540 1\.; +#X text 245 1540 first input harmonic.; +#X text 110 1560 ....; +#X text 245 1560 ... input harmonic.; +#X text 110 1580 n.; +#X text 245 1580 n-th input harmonic.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 1688 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1691 library: ceammc v0.9.4; -#N canvas 10 1710 400 290 info 0; +#X obj 1 1630 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1633 library: ceammc v0.9.6; +#N canvas 10 1652 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hoa.scope~; #X text 10 76 category:; @@ -147,7 +142,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1710 pd info; +#X restore 10 1652 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/hoa.scope~.pddoc b/ceammc/ext/doc/hoa.scope~.pddoc index 5adca6d403..6d961b3fc6 100644 --- a/ceammc/ext/doc/hoa.scope~.pddoc +++ b/ceammc/ext/doc/hoa.scope~.pddoc @@ -29,8 +29,8 @@ top right y-coord - the order of decomposition + the order of + decomposition view rotation gain negative harmonics color - send destination - receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + fontsize - fontname + fontname font weight font @@ -61,8 +60,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/hw.apple_smc-help.pd b/ceammc/ext/doc/hw.apple_smc-help.pd index 8c09a1aac6..8e6dfe998e 100644 --- a/ceammc/ext/doc/hw.apple_smc-help.pd +++ b/ceammc/ext/doc/hw.apple_smc-help.pd @@ -71,7 +71,7 @@ WKEN WVr0 WVw0 zDBG zDSF.; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 1089 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1092 library: ceammc v0.9.4; +#X text 10 1092 library: ceammc v0.9.6; #X text 485 1104 see also:; #X obj 559 1104 hw.apple_sms; #X obj 660 1104 hw.cpu_temp; @@ -80,7 +80,7 @@ WKEN WVr0 WVw0 zDBG zDSF.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.apple_smc; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hw.apple_smc.pddoc b/ceammc/ext/doc/hw.apple_smc.pddoc index fecba83434..4c385f842c 100644 --- a/ceammc/ext/doc/hw.apple_smc.pddoc +++ b/ceammc/ext/doc/hw.apple_smc.pddoc @@ -22,7 +22,7 @@ SMC key - list of all found SMC key diff --git a/ceammc/ext/doc/hw.apple_sms-help.pd b/ceammc/ext/doc/hw.apple_sms-help.pd index 7f83ff8204..08583acc5e 100644 --- a/ceammc/ext/doc/hw.apple_sms-help.pd +++ b/ceammc/ext/doc/hw.apple_sms-help.pd @@ -25,32 +25,32 @@ us this information; #X obj 20 416 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 451 @raw; -#X text 245 451 Get/Set raw data output mode. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X obj 20 503 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 508 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 451 Get/Set raw data output mode. Type: bool. Default value: +0\.; +#X obj 20 490 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 495 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 509 1\.; -#X text 150 509 *bang*; -#X text 245 509 outputs current motion sensor information.; -#X obj 20 539 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 544 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 496 1\.; +#X text 150 496 *bang*; +#X text 245 496 outputs current motion sensor information.; +#X obj 20 526 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 531 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 545 1\.; -#X text 245 545 list of three values: x-rotation \, y-rotation \, z-acceleration.; +#X text 110 532 1\.; +#X text 245 532 list of three values: x-rotation \, y-rotation \, z-acceleration.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; -#X obj 1 595 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 598 library: ceammc v0.9.4; -#N canvas 10 617 400 290 info 0; +#X obj 1 582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 585 library: ceammc v0.9.6; +#N canvas 10 604 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.apple_sms; #X text 10 76 category:; @@ -69,7 +69,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 617 pd info; +#X restore 10 604 pd info; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/hw.apple_sms.pddoc b/ceammc/ext/doc/hw.apple_sms.pddoc index 9d78c64c70..52115346ef 100644 --- a/ceammc/ext/doc/hw.apple_sms.pddoc +++ b/ceammc/ext/doc/hw.apple_sms.pddoc @@ -21,7 +21,7 @@ us this information - raw data output mode + raw data output mode diff --git a/ceammc/ext/doc/hw.arduino-help.pd b/ceammc/ext/doc/hw.arduino-help.pd index eacf1f9030..e2a512289f 100644 --- a/ceammc/ext/doc/hw.arduino-help.pd +++ b/ceammc/ext/doc/hw.arduino-help.pd @@ -29,79 +29,85 @@ hotplug and reconnects to it.; #X obj 246 494 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 493 PORT: serial port name \, eg.: COM3 on Windows \, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX. Type: symbol.; -#X obj 20 538 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 543 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 528 2\.; +#X text 150 528 int; +#X obj 246 529 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 528 RATE: serial baud rate. Type: int.; +#X obj 20 558 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 563 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 578 @connected; -#X text 245 578 (readonly) Get state of connection to device. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 620 @devices; -#X text 245 620 (readonly) Get list of found Arduino devices. Type: +#X msg 110 598 @connected; +#X text 245 598 (readonly) Get state of connection to device. Type: +bool. Default value: 0\.; +#X msg 110 640 @devices; +#X text 245 640 (readonly) Get list of found Arduino devices. Type: list.; -#X msg 110 649 @on_connect; -#X text 245 649 Get/Set function called every time on connect. Type: +#X msg 110 669 @on_connect; +#X text 245 669 Get/Set function called every time on connect. Type: symbol.; -#X msg 110 678 @port; -#X text 245 678 (readonly) Get name of arduino serial port \, eg.: +#X msg 110 698 @port; +#X text 245 698 (initonly) Get/Set name of arduino serial port \, eg.: COM3 on Windows \, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX. If specified on creation tries to connect to this device only. Type: symbol.; -#X msg 110 750 @product_id; -#X text 245 750 Get/Set USB device product id. If vendor and product +#X msg 110 770 @product_id; +#X text 245 770 Get/Set USB device product id. If vendor and product ids are specified at creation \, tries to connect to devices only with such properties. Note: product id is specified in decimal mode \, not in hex. Type: int. Default value: 0\.; -#X msg 110 822 @rate; -#X text 245 822 Get/Set serial baud rate. Standard value supported +#X msg 110 842 @rate; +#X text 245 842 Get/Set serial baud rate. Standard value supported by most serial ports: 110 \, 300 \, 600 \, 1200 \, 2400 \, 4800 \, 9600 \, 14400 \, 19200 \, 28800 \, 38400 \, 56000 \, 57600 \, 115200\. -Type: int. Default value: 57600\. Min value: 0\.; -#X msg 110 894 @reconnect; -#X text 245 894 enables hot-pluggin. Default value: 0\.; -#X msg 110 923 @serial; -#X text 245 923 Get/Set USB device serial number. If specified at creation +Type: int. Default value: 57600\. Allowed values: 57600 \, 110 \, 300 +\, 600 \, 1200 \, 2400 \, 4800 \, 9600 \, 14400 \, 19200 \, 38400 \, +56000 \, 115200 \, 128000 \, 256000\.; +#X msg 110 944 @reconnect; +#X text 245 944 enables hot-pluggin. Default value: 0\.; +#X msg 110 973 @serial; +#X text 245 973 Get/Set USB device serial number. If specified at creation \, tries to connect to devices only with such serial number. Type: symbol.; -#X msg 110 980 @vendor_id; -#X text 245 980 Get/Set USB device vendor id. If specified at creation +#X msg 110 1030 @vendor_id; +#X text 245 1030 Get/Set USB device vendor id. If specified at creation \, tries to connect to devices only with such vendor. Note: vendor id is specified in decimal mode \, not in hex. Type: int. Default value: 0\.; -#X obj 20 1062 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1067 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1112 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1117 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1102 connect; -#X text 245 1102 manually connect to device.; -#X msg 110 1129 disconnect; -#X text 245 1129 disconnect from device.; -#X obj 20 1166 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1171 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1152 connect; +#X text 245 1152 manually connect to device.; +#X msg 110 1179 disconnect; +#X text 245 1179 disconnect from device.; +#X obj 20 1216 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1221 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1172 1\.; -#X text 150 1172 *float*; -#X text 245 1172 sends float value in byte range [0-255] to arduino +#X text 110 1222 1\.; +#X text 150 1222 *float*; +#X text 245 1222 sends float value in byte range [0-255] to arduino device.; -#X text 150 1192 *list*; -#X text 245 1192 sends list of floats in byte range [0-255] to arduino +#X text 150 1242 *list*; +#X text 245 1242 sends list of floats in byte range [0-255] to arduino device.; -#X obj 20 1222 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1227 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1272 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1277 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1228 1\.; -#X text 245 1228 outputs received byte from arduino.; +#X text 110 1278 1\.; +#X text 245 1278 outputs received byte from arduino.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; -#X obj 1 1278 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1281 library: ceammc v0.9.4; -#N canvas 10 1300 400 290 info 0; +#X obj 1 1328 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1331 library: ceammc v0.9.6; +#N canvas 10 1350 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.arduino; #X text 10 76 category:; @@ -120,7 +126,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1300 pd info; +#X restore 10 1350 pd info; #X connect 6 0 11 0; #X connect 8 0 11 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/hw.arduino.pddoc b/ceammc/ext/doc/hw.arduino.pddoc index 45e05c80dc..023576e242 100644 --- a/ceammc/ext/doc/hw.arduino.pddoc +++ b/ceammc/ext/doc/hw.arduino.pddoc @@ -21,28 +21,32 @@ serial port name, eg.: COM3 on Windows, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX + serial baud rate - name of arduino serial port, eg.: - COM3 on Windows, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX. If specified - on creation tries to connect to this device only - USB device serial number. If specified at - creation, tries to connect to devices only with such serial number - serial baud rate. - Standard value supported by most serial ports: 110, 300, 600, 1200, 2400, 4800, 9600, - 14400, 19200, 28800, 38400, 56000, 57600, 115200 + name of arduino + serial port, eg.: COM3 on Windows, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on + MacOSX. If specified on creation tries to connect to this device only + USB device serial number. If + specified at creation, tries to connect to devices only with such serial + number + + serial baud rate. Standard value supported by most serial ports: 110, 300, 600, 1200, + 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200 USB device vendor id. If specified at creation, tries to connect to devices only with such vendor. Note: vendor id is specified in decimal mode, not in hex USB device product id. If vendor and product ids are specified at creation, tries to connect to devices only with such properties. Note: product id is specified in decimal mode, not in hex - enables hot-pluggin - state of + enables + hot-pluggin + state of connection to device - list of found Arduino - devices - function called every time on + list of found + Arduino devices + function called every time on connect diff --git a/ceammc/ext/doc/hw.cpu_temp-help.pd b/ceammc/ext/doc/hw.cpu_temp-help.pd index ff2517da42..067488a7e6 100644 --- a/ceammc/ext/doc/hw.cpu_temp-help.pd +++ b/ceammc/ext/doc/hw.cpu_temp-help.pd @@ -28,13 +28,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.cpu_temp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hw.display-help.pd b/ceammc/ext/doc/hw.display-help.pd index bfa2c4d6b7..fbf81c31dd 100644 --- a/ceammc/ext/doc/hw.display-help.pd +++ b/ceammc/ext/doc/hw.display-help.pd @@ -34,13 +34,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.display; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hw.kbd_light-help.pd b/ceammc/ext/doc/hw.kbd_light-help.pd index 9ce94d2a60..fd2e09975c 100644 --- a/ceammc/ext/doc/hw.kbd_light-help.pd +++ b/ceammc/ext/doc/hw.kbd_light-help.pd @@ -32,13 +32,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.kbd_light; #X text 10 76 category:; diff --git a/ceammc/ext/doc/hw.motu.avb-help.pd b/ceammc/ext/doc/hw.motu.avb-help.pd new file mode 100644 index 0000000000..f1b8cd1be9 --- /dev/null +++ b/ceammc/ext/doc/hw.motu.avb-help.pd @@ -0,0 +1,287 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 423 50 cnv 1 342 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 423 50 controls Motu AVB devices over http requests; +#X obj 1 1 cnv 5 765 40 empty empty hw.motu.avb 20 20 0 20 -104026 +-4096 0; +#X obj 660 11 hw.motu.avb; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Only basic support at this moment; +#X text 50 143 Enter device ID; +#X symbolatom 50 172 20 0 0 0 - - -; +#X msg 50 201 @dev \$1; +#X msg 146 201 @dev 0001f2fffe00XXXX; +#X obj 78 230 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 222 230 ui.hsl -60 0 @show_value 1; +#X msg 78 259 phantom 0 \$1; +#X msg 222 259 main_gain \$1; +#X obj 50 302 hw.motu.avb; +#X obj 20 351 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 356 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 391 1\.; +#X text 150 391 symbol; +#X obj 246 392 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 391 ID: Motu device id. Type: symbol.; +#X obj 20 421 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 426 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 461 @dev; +#X text 245 461 Get/Set Motu device id. Type: symbol.; +#X msg 110 490 @host; +#X text 245 490 Get/Set Motu HTTP host. Type: symbol. Default value: +localhost.; +#X msg 110 532 @port; +#X text 245 532 Get/Set Motu HTTP port. Type: int. Default value: 1280\. +Range: 1\...1200\.; +#X obj 20 584 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 589 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 624 comp_input_name; +#X text 245 624 set input from computer channel name. Arguments are:; +#X obj 255 647 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 647 CHAN: channel (zero-based). Type: int. Min value: 0\.; +#X obj 255 670 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 670 NAME: channel name. Type: symbol.; +#X msg 110 695 guitar->comp; +#X text 245 695 set guitar input to computer routing. Arguments are:; +#X obj 255 718 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 718 INCH: guitar input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 756 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 756 OUTCH: computer input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 794 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 794 STATE: enable/disable routing. Type: int. Allowed values: +0 \, 1\.; +#X msg 110 834 guitar->mix; +#X text 245 834 set guitar input to mixer routing. Arguments are:; +#X obj 255 857 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 857 INCH: guitar input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 895 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 895 OUTCH: mixer input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 933 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 933 STATE: enable/disable routing. Type: int. Allowed values: +0 \, 1\.; +#X msg 110 973 guitar->output; +#X text 245 973 set guitar input to analogue output routing. Arguments +are:; +#X obj 255 996 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 996 INCH: guitar input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 1034 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1034 OUTCH: analogue output channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 1072 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1072 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1112 guitar_gain; +#X text 245 1112 set guitar gain. Arguments are:; +#X obj 255 1135 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1135 CHAN: guitar channel (zero-based). Type: int. Min +value: 0\.; +#X obj 255 1158 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1158 DB: value in decibel. Type: float. Range: 0\...60\. +Units: db.; +#X msg 110 1198 guitar_name; +#X text 245 1198 set guitar channel name. Arguments are:; +#X obj 255 1221 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1221 CHAN: channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 1244 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1244 NAME: channel name. Type: symbol.; +#X msg 110 1269 guitar_phase; +#X text 245 1269 set guitar phase invert. Arguments are:; +#X obj 255 1292 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1292 CHAN: guitar channel (zero-based). Type: int. Min +value: 0\.; +#X obj 255 1315 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1315 VAL: state. Type: int. Allowed values: 0 \, 1\.; +#X msg 110 1340 input->comp; +#X text 245 1340 set analogue input to computer routing. Arguments +are:; +#X obj 255 1363 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1363 INCH: analogue input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 1401 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1401 OUTCH: computer input channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 1439 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1439 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1479 input->mix; +#X text 245 1479 set analogue input to mixer routing. Arguments are:; +#X obj 255 1502 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1502 INCH: analogue input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 1540 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1540 OUTCH: mixer input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 1578 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1578 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1618 input->output; +#X text 245 1618 set analogue input to analog output routing. Arguments +are:; +#X obj 255 1641 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1641 INCH: analogue input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 1679 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1679 OUTCH: analogue output channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 1717 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1717 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1757 input_gain; +#X text 245 1757 set input gain. Arguments are:; +#X obj 255 1780 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1780 CHAN: input channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 1803 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1803 DB: value in decibel. Type: float. Units: db.; +#X msg 110 1828 input_name; +#X text 245 1828 set analogue input channel name. Arguments are:; +#X obj 255 1851 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1851 CHAN: channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 1874 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1874 NAME: channel name. Type: symbol.; +#X msg 110 1899 main_gain; +#X text 245 1899 set main output gain. Arguments are:; +#X obj 255 1922 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1922 DB: value in decibel. Type: float. Range: -127\...0\. +Units: db.; +#X msg 110 1962 mic->comp; +#X text 245 1962 set microphone input to computer routing. Arguments +are:; +#X obj 255 1985 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1985 INCH: microphone input channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 2023 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2023 OUTCH: computer channel (zero-based). Type: int. Min +value: 0\.; +#X obj 255 2061 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2061 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 2101 mic->mix; +#X text 245 2101 set microphone input to mixer routing. Arguments are:; +#X obj 255 2124 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2124 INCH: microphone input channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 2162 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2162 OUTCH: mixer input channel (zero-based). Type: int. +Min value: 0\.; +#X obj 255 2200 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2200 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 2240 mic->output; +#X text 245 2240 set microphone input to analog output routing. Arguments +are:; +#X obj 255 2263 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2263 INCH: microphone input channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 2301 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2301 OUTCH: analogue output channel (zero-based). Type: +int. Min value: 0\.; +#X obj 255 2339 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2339 STATE: enable/disable routing. Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 2379 mic_gain; +#X text 245 2379 set mic gain. Arguments are:; +#X obj 255 2402 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2402 CHAN: mic channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 2425 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2425 DB: value in decibel. Type: float. Range: 0\...60\. +Units: db.; +#X msg 110 2465 mic_name; +#X text 245 2465 set microphone channel name. Arguments are:; +#X obj 255 2488 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2488 CHAN: channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 2511 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2511 NAME: channel name. Type: symbol.; +#X msg 110 2536 mic_pad; +#X text 245 2536 set mic -20db padding. Arguments are:; +#X obj 255 2559 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2559 CHAN: mic channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 2582 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2582 VAL: state. Type: int. Allowed values: 0 \, 1\.; +#X msg 110 2607 mic_phase; +#X text 245 2607 set mic phase invert. Arguments are:; +#X obj 255 2630 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2630 CHAN: mic channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 2653 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2653 VAL: state. Type: int. Allowed values: 0 \, 1\.; +#X msg 110 2678 output_gain; +#X text 245 2678 set input gain. Arguments are:; +#X obj 255 2701 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2701 CHAN: input channel (zero-based). Type: int. Min value: +0\.; +#X obj 255 2724 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2724 DB: value in decibel. Type: float. Units: db.; +#X msg 110 2749 phantom; +#X text 245 2749 turns phantom on/off. Arguments are:; +#X obj 255 2772 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2772 CHAN: phantom channel. Type: int. Min value: 0\.; +#X obj 255 2795 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2795 VAL: phantom state. Type: int. Allowed values: 0 \, +1\.; +#X msg 110 2820 phones_gain; +#X text 245 2820 set phones output gain. Arguments are:; +#X obj 255 2843 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2843 DB: value in decibel. Type: float. Range: -127\...0\. +Units: db.; +#X obj 20 2893 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2898 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2899 1\.; +#X text 245 2899 input.; +#X obj 20 2929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2934 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2935 1\.; +#X text 245 2935 properties output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; +#X obj 1 2985 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2988 library: ceammc v0.9.6; +#N canvas 10 3007 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 hw.motu.avb; +#X text 10 76 category:; +#X text 120 76 hw; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 motu \, avb; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 3007 pd info; +#X connect 7 0 8 0; +#X connect 10 0 12 0; +#X connect 11 0 13 0; +#X connect 8 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 9 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hw.motu.avb.pddoc b/ceammc/ext/doc/hw.motu.avb.pddoc new file mode 100644 index 0000000000..b864d6800e --- /dev/null +++ b/ceammc/ext/doc/hw.motu.avb.pddoc @@ -0,0 +1,179 @@ + + + + hw.motu.avb + + + Serge Poltavsky + + controls Motu AVB devices over http requests + GPL3 or later + ceammc + hw + motu avb + 0.9.5 + + + Only basic support at this moment + + + Motu device id + + + Motu HTTP host + Motu HTTP + port + Motu device id + + + set main output gain + value in decibel + set phones output gain + value in decibel + turns phantom on/off + phantom channel + phantom state + set mic gain + mic channel + (zero-based) + value in decibel + set mic -20db padding + mic channel + (zero-based) + state + set mic phase invert + mic channel + (zero-based) + state + set guitar gain + guitar channel + (zero-based) + value in decibel + set guitar phase invert + guitar channel + (zero-based) + state + set input gain + input channel + (zero-based) + value in + decibel + set input gain + input channel + (zero-based) + value in + decibel + + set guitar channel name + channel (zero-based) + channel name + set microphone channel name + channel (zero-based) + channel name + set analogue input channel name + channel (zero-based) + channel name + set input from computer channel name + channel (zero-based) + channel name + + + set microphone input to computer routing + microphone input channel + (zero-based) + computer channel + (zero-based) + enable/disable + routing + set microphone input to analog output routing + microphone input channel + (zero-based) + analogue output channel + (zero-based) + enable/disable + routing + set microphone input to mixer routing + microphone input channel + (zero-based) + mixer input channel + (zero-based) + enable/disable + routing + + set analogue input to analog output routing + analogue input channel + (zero-based) + analogue output channel + (zero-based) + enable/disable + routing + set analogue input to mixer routing + analogue input channel + (zero-based) + mixer input channel + (zero-based) + enable/disable + routing + set analogue input to computer routing + analogue input channel + (zero-based) + computer input channel + (zero-based) + enable/disable + routing + + set guitar input to computer routing + guitar input channel + (zero-based) + computer input channel + (zero-based) + enable/disable + routing + set guitar input to mixer routing + guitar input channel + (zero-based) + mixer input channel + (zero-based) + enable/disable + routing + set guitar input to analogue output routing + guitar input channel + (zero-based) + analogue output channel + (zero-based) + enable/disable + routing + + + + input + + + + properties output + + + +z] +]]> + + + + diff --git a/ceammc/ext/doc/hw.serial-help.pd b/ceammc/ext/doc/hw.serial-help.pd index f70199748b..7c03070118 100644 --- a/ceammc/ext/doc/hw.serial-help.pd +++ b/ceammc/ext/doc/hw.serial-help.pd @@ -32,44 +32,44 @@ list.; #X text 245 444 Get/Set name of serial port \, eg.: COM3 on Windows \, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX. Type: symbol.; #X msg 110 501 @rate; -#X text 245 501 Get/Set serial baud rate. Standard value supported -by most serial ports: 110 \, 300 \, 600 \, 1200 \, 2400 \, 4800 \, -9600 \, 14400 \, 19200 \, 28800 \, 38400 \, 56000 \, 57600 \, 115200\. -Type: int. Default value: 57600\. Min value: 0\.; -#X obj 20 583 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 588 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 501 Get/Set serial baud rate. Type: int. Default value: +57600\. Allowed values: 110 \, 300 \, 600 \, 1200 \, 2400 \, 4800 \, +9600 \, 14400 \, 19200 \, 38400 \, 56000 \, 57600 \, 115200 \, 128000 +\, 256000\.; +#X obj 20 568 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 573 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 623 close; -#X text 245 623 disconnect from device.; -#X msg 110 650 open; -#X text 245 650 connect to device.; -#X obj 20 687 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 692 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 608 close; +#X text 245 608 disconnect from device.; +#X msg 110 635 open; +#X text 245 635 connect to device.; +#X obj 20 672 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 677 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 693 1\.; -#X text 150 693 *float*; -#X text 245 693 sends float value in byte range [0-255] to serial port.; -#X text 150 713 *list*; -#X text 245 713 sends list of floats in byte range [0-255] to serial +#X text 110 678 1\.; +#X text 150 678 *float*; +#X text 245 678 sends float value in byte range [0-255] to serial port.; +#X text 150 698 *list*; +#X text 245 698 sends list of floats in byte range [0-255] to serial port.; -#X obj 20 743 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 748 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 728 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 733 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 749 1\.; -#X text 245 749 outputs received byte from serial port.; +#X text 110 734 1\.; +#X text 245 734 outputs received byte from serial port.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title hw @url ceammc.hw-help.pd; -#X obj 1 799 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 802 library: ceammc v0.9.4; -#N canvas 10 821 400 290 info 0; +#X obj 1 784 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 787 library: ceammc v0.9.6; +#N canvas 10 806 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 hw.serial; #X text 10 76 category:; @@ -88,6 +88,6 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 821 pd info; +#X restore 10 806 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/hw.serial.pddoc b/ceammc/ext/doc/hw.serial.pddoc index 4b62ef51b3..0ec3abec42 100644 --- a/ceammc/ext/doc/hw.serial.pddoc +++ b/ceammc/ext/doc/hw.serial.pddoc @@ -21,12 +21,12 @@ /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX - name of serial port, eg.: COM3 on Windows, - /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX - serial baud rate. - Standard value supported by most serial ports: 110, 300, 600, 1200, 2400, 4800, 9600, - 14400, 19200, 28800, 38400, 56000, 57600, 115200 - list of found serial + name of serial port, eg.: COM3 on + Windows, /dev/ttyACM0 on Linux and /dev/cu.usbmodem411 on MacOSX + + serial baud rate + list of found serial devices diff --git a/ceammc/ext/doc/is_any-help.pd b/ceammc/ext/doc/is_any-help.pd index 2747058adb..106f49034f 100644 --- a/ceammc/ext/doc/is_any-help.pd +++ b/ceammc/ext/doc/is_any-help.pd @@ -31,7 +31,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 399 520 see also:; #X obj 473 520 is_bang; #X obj 538 520 is_float; @@ -42,7 +42,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_any; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_bang-help.pd b/ceammc/ext/doc/is_bang-help.pd index a49d47a8a1..bedb51aaea 100644 --- a/ceammc/ext/doc/is_bang-help.pd +++ b/ceammc/ext/doc/is_bang-help.pd @@ -32,7 +32,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_float; @@ -43,7 +43,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_bang; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_data-help.pd b/ceammc/ext/doc/is_data-help.pd index d669ec015c..db6d054692 100644 --- a/ceammc/ext/doc/is_data-help.pd +++ b/ceammc/ext/doc/is_data-help.pd @@ -23,7 +23,7 @@ #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 364 @in_list; -#X text 245 364 output '1' is list contains at least one data atom. +#X text 245 364 output '1' if list contains at least one data atom. Default value: 0\.; #X obj 20 416 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 421 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 @@ -45,7 +45,7 @@ Default value: 0\.; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 528 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 531 library: ceammc v0.9.4; +#X text 10 531 library: ceammc v0.9.6; #X text 464 543 see also:; #X obj 538 543 is_float; #X obj 610 543 is_symbol; @@ -55,7 +55,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_data; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_data.pddoc b/ceammc/ext/doc/is_data.pddoc index ff1dbec7a5..c4db99fd7e 100644 --- a/ceammc/ext/doc/is_data.pddoc +++ b/ceammc/ext/doc/is_data.pddoc @@ -22,8 +22,8 @@ - output '1' is list contains at least - one data atom + output '1' if list + contains at least one data atom diff --git a/ceammc/ext/doc/is_dict-help.pd b/ceammc/ext/doc/is_dict-help.pd index 64ce2113b1..8a69fd254e 100644 --- a/ceammc/ext/doc/is_dict-help.pd +++ b/ceammc/ext/doc/is_dict-help.pd @@ -32,7 +32,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 data.dict; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_dict; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_even-help.pd b/ceammc/ext/doc/is_even-help.pd index ee21d7c3ac..a124d7a74c 100644 --- a/ceammc/ext/doc/is_even-help.pd +++ b/ceammc/ext/doc/is_even-help.pd @@ -33,7 +33,7 @@ is performed.; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 623 520 see also:; #X obj 697 520 is_odd; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_even; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_file-help.pd b/ceammc/ext/doc/is_file-help.pd index 6661647572..2a6bed424d 100644 --- a/ceammc/ext/doc/is_file-help.pd +++ b/ceammc/ext/doc/is_file-help.pd @@ -25,6 +25,8 @@ directory; -49933 0; #X text 110 319 1\.; #X text 245 319 0 or 1\.; +#X text 110 339 2\.; +#X text 245 339 symbol os String: pass filename if file exists.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; @@ -32,13 +34,13 @@ directory; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_file; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_file.pddoc b/ceammc/ext/doc/is_file.pddoc index 220370a6ed..4a1ee33083 100644 --- a/ceammc/ext/doc/is_file.pddoc +++ b/ceammc/ext/doc/is_file.pddoc @@ -27,6 +27,7 @@ 0 or 1 + symbol os String: pass filename if file exists diff --git a/ceammc/ext/doc/is_float-help.pd b/ceammc/ext/doc/is_float-help.pd index 86a81e571e..d1a5e91f9a 100644 --- a/ceammc/ext/doc/is_float-help.pd +++ b/ceammc/ext/doc/is_float-help.pd @@ -32,7 +32,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 413 520 see also:; #X obj 487 520 is_any; #X obj 545 520 is_bang; @@ -43,7 +43,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_list-help.pd b/ceammc/ext/doc/is_list-help.pd index f4c89d1d4c..edc318ee00 100644 --- a/ceammc/ext/doc/is_list-help.pd +++ b/ceammc/ext/doc/is_list-help.pd @@ -33,7 +33,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_bang; @@ -44,7 +44,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_list; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_odd-help.pd b/ceammc/ext/doc/is_odd-help.pd index 5035405ccb..35e097d5f3 100644 --- a/ceammc/ext/doc/is_odd-help.pd +++ b/ceammc/ext/doc/is_odd-help.pd @@ -32,7 +32,7 @@ is performed.; #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 616 520 see also:; #X obj 690 520 is_even; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_odd; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_pointer-help.pd b/ceammc/ext/doc/is_pointer-help.pd index e92d93299c..81473bf417 100644 --- a/ceammc/ext/doc/is_pointer-help.pd +++ b/ceammc/ext/doc/is_pointer-help.pd @@ -35,7 +35,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 406 520 see also:; #X obj 480 520 is_any; #X obj 538 520 is_float; @@ -46,7 +46,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_pointer; #X text 10 76 category:; diff --git a/ceammc/ext/doc/is_prop-help.pd b/ceammc/ext/doc/is_prop-help.pd new file mode 100644 index 0000000000..eb1a479991 --- /dev/null +++ b/ceammc/ext/doc/is_prop-help.pd @@ -0,0 +1,78 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 415 50 cnv 1 350 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 415 50 checks if input message is *property* message; +#X obj 1 1 cnv 5 765 40 empty empty is_prop 20 20 0 20 -104026 -4096 +0; +#X obj 690 11 is_prop; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 126 118 100; +#X msg 222 118 symbol TEST; +#X msg 59 147 list 1 2 3; +#X msg 222 147 some message; +#X msg 69 176 @prop A B; +#X msg 222 176 @prop?; +#X obj 50 234 is_prop; +#X obj 50 262 ui.d; +#X obj 126 262 ui.dt; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 317 1\.; +#X text 150 317 *any*; +#X text 245 317 outputs '1' to 1st outlet \, otherwise '0'.; +#X obj 20 347 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 352 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 353 1\.; +#X text 245 353 0 or 1\.; +#X text 110 373 2\.; +#X text 245 373 passes only *property* messages.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title predicates @url +ceammc.predicates-help.pd; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#X text 413 520 see also:; +#X obj 487 520 is_any; +#X obj 545 520 is_bang; +#X obj 610 520 is_symbol; +#X obj 690 520 is_list; +#N canvas 10 527 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 is_prop; +#X text 10 76 category:; +#X text 120 76 predicates; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 predicate \, float; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 527 pd info; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 4 0 11 0; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/is_prop.pddoc b/ceammc/ext/doc/is_prop.pddoc new file mode 100644 index 0000000000..3b80397168 --- /dev/null +++ b/ceammc/ext/doc/is_prop.pddoc @@ -0,0 +1,56 @@ + + + + is_prop + + + Serge Poltavsky + + checks if input message is *property* message + GPL3 or later + ceammc + predicates + predicate float + + is_any + is_bang + is_symbol + is_list + + 0.9.6 + + + + outputs '1' to 1st outlet, otherwise '0' + + + + 0 or 1 + passes only *property* messages + + + +x] +[X b->x] +[X c->x] +[X d->x] +[X e->x] +[X f->x] +[X g->x] +]]> + + + diff --git a/ceammc/ext/doc/is_symbol-help.pd b/ceammc/ext/doc/is_symbol-help.pd index 18d0445cb6..f22a87123e 100644 --- a/ceammc/ext/doc/is_symbol-help.pd +++ b/ceammc/ext/doc/is_symbol-help.pd @@ -33,7 +33,7 @@ #X obj 131 48 ui.link @title predicates @url ceammc.predicates-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 421 520 see also:; #X obj 495 520 is_any; #X obj 553 520 is_bang; @@ -44,7 +44,7 @@ ceammc.predicates-help.pd; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 is_symbol; #X text 10 76 category:; diff --git a/ceammc/ext/doc/lang.faust~-help.pd b/ceammc/ext/doc/lang.faust~-help.pd index 2d5a738fa6..04a00576cd 100644 --- a/ceammc/ext/doc/lang.faust~-help.pd +++ b/ceammc/ext/doc/lang.faust~-help.pd @@ -14,76 +14,77 @@ https://faust.grame.fr/ @url https://faust.grame.fr/; #X obj 251 141 ui.knob @min 0 @max 10; #X msg 126 185 @amp \$1; #X msg 251 185 @freq \$1; -#X obj 222 213 osc.square~ 300; -#X obj 50 242 lang.faust~ faust/ex0.dsp; -#X obj 50 271 ui.hgain~; -#X obj 222 271 ui.dsp~; -#X obj 50 300 dac~; -#X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 354 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +#X msg 69 213 @fname faust/ex2.dsp; +#X obj 290 213 osc.square~ 300; +#X msg 88 242 update; +#X obj 50 271 lang.faust~ faust/ex0.dsp; +#X obj 50 300 ui.hgain~; +#X obj 222 300 ui.dsp~; +#X obj 50 328 dac~; +#X obj 20 377 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 382 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 389 Left-click + ⌥; -#X text 285 389 open faust dsp file in external editor.; -#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 424 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 110 417 Left-click + ⌥; +#X text 285 417 open faust dsp file in external editor.; +#X obj 20 447 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 452 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 459 1\.; -#X text 150 459 symbol; -#X obj 246 460 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 459 FNAME: path to faust dsp file. Type: symbol.; -#X obj 20 489 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 494 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 487 1\.; +#X text 150 487 symbol; +#X obj 246 488 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 487 FNAME: path to faust dsp file. Type: symbol.; +#X obj 20 517 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 522 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 529 @auto; -#X text 245 529 Get/Set auto update mode. If on - recompiles faust -dsp file on change. Type: int. Default value: 1\. Allowed values: 0 -\, 1\.; -#X msg 110 586 @fname; -#X text 245 586 Get/Set path to faust dsp file. Type: symbol.; -#X msg 110 615 @include; -#X text 245 615 Get/Set list of faust include directories. Type: list.; -#X obj 20 654 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 659 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 557 @auto; +#X text 245 557 Get/Set auto update mode. If on - recompiles faust +dsp file on change. Type: bool. Default value: 0\.; +#X msg 110 599 @fname; +#X text 245 599 Get/Set path to faust dsp file. Type: symbol.; +#X msg 110 628 @include; +#X text 245 628 Get/Set list of faust include directories. Type: list.; +#X obj 20 667 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 672 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 694 open; -#X text 245 694 open faust dsp file in external editor.; -#X msg 110 721 reset; -#X text 245 721 reset object state.; -#X msg 110 748 update; -#X text 245 748 update faust object \, recompile if needed.; -#X obj 20 785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 790 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 707 open; +#X text 245 707 open faust dsp file in external editor.; +#X msg 110 734 reset; +#X text 245 734 reset object state.; +#X msg 110 761 update; +#X text 245 761 update faust object \, recompile if needed.; +#X obj 20 798 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 803 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 791 1\.; -#X text 245 791 control input.; -#X text 110 811 2\.; -#X text 245 811 first faust input.; -#X text 110 831 ....; -#X text 245 831 ... faust input.; -#X text 110 851 n+1\.; -#X text 245 851 n-th faust input.; -#X obj 20 881 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 886 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 804 1\.; +#X text 245 804 control input.; +#X text 110 824 2\.; +#X text 245 824 first faust input.; +#X text 110 844 ....; +#X text 245 844 ... faust input.; +#X text 110 864 n+1\.; +#X text 245 864 n-th faust input.; +#X obj 20 894 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 899 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 887 1\.; -#X text 245 887 first faust output.; -#X text 110 907 ....; -#X text 245 907 ... faust output.; -#X text 110 927 n.; -#X text 245 927 n-th faust output.; +#X text 110 900 1\.; +#X text 245 900 first faust output.; +#X text 110 920 ....; +#X text 245 920 ... faust output.; +#X text 110 940 n.; +#X text 245 940 n-th faust output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lang @url ceammc.lang-help.pd; -#X obj 1 977 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 980 library: ceammc v0.9.4; -#N canvas 10 999 400 290 info 0; +#X obj 1 990 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 993 library: ceammc v0.9.6; +#N canvas 10 1012 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lang.faust~; #X text 10 76 category:; @@ -102,13 +103,15 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 999 pd info; +#X restore 10 1012 pd info; #X connect 7 0 9 0; #X connect 8 0 10 0; -#X connect 6 0 12 0; -#X connect 11 0 12 1; -#X connect 12 0 13 0; -#X connect 13 0 15 0; -#X connect 13 0 15 1; -#X connect 9 0 12 0; -#X connect 10 0 12 0; \ No newline at end of file +#X connect 6 0 14 0; +#X connect 11 0 14 0; +#X connect 13 0 14 0; +#X connect 12 0 14 1; +#X connect 14 0 15 0; +#X connect 15 0 17 0; +#X connect 15 0 17 1; +#X connect 9 0 14 0; +#X connect 10 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/lang.faust~.pddoc b/ceammc/ext/doc/lang.faust~.pddoc index b4a4d407c0..b6e28260b8 100644 --- a/ceammc/ext/doc/lang.faust~.pddoc +++ b/ceammc/ext/doc/lang.faust~.pddoc @@ -29,10 +29,11 @@ update faust object, recompile if needed - path to faust dsp file - list of faust include directories - auto update mode. If on - - recompiles faust dsp file on change + path to faust dsp file + list of faust include + directories + auto update mode. If on - recompiles + faust dsp file on change @@ -61,8 +62,10 @@ | | | | [@amp $1 #a( [@freq $1 #f( | -| [osc.square~ 300] -| |. +| [@fname faust/ex2.dsp( [osc.square~ 300] +| | | +| | [update( | +| | | |. [lang.faust~ faust/ex0.dsp #z] | [ui.hgain~] [ui.dsp~] diff --git a/ceammc/ext/doc/lang.lua-help.pd b/ceammc/ext/doc/lang.lua-help.pd new file mode 100644 index 0000000000..54ce86250c --- /dev/null +++ b/ceammc/ext/doc/lang.lua-help.pd @@ -0,0 +1,122 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 569 50 cnv 1 196 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 569 50 Lua JIT language bindings; +#X obj 1 1 cnv 5 765 40 empty empty lang.lua 20 20 0 20 -104026 -4096 +0; +#X obj 683 11 lang.lua; +#X obj 210 80 cnv 1 555 60 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Lua code is executed in separated thread in async mode.; +#X text 215 105 Each lang.lua object has own independent context.; +#X obj 50 168 loadmsg load lua/basic.lua; +#X obj 69 197 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 107 197 5 0 0 0 - - -; +#X msg 155 197 1 2 3 4; +#X symbolatom 251 197 5 0 0 0 - - -; +#X msg 299 197 call fn ABC; +#X obj 50 240 lang.lua @in 4 @out 3; +#X obj 50 269 ui.dt; +#X floatatom 146 269 5 0 0 0 - - -; +#X obj 20 318 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 323 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +-49933 0; +#X text 110 358 Left-click; +#X text 285 358 open Lua code in the editor.; +#X obj 20 388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 393 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 428 1\.; +#X text 150 428 int; +#X obj 246 429 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 428 IN: number of inputs. Type: int. Range: 1\...16; +#X text 110 448 2\.; +#X text 150 448 int; +#X obj 246 449 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 448 OUT: number of outputs. Type: int. Range: 1\...16; +#X obj 20 478 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 483 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 518 @in; +#X text 245 518 (initonly) Get/Set number of inputs. Type: int. Default +value: 1\. Range: 1\...16\.; +#X msg 110 560 @out; +#X text 245 560 (initonly) Get/Set number of outputs. Type: int. Default +value: 1\. Range: 1\...16\.; +#X obj 20 612 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 617 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 652 call; +#X text 245 652 call lua function. Arguments are:; +#X obj 255 675 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 675 FN: function name. Type: symbol.; +#X obj 255 698 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 698 [ARGS]: function arguments. Type: list.; +#X msg 110 723 eval; +#X text 245 723 eval lua code. Arguments are:; +#X obj 255 746 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 746 CODE: lua code. Type: list.; +#X msg 110 771 load; +#X text 245 771 load lua file and eval it. Arguments are:; +#X obj 255 794 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 794 PATH: path to lua file. Type: list.; +#X msg 110 819 quit; +#X text 245 819 abort lua script execution.; +#X obj 20 856 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 861 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 862 1\.; +#X text 245 862 first lua input.; +#X text 110 882 ....; +#X text 245 882 ... lua input.; +#X text 110 902 n.; +#X text 245 902 n-th lua input.; +#X obj 20 932 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 937 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 938 1\.; +#X text 245 938 first lua output.; +#X text 110 958 ....; +#X text 245 958 ... lua output.; +#X text 110 978 n.; +#X text 245 978 n-th lua output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title lang @url ceammc.lang-help.pd; +#X obj 1 1028 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1031 library: ceammc v0.9.6; +#N canvas 10 1050 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 lang.lua; +#X text 10 76 category:; +#X text 120 76 lang; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 lua \, jit; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1050 pd info; +#X connect 7 0 13 0; +#X connect 8 0 13 0; +#X connect 9 0 13 1; +#X connect 10 0 13 2; +#X connect 11 0 13 3; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 13 1 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/lang.lua.pddoc b/ceammc/ext/doc/lang.lua.pddoc new file mode 100644 index 0000000000..891d58159c --- /dev/null +++ b/ceammc/ext/doc/lang.lua.pddoc @@ -0,0 +1,74 @@ + + + + lang.lua + + + Serge Poltavsky + + Lua JIT language bindings + GPL3 or later + ceammc + lang + lua jit + 0.9.5 + + + open Lua code in the editor + + + Lua code is executed in separated thread in async mode. + Each lang.lua object has own independent context. + + + number of inputs + number of outputs + + + load lua file and eval it + path to lua file + eval lua code + lua code + abort lua script execution + call lua function + function name + function arguments + + + number of inputs + number of outputs + + + + first lua input + + + ... lua input + + + n-th lua input + + + + first lua output + ... lua output + n-th lua output + + + + + + + + diff --git a/ceammc/ext/doc/lfo.+pulse~-help.pd b/ceammc/ext/doc/lfo.+pulse~-help.pd index 8a28e0bfa4..d2454426ec 100644 --- a/ceammc/ext/doc/lfo.+pulse~-help.pd +++ b/ceammc/ext/doc/lfo.+pulse~-help.pd @@ -20,61 +20,61 @@ #X text 110 366 1\.; #X text 150 366 float; #X obj 246 367 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 366 freq(Hz): frequency. Type: float.; +#X text 245 366 FREQ(Hz): frequency. Type: float.; #X text 110 386 2\.; #X text 150 386 float; #X obj 246 387 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 386 duty: duty cycle. Type: float. Range: 0\...1; +#X text 245 386 DUTY: duty cycle. Type: float. Range: 0\...1; #X obj 20 416 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 421 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 456 @active; -#X text 245 456 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 498 @duty; -#X text 245 498 Get/Set duty cycle. Type: float. Default value: 0.5\. +#X text 245 456 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 485 @duty; +#X text 245 485 Get/Set duty cycle. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 540 @pause; -#X text 245 540 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 582 @phase; -#X text 245 582 Get/Set initial phase. Type: float. Default value: +#X msg 110 527 @pause; +#X text 245 527 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 569 @phase; +#X text 245 569 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 634 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 639 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 621 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 626 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 674 reset; -#X text 245 674 reset to initial state.; -#X obj 20 711 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 716 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 661 reset; +#X text 245 661 reset to initial state.; +#X obj 20 698 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 703 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 717 1\.; -#X text 245 717 frequency in Hz.; -#X text 110 737 2\.; -#X text 150 737 *bang*; -#X text 245 737 reset phase.; -#X obj 20 767 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 772 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 704 1\.; +#X text 245 704 frequency in Hz.; +#X text 110 724 2\.; +#X text 150 724 *bang*; +#X text 245 724 reset phase.; +#X obj 20 754 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 759 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 773 1\.; -#X text 245 773 pulsetrain wave in [0-1] range.; +#X text 110 760 1\.; +#X text 245 760 pulsetrain wave in [0-1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 823 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 826 library: ceammc v0.9.4; -#X text 389 838 see also:; -#X obj 463 838 lfo.pulse~; -#X obj 551 838 lfo.+square~; -#X obj 653 838 lfo.impulse~; -#N canvas 10 845 400 290 info 0; +#X obj 1 810 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 813 library: ceammc v0.9.6; +#X text 389 825 see also:; +#X obj 463 825 lfo.pulse~; +#X obj 551 825 lfo.+square~; +#X obj 653 825 lfo.impulse~; +#N canvas 10 832 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.+pulse~; #X text 10 76 category:; @@ -93,7 +93,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 845 pd info; +#X restore 10 832 pd info; #X connect 6 0 8 0; #X connect 5 0 9 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/lfo.+pulse~.pddoc b/ceammc/ext/doc/lfo.+pulse~.pddoc index 1cb212f1e2..432cf9f92b 100644 --- a/ceammc/ext/doc/lfo.+pulse~.pddoc +++ b/ceammc/ext/doc/lfo.+pulse~.pddoc @@ -19,18 +19,17 @@ - frequency - duty cycle + frequency + duty cycle duty cycle - pause oscillator at current + pause oscillator at current value initial phase - on/off dsp - processing + on/off dsp processing reset to initial state diff --git a/ceammc/ext/doc/lfo.+saw~-help.pd b/ceammc/ext/doc/lfo.+saw~-help.pd index c931447fe6..5b12294c6e 100644 --- a/ceammc/ext/doc/lfo.+saw~-help.pd +++ b/ceammc/ext/doc/lfo.+saw~-help.pd @@ -24,61 +24,61 @@ #X text 110 409 1\.; #X text 150 409 float; #X obj 246 410 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 freq(Hz): frequency. Type: float.; +#X text 245 409 FREQ(Hz): frequency. Type: float.; #X text 110 429 2\.; -#X text 150 429 int; +#X text 150 429 bool; #X obj 246 430 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 429 invert: invert saw. Type: int. Range: 0\...1; +#X text 245 429 INVERT: invert saw. Type: bool.; #X obj 20 459 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 464 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 499 @active; -#X text 245 499 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 541 @invert; -#X text 245 541 Get/Set wave inversion. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 583 @pause; -#X text 245 583 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 625 @phase; -#X text 245 625 Get/Set initial phase. Type: float. Default value: +#X text 245 499 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 528 @invert; +#X text 245 528 Get/Set wave inversion. Type: bool. Default value: +0\.; +#X msg 110 557 @pause; +#X text 245 557 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 599 @phase; +#X text 245 599 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 682 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 656 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 717 reset; -#X text 245 717 reset to initial state.; -#X obj 20 754 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 759 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 691 reset; +#X text 245 691 reset to initial state.; +#X obj 20 728 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 733 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 760 1\.; -#X text 245 760 frequency in Hz (can be negative and zero).; -#X text 110 780 2\.; -#X text 150 780 *bang*; -#X text 245 780 reset phase to initial value (@phase).; -#X obj 20 810 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 815 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 734 1\.; +#X text 245 734 frequency in Hz (can be negative and zero).; +#X text 110 754 2\.; +#X text 150 754 *bang*; +#X text 245 754 reset phase to initial value (@phase).; +#X obj 20 784 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 789 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 816 1\.; -#X text 245 816 sawtooth wave in [0-1) range.; +#X text 110 790 1\.; +#X text 245 790 sawtooth wave in [0-1) range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 866 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 869 library: ceammc v0.9.4; -#X text 404 881 see also:; -#X obj 478 881 lfo.saw~; -#X obj 551 881 lfo.+square~; -#X obj 653 881 lfo.impulse~; -#N canvas 10 888 400 290 info 0; +#X obj 1 840 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 843 library: ceammc v0.9.6; +#X text 404 855 see also:; +#X obj 478 855 lfo.saw~; +#X obj 551 855 lfo.+square~; +#X obj 653 855 lfo.impulse~; +#N canvas 10 862 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.+saw~; #X text 10 76 category:; @@ -97,7 +97,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 888 pd info; +#X restore 10 862 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 10 0; diff --git a/ceammc/ext/doc/lfo.+saw~.pddoc b/ceammc/ext/doc/lfo.+saw~.pddoc index b5fda60d2a..01e39ef341 100644 --- a/ceammc/ext/doc/lfo.+saw~.pddoc +++ b/ceammc/ext/doc/lfo.+saw~.pddoc @@ -19,17 +19,16 @@ - frequency - invert saw + frequency + invert saw - wave inversion - pause oscillator at current + wave inversion + pause oscillator at current value initial phase - on/off dsp - processing + on/off dsp processing reset to initial state diff --git a/ceammc/ext/doc/lfo.+square~-help.pd b/ceammc/ext/doc/lfo.+square~-help.pd index 1e8ddca0cb..4fb6dffa97 100644 --- a/ceammc/ext/doc/lfo.+square~-help.pd +++ b/ceammc/ext/doc/lfo.+square~-help.pd @@ -18,54 +18,54 @@ #X text 110 323 1\.; #X text 150 323 float; #X obj 246 324 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 freq(Hz): frequency. Type: float.; +#X text 245 323 FREQ(Hz): frequency. Type: float.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 393 @active; -#X text 245 393 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 435 @pause; -#X text 245 435 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 477 @phase; -#X text 245 477 Get/Set initial phase. Type: float. Default value: +#X text 245 393 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 422 @pause; +#X text 245 422 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 464 @phase; +#X text 245 464 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 534 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 516 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 521 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 569 reset; -#X text 245 569 reset to initial state.; -#X obj 20 606 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 611 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 556 reset; +#X text 245 556 reset to initial state.; +#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 598 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 612 1\.; -#X text 245 612 frequency in Hz.; -#X text 110 632 2\.; -#X text 150 632 *bang*; -#X text 245 632 reset phase.; -#X obj 20 662 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 667 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 599 1\.; +#X text 245 599 frequency in Hz.; +#X text 110 619 2\.; +#X text 150 619 *bang*; +#X text 245 619 reset phase.; +#X obj 20 649 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 654 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 668 1\.; -#X text 245 668 output signal in [0 \, 1] range.; +#X text 110 655 1\.; +#X text 245 655 output signal in [0 \, 1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 718 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 721 library: ceammc v0.9.4; -#X text 411 733 see also:; -#X obj 485 733 lfo.square~; -#X obj 580 733 lfo.impulse~; -#X obj 682 733 lfo.tri~; -#N canvas 10 740 400 290 info 0; +#X obj 1 705 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 708 library: ceammc v0.9.6; +#X text 411 720 see also:; +#X obj 485 720 lfo.square~; +#X obj 580 720 lfo.impulse~; +#X obj 682 720 lfo.tri~; +#N canvas 10 727 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.+square~; #X text 10 76 category:; @@ -84,7 +84,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 740 pd info; +#X restore 10 727 pd info; #X connect 5 0 6 0; #X connect 4 0 7 0; #X connect 6 0 7 1; diff --git a/ceammc/ext/doc/lfo.+square~.pddoc b/ceammc/ext/doc/lfo.+square~.pddoc index 71d962ccc0..338946f2e4 100644 --- a/ceammc/ext/doc/lfo.+square~.pddoc +++ b/ceammc/ext/doc/lfo.+square~.pddoc @@ -19,12 +19,11 @@ - frequency + frequency - on/off dsp - processing - pause oscillator at current + on/off dsp processing + pause oscillator at current value initial phase diff --git a/ceammc/ext/doc/lfo.+tri~-help.pd b/ceammc/ext/doc/lfo.+tri~-help.pd index b98d168e31..351800181e 100644 --- a/ceammc/ext/doc/lfo.+tri~-help.pd +++ b/ceammc/ext/doc/lfo.+tri~-help.pd @@ -18,54 +18,54 @@ #X text 110 323 1\.; #X text 150 323 float; #X obj 246 324 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 freq(Hz): frequency. Type: float.; +#X text 245 323 FREQ(Hz): frequency. Type: float.; #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 393 @active; -#X text 245 393 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 435 @pause; -#X text 245 435 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 477 @phase; -#X text 245 477 Get/Set initial phase. Type: float. Default value: +#X text 245 393 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 422 @pause; +#X text 245 422 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 464 @phase; +#X text 245 464 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 534 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 516 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 521 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 569 reset; -#X text 245 569 reset to initial state.; -#X obj 20 606 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 611 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 556 reset; +#X text 245 556 reset to initial state.; +#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 598 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 612 1\.; -#X text 245 612 frequency in Hz (can be negative or zero).; -#X text 110 632 2\.; -#X text 150 632 *bang*; -#X text 245 632 reset phase.; -#X obj 20 662 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 667 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 599 1\.; +#X text 245 599 frequency in Hz (can be negative or zero).; +#X text 110 619 2\.; +#X text 150 619 *bang*; +#X text 245 619 reset phase.; +#X obj 20 649 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 654 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 668 1\.; -#X text 245 668 triangle wave in [0-1) range.; +#X text 110 655 1\.; +#X text 245 655 triangle wave in [0-1) range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 718 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 721 library: ceammc v0.9.4; -#X text 411 733 see also:; -#X obj 485 733 lfo.tri~; -#X obj 558 733 lfo.square~; -#X obj 653 733 lfo.impulse~; -#N canvas 10 740 400 290 info 0; +#X obj 1 705 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 708 library: ceammc v0.9.6; +#X text 411 720 see also:; +#X obj 485 720 lfo.tri~; +#X obj 558 720 lfo.square~; +#X obj 653 720 lfo.impulse~; +#N canvas 10 727 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.+tri~; #X text 10 76 category:; @@ -84,7 +84,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 740 pd info; +#X restore 10 727 pd info; #X connect 5 0 6 0; #X connect 4 0 7 0; #X connect 6 0 7 1; diff --git a/ceammc/ext/doc/lfo.+tri~.pddoc b/ceammc/ext/doc/lfo.+tri~.pddoc index f998614916..6459106459 100644 --- a/ceammc/ext/doc/lfo.+tri~.pddoc +++ b/ceammc/ext/doc/lfo.+tri~.pddoc @@ -19,12 +19,11 @@ - frequency + frequency - on/off dsp - processing - pause oscillator at current + on/off dsp processing + pause oscillator at current value initial phase diff --git a/ceammc/ext/doc/lfo.impulse~-help.pd b/ceammc/ext/doc/lfo.impulse~-help.pd index 32a85acb45..c2e40036e0 100644 --- a/ceammc/ext/doc/lfo.impulse~-help.pd +++ b/ceammc/ext/doc/lfo.impulse~-help.pd @@ -21,31 +21,34 @@ #X obj 20 343 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 378 @active; -#X text 245 378 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 378 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 436 1\.; -#X text 245 436 frequency in Hz.; -#X obj 20 466 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 471 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 423 1\.; +#X text 245 423 frequency in Hz.; +#X text 110 443 2\.; +#X text 150 443 *bang*; +#X text 245 443 reset phase.; +#X obj 20 473 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 478 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 472 1\.; -#X text 245 472 output signal.; +#X text 110 479 1\.; +#X text 245 479 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 522 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 525 library: ceammc v0.9.4; -#N canvas 10 544 400 290 info 0; +#X obj 1 529 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 532 library: ceammc v0.9.6; +#N canvas 10 551 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.impulse~; #X text 10 76 category:; @@ -64,7 +67,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 544 pd info; +#X restore 10 551 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 7 1; diff --git a/ceammc/ext/doc/lfo.impulse~.pddoc b/ceammc/ext/doc/lfo.impulse~.pddoc index 15028a5719..c809b27a4a 100644 --- a/ceammc/ext/doc/lfo.impulse~.pddoc +++ b/ceammc/ext/doc/lfo.impulse~.pddoc @@ -14,16 +14,18 @@ 0.1 - on/off dsp - processing + on/off dsp processing - frequency + frequency frequency in Hz + + reset phase + output signal diff --git a/ceammc/ext/doc/lfo.mosc~-help.pd b/ceammc/ext/doc/lfo.mosc~-help.pd index fd6a4ea9eb..03495c2114 100644 --- a/ceammc/ext/doc/lfo.mosc~-help.pd +++ b/ceammc/ext/doc/lfo.mosc~-help.pd @@ -23,66 +23,72 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): frequency. Type: float.; -#X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 245 434 FREQ(Hz): frequency. Type: float.; +#X text 110 454 2\.; +#X text 150 454 symbol; +#X obj 246 455 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 454 WAVE: wave type. Allowed values: sin \, saw \, tri +\, sqr \, pulse \, +sin \, +saw \, +tri \, +sqr \, +pulse. . Type: +symbol.; +#X obj 20 499 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 504 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 504 @active; -#X text 245 504 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 546 @duty; -#X text 245 546 Get/Set duty cycle for pulse waveform. Type: float. +#X msg 110 539 @active; +#X text 245 539 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 568 @duty; +#X text 245 568 Get/Set duty cycle for pulse waveform. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 588 @pause; -#X text 245 588 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 630 @phase; -#X text 245 630 Get/Set initial phase. Type: float. Default value: +#X msg 110 610 @pause; +#X text 245 610 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 652 @phase; +#X text 245 652 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 672 @wave; -#X text 245 672 Get/Set wave type. Type: symbol. Default value: sin. +#X msg 110 694 @wave; +#X text 245 694 Get/Set wave type. Type: symbol. Default value: sin. Allowed values: sin \, saw \, tri \, sqr \, pulse \, +sin \, +saw \, +tri \, +sqr \, +pulse.; -#X msg 110 729 @windex; -#X text 245 729 Get/Set waveform index (counting from 0): sin \, saw +#X msg 110 751 @windex; +#X text 245 751 Get/Set waveform index (counting from 0): sin \, saw \, tri \, sqr \, pulse \, +sin \, +saw \, +tri \, +sqr \, +pulse. Type: int. Default value: 0\. Range: 0\...9\.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 818 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 823 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 836 reset; -#X text 245 836 reset to initial state.; -#X obj 20 873 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 878 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 858 reset; +#X text 245 858 reset to initial state.; +#X obj 20 895 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 900 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 879 1\.; -#X text 245 879 frequency in Hz.; -#X text 110 899 2\.; -#X text 150 899 *bang*; -#X text 245 899 reset phase.; -#X text 150 919 *int*; -#X text 245 919 select waveform.; -#X obj 20 949 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 954 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 901 1\.; +#X text 245 901 frequency in Hz.; +#X text 110 921 2\.; +#X text 150 921 *bang*; +#X text 245 921 reset phase.; +#X text 150 941 *int*; +#X text 245 941 select waveform.; +#X obj 20 971 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 976 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 955 1\.; -#X text 245 955 oscillator output.; +#X text 110 977 1\.; +#X text 245 977 oscillator output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 1005 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1008 library: ceammc v0.9.4; -#X text 513 1020 see also:; -#X obj 587 1020 lfo.square~; -#X obj 682 1020 lfo.saw~; -#N canvas 10 1027 400 290 info 0; +#X obj 1 1027 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1030 library: ceammc v0.9.6; +#X text 513 1042 see also:; +#X obj 587 1042 lfo.square~; +#X obj 682 1042 lfo.saw~; +#N canvas 10 1049 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.mosc~; #X text 10 76 category:; @@ -101,7 +107,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1027 pd info; +#X restore 10 1049 pd info; #X connect 8 0 10 0; #X connect 6 0 11 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/lfo.mosc~.pddoc b/ceammc/ext/doc/lfo.mosc~.pddoc index ad3f9dee39..afeb715824 100644 --- a/ceammc/ext/doc/lfo.mosc~.pddoc +++ b/ceammc/ext/doc/lfo.mosc~.pddoc @@ -21,12 +21,14 @@ switching between waveforms is interpolated and takes 50ms. - frequency + frequency + wave type duty cycle for pulse waveform - pause oscillator at current + pause oscillator at current value initial phase @@ -35,8 +37,7 @@ +pulse. wave type - on/off dsp - processing + on/off dsp processing reset to initial state diff --git a/ceammc/ext/doc/lfo.pulse~-help.pd b/ceammc/ext/doc/lfo.pulse~-help.pd index a8b8075808..f5e306d3df 100644 --- a/ceammc/ext/doc/lfo.pulse~-help.pd +++ b/ceammc/ext/doc/lfo.pulse~-help.pd @@ -19,62 +19,65 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 float; -#X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): frequency. Type: float.; +#X obj 246 352 cnv 1 100 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 INITFREQ(Hz): initial frequency. Type: float.; #X text 110 371 2\.; #X text 150 371 float; #X obj 246 372 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 duty: duty cycle. Type: float. Range: 0\...1; +#X text 245 371 DUTY: duty cycle. Type: float. Range: 0\...1; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @duty; -#X text 245 483 Get/Set duty cycle. Type: float. Default value: 0.5\. +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @duty; +#X text 245 470 Get/Set duty cycle. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X msg 110 525 @pause; -#X text 245 525 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 567 @phase; -#X text 245 567 Get/Set initial phase. Type: float. Default value: +#X msg 110 512 @initfreq; +#X text 245 512 (initonly) Get/Set initial frequency. Type: float. +Units: Hz. Default value: 0\.; +#X msg 110 554 @pause; +#X text 245 554 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 596 @phase; +#X text 245 596 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 619 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 624 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 653 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 659 reset; -#X text 245 659 reset to initial state.; -#X obj 20 696 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 701 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 688 reset; +#X text 245 688 reset to initial state.; +#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 730 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 702 1\.; -#X text 245 702 frequency in Hz.; -#X text 110 722 2\.; -#X text 150 722 *bang*; -#X text 245 722 reset phase.; -#X obj 20 752 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 757 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 731 1\.; +#X text 245 731 frequency in Hz.; +#X text 110 751 2\.; +#X text 150 751 *bang*; +#X text 245 751 reset phase.; +#X obj 20 781 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 786 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 758 1\.; -#X text 245 758 pulsetrain wave in [-1 \, +1] range.; +#X text 110 787 1\.; +#X text 245 787 pulsetrain wave in [-1 \, +1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 811 library: ceammc v0.9.4; -#X text 389 823 see also:; -#X obj 463 823 lfo.+pulse~; -#X obj 558 823 lfo.square~; -#X obj 653 823 lfo.impulse~; -#N canvas 10 830 400 290 info 0; +#X obj 1 837 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 840 library: ceammc v0.9.6; +#X text 389 852 see also:; +#X obj 463 852 lfo.+pulse~; +#X obj 558 852 lfo.square~; +#X obj 653 852 lfo.impulse~; +#N canvas 10 859 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.pulse~; #X text 10 76 category:; @@ -93,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 830 pd info; +#X restore 10 859 pd info; #X connect 4 0 6 0; #X connect 5 0 8 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/lfo.pulse~.pddoc b/ceammc/ext/doc/lfo.pulse~.pddoc index d8a49a51da..9f046f5179 100644 --- a/ceammc/ext/doc/lfo.pulse~.pddoc +++ b/ceammc/ext/doc/lfo.pulse~.pddoc @@ -19,18 +19,19 @@ - frequency - duty cycle + initial frequency + duty cycle duty cycle - pause oscillator at current + pause oscillator at current value initial phase - on/off dsp - processing + + initial frequency + on/off dsp processing reset to initial state diff --git a/ceammc/ext/doc/lfo.saw~-help.pd b/ceammc/ext/doc/lfo.saw~-help.pd index 4b337aa588..1c4231ff6a 100644 --- a/ceammc/ext/doc/lfo.saw~-help.pd +++ b/ceammc/ext/doc/lfo.saw~-help.pd @@ -22,61 +22,61 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): frequency. Type: float.; +#X text 245 351 FREQ(Hz): frequency. Type: float.; #X text 110 371 2\.; -#X text 150 371 float; +#X text 150 371 bool; #X obj 246 372 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 invert: wave inversion. Type: float. Range: 0\...1; +#X text 245 371 INVERT: wave inversion. Type: bool.; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @active; -#X text 245 441 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 483 @invert; -#X text 245 483 Get/Set wave inversion. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 525 @pause; -#X text 245 525 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 567 @phase; -#X text 245 567 Get/Set initial phase. Type: float. Default value: +#X text 245 441 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 470 @invert; +#X text 245 470 Get/Set wave inversion. Type: bool. Default value: +0\.; +#X msg 110 499 @pause; +#X text 245 499 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 541 @phase; +#X text 245 541 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 619 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 624 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 598 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 659 reset; -#X text 245 659 reset to initial state.; -#X obj 20 696 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 701 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 633 reset; +#X text 245 633 reset to initial state.; +#X obj 20 670 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 675 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 702 1\.; -#X text 245 702 frequency in Hz (can be zero or negative).; -#X text 110 722 2\.; -#X text 150 722 *bang*; -#X text 245 722 reset phase.; -#X obj 20 752 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 757 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 676 1\.; +#X text 245 676 frequency in Hz (can be zero or negative).; +#X text 110 696 2\.; +#X text 150 696 *bang*; +#X text 245 696 reset phase.; +#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 731 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 758 1\.; -#X text 245 758 saw wave in [-1 \, +1] range.; +#X text 110 732 1\.; +#X text 245 732 saw wave in [-1 \, +1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 811 library: ceammc v0.9.4; -#X text 403 823 see also:; -#X obj 477 823 lfo.+saw~; -#X obj 558 823 lfo.square~; -#X obj 653 823 lfo.impulse~; -#N canvas 10 830 400 290 info 0; +#X obj 1 782 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 785 library: ceammc v0.9.6; +#X text 403 797 see also:; +#X obj 477 797 lfo.+saw~; +#X obj 558 797 lfo.square~; +#X obj 653 797 lfo.impulse~; +#N canvas 10 804 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.saw~; #X text 10 76 category:; @@ -95,7 +95,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 830 pd info; +#X restore 10 804 pd info; #X connect 4 0 5 0; #X connect 6 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/lfo.saw~.pddoc b/ceammc/ext/doc/lfo.saw~.pddoc index 3f7647a8da..e74cf99d91 100644 --- a/ceammc/ext/doc/lfo.saw~.pddoc +++ b/ceammc/ext/doc/lfo.saw~.pddoc @@ -19,18 +19,16 @@ - frequency - wave - inversion + frequency + wave inversion - wave inversion - pause oscillator at current + wave inversion + pause oscillator at current value initial phase - on/off dsp - processing + on/off dsp processing reset to initial state diff --git a/ceammc/ext/doc/lfo.square~-help.pd b/ceammc/ext/doc/lfo.square~-help.pd index c29ad5fe5e..ed534b138d 100644 --- a/ceammc/ext/doc/lfo.square~-help.pd +++ b/ceammc/ext/doc/lfo.square~-help.pd @@ -19,54 +19,54 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): frequency. Type: float.; +#X text 245 351 FREQ(Hz): frequency. Type: float.; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 421 @active; -#X text 245 421 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 463 @pause; -#X text 245 463 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 505 @phase; -#X text 245 505 Get/Set initial phase. Type: float. Default value: +#X text 245 421 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 450 @pause; +#X text 245 450 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 492 @phase; +#X text 245 492 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 562 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 544 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 549 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 597 reset; -#X text 245 597 reset to initial state.; -#X obj 20 634 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 639 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 584 reset; +#X text 245 584 reset to initial state.; +#X obj 20 621 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 626 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 640 1\.; -#X text 245 640 frequency in Hz.; -#X text 110 660 2\.; -#X text 150 660 *bang*; -#X text 245 660 reset phase.; -#X obj 20 690 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 695 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 627 1\.; +#X text 245 627 frequency in Hz.; +#X text 110 647 2\.; +#X text 150 647 *bang*; +#X text 245 647 reset phase.; +#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 682 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 696 1\.; -#X text 245 696 output signal.; +#X text 110 683 1\.; +#X text 245 683 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 746 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 749 library: ceammc v0.9.4; -#X text 404 761 see also:; -#X obj 478 761 lfo.+square~; -#X obj 580 761 lfo.impulse~; -#X obj 682 761 lfo.tri~; -#N canvas 10 768 400 290 info 0; +#X obj 1 733 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 736 library: ceammc v0.9.6; +#X text 404 748 see also:; +#X obj 478 748 lfo.+square~; +#X obj 580 748 lfo.impulse~; +#X obj 682 748 lfo.tri~; +#N canvas 10 755 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.square~; #X text 10 76 category:; @@ -85,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 768 pd info; +#X restore 10 755 pd info; #X connect 4 0 5 0; #X connect 6 0 8 0; #X connect 7 0 8 1; diff --git a/ceammc/ext/doc/lfo.square~.pddoc b/ceammc/ext/doc/lfo.square~.pddoc index 8a68906cbf..5e77a92a65 100644 --- a/ceammc/ext/doc/lfo.square~.pddoc +++ b/ceammc/ext/doc/lfo.square~.pddoc @@ -19,12 +19,11 @@ - frequency + frequency - on/off dsp - processing - pause oscillator at current + on/off dsp processing + pause oscillator at current value initial phase diff --git a/ceammc/ext/doc/lfo.tri~-help.pd b/ceammc/ext/doc/lfo.tri~-help.pd index d2fbdb69c5..e1dbb5b0cf 100644 --- a/ceammc/ext/doc/lfo.tri~-help.pd +++ b/ceammc/ext/doc/lfo.tri~-help.pd @@ -19,54 +19,54 @@ #X text 110 351 1\.; #X text 150 351 float; #X obj 246 352 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 freq(Hz): frequency. Type: float.; +#X text 245 351 FREQ(Hz): frequency. Type: float.; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 421 @active; -#X text 245 421 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 463 @pause; -#X text 245 463 Get/Set pause oscillator at current value. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 505 @phase; -#X text 245 505 Get/Set initial phase. Type: float. Default value: +#X text 245 421 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 450 @pause; +#X text 245 450 Get/Set pause oscillator at current value. Type: bool. +Default value: 0\.; +#X msg 110 492 @phase; +#X text 245 492 Get/Set initial phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 562 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 544 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 549 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 597 reset; -#X text 245 597 reset to initial state.; -#X obj 20 634 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 639 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 584 reset; +#X text 245 584 reset to initial state.; +#X obj 20 621 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 626 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 640 1\.; -#X text 245 640 frequency in Hz (can be zero or negative).; -#X text 110 660 2\.; -#X text 150 660 *bang*; -#X text 245 660 reset phase.; -#X obj 20 690 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 695 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 627 1\.; +#X text 245 627 frequency in Hz (can be zero or negative).; +#X text 110 647 2\.; +#X text 150 647 *bang*; +#X text 245 647 reset phase.; +#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 682 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 696 1\.; -#X text 245 696 triangle wave in [1 \, -1] range.; +#X text 110 683 1\.; +#X text 245 683 triangle wave in [1 \, -1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lfo @url ceammc.lfo-help.pd; -#X obj 1 746 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 749 library: ceammc v0.9.4; -#X text 403 761 see also:; -#X obj 477 761 lfo.+tri~; -#X obj 558 761 lfo.square~; -#X obj 653 761 lfo.impulse~; -#N canvas 10 768 400 290 info 0; +#X obj 1 733 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 736 library: ceammc v0.9.6; +#X text 403 748 see also:; +#X obj 477 748 lfo.+tri~; +#X obj 558 748 lfo.square~; +#X obj 653 748 lfo.impulse~; +#N canvas 10 755 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 lfo.tri~; #X text 10 76 category:; @@ -85,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 768 pd info; +#X restore 10 755 pd info; #X connect 4 0 6 0; #X connect 7 0 9 0; #X connect 8 0 9 1; diff --git a/ceammc/ext/doc/lfo.tri~.pddoc b/ceammc/ext/doc/lfo.tri~.pddoc index 93fa144b86..c14e6131f5 100644 --- a/ceammc/ext/doc/lfo.tri~.pddoc +++ b/ceammc/ext/doc/lfo.tri~.pddoc @@ -19,12 +19,11 @@ - frequency + frequency - on/off dsp - processing - pause oscillator at current + on/off dsp processing + pause oscillator at current value initial phase diff --git a/ceammc/ext/doc/list.^at-help.pd b/ceammc/ext/doc/list.^at-help.pd index c8892e8406..0acea555f2 100644 --- a/ceammc/ext/doc/list.^at-help.pd +++ b/ceammc/ext/doc/list.^at-help.pd @@ -14,8 +14,8 @@ -49933 0; #X text 110 265 1\.; #X text 150 265 list; -#X obj 246 266 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 265 LIST: list contents. Type: list.; +#X obj 246 266 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 265 VALUE: list contents. Type: list.; #X obj 20 295 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 300 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -24,7 +24,7 @@ element. If index greater or equal list size - return last element.; #X msg 110 377 @default; #X text 245 377 Get/Set default output value if element was not found. -Type: atom. Default value: none.; +Type: atom. Default value: None.; #X msg 110 419 @fold; #X text 245 419 alias to @method fold. In range [0 \, LIST_SIZE) ordinal elements are returned. [LIST_SIZE \, 2*LIST_SIZE) - returned in negative @@ -63,7 +63,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 803 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 806 library: ceammc v0.9.4; +#X text 10 806 library: ceammc v0.9.6; #X text 616 818 see also:; #X obj 690 818 list.at; #N canvas 10 825 400 290 info 0; @@ -71,7 +71,7 @@ elements are returned. Other indexes are wrapped by modulo division.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.^at; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.^at.pddoc b/ceammc/ext/doc/list.^at.pddoc index e6140336b2..3532dc6d8f 100644 --- a/ceammc/ext/doc/list.^at.pddoc +++ b/ceammc/ext/doc/list.^at.pddoc @@ -17,11 +17,11 @@ - list contents + list contents - list contents - default output value if element + list contents + default output value if element was not found methods of processing of negative/invalid indexes diff --git a/ceammc/ext/doc/list.^contains-help.pd b/ceammc/ext/doc/list.^contains-help.pd index 5757bb8fb3..171216e9fa 100644 --- a/ceammc/ext/doc/list.^contains-help.pd +++ b/ceammc/ext/doc/list.^contains-help.pd @@ -36,8 +36,8 @@ -49933 0; #X text 110 515 1\.; #X text 150 515 list; -#X obj 246 516 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 515 LIST: list contents. Type: list.; +#X obj 246 516 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 515 VALUE: list contents. Type: list.; #X obj 20 545 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 550 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -71,7 +71,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 816 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 819 library: ceammc v0.9.4; +#X text 10 819 library: ceammc v0.9.6; #X text 378 831 see also:; #X obj 452 831 list.contains; #X obj 560 831 list.all_of; @@ -81,7 +81,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.^contains; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.^contains.pddoc b/ceammc/ext/doc/list.^contains.pddoc index 1af83f3972..4a7a6c0ec2 100644 --- a/ceammc/ext/doc/list.^contains.pddoc +++ b/ceammc/ext/doc/list.^contains.pddoc @@ -23,10 +23,10 @@ Different arguments order then in [list.^contains] - list contents + list contents - list contents + list contents diff --git a/ceammc/ext/doc/list.^search-help.pd b/ceammc/ext/doc/list.^search-help.pd index e6b6dc25da..bc64b2cbd0 100644 --- a/ceammc/ext/doc/list.^search-help.pd +++ b/ceammc/ext/doc/list.^search-help.pd @@ -23,8 +23,8 @@ -49933 0; #X text 110 405 1\.; #X text 150 405 list; -#X obj 246 406 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 405 LIST: list contents. Type: list.; +#X obj 246 406 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 405 VALUE: list contents. Type: list.; #X obj 20 435 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 440 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -62,7 +62,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 770 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 773 library: ceammc v0.9.4; +#X text 10 773 library: ceammc v0.9.6; #X text 363 785 see also:; #X obj 437 785 list.search; #X obj 531 785 list.contains; @@ -72,7 +72,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.^search; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.^search.pddoc b/ceammc/ext/doc/list.^search.pddoc index fb337b009a..5734f1c256 100644 --- a/ceammc/ext/doc/list.^search.pddoc +++ b/ceammc/ext/doc/list.^search.pddoc @@ -22,10 +22,10 @@ Outputs index or -1 if not found - list contents + list contents - list contents + list contents search start index position search end index position diff --git a/ceammc/ext/doc/list.all_of-help.pd b/ceammc/ext/doc/list.all_of-help.pd index cdc7f61110..db6ef35c5e 100644 --- a/ceammc/ext/doc/list.all_of-help.pd +++ b/ceammc/ext/doc/list.all_of-help.pd @@ -42,7 +42,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 518 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 521 library: ceammc v0.9.4; +#X text 10 521 library: ceammc v0.9.6; #X text 580 533 see also:; #X obj 654 533 list.none_of; #N canvas 10 540 400 290 info 0; @@ -50,7 +50,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.all_of; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.any_of-help.pd b/ceammc/ext/doc/list.any_of-help.pd index 6743aa55c8..bb6abb3ec6 100644 --- a/ceammc/ext/doc/list.any_of-help.pd +++ b/ceammc/ext/doc/list.any_of-help.pd @@ -40,7 +40,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 486 520 see also:; #X obj 560 520 list.all_of; #X obj 654 520 list.none_of; @@ -49,7 +49,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.any_of; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.append-help.pd b/ceammc/ext/doc/list.append-help.pd index bbd8e0a37e..2174f884c8 100644 --- a/ceammc/ext/doc/list.append-help.pd +++ b/ceammc/ext/doc/list.append-help.pd @@ -24,8 +24,8 @@ -49933 0; #X text 110 333 1\.; #X text 150 333 list; -#X obj 246 334 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 333 LIST: appended value. Type: list.; +#X obj 246 334 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 333 VALUE: appended value. Type: list.; #X obj 20 363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 368 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -61,7 +61,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 654 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 657 library: ceammc v0.9.4; +#X text 10 657 library: ceammc v0.9.6; #X text 587 669 see also:; #X obj 661 669 list append; #N canvas 10 676 400 290 info 0; @@ -69,7 +69,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.append; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.append.pddoc b/ceammc/ext/doc/list.append.pddoc index 200fecc00d..3a2d450b0c 100644 --- a/ceammc/ext/doc/list.append.pddoc +++ b/ceammc/ext/doc/list.append.pddoc @@ -20,10 +20,10 @@ Works with data atoms - appended value + appended value - append value + append value diff --git a/ceammc/ext/doc/list.apply_to-help.pd b/ceammc/ext/doc/list.apply_to-help.pd index 7c87016144..83fdf086de 100644 --- a/ceammc/ext/doc/list.apply_to-help.pd +++ b/ceammc/ext/doc/list.apply_to-help.pd @@ -9,57 +9,56 @@ it via external object; #X msg 50 118 1 60 61 120; #X obj 50 147 list.apply_to 1 -2; #X obj 270 147 mtof; -#X obj 50 176 msg set; -#X msg 50 205 ; -#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 176 ui.dt; +#X obj 20 225 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 230 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 294 1\.; -#X text 150 294 list; -#X obj 246 295 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 index: apply index(es) (starting from 0). Negative +#X text 110 265 1\.; +#X text 150 265 list; +#X obj 246 266 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 265 INDEXES: apply index(es) (starting from 0). Negative value means position from end of the list. For example: '-1' means last element.. Type: list.; -#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 359 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 325 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 330 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 394 @indexes; -#X text 245 394 Get/Set applied index(es). Type: list.; -#X obj 20 433 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 438 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 365 @indexes; +#X text 245 365 Get/Set applied index(es). Type: list.; +#X obj 20 404 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 409 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 439 1\.; -#X text 150 439 *list*; -#X text 245 439 Input list. If no element found by specified index +#X text 110 410 1\.; +#X text 150 410 *list*; +#X text 245 410 Input list. If no element found by specified index - list passed without changes.; -#X text 110 474 2\.; -#X text 150 474 *list*; -#X text 245 474 set apply index(es).; -#X text 110 494 3\.; -#X text 245 494 return value from applied object.; -#X obj 20 524 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 529 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 445 2\.; +#X text 150 445 *list*; +#X text 245 445 set apply index(es).; +#X text 110 465 3\.; +#X text 245 465 return value from applied object.; +#X obj 20 495 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 500 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 530 1\.; -#X text 245 530 new modified list.; -#X text 110 550 2\.; -#X text 245 550 element at given index. Should be passed to applied +#X text 110 501 1\.; +#X text 245 501 new modified list.; +#X text 110 521 2\.; +#X text 245 521 element at given index. Should be passed to applied object.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 600 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 603 library: ceammc v0.9.4; -#X text 601 615 see also:; -#X obj 675 615 list.each; -#N canvas 10 622 400 290 info 0; +#X obj 1 571 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 574 library: ceammc v0.9.6; +#X text 601 586 see also:; +#X obj 675 586 list.each; +#N canvas 10 593 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.apply_to; #X text 10 76 category:; @@ -78,9 +77,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 622 pd info; +#X restore 10 593 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; -#X connect 7 0 8 0; #X connect 5 1 6 0; #X connect 6 0 5 2; \ No newline at end of file diff --git a/ceammc/ext/doc/list.apply_to.pddoc b/ceammc/ext/doc/list.apply_to.pddoc index a2e2bc5b09..61b5a32355 100644 --- a/ceammc/ext/doc/list.apply_to.pddoc +++ b/ceammc/ext/doc/list.apply_to.pddoc @@ -18,11 +18,11 @@ - apply index(es) (starting from 0). Negative value + apply index(es) (starting from 0). Negative value means position from end of the list. For example: '-1' means last element. - applied index(es) + applied index(es) @@ -47,9 +47,7 @@ | [list.apply_to 1 -2] X [mtof] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/list.at-help.pd b/ceammc/ext/doc/list.at-help.pd index 63f51acab1..e11b1ee30b 100644 --- a/ceammc/ext/doc/list.at-help.pd +++ b/ceammc/ext/doc/list.at-help.pd @@ -39,8 +39,8 @@ are returned. Other indexes are wrapped by modulo division.; -49933 0; #X text 110 627 1\.; #X text 150 627 list; -#X obj 246 628 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 627 position: single or multiple elements position. Type: +#X obj 246 628 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 627 INDEX: single or multiple elements position. Type: list.; #X obj 20 657 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 662 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -50,39 +50,39 @@ list.; element. If index greater or equal list size - return last element.; #X msg 110 739 @default; #X text 245 739 Get/Set default output value if not found. If not set -\, outputs error message to console. Type: atom.; -#X msg 110 781 @fold; -#X text 245 781 alias to @method fold. In range [0 \, LIST_SIZE) ordinal +\, outputs error message to console. Type: atom. Default value: null.; +#X msg 110 796 @fold; +#X text 245 796 alias to @method fold. In range [0 \, LIST_SIZE) ordinal elements are returned. [LIST_SIZE \, 2*LIST_SIZE) - returned in negative order etc.; -#X msg 110 838 @index; -#X text 245 838 Get/Set indexes. Type: list. Default value: 0\.; -#X msg 110 867 @method; -#X text 245 867 Get/Set methods of processing of negative/invalid indexes. +#X msg 110 853 @index; +#X text 245 853 Get/Set indexes. Type: list. Default value: 0\.; +#X msg 110 882 @method; +#X text 245 882 Get/Set methods of processing of negative/invalid indexes. Type: symbol. Default value: rel. Allowed values: rel \, clip \, fold \, wrap.; -#X msg 110 924 @rel; -#X text 245 924 alias to @method rel. Negative index means position +#X msg 110 939 @rel; +#X text 245 939 alias to @method rel. Negative index means position from the end of the list.; -#X msg 110 966 @wrap; -#X text 245 966 alias to @method wrap. In range [0 \, LIST_SIZE) ordinal +#X msg 110 981 @wrap; +#X text 245 981 alias to @method wrap. In range [0 \, LIST_SIZE) ordinal elements are returned. Other indexes are wrapped by modulo division.; -#X obj 20 1033 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1038 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1048 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1053 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1039 1\.; -#X text 150 1039 *list*; -#X text 245 1039 input list.; -#X text 150 1059 *data:mlist*; -#X text 245 1059 input mlist.; -#X text 110 1079 2\.; -#X text 150 1079 *list*; -#X text 245 1079 positions.; -#X obj 20 1109 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1114 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1054 1\.; +#X text 150 1054 *list*; +#X text 245 1054 input list.; +#X text 150 1074 *data:mlist*; +#X text 245 1074 input mlist.; +#X text 110 1094 2\.; +#X text 150 1094 *list*; +#X text 245 1094 positions.; +#X obj 20 1124 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1129 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1115 1\.; -#X text 245 1115 element(s) at the given index position(s). If element +#X text 110 1130 1\.; +#X text 245 1130 element(s) at the given index position(s). If element not found at specified position and @default property is set \, output that default value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; @@ -90,17 +90,17 @@ that default value.; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 1195 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1198 library: ceammc v0.9.4; -#X text 500 1210 see also:; -#X obj 574 1210 list.^at; -#X obj 646 1210 list.apply_to; -#N canvas 10 1217 400 290 info 0; +#X obj 1 1210 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1213 library: ceammc v0.9.6; +#X text 500 1225 see also:; +#X obj 574 1225 list.^at; +#X obj 646 1225 list.apply_to; +#N canvas 10 1232 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.at; #X text 10 76 category:; @@ -119,7 +119,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1217 pd info; +#X restore 10 1232 pd info; #X connect 9 0 13 0; #X connect 10 0 13 1; #X connect 11 0 14 0; diff --git a/ceammc/ext/doc/list.at.pddoc b/ceammc/ext/doc/list.at.pddoc index 37dab7f721..45d921c249 100644 --- a/ceammc/ext/doc/list.at.pddoc +++ b/ceammc/ext/doc/list.at.pddoc @@ -28,7 +28,7 @@ indexes are wrapped by modulo division. - single or multiple elements position + single or multiple elements position methods @@ -43,8 +43,8 @@ alias to @method wrap. In range [0, LIST_SIZE) ordinal elements are returned. Other indexes are wrapped by modulo division. indexes - default output value if not found. If not set, - outputs error message to console + default output value if not found. + If not set, outputs error message to console diff --git a/ceammc/ext/doc/list.choice-help.pd b/ceammc/ext/doc/list.choice-help.pd index b22dffd280..aca1c8e3a0 100644 --- a/ceammc/ext/doc/list.choice-help.pd +++ b/ceammc/ext/doc/list.choice-help.pd @@ -23,36 +23,35 @@ #X msg 110 467 @norepeat; #X text 245 467 Get/Set norepeat property. If 1 is given: every time output value at new list position \, do not repeat choosed position -twice at adjacent events. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X obj 20 549 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 554 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +twice at adjacent events. Type: bool. Default value: 0\.; +#X obj 20 534 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 539 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 555 1\.; -#X text 150 555 *list*; -#X text 245 555 Input list.; -#X text 150 575 *data*; -#X text 245 575 Input mlist.; -#X obj 20 605 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 610 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 540 1\.; +#X text 150 540 *list*; +#X text 245 540 Input list.; +#X text 150 560 *data*; +#X text 245 560 Input mlist.; +#X obj 20 590 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 595 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 611 1\.; -#X text 245 611 random list element.; +#X text 110 596 1\.; +#X text 245 596 random list element.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 661 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 664 library: ceammc v0.9.4; -#X text 595 676 see also:; -#X obj 669 676 random.int; -#N canvas 10 683 400 290 info 0; +#X obj 1 646 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 649 library: ceammc v0.9.6; +#X text 595 661 see also:; +#X obj 669 661 random.int; +#N canvas 10 668 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.choice; #X text 10 76 category:; @@ -71,7 +70,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 683 pd info; +#X restore 10 668 pd info; #X connect 4 0 6 0; #X connect 5 0 6 1; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/list.choice.pddoc b/ceammc/ext/doc/list.choice.pddoc index a0a6822255..7c90d5d105 100644 --- a/ceammc/ext/doc/list.choice.pddoc +++ b/ceammc/ext/doc/list.choice.pddoc @@ -17,9 +17,9 @@ - norepeat property. If 1 is - given: every time output value at new list position, do not repeat choosed position - twice at adjacent events. + norepeat property. If 1 is given: + every time output value at new list position, do not repeat choosed position twice at + adjacent events. diff --git a/ceammc/ext/doc/list.contains-help.pd b/ceammc/ext/doc/list.contains-help.pd index 1801c84c6e..6bfedda376 100644 --- a/ceammc/ext/doc/list.contains-help.pd +++ b/ceammc/ext/doc/list.contains-help.pd @@ -63,7 +63,7 @@ this property value as sublist \, otherwise 0\. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 847 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 850 library: ceammc v0.9.4; +#X text 10 850 library: ceammc v0.9.6; #X text 370 862 see also:; #X obj 444 862 list.^contains; #X obj 560 862 list.all_of; @@ -73,7 +73,7 @@ this property value as sublist \, otherwise 0\. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.contains; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.contains.pddoc b/ceammc/ext/doc/list.contains.pddoc index 522014b5cd..89512a0bb2 100644 --- a/ceammc/ext/doc/list.contains.pddoc +++ b/ceammc/ext/doc/list.contains.pddoc @@ -22,14 +22,14 @@ list for @sublist mode - sublist mode, output 1 if input list contains - this property value as sublist, otherwise 0 - all_of mode, output 1 is input list contains all - of this property values - any_of mode, output 1 is input list contains any - (al least one) of this property values - none_of mode, output 1 is input list contains - none of this property values + sublist mode, output 1 if input list + contains this property value as sublist, otherwise 0 + all_of mode, output 1 is input list + contains all of this property values + any_of mode, output 1 is input list + contains any (al least one) of this property values + none_of mode, output 1 is input list + contains none of this property values diff --git a/ceammc/ext/doc/list.convolve-help.pd b/ceammc/ext/doc/list.convolve-help.pd index 146d5bb0d2..5130928646 100644 --- a/ceammc/ext/doc/list.convolve-help.pd +++ b/ceammc/ext/doc/list.convolve-help.pd @@ -63,13 +63,13 @@ valid \, same \, full.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 833 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 836 library: ceammc v0.9.4; +#X text 10 836 library: ceammc v0.9.6; #N canvas 10 855 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.convolve; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.convolve.pddoc b/ceammc/ext/doc/list.convolve.pddoc index 99fb3f0df0..b283346d02 100644 --- a/ceammc/ext/doc/list.convolve.pddoc +++ b/ceammc/ext/doc/list.convolve.pddoc @@ -24,8 +24,8 @@ second argument values - first argument - second argument + first argument + second argument output mode. 'full' - output the convolution at each point of overlap, with an output length of (M+N-1). At the end-points of the convolution, the signals do not overlap completely, diff --git a/ceammc/ext/doc/list.correlate-help.pd b/ceammc/ext/doc/list.correlate-help.pd index cd83880310..36762145c8 100644 --- a/ceammc/ext/doc/list.correlate-help.pd +++ b/ceammc/ext/doc/list.correlate-help.pd @@ -65,13 +65,13 @@ values: valid \, same \, full.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 960 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 963 library: ceammc v0.9.4; +#X text 10 963 library: ceammc v0.9.6; #N canvas 10 982 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.correlate; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.correlate.pddoc b/ceammc/ext/doc/list.correlate.pddoc index 2478a9a7f6..db2453e1b5 100644 --- a/ceammc/ext/doc/list.correlate.pddoc +++ b/ceammc/ext/doc/list.correlate.pddoc @@ -21,8 +21,8 @@ second argument values - first argument - second argument + first argument + second argument output mode. 'full' - output the cross-correlation at each point of overlap, with an output length of (M+N-1). At the end-points of the cross-correlation, the signals do not diff --git a/ceammc/ext/doc/list.count-help.pd b/ceammc/ext/doc/list.count-help.pd index 1a9828b2b8..c85e88a376 100644 --- a/ceammc/ext/doc/list.count-help.pd +++ b/ceammc/ext/doc/list.count-help.pd @@ -16,9 +16,9 @@ #X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 294 1\.; -#X text 150 294 any; -#X obj 246 295 cnv 1 62 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 pattern: count pattern value. Type: any.; +#X text 150 294 atom; +#X obj 246 295 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 PATTERN: count pattern value. Type: atom.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -45,7 +45,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 538 library: ceammc v0.9.4; +#X text 10 538 library: ceammc v0.9.6; #X text 572 550 see also:; #X obj 646 550 list.count_if; #N canvas 10 557 400 290 info 0; @@ -53,7 +53,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.count; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.count.pddoc b/ceammc/ext/doc/list.count.pddoc index 9058b25683..377c365cb9 100644 --- a/ceammc/ext/doc/list.count.pddoc +++ b/ceammc/ext/doc/list.count.pddoc @@ -17,7 +17,7 @@ - count pattern value + count pattern value new pattern value diff --git a/ceammc/ext/doc/list.count_if-help.pd b/ceammc/ext/doc/list.count_if-help.pd index 78dfd753fd..9692b16d01 100644 --- a/ceammc/ext/doc/list.count_if-help.pd +++ b/ceammc/ext/doc/list.count_if-help.pd @@ -10,46 +10,44 @@ predicate; -1; #X obj 50 147 list.gen 10; #X obj 203 147 random 25; -#X obj 50 176 t b a; -#X obj 88 205 msg set; -#X msg 50 234 ; -#X obj 50 262 list.count_if; -#X obj 222 262 > 10; -#X floatatom 50 291 5 0 0 0 - - -; -#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 69 176 ui.dt; +#X obj 50 219 list.count_if; +#X obj 222 219 > 10; +#X floatatom 50 248 5 0 0 0 - - -; +#X obj 20 297 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 302 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 346 1\.; -#X text 150 346 *list*; -#X text 245 346 input list.; -#X text 150 366 *data*; -#X text 245 366 input mlist.; -#X text 110 386 2\.; -#X text 150 386 *float*; -#X text 245 386 input value from predicate. "1" means accepted. "0" +#X text 110 303 1\.; +#X text 150 303 *list*; +#X text 245 303 input list.; +#X text 150 323 *data*; +#X text 245 323 input mlist.; +#X text 110 343 2\.; +#X text 150 343 *float*; +#X text 245 343 input value from predicate. "1" means accepted. "0" means reject. Range: 0\...1\.; -#X obj 20 431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 436 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 393 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 437 1\.; -#X text 245 437 count of elements.; -#X text 110 457 2\.; -#X text 245 457 element output to predicate.; +#X text 110 394 1\.; +#X text 245 394 count of elements.; +#X text 110 414 2\.; +#X text 245 414 element output to predicate.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 507 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 510 library: ceammc v0.9.4; -#X text 594 522 see also:; -#X obj 668 522 list.count; -#N canvas 10 529 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#X text 594 520 see also:; +#X obj 668 520 list.count; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.count_if; #X text 10 76 category:; @@ -68,15 +66,12 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 529 pd info; +#X restore 10 527 pd info; #X connect 4 0 5 0; #X connect 5 0 7 0; -#X connect 7 1 8 0; -#X connect 7 0 9 0; -#X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 10 0 12 0; +#X connect 5 0 8 0; +#X connect 8 0 10 0; #X connect 5 1 6 0; #X connect 6 0 5 1; -#X connect 10 1 11 0; -#X connect 11 0 10 1; \ No newline at end of file +#X connect 8 1 9 0; +#X connect 9 0 8 1; \ No newline at end of file diff --git a/ceammc/ext/doc/list.count_if.pddoc b/ceammc/ext/doc/list.count_if.pddoc index fa6f45f9dd..d902bc7bc7 100644 --- a/ceammc/ext/doc/list.count_if.pddoc +++ b/ceammc/ext/doc/list.count_if.pddoc @@ -37,12 +37,9 @@ [B] | [list.gen 10] X [random 25] +| | +| [ui.dt] | -[t b a] -| ^| -| [msg set] -| | -[ ( | [list.count_if] X [> 10] | diff --git a/ceammc/ext/doc/list.delta-help.pd b/ceammc/ext/doc/list.delta-help.pd index 3abde0a387..e7d605a881 100644 --- a/ceammc/ext/doc/list.delta-help.pd +++ b/ceammc/ext/doc/list.delta-help.pd @@ -73,7 +73,7 @@ with repeated values from the beginning.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 941 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 944 library: ceammc v0.9.4; +#X text 10 944 library: ceammc v0.9.6; #X text 557 956 see also:; #X obj 631 956 list.integrator; #N canvas 10 963 400 290 info 0; @@ -81,7 +81,7 @@ with repeated values from the beginning.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.delta; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.distribution-help.pd b/ceammc/ext/doc/list.distribution-help.pd index 699cf0b508..300d0b9d95 100644 --- a/ceammc/ext/doc/list.distribution-help.pd +++ b/ceammc/ext/doc/list.distribution-help.pd @@ -25,35 +25,35 @@ #X obj 20 403 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 438 @normalize; -#X text 245 438 Get/Set normalize sum to 1\. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 490 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 495 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 438 Get/Set normalize sum to 1\. Type: bool. Default value: +1\.; +#X obj 20 477 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 482 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 496 1\.; -#X text 150 496 *list*; -#X text 245 496 input list.; -#X text 150 516 *data:mlist*; -#X text 245 516 input mlist.; -#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 551 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 483 1\.; +#X text 150 483 *list*; +#X text 245 483 input list.; +#X text 150 503 *data:mlist*; +#X text 245 503 input mlist.; +#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 538 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 552 1\.; -#X text 245 552 list of pairs: first element - value \, second - number +#X text 110 539 1\.; +#X text 245 539 list of pairs: first element - value \, second - number of repeats in list (by default normalized to have sum 1).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 617 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 620 library: ceammc v0.9.4; -#N canvas 10 639 400 290 info 0; +#X obj 1 604 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 607 library: ceammc v0.9.6; +#N canvas 10 626 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.distribution; #X text 10 76 category:; @@ -72,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 639 pd info; +#X restore 10 626 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/list.distribution.pddoc b/ceammc/ext/doc/list.distribution.pddoc index 5a8581f2ca..40825acb11 100644 --- a/ceammc/ext/doc/list.distribution.pddoc +++ b/ceammc/ext/doc/list.distribution.pddoc @@ -14,8 +14,7 @@ 0.1 - normalize sum to - 1 + normalize sum to 1 diff --git a/ceammc/ext/doc/list.do-help.pd b/ceammc/ext/doc/list.do-help.pd index 01a21322b8..fc5e17d846 100644 --- a/ceammc/ext/doc/list.do-help.pd +++ b/ceammc/ext/doc/list.do-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 list.each; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.do; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.each-help.pd b/ceammc/ext/doc/list.each-help.pd index bec3c31303..cef956d518 100644 --- a/ceammc/ext/doc/list.each-help.pd +++ b/ceammc/ext/doc/list.each-help.pd @@ -31,8 +31,8 @@ So various mapping and filtering are possible.; -49933 0; #X text 110 493 1\.; #X text 150 493 int; -#X obj 246 494 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 493 step: see @step property. Type: int. Range: 1\...1024; +#X obj 246 494 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 493 STEP: see @step property. Type: int. Range: 1\...1024; #X obj 20 523 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 528 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -63,7 +63,7 @@ on each iteration. Type: int. Default value: 1\. Range: 1\...1024\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 782 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 785 library: ceammc v0.9.4; +#X text 10 785 library: ceammc v0.9.6; #X text 507 797 see also:; #X obj 581 797 list.do; #X obj 646 797 list.apply_to; @@ -72,7 +72,7 @@ on each iteration. Type: int. Default value: 1\. Range: 1\...1024\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.each; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.each.pddoc b/ceammc/ext/doc/list.each.pddoc index 448417cbe9..59a16e7e4b 100644 --- a/ceammc/ext/doc/list.each.pddoc +++ b/ceammc/ext/doc/list.each.pddoc @@ -23,7 +23,7 @@ possible. - see @step + see @step property diff --git a/ceammc/ext/doc/list.enumerate-help.pd b/ceammc/ext/doc/list.enumerate-help.pd index c98170d026..1970d59d7b 100644 --- a/ceammc/ext/doc/list.enumerate-help.pd +++ b/ceammc/ext/doc/list.enumerate-help.pd @@ -13,40 +13,47 @@ #X obj 50 205 list.enumerate; #X obj 50 234 ui.display @display_type 1; #X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 323 @append; -#X text 245 323 put element index after element value. Default value: +#X text 110 323 1\.; +#X text 150 323 int; +#X obj 246 324 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 FROM: enumeration start index. Type: int.; +#X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 393 @append; +#X text 245 393 put element index after element value. Default value: 0\.; -#X msg 110 352 @from; -#X text 245 352 Get/Set start enumeration index. Type: int. Default +#X msg 110 422 @from; +#X text 245 422 Get/Set enumeration start index. Type: int. Default value: 0\.; -#X obj 20 404 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 409 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 479 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 410 1\.; -#X text 150 410 *list*; -#X text 245 410 input list.; -#X text 150 430 *data:mlist*; -#X text 245 430 input mlist.; -#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 465 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 480 1\.; +#X text 150 480 *list*; +#X text 245 480 input list.; +#X text 150 500 *data:mlist*; +#X text 245 500 input mlist.; +#X obj 20 530 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 535 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 466 1\.; -#X text 245 466 output list.; +#X text 110 536 1\.; +#X text 245 536 output list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 519 library: ceammc v0.9.4; -#N canvas 10 538 400 290 info 0; +#X obj 1 586 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 589 library: ceammc v0.9.6; +#N canvas 10 608 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.enumerate; #X text 10 76 category:; @@ -65,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 538 pd info; +#X restore 10 608 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; diff --git a/ceammc/ext/doc/list.enumerate.pddoc b/ceammc/ext/doc/list.enumerate.pddoc index e7686f4ef1..d2717da7a3 100644 --- a/ceammc/ext/doc/list.enumerate.pddoc +++ b/ceammc/ext/doc/list.enumerate.pddoc @@ -19,10 +19,13 @@ input mlist + + enumeration start index + - start enumeration index - put element index after element - value + enumeration start index + put element index + after element value output list diff --git a/ceammc/ext/doc/list.equal-help.pd b/ceammc/ext/doc/list.equal-help.pd index 15f77b9720..1c57a3a813 100644 --- a/ceammc/ext/doc/list.equal-help.pd +++ b/ceammc/ext/doc/list.equal-help.pd @@ -19,8 +19,8 @@ -49933 0; #X text 110 337 1\.; #X text 150 337 list; -#X obj 246 338 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 337 LIST: initial value. Type: list.; +#X obj 246 338 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 337 PATTERN: initial value. Type: list.; #X obj 20 367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 372 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -53,13 +53,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 658 library: ceammc v0.9.4; +#X text 10 658 library: ceammc v0.9.6; #N canvas 10 677 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.equal; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.equal.pddoc b/ceammc/ext/doc/list.equal.pddoc index a6ba1f211c..8e9f6b4afe 100644 --- a/ceammc/ext/doc/list.equal.pddoc +++ b/ceammc/ext/doc/list.equal.pddoc @@ -14,13 +14,13 @@ 0.1 - initial value + initial value dumps object state to PD console window - current pattern + current pattern diff --git a/ceammc/ext/doc/list.first-help.pd b/ceammc/ext/doc/list.first-help.pd index 5b535bac0e..dea8e008ca 100644 --- a/ceammc/ext/doc/list.first-help.pd +++ b/ceammc/ext/doc/list.first-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 537 520 see also:; #X obj 611 520 list.last; #X obj 690 520 list.at; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.first; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.gen-help.pd b/ceammc/ext/doc/list.gen-help.pd index 592d49adb8..44ed378ef4 100644 --- a/ceammc/ext/doc/list.gen-help.pd +++ b/ceammc/ext/doc/list.gen-help.pd @@ -22,8 +22,9 @@ -49933 0; #X text 110 376 1\.; #X text 150 376 int; -#X obj 246 377 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 376 N: length of generated list. Type: int. Range: 1\...1024; +#X obj 246 377 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 376 COUNT: length of generated list. Type: int. Range: +1\...1024; #X obj 20 406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 411 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -60,7 +61,7 @@ Range: 0\...1024\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 745 library: ceammc v0.9.4; +#X text 10 745 library: ceammc v0.9.6; #X text 413 757 see also:; #X obj 487 757 list.seq; #X obj 559 757 list.shuffle; @@ -70,7 +71,7 @@ Range: 0\...1024\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.gen; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.gen.pddoc b/ceammc/ext/doc/list.gen.pddoc index fccea0e13f..27fc1ba152 100644 --- a/ceammc/ext/doc/list.gen.pddoc +++ b/ceammc/ext/doc/list.gen.pddoc @@ -22,7 +22,7 @@ Note, that maximum length limited to 1024 elements. - length of generated + length of generated list diff --git a/ceammc/ext/doc/list.histogram-help.pd b/ceammc/ext/doc/list.histogram-help.pd index 6cf703a676..34e565129d 100644 --- a/ceammc/ext/doc/list.histogram-help.pd +++ b/ceammc/ext/doc/list.histogram-help.pd @@ -25,37 +25,47 @@ number of bins; #X obj 50 302 list.repack 2; #X obj 50 331 tabwrite array1; #X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 385 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 385 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 420 @bins; -#X text 245 420 Get/Set number of histogram bins. Type: int. Default -value: 100\. Min value: 2\.; -#X obj 20 472 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 477 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 110 420 1\.; +#X text 150 420 int; +#X obj 246 421 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 420 BINS: number of histogram bins. Type: int. Range: 2\...1024; +#X obj 20 450 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 455 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 490 @bins; +#X text 245 490 Get/Set number of histogram bins. Type: int. Default +value: 100\. Range: 2\...1024\.; +#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 547 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 478 1\.; -#X text 150 478 *list*; -#X text 245 478 input list.; -#X text 150 498 *data:mlist*; -#X text 245 498 input mlist.; -#X obj 20 528 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 533 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 548 1\.; +#X text 150 548 *list*; +#X text 245 548 input list.; +#X text 150 568 *data:mlist*; +#X text 245 568 input mlist.; +#X text 110 588 2\.; +#X text 150 588 *int*; +#X text 245 588 set number of bins.; +#X obj 20 618 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 623 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 534 1\.; -#X text 245 534 output list - length of @bins.; +#X text 110 624 1\.; +#X text 245 624 output list - length of @bins.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 584 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 587 library: ceammc v0.9.4; -#N canvas 10 606 400 290 info 0; +#X obj 1 674 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 677 library: ceammc v0.9.6; +#N canvas 10 696 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.histogram; #X text 10 76 category:; @@ -74,7 +84,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 606 pd info; +#X restore 10 696 pd info; #X connect 6 0 8 0; #X connect 8 0 10 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/list.histogram.pddoc b/ceammc/ext/doc/list.histogram.pddoc index 375f507f8e..027bfd121c 100644 --- a/ceammc/ext/doc/list.histogram.pddoc +++ b/ceammc/ext/doc/list.histogram.pddoc @@ -16,15 +16,22 @@ Histogram outputted as list of probabilities in specified number of bins + + number of histogram + bins + - number of histogram - bins + number of + histogram bins input list input mlist + + set number of bins + output list - length of @bins diff --git a/ceammc/ext/doc/list.insert-help.pd b/ceammc/ext/doc/list.insert-help.pd index 5d2bab207b..cc69ee7962 100644 --- a/ceammc/ext/doc/list.insert-help.pd +++ b/ceammc/ext/doc/list.insert-help.pd @@ -18,8 +18,8 @@ list; -49933 0; #X text 110 333 1\.; #X text 150 333 list; -#X obj 246 334 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 333 LIST: list content. Type: list.; +#X obj 246 334 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 333 VALUE: list content. Type: list.; #X obj 20 363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 368 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -27,7 +27,7 @@ list; #X text 245 403 Get/Set insert element index. Type: int. Default value: 0\. Min value: 0\.; #X msg 110 445 @value; -#X text 245 445 Get/Set list contents. Type: list.; +#X text 245 445 Get/Set list content. Type: list.; #X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 489 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -53,7 +53,7 @@ list; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 636 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 639 library: ceammc v0.9.4; +#X text 10 639 library: ceammc v0.9.6; #X text 486 651 see also:; #X obj 560 651 list.append; #X obj 654 651 list.prepend; @@ -62,7 +62,7 @@ list; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.insert; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.insert.pddoc b/ceammc/ext/doc/list.insert.pddoc index 30fd56d110..cf908786b5 100644 --- a/ceammc/ext/doc/list.insert.pddoc +++ b/ceammc/ext/doc/list.insert.pddoc @@ -21,12 +21,12 @@ Works with data atoms - list content + list content insert element index - list contents + list content diff --git a/ceammc/ext/doc/list.integrator-help.pd b/ceammc/ext/doc/list.integrator-help.pd index e0aa86e316..6c0097bdf4 100644 --- a/ceammc/ext/doc/list.integrator-help.pd +++ b/ceammc/ext/doc/list.integrator-help.pd @@ -11,65 +11,64 @@ current one then stores this sum; #X msg 78 147 dump; #X msg 165 147 clear; #X obj 50 205 list.integrator; -#X obj 50 234 msg set; -#X msg 50 262 ; -#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 234 ui.dt; +#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 351 @clip; -#X text 245 351 alias for "@oversize min" property. Truncates lists +#X msg 110 323 @clip; +#X text 245 323 alias for "@oversize min" property. Truncates lists to minimal common size.; -#X msg 110 393 @clip; -#X text 245 393 alias for "@oversize clip" property. Pad shortest list +#X msg 110 365 @clip; +#X text 245 365 alias for "@oversize clip" property. Pad shortest list with last element to conform longest list.; -#X msg 110 435 @fold; -#X text 245 435 alias for "@oversize fold" property. Pad shortest list +#X msg 110 407 @fold; +#X text 245 407 alias for "@oversize fold" property. Pad shortest list with repeated values from the end to the beginning \, then back and so on.; -#X msg 110 492 @min; -#X text 245 492 alias for "@oversize min" property. Truncates lists +#X msg 110 464 @min; +#X text 245 464 alias for "@oversize min" property. Truncates lists to minimal common size.; -#X msg 110 534 @oversize; -#X text 245 534 Get/Set behavior \, if list have different sizes. Type: +#X msg 110 506 @oversize; +#X text 245 506 Get/Set behavior \, if list have different sizes. Type: symbol. Default value: padz. Allowed values: min \, padz \, clip \, wrap \, fold.; -#X msg 110 591 @padz; -#X text 245 591 alias for "@oversize padz" property. Pad shortest list +#X msg 110 563 @padz; +#X text 245 563 alias for "@oversize padz" property. Pad shortest list with zeroes.; -#X msg 110 633 @wrap; -#X text 245 633 alias for "@oversize wrap" property. Pad shortest list +#X msg 110 605 @wrap; +#X text 245 605 alias for "@oversize wrap" property. Pad shortest list with repeated values from the beginning.; -#X obj 20 685 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 690 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 657 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 662 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 725 clear; -#X text 245 725 clear integrator state.; -#X obj 20 762 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 767 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 697 clear; +#X text 245 697 clear integrator state.; +#X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 739 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 768 1\.; -#X text 150 768 *list*; -#X text 245 768 Input list.; -#X obj 20 798 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 803 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 740 1\.; +#X text 150 740 *list*; +#X text 245 740 Input list.; +#X obj 20 770 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 775 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 804 1\.; -#X text 245 804 new integrated list.; +#X text 110 776 1\.; +#X text 245 776 new integrated list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 854 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 857 library: ceammc v0.9.4; -#X text 594 869 see also:; -#X obj 668 869 list.delta; -#N canvas 10 876 400 290 info 0; +#X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 829 library: ceammc v0.9.6; +#X text 594 841 see also:; +#X obj 668 841 list.delta; +#N canvas 10 848 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.integrator; #X text 10 76 category:; @@ -88,10 +87,9 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 876 pd info; +#X restore 10 848 pd info; #X connect 4 0 8 0; #X connect 6 0 8 0; #X connect 5 0 8 0; #X connect 7 0 8 0; -#X connect 8 0 9 0; -#X connect 9 0 10 0; \ No newline at end of file +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.integrator.pddoc b/ceammc/ext/doc/list.integrator.pddoc index 8385f2363f..7eb20f6eaf 100644 --- a/ceammc/ext/doc/list.integrator.pddoc +++ b/ceammc/ext/doc/list.integrator.pddoc @@ -57,9 +57,7 @@ | | | | [list.integrator] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/list.last-help.pd b/ceammc/ext/doc/list.last-help.pd index b54b8e57d2..90302db8d4 100644 --- a/ceammc/ext/doc/list.last-help.pd +++ b/ceammc/ext/doc/list.last-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 529 520 see also:; #X obj 603 520 list.first; #X obj 690 520 list.at; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.last; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.length-help.pd b/ceammc/ext/doc/list.length-help.pd index 2b4239da58..52be4eabcf 100644 --- a/ceammc/ext/doc/list.length-help.pd +++ b/ceammc/ext/doc/list.length-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 616 520 see also:; #X obj 690 520 list.at; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.length; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.map-help.pd b/ceammc/ext/doc/list.map-help.pd new file mode 100644 index 0000000000..d0c6d05ef7 --- /dev/null +++ b/ceammc/ext/doc/list.map-help.pd @@ -0,0 +1,86 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 460 50 cnv 1 305 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 460 50 map list values by specified dictionary; +#X obj 1 1 cnv 5 765 40 empty empty list.map 20 20 0 20 -104026 -4096 +0; +#X obj 682 11 list.map; +#X obj 50 118 ui.keyboard 24; +#X msg 50 205 \$1; +#X obj 50 234 % 12; +#X obj 50 262 list.map \[0: "C" 1: "C#" 2: "D" 3: "Eb" 4: "E" 5: "F" +6: "F#" 7: "G" 8: "G#" 9: "A" 10: "A#" 11: "B"\]; +#X obj 50 320 ui.dt; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 150 409 list; +#X obj 246 410 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 DICT: mapping dictionary \, see @dict property. Type: +list.; +#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 479 @dict; +#X text 245 479 Get/Set mapping dictionary \, the syntax is [KEY: VALUES...] +\, for example: [1: "one" 2: "two" k: "map values"]. Type: list. Default +value: [].; +#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 551 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 552 1\.; +#X text 150 552 *float*; +#X text 245 552 input float \, no output if not in dict.; +#X text 150 572 *symbol*; +#X text 245 572 input symbol \, no output if not in dict.; +#X text 150 592 *list*; +#X text 245 592 input list \, output always at least empty list.; +#X text 150 612 *data:mlist*; +#X text 245 612 input list \, output always at least empty list.; +#X text 110 632 2\.; +#X text 150 632 *data:dict*; +#X text 245 632 set mapping dictionary.; +#X obj 20 662 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 667 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 668 1\.; +#X text 245 668 list or data:mlist mapped list.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title list @url ceammc.list-help.pd; +#X obj 1 718 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 721 library: ceammc v0.9.6; +#X text 601 733 see also:; +#X obj 675 733 data.dict; +#N canvas 10 740 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 list.map; +#X text 10 76 category:; +#X text 120 76 list; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 list \, map \, dict; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 740 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.map.pddoc b/ceammc/ext/doc/list.map.pddoc new file mode 100644 index 0000000000..a1eb312fa8 --- /dev/null +++ b/ceammc/ext/doc/list.map.pddoc @@ -0,0 +1,62 @@ + + + + list.map + + + Serge Poltavsky + + map list values by specified dictionary + GPL3 or later + ceammc + list + list map dict + 0.9.5 + + data.dict + + + + mapping dictionary, see @dict property + + + mapping dictionary, the syntax is [KEY: + VALUES...], for example: [1: "one" 2: "two" k: "map values"] + + + + input float, no output if not in dict + input symbol, no output if not in dict + input list, output always at least empty list + input list, output always at least empty list + + + set mapping dictionary + + + + list or data:mlist mapped list + + + + + + + + diff --git a/ceammc/ext/doc/list.max-help.pd b/ceammc/ext/doc/list.max-help.pd index 3e7c981fa7..766839fb73 100644 --- a/ceammc/ext/doc/list.max-help.pd +++ b/ceammc/ext/doc/list.max-help.pd @@ -59,7 +59,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 764 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 767 library: ceammc v0.9.4; +#X text 10 767 library: ceammc v0.9.6; #X text 609 779 see also:; #X obj 683 779 list.min; #N canvas 10 786 400 290 info 0; @@ -67,7 +67,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.max; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.mean-help.pd b/ceammc/ext/doc/list.mean-help.pd index 354e56cbd6..4a682a02ab 100644 --- a/ceammc/ext/doc/list.mean-help.pd +++ b/ceammc/ext/doc/list.mean-help.pd @@ -30,7 +30,7 @@ No output if no floats in list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 list.normalize; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ No output if no floats in list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.mean; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.min-help.pd b/ceammc/ext/doc/list.min-help.pd index 6042f559b1..809128aa80 100644 --- a/ceammc/ext/doc/list.min-help.pd +++ b/ceammc/ext/doc/list.min-help.pd @@ -59,7 +59,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 764 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 767 library: ceammc v0.9.4; +#X text 10 767 library: ceammc v0.9.6; #X text 521 779 see also:; #X obj 595 779 list.max; #X obj 668 779 list.range; @@ -68,7 +68,7 @@ value: float. Allowed values: float \, symbol \, any.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.min; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.none_of-help.pd b/ceammc/ext/doc/list.none_of-help.pd index 2d69ebfdbb..58c1003e24 100644 --- a/ceammc/ext/doc/list.none_of-help.pd +++ b/ceammc/ext/doc/list.none_of-help.pd @@ -37,7 +37,7 @@ or list is empty or 0 otherwise.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 493 520 see also:; #X obj 567 520 list.all_of; #X obj 661 520 list.any_of; @@ -46,7 +46,7 @@ or list is empty or 0 otherwise.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.none_of; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.normalize-help.pd b/ceammc/ext/doc/list.normalize-help.pd index 4c64091d5d..7d7ab827b6 100644 --- a/ceammc/ext/doc/list.normalize-help.pd +++ b/ceammc/ext/doc/list.normalize-help.pd @@ -16,47 +16,45 @@ lineary; #X msg 213 237 @range; #X msg 299 237 @sum; #X obj 50 295 list.normalize @sum; -#X obj 50 324 t b a; -#X obj 98 352 msg set; -#X msg 50 381 ; -#X obj 50 410 list.sum; -#X floatatom 50 439 5 0 0 0 - - -; -#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 493 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 69 324 ui.dt; +#X obj 50 367 list.sum; +#X floatatom 50 395 5 0 0 0 - - -; +#X obj 20 444 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 449 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 528 @by; -#X text 245 528 Get/Set normalization mode. Type: symbol. Default value: +#X msg 110 484 @by; +#X text 245 484 Get/Set normalization mode. Type: symbol. Default value: sum. Allowed values: sum \, range.; -#X msg 110 570 @range; -#X text 245 570 alias to @by range.; -#X msg 110 599 @sum; -#X text 245 599 alias to @by sum.; -#X obj 20 638 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 643 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 526 @range; +#X text 245 526 alias to @by range.; +#X msg 110 555 @sum; +#X text 245 555 alias to @by sum.; +#X obj 20 594 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 599 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 644 1\.; -#X text 150 644 *list*; -#X text 245 644 input list of floats. Non float values are rejected.; -#X text 150 664 *data:mlist*; -#X text 245 664 same as list.; -#X obj 20 694 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 699 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 600 1\.; +#X text 150 600 *list*; +#X text 245 600 input list of floats. Non float values are rejected.; +#X text 150 620 *data:mlist*; +#X text 245 620 same as list.; +#X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 655 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 700 1\.; -#X text 245 700 output list.; +#X text 110 656 1\.; +#X text 245 656 output list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 750 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 753 library: ceammc v0.9.4; -#N canvas 10 772 400 290 info 0; +#X obj 1 706 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 709 library: ceammc v0.9.6; +#N canvas 10 728 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.normalize; #X text 10 76 category:; @@ -75,14 +73,11 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 772 pd info; +#X restore 10 728 pd info; #X connect 8 0 12 0; #X connect 9 0 12 0; #X connect 10 0 12 0; #X connect 11 0 12 0; #X connect 12 0 13 0; -#X connect 13 1 14 0; -#X connect 13 0 15 0; -#X connect 14 0 15 0; -#X connect 15 0 16 0; -#X connect 16 0 17 0; \ No newline at end of file +#X connect 12 0 14 0; +#X connect 14 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.normalize.pddoc b/ceammc/ext/doc/list.normalize.pddoc index 3906d78521..4e4b928c6b 100644 --- a/ceammc/ext/doc/list.normalize.pddoc +++ b/ceammc/ext/doc/list.normalize.pddoc @@ -43,12 +43,9 @@ | | | | | | | | [list.normalize @sum] +| | +| [ui.dt] | -[t b a] -| ^| -| [msg set] -| | -[ ( | [list.sum] | diff --git a/ceammc/ext/doc/list.pass-help.pd b/ceammc/ext/doc/list.pass-help.pd new file mode 100644 index 0000000000..622836826e --- /dev/null +++ b/ceammc/ext/doc/list.pass-help.pd @@ -0,0 +1,84 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 477 50 cnv 1 288 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 477 50 leave in list only specified elements; +#X obj 1 1 cnv 5 765 40 empty empty list.pass 20 20 0 20 -104026 -4096 +0; +#X obj 676 11 list.pass; +#X floatatom 50 118 5 0 0 0 - - -; +#X symbolatom 107 118 16 0 0 0 - - -; +#X obj 107 147 symbol2any; +#X obj 107 176 list; +#X obj 50 205 list.pass A B C 1 2 3; +#X obj 50 234 ui.dt; +#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 323 1\.; +#X text 150 323 list; +#X obj 246 324 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 323 ARGS: list of passed value. Type: list.; +#X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 393 @args; +#X text 245 393 Get/Set list of passed value. Type: list.; +#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 438 1\.; +#X text 150 438 *float*; +#X text 245 438 input float.; +#X text 150 458 *symbol*; +#X text 245 458 input symbol.; +#X text 150 478 *list*; +#X text 245 478 input list.; +#X text 150 498 *data:mlist*; +#X text 245 498 input mlist.; +#X text 110 518 2\.; +#X text 150 518 *list*; +#X text 245 518 set passed values.; +#X obj 20 548 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 553 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 554 1\.; +#X text 245 554 output list with passed elements.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title list @url ceammc.list-help.pd; +#X obj 1 604 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 607 library: ceammc v0.9.6; +#X text 580 619 see also:; +#X obj 654 619 list.pass_if; +#N canvas 10 626 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 list.pass; +#X text 10 76 category:; +#X text 120 76 list; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 list \, pass \, filter; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 626 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 4 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.pass.pddoc b/ceammc/ext/doc/list.pass.pddoc new file mode 100644 index 0000000000..fdaaa5b0e4 --- /dev/null +++ b/ceammc/ext/doc/list.pass.pddoc @@ -0,0 +1,55 @@ + + + + list.pass + + + Serge Poltavsky + + leave in list only specified elements + GPL3 or later + ceammc + list + list pass filter + 0.9.5 + + list.pass_if + + + + list of passed value + + + list of passed value + + + + input float + input symbol + input list + input mlist + + + set passed values + + + + output list with passed elements + + + + + + + + diff --git a/ceammc/ext/doc/list.pass_if-help.pd b/ceammc/ext/doc/list.pass_if-help.pd index 2b1d0a0695..728a622758 100644 --- a/ceammc/ext/doc/list.pass_if-help.pd +++ b/ceammc/ext/doc/list.pass_if-help.pd @@ -17,52 +17,49 @@ element) or 1 (leave element).; #X obj 213 216 is_odd; #X obj 338 216 list.pass_if; #X obj 501 216 > 5; -#X obj 50 245 msg set; -#X obj 338 245 msg set; -#X msg 50 274 ; -#X msg 338 274 ; -#X obj 50 302 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 50 245 ui.dt; +#X obj 338 245 ui.dt; +#X obj 50 274 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 50 331 path.ls .; -#X obj 50 360 list.pass_if; -#X obj 213 360 str.ends_with .pd; -#X obj 50 389 str.join ' '; -#X obj 50 418 str->sym; -#X obj 50 446 msg set; -#X msg 50 475 ; -#X obj 20 524 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 529 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 302 path.ls .; +#X obj 50 331 list.pass_if; +#X obj 213 331 str.ends_with .pd; +#X obj 50 360 str.join ' '; +#X obj 50 389 str->sym; +#X obj 50 418 ui.dt; +#X obj 20 467 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 472 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 530 1\.; -#X text 150 530 *list*; -#X text 245 530 input list.; -#X text 150 550 *data:mlist*; -#X text 245 550 input mlist.; -#X text 110 570 2\.; -#X text 150 570 *float*; -#X text 245 570 value from predicate.; -#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 605 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 473 1\.; +#X text 150 473 *list*; +#X text 245 473 input list.; +#X text 150 493 *data:mlist*; +#X text 245 493 input mlist.; +#X text 110 513 2\.; +#X text 150 513 *float*; +#X text 245 513 value from predicate.; +#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 548 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 606 1\.; -#X text 245 606 output list with accepted elements.; -#X text 110 626 2\.; -#X text 245 626 atom to predicate.; +#X text 110 549 1\.; +#X text 245 549 output list with accepted elements.; +#X text 110 569 2\.; +#X text 245 569 atom to predicate.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 676 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 679 library: ceammc v0.9.4; -#X text 565 691 see also:; -#X obj 639 691 list.remove_if; -#N canvas 10 698 400 290 info 0; +#X obj 1 619 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 622 library: ceammc v0.9.6; +#X text 565 634 see also:; +#X obj 639 634 list.remove_if; +#N canvas 10 641 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.pass_if; #X text 10 76 category:; @@ -81,24 +78,21 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 698 pd info; +#X restore 10 641 pd info; #X connect 7 0 9 0; #X connect 8 0 10 0; #X connect 9 0 11 0; #X connect 10 0 13 0; #X connect 11 0 15 0; #X connect 13 0 16 0; -#X connect 15 0 17 0; -#X connect 16 0 18 0; -#X connect 19 0 20 0; -#X connect 20 0 21 0; -#X connect 21 0 23 0; -#X connect 23 0 24 0; -#X connect 24 0 25 0; -#X connect 25 0 26 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 23 0; #X connect 11 1 12 0; #X connect 12 0 11 1; #X connect 13 1 14 0; #X connect 14 0 13 1; -#X connect 21 1 22 0; -#X connect 22 0 21 1; \ No newline at end of file +#X connect 19 1 20 0; +#X connect 20 0 19 1; \ No newline at end of file diff --git a/ceammc/ext/doc/list.pass_if.pddoc b/ceammc/ext/doc/list.pass_if.pddoc index fbde2f206e..bc9c5682e7 100644 --- a/ceammc/ext/doc/list.pass_if.pddoc +++ b/ceammc/ext/doc/list.pass_if.pddoc @@ -45,9 +45,7 @@ | | [list.pass_if] X [is_odd] [list.pass_if] X [> 5] | | -[msg set] [msg set] -| | -[ ( [ ( +[ui.dt] [ui.dt] [B] | @@ -59,9 +57,7 @@ | [str->sym] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/list.prepend-help.pd b/ceammc/ext/doc/list.prepend-help.pd index 4707b0a8d4..8c28599dec 100644 --- a/ceammc/ext/doc/list.prepend-help.pd +++ b/ceammc/ext/doc/list.prepend-help.pd @@ -17,47 +17,59 @@ -1; #X obj 136 172 str test1; #X obj 318 172 str ANOTHER STRING; -#X obj 50 215 list.prepend @prop ABC; +#X obj 50 215 list.prepend "@prop" ABC; #X obj 50 244 ui.display @display_type 1; #X obj 20 293 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 298 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 298 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 333 1\.; +#X text 150 333 list; +#X obj 246 334 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 333 VALUE: prepend values. Type: list.; +#X obj 20 363 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 368 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 403 @value; +#X text 245 403 Get/Set prepend values. Type: list.; +#X obj 20 442 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 447 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 299 1\.; -#X text 150 299 *bang*; -#X text 245 299 treated as empty input list.; -#X text 150 319 *float*; -#X text 245 319 input float.; -#X text 150 339 *symbol*; -#X text 245 339 input symbol.; -#X text 150 359 *list*; -#X text 245 359 input list.; -#X text 150 379 *data:mlist*; -#X text 245 379 input mlist.; -#X text 150 399 *data*; -#X text 245 399 input data.; -#X text 110 419 2\.; -#X text 150 419 *list*; -#X text 245 419 set prepended atom or list.; -#X obj 20 449 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 454 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 448 1\.; +#X text 150 448 *bang*; +#X text 245 448 treated as empty input list.; +#X text 150 468 *float*; +#X text 245 468 input float.; +#X text 150 488 *symbol*; +#X text 245 488 input symbol.; +#X text 150 508 *list*; +#X text 245 508 input list.; +#X text 150 528 *data:mlist*; +#X text 245 528 input mlist.; +#X text 150 548 *data*; +#X text 245 548 input data.; +#X text 110 568 2\.; +#X text 150 568 *list*; +#X text 245 568 set prepended atom or list.; +#X obj 20 598 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 603 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 455 1\.; -#X text 245 455 output concatenated list.; +#X text 110 604 1\.; +#X text 245 604 output concatenated list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#X text 587 520 see also:; -#X obj 661 520 list.append; -#N canvas 10 527 400 290 info 0; +#X obj 1 654 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 657 library: ceammc v0.9.6; +#X text 587 669 see also:; +#X obj 661 669 list.append; +#N canvas 10 676 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.prepend; #X text 10 76 category:; @@ -76,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; +#X restore 10 676 pd info; #X connect 8 0 11 0; #X connect 10 0 12 0; #X connect 6 0 13 0; diff --git a/ceammc/ext/doc/list.prepend.pddoc b/ceammc/ext/doc/list.prepend.pddoc index a83f7554bf..5ceb5d5614 100644 --- a/ceammc/ext/doc/list.prepend.pddoc +++ b/ceammc/ext/doc/list.prepend.pddoc @@ -19,6 +19,12 @@ Works with data atoms + + prepend values + + + prepend values + treated as empty input list @@ -43,7 +49,7 @@ | | [str test1] | [str ANOTHER STRING] | | | | | | | | | |. -[list.prepend @prop ABC ] +[list.prepend "@prop" ABC ] | [ui.display @display_type 1] ]]> diff --git a/ceammc/ext/doc/list.product-help.pd b/ceammc/ext/doc/list.product-help.pd index ab0eaf2b89..0dd18d2a2d 100644 --- a/ceammc/ext/doc/list.product-help.pd +++ b/ceammc/ext/doc/list.product-help.pd @@ -32,7 +32,7 @@ at least one symbol \, product will be always equal to zero; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 608 520 see also:; #X obj 682 520 list.sum; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ at least one symbol \, product will be always equal to zero; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.product; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.range-help.pd b/ceammc/ext/doc/list.range-help.pd index 64f28f6fb2..dc21103833 100644 --- a/ceammc/ext/doc/list.range-help.pd +++ b/ceammc/ext/doc/list.range-help.pd @@ -7,48 +7,58 @@ #X obj 563 11 list.minmax; #X obj 668 11 list.range; #X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 Note: numbers are smaller then symbols; -#X msg 50 143 list a b z; -#X msg 174 143 1 2 b c; -#X floatatom 69 172 5 0 0 0 - - -; -#X msg 203 172 2 -1 6 -2; -#X msg 347 172 -3 0 10 2 -5 11; -#X obj 50 201 list.range; -#X obj 347 201 list.range; -#X obj 50 230 msg set; -#X obj 347 230 !-; -#X msg 50 259 ; -#X floatatom 347 259 5 0 0 0 - - -; -#X obj 20 308 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 313 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 215 80 Note: if @type = any \, numbers are smaller then symbols; +#X msg 50 143 -3 0 10 2 -5 11 a b c; +#X obj 50 172 list.range @f; +#X obj 50 201 ui.dt; +#X msg 50 230 -3 0 10 2 -5 11 a b c; +#X obj 50 259 list.range @s; +#X obj 50 287 ui.dt; +#X msg 50 316 -3 0 10 2 -5 11 a b c; +#X obj 50 345 list.range @a; +#X obj 50 374 ui.dt; +#X obj 20 423 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 428 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 463 @a; +#X text 245 463 alias to @type any \, accept all.; +#X msg 110 492 @f; +#X text 245 492 alias to @type float \, accept only floats.; +#X msg 110 521 @s; +#X text 245 521 alias to @type symbol \, accept only symbols.; +#X msg 110 550 @type; +#X text 245 550 Get/Set type of accepted atoms. Type: symbol. Default +value: float. Allowed values: float \, symbol \, any.; +#X obj 20 602 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 607 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 314 1\.; -#X text 150 314 *list*; -#X text 245 314 input list.; -#X text 150 334 *data:mlist*; -#X text 245 334 input mlist.; -#X obj 20 364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 369 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 608 1\.; +#X text 150 608 *list*; +#X text 245 608 input list.; +#X text 150 628 *data:mlist*; +#X text 245 628 input mlist.; +#X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 663 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 370 1\.; -#X text 245 370 list of two elements: first is a smallest values \, +#X text 110 664 1\.; +#X text 245 664 list of two elements: first is a smallest value \, second - largest.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#X text 536 520 see also:; -#X obj 610 520 list.min; -#X obj 682 520 list.max; -#N canvas 10 527 400 290 info 0; +#X obj 1 729 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 732 library: ceammc v0.9.6; +#X text 536 744 see also:; +#X obj 610 744 list.min; +#X obj 682 744 list.max; +#N canvas 10 751 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.range; #X text 10 76 category:; @@ -67,13 +77,10 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; -#X connect 7 0 12 0; -#X connect 9 0 12 0; -#X connect 8 0 12 0; -#X connect 10 0 12 0; -#X connect 11 0 13 0; -#X connect 12 0 14 0; -#X connect 13 0 15 0; -#X connect 14 0 16 0; -#X connect 15 0 17 0; \ No newline at end of file +#X restore 10 751 pd info; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.range.pddoc b/ceammc/ext/doc/list.range.pddoc index 3ec7fd6a42..14addff988 100644 --- a/ceammc/ext/doc/list.range.pddoc +++ b/ceammc/ext/doc/list.range.pddoc @@ -21,8 +21,15 @@ - Note: numbers are smaller then symbols + Note: if @type = any, numbers are smaller then symbols + + type of + accepted atoms + alias to @type float, accept only floats + alias to @type symbol, accept only symbols + alias to @type any, accept all + input list @@ -30,20 +37,28 @@ - list of two elements: first is a smallest values, second - largest + list of two elements: first is a smallest value, second - largest diff --git a/ceammc/ext/doc/list.reduce-help.pd b/ceammc/ext/doc/list.reduce-help.pd index 0f4b4a6c9c..f1e976fa96 100644 --- a/ceammc/ext/doc/list.reduce-help.pd +++ b/ceammc/ext/doc/list.reduce-help.pd @@ -64,7 +64,7 @@ between elements with binary function \, for example: 1 2 3 4 5 becames #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 732 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 735 library: ceammc v0.9.4; +#X text 10 735 library: ceammc v0.9.6; #X text 608 747 see also:; #X obj 682 747 list.max; #N canvas 10 754 400 290 info 0; @@ -72,7 +72,7 @@ between elements with binary function \, for example: 1 2 3 4 5 becames #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.reduce; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.reject-help.pd b/ceammc/ext/doc/list.reject-help.pd new file mode 100644 index 0000000000..278b2efeff --- /dev/null +++ b/ceammc/ext/doc/list.reject-help.pd @@ -0,0 +1,84 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 501 50 cnv 1 264 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 501 50 remove specified element from list; +#X obj 1 1 cnv 5 765 40 empty empty list.reject 20 20 0 20 -104026 +-4096 0; +#X obj 661 11 list.reject; +#X floatatom 50 118 5 0 0 0 - - -; +#X symbolatom 107 118 24 0 0 0 - - -; +#X obj 107 147 symbol2any; +#X obj 107 176 list; +#X obj 50 219 list.reject A B C 1 2 3; +#X obj 50 248 ui.dt; +#X obj 20 297 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 302 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 337 1\.; +#X text 150 337 list; +#X obj 246 338 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 337 ARGS: list of rejected values. Type: list.; +#X obj 20 367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 372 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 407 @args; +#X text 245 407 Get/Set list of rejected values. Type: list.; +#X obj 20 446 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 451 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 452 1\.; +#X text 150 452 *float*; +#X text 245 452 input float.; +#X text 150 472 *symbol*; +#X text 245 472 input symbol.; +#X text 150 492 *list*; +#X text 245 492 input list.; +#X text 150 512 *data:mlist*; +#X text 245 512 input mlist.; +#X text 110 532 2\.; +#X text 150 532 *list*; +#X text 245 532 set rejected values.; +#X obj 20 562 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 567 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 568 1\.; +#X text 245 568 list without rejected elements.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title list @url ceammc.list-help.pd; +#X obj 1 618 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 621 library: ceammc v0.9.6; +#X text 565 633 see also:; +#X obj 639 633 list.reject_if; +#N canvas 10 640 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 list.reject; +#X text 10 76 category:; +#X text 120 76 list; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 list \, pass \, reject; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 640 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 4 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.reject.pddoc b/ceammc/ext/doc/list.reject.pddoc new file mode 100644 index 0000000000..4616a02714 --- /dev/null +++ b/ceammc/ext/doc/list.reject.pddoc @@ -0,0 +1,56 @@ + + + + list.reject + + + Serge Poltavsky + + remove specified element from list + GPL3 or later + ceammc + list + list pass reject + 0.9.5 + + list.reject_if + + + + list of rejected values + + + list of rejected values + + + + input float + input symbol + input list + input mlist + + + set rejected values + + + + list without rejected elements + + + + + + + + diff --git a/ceammc/ext/doc/list.remove-help.pd b/ceammc/ext/doc/list.remove-help.pd index 22a341b51e..8bd428e995 100644 --- a/ceammc/ext/doc/list.remove-help.pd +++ b/ceammc/ext/doc/list.remove-help.pd @@ -47,7 +47,7 @@ are also supported. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 579 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 582 library: ceammc v0.9.4; +#X text 10 582 library: ceammc v0.9.6; #X text 587 594 see also:; #X obj 661 594 list.insert; #N canvas 10 601 400 290 info 0; @@ -55,7 +55,7 @@ are also supported. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.remove; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.remove.pddoc b/ceammc/ext/doc/list.remove.pddoc index 75bde87e0c..436bb442fa 100644 --- a/ceammc/ext/doc/list.remove.pddoc +++ b/ceammc/ext/doc/list.remove.pddoc @@ -21,7 +21,7 @@ also supported - indexes to remove + indexes to remove diff --git a/ceammc/ext/doc/list.remove_if-help.pd b/ceammc/ext/doc/list.remove_if-help.pd index dddd38bf0a..70c5e05fb4 100644 --- a/ceammc/ext/doc/list.remove_if-help.pd +++ b/ceammc/ext/doc/list.remove_if-help.pd @@ -9,17 +9,17 @@ #X text 215 80 Predicate object should accept atom and output 0 (leave element) or 1 (remove).; #X msg 50 158 10; -#X msg 338 158 10; +#X msg 299 158 10; #X obj 50 187 list.seq; -#X obj 338 187 list.seq; -#X obj 50 216 list.remove_if; -#X obj 232 216 is_odd; -#X obj 338 216 list.remove_if; -#X obj 520 216 > 5; -#X obj 50 245 msg set; -#X obj 338 245 msg set; -#X msg 50 274 ; -#X msg 338 274 ; +#X obj 299 187 list.seq; +#X obj 69 216 ui.dt; +#X obj 318 216 ui.dt; +#X obj 50 245 list.remove_if; +#X obj 213 245 is_odd; +#X obj 299 245 list.remove_if; +#X obj 462 245 > 5; +#X obj 50 274 ui.dt; +#X obj 299 274 ui.dt; #X obj 20 323 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 328 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -44,7 +44,7 @@ element) or 1 (remove).; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 471 520 see also:; #X obj 545 520 list.count_if; #X obj 654 520 list.pass_if; @@ -53,7 +53,7 @@ element) or 1 (remove).; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.remove_if; #X text 10 76 category:; @@ -76,12 +76,12 @@ https://github.com/uliss/pure-data; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; -#X connect 9 0 12 0; -#X connect 10 0 14 0; -#X connect 12 0 15 0; -#X connect 14 0 16 0; -#X connect 15 0 17 0; -#X connect 10 1 11 0; -#X connect 11 0 10 1; +#X connect 9 0 11 0; +#X connect 8 0 12 0; +#X connect 9 0 14 0; +#X connect 12 0 16 0; +#X connect 14 0 17 0; #X connect 12 1 13 0; -#X connect 13 0 12 1; \ No newline at end of file +#X connect 13 0 12 1; +#X connect 14 1 15 0; +#X connect 15 0 14 1; \ No newline at end of file diff --git a/ceammc/ext/doc/list.remove_if.pddoc b/ceammc/ext/doc/list.remove_if.pddoc index d3c7b18cf5..0b8fa087d0 100644 --- a/ceammc/ext/doc/list.remove_if.pddoc +++ b/ceammc/ext/doc/list.remove_if.pddoc @@ -37,15 +37,15 @@ 5] -| | -[msg set] [msg set] -| | -[ ( [ ( +[10( [10( +| | +[list.seq] [list.seq] +| | | | +| [ui.dt] | [ui.dt] +| | +[list.remove_if]X[is_odd] [list.remove_if]X[> 5] +| | +[ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/list.repack-help.pd b/ceammc/ext/doc/list.repack-help.pd index 8bed1cbc6c..ef8619a646 100644 --- a/ceammc/ext/doc/list.repack-help.pd +++ b/ceammc/ext/doc/list.repack-help.pd @@ -14,7 +14,7 @@ #X text 110 279 1\.; #X text 150 279 int; #X obj 246 280 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 279 SIZE: output list size. Type: int. Min value: 1; +#X text 245 279 SIZE: output list size. Type: int. Range: 1\...1024; #X obj 20 309 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 314 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -40,13 +40,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 513 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 516 library: ceammc v0.9.4; +#X text 10 516 library: ceammc v0.9.6; #N canvas 10 535 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.repack; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.repack.pddoc b/ceammc/ext/doc/list.repack.pddoc index d7da85c534..0774869fd1 100644 --- a/ceammc/ext/doc/list.repack.pddoc +++ b/ceammc/ext/doc/list.repack.pddoc @@ -14,7 +14,8 @@ 0.1 - output list size + output list + size output list diff --git a/ceammc/ext/doc/list.repeat-help.pd b/ceammc/ext/doc/list.repeat-help.pd index 71971321b8..c9f444ef23 100644 --- a/ceammc/ext/doc/list.repeat-help.pd +++ b/ceammc/ext/doc/list.repeat-help.pd @@ -26,7 +26,7 @@ #X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 393 @times; +#X msg 110 393 @n; #X text 245 393 Get/Set repeat times. Type: int. Default value: 1\. Range: 0\...10000\.; #X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -61,13 +61,13 @@ x n times.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 682 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 685 library: ceammc v0.9.4; +#X text 10 685 library: ceammc v0.9.6; #N canvas 10 704 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.repeat; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.repeat.pddoc b/ceammc/ext/doc/list.repeat.pddoc index 9af5d57d98..7caebd64f2 100644 --- a/ceammc/ext/doc/list.repeat.pddoc +++ b/ceammc/ext/doc/list.repeat.pddoc @@ -17,7 +17,7 @@ repeat times - repeat + repeat times diff --git a/ceammc/ext/doc/list.resample-help.pd b/ceammc/ext/doc/list.resample-help.pd index f19d4f4249..1454d53829 100644 --- a/ceammc/ext/doc/list.resample-help.pd +++ b/ceammc/ext/doc/list.resample-help.pd @@ -7,7 +7,7 @@ #X obj 578 11 list.r; #X obj 646 11 list.resample; #X obj 50 118 ui.sliders; -#X obj 203 118 ui.sliders @auto_range 1; +#X obj 203 118 ui.sliders @auto_count 1; #X obj 174 234 ui.hrd; #X obj 50 262 list.resample 4; #X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -44,7 +44,7 @@ value: 1\. Range: 0\...100\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 605 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 608 library: ceammc v0.9.4; +#X text 10 608 library: ceammc v0.9.6; #X text 580 620 see also:; #X obj 654 620 list.stretch; #N canvas 10 627 400 290 info 0; @@ -52,7 +52,7 @@ value: 1\. Range: 0\...100\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.resample; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.resample.pddoc b/ceammc/ext/doc/list.resample.pddoc index becf554681..f0522b92cb 100644 --- a/ceammc/ext/doc/list.resample.pddoc +++ b/ceammc/ext/doc/list.resample.pddoc @@ -42,7 +42,7 @@ input list + + set desired list size + resized list diff --git a/ceammc/ext/doc/list.reverse-help.pd b/ceammc/ext/doc/list.reverse-help.pd index fa4cb15512..44f6babe1a 100644 --- a/ceammc/ext/doc/list.reverse-help.pd +++ b/ceammc/ext/doc/list.reverse-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 500 520 see also:; #X obj 574 520 list.sort; #X obj 653 520 list.shuffle; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.reverse; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.rldecode-help.pd b/ceammc/ext/doc/list.rldecode-help.pd index 89279eee5c..8648956d8e 100644 --- a/ceammc/ext/doc/list.rldecode-help.pd +++ b/ceammc/ext/doc/list.rldecode-help.pd @@ -15,8 +15,8 @@ -49933 0; #X text 110 265 1\.; #X text 150 265 list; -#X obj 246 266 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 265 LST: initial element repeat list. Type: list.; +#X obj 246 266 cnv 1 15 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 265 L: initial element repeat list. Type: list.; #X obj 20 295 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 300 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -43,7 +43,7 @@ values in second list.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 list.rlencode; #N canvas 10 527 400 290 info 0; @@ -51,7 +51,7 @@ values in second list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.rldecode; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.rldecode.pddoc b/ceammc/ext/doc/list.rldecode.pddoc index db3467df47..3ad6d16eb9 100644 --- a/ceammc/ext/doc/list.rldecode.pddoc +++ b/ceammc/ext/doc/list.rldecode.pddoc @@ -21,10 +21,10 @@ - initial element repeat list + initial element repeat list - list of repeats + list of repeats diff --git a/ceammc/ext/doc/list.rlencode-help.pd b/ceammc/ext/doc/list.rlencode-help.pd index 25fe3d9d3d..f9eb4daea0 100644 --- a/ceammc/ext/doc/list.rlencode-help.pd +++ b/ceammc/ext/doc/list.rlencode-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 list.rldecode; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.rlencode; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.rotate-help.pd b/ceammc/ext/doc/list.rotate-help.pd index 7f25b9524f..4d1c57977f 100644 --- a/ceammc/ext/doc/list.rotate-help.pd +++ b/ceammc/ext/doc/list.rotate-help.pd @@ -52,7 +52,7 @@ direction to opposite. Type: int. Default value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 632 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 635 library: ceammc v0.9.4; +#X text 10 635 library: ceammc v0.9.6; #X text 587 647 see also:; #X obj 661 647 list.choice; #N canvas 10 654 400 290 info 0; @@ -60,7 +60,7 @@ direction to opposite. Type: int. Default value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.rotate; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.route-help.pd b/ceammc/ext/doc/list.route-help.pd index 73fa986fe3..9b4d95315c 100644 --- a/ceammc/ext/doc/list.route-help.pd +++ b/ceammc/ext/doc/list.route-help.pd @@ -18,95 +18,79 @@ to last outlet if no match; #X msg 136 216 1 2 3; #X msg 270 216 200 300; #X obj 50 259 list.route A B 100 200; -#X obj 50 317 msg set; -#X obj 146 317 msg set; -#X obj 242 317 msg set; -#X obj 338 317 msg set; -#X obj 434 317 msg set; -#X msg 50 345 ; -#X msg 146 345 ; -#X msg 242 345 ; -#X msg 338 345 ; -#X msg 434 345 ; -#X msg 50 389 100; -#X msg 146 389 symbol A; -#X msg 290 389 list A; -#X msg 434 389 1 2 3; -#X msg 50 418 200; -#X msg 146 418 symbol B; -#X msg 290 418 list A B; -#X msg 434 418 100 300; -#X obj 50 461 list.route A B 100 @trim; -#X obj 69 489 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 174 489 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 280 489 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 50 518 msg set; -#X obj 146 518 msg set; -#X obj 242 518 msg set; -#X obj 338 518 msg set; -#X msg 50 547 ; -#X msg 146 547 ; -#X msg 242 547 ; -#X msg 338 547 ; -#X obj 20 596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 601 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 317 ui.dt; +#X obj 155 317 ui.dt; +#X obj 261 317 ui.dt; +#X obj 366 317 ui.dt; +#X obj 472 317 ui.dt; +#X msg 50 360 100; +#X msg 146 360 symbol A; +#X msg 290 360 list A; +#X msg 434 360 1 2 3; +#X msg 50 389 200; +#X msg 146 389 symbol B; +#X msg 290 389 list A B; +#X msg 434 389 100 300; +#X obj 50 432 list.route A B 100 @trim; +#X obj 50 489 ui.dt; +#X obj 155 489 ui.dt; +#X obj 261 489 ui.dt; +#X obj 366 489 ui.dt; +#X obj 20 538 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 543 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 636 1\.; -#X text 150 636 list; -#X obj 246 637 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 636 @type: list of matched atoms. Type: list.; -#X obj 20 666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 671 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 578 1\.; +#X text 150 578 list; +#X obj 246 579 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 578 ARGS: list of matched atoms. Type: list.; +#X obj 20 608 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 613 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 706 @args; -#X text 245 706 Get/Set matching atoms. Type: list.; -#X msg 110 735 @as_any; -#X text 245 735 trim list or symbol selector on output. Default value: +#X msg 110 648 @args; +#X text 245 648 (initonly) Get/Set matching atoms. Type: list.; +#X msg 110 677 @as_any; +#X text 245 677 trim list or symbol selector on output. Default value: 0\.; -#X msg 110 764 @simplify; -#X text 245 764 Get/Set one element list simplification - transform -them to floats or symbols. Type: int. Default value: 1\. Allowed values: -0 \, 1\.; -#X msg 110 821 @trim; -#X text 245 821 cut first element from list \, transform float or symbol +#X msg 110 706 @simplify; +#X text 245 706 Get/Set one element list simplification - transform +them to floats or symbols. Type: bool. Default value: 1\.; +#X msg 110 748 @trim; +#X text 245 748 cut first element from list \, transform float or symbol to bang. Default value: 0\.; -#X obj 20 873 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 878 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 800 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 805 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 879 1\.; -#X text 150 879 *list*; -#X text 245 879 input list.; -#X text 150 899 *data:mlist*; -#X text 245 899 input mlist.; -#X obj 20 929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 934 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 806 1\.; +#X text 150 806 *list*; +#X text 245 806 input list.; +#X text 150 826 *data:mlist*; +#X text 245 826 input mlist.; +#X obj 20 856 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 861 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 935 0\.; -#X text 245 935 first match.; -#X text 110 955 1\.; -#X text 245 955 second match.; -#X text 110 975 ....; -#X text 245 975 nth match.; -#X text 110 995 n.; -#X text 245 995 unmatched element (without changes).; +#X text 110 862 0\.; +#X text 245 862 first match.; +#X text 110 882 1\.; +#X text 245 882 second match.; +#X text 110 902 ....; +#X text 245 902 nth match.; +#X text 110 922 n.; +#X text 245 922 unmatched element (without changes).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 1045 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1048 library: ceammc v0.9.4; -#X text 631 1060 see also:; -#X obj 705 1060 route; -#N canvas 10 1067 400 290 info 0; +#X obj 1 972 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 975 library: ceammc v0.9.6; +#X text 631 987 see also:; +#X obj 705 987 route; +#N canvas 10 994 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.route; #X text 10 76 category:; @@ -125,28 +109,16 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1067 pd info; +#X restore 10 994 pd info; #X connect 15 0 16 0; #X connect 15 1 17 0; #X connect 15 2 18 0; #X connect 15 3 19 0; #X connect 15 4 20 0; -#X connect 16 0 21 0; -#X connect 17 0 22 0; -#X connect 18 0 23 0; -#X connect 19 0 24 0; -#X connect 20 0 25 0; -#X connect 34 0 35 0; -#X connect 34 1 36 0; -#X connect 34 2 37 0; -#X connect 34 0 38 0; -#X connect 34 1 39 0; -#X connect 34 2 40 0; -#X connect 34 3 41 0; -#X connect 38 0 42 0; -#X connect 39 0 43 0; -#X connect 40 0 44 0; -#X connect 41 0 45 0; +#X connect 29 0 30 0; +#X connect 29 1 31 0; +#X connect 29 2 32 0; +#X connect 29 3 33 0; #X connect 7 0 15 0; #X connect 10 0 15 0; #X connect 13 0 15 0; @@ -156,11 +128,11 @@ https://github.com/uliss/pure-data; #X connect 6 0 15 0; #X connect 9 0 15 0; #X connect 12 0 15 0; -#X connect 27 0 34 0; -#X connect 31 0 34 0; -#X connect 29 0 34 0; -#X connect 28 0 34 0; -#X connect 32 0 34 0; -#X connect 33 0 34 0; -#X connect 26 0 34 0; -#X connect 30 0 34 0; \ No newline at end of file +#X connect 22 0 29 0; +#X connect 26 0 29 0; +#X connect 24 0 29 0; +#X connect 23 0 29 0; +#X connect 27 0 29 0; +#X connect 28 0 29 0; +#X connect 21 0 29 0; +#X connect 25 0 29 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.route.pddoc b/ceammc/ext/doc/list.route.pddoc index bcee88b157..f68878ab89 100644 --- a/ceammc/ext/doc/list.route.pddoc +++ b/ceammc/ext/doc/list.route.pddoc @@ -21,16 +21,17 @@ match - list of matched atoms + list of matched atoms - matching atoms - cut first element from list, transform - float or symbol to bang - one element list - simplification - transform them to floats or symbols - trim list or symbol selector on - output + matching + atoms + cut first element from + list, transform float or symbol to bang + one element list simplification - + transform them to floats or symbols + trim list or symbol + selector on output @@ -58,9 +59,7 @@ | ^| ^^| ^^^| ^^^^| | | | | | | | | | | -[msg set] [msg set] [msg set] [msg set] [msg set] -| | | | | -[ ( [ ( [ ( [ ( [ ( +[ui.dt] [ui.dt] [ui.dt] [ui.dt] [ui.dt] [100 #x2( [symbol A #a2( [list A #d2( [1 2 3 #c2( @@ -69,12 +68,10 @@ [list.route A B 100 @trim #r2] -| | ^| ^| ^^| ^^| ^^^| -| [B] | [B] | [B] | +| ^| ^^| ^^^| | | | | -[msg set] [msg set] [msg set] [msg set] -| | | | -[ ( [ ( [ ( [ ( +| | | | +[ui.dt] [ui.dt] [ui.dt] [ui.dt] [X a->r] [X b->r] diff --git a/ceammc/ext/doc/list.rundiff-help.pd b/ceammc/ext/doc/list.rundiff-help.pd index 84b26bd11a..622e06bfb3 100644 --- a/ceammc/ext/doc/list.rundiff-help.pd +++ b/ceammc/ext/doc/list.rundiff-help.pd @@ -33,7 +33,7 @@ the input list; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 543 library: ceammc v0.9.4; +#X text 10 543 library: ceammc v0.9.6; #X text 587 555 see also:; #X obj 661 555 list.runsum; #N canvas 10 562 400 290 info 0; @@ -41,7 +41,7 @@ the input list; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.rundiff; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.runsum-help.pd b/ceammc/ext/doc/list.runsum-help.pd index b3b858d3a0..c8e22bb85e 100644 --- a/ceammc/ext/doc/list.runsum-help.pd +++ b/ceammc/ext/doc/list.runsum-help.pd @@ -33,7 +33,7 @@ of the input list; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 543 library: ceammc v0.9.4; +#X text 10 543 library: ceammc v0.9.6; #X text 580 555 see also:; #X obj 654 555 list.rundiff; #N canvas 10 562 400 290 info 0; @@ -41,7 +41,7 @@ of the input list; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.runsum; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.search-help.pd b/ceammc/ext/doc/list.search-help.pd index b42399bdc8..7622a38f2a 100644 --- a/ceammc/ext/doc/list.search-help.pd +++ b/ceammc/ext/doc/list.search-help.pd @@ -36,7 +36,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 580 520 see also:; #X obj 654 520 list.^search; #N canvas 10 527 400 290 info 0; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.search; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.separate-help.pd b/ceammc/ext/doc/list.separate-help.pd index 0440433bbf..83fc9f7c28 100644 --- a/ceammc/ext/doc/list.separate-help.pd +++ b/ceammc/ext/doc/list.separate-help.pd @@ -18,8 +18,8 @@ -49933 0; #X msg 110 323 @enumerate; #X text 245 323 Get/Set enumeration mode. If enumeration is active -output pairs: INDEX ATOM \, otherwise single atoms. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +output pairs: INDEX ATOM \, otherwise single atoms. Type: bool. Default +value: 0\.; #X msg 110 380 @from; #X text 245 380 Get/Set enumeration starting index. Type: int. Default value: 0\.; @@ -45,7 +45,7 @@ mode).; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 579 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 582 library: ceammc v0.9.4; +#X text 10 582 library: ceammc v0.9.6; #X text 491 594 see also:; #X obj 565 594 list.repack; #X obj 660 594 list.unpack; @@ -54,7 +54,7 @@ mode).; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.separate; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.separate.pddoc b/ceammc/ext/doc/list.separate.pddoc index 41fd1a98b5..85f82ace7a 100644 --- a/ceammc/ext/doc/list.separate.pddoc +++ b/ceammc/ext/doc/list.separate.pddoc @@ -21,8 +21,8 @@ - enumeration mode. If - enumeration is active output pairs: INDEX ATOM, otherwise single atoms + enumeration mode. If enumeration is + active output pairs: INDEX ATOM, otherwise single atoms enumeration starting index diff --git a/ceammc/ext/doc/list.seq-help.pd b/ceammc/ext/doc/list.seq-help.pd index ee6d14fb58..5699232829 100644 --- a/ceammc/ext/doc/list.seq-help.pd +++ b/ceammc/ext/doc/list.seq-help.pd @@ -64,7 +64,7 @@ Default value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 749 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 752 library: ceammc v0.9.4; +#X text 10 752 library: ceammc v0.9.6; #X text 609 764 see also:; #X obj 683 764 list.gen; #N canvas 10 771 400 290 info 0; @@ -72,7 +72,7 @@ Default value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.seq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.seq.pddoc b/ceammc/ext/doc/list.seq.pddoc index 9dbaa574b0..19214b4bd0 100644 --- a/ceammc/ext/doc/list.seq.pddoc +++ b/ceammc/ext/doc/list.seq.pddoc @@ -27,8 +27,8 @@ end value sequence step (always positive) - generate closed range - sequence + generate closed + range sequence diff --git a/ceammc/ext/doc/list.set-help.pd b/ceammc/ext/doc/list.set-help.pd index e55b6f783b..215349b9ad 100644 --- a/ceammc/ext/doc/list.set-help.pd +++ b/ceammc/ext/doc/list.set-help.pd @@ -16,13 +16,13 @@ -49933 0; #X text 110 308 1\.; #X text 150 308 int; -#X obj 246 309 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 308 IDX: element position. Negative indexes are supported. +#X obj 246 309 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 308 INDEX: element position. Negative indexes are supported. -1 means last element. Type: int.; #X text 110 343 2\.; #X text 150 343 atom; -#X obj 246 344 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 343 VAL: element value. Type: atom.; +#X obj 246 344 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 343 VALUE: element value. Type: atom.; #X obj 20 373 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 378 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -55,13 +55,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 633 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 636 library: ceammc v0.9.4; +#X text 10 636 library: ceammc v0.9.6; #N canvas 10 655 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.set; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.set.pddoc b/ceammc/ext/doc/list.set.pddoc index b12e1b88de..c3de5f8937 100644 --- a/ceammc/ext/doc/list.set.pddoc +++ b/ceammc/ext/doc/list.set.pddoc @@ -14,9 +14,9 @@ 0.6 - element position. Negative indexes are supported. -1 + element position. Negative indexes are supported. -1 means last element - element value + element value element index diff --git a/ceammc/ext/doc/list.shift-help.pd b/ceammc/ext/doc/list.shift-help.pd index 1118011a27..0daed317ca 100644 --- a/ceammc/ext/doc/list.shift-help.pd +++ b/ceammc/ext/doc/list.shift-help.pd @@ -19,8 +19,8 @@ -49933 0; #X text 110 467 1\.; #X text 150 467 float; -#X obj 246 468 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 467 shift: shift amount. Float values cause linear interpolation. +#X obj 246 468 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 467 SHIFT: shift amount. Float values cause linear interpolation. Can be negative.. Type: float.; #X obj 20 512 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 517 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 @@ -48,7 +48,7 @@ Can be negative.. Type: float.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 723 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 726 library: ceammc v0.9.4; +#X text 10 726 library: ceammc v0.9.6; #X text 587 738 see also:; #X obj 661 738 list.rotate; #N canvas 10 745 400 290 info 0; @@ -56,7 +56,7 @@ Can be negative.. Type: float.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.shift; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.shift.pddoc b/ceammc/ext/doc/list.shift.pddoc index 64c934a284..3ad4dd50d9 100644 --- a/ceammc/ext/doc/list.shift.pddoc +++ b/ceammc/ext/doc/list.shift.pddoc @@ -18,7 +18,7 @@ - shift amount. Float values cause linear + shift amount. Float values cause linear interpolation. Can be negative. diff --git a/ceammc/ext/doc/list.shuffle-help.pd b/ceammc/ext/doc/list.shuffle-help.pd index ee2fcd1fbf..4162b247d4 100644 --- a/ceammc/ext/doc/list.shuffle-help.pd +++ b/ceammc/ext/doc/list.shuffle-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 500 520 see also:; #X obj 574 520 list.sort; #X obj 653 520 list.reverse; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.shuffle; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.slice-help.pd b/ceammc/ext/doc/list.slice-help.pd index cae9995cfa..41311538da 100644 --- a/ceammc/ext/doc/list.slice-help.pd +++ b/ceammc/ext/doc/list.slice-help.pd @@ -11,73 +11,68 @@ #X obj 50 147 list.slice 2; #X obj 242 147 list.slice 2 4; #X obj 424 147 list.slice 0 5 2; -#X obj 50 176 msg set; -#X obj 242 176 msg set; -#X obj 424 176 msg set; -#X msg 50 205 ; -#X msg 242 205 ; -#X msg 424 205 ; -#X msg 50 234 list A B C D E; -#X msg 242 234 list A B C D E; -#X obj 50 262 list.slice -2; -#X obj 242 262 list.slice -4 -1; -#X obj 50 291 msg set; -#X obj 242 291 msg set; -#X msg 50 320 ; -#X msg 242 320 ; -#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 176 ui.dt; +#X obj 242 176 ui.dt; +#X obj 424 176 ui.dt; +#X msg 50 205 list A B C D E; +#X msg 242 205 list A B C D E; +#X obj 50 234 list.slice -2; +#X obj 242 234 list.slice -4 -1; +#X obj 50 262 ui.dt; +#X obj 242 262 ui.dt; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 409 1\.; -#X text 150 409 int; -#X obj 246 410 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 FROM: @from property. Type: int.; -#X text 110 429 2\.; -#X text 150 429 int; -#X obj 246 430 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 429 TO: @to property. Type: int.; -#X text 110 449 3\.; -#X text 150 449 int; -#X obj 246 450 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 449 STEP: @step property. Type: int.; -#X obj 20 479 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 484 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 351 1\.; +#X text 150 351 int; +#X obj 246 352 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 FROM: @from property. Type: int.; +#X text 110 371 2\.; +#X text 150 371 int; +#X obj 246 372 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 371 TO: @to property. Type: int.; +#X text 110 391 3\.; +#X text 150 391 int; +#X obj 246 392 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 391 STEP: @step property. Type: int. Min value: 0; +#X obj 20 421 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 426 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 519 @from; -#X text 245 519 Get/Set start slice position. You can use negative +#X msg 110 461 @from; +#X text 245 461 Get/Set start slice position. You can use negative index to address elements from the end. Type: int. Default value: 0\.; -#X msg 110 561 @step; -#X text 245 561 Get/Set slice step. Type: int. Default value: 1\. Min +#X msg 110 503 @step; +#X text 245 503 Get/Set slice step. Type: int. Default value: 1\. Min value: 0\.; -#X msg 110 603 @to; -#X text 245 603 Get/Set end slice position. You can use negative index +#X msg 110 545 @to; +#X text 245 545 Get/Set end slice position. You can use negative index to address elements from the end. Type: int. Default value: -1\.; -#X obj 20 655 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 660 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 597 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 602 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 661 1\.; -#X text 150 661 *list*; -#X text 245 661 input list.; -#X obj 20 691 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 696 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 603 1\.; +#X text 150 603 *list*; +#X text 245 603 input list.; +#X obj 20 633 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 638 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 697 1\.; -#X text 245 697 output sublist.; +#X text 110 639 1\.; +#X text 245 639 output sublist.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 747 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 750 library: ceammc v0.9.4; -#X text 616 762 see also:; -#X obj 690 762 list.at; -#N canvas 10 769 400 290 info 0; +#X obj 1 689 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 692 library: ceammc v0.9.6; +#X text 616 704 see also:; +#X obj 690 704 list.at; +#N canvas 10 711 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.slice; #X text 10 76 category:; @@ -96,19 +91,14 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 769 pd info; +#X restore 10 711 pd info; #X connect 4 0 7 0; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 8 0 11 0; #X connect 9 0 12 0; -#X connect 10 0 13 0; -#X connect 11 0 14 0; -#X connect 12 0 15 0; -#X connect 16 0 18 0; -#X connect 17 0 19 0; -#X connect 18 0 20 0; -#X connect 19 0 21 0; -#X connect 20 0 22 0; -#X connect 21 0 23 0; \ No newline at end of file +#X connect 13 0 15 0; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 16 0 18 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.slice.pddoc b/ceammc/ext/doc/list.slice.pddoc index a11e59f6fb..d75c3a363c 100644 --- a/ceammc/ext/doc/list.slice.pddoc +++ b/ceammc/ext/doc/list.slice.pddoc @@ -19,7 +19,7 @@ @from property @to property - @step property + @step property start slice position. You can use @@ -43,17 +43,13 @@ | | | [list.slice 2] [list.slice 2 4] [list.slice 0 5 2] | | | -[msg set] [msg set] [msg set] -| | | -[ ( [ ( [ ( +[ui.dt] [ui.dt] [ui.dt] [list A B C D E( [list A B C D E( | | [list.slice -2] [list.slice -4 -1] | | -[msg set] [msg set] -| | -[ ( [ ( +[ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/list.sort-help.pd b/ceammc/ext/doc/list.sort-help.pd index 926123cbda..760368e1b2 100644 --- a/ceammc/ext/doc/list.sort-help.pd +++ b/ceammc/ext/doc/list.sort-help.pd @@ -8,26 +8,25 @@ #X msg 50 118 2 -2 4 1 2.0; #X msg 194 118 1 a -2 b 4 1 2.0; #X obj 50 147 list.sort; -#X obj 50 176 msg set; -#X msg 50 205 ; -#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 259 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 176 ui.dt; +#X obj 20 225 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 230 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 260 1\.; -#X text 150 260 *list*; -#X text 245 260 Input list.; -#X obj 20 290 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 295 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 231 1\.; +#X text 150 231 *list*; +#X text 245 231 input list.; +#X obj 20 261 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 266 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 296 1\.; -#X text 245 296 new sorted list.; +#X text 110 267 1\.; +#X text 245 267 new sorted list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 361 520 see also:; #X obj 435 520 list.sort_with; #X obj 551 520 list.reverse; @@ -37,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.sort; #X text 10 76 category:; @@ -59,5 +58,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; -#X connect 6 0 7 0; -#X connect 7 0 8 0; \ No newline at end of file +#X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.sort.pddoc b/ceammc/ext/doc/list.sort.pddoc index 170a930c5d..e70278ba43 100644 --- a/ceammc/ext/doc/list.sort.pddoc +++ b/ceammc/ext/doc/list.sort.pddoc @@ -20,7 +20,7 @@ - Input list. + input list. @@ -33,10 +33,8 @@ | | [list.sort ] | -[msg set] -| -[ ( - ]]> +[ui.dt] +]]> diff --git a/ceammc/ext/doc/list.sort_with-help.pd b/ceammc/ext/doc/list.sort_with-help.pd index 96667b4c74..c313cb58df 100644 --- a/ceammc/ext/doc/list.sort_with-help.pd +++ b/ceammc/ext/doc/list.sort_with-help.pd @@ -35,7 +35,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 602 520 see also:; #X obj 676 520 list.sort; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.sort_with; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.split-help.pd b/ceammc/ext/doc/list.split-help.pd index 0cd1000be9..54045521af 100644 --- a/ceammc/ext/doc/list.split-help.pd +++ b/ceammc/ext/doc/list.split-help.pd @@ -9,54 +9,53 @@ is specified by the argument; #X msg 50 118 1 2 3 4 5; #X msg 174 118 @at 3; #X obj 50 176 list.split 2; -#X obj 50 205 msg set; -#X obj 203 205 msg set; -#X msg 50 234 ; -#X msg 203 234 ; -#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 205 ui.dt; +#X obj 194 205 ui.dt; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 323 1\.; -#X text 150 323 int; -#X obj 246 324 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 AT: size of first list. The size of the list on the -second output is the size of input list - this value. Type: int.; -#X obj 20 368 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 373 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 294 1\.; +#X text 150 294 int; +#X obj 246 295 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 AT: size of first list. The size of the list on the +second output is the size of input list - this value. Type: int. Min +value: 0; +#X obj 20 354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 359 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 408 @at; -#X text 245 408 Get/Set split point. Type: int. Default value: 0\. +#X msg 110 394 @at; +#X text 245 394 Get/Set split point. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 465 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 446 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 451 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 466 1\.; -#X text 150 466 *list*; -#X text 245 466 input list.; -#X text 150 486 *data:mlist*; -#X text 245 486 input mlist.; -#X obj 20 516 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 521 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 452 1\.; +#X text 150 452 *list*; +#X text 245 452 input list.; +#X text 150 472 *data:mlist*; +#X text 245 472 input mlist.; +#X obj 20 502 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 507 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 522 1\.; -#X text 245 522 first sub-list of given size.; -#X text 110 542 2\.; -#X text 245 542 second sub-list.; +#X text 110 508 1\.; +#X text 245 508 first sub-list of given size.; +#X text 110 528 2\.; +#X text 245 528 second sub-list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 592 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 595 library: ceammc v0.9.4; -#X text 616 607 see also:; -#X obj 690 607 list.at; -#N canvas 10 614 400 290 info 0; +#X obj 1 578 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 581 library: ceammc v0.9.6; +#X text 616 593 see also:; +#X obj 690 593 list.at; +#N canvas 10 600 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.split; #X text 10 76 category:; @@ -75,10 +74,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 614 pd info; +#X restore 10 600 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 7 0; -#X connect 6 1 8 0; -#X connect 7 0 9 0; -#X connect 8 0 10 0; \ No newline at end of file +#X connect 6 1 8 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.split.pddoc b/ceammc/ext/doc/list.split.pddoc index e59325c400..52cfed190e 100644 --- a/ceammc/ext/doc/list.split.pddoc +++ b/ceammc/ext/doc/list.split.pddoc @@ -19,8 +19,8 @@ - size of first list. The size of the list on the second - output is the size of input list - this value + size of first list. The size of the list on + the second output is the size of input list - this value split point @@ -44,10 +44,8 @@ | | [list.split 2] | ^| -[msg set] [msg set] -| | -[ ( [ ( - ]]> +[ui.dt] [ui.dt] +]]> diff --git a/ceammc/ext/doc/list.stretch-help.pd b/ceammc/ext/doc/list.stretch-help.pd index 807f7a043a..7ea7321e2d 100644 --- a/ceammc/ext/doc/list.stretch-help.pd +++ b/ceammc/ext/doc/list.stretch-help.pd @@ -15,10 +15,9 @@ -49933 0; #X text 110 495 1\.; #X text 150 495 int; -#X obj 246 496 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 495 stretch: New size of output list. Input list will be -stretched to the new size with linear interpolation. Type: int. Min -value: 1; +#X obj 246 496 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 495 SIZE: New size of output list. Input list will be stretched +to the new size with linear interpolation. Type: int. Min value: 0; #X obj 20 555 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 560 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -46,7 +45,7 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 779 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 782 library: ceammc v0.9.4; +#X text 10 782 library: ceammc v0.9.6; #X text 594 794 see also:; #X obj 668 794 list.shift; #N canvas 10 801 400 290 info 0; @@ -54,7 +53,7 @@ value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.stretch; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.stretch.pddoc b/ceammc/ext/doc/list.stretch.pddoc index 671c88db09..ac92f1f28d 100644 --- a/ceammc/ext/doc/list.stretch.pddoc +++ b/ceammc/ext/doc/list.stretch.pddoc @@ -17,13 +17,13 @@ list.shift + + New size of output list. Input list will + be stretched to the new size with linear interpolation + new size - - New size of output list. Input list - will be stretched to the new size with linear interpolation - input list. diff --git a/ceammc/ext/doc/list.sum-help.pd b/ceammc/ext/doc/list.sum-help.pd index 0d88f869ce..89ce029b1a 100644 --- a/ceammc/ext/doc/list.sum-help.pd +++ b/ceammc/ext/doc/list.sum-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 486 520 see also:; #X obj 560 520 list.product; #X obj 661 520 list.reduce; @@ -37,7 +37,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.sum; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.unique-help.pd b/ceammc/ext/doc/list.unique-help.pd index 141ef3ce1d..fa388bfc4e 100644 --- a/ceammc/ext/doc/list.unique-help.pd +++ b/ceammc/ext/doc/list.unique-help.pd @@ -7,34 +7,33 @@ #X obj 661 11 list.unique; #X msg 50 118 1 2 3 1 3 6 9 -1 3; #X obj 50 162 list.unique; -#X obj 50 190 msg set; -#X msg 50 219 ; -#X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 273 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 190 ui.dt; +#X obj 20 239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 244 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 308 @stable; -#X text 245 308 Get/Set if true - preserves element appearing order. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X obj 20 360 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 365 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 279 @stable; +#X text 245 279 Get/Set if true - preserves element appearing order. +Type: bool. Default value: 1\.; +#X obj 20 331 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 336 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 366 1\.; -#X text 150 366 *list*; -#X text 245 366 input list.; -#X text 150 386 *data:mlist*; -#X text 245 386 input mlist.; -#X obj 20 416 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 421 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 337 1\.; +#X text 150 337 *list*; +#X text 245 337 input list.; +#X text 150 357 *data:mlist*; +#X text 245 357 input mlist.; +#X obj 20 387 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 392 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 422 1\.; -#X text 245 422 output list.; +#X text 110 393 1\.; +#X text 245 393 output list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 602 520 see also:; #X obj 676 520 list.sort; #N canvas 10 527 400 290 info 0; @@ -42,7 +41,7 @@ Type: int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.unique; #X text 10 76 category:; @@ -63,5 +62,4 @@ https://github.com/uliss/pure-data; #X text 120 268 generated by pddoc; #X restore 10 527 pd info; #X connect 4 0 5 0; -#X connect 5 0 6 0; -#X connect 6 0 7 0; \ No newline at end of file +#X connect 5 0 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.unique.pddoc b/ceammc/ext/doc/list.unique.pddoc index 08ea9f2085..84a6fa42f9 100644 --- a/ceammc/ext/doc/list.unique.pddoc +++ b/ceammc/ext/doc/list.unique.pddoc @@ -17,8 +17,8 @@ - if true - preserves element - appearing order + if true - preserves element appearing + order @@ -37,9 +37,7 @@ | [list.unique] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/list.unpack-help.pd b/ceammc/ext/doc/list.unpack-help.pd index 4f714faf70..39b6e84232 100644 --- a/ceammc/ext/doc/list.unpack-help.pd +++ b/ceammc/ext/doc/list.unpack-help.pd @@ -41,7 +41,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 477 520 see also:; #X obj 551 520 list.repack; #X obj 646 520 list.separate; @@ -50,7 +50,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.unpack; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.unzip-help.pd b/ceammc/ext/doc/list.unzip-help.pd index d97f73b3e2..9465fae60c 100644 --- a/ceammc/ext/doc/list.unzip-help.pd +++ b/ceammc/ext/doc/list.unzip-help.pd @@ -19,57 +19,55 @@ If @pad method used with value X \, output if [1 3 5] and [2 4 X]; #X msg 203 282 @min; #X msg 270 282 @pad X; #X obj 50 339 list.unzip 2; -#X obj 50 368 msg set; -#X obj 194 368 msg set; -#X msg 50 397 ; -#X msg 203 397 ; -#X obj 20 446 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 451 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 368 ui.dt; +#X obj 203 368 ui.dt; +#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 422 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 486 1\.; -#X text 150 486 int; -#X obj 246 487 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 486 N: number of output outlets. Type: int. Min value: +#X text 110 457 1\.; +#X text 150 457 int; +#X obj 246 458 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 457 N: number of output outlets. Type: int. Min value: 2; -#X obj 20 516 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 521 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 492 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 556 @method; -#X text 245 556 Get/Set split method if number element in the input +#X msg 110 527 @method; +#X text 245 527 Get/Set split method if number element in the input list is not multiple of number of outputs. Type: symbol. Default value: min. Allowed values: min \, pad.; -#X msg 110 613 @min; -#X text 245 613 alias to @method min. No padding used.; -#X msg 110 642 @pad; -#X text 245 642 Get/Set padding value. Pads result lists with specified +#X msg 110 584 @min; +#X text 245 584 alias to @method min. No padding used.; +#X msg 110 613 @pad; +#X text 245 613 Get/Set padding value. Pads result lists with specified value \, if number of elements in the input list is not multiple of number of outputs. Type: atom. Default value: 0\.; -#X obj 20 709 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 714 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 680 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 685 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 715 1\.; -#X text 150 715 *list*; -#X text 245 715 input list.; -#X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 750 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 686 1\.; +#X text 150 686 *list*; +#X text 245 686 input list.; +#X obj 20 716 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 721 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 751 1\.; -#X text 245 751 unzipped list.; +#X text 110 722 1\.; +#X text 245 722 unzipped list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 801 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 804 library: ceammc v0.9.4; -#X text 608 816 see also:; -#X obj 682 816 list.zip; -#N canvas 10 823 400 290 info 0; +#X obj 1 772 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 775 library: ceammc v0.9.6; +#X text 608 787 see also:; +#X obj 682 787 list.zip; +#N canvas 10 794 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.unzip; #X text 10 76 category:; @@ -88,13 +86,11 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 823 pd info; +#X restore 10 794 pd info; #X connect 9 0 14 0; #X connect 11 0 14 0; #X connect 10 0 14 0; #X connect 12 0 14 0; #X connect 13 0 14 0; #X connect 14 0 15 0; -#X connect 14 1 16 0; -#X connect 15 0 17 0; -#X connect 16 0 18 0; \ No newline at end of file +#X connect 14 1 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/list.unzip.pddoc b/ceammc/ext/doc/list.unzip.pddoc index 4757a17642..0dd327a5ae 100644 --- a/ceammc/ext/doc/list.unzip.pddoc +++ b/ceammc/ext/doc/list.unzip.pddoc @@ -58,9 +58,7 @@ | | | | | [list.unzip 2] | ^| -[msg set] [msg set] -| | -[ ( [ ( +[ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/list.walk-help.pd b/ceammc/ext/doc/list.walk-help.pd index 5a5716b940..b85a0047ec 100644 --- a/ceammc/ext/doc/list.walk-help.pd +++ b/ceammc/ext/doc/list.walk-help.pd @@ -34,8 +34,8 @@ element and when move to next - use [1( message \, Otherwise - use -49933 0; #X text 110 537 1\.; #X text 150 537 list; -#X obj 246 538 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 537 INIT: initial list. Type: list.; +#X obj 246 538 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 537 VALUE: initial list. Type: list.; #X obj 20 567 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 572 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -44,7 +44,7 @@ element and when move to next - use [1( message \, Otherwise - use - min/max value repeats perpetually.; #X msg 110 649 @direction; #X text 245 649 Get/Set walking direction. "1" - forwards \, "0" - -backwards. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; +backwards. Type: bool. Default value: 1\.; #X msg 110 691 @fold; #X text 245 691 fold pass mode. List values are repeated in a loop with folding.; @@ -104,22 +104,24 @@ given step and outputs it. Type: int.; -49933 0; #X text 110 1394 1\.; #X text 245 1394 list element.; +#X text 110 1414 2\.; +#X text 245 1414 bang: when last element reached.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; -#X obj 1 1444 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1447 library: ceammc v0.9.4; -#X text 537 1459 see also:; -#X obj 611 1459 list.gen; -#X obj 683 1459 list.seq; -#N canvas 10 1466 400 290 info 0; +#X obj 1 1464 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1467 library: ceammc v0.9.6; +#X text 537 1479 see also:; +#X obj 611 1479 list.gen; +#X obj 683 1479 list.seq; +#N canvas 10 1486 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.walk; #X text 10 76 category:; @@ -138,7 +140,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1466 pd info; +#X restore 10 1486 pd info; #X connect 6 0 8 0; #X connect 7 0 10 0; #X connect 8 0 19 0; diff --git a/ceammc/ext/doc/list.walk.pddoc b/ceammc/ext/doc/list.walk.pddoc index b6472a082f..3bbfe366ca 100644 --- a/ceammc/ext/doc/list.walk.pddoc +++ b/ceammc/ext/doc/list.walk.pddoc @@ -23,7 +23,7 @@ then output it. - initial list + initial list pass @@ -37,15 +37,15 @@ loop fold pass mode. List values are repeated in a loop with folding - walking direction. "1" - - forwards, "0" - backwards. + walking direction. "1" - forwards, + "0" - backwards. current position output list length - current list - size - current list + current + list size + current list outputs current element @@ -69,6 +69,7 @@ list element + bang: when last element reached diff --git a/ceammc/ext/doc/list.zip-help.pd b/ceammc/ext/doc/list.zip-help.pd index 1b86249cb0..4874e68e1a 100644 --- a/ceammc/ext/doc/list.zip-help.pd +++ b/ceammc/ext/doc/list.zip-help.pd @@ -45,8 +45,8 @@ symbol. Default value: min. Allowed values: min \, pad \, clip \, wrap #X text 245 576 alias for "@oversize min" property. Truncates lists to minimal common size.; #X msg 110 618 @n; -#X text 245 618 Get/Set number of inputs. Type: int. Default value: -2\. Range: 2\...20\.; +#X text 245 618 (initonly) Get/Set number of inputs. Type: int. Default +value: 2\. Range: 2\...20\.; #X msg 110 660 @pad; #X text 245 660 Get/Set pad value for pad method of resizing. Type: atom. Default value: 0\.; @@ -70,7 +70,7 @@ with repeated values from the beginning.; #X text 115 45 ::; #X obj 131 48 ui.link @title list @url ceammc.list-help.pd; #X obj 1 846 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 849 library: ceammc v0.9.4; +#X text 10 849 library: ceammc v0.9.6; #X text 594 861 see also:; #X obj 668 861 list.unzip; #N canvas 10 868 400 290 info 0; @@ -78,7 +78,7 @@ with repeated values from the beginning.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 list.zip; #X text 10 76 category:; diff --git a/ceammc/ext/doc/list.zip.pddoc b/ceammc/ext/doc/list.zip.pddoc index 93db33c666..1289db774b 100644 --- a/ceammc/ext/doc/list.zip.pddoc +++ b/ceammc/ext/doc/list.zip.pddoc @@ -38,10 +38,10 @@ on. pad value for pad method of resizing - number of - inputs - input data list: list of - data:mlist + number of inputs + input data list: list + of data:mlist diff --git a/ceammc/ext/doc/live.capture~-help.pd b/ceammc/ext/doc/live.capture~-help.pd index b97177b0dc..4d209a6716 100644 --- a/ceammc/ext/doc/live.capture~-help.pd +++ b/ceammc/ext/doc/live.capture~-help.pd @@ -21,46 +21,49 @@ sound in loop; #X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 351 @active; -#X text 245 351 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 393 @gate; -#X text 245 393 Get/Set start/stop recording. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 450 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 351 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 380 @fade; +#X text 245 380 Get/Set intput crossfade time. Type: float. Units: +ms. Default value: 70\. Range: 0\...200\.; +#X msg 110 422 @gate; +#X text 245 422 Get/Set start/stop recording. Type: bool. Default value: +0\.; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 485 record; -#X text 245 485 start record.; -#X msg 110 512 reset; -#X text 245 512 reset recorded data.; -#X msg 110 539 stop; -#X text 245 539 stop record.; -#X obj 20 576 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 581 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 501 record; +#X text 245 501 start record.; +#X msg 110 528 reset; +#X text 245 528 reset recorded data.; +#X msg 110 555 stop; +#X text 245 555 stop record.; +#X obj 20 592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 597 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 582 1\.; -#X text 245 582 source signal.; -#X text 110 602 2\.; -#X text 150 602 *float*; -#X text 245 602 1/0 toggle signal.; -#X obj 20 632 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 637 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 598 1\.; +#X text 245 598 source signal.; +#X text 110 618 2\.; +#X text 150 618 *float*; +#X text 245 618 1/0 toggle signal.; +#X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 653 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 638 1\.; -#X text 245 638 recorded signal.; +#X text 110 654 1\.; +#X text 245 654 recorded signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title live @url ceammc.live-help.pd; -#X obj 1 688 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 691 library: ceammc v0.9.4; -#N canvas 10 710 400 290 info 0; +#X obj 1 704 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 707 library: ceammc v0.9.6; +#N canvas 10 726 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 live.capture~; #X text 10 76 category:; @@ -79,7 +82,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 710 pd info; +#X restore 10 726 pd info; #X connect 7 0 9 0; #X connect 4 0 11 0; #X connect 6 0 11 0; diff --git a/ceammc/ext/doc/live.capture~.pddoc b/ceammc/ext/doc/live.capture~.pddoc index c47a66ae6d..17619a06aa 100644 --- a/ceammc/ext/doc/live.capture~.pddoc +++ b/ceammc/ext/doc/live.capture~.pddoc @@ -20,10 +20,10 @@ reset recorded data - start/stop - recording - on/off dsp - processing + start/stop recording + intput crossfade time + on/off dsp processing diff --git a/ceammc/ext/doc/loadexpr-help.pd b/ceammc/ext/doc/loadexpr-help.pd index e7bdeb92a9..9c8722cd73 100644 --- a/ceammc/ext/doc/loadexpr-help.pd +++ b/ceammc/ext/doc/loadexpr-help.pd @@ -42,7 +42,7 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 570 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 573 library: ceammc v0.9.4; +#X text 10 573 library: ceammc v0.9.6; #X text 616 585 see also:; #X obj 690 585 loadmsg; #N canvas 10 592 400 290 info 0; @@ -50,7 +50,7 @@ Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 loadexpr; #X text 10 76 category:; diff --git a/ceammc/ext/doc/local.dict-help.pd b/ceammc/ext/doc/local.dict-help.pd index fca44b3b64..754d7cdc56 100644 --- a/ceammc/ext/doc/local.dict-help.pd +++ b/ceammc/ext/doc/local.dict-help.pd @@ -17,93 +17,100 @@ name and available only within its patch (canvas); #X obj 50 245 ui.dt; #X obj 50 274 local.dict.subpatch; #X obj 20 323 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 328 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 20 328 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 363 1\.; -#X text 150 363 symbol; -#X obj 246 364 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 363 ID: object ID. Type: symbol.; +#X text 110 363 Left-click; +#X text 285 363 open data editor.; #X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 398 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 398 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 433 @empty; -#X text 245 433 (readonly) Get 1 if dict is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 475 @keys; -#X text 245 475 (readonly) Get keys of dictionary. Type: list.; -#X msg 110 504 @size; -#X text 245 504 (readonly) Get number of entries in dictionary. Type: +#X text 110 433 1\.; +#X text 150 433 symbol; +#X obj 246 434 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 433 ID: object ID. Type: symbol.; +#X obj 20 463 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 468 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 503 @empty; +#X text 245 503 (readonly) Get 1 if dict is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 545 @keys; +#X text 245 545 (readonly) Get keys of dictionary. Type: list.; +#X msg 110 574 @size; +#X text 245 574 (readonly) Get number of entries in dictionary. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 556 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 561 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 626 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 631 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 596 add; -#X text 245 596 adds entry to dictionary. Arguments are:; -#X obj 255 619 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 619 KEY: entry key. Type: atom.; -#X obj 255 642 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 642 VAL: single value or list. Type: list.; -#X msg 110 667 clear; -#X text 245 667 removes all dict values. No output.; -#X msg 110 694 get_key; -#X text 245 694 get entry from dictionary. Arguments are:; -#X obj 255 717 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 717 KEY: entry key. Type: atom.; -#X msg 110 742 read; -#X text 245 742 read dict from JSON file. Arguments are:; -#X obj 255 765 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 765 PATH: file path. Type: symbol.; -#X msg 110 790 remove; -#X text 245 790 remove entry from dictionary. Arguments are:; -#X obj 255 813 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 813 KEY: entry key. Type: atom.; -#X msg 110 838 set; -#X text 245 838 set dict content without output.; -#X msg 110 865 set_key; -#X text 245 865 change entry in dictionary. If it's not exists \, do +#X msg 110 666 add; +#X text 245 666 adds entry to dictionary. Arguments are:; +#X obj 255 689 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 689 KEY: entry key. Type: atom.; +#X obj 255 712 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 712 VAL: single value or list. Type: list.; +#X msg 110 737 choose; +#X text 245 737 choose random key and output it.; +#X msg 110 764 clear; +#X text 245 764 removes all dict values. No output.; +#X msg 110 791 get_key; +#X text 245 791 get entry from dictionary. Arguments are:; +#X obj 255 814 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 814 KEY: entry key. Type: atom.; +#X msg 110 839 read; +#X text 245 839 read dict from JSON file. Arguments are:; +#X obj 255 862 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 862 PATH: file path. Type: symbol.; +#X msg 110 887 remove; +#X text 245 887 remove entry from dictionary. Arguments are:; +#X obj 255 910 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 910 KEY: entry key. Type: atom.; +#X msg 110 935 set; +#X text 245 935 set dict content without output.; +#X msg 110 962 set_key; +#X text 245 962 change entry in dictionary. If it's not exists \, do nothing. Arguments are:; -#X obj 255 903 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 903 KEY: key. Type: atom.; -#X obj 255 926 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 926 VAL: single value or list. Type: list.; -#X msg 110 951 write; -#X text 245 951 write dict as JSON file. Arguments are:; -#X obj 255 974 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 974 PATH: file path. Type: symbol.; -#X msg 110 999 [....]; -#X text 245 999 sets new content without output.; -#X obj 20 1036 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1041 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1000 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1000 KEY: key. Type: atom.; +#X obj 255 1023 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1023 VAL: single value or list. Type: list.; +#X msg 110 1048 write; +#X text 245 1048 write dict as JSON file. Arguments are:; +#X obj 255 1071 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1071 PATH: file path. Type: symbol.; +#X msg 110 1096 [....]; +#X text 245 1096 sets new content without output.; +#X obj 20 1133 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1138 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1042 1\.; -#X text 150 1042 *bang*; -#X text 245 1042 output current dictionary value.; -#X text 150 1062 *list*; -#X text 245 1062 set dict from list. Key-value pairs are expected. +#X text 110 1139 1\.; +#X text 150 1139 *bang*; +#X text 245 1139 output current dictionary value.; +#X text 150 1159 *list*; +#X text 245 1159 set dict from list. Key-value pairs are expected. [1 2 3 4( becames dict with keys: 1 and 3 \, values: 2 and 4\. No output.; -#X text 150 1097 *data:dict*; -#X text 245 1097 set and output new dict.; -#X obj 20 1127 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1132 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1194 *data:dict*; +#X text 245 1194 set and output new dict.; +#X obj 20 1224 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1229 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1133 1\.; -#X text 245 1133 dict output.; +#X text 110 1230 1\.; +#X text 245 1230 dict output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; -#X obj 1 1183 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1186 library: ceammc v0.9.4; -#X text 506 1198 see also:; -#X obj 580 1198 data.dict; -#X obj 660 1198 global.dict; -#N canvas 10 1205 400 290 info 0; +#X obj 1 1280 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1283 library: ceammc v0.9.6; +#X text 506 1295 see also:; +#X obj 580 1295 data.dict; +#X obj 660 1295 global.dict; +#N canvas 10 1302 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.dict; #X text 10 76 category:; @@ -122,7 +129,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1205 pd info; +#X restore 10 1302 pd info; #X connect 8 0 9 0; #X connect 7 0 10 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/local.dict.pddoc b/ceammc/ext/doc/local.dict.pddoc index 0f3e1e812d..c944a28779 100644 --- a/ceammc/ext/doc/local.dict.pddoc +++ b/ceammc/ext/doc/local.dict.pddoc @@ -24,14 +24,18 @@ Defines local scope dict variable, accessed by ID name and available only within its patch (canvas) + + open data editor + object ID - keys of dictionary - 1 if dict is - empty, otherwise 0 - number of + keys of + dictionary + 1 if dict is empty, + otherwise 0 + number of entries in dictionary @@ -39,6 +43,7 @@ entry key single value or list removes all dict values. No output + choose random key and output it get entry from dictionary entry key change entry in dictionary. If it's not exists, do nothing. diff --git a/ceammc/ext/doc/local.float-help.pd b/ceammc/ext/doc/local.float-help.pd index ef33523d9c..6061d0c6c9 100644 --- a/ceammc/ext/doc/local.float-help.pd +++ b/ceammc/ext/doc/local.float-help.pd @@ -65,7 +65,7 @@ outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 798 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 801 library: ceammc v0.9.4; +#X text 10 801 library: ceammc v0.9.6; #X text 515 813 see also:; #X obj 589 813 local.int; #X obj 668 813 global.int; @@ -74,7 +74,7 @@ outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/local.float.pddoc b/ceammc/ext/doc/local.float.pddoc index 9d192ea92b..e800869518 100644 --- a/ceammc/ext/doc/local.float.pddoc +++ b/ceammc/ext/doc/local.float.pddoc @@ -25,7 +25,7 @@ object ID - current + current value diff --git a/ceammc/ext/doc/local.int-help.pd b/ceammc/ext/doc/local.int-help.pd index 875634f6d5..9b79f1549f 100644 --- a/ceammc/ext/doc/local.int-help.pd +++ b/ceammc/ext/doc/local.int-help.pd @@ -66,7 +66,7 @@ outlet.; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; #X obj 1 798 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 801 library: ceammc v0.9.4; +#X text 10 801 library: ceammc v0.9.6; #X text 413 813 see also:; #X obj 487 813 local.float; #X obj 581 813 local.list; @@ -76,7 +76,7 @@ outlet.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/local.int.pddoc b/ceammc/ext/doc/local.int.pddoc index d4ac17526b..c6be5b454c 100644 --- a/ceammc/ext/doc/local.int.pddoc +++ b/ceammc/ext/doc/local.int.pddoc @@ -26,7 +26,8 @@ object ID - current value + current + value sets new value without output diff --git a/ceammc/ext/doc/local.list-help.pd b/ceammc/ext/doc/local.list-help.pd index f424954a41..276eb6d3a0 100644 --- a/ceammc/ext/doc/local.list-help.pd +++ b/ceammc/ext/doc/local.list-help.pd @@ -25,95 +25,110 @@ name and available only within its patch (canvas).; #X text 150 363 symbol; #X obj 246 364 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 363 ID: object ID. Type: symbol.; -#X obj 20 393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 398 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 383 2\.; +#X text 150 383 list; +#X obj 246 384 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 383 VALUE: initial values. Type: list.; +#X obj 20 413 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 418 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 433 @empty; -#X text 245 433 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 475 @size; -#X text 245 475 (readonly) Get number of elements in list. Type: int. +#X msg 110 453 @empty; +#X text 245 453 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 495 @value; +#X text 245 495 Get/Set current value. Type: list.; +#X msg 110 524 @size; +#X text 245 524 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 527 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 532 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 576 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 581 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 567 append; -#X text 245 567 adds values to the end of the list. Arguments are:; -#X obj 255 590 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 590 VAL: appended value. Type: atom.; -#X msg 110 615 choose; -#X text 245 615 choose random element in list and output it.; -#X msg 110 642 clear; -#X text 245 642 removes all list elements.; -#X msg 110 669 fill; -#X text 245 669 fills with specified value. Arguments are:; -#X obj 255 692 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 692 VAL: fill value. Type: atom.; -#X msg 110 717 insert; -#X text 245 717 inserts values to the specified position. Arguments +#X msg 110 616 append; +#X text 245 616 adds values to the end of the list. Arguments are:; +#X obj 255 639 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 639 VAL: appended value. Type: atom.; +#X msg 110 664 at; +#X text 245 664 outputs atom at the specified position. Arguments are:; +#X obj 255 687 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 687 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 727 back; +#X text 245 727 output last list element.; +#X msg 110 754 choose; +#X text 245 754 choose random element in list and output it.; +#X msg 110 781 clear; +#X text 245 781 removes all list elements.; +#X msg 110 808 fill; +#X text 245 808 fills with specified value. Arguments are:; +#X obj 255 831 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 831 VAL: fill value. Type: atom.; +#X msg 110 856 front; +#X text 245 856 output first list element.; +#X msg 110 883 insert; +#X text 245 883 inserts values to the specified position. Arguments are:; -#X obj 255 740 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 740 IDX: insert position. Type: int.; -#X obj 255 763 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 763 VAL: value. Type: atom.; -#X msg 110 788 pop; -#X text 245 788 removes last list element.; -#X msg 110 815 prepend; -#X text 245 815 inserts values to the list beginning. Arguments are:; -#X obj 255 838 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 838 VAL: prepended value. Type: atom.; -#X msg 110 863 remove; -#X text 245 863 removes specified element. Arguments are:; -#X obj 255 886 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 886 IDX: element index. Type: int.; -#X msg 110 911 reverse; -#X text 245 911 reverses list.; -#X msg 110 938 set; -#X text 245 938 sets new list without output. Arguments are:; -#X obj 255 961 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 961 LIST: new list content. Type: list.; -#X msg 110 986 shuffle; -#X text 245 986 put elements in random order.; -#X msg 110 1013 sort; -#X text 245 1013 sorts list.; -#X msg 110 1040 dump; -#X text 245 1040 dump object info to Pd window.; -#X obj 20 1077 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1082 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 906 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 906 IDX: insert position. Type: int.; +#X obj 255 929 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 929 VAL: value. Type: atom.; +#X msg 110 954 pop; +#X text 245 954 removes last list element.; +#X msg 110 981 prepend; +#X text 245 981 inserts values to the list beginning. Arguments are:; +#X obj 255 1004 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1004 VAL: prepended value. Type: atom.; +#X msg 110 1029 remove; +#X text 245 1029 removes specified element. Arguments are:; +#X obj 255 1052 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1052 IDX: element index. Type: int.; +#X msg 110 1077 reverse; +#X text 245 1077 reverses list.; +#X msg 110 1104 set; +#X text 245 1104 sets new list without output. Arguments are:; +#X obj 255 1127 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1127 LIST: new list content. Type: list.; +#X msg 110 1152 shuffle; +#X text 245 1152 put elements in random order.; +#X msg 110 1179 sort; +#X text 245 1179 sorts list.; +#X msg 110 1206 dump; +#X text 245 1206 dump object info to Pd window.; +#X obj 20 1243 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1248 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1083 1\.; -#X text 150 1083 *bang*; -#X text 245 1083 output list content.; -#X text 150 1103 *float*; -#X text 245 1103 outputs list element at specified position. Negative +#X text 110 1249 1\.; +#X text 150 1249 *bang*; +#X text 245 1249 output list content.; +#X text 150 1269 *float*; +#X text 245 1269 outputs list element at specified position. Negative indexes are supported.; -#X text 150 1138 *symbol*; -#X text 245 1138 set new list with single symbol element and output.; -#X text 150 1158 *list*; -#X text 245 1158 set new list content and output.; -#X text 150 1178 *data:mlist*; -#X text 245 1178 same as list.; -#X obj 20 1208 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1213 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 1304 *symbol*; +#X text 245 1304 set new list with single symbol element and output.; +#X text 150 1324 *list*; +#X text 245 1324 set new list content and output.; +#X text 150 1344 *data:mlist*; +#X text 245 1344 same as list.; +#X obj 20 1374 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1379 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1214 1\.; -#X text 245 1214 list output.; +#X text 110 1380 1\.; +#X text 245 1380 list output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; -#X obj 1 1264 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1267 library: ceammc v0.9.4; -#X text 508 1279 see also:; -#X obj 582 1279 local.float; -#X obj 676 1279 local.int; -#N canvas 10 1286 400 290 info 0; +#X obj 1 1430 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1433 library: ceammc v0.9.6; +#X text 508 1445 see also:; +#X obj 582 1445 local.float; +#X obj 676 1445 local.int; +#N canvas 10 1452 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.list; #X text 10 76 category:; @@ -132,7 +147,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1286 pd info; +#X restore 10 1452 pd info; #X connect 6 0 10 0; #X connect 8 0 10 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/local.list.pddoc b/ceammc/ext/doc/local.list.pddoc index 32878d8b6d..2c2e4fa5dd 100644 --- a/ceammc/ext/doc/local.list.pddoc +++ b/ceammc/ext/doc/local.list.pddoc @@ -23,18 +23,25 @@ object ID + initial values - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list + current value adds values to the end of the list appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/local.mlist-help.pd b/ceammc/ext/doc/local.mlist-help.pd index d3b0399242..1f70ec5246 100644 --- a/ceammc/ext/doc/local.mlist-help.pd +++ b/ceammc/ext/doc/local.mlist-help.pd @@ -16,102 +16,116 @@ name and available only within its patch (canvas).; #X obj 318 216 ui.display @display_type 1; #X obj 50 245 ui.display @display_type 1; #X obj 20 294 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 299 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 20 299 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 334 1\.; -#X text 150 334 symbol; -#X obj 246 335 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 ID: object ID. Type: symbol.; +#X text 110 334 Left-click; +#X text 285 334 open data editor.; #X obj 20 364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 369 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 369 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 404 @empty; -#X text 245 404 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 446 @size; -#X text 245 446 (readonly) Get number of elements in list. Type: int. +#X text 110 404 1\.; +#X text 150 404 symbol; +#X obj 246 405 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 404 ID: object ID. Type: symbol.; +#X obj 20 434 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 439 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 474 @empty; +#X text 245 474 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 516 @size; +#X text 245 516 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 498 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 503 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 568 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 573 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 538 append; -#X text 245 538 adds values to the end of the list. Arguments are:; -#X obj 255 561 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 561 VAL: appended value. Type: atom.; -#X msg 110 586 choose; -#X text 245 586 choose random element in list and output it.; -#X msg 110 613 clear; -#X text 245 613 removes all list elements.; -#X msg 110 640 fill; -#X text 245 640 fills with specified value. Arguments are:; -#X obj 255 663 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 663 VAL: fill value. Type: atom.; -#X msg 110 688 insert; -#X text 245 688 inserts values to the specified position. Arguments +#X msg 110 608 append; +#X text 245 608 adds values to the end of the list. Arguments are:; +#X obj 255 631 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 631 VAL: appended value. Type: atom.; +#X msg 110 656 at; +#X text 245 656 outputs atom at the specified position. Arguments are:; +#X obj 255 679 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 679 IDX: position (negative indexes are supported: -1 means +last element). Type: int.; +#X msg 110 719 back; +#X text 245 719 output last list element.; +#X msg 110 746 choose; +#X text 245 746 choose random element in list and output it.; +#X msg 110 773 clear; +#X text 245 773 removes all list elements.; +#X msg 110 800 fill; +#X text 245 800 fills with specified value. Arguments are:; +#X obj 255 823 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 823 VAL: fill value. Type: atom.; +#X msg 110 848 front; +#X text 245 848 output first list element.; +#X msg 110 875 insert; +#X text 245 875 inserts values to the specified position. Arguments are:; -#X obj 255 711 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 711 IDX: insert position. Type: int.; -#X obj 255 734 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 734 VAL: value. Type: atom.; -#X msg 110 759 pop; -#X text 245 759 removes last list element.; -#X msg 110 786 prepend; -#X text 245 786 inserts values to the list beginning. Arguments are:; -#X obj 255 809 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 809 VAL: prepended value. Type: atom.; -#X msg 110 834 remove; -#X text 245 834 removes specified element. Arguments are:; -#X obj 255 857 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 857 IDX: element index. Type: int.; -#X msg 110 882 reverse; -#X text 245 882 reverses list.; -#X msg 110 909 set; -#X text 245 909 sets new list without output. Arguments are:; -#X obj 255 932 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 932 LIST: new list content. Type: list.; -#X msg 110 957 shuffle; -#X text 245 957 put elements in random order.; -#X msg 110 984 sort; -#X text 245 984 sorts list.; -#X msg 110 1011 (....); -#X text 245 1011 sets new list without output.; -#X msg 110 1038 dump; -#X text 245 1038 dump object info to Pd window.; -#X obj 20 1075 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1080 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 898 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 898 IDX: insert position. Type: int.; +#X obj 255 921 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 921 VAL: value. Type: atom.; +#X msg 110 946 pop; +#X text 245 946 removes last list element.; +#X msg 110 973 prepend; +#X text 245 973 inserts values to the list beginning. Arguments are:; +#X obj 255 996 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 996 VAL: prepended value. Type: atom.; +#X msg 110 1021 remove; +#X text 245 1021 removes specified element. Arguments are:; +#X obj 255 1044 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1044 IDX: element index. Type: int.; +#X msg 110 1069 reverse; +#X text 245 1069 reverses list.; +#X msg 110 1096 set; +#X text 245 1096 sets new list without output. Arguments are:; +#X obj 255 1119 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1119 LIST: new list content. Type: list.; +#X msg 110 1144 shuffle; +#X text 245 1144 put elements in random order.; +#X msg 110 1171 sort; +#X text 245 1171 sorts list.; +#X msg 110 1198 (....); +#X text 245 1198 sets new list without output.; +#X msg 110 1225 dump; +#X text 245 1225 dump object info to Pd window.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1081 1\.; -#X text 150 1081 *bang*; -#X text 245 1081 output list content.; -#X text 150 1101 *data:mlist*; -#X text 245 1101 same as list.; -#X text 150 1121 *float*; -#X text 245 1121 set new mlist content and output.; -#X text 150 1141 *symbol*; -#X text 245 1141 set new mlist content and output.; -#X text 150 1161 *list*; -#X text 245 1161 set new mlist content and output.; -#X obj 20 1191 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1196 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1268 1\.; +#X text 150 1268 *bang*; +#X text 245 1268 output list content.; +#X text 150 1288 *data:mlist*; +#X text 245 1288 same as list.; +#X text 150 1308 *float*; +#X text 245 1308 set new mlist content and output.; +#X text 150 1328 *symbol*; +#X text 245 1328 set new mlist content and output.; +#X text 150 1348 *list*; +#X text 245 1348 set new mlist content and output.; +#X obj 20 1378 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1383 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1197 1\.; -#X text 245 1197 mlist output.; +#X text 110 1384 1\.; +#X text 245 1384 mlist output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; -#X obj 1 1247 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1250 library: ceammc v0.9.4; -#X text 507 1262 see also:; -#X obj 581 1262 data.mlist; -#X obj 668 1262 local.list; -#N canvas 10 1269 400 290 info 0; +#X obj 1 1434 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1437 library: ceammc v0.9.6; +#X text 507 1449 see also:; +#X obj 581 1449 data.mlist; +#X obj 668 1449 local.list; +#N canvas 10 1456 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.mlist; #X text 10 76 category:; @@ -130,7 +144,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1269 pd info; +#X restore 10 1456 pd info; #X connect 6 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/local.mlist.pddoc b/ceammc/ext/doc/local.mlist.pddoc index 009332869c..971342f202 100644 --- a/ceammc/ext/doc/local.mlist.pddoc +++ b/ceammc/ext/doc/local.mlist.pddoc @@ -21,13 +21,16 @@ Defines local scope mlist variable, accessed by ID name and available only within its patch (canvas). + + open data editor + object ID - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list @@ -35,6 +38,11 @@ appended value inserts values to the list beginning prepended value + output first list element + output last list element + outputs atom at the specified position + position (negative indexes are supported: + -1 means last element) inserts values to the specified position insert position value diff --git a/ceammc/ext/doc/local.set-help.pd b/ceammc/ext/doc/local.set-help.pd index 114334c5f5..256870a7c6 100644 --- a/ceammc/ext/doc/local.set-help.pd +++ b/ceammc/ext/doc/local.set-help.pd @@ -18,73 +18,80 @@ #X obj 50 230 ui.display @display_type 1; #X obj 328 230 ui.display @display_type 1; #X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 284 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 20 284 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 319 1\.; -#X text 150 319 symbol; -#X obj 246 320 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 ID: object ID. Type: symbol.; +#X text 110 319 Left-click; +#X text 285 319 open data editor.; #X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 354 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 354 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 389 @empty; -#X text 245 389 (readonly) Get 1 if list is empty \, otherwise 0\. -Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 431 @size; -#X text 245 431 (readonly) Get number of elements in list. Type: int. +#X text 110 389 1\.; +#X text 150 389 symbol; +#X obj 246 390 cnv 1 23 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 389 ID: object ID. Type: symbol.; +#X obj 20 419 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 424 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 459 @empty; +#X text 245 459 (readonly) Get 1 if list is empty \, otherwise 0\. +Type: bool. Default value: 1\.; +#X msg 110 501 @size; +#X text 245 501 (readonly) Get number of elements in list. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 488 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 553 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 558 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 523 add; -#X text 245 523 add values to the set. Arguments are:; -#X obj 255 546 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 546 VAL: added values. Type: list.; -#X msg 110 571 clear; -#X text 245 571 removes all set elements.; -#X msg 110 598 remove; -#X text 245 598 remove elements from the set. Arguments are:; -#X obj 255 621 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 621 VAL: elements. Type: list.; -#X msg 110 646 set; -#X text 245 646 sets new set content without output. Arguments are:; -#X obj 255 669 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 669 LIST: new set content. Type: list.; -#X obj 20 704 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 709 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 593 add; +#X text 245 593 add values to the set. Arguments are:; +#X obj 255 616 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 616 VAL: added values. Type: list.; +#X msg 110 641 choose; +#X text 245 641 choose random element and output it.; +#X msg 110 668 clear; +#X text 245 668 removes all set elements.; +#X msg 110 695 remove; +#X text 245 695 remove elements from the set. Arguments are:; +#X obj 255 718 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 718 VAL: elements. Type: list.; +#X msg 110 743 set; +#X text 245 743 sets new set content without output. Arguments are:; +#X obj 255 766 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 766 LIST: new set content. Type: list.; +#X obj 20 801 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 806 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 710 1\.; -#X text 150 710 *bang*; -#X text 245 710 output set content.; -#X text 150 730 *float*; -#X text 245 730 adds new element to set \, no output.; -#X text 150 750 *symbol*; -#X text 245 750 adds new element to set \, no output.; -#X text 150 770 *list*; -#X text 245 770 adds new elements to set \, no output.; -#X text 150 790 *data:set*; -#X text 245 790 set new set content and output.; -#X obj 20 820 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 825 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 807 1\.; +#X text 150 807 *bang*; +#X text 245 807 output set content.; +#X text 150 827 *float*; +#X text 245 827 adds new element to set \, no output.; +#X text 150 847 *symbol*; +#X text 245 847 adds new element to set \, no output.; +#X text 150 867 *list*; +#X text 245 867 adds new elements to set \, no output.; +#X text 150 887 *data:set*; +#X text 245 887 set new set content and output.; +#X obj 20 917 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 922 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 826 1\.; -#X text 245 826 set output.; +#X text 110 923 1\.; +#X text 245 923 set output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title local @url ceammc.local-help.pd; -#X obj 1 876 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 879 library: ceammc v0.9.4; -#X text 521 891 see also:; -#X obj 595 891 data.set; -#X obj 668 891 global.set; -#N canvas 10 898 400 290 info 0; +#X obj 1 973 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 976 library: ceammc v0.9.6; +#X text 521 988 see also:; +#X obj 595 988 data.set; +#X obj 668 988 global.set; +#N canvas 10 995 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 local.set; #X text 10 76 category:; @@ -103,7 +110,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 898 pd info; +#X restore 10 995 pd info; #X connect 6 0 11 0; #X connect 7 0 11 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/local.set.pddoc b/ceammc/ext/doc/local.set.pddoc index bffcecb24f..b4bdc91945 100644 --- a/ceammc/ext/doc/local.set.pddoc +++ b/ceammc/ext/doc/local.set.pddoc @@ -20,13 +20,16 @@ Defines local scope set variable, accessed by ID name + + open data editor + object ID - 1 if list is - empty, otherwise 0 - number of + 1 if list is empty, + otherwise 0 + number of elements in list @@ -37,6 +40,7 @@ elements sets new set content without output new set content + choose random element and output it diff --git a/ceammc/ext/doc/logger-help.pd b/ceammc/ext/doc/logger-help.pd index e1f7cb7c6c..2eb17f42ae 100644 --- a/ceammc/ext/doc/logger-help.pd +++ b/ceammc/ext/doc/logger-help.pd @@ -32,8 +32,8 @@ #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 364 @active; -#X text 245 364 Get/Set enabled/disabled logging state. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; +#X text 245 364 Get/Set enabled/disabled logging state. Type: bool. +Default value: 1\.; #X msg 110 406 @prefix; #X text 245 406 Get/Set log message prefix. Type: list.; #X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -53,13 +53,13 @@ Default value: 1\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 550 library: ceammc v0.9.4; +#X text 10 550 library: ceammc v0.9.6; #N canvas 10 569 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 logger; #X text 10 76 category:; diff --git a/ceammc/ext/doc/logger.pddoc b/ceammc/ext/doc/logger.pddoc index ceeaa9c5a2..4a8032af62 100644 --- a/ceammc/ext/doc/logger.pddoc +++ b/ceammc/ext/doc/logger.pddoc @@ -26,8 +26,8 @@ log message prefix - log message prefix - enabled/disabled logging + log message prefix + enabled/disabled logging state diff --git a/ceammc/ext/doc/ls_missing_doc.py b/ceammc/ext/doc/ls_missing_doc.py index 8902a2e802..1f04ce7adc 100755 --- a/ceammc/ext/doc/ls_missing_doc.py +++ b/ceammc/ext/doc/ls_missing_doc.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import re import logging @@ -57,7 +57,7 @@ def not_in_project(): if len(files) > 0: logging.warning("this pddoc files are not in cmake project (no PD-help will be generated for them):") for f in files: - print " {0}".format(f) + print(" {0}".format(f)) def non_documented(): files = allExternalsWithAliases() - allDocFilesWithAliases() - ignored @@ -65,7 +65,7 @@ def non_documented(): if len(files) > 0: logging.warning("this objects are not documented:") for f in sorted(files): - print " {0}".format(f) + print(" {0}".format(f)) logging.warning("undocumented objects: %s", len(files)) diff --git a/ceammc/ext/doc/lua/CMakeLists.txt b/ceammc/ext/doc/lua/CMakeLists.txt new file mode 100644 index 0000000000..ed38f328d3 --- /dev/null +++ b/ceammc/ext/doc/lua/CMakeLists.txt @@ -0,0 +1,10 @@ +file(GLOB _PDDOC_LUA "*.lua") + +add_custom_target(pddoc_lua_files SOURCES + ${_PDDOC_LUA}) + +# install extra files +install(FILES + ${_PDDOC_LUA} + DESTINATION ${DOC_INSTALL_PATH}/lua + PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) diff --git a/ceammc/ext/doc/lua/basic.lua b/ceammc/ext/doc/lua/basic.lua new file mode 100644 index 0000000000..de605b4cce --- /dev/null +++ b/ceammc/ext/doc/lua/basic.lua @@ -0,0 +1,29 @@ +-- called on bang +function on_bang(idx) + pd_post("Bang at [" .. idx .."]") + float_to(1, idx) + bang_to(0) +end +-- called on float +function on_float(idx, f) + pd_post("Float at [" .. idx .. "] " .. f) + float_to(1, idx) + float_to(0, f) +end +-- called on symbol +function on_symbol(idx, s) + pd_post("Symbol at [" .. idx .. "] " .. s) + float_to(1, idx) + symbol_to(0, s) +end +-- called on list +function on_list(idx, l) + pd_post("List at [" .. idx .. "] " .. str(l)) + float_to(1, idx) + list_to(0, l) +end +-- function fn +function fn(arg) + pd_post("Called fn with arg: " .. str(arg)) + any_to(0, "fn", arg) +end diff --git a/ceammc/ext/doc/math.abs-help.pd b/ceammc/ext/doc/math.abs-help.pd index 481148102d..7746779681 100644 --- a/ceammc/ext/doc/math.abs-help.pd +++ b/ceammc/ext/doc/math.abs-help.pd @@ -11,28 +11,27 @@ float input.; #X floatatom 50 158 5 0 0 0 - - -; #X msg 117 158 1 2 -5 7 d b; #X obj 50 187 math.abs; -#X obj 50 216 msg set; -#X msg 50 245 ; -#X obj 20 294 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 299 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 216 ui.dt; +#X obj 20 265 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 270 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 300 1\.; -#X text 150 300 *float*; -#X text 245 300 input value.; -#X text 150 320 *list*; -#X text 245 320 apply to all numeric values.; -#X obj 20 350 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 355 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 271 1\.; +#X text 150 271 *float*; +#X text 245 271 input value.; +#X text 150 291 *list*; +#X text 245 291 apply to all numeric values.; +#X obj 20 321 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 326 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 356 1\.; -#X text 245 356 result value.; +#X text 110 327 1\.; +#X text 245 327 result value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 593 520 see also:; #X obj 667 520 math.floor; #N canvas 10 527 400 290 info 0; @@ -40,7 +39,7 @@ float input.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.abs; #X text 10 76 category:; @@ -62,5 +61,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 6 0 8 0; #X connect 7 0 8 0; -#X connect 8 0 9 0; -#X connect 9 0 10 0; \ No newline at end of file +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.abs.pddoc b/ceammc/ext/doc/math.abs.pddoc index 4da8481c71..ffca6e3e86 100644 --- a/ceammc/ext/doc/math.abs.pddoc +++ b/ceammc/ext/doc/math.abs.pddoc @@ -35,9 +35,7 @@ | | [math.abs] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.abs~-help.pd b/ceammc/ext/doc/math.abs~-help.pd index a56ef37c19..b497c77e91 100644 --- a/ceammc/ext/doc/math.abs~-help.pd +++ b/ceammc/ext/doc/math.abs~-help.pd @@ -35,7 +35,7 @@ float input.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 608 520 see also:; #X obj 682 520 math.abs; #N canvas 10 527 400 290 info 0; @@ -43,7 +43,7 @@ float input.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.abs~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.acos-help.pd b/ceammc/ext/doc/math.acos-help.pd index 7633ef5694..c5190079fa 100644 --- a/ceammc/ext/doc/math.acos-help.pd +++ b/ceammc/ext/doc/math.acos-help.pd @@ -14,28 +14,27 @@ the arc cosine of input value. The result is in the range [0 \, pi].; #X floatatom 50 233 5 0 0 0 - - -; #X msg 117 233 1 2 d b; #X obj 50 262 math.acos; -#X obj 50 291 msg set; -#X msg 50 320 ; -#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 374 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 375 1\.; -#X text 150 375 *float*; -#X text 245 375 input value.; -#X text 150 395 *list*; -#X text 245 395 apply to all numeric values.; -#X obj 20 425 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 430 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 346 1\.; +#X text 150 346 *float*; +#X text 245 346 input value.; +#X text 150 366 *list*; +#X text 245 366 apply to all numeric values.; +#X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 401 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 431 1\.; -#X text 245 431 result value.; +#X text 110 402 1\.; +#X text 245 402 result value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 382 520 see also:; #X obj 456 520 math.sin; #X obj 529 520 math.cos; @@ -46,7 +45,7 @@ the arc cosine of input value. The result is in the range [0 \, pi].; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.acos; #X text 10 76 category:; @@ -68,5 +67,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 9 0 11 0; #X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; \ No newline at end of file +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.acos.pddoc b/ceammc/ext/doc/math.acos.pddoc index 46396085f4..f73e63b3dc 100644 --- a/ceammc/ext/doc/math.acos.pddoc +++ b/ceammc/ext/doc/math.acos.pddoc @@ -42,9 +42,7 @@ | | [math.acos] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.acosh-help.pd b/ceammc/ext/doc/math.acosh-help.pd index 07f34d092f..168c9de45b 100644 --- a/ceammc/ext/doc/math.acosh-help.pd +++ b/ceammc/ext/doc/math.acosh-help.pd @@ -16,38 +16,37 @@ range [0 \, +infinity].; #X floatatom 50 273 5 0 0 0 - - -; #X msg 117 273 1 2 d b; #X obj 50 302 math.acosh; -#X obj 50 331 msg set; -#X msg 50 360 ; -#X obj 20 409 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 414 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 331 ui.dt; +#X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 385 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 415 1\.; -#X text 150 415 *float*; -#X text 245 415 input value.; -#X text 150 435 *list*; -#X text 245 435 apply to all numeric values.; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 386 1\.; +#X text 150 386 *float*; +#X text 245 386 input value.; +#X text 150 406 *list*; +#X text 245 406 apply to all numeric values.; +#X obj 20 436 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 441 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 471 1\.; -#X text 245 471 result value.; +#X text 110 442 1\.; +#X text 245 442 result value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 521 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 524 library: ceammc v0.9.4; -#X text 432 536 see also:; -#X obj 506 536 math.asinh; -#X obj 594 536 math.atanh; -#X obj 682 536 math.exp; -#N canvas 10 543 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#X text 432 520 see also:; +#X obj 506 520 math.asinh; +#X obj 594 520 math.atanh; +#X obj 682 520 math.exp; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.acosh; #X text 10 76 category:; @@ -66,8 +65,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 543 pd info; +#X restore 10 527 pd info; #X connect 10 0 12 0; #X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 13 0 14 0; \ No newline at end of file +#X connect 12 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.acosh.pddoc b/ceammc/ext/doc/math.acosh.pddoc index 0eacfcbe3c..89f4a209f6 100644 --- a/ceammc/ext/doc/math.acosh.pddoc +++ b/ceammc/ext/doc/math.acosh.pddoc @@ -42,9 +42,7 @@ | | [math.acosh] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.acosh~-help.pd b/ceammc/ext/doc/math.acosh~-help.pd index 807e31d9e1..091fc4675b 100644 --- a/ceammc/ext/doc/math.acosh~-help.pd +++ b/ceammc/ext/doc/math.acosh~-help.pd @@ -35,7 +35,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 640 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 643 library: ceammc v0.9.4; +#X text 10 643 library: ceammc v0.9.6; #X text 504 655 see also:; #X obj 578 655 math.cosh~; #X obj 667 655 math.acosh; @@ -44,7 +44,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.acosh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.acos~-help.pd b/ceammc/ext/doc/math.acos~-help.pd index 640b8d632a..6d5e2ef67a 100644 --- a/ceammc/ext/doc/math.acos~-help.pd +++ b/ceammc/ext/doc/math.acos~-help.pd @@ -30,7 +30,7 @@ signal. The result is in the range [0 \, pi]; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 605 library: ceammc v0.9.4; +#X text 10 605 library: ceammc v0.9.6; #X text 601 617 see also:; #X obj 675 617 math.acos; #N canvas 10 624 400 290 info 0; @@ -38,7 +38,7 @@ signal. The result is in the range [0 \, pi]; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.acos~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.and-help.pd b/ceammc/ext/doc/math.and-help.pd index 2fd419c908..bbf7d41fae 100644 --- a/ceammc/ext/doc/math.and-help.pd +++ b/ceammc/ext/doc/math.and-help.pd @@ -26,54 +26,56 @@ -49933 0; #X text 110 378 1\.; #X text 150 378 int; -#X obj 246 379 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 378 NUM: number of arguments. Type: int. Range: 3\...16; +#X obj 246 379 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 378 N: number of arguments. Type: int. Range: 3\...16; #X obj 20 408 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 413 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 448 @state; -#X text 245 448 (readonly) Get internal logic state as list of 1 and -0\. Type: list. Default value: 0 0 0\.; -#X msg 110 490 @sync; -#X text 245 490 Get/Set if specified - all inlets are 'hot'. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 547 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 448 @n; +#X text 245 448 (initonly) Get/Set number of arguments. Type: int. +Default value: 3\. Range: 3\...16\.; +#X msg 110 490 @state; +#X text 245 490 (readonly) Get internal logic state as list of 1 and +0\. Type: list.; +#X msg 110 532 @sync; +#X text 245 532 if specified - all inlets are 'hot'.; +#X obj 20 571 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 576 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 582 reset; -#X text 245 582 resets all input states to false.; -#X obj 20 619 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 624 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 611 reset; +#X text 245 611 resets all input states to false.; +#X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 653 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 625 1\.; -#X text 150 625 *float*; -#X text 245 625 1 or 0\.; -#X text 110 645 ....; -#X text 150 645 *float*; -#X text 245 645 1 or 0\.; -#X text 110 665 n.; -#X text 150 665 *float*; -#X text 245 665 1 or 0\.; -#X obj 20 695 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 700 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 654 1\.; +#X text 150 654 *float*; +#X text 245 654 1 or 0\.; +#X text 110 674 ....; +#X text 150 674 *float*; +#X text 245 674 1 or 0\.; +#X text 110 694 n.; +#X text 150 694 *float*; +#X text 245 694 1 or 0\.; +#X obj 20 724 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 729 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 701 1\.; -#X text 245 701 1 - if all input values are true (1) \, 0 - otherwise.; +#X text 110 730 1\.; +#X text 245 730 1 - if all input values are true (1) \, 0 - otherwise.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.9.4; -#X text 615 766 see also:; -#X obj 689 766 math.or; -#N canvas 10 773 400 290 info 0; +#X obj 1 780 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 783 library: ceammc v0.9.6; +#X text 615 795 see also:; +#X obj 689 795 math.or; +#N canvas 10 802 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.and; #X text 10 76 category:; @@ -92,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 773 pd info; +#X restore 10 802 pd info; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/math.and.pddoc b/ceammc/ext/doc/math.and.pddoc index 2c531f19ec..9ed0154ff0 100644 --- a/ceammc/ext/doc/math.and.pddoc +++ b/ceammc/ext/doc/math.and.pddoc @@ -21,17 +21,18 @@ 0.2 - number of - arguments + number of arguments resets all input states to false - if specified - all inlets are + number of arguments + if specified - all inlets are 'hot' - internal logic - state as list of 1 and 0 + internal logic state + as list of 1 and 0 diff --git a/ceammc/ext/doc/math.approx-help.pd b/ceammc/ext/doc/math.approx-help.pd index d012f32f72..0df665d3e7 100644 --- a/ceammc/ext/doc/math.approx-help.pd +++ b/ceammc/ext/doc/math.approx-help.pd @@ -8,7 +8,7 @@ #X obj 591 11 approx; #X obj 660 11 math.approx; #X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 checks is |x - pattern| <= |epsilon|; +#X text 215 80 checks if |x - pattern| <= |epsilon|; #X obj 50 143 hslider 128 15 0.0 127.0 0 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 0; #X msg 88 172 1.99 2 0.01; @@ -21,12 +21,12 @@ -49933 0; #X text 110 348 1\.; #X text 150 348 float; -#X obj 246 349 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 348 P: compare pattern. Type: float.; +#X obj 246 349 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 348 VALUE: compare pattern. Type: float.; #X text 110 368 2\.; #X text 150 368 float; -#X obj 246 369 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 368 E: compare epsilon. Type: float.; +#X obj 246 369 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 368 EPSILON: compare epsilon. Type: float.; #X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 403 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -62,13 +62,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 673 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 676 library: ceammc v0.9.4; +#X text 10 676 library: ceammc v0.9.6; #N canvas 10 695 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.approx; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.approx.pddoc b/ceammc/ext/doc/math.approx.pddoc index 8275d5d6b3..57dd01c6ca 100644 --- a/ceammc/ext/doc/math.approx.pddoc +++ b/ceammc/ext/doc/math.approx.pddoc @@ -18,16 +18,16 @@ - checks is |x - pattern| <= |epsilon| + checks if |x - pattern| <= |epsilon| + + compare pattern + compare epsilon + compare pattern compare epsilon - - compare pattern - compare epsilon - input value diff --git a/ceammc/ext/doc/math.asin-help.pd b/ceammc/ext/doc/math.asin-help.pd index e823efefb5..f4cd021fee 100644 --- a/ceammc/ext/doc/math.asin-help.pd +++ b/ceammc/ext/doc/math.asin-help.pd @@ -34,7 +34,7 @@ exception for |x| > 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 448 520 see also:; #X obj 522 520 math.acos; #X obj 602 520 math.atan; @@ -44,7 +44,7 @@ exception for |x| > 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.asin; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.asinh-help.pd b/ceammc/ext/doc/math.asinh-help.pd index e61f6d08a3..3e42f8207e 100644 --- a/ceammc/ext/doc/math.asinh-help.pd +++ b/ceammc/ext/doc/math.asinh-help.pd @@ -33,7 +33,7 @@ sine of the real argument; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 432 520 see also:; #X obj 506 520 math.acosh; #X obj 594 520 math.atanh; @@ -43,7 +43,7 @@ sine of the real argument; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.asinh; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.asinh~-help.pd b/ceammc/ext/doc/math.asinh~-help.pd index 994043ece3..7bb89017e0 100644 --- a/ceammc/ext/doc/math.asinh~-help.pd +++ b/ceammc/ext/doc/math.asinh~-help.pd @@ -34,7 +34,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 625 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 628 library: ceammc v0.9.4; +#X text 10 628 library: ceammc v0.9.6; #X text 504 640 see also:; #X obj 578 640 math.sinh~; #X obj 667 640 math.asinh; @@ -43,7 +43,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.asinh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.asin~-help.pd b/ceammc/ext/doc/math.asin~-help.pd index 24af79a335..a805adbf50 100644 --- a/ceammc/ext/doc/math.asin~-help.pd +++ b/ceammc/ext/doc/math.asin~-help.pd @@ -31,7 +31,7 @@ signal. The result is in the range [-pi/2 \, +pi/2]; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 605 library: ceammc v0.9.4; +#X text 10 605 library: ceammc v0.9.6; #X text 512 617 see also:; #X obj 586 617 math.asin; #X obj 666 617 math.acos~; @@ -40,7 +40,7 @@ signal. The result is in the range [-pi/2 \, +pi/2]; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.asin~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.atan-help.pd b/ceammc/ext/doc/math.atan-help.pd index 32f8f68ddd..4675aef0ad 100644 --- a/ceammc/ext/doc/math.atan-help.pd +++ b/ceammc/ext/doc/math.atan-help.pd @@ -41,7 +41,7 @@ value. The result is in the range [-π/2 \, +π/2].; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 517 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 520 library: ceammc v0.9.4; +#X text 10 520 library: ceammc v0.9.6; #X text 448 532 see also:; #X obj 522 532 math.acos; #X obj 602 532 math.asin; @@ -51,7 +51,7 @@ value. The result is in the range [-π/2 \, +π/2].; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.atan; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.atanh-help.pd b/ceammc/ext/doc/math.atanh-help.pd index 44f3dabc58..33a4a411ef 100644 --- a/ceammc/ext/doc/math.atanh-help.pd +++ b/ceammc/ext/doc/math.atanh-help.pd @@ -36,7 +36,7 @@ exception for |x| > 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 507 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 510 library: ceammc v0.9.4; +#X text 10 510 library: ceammc v0.9.6; #X text 432 522 see also:; #X obj 506 522 math.acosh; #X obj 594 522 math.asinh; @@ -46,7 +46,7 @@ exception for |x| > 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.atanh; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.atanh~-help.pd b/ceammc/ext/doc/math.atanh~-help.pd index 59e8090fd1..8462718ead 100644 --- a/ceammc/ext/doc/math.atanh~-help.pd +++ b/ceammc/ext/doc/math.atanh~-help.pd @@ -34,7 +34,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 625 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 628 library: ceammc v0.9.4; +#X text 10 628 library: ceammc v0.9.6; #X text 504 640 see also:; #X obj 578 640 math.sinh~; #X obj 667 640 math.asinh; @@ -43,7 +43,7 @@ https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.atanh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.atan~-help.pd b/ceammc/ext/doc/math.atan~-help.pd index 2b1401f1e4..4e4e5e83d5 100644 --- a/ceammc/ext/doc/math.atan~-help.pd +++ b/ceammc/ext/doc/math.atan~-help.pd @@ -31,7 +31,7 @@ the range [-π/2 \, +π/2]; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 605 library: ceammc v0.9.4; +#X text 10 605 library: ceammc v0.9.6; #X text 512 617 see also:; #X obj 586 617 math.atan; #X obj 666 617 math.acos~; @@ -40,7 +40,7 @@ the range [-π/2 \, +π/2]; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.atan~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.binomial-help.pd b/ceammc/ext/doc/math.binomial-help.pd index 59400f82f7..dade2f0037 100644 --- a/ceammc/ext/doc/math.binomial-help.pd +++ b/ceammc/ext/doc/math.binomial-help.pd @@ -43,13 +43,13 @@ as list.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 606 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 609 library: ceammc v0.9.4; +#X text 10 609 library: ceammc v0.9.6; #N canvas 10 628 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.binomial; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cabs~-help.pd b/ceammc/ext/doc/math.cabs~-help.pd index b3fef11312..5544dcc373 100644 --- a/ceammc/ext/doc/math.cabs~-help.pd +++ b/ceammc/ext/doc/math.cabs~-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 592 520 see also:; #X obj 666 520 math.carg~; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cabs~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.carg~-help.pd b/ceammc/ext/doc/math.carg~-help.pd index 64ae3f94f3..16e9902adf 100644 --- a/ceammc/ext/doc/math.carg~-help.pd +++ b/ceammc/ext/doc/math.carg~-help.pd @@ -34,7 +34,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 506 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 509 library: ceammc v0.9.4; +#X text 10 509 library: ceammc v0.9.6; #X text 592 521 see also:; #X obj 666 521 math.cabs~; #N canvas 10 528 400 290 info 0; @@ -42,7 +42,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.carg~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cbrt-help.pd b/ceammc/ext/doc/math.cbrt-help.pd index 9fae443077..739f933377 100644 --- a/ceammc/ext/doc/math.cbrt-help.pd +++ b/ceammc/ext/doc/math.cbrt-help.pd @@ -33,7 +33,7 @@ value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 math.sqrt; #N canvas 10 527 400 290 info 0; @@ -41,7 +41,7 @@ value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cbrt; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cbrt~-help.pd b/ceammc/ext/doc/math.cbrt~-help.pd index 027fd5c83d..2892572827 100644 --- a/ceammc/ext/doc/math.cbrt~-help.pd +++ b/ceammc/ext/doc/math.cbrt~-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 662 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 665 library: ceammc v0.9.4; +#X text 10 665 library: ceammc v0.9.6; #X text 601 677 see also:; #X obj 675 677 math.cbrt; #N canvas 10 684 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cbrt~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cdiv~-help.pd b/ceammc/ext/doc/math.cdiv~-help.pd index 6e0782da29..787092d900 100644 --- a/ceammc/ext/doc/math.cdiv~-help.pd +++ b/ceammc/ext/doc/math.cdiv~-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 520 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 523 library: ceammc v0.9.4; +#X text 10 523 library: ceammc v0.9.6; #X text 592 535 see also:; #X obj 666 535 math.cmul~; #N canvas 10 542 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cdiv~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.ceil-help.pd b/ceammc/ext/doc/math.ceil-help.pd index 68c419632a..8fcdcf5aa5 100644 --- a/ceammc/ext/doc/math.ceil-help.pd +++ b/ceammc/ext/doc/math.ceil-help.pd @@ -35,7 +35,7 @@ greater than or equal to input value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 418 520 see also:; #X obj 492 520 math.floor; #X obj 580 520 math.round; @@ -45,7 +45,7 @@ greater than or equal to input value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.ceil; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.ceil~-help.pd b/ceammc/ext/doc/math.ceil~-help.pd index 7d4889734a..da5347c19b 100644 --- a/ceammc/ext/doc/math.ceil~-help.pd +++ b/ceammc/ext/doc/math.ceil~-help.pd @@ -33,7 +33,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 642 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 645 library: ceammc v0.9.4; +#X text 10 645 library: ceammc v0.9.6; #X text 408 657 see also:; #X obj 482 657 math.ceil; #X obj 563 657 math.round~; @@ -43,7 +43,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.ceil~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cexp~-help.pd b/ceammc/ext/doc/math.cexp~-help.pd index 3d407c1aaf..9152f16603 100644 --- a/ceammc/ext/doc/math.cexp~-help.pd +++ b/ceammc/ext/doc/math.cexp~-help.pd @@ -47,7 +47,7 @@ complex plane and has no branch cuts; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 811 library: ceammc v0.9.4; +#X text 10 811 library: ceammc v0.9.6; #X text 592 823 see also:; #X obj 666 823 math.carg~; #N canvas 10 830 400 290 info 0; @@ -55,7 +55,7 @@ complex plane and has no branch cuts; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cexp~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cmul~-help.pd b/ceammc/ext/doc/math.cmul~-help.pd index 68afed1e63..a7cf354f63 100644 --- a/ceammc/ext/doc/math.cmul~-help.pd +++ b/ceammc/ext/doc/math.cmul~-help.pd @@ -46,7 +46,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 592 520 see also:; #X obj 666 520 math.cdiv~; #N canvas 10 527 400 290 info 0; @@ -54,7 +54,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cmul~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cos-help.pd b/ceammc/ext/doc/math.cos-help.pd index 9184eaad72..a53e738ffe 100644 --- a/ceammc/ext/doc/math.cos-help.pd +++ b/ceammc/ext/doc/math.cos-help.pd @@ -34,7 +34,7 @@ floating-point exception.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 375 520 see also:; #X obj 449 520 math.sin; #X obj 522 520 math.tan; @@ -45,7 +45,7 @@ floating-point exception.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cos; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cosh-help.pd b/ceammc/ext/doc/math.cosh-help.pd index 33198ef932..90d1e7a056 100644 --- a/ceammc/ext/doc/math.cosh-help.pd +++ b/ceammc/ext/doc/math.cosh-help.pd @@ -33,7 +33,7 @@ of input value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -43,7 +43,7 @@ of input value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cosh; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cosh~-help.pd b/ceammc/ext/doc/math.cosh~-help.pd index 4167e819c9..295d5746a9 100644 --- a/ceammc/ext/doc/math.cosh~-help.pd +++ b/ceammc/ext/doc/math.cosh~-help.pd @@ -37,7 +37,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 666 library: ceammc v0.9.4; +#X text 10 666 library: ceammc v0.9.6; #X text 505 678 see also:; #X obj 579 678 math.cosh; #X obj 659 678 math.acosh~; @@ -46,7 +46,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cosh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.cos~-help.pd b/ceammc/ext/doc/math.cos~-help.pd index 1c0e2fce16..405192da89 100644 --- a/ceammc/ext/doc/math.cos~-help.pd +++ b/ceammc/ext/doc/math.cos~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 572 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 575 library: ceammc v0.9.4; +#X text 10 575 library: ceammc v0.9.6; #X text 527 587 see also:; #X obj 601 587 math.cos; #X obj 674 587 math.sin~; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.cos~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.div-help.pd b/ceammc/ext/doc/math.div-help.pd index abd68df781..dd7d2923b5 100644 --- a/ceammc/ext/doc/math.div-help.pd +++ b/ceammc/ext/doc/math.div-help.pd @@ -10,49 +10,48 @@ #X floatatom 184 118 5 0 0 0 - - -; #X floatatom 232 118 5 0 0 0 - - -; #X obj 50 162 math.div 2; -#X obj 50 190 msg set; -#X msg 50 219 ; -#X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 273 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 190 ui.dt; +#X obj 20 239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 244 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 308 1\.; -#X text 150 308 float; -#X obj 246 309 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 308 DIV: divisor. Type: float.; -#X obj 20 338 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 343 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 279 1\.; +#X text 150 279 float; +#X obj 246 280 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 279 DIV: divisor. Type: float.; +#X obj 20 309 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 314 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 378 @div; -#X text 245 378 Get/Set divisor. Type: float. Default value: 1\.; -#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 349 @div; +#X text 245 349 Get/Set divisor. Type: float. Default value: 1\.; +#X obj 20 388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 393 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 423 1\.; -#X text 150 423 *float*; -#X text 245 423 divident.; -#X text 150 443 *list*; -#X text 245 443 list of divident (non float values are ignored).; -#X text 110 463 2\.; -#X text 150 463 *float*; -#X text 245 463 change divisor.; -#X obj 20 493 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 498 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 394 1\.; +#X text 150 394 *float*; +#X text 245 394 divident.; +#X text 150 414 *list*; +#X text 245 414 list of divident (non float values are ignored).; +#X text 110 434 2\.; +#X text 150 434 *float*; +#X text 245 434 change divisor.; +#X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 469 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 499 1\.; -#X text 245 499 float or list.; +#X text 110 470 1\.; +#X text 245 470 float or list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 549 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 552 library: ceammc v0.9.4; -#N canvas 10 571 400 290 info 0; +#X obj 1 520 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 523 library: ceammc v0.9.6; +#N canvas 10 542 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.div; #X text 10 76 category:; @@ -71,9 +70,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 571 pd info; +#X restore 10 542 pd info; #X connect 5 0 8 0; #X connect 6 0 8 0; #X connect 7 0 8 1; -#X connect 8 0 9 0; -#X connect 9 0 10 0; \ No newline at end of file +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.div.pddoc b/ceammc/ext/doc/math.div.pddoc index bd0690a9e7..ca1253fce4 100644 --- a/ceammc/ext/doc/math.div.pddoc +++ b/ceammc/ext/doc/math.div.pddoc @@ -42,9 +42,7 @@ | | |. [math.div 2 ] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.e-help.pd b/ceammc/ext/doc/math.e-help.pd index 17e7c2afd2..3cb6d4af9c 100644 --- a/ceammc/ext/doc/math.e-help.pd +++ b/ceammc/ext/doc/math.e-help.pd @@ -28,7 +28,7 @@ of (1 + 1/n)^n as n approaches infinity.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 615 520 see also:; #X obj 689 520 math.pi; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ of (1 + 1/n)^n as n approaches infinity.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.e; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.erf-help.pd b/ceammc/ext/doc/math.erf-help.pd index f1b08e5d3d..574db247db 100644 --- a/ceammc/ext/doc/math.erf-help.pd +++ b/ceammc/ext/doc/math.erf-help.pd @@ -41,7 +41,7 @@ in the range [−x \, x]; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 600 520 see also:; #X obj 674 520 math.erf~; #N canvas 10 527 400 290 info 0; @@ -49,7 +49,7 @@ in the range [−x \, x]; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.erf; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.erf~-help.pd b/ceammc/ext/doc/math.erf~-help.pd index 4f0821b4be..f56ff35bf0 100644 --- a/ceammc/ext/doc/math.erf~-help.pd +++ b/ceammc/ext/doc/math.erf~-help.pd @@ -33,7 +33,7 @@ in the range [−x \, x]; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 614 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 617 library: ceammc v0.9.4; +#X text 10 617 library: ceammc v0.9.6; #X text 608 629 see also:; #X obj 682 629 math.erf; #N canvas 10 636 400 290 info 0; @@ -41,7 +41,7 @@ in the range [−x \, x]; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.erf~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.exp-help.pd b/ceammc/ext/doc/math.exp-help.pd index f739b9e3fa..5db18fede5 100644 --- a/ceammc/ext/doc/math.exp-help.pd +++ b/ceammc/ext/doc/math.exp-help.pd @@ -39,7 +39,7 @@ the magnitude of x is too large.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 572 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 575 library: ceammc v0.9.4; +#X text 10 575 library: ceammc v0.9.6; #X text 528 587 see also:; #X obj 602 587 math.log; #X obj 675 587 math.exp2; @@ -48,7 +48,7 @@ the magnitude of x is too large.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.exp; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.exp2-help.pd b/ceammc/ext/doc/math.exp2-help.pd index 0683401967..06daa8f138 100644 --- a/ceammc/ext/doc/math.exp2-help.pd +++ b/ceammc/ext/doc/math.exp2-help.pd @@ -36,7 +36,7 @@ the magnitude of x is too large.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 517 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 520 library: ceammc v0.9.4; +#X text 10 520 library: ceammc v0.9.6; #X text 535 532 see also:; #X obj 609 532 math.log; #X obj 682 532 math.exp; @@ -45,7 +45,7 @@ the magnitude of x is too large.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.exp2; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.exp2~-help.pd b/ceammc/ext/doc/math.exp2~-help.pd index 5048702120..549db623e3 100644 --- a/ceammc/ext/doc/math.exp2~-help.pd +++ b/ceammc/ext/doc/math.exp2~-help.pd @@ -36,7 +36,7 @@ of x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 702 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 705 library: ceammc v0.9.4; +#X text 10 705 library: ceammc v0.9.6; #X text 592 717 see also:; #X obj 666 717 math.log2~; #N canvas 10 724 400 290 info 0; @@ -44,7 +44,7 @@ of x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.exp2~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.expr-help.pd b/ceammc/ext/doc/math.expr-help.pd index 4bf72dd502..9cb2bc05fa 100644 --- a/ceammc/ext/doc/math.expr-help.pd +++ b/ceammc/ext/doc/math.expr-help.pd @@ -71,13 +71,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 934 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 937 library: ceammc v0.9.4; +#X text 10 937 library: ceammc v0.9.6; #N canvas 10 956 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.expr; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.exp~-help.pd b/ceammc/ext/doc/math.exp~-help.pd index d32db66856..e3ca7ddfe0 100644 --- a/ceammc/ext/doc/math.exp~-help.pd +++ b/ceammc/ext/doc/math.exp~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 565 library: ceammc v0.9.4; +#X text 10 565 library: ceammc v0.9.6; #X text 511 577 see also:; #X obj 585 577 math.log~; #X obj 666 577 math.exp2~; @@ -38,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.exp~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.floor-help.pd b/ceammc/ext/doc/math.floor-help.pd index b0c2787f4b..1a70b791b3 100644 --- a/ceammc/ext/doc/math.floor-help.pd +++ b/ceammc/ext/doc/math.floor-help.pd @@ -14,28 +14,27 @@ less than or equal to x.; #X floatatom 50 233 5 0 0 0 - - -; #X msg 117 233 2.3 3.8 5.5 -2.3 -3.8 -5.5; #X obj 50 262 math.floor; -#X obj 50 291 msg set; -#X msg 50 320 ; -#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 374 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 375 1\.; -#X text 150 375 *float*; -#X text 245 375 input value.; -#X text 150 395 *list*; -#X text 245 395 apply to all numeric values.; -#X obj 20 425 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 430 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 346 1\.; +#X text 150 346 *float*; +#X text 245 346 input value.; +#X text 150 366 *list*; +#X text 245 366 apply to all numeric values.; +#X obj 20 396 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 401 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 431 1\.; -#X text 245 431 result value.; +#X text 110 402 1\.; +#X text 245 402 result value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 425 520 see also:; #X obj 499 520 math.ceil; #X obj 580 520 math.round; @@ -45,7 +44,7 @@ less than or equal to x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.floor; #X text 10 76 category:; @@ -67,5 +66,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 9 0 11 0; #X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; \ No newline at end of file +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.floor.pddoc b/ceammc/ext/doc/math.floor.pddoc index 77a14934f8..50982363b7 100644 --- a/ceammc/ext/doc/math.floor.pddoc +++ b/ceammc/ext/doc/math.floor.pddoc @@ -41,9 +41,7 @@ | | [math.floor] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.floor~-help.pd b/ceammc/ext/doc/math.floor~-help.pd index 9c7d3a9fd2..30152d6a30 100644 --- a/ceammc/ext/doc/math.floor~-help.pd +++ b/ceammc/ext/doc/math.floor~-help.pd @@ -32,7 +32,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 642 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 645 library: ceammc v0.9.4; +#X text 10 645 library: ceammc v0.9.6; #X text 312 657 see also:; #X obj 386 657 math.floor; #X obj 474 657 math.ceil~; @@ -43,7 +43,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.floor~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.gamma-help.pd b/ceammc/ext/doc/math.gamma-help.pd index 34f215aaea..623deeba79 100644 --- a/ceammc/ext/doc/math.gamma-help.pd +++ b/ceammc/ext/doc/math.gamma-help.pd @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 516 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 519 library: ceammc v0.9.4; +#X text 10 519 library: ceammc v0.9.6; #X text 490 531 see also:; #X obj 564 531 math.gamma; #X obj 652 531 math.lgamma~; @@ -53,7 +53,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.gamma; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.gamma~-help.pd b/ceammc/ext/doc/math.gamma~-help.pd index 0566abd654..06f343a9f9 100644 --- a/ceammc/ext/doc/math.gamma~-help.pd +++ b/ceammc/ext/doc/math.gamma~-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 583 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 586 library: ceammc v0.9.4; +#X text 10 586 library: ceammc v0.9.6; #X text 490 598 see also:; #X obj 564 598 math.gamma; #X obj 652 598 math.lgamma~; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.gamma~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.gcd-help.pd b/ceammc/ext/doc/math.gcd-help.pd index 0498490a22..19c0138991 100644 --- a/ceammc/ext/doc/math.gcd-help.pd +++ b/ceammc/ext/doc/math.gcd-help.pd @@ -39,7 +39,7 @@ calculated GCD value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 607 520 see also:; #X obj 681 520 math.lcm; #N canvas 10 527 400 290 info 0; @@ -47,7 +47,7 @@ calculated GCD value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.gcd; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.inf-help.pd b/ceammc/ext/doc/math.inf-help.pd index 59e52ad14a..f85ea56018 100644 --- a/ceammc/ext/doc/math.inf-help.pd +++ b/ceammc/ext/doc/math.inf-help.pd @@ -31,7 +31,7 @@ accurately.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 608 520 see also:; #X obj 682 520 math.nan; #N canvas 10 527 400 290 info 0; @@ -39,7 +39,7 @@ accurately.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.inf; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.inf~-help.pd b/ceammc/ext/doc/math.inf~-help.pd index 7f62a53a4d..8dd79aa0ff 100644 --- a/ceammc/ext/doc/math.inf~-help.pd +++ b/ceammc/ext/doc/math.inf~-help.pd @@ -31,7 +31,7 @@ accurately.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 527 520 see also:; #X obj 601 520 math.inf; #X obj 674 520 math.nan~; @@ -40,7 +40,7 @@ accurately.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.inf~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.lcm-help.pd b/ceammc/ext/doc/math.lcm-help.pd index 60edd69701..0375a74be0 100644 --- a/ceammc/ext/doc/math.lcm-help.pd +++ b/ceammc/ext/doc/math.lcm-help.pd @@ -41,7 +41,7 @@ calculated LCM value.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 608 520 see also:; #X obj 682 520 math.gcd; #N canvas 10 527 400 290 info 0; @@ -49,7 +49,7 @@ calculated LCM value.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.lcm; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.lgamma-help.pd b/ceammc/ext/doc/math.lgamma-help.pd index bca6cd9f54..aaa77a3773 100644 --- a/ceammc/ext/doc/math.lgamma-help.pd +++ b/ceammc/ext/doc/math.lgamma-help.pd @@ -47,7 +47,7 @@ function; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 490 520 see also:; #X obj 564 520 math.gamma; #X obj 652 520 math.lgamma~; @@ -56,7 +56,7 @@ function; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.lgamma; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.lgamma~-help.pd b/ceammc/ext/doc/math.lgamma~-help.pd index 688cebadca..75ba9a8ac2 100644 --- a/ceammc/ext/doc/math.lgamma~-help.pd +++ b/ceammc/ext/doc/math.lgamma~-help.pd @@ -28,7 +28,7 @@ function for signals; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 533 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 536 library: ceammc v0.9.4; +#X text 10 536 library: ceammc v0.9.6; #X text 490 548 see also:; #X obj 564 548 math.lgamma; #X obj 659 548 math.gamma~; @@ -37,7 +37,7 @@ function for signals; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.lgamma~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log-help.pd b/ceammc/ext/doc/math.log-help.pd index af233e0e76..840d023e81 100644 --- a/ceammc/ext/doc/math.log-help.pd +++ b/ceammc/ext/doc/math.log-help.pd @@ -43,7 +43,7 @@ x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 552 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 555 library: ceammc v0.9.4; +#X text 10 555 library: ceammc v0.9.6; #X text 608 567 see also:; #X obj 682 567 math.exp; #N canvas 10 574 400 290 info 0; @@ -51,7 +51,7 @@ x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log10-help.pd b/ceammc/ext/doc/math.log10-help.pd index 7e0424ee9f..5a6e43a0a3 100644 --- a/ceammc/ext/doc/math.log10-help.pd +++ b/ceammc/ext/doc/math.log10-help.pd @@ -43,7 +43,7 @@ of argument x to base 10\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 567 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 570 library: ceammc v0.9.4; +#X text 10 570 library: ceammc v0.9.6; #X text 608 582 see also:; #X obj 682 582 math.exp; #N canvas 10 589 400 290 info 0; @@ -51,7 +51,7 @@ of argument x to base 10\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log10; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log10~-help.pd b/ceammc/ext/doc/math.log10~-help.pd index 8f35f64270..45947599ba 100644 --- a/ceammc/ext/doc/math.log10~-help.pd +++ b/ceammc/ext/doc/math.log10~-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 662 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 665 library: ceammc v0.9.4; +#X text 10 665 library: ceammc v0.9.6; #X text 593 677 see also:; #X obj 667 677 math.log10; #N canvas 10 684 400 290 info 0; @@ -41,7 +41,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log10~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log2-help.pd b/ceammc/ext/doc/math.log2-help.pd index c34417ee40..d96a7665b7 100644 --- a/ceammc/ext/doc/math.log2-help.pd +++ b/ceammc/ext/doc/math.log2-help.pd @@ -41,7 +41,7 @@ of argument x to base 2\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 517 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 520 library: ceammc v0.9.4; +#X text 10 520 library: ceammc v0.9.6; #X text 608 532 see also:; #X obj 682 532 math.exp; #N canvas 10 539 400 290 info 0; @@ -49,7 +49,7 @@ of argument x to base 2\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log2; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log2~-help.pd b/ceammc/ext/doc/math.log2~-help.pd index 9ee2fc43d4..385b6da53f 100644 --- a/ceammc/ext/doc/math.log2~-help.pd +++ b/ceammc/ext/doc/math.log2~-help.pd @@ -34,7 +34,7 @@ base 2; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 662 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 665 library: ceammc v0.9.4; +#X text 10 665 library: ceammc v0.9.6; #X text 512 677 see also:; #X obj 586 677 math.exp2~; #X obj 675 677 math.log2; @@ -43,7 +43,7 @@ base 2; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log2~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.log~-help.pd b/ceammc/ext/doc/math.log~-help.pd index ceb396a773..46c18732ad 100644 --- a/ceammc/ext/doc/math.log~-help.pd +++ b/ceammc/ext/doc/math.log~-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 662 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 665 library: ceammc v0.9.4; +#X text 10 665 library: ceammc v0.9.6; #X text 520 677 see also:; #X obj 594 677 math.exp~; #X obj 675 677 math.log2; @@ -42,7 +42,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.log~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.mul-help.pd b/ceammc/ext/doc/math.mul-help.pd index 0830d8e76b..7cf63c3e12 100644 --- a/ceammc/ext/doc/math.mul-help.pd +++ b/ceammc/ext/doc/math.mul-help.pd @@ -10,49 +10,48 @@ #X floatatom 184 118 5 0 0 0 - - -; #X floatatom 232 118 5 0 0 0 - - -; #X obj 50 162 math.* 2; -#X obj 50 190 msg set; -#X msg 50 219 ; -#X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 273 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 190 ui.dt; +#X obj 20 239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 244 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 308 1\.; -#X text 150 308 float; -#X obj 246 309 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 308 MUL: multiplicand. Type: float.; -#X obj 20 338 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 343 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 279 1\.; +#X text 150 279 float; +#X obj 246 280 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 279 MUL: multiplicand. Type: float.; +#X obj 20 309 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 314 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 378 @mul; -#X text 245 378 Get/Set multiplicand. Type: float. Default value: 1\.; -#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 349 @mul; +#X text 245 349 Get/Set multiplicand. Type: float. Default value: 1\.; +#X obj 20 388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 393 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 423 1\.; -#X text 150 423 *float*; -#X text 245 423 multiplier.; -#X text 150 443 *list*; -#X text 245 443 list of multipliers (non float values are ignored).; -#X text 110 463 2\.; -#X text 150 463 *float*; -#X text 245 463 change multiplicand.; -#X obj 20 493 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 498 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 394 1\.; +#X text 150 394 *float*; +#X text 245 394 multiplier.; +#X text 150 414 *list*; +#X text 245 414 list of multipliers (non float values are ignored).; +#X text 110 434 2\.; +#X text 150 434 *float*; +#X text 245 434 change multiplicand.; +#X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 469 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 499 1\.; -#X text 245 499 float or list.; +#X text 110 470 1\.; +#X text 245 470 float or list.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 549 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 552 library: ceammc v0.9.4; -#N canvas 10 571 400 290 info 0; +#X obj 1 520 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 523 library: ceammc v0.9.6; +#N canvas 10 542 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.mul; #X text 10 76 category:; @@ -71,9 +70,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 571 pd info; +#X restore 10 542 pd info; #X connect 5 0 8 0; #X connect 6 0 8 0; #X connect 7 0 8 1; -#X connect 8 0 9 0; -#X connect 9 0 10 0; \ No newline at end of file +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.mul.pddoc b/ceammc/ext/doc/math.mul.pddoc index 7e65ca6de7..bfcb491069 100644 --- a/ceammc/ext/doc/math.mul.pddoc +++ b/ceammc/ext/doc/math.mul.pddoc @@ -42,9 +42,7 @@ | | |. [math.* 2 ] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.nan-help.pd b/ceammc/ext/doc/math.nan-help.pd index 5d7d222585..2832b808ce 100644 --- a/ceammc/ext/doc/math.nan-help.pd +++ b/ceammc/ext/doc/math.nan-help.pd @@ -51,7 +51,7 @@ symbol. Default value: quiet. Allowed values: quiet \, signal.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 722 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 725 library: ceammc v0.9.4; +#X text 10 725 library: ceammc v0.9.6; #X text 527 737 see also:; #X obj 601 737 math.nan~; #X obj 682 737 math.inf; @@ -60,7 +60,7 @@ symbol. Default value: quiet. Allowed values: quiet \, signal.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.nan; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.nan~-help.pd b/ceammc/ext/doc/math.nan~-help.pd index 9b90dccd61..c709815ecf 100644 --- a/ceammc/ext/doc/math.nan~-help.pd +++ b/ceammc/ext/doc/math.nan~-help.pd @@ -51,7 +51,7 @@ symbol. Default value: quiet. Allowed values: quiet \, signal.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.9.4; +#X text 10 754 library: ceammc v0.9.6; #X text 527 766 see also:; #X obj 601 766 math.nan; #X obj 674 766 math.inf~; @@ -60,7 +60,7 @@ symbol. Default value: quiet. Allowed values: quiet \, signal.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.nan~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.neg-help.pd b/ceammc/ext/doc/math.neg-help.pd index 2d6ec0138b..1a5e5069da 100644 --- a/ceammc/ext/doc/math.neg-help.pd +++ b/ceammc/ext/doc/math.neg-help.pd @@ -12,34 +12,33 @@ #X floatatom 50 143 5 0 0 0 - - -; #X msg 98 143 -2 -1 0 1 2; #X obj 50 172 math.neg; -#X obj 50 201 msg set; -#X msg 50 230 ; -#X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 284 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 201 ui.dt; +#X obj 20 250 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 255 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 285 1\.; -#X text 150 285 *float*; -#X text 245 285 input value.; -#X text 150 305 *list*; -#X text 245 305 list of numbers.; -#X obj 20 335 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 340 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 256 1\.; +#X text 150 256 *float*; +#X text 245 256 input value.; +#X text 150 276 *list*; +#X text 245 276 list of numbers.; +#X obj 20 306 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 311 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 341 1\.; -#X text 245 341 result.; +#X text 110 312 1\.; +#X text 245 312 result.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.neg; #X text 10 76 category:; @@ -61,5 +60,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 8 0 10 0; #X connect 9 0 10 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; \ No newline at end of file +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.neg.pddoc b/ceammc/ext/doc/math.neg.pddoc index 64e997f525..1baab31800 100644 --- a/ceammc/ext/doc/math.neg.pddoc +++ b/ceammc/ext/doc/math.neg.pddoc @@ -36,9 +36,7 @@ | | [math.neg] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.or-help.pd b/ceammc/ext/doc/math.or-help.pd index 4f1f3606ad..33f565c747 100644 --- a/ceammc/ext/doc/math.or-help.pd +++ b/ceammc/ext/doc/math.or-help.pd @@ -25,54 +25,57 @@ -49933 0; #X text 110 378 1\.; #X text 150 378 int; -#X obj 246 379 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 378 NUM: number of arguments. Type: int. Range: 3\...16; +#X obj 246 379 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 378 N: number of arguments. Type: int. Range: 3\...16; #X obj 20 408 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 413 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 448 @state; -#X text 245 448 (readonly) Get internal logic state as list of 1 and -0\. Type: list. Default value: 0 0 0\.; -#X msg 110 490 @sync; -#X text 245 490 Get/Set if specified - all inlets are 'hot'. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 547 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 448 @n; +#X text 245 448 (initonly) Get/Set number of arguments. Type: int. +Default value: 3\. Range: 3\...16\.; +#X msg 110 490 @state; +#X text 245 490 (readonly) Get internal logic state as list of 1 and +0\. Type: list.; +#X msg 110 532 @sync; +#X text 245 532 if specified - all inlets are 'hot'. Default value: +0\.; +#X obj 20 571 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 576 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 582 reset; -#X text 245 582 resets all input states to false.; -#X obj 20 619 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 624 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 611 reset; +#X text 245 611 resets all input states to false.; +#X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 653 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 625 1\.; -#X text 150 625 *float*; -#X text 245 625 1 or 0\.; -#X text 110 645 ....; -#X text 150 645 *float*; -#X text 245 645 1 or 0\.; -#X text 110 665 n.; -#X text 150 665 *float*; -#X text 245 665 1 or 0\.; -#X obj 20 695 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 700 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 654 1\.; +#X text 150 654 *float*; +#X text 245 654 1 or 0\.; +#X text 110 674 ....; +#X text 150 674 *float*; +#X text 245 674 1 or 0\.; +#X text 110 694 n.; +#X text 150 694 *float*; +#X text 245 694 1 or 0\.; +#X obj 20 724 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 729 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 701 1\.; -#X text 245 701 1 - if all input values are true (1) \, 0 - otherwise.; +#X text 110 730 1\.; +#X text 245 730 1 - if all input values are true (1) \, 0 - otherwise.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.9.4; -#X text 608 766 see also:; -#X obj 682 766 math.and; -#N canvas 10 773 400 290 info 0; +#X obj 1 780 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 783 library: ceammc v0.9.6; +#X text 608 795 see also:; +#X obj 682 795 math.and; +#N canvas 10 802 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.or; #X text 10 76 category:; @@ -91,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 773 pd info; +#X restore 10 802 pd info; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/math.or.pddoc b/ceammc/ext/doc/math.or.pddoc index 2a990dd231..55c2fd221a 100644 --- a/ceammc/ext/doc/math.or.pddoc +++ b/ceammc/ext/doc/math.or.pddoc @@ -21,17 +21,18 @@ 0.2 - number of - arguments + number of arguments resets all input states to false - if specified - all inlets are - 'hot' - internal logic - state as list of 1 and 0 + number of arguments + if specified - all + inlets are 'hot' + internal logic state + as list of 1 and 0 diff --git a/ceammc/ext/doc/math.pi-help.pd b/ceammc/ext/doc/math.pi-help.pd index 2ae528dc22..aa2dbfacc5 100644 --- a/ceammc/ext/doc/math.pi-help.pd +++ b/ceammc/ext/doc/math.pi-help.pd @@ -24,40 +24,41 @@ as 3.14159\.; -49933 0; #X text 110 320 1\.; #X text 150 320 float; -#X obj 246 321 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 320 MUL: multiplier. default is 1\. Type: float.; +#X obj 246 321 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 320 K: multiplier. default is 1\. Type: float.; #X obj 20 350 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 355 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 390 @k; -#X text 245 390 Get/Set multiplier. Type: float. Default value: 1\.; -#X obj 20 429 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 434 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 390 (initonly) Get/Set multiplier. Type: float. Default +value: 1\.; +#X obj 20 442 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 447 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 435 1\.; -#X text 150 435 *bang*; -#X text 245 435 outputs value.; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 448 1\.; +#X text 150 448 *bang*; +#X text 245 448 outputs value.; +#X obj 20 478 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 483 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 471 1\.; -#X text 245 471 output value.; +#X text 110 484 1\.; +#X text 245 484 output value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 521 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 524 library: ceammc v0.9.4; -#X text 548 536 see also:; -#X obj 622 536 math.e; -#X obj 681 536 math.pi~; -#N canvas 10 543 400 290 info 0; +#X obj 1 534 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 537 library: ceammc v0.9.6; +#X text 548 549 see also:; +#X obj 622 549 math.e; +#X obj 681 549 math.pi~; +#N canvas 10 556 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.pi; #X text 10 76 category:; @@ -76,7 +77,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 543 pd info; +#X restore 10 556 pd info; #X connect 8 0 10 0; #X connect 9 0 11 0; #X connect 10 0 12 0; diff --git a/ceammc/ext/doc/math.pi.pddoc b/ceammc/ext/doc/math.pi.pddoc index 2af8a7b84e..b818263c55 100644 --- a/ceammc/ext/doc/math.pi.pddoc +++ b/ceammc/ext/doc/math.pi.pddoc @@ -22,10 +22,10 @@ - multiplier. default is 1 + multiplier. default is 1 - multiplier + multiplier The number PI is a mathematical constant, the ratio of a circle's circumference to diff --git a/ceammc/ext/doc/math.pi~-help.pd b/ceammc/ext/doc/math.pi~-help.pd index 4c67e3ff49..9096b8b722 100644 --- a/ceammc/ext/doc/math.pi~-help.pd +++ b/ceammc/ext/doc/math.pi~-help.pd @@ -21,31 +21,37 @@ as 3.14159\.; -49933 0; #X text 110 334 1\.; #X text 150 334 float; -#X obj 246 335 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 MUL: multiplier. default is 1\. Type: float.; +#X obj 246 335 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 334 K: multiplier. default is 1\. Type: float.; #X obj 20 364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 369 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 369 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 404 @k; +#X text 245 404 (initonly) Get/Set multiplier. Type: float. Default +value: 1\.; +#X obj 20 456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 461 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X obj 20 390 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 395 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 482 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 487 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 396 1\.; -#X text 245 396 output value.; +#X text 110 488 1\.; +#X text 245 488 output value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#X text 615 520 see also:; -#X obj 689 520 math.pi; -#N canvas 10 527 400 290 info 0; +#X obj 1 538 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 541 library: ceammc v0.9.6; +#X text 615 553 see also:; +#X obj 689 553 math.pi; +#N canvas 10 560 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.pi~; #X text 10 76 category:; @@ -64,6 +70,6 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; +#X restore 10 560 pd info; #X connect 9 0 11 0; #X connect 10 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.pi~.pddoc b/ceammc/ext/doc/math.pi~.pddoc index 36dcb46742..82888c3672 100644 --- a/ceammc/ext/doc/math.pi~.pddoc +++ b/ceammc/ext/doc/math.pi~.pddoc @@ -21,15 +21,18 @@ - multiplier. default is 1 + multiplier. default is 1 + + multiplier + The number PI is a mathematical constant, the ratio of a circle's circumference to its diameter, commonly approximated as 3.14159. - output value + output value diff --git a/ceammc/ext/doc/math.polyeval-help.pd b/ceammc/ext/doc/math.polyeval-help.pd index 23bc7fbe35..b5381488d4 100644 --- a/ceammc/ext/doc/math.polyeval-help.pd +++ b/ceammc/ext/doc/math.polyeval-help.pd @@ -17,8 +17,8 @@ list; -49933 0; #X text 110 294 1\.; #X text 150 294 float; -#X obj 246 295 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 ARGS: coefficient list. Type: float.; +#X obj 246 295 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 COEFFS: coefficient list. Type: float.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -46,13 +46,13 @@ list; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 535 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 538 library: ceammc v0.9.4; +#X text 10 538 library: ceammc v0.9.6; #N canvas 10 557 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.polyeval; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.polyeval.pddoc b/ceammc/ext/doc/math.polyeval.pddoc index 7bb5c6a621..35f58edcdb 100644 --- a/ceammc/ext/doc/math.polyeval.pddoc +++ b/ceammc/ext/doc/math.polyeval.pddoc @@ -14,10 +14,10 @@ 0.6 - coefficient list + coefficient list - coefficient list + coefficient list diff --git a/ceammc/ext/doc/math.reciprocal-help.pd b/ceammc/ext/doc/math.reciprocal-help.pd index 913a571bfe..6a1a46a68e 100644 --- a/ceammc/ext/doc/math.reciprocal-help.pd +++ b/ceammc/ext/doc/math.reciprocal-help.pd @@ -12,11 +12,10 @@ #X floatatom 50 143 5 0 0 0 - - -; #X msg 98 143 1 2 3 4 5; #X floatatom 261 143 5 0 0 0 - - -; -#X obj 50 172 math.reciprocal; +#X obj 50 172 1/x; #X msg 261 172 1 \$1; -#X obj 50 201 msg set; +#X obj 50 201 ui.dt; #X obj 261 201 /; -#X msg 50 230 ; #X floatatom 261 230 5 0 0 0 - - -; #X obj 20 279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 284 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 @@ -37,13 +36,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.reciprocal; #X text 10 76 category:; @@ -68,5 +67,4 @@ https://github.com/uliss/pure-data; #X connect 10 0 12 0; #X connect 11 0 13 0; #X connect 12 0 14 0; -#X connect 13 0 15 0; -#X connect 14 0 16 0; \ No newline at end of file +#X connect 14 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.reciprocal.pddoc b/ceammc/ext/doc/math.reciprocal.pddoc index 717844b40d..2eae057ee2 100644 --- a/ceammc/ext/doc/math.reciprocal.pddoc +++ b/ceammc/ext/doc/math.reciprocal.pddoc @@ -34,11 +34,11 @@ diff --git a/ceammc/ext/doc/math.reciprocal~-help.pd b/ceammc/ext/doc/math.reciprocal~-help.pd index 29126a3c55..22b3a59f23 100644 --- a/ceammc/ext/doc/math.reciprocal~-help.pd +++ b/ceammc/ext/doc/math.reciprocal~-help.pd @@ -30,13 +30,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 565 library: ceammc v0.9.4; +#X text 10 565 library: ceammc v0.9.6; #N canvas 10 584 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.reciprocal~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.round-help.pd b/ceammc/ext/doc/math.round-help.pd index 28b3c19a74..d9b34b9451 100644 --- a/ceammc/ext/doc/math.round-help.pd +++ b/ceammc/ext/doc/math.round-help.pd @@ -4,6 +4,8 @@ #X text 324 50 round to integral value \, regardless of rounding direction; #X obj 1 1 cnv 5 765 40 empty empty math.round 20 20 0 20 -104026 -4096 0; +#X obj 497 11 round; +#X obj 557 11 ceammc/round; #X obj 668 11 math.round; #X obj 210 80 cnv 1 555 140 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 The round() functions return the integral value nearest @@ -15,28 +17,27 @@ rounding direction.; #X floatatom 50 248 5 0 0 0 - - -; #X msg 98 248 2.3 3.8 5.5 -2.3 -3.8 -5.5; #X obj 50 277 math.round; -#X obj 50 306 msg set; -#X msg 50 335 ; -#X obj 20 384 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 389 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 306 ui.dt; +#X obj 20 355 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 360 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 390 1\.; -#X text 150 390 *float*; -#X text 245 390 input value.; -#X text 150 410 *list*; -#X text 245 410 apply to all numeric values.; -#X obj 20 440 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 445 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 361 1\.; +#X text 150 361 *float*; +#X text 245 361 input value.; +#X text 150 381 *list*; +#X text 245 381 apply to all numeric values.; +#X obj 20 411 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 416 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 446 1\.; -#X text 245 446 result value.; +#X text 110 417 1\.; +#X text 245 417 result value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 424 520 see also:; #X obj 498 520 math.ceil; #X obj 579 520 math.floor; @@ -46,7 +47,7 @@ rounding direction.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.round; #X text 10 76 category:; @@ -66,7 +67,6 @@ https://github.com/uliss/pure-data; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; #X restore 10 527 pd info; -#X connect 9 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; \ No newline at end of file +#X connect 11 0 13 0; +#X connect 12 0 13 0; +#X connect 13 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.round.pddoc b/ceammc/ext/doc/math.round.pddoc index fa4e02593b..3667e69312 100644 --- a/ceammc/ext/doc/math.round.pddoc +++ b/ceammc/ext/doc/math.round.pddoc @@ -11,6 +11,10 @@ ceammc math math round + + round + ceammc/round + math.ceil math.floor @@ -41,9 +45,7 @@ | | [math.round] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.round~-help.pd b/ceammc/ext/doc/math.round~-help.pd index 370b6e347d..4246e3ada1 100644 --- a/ceammc/ext/doc/math.round~-help.pd +++ b/ceammc/ext/doc/math.round~-help.pd @@ -4,7 +4,8 @@ #X text 668 50 signal round; #X obj 1 1 cnv 5 765 40 empty empty math.round~ 20 20 0 20 -104026 -4096 0; -#X obj 591 11 round~; +#X obj 471 11 round~; +#X obj 539 11 ceammc/round~; #X obj 659 11 math.round~; #X obj 50 118 osc~ 440; #X obj 50 147 *~ 8; @@ -29,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 594 520 see also:; #X obj 668 520 math.round; #N canvas 10 527 400 290 info 0; @@ -37,7 +38,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.round~; #X text 10 76 category:; @@ -57,10 +58,10 @@ https://github.com/uliss/pure-data; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; #X restore 10 527 pd info; -#X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; -#X connect 8 0 10 0; -#X connect 9 0 10 1; -#X connect 10 0 11 0; -#X connect 10 0 11 1; \ No newline at end of file +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 12 0; +#X connect 11 0 12 1; \ No newline at end of file diff --git a/ceammc/ext/doc/math.round~.pddoc b/ceammc/ext/doc/math.round~.pddoc index 78c326af6a..1951c4eb9b 100644 --- a/ceammc/ext/doc/math.round~.pddoc +++ b/ceammc/ext/doc/math.round~.pddoc @@ -13,6 +13,7 @@ math round~ round~ + ceammc/round~ math.round @@ -20,12 +21,12 @@ 0.4 - + input signal - output rounded signal + output rounded signal diff --git a/ceammc/ext/doc/math.sign-help.pd b/ceammc/ext/doc/math.sign-help.pd index 53da43f7d7..24688adffe 100644 --- a/ceammc/ext/doc/math.sign-help.pd +++ b/ceammc/ext/doc/math.sign-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sign; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sin-help.pd b/ceammc/ext/doc/math.sin-help.pd index 6396de3c2b..bdca24d601 100644 --- a/ceammc/ext/doc/math.sin-help.pd +++ b/ceammc/ext/doc/math.sin-help.pd @@ -34,7 +34,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -44,7 +44,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sin; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sinh-help.pd b/ceammc/ext/doc/math.sinh-help.pd index d4f154880c..dbdf9227a6 100644 --- a/ceammc/ext/doc/math.sinh-help.pd +++ b/ceammc/ext/doc/math.sinh-help.pd @@ -33,7 +33,7 @@ x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -43,7 +43,7 @@ x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sinh; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sinh~-help.pd b/ceammc/ext/doc/math.sinh~-help.pd index 89b30de2cc..4fb8c339a6 100644 --- a/ceammc/ext/doc/math.sinh~-help.pd +++ b/ceammc/ext/doc/math.sinh~-help.pd @@ -37,7 +37,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 666 library: ceammc v0.9.4; +#X text 10 666 library: ceammc v0.9.6; #X text 505 678 see also:; #X obj 579 678 math.asinh~; #X obj 675 678 math.sinh; @@ -46,7 +46,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sinh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sin~-help.pd b/ceammc/ext/doc/math.sin~-help.pd index 88b34fdc3d..d0f5acda0f 100644 --- a/ceammc/ext/doc/math.sin~-help.pd +++ b/ceammc/ext/doc/math.sin~-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 595 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 598 library: ceammc v0.9.4; +#X text 10 598 library: ceammc v0.9.6; #X text 527 610 see also:; #X obj 601 610 math.sin; #X obj 674 610 math.cos~; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sin~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sqrt-help.pd b/ceammc/ext/doc/math.sqrt-help.pd index b43fc8f97a..fb08814be6 100644 --- a/ceammc/ext/doc/math.sqrt-help.pd +++ b/ceammc/ext/doc/math.sqrt-help.pd @@ -34,13 +34,13 @@ for x < 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sqrt; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sqrt~-help.pd b/ceammc/ext/doc/math.sqrt~-help.pd index 7f2d6697ff..cb0a2abece 100644 --- a/ceammc/ext/doc/math.sqrt~-help.pd +++ b/ceammc/ext/doc/math.sqrt~-help.pd @@ -30,7 +30,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 587 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 590 library: ceammc v0.9.4; +#X text 10 590 library: ceammc v0.9.6; #X text 491 602 see also:; #X obj 565 602 math.squared~; #X obj 675 602 math.sqrt; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sqrt~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.squared-help.pd b/ceammc/ext/doc/math.squared-help.pd index 1fffbaeead..7f8f2341a3 100644 --- a/ceammc/ext/doc/math.squared-help.pd +++ b/ceammc/ext/doc/math.squared-help.pd @@ -11,34 +11,33 @@ #X floatatom 50 118 5 0 0 0 - - -; #X msg 98 118 -2 -1 0 1 2; #X obj 50 147 math.squared; -#X obj 50 176 msg set; -#X msg 50 205 ; -#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 259 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 176 ui.dt; +#X obj 20 225 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 230 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 260 1\.; -#X text 150 260 *float*; -#X text 245 260 input value.; -#X text 150 280 *list*; -#X text 245 280 list of numbers.; -#X obj 20 310 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 315 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 231 1\.; +#X text 150 231 *float*; +#X text 245 231 input value.; +#X text 150 251 *list*; +#X text 245 251 list of numbers.; +#X obj 20 281 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 286 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 316 1\.; -#X text 245 316 result.; +#X text 110 287 1\.; +#X text 245 287 result.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.squared; #X text 10 76 category:; @@ -60,5 +59,4 @@ https://github.com/uliss/pure-data; #X restore 10 527 pd info; #X connect 7 0 9 0; #X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 10 0 11 0; \ No newline at end of file +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/math.squared.pddoc b/ceammc/ext/doc/math.squared.pddoc index 82adbe7391..d46aab2968 100644 --- a/ceammc/ext/doc/math.squared.pddoc +++ b/ceammc/ext/doc/math.squared.pddoc @@ -34,9 +34,7 @@ | | [math.squared] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/math.squared~-help.pd b/ceammc/ext/doc/math.squared~-help.pd index cc94933f76..dfb4c39ed8 100644 --- a/ceammc/ext/doc/math.squared~-help.pd +++ b/ceammc/ext/doc/math.squared~-help.pd @@ -30,13 +30,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 562 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 565 library: ceammc v0.9.4; +#X text 10 565 library: ceammc v0.9.6; #N canvas 10 584 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.squared~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.squared~.pddoc b/ceammc/ext/doc/math.squared~.pddoc index 3b34e9a7c6..94c63527f8 100644 --- a/ceammc/ext/doc/math.squared~.pddoc +++ b/ceammc/ext/doc/math.squared~.pddoc @@ -24,7 +24,7 @@ - output signal + output signal diff --git a/ceammc/ext/doc/math.sync_add-help.pd b/ceammc/ext/doc/math.sync_add-help.pd index eb05998d20..e1a43b018a 100644 --- a/ceammc/ext/doc/math.sync_add-help.pd +++ b/ceammc/ext/doc/math.sync_add-help.pd @@ -53,7 +53,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 550 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 553 library: ceammc v0.9.4; +#X text 10 553 library: ceammc v0.9.6; #X text 571 565 see also:; #X obj 645 565 math.sync_sub; #N canvas 10 572 400 290 info 0; @@ -61,7 +61,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_add; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_add.pddoc b/ceammc/ext/doc/math.sync_add.pddoc index 557bfe228a..f488371cb2 100644 --- a/ceammc/ext/doc/math.sync_add.pddoc +++ b/ceammc/ext/doc/math.sync_add.pddoc @@ -25,7 +25,8 @@ second addend - operate on integers only + operate on integers + only diff --git a/ceammc/ext/doc/math.sync_and-help.pd b/ceammc/ext/doc/math.sync_and-help.pd index a70172b3c1..6b288f0033 100644 --- a/ceammc/ext/doc/math.sync_and-help.pd +++ b/ceammc/ext/doc/math.sync_and-help.pd @@ -55,7 +55,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 509 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 512 library: ceammc v0.9.4; +#X text 10 512 library: ceammc v0.9.6; #X text 610 524 see also:; #X obj 684 524 math.||'; #N canvas 10 531 400 290 info 0; @@ -63,7 +63,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_and; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_div-help.pd b/ceammc/ext/doc/math.sync_div-help.pd index ec58ee24ec..16cbde4062 100644 --- a/ceammc/ext/doc/math.sync_div-help.pd +++ b/ceammc/ext/doc/math.sync_div-help.pd @@ -60,13 +60,13 @@ result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 675 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 678 library: ceammc v0.9.4; +#X text 10 678 library: ceammc v0.9.6; #N canvas 10 697 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_div; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_div.pddoc b/ceammc/ext/doc/math.sync_div.pddoc index c17647f086..c43b7a0285 100644 --- a/ceammc/ext/doc/math.sync_div.pddoc +++ b/ceammc/ext/doc/math.sync_div.pddoc @@ -25,7 +25,8 @@ divisor - operate on integers only + operate on integers + only diff --git a/ceammc/ext/doc/math.sync_eq-help.pd b/ceammc/ext/doc/math.sync_eq-help.pd index 93c2a325ab..da842b26e1 100644 --- a/ceammc/ext/doc/math.sync_eq-help.pd +++ b/ceammc/ext/doc/math.sync_eq-help.pd @@ -60,7 +60,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 676 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 679 library: ceammc v0.9.4; +#X text 10 679 library: ceammc v0.9.6; #X text 610 691 see also:; #X obj 684 691 math.!='; #N canvas 10 698 400 290 info 0; @@ -68,7 +68,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_eq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_ge-help.pd b/ceammc/ext/doc/math.sync_ge-help.pd index e493757e9a..5c7429fa23 100644 --- a/ceammc/ext/doc/math.sync_ge-help.pd +++ b/ceammc/ext/doc/math.sync_ge-help.pd @@ -49,7 +49,7 @@ second \, otherwise 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 610 520 see also:; #X obj 684 520 math.<='; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ second \, otherwise 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_ge; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_gt-help.pd b/ceammc/ext/doc/math.sync_gt-help.pd index 93b5f41322..8313e1f833 100644 --- a/ceammc/ext/doc/math.sync_gt-help.pd +++ b/ceammc/ext/doc/math.sync_gt-help.pd @@ -49,7 +49,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 617 520 see also:; #X obj 691 520 math.<'; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_gt; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_le-help.pd b/ceammc/ext/doc/math.sync_le-help.pd index f3ac5442ee..33c0ce7856 100644 --- a/ceammc/ext/doc/math.sync_le-help.pd +++ b/ceammc/ext/doc/math.sync_le-help.pd @@ -49,7 +49,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 610 520 see also:; #X obj 684 520 math.>='; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_le; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_lshift-help.pd b/ceammc/ext/doc/math.sync_lshift-help.pd index 56e56f4dcb..6734797152 100644 --- a/ceammc/ext/doc/math.sync_lshift-help.pd +++ b/ceammc/ext/doc/math.sync_lshift-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 550 520 see also:; #X obj 624 520 math.sync_rshift; #N canvas 10 527 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_lshift; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_lt-help.pd b/ceammc/ext/doc/math.sync_lt-help.pd index 1751905929..ffc663a8de 100644 --- a/ceammc/ext/doc/math.sync_lt-help.pd +++ b/ceammc/ext/doc/math.sync_lt-help.pd @@ -49,7 +49,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 617 520 see also:; #X obj 691 520 math.>'; #N canvas 10 527 400 290 info 0; @@ -57,7 +57,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_lt; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_mod-help.pd b/ceammc/ext/doc/math.sync_mod-help.pd index aa6aad0b15..4afc41b697 100644 --- a/ceammc/ext/doc/math.sync_mod-help.pd +++ b/ceammc/ext/doc/math.sync_mod-help.pd @@ -60,7 +60,7 @@ and output remainder.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 690 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 693 library: ceammc v0.9.4; +#X text 10 693 library: ceammc v0.9.6; #X text 571 705 see also:; #X obj 645 705 math.sync_div; #N canvas 10 712 400 290 info 0; @@ -68,7 +68,7 @@ and output remainder.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_mod; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_mod.pddoc b/ceammc/ext/doc/math.sync_mod.pddoc index f4a036d158..c641708da1 100644 --- a/ceammc/ext/doc/math.sync_mod.pddoc +++ b/ceammc/ext/doc/math.sync_mod.pddoc @@ -28,7 +28,8 @@ modulo divisor - operate on integers only + operate on integers + only diff --git a/ceammc/ext/doc/math.sync_mul-help.pd b/ceammc/ext/doc/math.sync_mul-help.pd index 2ce0ca7597..887f8a093c 100644 --- a/ceammc/ext/doc/math.sync_mul-help.pd +++ b/ceammc/ext/doc/math.sync_mul-help.pd @@ -57,13 +57,13 @@ and output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 650 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 653 library: ceammc v0.9.4; +#X text 10 653 library: ceammc v0.9.6; #N canvas 10 672 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_mul; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_mul.pddoc b/ceammc/ext/doc/math.sync_mul.pddoc index 00d1c4529c..ee60911cf9 100644 --- a/ceammc/ext/doc/math.sync_mul.pddoc +++ b/ceammc/ext/doc/math.sync_mul.pddoc @@ -22,7 +22,8 @@ multiplicand - operate on integers only + operate on integers + only diff --git a/ceammc/ext/doc/math.sync_ne-help.pd b/ceammc/ext/doc/math.sync_ne-help.pd index 9016040912..af877c78be 100644 --- a/ceammc/ext/doc/math.sync_ne-help.pd +++ b/ceammc/ext/doc/math.sync_ne-help.pd @@ -61,7 +61,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 676 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 679 library: ceammc v0.9.4; +#X text 10 679 library: ceammc v0.9.6; #X text 610 691 see also:; #X obj 684 691 math.=='; #N canvas 10 698 400 290 info 0; @@ -69,7 +69,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_ne; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_or-help.pd b/ceammc/ext/doc/math.sync_or-help.pd index 6069760b41..77b10f0e0c 100644 --- a/ceammc/ext/doc/math.sync_or-help.pd +++ b/ceammc/ext/doc/math.sync_or-help.pd @@ -55,7 +55,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 509 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 512 library: ceammc v0.9.4; +#X text 10 512 library: ceammc v0.9.6; #X text 610 524 see also:; #X obj 684 524 math.&&'; #N canvas 10 531 400 290 info 0; @@ -63,7 +63,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_or; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_rshift-help.pd b/ceammc/ext/doc/math.sync_rshift-help.pd index 478510d289..8794519431 100644 --- a/ceammc/ext/doc/math.sync_rshift-help.pd +++ b/ceammc/ext/doc/math.sync_rshift-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 550 520 see also:; #X obj 624 520 math.sync_lshift; #N canvas 10 527 400 290 info 0; @@ -55,7 +55,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_rshift; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_sub-help.pd b/ceammc/ext/doc/math.sync_sub-help.pd index 60a415cc09..59af1df025 100644 --- a/ceammc/ext/doc/math.sync_sub-help.pd +++ b/ceammc/ext/doc/math.sync_sub-help.pd @@ -53,7 +53,7 @@ result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 550 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 553 library: ceammc v0.9.4; +#X text 10 553 library: ceammc v0.9.6; #X text 572 565 see also:; #X obj 646 565 math.sync_add; #N canvas 10 572 400 290 info 0; @@ -61,7 +61,7 @@ result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_sub; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.sync_sub.pddoc b/ceammc/ext/doc/math.sync_sub.pddoc index 4b5c582913..ca1d40ce41 100644 --- a/ceammc/ext/doc/math.sync_sub.pddoc +++ b/ceammc/ext/doc/math.sync_sub.pddoc @@ -25,7 +25,8 @@ subtrahend - operate on integers only + operate on integers + only diff --git a/ceammc/ext/doc/math.sync_xor-help.pd b/ceammc/ext/doc/math.sync_xor-help.pd index 96a68b983c..2eb2092240 100644 --- a/ceammc/ext/doc/math.sync_xor-help.pd +++ b/ceammc/ext/doc/math.sync_xor-help.pd @@ -49,7 +49,7 @@ output result.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 509 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 512 library: ceammc v0.9.4; +#X text 10 512 library: ceammc v0.9.6; #X text 610 524 see also:; #X obj 684 524 math.||'; #N canvas 10 531 400 290 info 0; @@ -57,7 +57,7 @@ output result.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.sync_xor; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.tan-help.pd b/ceammc/ext/doc/math.tan-help.pd index e66b659d6c..66e6d30453 100644 --- a/ceammc/ext/doc/math.tan-help.pd +++ b/ceammc/ext/doc/math.tan-help.pd @@ -34,7 +34,7 @@ floating-point exception.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -44,7 +44,7 @@ floating-point exception.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.tan; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.tanh-help.pd b/ceammc/ext/doc/math.tanh-help.pd index e7eb5bd88a..b9f4362afd 100644 --- a/ceammc/ext/doc/math.tanh-help.pd +++ b/ceammc/ext/doc/math.tanh-help.pd @@ -41,7 +41,7 @@ of x.; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 441 520 see also:; #X obj 515 520 math.acos; #X obj 595 520 math.asin; @@ -51,7 +51,7 @@ of x.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.tanh; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.tanh~-help.pd b/ceammc/ext/doc/math.tanh~-help.pd index fb6518fd76..5d24647335 100644 --- a/ceammc/ext/doc/math.tanh~-help.pd +++ b/ceammc/ext/doc/math.tanh~-help.pd @@ -33,7 +33,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 610 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 613 library: ceammc v0.9.4; +#X text 10 613 library: ceammc v0.9.6; #X text 505 625 see also:; #X obj 579 625 math.atanh~; #X obj 675 625 math.tanh; @@ -42,7 +42,7 @@ https://en.wikipedia.org/wiki/Hyperbolic_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.tanh~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.tan~-help.pd b/ceammc/ext/doc/math.tan~-help.pd index a3596abd72..4992bb01ee 100644 --- a/ceammc/ext/doc/math.tan~-help.pd +++ b/ceammc/ext/doc/math.tan~-help.pd @@ -29,7 +29,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 558 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 561 library: ceammc v0.9.4; +#X text 10 561 library: ceammc v0.9.6; #X text 440 573 see also:; #X obj 514 573 math.tan~; #X obj 595 573 math.asin; @@ -39,7 +39,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.tan~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.trunc-help.pd b/ceammc/ext/doc/math.trunc-help.pd index 26eba2563a..3f859bdc2e 100644 --- a/ceammc/ext/doc/math.trunc-help.pd +++ b/ceammc/ext/doc/math.trunc-help.pd @@ -35,7 +35,7 @@ in magnitude than x; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 425 520 see also:; #X obj 499 520 math.ceil; #X obj 580 520 math.floor; @@ -45,7 +45,7 @@ in magnitude than x; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.trunc; #X text 10 76 category:; diff --git a/ceammc/ext/doc/math.trunc.pddoc b/ceammc/ext/doc/math.trunc.pddoc index f0de24c3d3..cc6499cd9f 100644 --- a/ceammc/ext/doc/math.trunc.pddoc +++ b/ceammc/ext/doc/math.trunc.pddoc @@ -22,12 +22,12 @@ Outputs the integral value nearest to but no larger in magnitude than x - + input signal - result signal + result signal diff --git a/ceammc/ext/doc/math.trunc~-help.pd b/ceammc/ext/doc/math.trunc~-help.pd index a45dda06b8..e74b50a1b5 100644 --- a/ceammc/ext/doc/math.trunc~-help.pd +++ b/ceammc/ext/doc/math.trunc~-help.pd @@ -34,7 +34,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 115 45 ::; #X obj 131 48 ui.link @title math @url ceammc.math-help.pd; #X obj 1 682 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 685 library: ceammc v0.9.4; +#X text 10 685 library: ceammc v0.9.6; #X text 408 697 see also:; #X obj 482 697 math.trunc; #X obj 570 697 math.ceil~; @@ -44,7 +44,7 @@ https://en.wikipedia.org/wiki/Floor_and_ceiling_functions; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 math.trunc~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/matrix~-help.pd b/ceammc/ext/doc/matrix~-help.pd index c8652ecede..23ac8499f5 100644 --- a/ceammc/ext/doc/matrix~-help.pd +++ b/ceammc/ext/doc/matrix~-help.pd @@ -75,13 +75,13 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 859 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 862 library: ceammc v0.9.4; +#X text 10 862 library: ceammc v0.9.6; #N canvas 10 881 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 matrix~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/matrix~.pddoc b/ceammc/ext/doc/matrix~.pddoc index a3a97e1657..532148d664 100644 --- a/ceammc/ext/doc/matrix~.pddoc +++ b/ceammc/ext/doc/matrix~.pddoc @@ -31,9 +31,9 @@ number of matrix inputs + access="readonly">number of matrix inputs number of matrix outputs + access="readonly">number of matrix outputs diff --git a/ceammc/ext/doc/metro.pattern-help.pd b/ceammc/ext/doc/metro.pattern-help.pd index e656021db0..5a68a065ed 100644 --- a/ceammc/ext/doc/metro.pattern-help.pd +++ b/ceammc/ext/doc/metro.pattern-help.pd @@ -23,7 +23,7 @@ #X text 110 380 1\.; #X text 150 380 list; #X obj 246 381 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 380 PATTERN: list of time intervals. Type: list.; +#X text 245 380 PATTERN: list of time intervals (in ms). Type: list.; #X obj 20 410 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 415 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -31,39 +31,40 @@ #X text 245 450 Get/Set current pattern index. Type: int. Default value: 0\. Min value: 0\.; #X msg 110 492 @pattern; -#X text 245 492 Get/Set time intervals performed in a loop. Type: list.; -#X msg 110 521 @sync; -#X text 245 521 Get/Set sync mode - change pattern after full cycle. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 573 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 578 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 492 Get/Set time intervals (in ms) performed in a loop. +Type: list.; +#X msg 110 534 @sync; +#X text 245 534 Get/Set sync mode - change pattern after full cycle. +Type: bool. Default value: 0\.; +#X obj 20 586 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 591 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 579 1\.; -#X text 150 579 *float*; -#X text 245 579 starts (on 1) or stops (on 0) metro.; -#X obj 20 609 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 614 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 592 1\.; +#X text 150 592 *float*; +#X text 245 592 starts (on 1) or stops (on 0) metro.; +#X obj 20 622 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 627 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 615 1\.; -#X text 245 615 outputs *bang*.; -#X text 110 635 2\.; -#X text 245 635 outputs current pattern index and bang on loop return.; +#X text 110 628 1\.; +#X text 245 628 outputs *bang*.; +#X text 110 648 2\.; +#X text 245 648 outputs current pattern index and bang on loop return.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 685 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 688 library: ceammc v0.9.4; -#X text 549 700 see also:; -#X obj 623 700 metro; -#X obj 675 700 metro.seq; -#N canvas 10 707 400 290 info 0; +#X obj 1 698 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 701 library: ceammc v0.9.6; +#X text 549 713 see also:; +#X obj 623 713 metro; +#X obj 675 713 metro.seq; +#N canvas 10 720 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 metro.pattern; #X text 10 76 category:; @@ -82,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 707 pd info; +#X restore 10 720 pd info; #X connect 4 0 7 0; #X connect 5 0 7 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/metro.pattern.pddoc b/ceammc/ext/doc/metro.pattern.pddoc index 4cdfd96742..d9fb20c58b 100644 --- a/ceammc/ext/doc/metro.pattern.pddoc +++ b/ceammc/ext/doc/metro.pattern.pddoc @@ -18,14 +18,15 @@ 0.5 - list of time intervals + list of time intervals (in ms) - time intervals performed in a loop + time intervals (in ms) performed in a + loop current pattern index - sync mode - change pattern - after full cycle + sync mode - change pattern after full + cycle diff --git a/ceammc/ext/doc/metro.random-help.pd b/ceammc/ext/doc/metro.random-help.pd index 5cfa0af735..afadc7c503 100644 --- a/ceammc/ext/doc/metro.random-help.pd +++ b/ceammc/ext/doc/metro.random-help.pd @@ -57,7 +57,7 @@ Default value: 100\. Min value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 672 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 675 library: ceammc v0.9.4; +#X text 10 675 library: ceammc v0.9.6; #X text 520 687 see also:; #X obj 594 687 metro; #X obj 646 687 metro.pattern; @@ -66,7 +66,7 @@ Default value: 100\. Min value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 metro.random; #X text 10 76 category:; diff --git a/ceammc/ext/doc/metro.seq-help.pd b/ceammc/ext/doc/metro.seq-help.pd index a97a8786f4..e6cc78677e 100644 --- a/ceammc/ext/doc/metro.seq-help.pd +++ b/ceammc/ext/doc/metro.seq-help.pd @@ -21,7 +21,7 @@ #X text 150 405 float; #X obj 246 406 cnv 1 100 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 405 INTERVAL(ms): metro tempo in ms. Type: float. Min value: -1; +0; #X text 110 425 2\.; #X text 150 425 list; #X obj 246 426 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; @@ -35,7 +35,7 @@ on this beat. Type: list.; 0\. Min value: 0\.; #X msg 110 552 @interval; #X text 245 552 Get/Set interval between beats. Type: float. Units: -ms. Default value: 0\. Min value: 1\.; +ms. Default value: 0\. Min value: 0\.; #X msg 110 594 @pattern; #X text 245 594 Get/Set list of 1 and 0\. Where 1 means output bang on this beat. Type: list.; @@ -56,7 +56,7 @@ on this beat. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 738 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 741 library: ceammc v0.9.4; +#X text 10 741 library: ceammc v0.9.6; #X text 520 753 see also:; #X obj 594 753 metro; #X obj 646 753 metro.pattern; @@ -65,7 +65,7 @@ on this beat. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 metro.seq; #X text 10 76 category:; diff --git a/ceammc/ext/doc/metro.seq.pddoc b/ceammc/ext/doc/metro.seq.pddoc index 6dde928f45..cd6571ee3f 100644 --- a/ceammc/ext/doc/metro.seq.pddoc +++ b/ceammc/ext/doc/metro.seq.pddoc @@ -21,15 +21,15 @@ Easy way to build beat machines - metro tempo in + metro tempo in ms list of 1 and 0. Where 1 means output bang on this beat - list of 1 and 0. Where 1 means output bang on - this beat - + list of 1 and 0. Where 1 means output + bang on this beat + interval between beats current pattern index diff --git a/ceammc/ext/doc/midi.arp-help.pd b/ceammc/ext/doc/midi.arp-help.pd new file mode 100644 index 0000000000..4286e1d967 --- /dev/null +++ b/ceammc/ext/doc/midi.arp-help.pd @@ -0,0 +1,139 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 636 50 cnv 1 129 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 636 50 MIDI arpeggiator; +#X obj 1 1 cnv 5 765 40 empty empty midi.arp 20 20 0 20 -104026 -4096 +0; +#X obj 682 11 midi.arp; +#X obj 210 80 cnv 1 555 225 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 'up' - play notes from bottom to up; +#X text 215 105 'down' - play from top to bottom; +#X text 215 130 'tri' - play from bottom to up and then back; +#X text 215 155 'up1' - play top note \, then from bottom to up; +#X text 215 180 'down1' - play bottom note \, then from top to bottom; +#X text 215 205 'tri1' - play from up to bottom \, then back; +#X text 215 230 'random' - play random note \, excluding the current +one (no repeats); +#X text 215 270 'random1' - play random note (there can be repeats); +#X obj 50 333 notein; +#X obj 194 333 ui.dsp~; +#X obj 50 362 pack f f; +#X obj 50 391 ui.keyboard; +#X obj 88 463 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 174 463 ui.tab up down tri up1 down1 tri1 random random1 @size +400 14; +#X msg 88 492 @on \$1; +#X msg 174 492 @mode \$2; +#X floatatom 280 492 5 0 0 0 - - -; +#X msg 357 492 1; +#X msg 395 492 2; +#X msg 434 492 3; +#X msg 280 520 @t \$1; +#X msg 357 520 @min_notes \$1; +#X obj 50 549 midi.arp; +#X obj 50 578 msg note; +#X floatatom 165 578 5 0 0 0 - - -; +#X obj 50 607 sfizz~ \#sine; +#X obj 50 636 ui.hgain2~; +#X obj 50 664 dac~; +#X obj 20 713 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 718 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 753 1\.; +#X text 150 753 float; +#X obj 246 754 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 753 T(ms): time between arpeggio. Type: float. Range: 1\...1000; +#X obj 20 783 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 788 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 823 @external; +#X text 245 823 Get/Set use external clock. Type: bool. Default value: +0\.; +#X msg 110 852 @min_notes; +#X text 245 852 Get/Set number of minimal notes to perform arpeggio. +Type: int. Default value: 1\. Min value: 1\.; +#X msg 110 894 @mode; +#X text 245 894 Get/Set argpeggiator mode. Type: symbol. Default value: +up. Allowed values: up \, down \, tri \, up1 \, down1 \, tri1 \, random +\, random1\.; +#X msg 110 951 @on; +#X text 245 951 Get/Set arpeggiator state: on/off. Type: bool. Default +value: 1\.; +#X msg 110 993 @pass; +#X text 245 993 Get/Set bypass arpeggiator. Type: bool. Default value: +0\.; +#X msg 110 1022 @seed; +#X text 245 1022 Get/Set random seed value (to get reproducible random +series). Type: int. Default value: 0\. Min value: 0\.; +#X msg 110 1064 @t; +#X text 245 1064 Get/Set time between arpeggio. Type: float. Units: +ms. Default value: 100\. Range: 1\...1000\.; +#X obj 20 1116 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1121 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1122 1\.; +#X text 150 1122 *list*; +#X text 245 1122 NOTE VELOCITY.; +#X text 110 1142 2\.; +#X text 150 1142 *bang*; +#X text 245 1142 play next note in chord \, if @external = 1\.; +#X obj 20 1172 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1177 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1178 1\.; +#X text 245 1178 list: NOTE VELOCITY.; +#X text 110 1198 2\.; +#X text 245 1198 int: note index in chord.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; +#X obj 1 1248 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1251 library: ceammc v0.9.6; +#N canvas 10 1270 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 midi.arp; +#X text 10 76 category:; +#X text 120 76 midi; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 midi \, arpeggiator; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1270 pd info; +#X connect 13 0 15 0; +#X connect 13 1 15 1; +#X connect 15 0 16 0; +#X connect 17 0 19 0; +#X connect 18 0 20 0; +#X connect 21 0 25 0; +#X connect 22 0 26 0; +#X connect 23 0 26 0; +#X connect 24 0 26 0; +#X connect 16 0 27 0; +#X connect 19 0 27 0; +#X connect 20 0 27 0; +#X connect 25 0 27 0; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 27 1 29 0; +#X connect 28 0 30 0; +#X connect 30 0 31 0; +#X connect 30 1 31 1; +#X connect 31 0 32 0; +#X connect 31 1 32 1; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.arp.pddoc b/ceammc/ext/doc/midi.arp.pddoc new file mode 100644 index 0000000000..e2b4016922 --- /dev/null +++ b/ceammc/ext/doc/midi.arp.pddoc @@ -0,0 +1,86 @@ + + + + midi.arp + + + Serge Poltavsky + + MIDI arpeggiator + GPL3 or later + ceammc + midi + midi arpeggiator + 0.9.6 + + + 'up' - play notes from bottom to up + 'down' - play from top to bottom + 'tri' - play from bottom to up and then back + 'up1' - play top note, then from bottom to up + 'down1' - play bottom note, then from top to bottom + 'tri1' - play from up to bottom, then back + 'random' - play random note, excluding the current one (no repeats) + 'random1' - play random note (there can be repeats) + + + time + between arpeggio + + + time between arpeggio + argpeggiator mode + random seed value (to get + reproducible random series) + use external clock + number of minimal notes + to perform arpeggio + arpeggiator state: on/off + bypass arpeggiator + + + + NOTE VELOCITY + + + play next note in chord, if @external = 1 + + + + list: NOTE VELOCITY + int: note index in chord + + + + + + + + diff --git a/ceammc/ext/doc/midi.cc-help.pd b/ceammc/ext/doc/midi.cc-help.pd index 60f323d42a..da521614f6 100644 --- a/ceammc/ext/doc/midi.cc-help.pd +++ b/ceammc/ext/doc/midi.cc-help.pd @@ -61,13 +61,13 @@ Default value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 731 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 734 library: ceammc v0.9.4; +#X text 10 734 library: ceammc v0.9.6; #N canvas 10 753 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.cc; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi.clock-help.pd b/ceammc/ext/doc/midi.clock-help.pd index 010fc751e2..f4d0c82332 100644 --- a/ceammc/ext/doc/midi.clock-help.pd +++ b/ceammc/ext/doc/midi.clock-help.pd @@ -60,13 +60,13 @@ note etc. Type: int. Default value: 0\. Allowed values: 0 \, 4 \, 8 #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 719 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 722 library: ceammc v0.9.4; +#X text 10 722 library: ceammc v0.9.6; #N canvas 10 741 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.clock; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi.ctl2str-help.pd b/ceammc/ext/doc/midi.ctl2str-help.pd index e6beb7e7d6..b2a5c9c4e4 100644 --- a/ceammc/ext/doc/midi.ctl2str-help.pd +++ b/ceammc/ext/doc/midi.ctl2str-help.pd @@ -13,38 +13,37 @@ #X msg 213 118 120; #X floatatom 50 147 5 0 0 0 - - -; #X obj 50 176 midi.ctl->str @symbol; -#X obj 50 205 msg set; -#X msg 50 234 ; -#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 205 ui.dt; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 323 @symbol; -#X text 245 323 output as symbol instead of string by default. Default +#X msg 110 294 @symbol; +#X text 245 294 output as symbol instead of string by default. Default value: 0\.; -#X obj 20 375 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 380 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 346 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 351 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 381 1\.; -#X text 150 381 *float*; -#X text 245 381 Standart MIDI controller number [0-127].; -#X obj 20 411 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 416 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 352 1\.; +#X text 150 352 *float*; +#X text 245 352 Standart MIDI controller number [0-127].; +#X obj 20 382 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 387 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 417 1\.; -#X text 245 417 output Standart MIDI controller name (string or symbol).; +#X text 110 388 1\.; +#X text 245 388 output Standart MIDI controller name (string or symbol).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.ctl2str; #X text 10 76 category:; @@ -70,5 +69,4 @@ https://github.com/uliss/pure-data; #X connect 8 0 10 0; #X connect 9 0 10 0; #X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; \ No newline at end of file +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.ctl2str.pddoc b/ceammc/ext/doc/midi.ctl2str.pddoc index 8d26d42b2c..b25f7158f6 100644 --- a/ceammc/ext/doc/midi.ctl2str.pddoc +++ b/ceammc/ext/doc/midi.ctl2str.pddoc @@ -17,8 +17,8 @@ 0.4 - output as symbol instead of string by - default + output as symbol + instead of string by default @@ -37,9 +37,7 @@ | [midi.ctl->str @symbol] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/midi.event2ctl-help.pd b/ceammc/ext/doc/midi.event2ctl-help.pd index aee9c89186..24729d979e 100644 --- a/ceammc/ext/doc/midi.event2ctl-help.pd +++ b/ceammc/ext/doc/midi.event2ctl-help.pd @@ -16,33 +16,32 @@ pair; #X msg 146 234 stop; #X obj 50 262 midi.track @join @speed 0.7; #X obj 50 291 midi.ev->ctl; -#X obj 50 320 msg set; -#X msg 50 349 ; -#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 320 ui.dt; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 404 1\.; -#X text 245 404 MidiEvent message.; -#X obj 20 434 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 439 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 375 1\.; +#X text 245 375 MidiEvent message.; +#X obj 20 405 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 410 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 440 1\.; -#X text 245 440 output pair: controller number \, value.; -#X text 110 460 2\.; -#X text 245 460 track number.; +#X text 110 411 1\.; +#X text 245 411 output pair: controller number \, value.; +#X text 110 431 2\.; +#X text 245 431 track number.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 510 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 513 library: ceammc v0.9.4; -#N canvas 10 532 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.event2ctl; #X text 10 76 category:; @@ -61,7 +60,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 532 pd info; +#X restore 10 527 pd info; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; @@ -69,5 +68,4 @@ https://github.com/uliss/pure-data; #X connect 9 0 11 0; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 13 0 14 0; \ No newline at end of file +#X connect 12 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.event2ctl.pddoc b/ceammc/ext/doc/midi.event2ctl.pddoc index 355d62c958..4344748995 100644 --- a/ceammc/ext/doc/midi.event2ctl.pddoc +++ b/ceammc/ext/doc/midi.event2ctl.pddoc @@ -42,9 +42,7 @@ | [midi.ev->ctl] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/midi.event2note-help.pd b/ceammc/ext/doc/midi.event2note-help.pd index cb47f555d8..dba9454285 100644 --- a/ceammc/ext/doc/midi.event2note-help.pd +++ b/ceammc/ext/doc/midi.event2note-help.pd @@ -9,41 +9,49 @@ #X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 50 147 openpanel; +#X msg 165 147 symbol midi/bach-wtk2-prelude2.mid; #X msg 50 176 read \$1 \, bang; #X obj 50 205 midi.file; -#X msg 78 234 play; -#X msg 146 234 stop; -#X obj 50 262 midi.track @join @speed 0.7; -#X obj 50 291 midi.ev->note; -#X obj 50 320 msg set; -#X msg 50 349 ; -#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 280 205 ui.hsl 0.5 2 @show_value 1; +#X msg 78 234 reset \, play; +#X msg 213 234 stop; +#X msg 280 234 @speed \$1; +#X obj 50 277 midi.track @join @speed 0.7; +#X obj 50 305 midi.ev->note; +#X obj 203 305 loadbang; +#X obj 318 305 ui.dsp~; +#X obj 50 334 msg note; +#X msg 203 334 prog 0 1; +#X obj 50 363 fluid~ sf2/waves.sf2 @gain 1; +#X obj 50 392 ui.hgain2~; +#X obj 50 421 dac~; +#X obj 20 470 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 475 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 404 1\.; -#X text 245 404 MidiEvent message.; -#X obj 20 434 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 439 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 476 1\.; +#X text 245 476 MidiEvent message.; +#X obj 20 506 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 511 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 440 1\.; -#X text 245 440 output pair: note \, velocity.; -#X text 110 460 2\.; -#X text 245 460 note duration in milliseconds.; -#X text 110 480 3\.; -#X text 245 480 note track.; +#X text 110 512 1\.; +#X text 245 512 pair: note \, velocity.; +#X text 110 532 2\.; +#X text 245 532 note duration in milliseconds.; +#X text 110 552 3\.; +#X text 245 552 note track.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 530 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 533 library: ceammc v0.9.4; -#N canvas 10 552 400 290 info 0; +#X obj 1 602 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 605 library: ceammc v0.9.6; +#N canvas 10 624 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.event2note; #X text 10 76 category:; @@ -62,13 +70,22 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 552 pd info; +#X restore 10 624 pd info; #X connect 5 0 6 0; -#X connect 6 0 7 0; +#X connect 6 0 8 0; #X connect 7 0 8 0; -#X connect 8 0 11 0; -#X connect 9 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 13 0 14 0; \ No newline at end of file +#X connect 8 0 9 0; +#X connect 10 0 13 0; +#X connect 9 0 14 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 18 0; +#X connect 16 0 19 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 20 1 21 1; +#X connect 21 0 22 0; +#X connect 21 1 22 1; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.event2note.pddoc b/ceammc/ext/doc/midi.event2note.pddoc index 8b24a645bd..8ae6aa9f26 100644 --- a/ceammc/ext/doc/midi.event2note.pddoc +++ b/ceammc/ext/doc/midi.event2note.pddoc @@ -22,7 +22,7 @@ - output pair: note, velocity + pair: note, velocity note duration in milliseconds note track @@ -31,21 +31,26 @@ note] -| -[msg set] -| -[ ( +[midi.ev->note] [loadbang] [ui.dsp~] +| | +[msg note] [prog 0 1( +| | +[fluid~ sf2/waves.sf2 @gain 1] +*|* +[ui.hgain2~] +*|* +[dac~] ]]> diff --git a/ceammc/ext/doc/midi.event2prg-help.pd b/ceammc/ext/doc/midi.event2prg-help.pd index eef7223c1a..a6aa6141cd 100644 --- a/ceammc/ext/doc/midi.event2prg-help.pd +++ b/ceammc/ext/doc/midi.event2prg-help.pd @@ -16,31 +16,32 @@ #X obj 50 234 midi.track @join; #X obj 50 262 midi.ev->prg; #X obj 50 291 midi.prg->str @symbol; -#X obj 50 320 msg set; -#X msg 50 349 ; -#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 50 320 ui.dt; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 404 1\.; -#X text 245 404 MidiEvent message.; -#X obj 20 434 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 439 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 375 1\.; +#X text 245 375 MidiEvent message.; +#X obj 20 405 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 410 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 440 1\.; -#X text 245 440 output MIDI patch number.; +#X text 110 411 1\.; +#X text 245 411 int: MIDI program change value.; +#X text 110 431 2\.; +#X text 245 431 int: MIDI track.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.event2prg; #X text 10 76 category:; @@ -68,5 +69,4 @@ https://github.com/uliss/pure-data; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 13 0; -#X connect 13 0 14 0; -#X connect 14 0 15 0; \ No newline at end of file +#X connect 13 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.event2prg.pddoc b/ceammc/ext/doc/midi.event2prg.pddoc index 0b2ebc3f8d..fdeb44eb5a 100644 --- a/ceammc/ext/doc/midi.event2prg.pddoc +++ b/ceammc/ext/doc/midi.event2prg.pddoc @@ -22,7 +22,8 @@ - output MIDI patch number + int: MIDI program change value + int: MIDI track @@ -41,9 +42,7 @@ | [midi.prg->str @symbol] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/midi.file-help.pd b/ceammc/ext/doc/midi.file-help.pd index 0e7d846b4a..0ec32c7602 100644 --- a/ceammc/ext/doc/midi.file-help.pd +++ b/ceammc/ext/doc/midi.file-help.pd @@ -21,62 +21,65 @@ #X obj 50 406 *~; #X obj 50 435 dac~; #X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 489 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 524 @filename; -#X text 245 524 Get/Set current filename. Type: symbol.; -#X msg 110 553 @length_beat; -#X text 245 553 (readonly) Get file length in quarters. Type: float. +#X text 110 524 1\.; +#X text 150 524 symbol; +#X obj 246 525 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 524 FILENAME: initial MIDI filename. Type: symbol.; +#X obj 20 554 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 559 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 594 @filename; +#X text 245 594 Get/Set current filename. Type: symbol.; +#X msg 110 623 @length_beat; +#X text 245 623 (readonly) Get file length in quarters. Type: float. Default value: 0\.; -#X msg 110 595 @length_sec; -#X text 245 595 (readonly) Get file length. Type: float. Units: sec. +#X msg 110 665 @length_sec; +#X text 245 665 (readonly) Get file length. Type: float. Units: sec. Default value: 0\.; -#X msg 110 637 @length_tick; -#X text 245 637 (readonly) Get file length in ticks. Type: int. Default +#X msg 110 707 @length_tick; +#X text 245 707 (readonly) Get file length in ticks. Type: int. Default value: 0\.; -#X msg 110 679 @tempo; -#X text 245 679 (readonly) Get midi tempo in ticks per quarter. Type: +#X msg 110 749 @tempo; +#X text 245 749 (readonly) Get midi tempo in ticks per quarter. Type: int. Default value: 120\.; -#X msg 110 721 @tracks; -#X text 245 721 (readonly) Get number of tracks. Type: int. Default +#X msg 110 791 @tracks; +#X text 245 791 (readonly) Get number of tracks. Type: int. Default value: 1\.; -#X obj 20 773 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 778 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 843 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 848 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 813 clear; -#X text 245 813 removes all midi file content.; -#X msg 110 840 read; -#X text 245 840 read specified midi file. No output.; -#X msg 110 867 reset; -#X text 245 867 removes all midi file content.; -#X msg 110 894 seek; -#X text 245 894 removes all midi file content.; -#X msg 110 921 write; -#X text 245 921 write to specified midi file.; -#X obj 20 958 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 963 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 883 clear; +#X text 245 883 removes all midi file content.; +#X msg 110 910 read; +#X text 245 910 read specified midi file. No output.; +#X msg 110 937 write; +#X text 245 937 write to specified midi file.; +#X obj 20 974 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 979 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 964 1\.; -#X text 150 964 *bang*; -#X text 245 964 output MidiFile data type.; -#X obj 20 994 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 999 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 980 1\.; +#X text 150 980 *bang*; +#X text 245 980 output MidiFile data type.; +#X obj 20 1010 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1015 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1000 1\.; -#X text 245 1000 MidiFile data type.; +#X text 110 1016 1\.; +#X text 245 1016 MidiStream data type.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 1050 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1053 library: ceammc v0.9.4; -#N canvas 10 1072 400 290 info 0; +#X obj 1 1066 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1069 library: ceammc v0.9.6; +#N canvas 10 1088 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.file; #X text 10 76 category:; @@ -95,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1072 pd info; +#X restore 10 1088 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/midi.file.pddoc b/ceammc/ext/doc/midi.file.pddoc index 92b0962928..d1ce94b305 100644 --- a/ceammc/ext/doc/midi.file.pddoc +++ b/ceammc/ext/doc/midi.file.pddoc @@ -13,25 +13,26 @@ midi file 0.4 + + initial MIDI filename + current filename - number of + number of tracks - midi tempo in ticks + midi tempo in ticks per quarter - + file length - file length in + file length in ticks - file length in + file length in quarters read specified midi file. No output write to specified midi file removes all midi file content - removes all midi file content - removes all midi file content @@ -39,7 +40,7 @@ - MidiFile data type + MidiStream data type diff --git a/ceammc/ext/doc/midi.kbd-help.pd b/ceammc/ext/doc/midi.kbd-help.pd index d9fb21219c..0201fb6a12 100644 --- a/ceammc/ext/doc/midi.kbd-help.pd +++ b/ceammc/ext/doc/midi.kbd-help.pd @@ -27,9 +27,9 @@ custom one; #X text 245 463 LAYOUT: layout name. Allowed values: qwerty \, names \, custom. . Type: symbol.; #X text 110 498 2\.; -#X text 150 498 int; +#X text 150 498 bool; #X obj 246 499 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 498 ON: init on/off state. Type: int.; +#X text 245 498 ON: init on/off state. Type: bool.; #X obj 20 528 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 533 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -43,44 +43,43 @@ qwerty. Allowed values: qwerty \, names \, custom.; #X text 245 652 Get/Set output octave. Type: int. Default value: 4\. Range: 0\...8\.; #X msg 110 694 @on; -#X text 245 694 Get/Set on/off state. Type: int. Default value: 1\. -Allowed values: 0 \, 1\.; -#X msg 110 736 @vel; -#X text 245 736 Get/Set output velocity. Type: float. Default value: +#X text 245 694 Get/Set on/off state. Type: bool. Default value: 1\.; +#X msg 110 723 @vel; +#X text 245 723 Get/Set output velocity. Type: float. Default value: 100\. Range: 0\...127\.; -#X obj 20 788 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 793 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 775 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 780 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 828 custom; -#X text 245 828 set custom. Arguments are:; -#X obj 255 851 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 851 KEYSTR: key string. Type: symbol.; -#X obj 20 886 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 891 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 815 custom; +#X text 245 815 set custom. Arguments are:; +#X obj 255 838 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 838 KEYSTR: key string. Type: symbol.; +#X obj 20 873 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 878 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 892 1\.; -#X text 245 892 control input.; -#X text 110 912 2\.; -#X text 150 912 *int*; -#X text 245 912 1 or 0: turn on/off.; -#X obj 20 942 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 947 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 879 1\.; +#X text 245 879 control input.; +#X text 110 899 2\.; +#X text 150 899 *int*; +#X text 245 899 1 or 0: turn on/off.; +#X obj 20 929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 934 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 948 1\.; -#X text 245 948 MIDI output: NOTE VEL.; +#X text 110 935 1\.; +#X text 245 935 MIDI output: NOTE VEL.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 998 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1001 library: ceammc v0.9.4; -#N canvas 10 1020 400 290 info 0; +#X obj 1 985 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 988 library: ceammc v0.9.6; +#N canvas 10 1007 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.kdb; #X text 10 76 category:; @@ -99,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1020 pd info; +#X restore 10 1007 pd info; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 9 0 12 0; diff --git a/ceammc/ext/doc/midi.kbd.pddoc b/ceammc/ext/doc/midi.kbd.pddoc index 785d4b4f1f..3e15ea9718 100644 --- a/ceammc/ext/doc/midi.kbd.pddoc +++ b/ceammc/ext/doc/midi.kbd.pddoc @@ -18,7 +18,7 @@ layout name - init on/off state + init on/off state set custom @@ -33,7 +33,7 @@ current layout custom layout (Dict data type) - on/off state + on/off state diff --git a/ceammc/ext/doc/midi.key2str-help.pd b/ceammc/ext/doc/midi.key2str-help.pd index 7ed00499eb..6ebf50c3e0 100644 --- a/ceammc/ext/doc/midi.key2str-help.pd +++ b/ceammc/ext/doc/midi.key2str-help.pd @@ -11,41 +11,40 @@ #X msg 290 118 @tonality E; #X msg 424 118 @tonality C; #X obj 50 176 midi.key->str @symbol; -#X obj 50 205 msg set; -#X msg 50 234 ; -#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 205 ui.dt; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 323 @symbol; -#X text 245 323 output as symbol instead of string by default. Default +#X msg 110 294 @symbol; +#X text 245 294 output as symbol instead of string by default. Default value: 0\.; -#X msg 110 365 @tonality; -#X text 245 365 Get/Set current tonality. Type: symbol. Default value: +#X msg 110 336 @tonality; +#X text 245 336 Get/Set current tonality. Type: list. Default value: C major.; -#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 375 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 380 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 423 1\.; -#X text 150 423 *float*; -#X text 245 423 standart MIDI key number [0-127].; -#X obj 20 453 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 458 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 381 1\.; +#X text 150 381 *float*; +#X text 245 381 standart MIDI key number [0-127].; +#X obj 20 411 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 416 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 459 1\.; -#X text 245 459 output key name.; +#X text 110 417 1\.; +#X text 245 417 output key name.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 509 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 512 library: ceammc v0.9.4; -#N canvas 10 531 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.key2str; #X text 10 76 category:; @@ -64,10 +63,9 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 531 pd info; +#X restore 10 527 pd info; #X connect 5 0 9 0; #X connect 6 0 9 0; #X connect 7 0 9 0; #X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 10 0 11 0; \ No newline at end of file +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.key2str.pddoc b/ceammc/ext/doc/midi.key2str.pddoc index 7668a34ff5..6d2b627f22 100644 --- a/ceammc/ext/doc/midi.key2str.pddoc +++ b/ceammc/ext/doc/midi.key2str.pddoc @@ -17,9 +17,9 @@ 0.4 - output as symbol instead of string by - default - current tonality + output as symbol + instead of string by default + current tonality @@ -38,9 +38,7 @@ | | | | [midi.key->str @symbol ] | -[msg set] -| -[ ( +[ui.dt] ]]> diff --git a/ceammc/ext/doc/midi.modus-help.pd b/ceammc/ext/doc/midi.modus-help.pd new file mode 100644 index 0000000000..9da68ecae8 --- /dev/null +++ b/ceammc/ext/doc/midi.modus-help.pd @@ -0,0 +1,113 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 469 50 cnv 1 296 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 469 50 snap/skip midi pitches according modus; +#X obj 1 1 cnv 5 765 40 empty empty midi.modus 20 20 0 20 -104026 +-4096 0; +#X obj 668 11 midi.modus; +#X obj 50 118 ui.keyboard; +#X obj 50 205 midi.modus @scale minor_pentatonic; +#X obj 50 234 msg note 1; +#X obj 50 262 fluid~ sf2/waves.sf2; +#X obj 50 291 ui.hgain2~; +#X obj 280 291 ui.dsp~; +#X obj 50 320 dac~; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 409 1\.; +#X text 150 409 atom; +#X obj 246 410 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 ROOT: root key. Type: atom.; +#X text 110 429 2\.; +#X text 150 429 symbol; +#X obj 246 430 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 429 SCALE: modus scale. Type: symbol.; +#X obj 20 459 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 464 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 499 @mode; +#X text 245 499 Get/Set snap or skip incoming pitches. Type: symbol. +Default value: snap. Allowed values: snap \, skip.; +#X msg 110 541 @root; +#X text 245 541 Get/Set root key. Type: atom. Default value: C. Allowed +values: Cbb \, Cb \, C \, C# \, C## \, Dbb \, Db \, D \, D# \, D## +\, Ebb \, Eb \, E \, E# \, E## \, Fbb \, Fb \, F \, F# \, F## \, Gbb +\, Gb \, G \, G# \, G## \, Abb \, Ab \, A \, A# \, A## \, Bbb \, Bb +\, B \, B# \, B##.; +#X msg 110 613 @scale; +#X text 245 613 Get/Set modus scale. Type: symbol. Default value: chromatic. +Allowed values: ahirbhairav \, indian \, kurd \, diminished2 \, partch_u6 +\, gong \, partch_o4 \, rast_desc \, nairuz \, hirajoshi \, hex_major6 +\, farahfaza \, minor \, pelog \, partch_o3 \, partch_u1 \, partch_u3 +\, yakah \, kumoi \, nikriz \, yakah_desc \, lydian \, whole \, ritusen +\, jiharkah \, major_melodic \, augmented2 \, locrian \, mustar \, +mixolydian \, nahawand \, partch_o1 \, ionian \, partch_u5 \, hex_dorian +\, nawa_athar \, hex_aeolian \, minor_harmonic \, minor_melodic \, +yu \, minor_melodic_desc \, minor_lydian \, zhi \, dorian \, sikah_desc +\, marva \, hijaz \, partch_o6 \, major_pentatonic \, partch_u4 \, +diminished \, shang \, partch_o5 \, whole_leading \, iraq \, major_harmonic +\, bartok \, zamzam \, super_locrian \, chromatic24 \, ajam \, prometheus +\, atharKurd \, chinese \, mahur \, augmented \, jiao \, egyptian \, +suznak \, hijaz_kar \, saba \, kijaz_kar_kurd \, husseini \, huzam +\, major_neapolitan \, shawq_afza \, hex_phrygian \, minor_pentatonic +\, bastanikar \, hex_sus \, bayati \, minor_romanian \, major_locrian +\, rast \, scriabin \, major \, murassah \, ushaq_mashri \, partch_u2 +\, sikah \, partch_o2 \, nahawand_desc \, minor_hungarian \, iwato +\, chromatic \, aeolian \, enigmatic \, hindu \, phrygian \, zanjaran +\, karjighar \, spanish \, purvi \, minor_neapolitan \, bhairav \, +hijaz_desc \, todi \, hex_major7\.; +#X obj 20 966 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 971 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 972 1\.; +#X text 150 972 *float*; +#X text 245 972 note value.; +#X text 150 992 *list*; +#X text 245 992 NOTE VELOCITY [DUR] list.; +#X obj 20 1022 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1027 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1028 1\.; +#X text 245 1028 accepted note or NOTE VELOCITY [DUR] list.; +#X text 110 1048 2\.; +#X text 245 1048 discarded message.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; +#X obj 1 1098 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1101 library: ceammc v0.9.6; +#N canvas 10 1120 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 midi.modus; +#X text 10 76 category:; +#X text 120 76 midi; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 midi \, modus \, tonality \, pitch; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1120 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 1 8 1; +#X connect 8 0 10 0; +#X connect 8 1 10 1; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.modus.pddoc b/ceammc/ext/doc/midi.modus.pddoc new file mode 100644 index 0000000000..aa0383ffeb --- /dev/null +++ b/ceammc/ext/doc/midi.modus.pddoc @@ -0,0 +1,62 @@ + + + + midi.modus + + + Serge Poltavsky + + snap/skip midi pitches according modus + GPL3 or later + ceammc + midi + midi modus tonality pitch + 0.9.5 + + + root key + modus scale + + + + root key + + modus scale + snap or skip + incoming pitches + + + + note value + NOTE VELOCITY [DUR] list + + + + accepted note or NOTE VELOCITY [DUR] list + discarded message + + + + + + + + diff --git a/ceammc/ext/doc/midi.oct-help.pd b/ceammc/ext/doc/midi.oct-help.pd index a34bcfa5c0..cfc6888e98 100644 --- a/ceammc/ext/doc/midi.oct-help.pd +++ b/ceammc/ext/doc/midi.oct-help.pd @@ -25,7 +25,7 @@ #X text 110 409 1\.; #X text 150 409 int; #X obj 246 410 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 OCT: octave transposition. Type: int. Range: -8\...8; +#X text 245 409 OCT: octave transposition. Type: int. Range: -11\...11; #X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -64,13 +64,13 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 805 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 808 library: ceammc v0.9.4; +#X text 10 808 library: ceammc v0.9.6; #N canvas 10 827 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.oct; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi.oct.pddoc b/ceammc/ext/doc/midi.oct.pddoc index 87e3761794..58c62f5553 100644 --- a/ceammc/ext/doc/midi.oct.pddoc +++ b/ceammc/ext/doc/midi.oct.pddoc @@ -14,7 +14,7 @@ 0.9.2 - octave + octave transposition @@ -24,7 +24,7 @@ mode alias to @mode set alias to @mode transpose - random octave range. Arguments are: MIN + random octave range. Arguments are: MIN MAX. diff --git a/ceammc/ext/doc/midi.prg2str-help.pd b/ceammc/ext/doc/midi.prg2str-help.pd index d701086388..60f4389e8d 100644 --- a/ceammc/ext/doc/midi.prg2str-help.pd +++ b/ceammc/ext/doc/midi.prg2str-help.pd @@ -11,43 +11,41 @@ #X floatatom 50 147 5 0 0 0 - - -; #X obj 50 176 midi.prg->str @symbol; #X obj 280 176 midi.prg->str @symbol @family; -#X obj 50 205 msg set; -#X obj 280 205 msg set; -#X msg 50 234 ; -#X msg 280 234 ; -#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 205 ui.dt; +#X obj 280 205 ui.dt; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 323 @family; -#X text 245 323 output family name instead of instrument name. Default +#X msg 110 294 @family; +#X text 245 294 output family name instead of instrument name. Default value: 0\.; -#X msg 110 365 @symbol; -#X text 245 365 output as symbol instead of string by default. Default +#X msg 110 336 @symbol; +#X text 245 336 output as symbol instead of string by default. Default value: 0\.; -#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 393 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 423 1\.; -#X text 150 423 *float*; -#X text 245 423 General MIDI instrument number [1-128].; -#X obj 20 453 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 458 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 394 1\.; +#X text 150 394 *float*; +#X text 245 394 General MIDI instrument number [1-128].; +#X obj 20 424 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 429 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 459 1\.; -#X text 245 459 output General MIDI instrument name (string or symbol).; +#X text 110 430 1\.; +#X text 245 430 output General MIDI instrument name (string or symbol).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 509 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 512 library: ceammc v0.9.4; -#N canvas 10 531 400 290 info 0; +#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 508 library: ceammc v0.9.6; +#N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.prg2str; #X text 10 76 category:; @@ -66,12 +64,10 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 531 pd info; +#X restore 10 527 pd info; #X connect 5 0 7 0; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 7 0 9 0; #X connect 8 0 10 0; -#X connect 9 0 11 0; -#X connect 10 0 12 0; -#X connect 11 0 13 0; \ No newline at end of file +#X connect 9 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.prg2str.pddoc b/ceammc/ext/doc/midi.prg2str.pddoc index be9039aef5..4e9f8c3c52 100644 --- a/ceammc/ext/doc/midi.prg2str.pddoc +++ b/ceammc/ext/doc/midi.prg2str.pddoc @@ -17,10 +17,10 @@ 0.4 - output as symbol instead of string by - default - output family name instead of - instrument name + output as symbol + instead of string by default + output family name + instead of instrument name @@ -39,9 +39,7 @@ | | [midi.prg->str @symbol] [midi.prg->str @symbol @family] | | -[msg set] [msg set] -| | -[ ( [ ( +[ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/midi.split-help.pd b/ceammc/ext/doc/midi.split-help.pd new file mode 100644 index 0000000000..b6e5d46fd0 --- /dev/null +++ b/ceammc/ext/doc/midi.split-help.pd @@ -0,0 +1,83 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 621 50 cnv 1 144 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 621 50 midi note splitter; +#X obj 1 1 cnv 5 765 40 empty empty midi.split 20 20 0 20 -104026 +-4096 0; +#X obj 668 11 midi.split; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Split midi note messages at specified pitch values; +#X obj 50 143 ui.keyboard; +#X obj 50 215 midi.split 40 60 80; +#X obj 50 244 ui.dt; +#X obj 107 273 ui.dt; +#X obj 165 302 ui.dt; +#X obj 222 330 ui.dt; +#X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 384 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 419 1\.; +#X text 150 419 list; +#X obj 246 420 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 419 NOTES: list of note values (split points). Type: list.; +#X obj 20 449 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 454 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 489 @points; +#X text 245 489 (readonly) Get split points. Should be in strict ascending +order. Type: list.; +#X obj 20 541 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 546 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 547 1\.; +#X text 150 547 *list*; +#X text 245 547 NOTE VELOCITY [DUR] list.; +#X obj 20 577 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 582 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 583 1\.; +#X text 245 583 midi pitches that are less than first split point.; +#X text 110 603 ....; +#X text 245 603 ...; +#X text 110 623 n.; +#X text 245 623 midi pitches that are greater or equal than N-th split +point and less then N+1\.; +#X text 110 658 n+1\.; +#X text 245 658 notes that are greater or equal last split point.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; +#X obj 1 708 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 711 library: ceammc v0.9.6; +#N canvas 10 730 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 midi.split; +#X text 10 76 category:; +#X text 120 76 midi; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 midi \, note \, splitter; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 730 pd info; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 1 9 0; +#X connect 7 2 10 0; +#X connect 7 3 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.split.pddoc b/ceammc/ext/doc/midi.split.pddoc new file mode 100644 index 0000000000..fb07d22365 --- /dev/null +++ b/ceammc/ext/doc/midi.split.pddoc @@ -0,0 +1,63 @@ + + + + midi.split + + + Serge Poltavsky + + midi note splitter + GPL3 or later + ceammc + midi + midi note splitter + 0.9.5 + + + Split midi note messages at specified pitch values + + + list of note values (split points) + + + split points. Should + be in strict ascending order + + + + NOTE VELOCITY [DUR] list + + + + midi pitches that are less than first split point + ... + midi pitches that are greater or equal than N-th split point and + less then N+1 + notes that are greater or equal last split point + + + +a] +[X x:1->b] +[X x:2->c] +[X x:3->d] +]]> + + + + diff --git a/ceammc/ext/doc/midi.sustain-help.pd b/ceammc/ext/doc/midi.sustain-help.pd index eaae45dec5..2287d8a380 100644 --- a/ceammc/ext/doc/midi.sustain-help.pd +++ b/ceammc/ext/doc/midi.sustain-help.pd @@ -26,37 +26,36 @@ -49933 0; #X msg 110 529 @ctlin; #X text 245 529 Get/Set listen to CTL64 from MIDI controller. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 571 @on; -#X text 245 571 Get/Set pedal state. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X obj 20 623 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 628 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 571 Get/Set pedal state. Type: bool. Default value: 0\.; +#X obj 20 610 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 615 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 629 1\.; -#X text 150 629 *list*; -#X text 245 629 MIDI input: NOTE VEL.; -#X text 110 649 2\.; -#X text 150 649 *float*; -#X text 245 649 turn sustain on/off (1/0).; -#X obj 20 679 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 684 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 616 1\.; +#X text 150 616 *list*; +#X text 245 616 MIDI input: NOTE VEL.; +#X text 110 636 2\.; +#X text 150 636 *float*; +#X text 245 636 turn sustain on/off (1/0).; +#X obj 20 666 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 671 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 685 1\.; -#X text 245 685 MIDI output: NOTE VEL.; +#X text 110 672 1\.; +#X text 245 672 MIDI output: NOTE VEL.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 735 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 738 library: ceammc v0.9.4; -#N canvas 10 757 400 290 info 0; +#X obj 1 722 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 725 library: ceammc v0.9.6; +#N canvas 10 744 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.sustain; #X text 10 76 category:; @@ -75,7 +74,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 757 pd info; +#X restore 10 744 pd info; #X connect 7 0 9 0; #X connect 8 0 9 1; #X connect 9 0 10 0; diff --git a/ceammc/ext/doc/midi.sustain.pddoc b/ceammc/ext/doc/midi.sustain.pddoc index 6974865cb3..e53a0d1d57 100644 --- a/ceammc/ext/doc/midi.sustain.pddoc +++ b/ceammc/ext/doc/midi.sustain.pddoc @@ -21,8 +21,8 @@ initial state - pedal state - listen to CTL64 from MIDI + pedal state + listen to CTL64 from MIDI controller diff --git a/ceammc/ext/doc/midi.sysex-help.pd b/ceammc/ext/doc/midi.sysex-help.pd index 84dc98a084..7df017d3ea 100644 --- a/ceammc/ext/doc/midi.sysex-help.pd +++ b/ceammc/ext/doc/midi.sysex-help.pd @@ -28,13 +28,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.sysex; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi.track-help.pd b/ceammc/ext/doc/midi.track-help.pd index b86392b699..e0bfc78d10 100644 --- a/ceammc/ext/doc/midi.track-help.pd +++ b/ceammc/ext/doc/midi.track-help.pd @@ -8,6 +8,7 @@ #X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 50 147 openpanel; +#X msg 165 147 symbol midi/bach-wtk2-prelude2.mid; #X msg 50 176 read \$1 \, bang; #X obj 50 205 midi.file; #X msg 78 234 play; @@ -19,71 +20,83 @@ #X obj 117 349 / 100; #X obj 50 378 osc~; #X obj 50 406 *~; -#X obj 50 435 dac~; -#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 435 ui.hgain2~; +#X obj 50 464 dac~; +#X obj 20 513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 518 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 524 @current; -#X text 245 524 (readonly) Get current event tick index. Type: int. +#X text 110 553 1\.; +#X text 150 553 int; +#X obj 246 554 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 553 TRACK: init track number. Type: int. Min value: 0; +#X obj 20 583 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 588 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 623 @current; +#X text 245 623 (readonly) Get current event tick index. Type: int. Default value: 0\.; -#X msg 110 566 @join; -#X text 245 566 join all tracks into one. Default value: 0\.; -#X msg 110 595 @nevents; -#X text 245 595 (readonly) Get number of events in track. Type: int. +#X msg 110 665 @join; +#X text 245 665 join all tracks into one. Default value: 0\.; +#X msg 110 694 @nevents; +#X text 245 694 (readonly) Get number of events in track. Type: int. Default value: 0\.; -#X msg 110 637 @speed; -#X text 245 637 Get/Set play speed factor. Type: float. Default value: +#X msg 110 736 @speed; +#X text 245 736 Get/Set play speed factor. Type: float. Default value: 1\. Min value: 0.01\.; -#X msg 110 679 @state; -#X text 245 679 (readonly) Get current state. 0: stopped \, 1: playing +#X msg 110 778 @state; +#X text 245 778 (readonly) Get current state. 0: stopped \, 1: playing \, 2: paused. Type: int. Default value: 0\. Allowed values: 0 \, 1 \, 2\.; -#X msg 110 736 @tempo; -#X text 245 736 (readonly) Get current tempo in TPQ. Type: int. Default +#X msg 110 835 @tempo; +#X text 245 835 (readonly) Get current tempo in TPQ. Type: int. Default value: 120\.; -#X msg 110 778 @track; -#X text 245 778 Get/Set track number. Type: int. Default value: 0\. +#X msg 110 877 @track; +#X text 245 877 Get/Set track number. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 830 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 835 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 929 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 934 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 870 next; -#X text 245 870 moves playing position to next event. No output.; -#X msg 110 897 pause; -#X text 245 897 pause playing.; -#X msg 110 924 play; -#X text 245 924 start playing.; -#X msg 110 951 reset; -#X text 245 951 set current event index to zero.; -#X msg 110 978 seek; -#X text 245 978 seek to specified tick.; -#X msg 110 1005 stop; -#X text 245 1005 stop playing.; -#X obj 20 1042 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1047 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 969 next; +#X text 245 969 moves playing position to next event. No output.; +#X msg 110 996 pause; +#X text 245 996 pause playing.; +#X msg 110 1023 play; +#X text 245 1023 start playing.; +#X msg 110 1050 reset; +#X text 245 1050 set current event index to zero and send All Notes +Off event.; +#X msg 110 1077 seek; +#X text 245 1077 seek to specified tick.; +#X msg 110 1104 stop; +#X text 245 1104 stop playing and send All Notes Off event.; +#X obj 20 1141 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1146 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1048 1\.; -#X text 245 1048 method inlet.; -#X obj 20 1078 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1083 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1147 1\.; +#X text 150 1147 *bang*; +#X text 245 1147 output current event.; +#X text 150 1167 *data*; +#X text 245 1167 MidiStream object: set new mifi file.; +#X obj 20 1197 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1202 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1084 1\.; -#X text 245 1084 outputs MidiEvent message.; -#X text 110 1104 2\.; -#X text 245 1104 time in milliseconds until next MIDI event.; +#X text 110 1203 1\.; +#X text 245 1203 MidiEvent message.; +#X text 110 1223 2\.; +#X text 245 1223 time in milliseconds until next MIDI event.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 1154 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1157 library: ceammc v0.9.4; -#N canvas 10 1176 400 290 info 0; +#X obj 1 1273 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1276 library: ceammc v0.9.6; +#N canvas 10 1295 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.track; #X text 10 76 category:; @@ -102,19 +115,21 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1176 pd info; +#X restore 10 1295 pd info; #X connect 4 0 5 0; -#X connect 5 0 6 0; +#X connect 5 0 7 0; #X connect 6 0 7 0; -#X connect 7 0 10 0; -#X connect 8 0 10 0; -#X connect 9 0 10 0; +#X connect 7 0 8 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 13 0; -#X connect 12 1 14 0; -#X connect 13 0 15 0; -#X connect 15 0 16 0; -#X connect 14 0 16 1; +#X connect 13 0 14 0; +#X connect 13 1 15 0; +#X connect 14 0 16 0; #X connect 16 0 17 0; -#X connect 16 0 17 1; \ No newline at end of file +#X connect 15 0 17 1; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 18 0 19 1; \ No newline at end of file diff --git a/ceammc/ext/doc/midi.track.pddoc b/ceammc/ext/doc/midi.track.pddoc index fc039f9462..1d8a3d4d68 100644 --- a/ceammc/ext/doc/midi.track.pddoc +++ b/ceammc/ext/doc/midi.track.pddoc @@ -13,35 +13,41 @@ midi track 0.4 + + init track number + track number - join all tracks into one + join all tracks into + one play speed factor - current tempo in + current tempo in TPQ - current event tick + current event tick index - number of events in + number of events in track - current + current state. 0: stopped, 1: playing, 2: paused start playing pause playing - stop playing + stop playing and send All Notes Off event moves playing position to next event. No output - set current event index to zero + set current event index to zero and send All Notes Off + event seek to specified tick - method inlet + output current event + MidiStream object: set new mifi file - outputs MidiEvent message + MidiEvent message time in milliseconds until next MIDI event @@ -49,8 +55,8 @@ diff --git a/ceammc/ext/doc/midi.tuning-help.pd b/ceammc/ext/doc/midi.tuning-help.pd index 7c6c46aada..fb9135210c 100644 --- a/ceammc/ext/doc/midi.tuning-help.pd +++ b/ceammc/ext/doc/midi.tuning-help.pd @@ -54,13 +54,13 @@ value: 0 0 0 0 0 0 0 0 0 0 0 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 811 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 814 library: ceammc v0.9.4; +#X text 10 814 library: ceammc v0.9.6; #N canvas 10 833 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.tuning; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi.vramp-help.pd b/ceammc/ext/doc/midi.vramp-help.pd index fd7f28e095..dd449c51b3 100644 --- a/ceammc/ext/doc/midi.vramp-help.pd +++ b/ceammc/ext/doc/midi.vramp-help.pd @@ -33,51 +33,50 @@ -49933 0; #X msg 110 533 @auto; #X text 245 533 Get/Set auto reset mode. If true: reset to @start value -after ramp is finished. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 590 @from; -#X text 245 590 Get/Set start value. Type: int. Default value: 127\. +after ramp is finished. Type: bool. Default value: 0\.; +#X msg 110 575 @from; +#X text 245 575 Get/Set start value. Type: int. Default value: 127\. Range: 0\...127\.; -#X msg 110 632 @n; -#X text 245 632 Get/Set number of steps. Type: int. Default value: +#X msg 110 617 @n; +#X text 245 617 Get/Set number of steps. Type: int. Default value: 0\. Min value: 0\.; -#X msg 110 674 @to; -#X text 245 674 Get/Set end value. Type: int. Default value: 127\. +#X msg 110 659 @to; +#X text 245 659 Get/Set end value. Type: int. Default value: 127\. Range: 0\...127\.; -#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 731 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 711 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 716 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 766 reset; -#X text 245 766 reset to start value.; -#X obj 20 803 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 808 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 751 reset; +#X text 245 751 reset to start value.; +#X obj 20 788 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 793 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 809 1\.; -#X text 150 809 *float*; -#X text 245 809 if VALUE >0 \, treat as (VALUE 127) list \, otherwise +#X text 110 794 1\.; +#X text 150 794 *float*; +#X text 245 794 if VALUE >0 \, treat as (VALUE 127) list \, otherwise as (-VALUE \, 0).; -#X text 150 844 *list*; -#X text 245 844 NOTE [VELOCITY] list expected.; -#X obj 20 874 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 879 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 829 *list*; +#X text 245 829 NOTE [VELOCITY] list expected.; +#X obj 20 859 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 864 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 880 1\.; -#X text 245 880 outputs NOTE VELOCITY pair.; -#X text 110 900 2\.; -#X text 245 900 bang when destination value is reached.; +#X text 110 865 1\.; +#X text 245 865 outputs NOTE VELOCITY pair.; +#X text 110 885 2\.; +#X text 245 885 bang when destination value is reached.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; -#X obj 1 950 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 953 library: ceammc v0.9.4; -#N canvas 10 972 400 290 info 0; +#X obj 1 935 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 938 library: ceammc v0.9.6; +#N canvas 10 957 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.vramp; #X text 10 76 category:; @@ -96,7 +95,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 972 pd info; +#X restore 10 957 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/midi.vramp.pddoc b/ceammc/ext/doc/midi.vramp.pddoc index 3d67a62048..7e342cb4e2 100644 --- a/ceammc/ext/doc/midi.vramp.pddoc +++ b/ceammc/ext/doc/midi.vramp.pddoc @@ -24,8 +24,8 @@ end value number of steps - auto reset mode. If true: - reset to @start value after ramp is finished + auto reset mode. If true: reset to + @start value after ramp is finished reset to start value diff --git a/ceammc/ext/doc/midi.vrand-help.pd b/ceammc/ext/doc/midi.vrand-help.pd index 2789ade4e8..963cd800a8 100644 --- a/ceammc/ext/doc/midi.vrand-help.pd +++ b/ceammc/ext/doc/midi.vrand-help.pd @@ -81,13 +81,13 @@ value.; #X text 115 45 ::; #X obj 131 48 ui.link @title midi @url ceammc.midi-help.pd; #X obj 1 1057 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1060 library: ceammc v0.9.4; +#X text 10 1060 library: ceammc v0.9.6; #N canvas 10 1079 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 midi.vrand; #X text 10 76 category:; diff --git a/ceammc/ext/doc/midi/CMakeLists.txt b/ceammc/ext/doc/midi/CMakeLists.txt new file mode 100644 index 0000000000..cd2126da9a --- /dev/null +++ b/ceammc/ext/doc/midi/CMakeLists.txt @@ -0,0 +1,10 @@ +file(GLOB _PDDOC_MIDI "*.mid") + +add_custom_target(pddoc_midi_files SOURCES + ${_PDDOC_MIDI}) + +# install extra files +install(FILES + ${_PDDOC_MIDI} + DESTINATION ${DOC_INSTALL_PATH}/midi + PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) diff --git a/ceammc/ext/doc/midi/bach-wtk2-prelude2.mid b/ceammc/ext/doc/midi/bach-wtk2-prelude2.mid new file mode 100755 index 0000000000000000000000000000000000000000..10e6cf4f5aa11d50a6a3ae66d321b4a21bc66fcf GIT binary patch literal 6127 zcmbuC+fG|o5QY~aO_!5h#F>V}!UOPO4tx zN9dch4_3MV?Co#7S=J6|i-f%9JoC@2!`^#+co0Ik7skT)*oVE>?RO!JJqZ1=$<=nV z(P_1-$>t9~CA&w*moHnV2T6H)VY*UIhJRA6ZZ=Pw?MA10kTlLat&>LQ=uPAJ_%iwR z@(Zk&8lB|F^V4Ko|CLHoE>&kAS4(qArBs?7hACJn`u^K?>m)fje{VsPgXY_#)1%H& z>$IB89JWrHGj9&tNAG7&&QF^cGZ&qAmG95m&ExZfX5}U|eSBFhFU(adp+A2Ab-VHA zT~Z4DnUF#9?JKdrIzKyWwnP8b`29bU(7*fOu+ctK*uz%)ApChR^nbp4_s(};hyE{j z{tor))vNl4)mpe-(eH|Wq1QyO<@n2@mvc0F@SjWmTykjq!C#VmNpk4rt8OiIxMhp2 z)Uy_rf^$Z7o}03T*|f!`7WgGDd2K14c_kk7rub&JuHW^X96RLOl5b0nU+CBma_~aF zBl{iMg9CKz2l8hzPxPK>@`8^2KyO`zYs*13r+wQHZMO26_BWOjC)Qh&o#mw7 zr_G4v)JMM5O`g;PF5pj}{%_nkzg6XHu{6W!IK}cW&GVUjJQLpJSruIsO}(+-FO3`P zttel^M1!6Vax4eWSZ`T&mYeoqx{qS{nr#T%u(?IHgX7LX=M>#Ev!F*sGY2L`*urNv z_m%g)Qj7gT6Ayjt!2+7N@Q0OTd7}rPS%k(8J~Il99(-mOddV=hL(HM88pp|_hiluO*x4`J-NwVpwIiEx zvn_3BXEt({(C_Klkj_-KR+qEv4B~8rj{6eJ=_C5F{H6T9RNx}{zCmRJvSSN7HR&{` zv0n*$reWvewk_;{Munh$Gmtg#WLcA?kI04< zW2e8*1S%w5GYzw0hDQ;~?mMz7l2dh&{5E@Pz@ELktD1I|-)*xHp9R?A2fv_Cz2pr| z9smW6J$kVn`7s@Fy+v{HkH4a>V~<{J_g~`<>(n6F?q9cwuosLEj}P1n6WM6)+9K}{M~inIvVoao8BQt7fYc(ZTnnJcT!(=h>zsuOJJ0NpW1+!F0|e(|MHFd1#!6;^bmwqd|VO9-92& zg9|iz@P{LEbL8L`j*>Ui>+sI|ZW$E~@ThygrqvgN^^tz9^vSDF;U-Q#svgk+b5tC7 z=Q!{bO5p$mJ*B|bDd<=Z5HWzzBo2)qXiv>iahx0;uk16mk{1K5kKL|5c74FhqRTlt zmXlXJ@X$0GnmEv&nrH2tvQ4SQp0mYV3Z@ozn0Tuk2Jg_QxdSt*?4Df&zTiTA(DXg7 z1KN}JJUsj}E5oqG2fm334d!4(Y-mr`VQ}z#8t{Q{VnWZWuk*?UI+nA6kdqs^KqH@% zKWh=RA60(Vc-9k!!-RBQGQk`WR*$ZK0A|ta4*&oF literal 0 HcmV?d00001 diff --git a/ceammc/ext/doc/mix~-help.pd b/ceammc/ext/doc/mix~-help.pd index f26cf84712..113330926f 100644 --- a/ceammc/ext/doc/mix~-help.pd +++ b/ceammc/ext/doc/mix~-help.pd @@ -82,13 +82,13 @@ Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 1067 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1070 library: ceammc v0.9.4; +#X text 10 1070 library: ceammc v0.9.6; #N canvas 10 1089 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 mix~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/mlist.flatten-help.pd b/ceammc/ext/doc/mlist.flatten-help.pd index fea2d7d1db..eb692adb8a 100644 --- a/ceammc/ext/doc/mlist.flatten-help.pd +++ b/ceammc/ext/doc/mlist.flatten-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 594 520 see also:; #X obj 668 520 data.mlist; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 mlist.flatten; #X text 10 76 category:; diff --git a/ceammc/ext/doc/modplug~-help.pd b/ceammc/ext/doc/modplug~-help.pd index 99aab89c7c..5123179320 100644 --- a/ceammc/ext/doc/modplug~-help.pd +++ b/ceammc/ext/doc/modplug~-help.pd @@ -34,49 +34,48 @@ ms. Default value: 0\.; #X msg 110 464 @name; #X text 245 464 (readonly) Get mod name. Type: symbol.; #X msg 110 493 @play; -#X text 245 493 Get/Set play state. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 535 @pos; -#X text 245 535 Get/Set position in mod file. Type: float. Units: ms. +#X text 245 493 Get/Set play state. Type: bool. Default value: 0\.; +#X msg 110 522 @pos; +#X text 245 522 Get/Set position in mod file. Type: float. Units: ms. Default value: -1\.; -#X msg 110 577 @rpos; -#X text 245 577 Get/Set relative position in mod file. Type: float. +#X msg 110 564 @rpos; +#X text 245 564 Get/Set relative position in mod file. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 629 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 634 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 616 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 621 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 669 pause; -#X text 245 669 pause playing.; -#X msg 110 696 play; -#X text 245 696 play mod file.; -#X msg 110 723 stop; -#X text 245 723 stop playing and move play position to the end of file.; -#X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 765 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 656 pause; +#X text 245 656 pause playing.; +#X msg 110 683 play; +#X text 245 683 play mod file.; +#X msg 110 710 stop; +#X text 245 710 stop playing and move play position to the end of file.; +#X obj 20 747 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 752 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 766 1\.; -#X text 150 766 *symbol*; -#X text 245 766 load mod file.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 753 1\.; +#X text 150 753 *symbol*; +#X text 245 753 load mod file.; +#X obj 20 783 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 788 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 802 1\.; -#X text 245 802 left channel and property output.; -#X text 110 822 2\.; -#X text 245 822 right channel.; +#X text 110 789 1\.; +#X text 245 789 left channel and property output.; +#X text 110 809 2\.; +#X text 245 809 right channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; -#X obj 1 872 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 875 library: ceammc v0.9.4; -#N canvas 10 894 400 290 info 0; +#X obj 1 859 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 862 library: ceammc v0.9.6; +#N canvas 10 881 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 modplug~; #X text 10 76 category:; @@ -95,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 894 pd info; +#X restore 10 881 pd info; #X connect 6 0 10 0; #X connect 10 0 11 0; #X connect 5 0 12 0; diff --git a/ceammc/ext/doc/modplug~.pddoc b/ceammc/ext/doc/modplug~.pddoc index 380a1eced2..83f24e1a05 100644 --- a/ceammc/ext/doc/modplug~.pddoc +++ b/ceammc/ext/doc/modplug~.pddoc @@ -19,14 +19,14 @@ function called with bang when playing is finished - + length of mod file - mod name + mod name position in mod file relative position in mod file - play state + play state diff --git a/ceammc/ext/doc/msg-help.pd b/ceammc/ext/doc/msg-help.pd index 359028b7fa..8ffa48eec3 100644 --- a/ceammc/ext/doc/msg-help.pd +++ b/ceammc/ext/doc/msg-help.pd @@ -98,13 +98,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 867 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 870 library: ceammc v0.9.4; +#X text 10 870 library: ceammc v0.9.6; #N canvas 10 889 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 msg; #X text 10 76 category:; diff --git a/ceammc/ext/doc/msg.after-help.pd b/ceammc/ext/doc/msg.after-help.pd index 2210fa5ac4..2b944eeee1 100644 --- a/ceammc/ext/doc/msg.after-help.pd +++ b/ceammc/ext/doc/msg.after-help.pd @@ -46,7 +46,7 @@ is not send \, the delayed message is resetted; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.9.4; +#X text 10 556 library: ceammc v0.9.6; #X text 644 568 see also:; #X obj 718 568 msg; #N canvas 10 575 400 290 info 0; @@ -54,7 +54,7 @@ is not send \, the delayed message is resetted; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 msg.after; #X text 10 76 category:; diff --git a/ceammc/ext/doc/msg.onload-help.pd b/ceammc/ext/doc/msg.onload-help.pd index e7bf8e2ba3..ac30a8f36e 100644 --- a/ceammc/ext/doc/msg.onload-help.pd +++ b/ceammc/ext/doc/msg.onload-help.pd @@ -39,13 +39,13 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 msg.onload; #X text 10 76 category:; diff --git a/ceammc/ext/doc/msg.sched-help.pd b/ceammc/ext/doc/msg.sched-help.pd index e4989c5955..1d99434263 100644 --- a/ceammc/ext/doc/msg.sched-help.pd +++ b/ceammc/ext/doc/msg.sched-help.pd @@ -8,7 +8,7 @@ #X obj 210 80 cnv 1 555 75 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 First element of input list considered as delay time in milliseconds.; -#X text 215 120 Other messages passed 'as is' immidiately.; +#X text 215 120 Other messages passed 'as is' immediately.; #X msg 50 183 @freq 100 \, @gate 1 \, 400 @freq 800 \, 600 @freq 200 \, 750 @gate 0; #X obj 50 241 msg.sched; #X obj 50 270 synth.dubdub~; @@ -20,20 +20,20 @@ in milliseconds.; 0; #X text 110 382 1\.; #X text 150 382 *bang*; -#X text 245 382 immidiately output bang.; +#X text 245 382 immediately output bang.; #X text 150 402 *float*; -#X text 245 402 immidiately output float.; +#X text 245 402 immediately output float.; #X text 150 422 *symbol*; -#X text 245 422 immidiately output symbol.; +#X text 245 422 immediately output symbol.; #X text 150 442 *list*; #X text 245 442 If first element is a float it considered as delay time in millisecond. If this delay time is >0: output left elements after this delay time. If delay time is <0 \, output left elements -immidiately. If delay time is ==0 \, output left elements with shortest +immediately. If delay time is ==0 \, output left elements with shortest possible delay (on next scheduler block). If first element not a float -\, output whole list immidiately.; +\, output whole list immediately.; #X text 150 552 *any*; -#X text 245 552 immidiately output any.; +#X text 245 552 immediately output any.; #X text 110 572 2\.; #X text 150 572 *bang*; #X text 245 572 clear scheduled messages.; @@ -51,7 +51,7 @@ clear.; #X text 115 45 ::; #X obj 131 48 ui.link @title msg @url ceammc.msg-help.pd; #X obj 1 678 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 681 library: ceammc v0.9.4; +#X text 10 681 library: ceammc v0.9.6; #X text 600 693 see also:; #X obj 674 693 msg.after; #N canvas 10 700 400 290 info 0; @@ -59,7 +59,7 @@ clear.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 msg.sched; #X text 10 76 category:; diff --git a/ceammc/ext/doc/msg.sched.pddoc b/ceammc/ext/doc/msg.sched.pddoc index f5f7fd3c0d..f66b8f8975 100644 --- a/ceammc/ext/doc/msg.sched.pddoc +++ b/ceammc/ext/doc/msg.sched.pddoc @@ -18,19 +18,19 @@ First element of input list considered as delay time in milliseconds. - Other messages passed 'as is' immidiately. + Other messages passed 'as is' immediately. - immidiately output bang - immidiately output float - immidiately output symbol + immediately output bang + immediately output float + immediately output symbol If first element is a float it considered as delay time in millisecond. If this delay time is >0: output left elements after this delay - time. If delay time is <0, output left elements immidiately. If delay time is + time. If delay time is <0, output left elements immediately. If delay time is ==0, output left elements with shortest possible delay (on next scheduler block). - If first element not a float, output whole list immidiately. - immidiately output any + If first element not a float, output whole list immediately. + immediately output any clear scheduled messages diff --git a/ceammc/ext/doc/music.dur2time-help.pd b/ceammc/ext/doc/music.dur2time-help.pd index 24758d2e71..d0b606431b 100644 --- a/ceammc/ext/doc/music.dur2time-help.pd +++ b/ceammc/ext/doc/music.dur2time-help.pd @@ -24,31 +24,31 @@ eight) \, 3/8 (three eights) etc.; #X msg 110 453 @bpm; #X text 245 453 Get/Set tempo. Type: list. Default value: 60 0.25\.; #X msg 110 482 @seq; -#X text 245 482 Get/Set sequencial durations. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 534 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 539 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 482 Get/Set sequential durations. Type: bool. Default value: +1\.; +#X obj 20 521 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 526 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 540 1\.; -#X text 245 540 duration list.; -#X obj 20 570 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 575 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 527 1\.; +#X text 245 527 duration list.; +#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 562 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 576 1\.; -#X text 245 576 converted value.; +#X text 110 563 1\.; +#X text 245 563 converted value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; -#X obj 1 626 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 629 library: ceammc v0.9.4; -#N canvas 10 648 400 290 info 0; +#X obj 1 613 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 616 library: ceammc v0.9.6; +#N canvas 10 635 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 music.dur2time; #X text 10 76 category:; @@ -67,7 +67,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 648 pd info; +#X restore 10 635 pd info; #X connect 11 0 12 0; #X connect 10 0 13 0; #X connect 12 0 13 0; diff --git a/ceammc/ext/doc/music.dur2time.pddoc b/ceammc/ext/doc/music.dur2time.pddoc index 897d3a16bd..2899ba6061 100644 --- a/ceammc/ext/doc/music.dur2time.pddoc +++ b/ceammc/ext/doc/music.dur2time.pddoc @@ -25,7 +25,7 @@ tempo - sequencial durations + sequential durations diff --git a/ceammc/ext/doc/music.voice2midi-help.pd b/ceammc/ext/doc/music.voice2midi-help.pd index 5c032f6105..0f04c8bee1 100644 --- a/ceammc/ext/doc/music.voice2midi-help.pd +++ b/ceammc/ext/doc/music.voice2midi-help.pd @@ -37,13 +37,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title conv @url ceammc.conv-help.pd; #X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.9.4; +#X text 10 556 library: ceammc v0.9.6; #N canvas 10 575 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 music.voice2midi; #X text 10 76 category:; diff --git a/ceammc/ext/doc/net.artnet.send-help.pd b/ceammc/ext/doc/net.artnet.send-help.pd new file mode 100644 index 0000000000..c726854bcc --- /dev/null +++ b/ceammc/ext/doc/net.artnet.send-help.pd @@ -0,0 +1,109 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 567 50 cnv 1 198 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 567 50 ArtNet DMX message sender; +#X obj 1 1 cnv 5 765 40 empty empty net.artnet.send 20 20 0 20 -104026 +-4096 0; +#X obj 527 11 artnet.send; +#X obj 632 11 net.artnet.send; +#X obj 50 118 ui.hrd 4; +#X floatatom 222 118 5 0 0 0 - - -; +#X msg 50 147 @universe \$1; +#X msg 222 147 @offset \$1; +#X obj 59 176 ui.colorpanel @matrix 16 8; +#X obj 59 291 route @rgb; +#X obj 59 320 math.* 255; +#X obj 59 349 msg dmx; +#X msg 155 349 poll; +#X msg 222 349 dmx_fill 0; +#X obj 50 378 net.artnet.send; +#X obj 20 427 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 432 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 467 1\.; +#X text 150 467 int; +#X obj 246 468 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 467 UNIVERSE: ArtNet universe. Type: int. Range: 0\...3; +#X obj 20 497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 502 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 537 @offset; +#X text 245 537 Get/Set DMX channel offset. Type: int. Default value: +0\. Range: 0\...511\.; +#X msg 110 579 @universe; +#X text 245 579 Get/Set ArtNet universe. Type: int. Default value: +0\. Range: 0\...3\.; +#X obj 20 631 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 636 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 671 dmx; +#X text 245 671 set DMX channel values. Arguments are:; +#X obj 255 694 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 694 CHAN: DMX channel. Type: int. Range: 0\...512\.; +#X obj 255 717 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 717 VALUES: list of DMX values \, first element sets first +channel etc. Type: list.; +#X msg 110 757 dmx_fill; +#X text 245 757 set all DMX channels to given value. Arguments are:; +#X obj 255 780 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 780 VAL: DMX value. Type: int. Range: 0\...255\.; +#X msg 110 805 dmx_set; +#X text 245 805 set DMX channel value. Arguments are:; +#X obj 255 828 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 828 CHAN: DMX channel. Type: int. Range: 0\...512\.; +#X obj 255 851 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 851 VAL: DMX value. Type: int. Range: 0\...255\.; +#X msg 110 876 poll; +#X text 245 876 send poll request \, dump response to Pd window.; +#X obj 20 913 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 918 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 919 1\.; +#X text 245 919 input.; +#X obj 20 949 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 954 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 955 1\.; +#X text 245 955 output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title net @url ceammc.net-help.pd; +#X obj 1 1005 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1008 library: ceammc v0.9.6; +#N canvas 10 1027 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 net.artnet.send; +#X text 10 76 category:; +#X text 120 76 net; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 osc \, net \, artnet \, dmx; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1027 pd info; +#X connect 5 0 7 0; +#X connect 6 0 8 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 14 0 15 0; +#X connect 7 0 15 0; +#X connect 8 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.artnet.send.pddoc b/ceammc/ext/doc/net.artnet.send.pddoc new file mode 100644 index 0000000000..416d01d08a --- /dev/null +++ b/ceammc/ext/doc/net.artnet.send.pddoc @@ -0,0 +1,83 @@ + + + + net.artnet.send + + + Serge Poltavsky + + ArtNet DMX message sender + GPL3 or later + ceammc + net + osc net artnet dmx + 0.9.5 + + artnet.send + + + + ArtNet + universe + + + send poll request, dump response to Pd window + set all DMX channels to given value + DMX + value + set DMX channel value + DMX + channel + DMX + value + set DMX channel values + DMX + channel + list of DMX values, first element sets + first channel etc. + + + ArtNet + universe + DMX channel + offset + + + + input + + + + output + + + +x] +[X b->x] +#c @matrix 16 8 +]]> + + + + diff --git a/ceammc/ext/doc/net.host2ip-help.pd b/ceammc/ext/doc/net.host2ip-help.pd index 6c2639ef21..f40f6cdd65 100644 --- a/ceammc/ext/doc/net.host2ip-help.pd +++ b/ceammc/ext/doc/net.host2ip-help.pd @@ -7,45 +7,58 @@ #X obj 548 11 net.host->ip; #X obj 660 11 net.host2ip; #X msg 50 118 localhost; -#X msg 69 147 symbol bbc.com; -#X obj 50 190 net.host->ip; -#X obj 50 219 ui.d; -#X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 273 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X msg 69 147 bbc.com; +#X obj 50 176 symbol; +#X symbolatom 50 205 16 0 0 0 - - -; +#X obj 203 205 ui.tab ipv4 ipv6; +#X msg 203 234 \$2; +#X obj 203 262 msg @type; +#X obj 50 291 net.host->ip; +#X obj 50 320 ui.dt; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 308 @ipv4; -#X text 245 308 shortcut for @type ipv4\.; -#X msg 110 337 @ipv6; -#X text 245 337 shortcut for @type ipv6\.; -#X msg 110 366 @type; -#X text 245 366 Get/Set result IP type. Type: symbol. Default value: +#X text 110 409 1\.; +#X text 150 409 symbol; +#X obj 246 410 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 TYPE: result IP type. Allowed values: ipv4 \, ipv6\. +. Type: symbol.; +#X obj 20 454 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 459 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 494 @ipv4; +#X text 245 494 shortcut for @type ipv4\.; +#X msg 110 523 @ipv6; +#X text 245 523 shortcut for @type ipv6\.; +#X msg 110 552 @type; +#X text 245 552 Get/Set result IP type. Type: symbol. Default value: ipv4\. Allowed values: ipv4 \, ipv6\.; -#X obj 20 418 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 423 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 604 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 609 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 424 1\.; -#X text 150 424 *symbol*; -#X text 245 424 DNS name.; -#X text 150 444 *any*; -#X text 245 444 DNS name.; -#X obj 20 474 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 479 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 610 1\.; +#X text 150 610 *symbol*; +#X text 245 610 DNS name.; +#X text 150 630 *any*; +#X text 245 630 DNS name.; +#X obj 20 660 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 665 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 480 1\.; -#X text 245 480 list of resolved IP's.; +#X text 110 666 1\.; +#X text 245 666 list of resolved IP's.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title net @url ceammc.net-help.pd; -#X obj 1 530 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 533 library: ceammc v0.9.4; -#N canvas 10 552 400 290 info 0; +#X obj 1 716 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 719 library: ceammc v0.9.6; +#N canvas 10 738 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 net.host2ip; #X text 10 76 category:; @@ -64,7 +77,12 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 552 pd info; +#X restore 10 738 pd info; #X connect 5 0 7 0; #X connect 6 0 7 0; -#X connect 7 0 8 0; \ No newline at end of file +#X connect 7 0 8 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 8 0 12 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.host2ip.pddoc b/ceammc/ext/doc/net.host2ip.pddoc index e207f9ab02..d79430c078 100644 --- a/ceammc/ext/doc/net.host2ip.pddoc +++ b/ceammc/ext/doc/net.host2ip.pddoc @@ -16,6 +16,9 @@ net.host->ip + + result IP type + result IP type @@ -36,12 +39,19 @@ ip] +[symbol] +| +[S digits=16] [ui.tab ipv4 ipv6] +| | +| [$2( +| | +| [msg @type] +| | +[net.host->ip ] | -[ui.d] +[ui.dt] ]]> diff --git a/ceammc/ext/doc/net.http.send-help.pd b/ceammc/ext/doc/net.http.send-help.pd new file mode 100644 index 0000000000..cede568722 --- /dev/null +++ b/ceammc/ext/doc/net.http.send-help.pd @@ -0,0 +1,97 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 613 50 cnv 1 152 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 613 50 HTTP request sender; +#X obj 1 1 cnv 5 765 40 empty empty net.http.send 20 20 0 20 -104026 +-4096 0; +#X obj 556 11 http.send; +#X obj 646 11 net.http.send; +#X msg 50 118 get /; +#X obj 50 162 net.http.send google.com; +#X msg 155 190 bang; +#X floatatom 50 219 5 0 0 0 - - -; +#X obj 136 219 ui.dt; +#X obj 20 268 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 273 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 308 1\.; +#X text 150 308 symbol; +#X obj 246 309 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 308 HOST: destination host. Type: symbol.; +#X text 110 328 2\.; +#X text 150 328 int; +#X obj 246 329 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 328 PORT: destination port. Type: int. Range: 1\...32768; +#X obj 20 358 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 363 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 398 @host; +#X text 245 398 Get/Set destination host. Type: symbol. Default value: +localhost.; +#X msg 110 440 @pass; +#X text 245 440 Get/Set Basic Auth password. Type: atom.; +#X msg 110 469 @port; +#X text 245 469 Get/Set destination port. Type: int. Default value: +80\. Range: 1\...32768\.; +#X msg 110 511 @timeout; +#X text 245 511 Get/Set TCP connection timeout. Type: int. Units: sec. +Default value: 1\. Range: 1\...10\.; +#X msg 110 553 @user; +#X text 245 553 Get/Set Basic Auth user name. Type: symbol.; +#X obj 20 592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 597 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 632 get; +#X text 245 632 send GET request. Arguments are:; +#X obj 255 655 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 655 PATH: request path. Type: symbol.; +#X obj 255 678 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 678 VALUES: list of query pairs. Type: list.; +#X obj 20 713 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 718 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 719 1\.; +#X text 245 719 input.; +#X obj 20 749 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 754 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 755 1\.; +#X text 245 755 int: HTTP status code.; +#X text 110 775 2\.; +#X text 245 775 data:String: HTTP body.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title net @url ceammc.net-help.pd; +#X obj 1 825 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 828 library: ceammc v0.9.6; +#N canvas 10 847 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 net.http.send; +#X text 10 76 category:; +#X text 120 76 net; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 net \, http; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 847 pd info; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 6 1 9 0; +#X connect 7 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.http.send.pddoc b/ceammc/ext/doc/net.http.send.pddoc new file mode 100644 index 0000000000..251c3cdb3e --- /dev/null +++ b/ceammc/ext/doc/net.http.send.pddoc @@ -0,0 +1,62 @@ + + + + net.http.send + + + Serge Poltavsky + + HTTP request sender + GPL3 or later + ceammc + net + net http + 0.9.5 + + http.send + + + + destination host + destination + port + + + send GET request + request path + list of query pairs + + + destination host + + destination port + Basic Auth user name + Basic Auth password + TCP connection timeout + + + + input + + + + int: HTTP status code + data:String: HTTP body + + + + + + + + diff --git a/ceammc/ext/doc/net.osc.receive-help.pd b/ceammc/ext/doc/net.osc.receive-help.pd new file mode 100644 index 0000000000..35a913a9bd --- /dev/null +++ b/ceammc/ext/doc/net.osc.receive-help.pd @@ -0,0 +1,101 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 606 50 cnv 1 159 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 606 50 OSC message listener; +#X obj 1 1 cnv 5 765 40 empty empty net.osc.receive 20 20 0 20 -104026 +-4096 0; +#X obj 541 11 net.osc.r; +#X obj 631 11 net.osc.receive; +#X text 50 118 default OSC server: osc.udp://:9000; +#X obj 434 118 net.osc.server TCP osc.tcp://:9001; +#X obj 50 147 net.osc.receive /x; +#X obj 434 147 net.osc.receive /y TCP; +#X obj 50 176 ui.dt; +#X obj 434 176 ui.dt; +#X msg 50 219 send /x 1 2 3 4; +#X msg 222 219 send /* 4 3 2 1; +#X msg 434 219 send /y ABC; +#X obj 50 248 net.osc.send osc.udp://:9000; +#X obj 434 248 net.osc.send osc.tcp://:9001; +#X obj 20 297 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 302 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 337 1\.; +#X text 150 337 symbol; +#X obj 246 338 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 337 PATH: OSC path to listen. Type: symbol.; +#X text 110 357 2\.; +#X text 150 357 symbol; +#X obj 246 358 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 357 SERVER: OSC server name. Type: symbol.; +#X text 110 377 3\.; +#X text 150 377 symbol; +#X obj 246 378 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 377 TYPES: expected OSC type string. Type: symbol.; +#X obj 20 407 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 412 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 447 @path; +#X text 245 447 Get/Set OSC listen path. Type: symbol.; +#X msg 110 476 @server; +#X text 245 476 Get/Set OSC server name. Type: symbol. Default value: +default.; +#X msg 110 518 @types; +#X text 245 518 Get/Set expected OSC type string. Type: symbol. Default +value: none.; +#X obj 20 570 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 575 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X obj 20 630 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 635 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 636 1\.; +#X text 245 636 message input.; +#X text 110 656 2\.; +#X text 150 656 *symbol*; +#X text 245 656 set OSC listen path.; +#X obj 20 686 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 691 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 692 1\.; +#X text 245 692 OSC output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title net @url ceammc.net-help.pd; +#X obj 1 742 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 745 library: ceammc v0.9.6; +#X text 463 757 see also:; +#X obj 537 757 net.osc.server; +#X obj 654 757 net.osc.send; +#N canvas 10 764 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 net.osc.receive; +#X text 10 76 category:; +#X text 120 76 net; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 osc \, net \, receive; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 764 pd info; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.osc.receive.pddoc b/ceammc/ext/doc/net.osc.receive.pddoc new file mode 100644 index 0000000000..8d1b9bc7ac --- /dev/null +++ b/ceammc/ext/doc/net.osc.receive.pddoc @@ -0,0 +1,63 @@ + + + + net.osc.receive + + + Serge Poltavsky + + OSC message listener + GPL3 or later + ceammc + net + osc net receive + 0.9.5 + + net.osc.server + net.osc.send + + + net.osc.r + + + + OSC path to listen + OSC server name + expected OSC type string + + + + OSC server name + OSC listen path + expected OSC type + string + + + + message input + + + set OSC listen path + + + + OSC output + + + + + + + + diff --git a/ceammc/ext/doc/net.osc.send-help.pd b/ceammc/ext/doc/net.osc.send-help.pd new file mode 100644 index 0000000000..884f895d0a --- /dev/null +++ b/ceammc/ext/doc/net.osc.send-help.pd @@ -0,0 +1,205 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 621 50 cnv 1 144 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 621 50 OSC message sender; +#X obj 1 1 cnv 5 765 40 empty empty net.osc.send 20 20 0 20 -104026 +-4096 0; +#X obj 564 11 net.osc.s; +#X obj 654 11 net.osc.send; +#X text 50 118 default OSC server: osc.udp://:9000; +#X obj 50 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 176 @dump \$1; +#X text 165 176 open Pd window to see OSC dump output; +#X obj 50 205 net.osc.server; +#X text 50 234 send list of floats; +#X msg 50 262 send /l 1 2 3 4; +#X msg 251 262 send_typed /t ifs 0.5 -100 symbol; +#X obj 59 291 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 251 291 5 0 0 0 - - -; +#X floatatom 462 291 5 0 0 0 - - -; +#X msg 50 320 send_bool /b \$1; +#X msg 251 320 send_float /f \$1; +#X msg 462 320 send_double /d \$1; +#X msg 50 349 send_inf /inf; +#X floatatom 251 349 5 0 0 0 - - -; +#X floatatom 462 349 5 0 0 0 - - -; +#X msg 50 378 send_null /null; +#X msg 251 378 send_i32 /i32 \$1; +#X msg 462 378 send_i64 /i64 \$1; +#X msg 462 406 send_string /s with spaces; +#X obj 50 449 net.osc.send osc.udp://localhost:9000; +#X obj 20 498 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 503 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 538 1\.; +#X text 150 538 symbol; +#X obj 246 539 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 538 NAME: OSC server name (for using with other objects). +Type: symbol.; +#X text 110 573 2\.; +#X text 150 573 atom; +#X obj 246 574 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 573 URL: OSC server url (like osc.udp://localhost:12345). +Type: atom.; +#X obj 20 618 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 623 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 658 @host; +#X text 245 658 (readonly) Get destination host. Type: symbol.; +#X msg 110 687 @path; +#X text 245 687 (readonly) Get socket filesystem path (if using unix +proto). Type: symbol.; +#X msg 110 729 @port; +#X text 245 729 (readonly) Get destination port. Type: int. Default +value: 0\.; +#X msg 110 771 @proto; +#X text 245 771 (readonly) Get sending protocol. Type: symbol. Default +value: udp.; +#X msg 110 813 @url; +#X text 245 813 Get/Set destination url. Type: atom.; +#X obj 20 852 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 857 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 892 send; +#X text 245 892 send input values (autotyped). Arguments are:; +#X obj 255 915 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 915 PATH: OSC path. Type: symbol.; +#X obj 255 938 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 938 VALUES: values. Type: list.; +#X msg 110 963 send_blob; +#X text 245 963 send character. Arguments are:; +#X obj 255 986 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 986 PATH: OSC path. Type: symbol.; +#X obj 255 1009 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1009 VAL: list of bytes. Type: list.; +#X msg 110 1034 send_bool; +#X text 245 1034 send boolean value. Arguments are:; +#X obj 255 1057 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1057 PATH: OSC path. Type: symbol.; +#X obj 255 1080 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1080 VAL: value. Type: int. Allowed values: 0 \, 1\.; +#X msg 110 1105 send_char; +#X text 245 1105 send character. Arguments are:; +#X obj 255 1128 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1128 PATH: OSC path. Type: symbol.; +#X obj 255 1151 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1151 VAL: ASCII code in 0-127 range or single symbol. Type: +atom.; +#X msg 110 1176 send_double; +#X text 245 1176 send double value. Arguments are:; +#X obj 255 1199 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1199 PATH: OSC path. Type: symbol.; +#X obj 255 1222 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1222 VAL: value. Type: float.; +#X msg 110 1247 send_float; +#X text 245 1247 send float value. Arguments are:; +#X obj 255 1270 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1270 PATH: OSC path. Type: symbol.; +#X obj 255 1293 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1293 VAL: value. Type: float.; +#X msg 110 1318 send_i32; +#X text 245 1318 send int32 value. Arguments are:; +#X obj 255 1341 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1341 PATH: OSC path. Type: symbol.; +#X obj 255 1364 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1364 VAL: value. Type: int.; +#X msg 110 1389 send_i64; +#X text 245 1389 send int64 value. Arguments are:; +#X obj 255 1412 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1412 PATH: OSC path. Type: symbol.; +#X obj 255 1435 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1435 VAL: value. Type: int.; +#X msg 110 1460 send_inf; +#X text 245 1460 send inf value. Arguments are:; +#X obj 255 1483 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1483 PATH: OSC path. Type: symbol.; +#X msg 110 1508 send_midi; +#X text 245 1508 send midi message (4 bytes). Arguments are:; +#X obj 255 1531 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1531 PATH: OSC path. Type: symbol.; +#X obj 255 1554 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1554 VAL: hex symbol (0xAAFF1122) or list of 4 bytes. Type: +list.; +#X msg 110 1579 send_null; +#X text 245 1579 send null value. Arguments are:; +#X obj 255 1602 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1602 PATH: OSC path. Type: symbol.; +#X msg 110 1627 send_string; +#X text 245 1627 send string value. Arguments are:; +#X obj 255 1650 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1650 PATH: OSC path. Type: symbol.; +#X obj 255 1673 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1673 VAL: value. Type: list.; +#X msg 110 1698 send_typed; +#X text 245 1698 send list of typed values. Arguments are:; +#X obj 255 1721 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1721 PATH: OSC path. Type: symbol.; +#X obj 255 1744 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1744 TYPES: type string \, 'i': int32 \, 'f': 32-bit float +\, 's': string \, 'h': int64 \, 'd': 64-bit float \, 'T': #true value +\, 'F': #false value \, 'N': #null value \, 'I': #inf value. Type: +symbol.; +#X obj 255 1812 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1812 VAL: values. Type: list.; +#X obj 20 1847 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1852 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1853 1\.; +#X text 245 1853 message input.; +#X obj 20 1883 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1888 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1889 1\.; +#X text 245 1889 none.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title net @url ceammc.net-help.pd; +#X obj 1 1939 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1942 library: ceammc v0.9.6; +#X text 440 1954 see also:; +#X obj 514 1954 net.osc.server; +#X obj 631 1954 net.osc.receive; +#N canvas 10 1961 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 net.osc.send; +#X text 10 76 category:; +#X text 120 76 net; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 osc \, net \, send; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1961 pd info; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 13 0 16 0; +#X connect 14 0 17 0; +#X connect 15 0 18 0; +#X connect 20 0 23 0; +#X connect 21 0 24 0; +#X connect 11 0 26 0; +#X connect 16 0 26 0; +#X connect 19 0 26 0; +#X connect 22 0 26 0; +#X connect 17 0 26 0; +#X connect 23 0 26 0; +#X connect 18 0 26 0; +#X connect 24 0 26 0; +#X connect 12 0 26 0; +#X connect 25 0 26 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.osc.send.pddoc b/ceammc/ext/doc/net.osc.send.pddoc new file mode 100644 index 0000000000..a0bb8eb27c --- /dev/null +++ b/ceammc/ext/doc/net.osc.send.pddoc @@ -0,0 +1,134 @@ + + + + net.osc.send + + + Serge Poltavsky + + OSC message sender + GPL3 or later + ceammc + net + osc net send + 0.9.5 + + net.osc.server + net.osc.receive + + + net.osc.s + + + + OSC server name (for using with other + objects) + OSC server url (like + osc.udp://localhost:12345) + + + send input values (autotyped) + OSC path + values + send boolean value + OSC path + value + send int32 value + OSC path + value + send int64 value + OSC path + value + send float value + OSC path + value + send double value + OSC path + value + send null value + OSC path + send inf value + OSC path + send string value + OSC path + value + send list of typed values + OSC path + type string, 'i': int32, 'f': 32-bit + float, 's': string, 'h': int64, 'd': 64-bit float, 'T': #true value, 'F': #false value, + 'N': #null value, 'I': #inf value + values + send character + OSC path + ASCII code in 0-127 range or single + symbol + send character + OSC path + list of bytes + send midi message (4 bytes) + OSC path + hex symbol (0xAAFF1122) or list of 4 + bytes + + + sending + protocol + destination + port + destination + host + destination url + socket filesystem + path (if using unix proto) + + + + message input + + + + none + + + +x] +[X b->x] +[X c->x] +[X d->x] +[X e->x] +[X f->x] +[X g->x] +[X h->x] +[X i->x] +[X j->x] +]]> + + + + diff --git a/ceammc/ext/doc/net.osc.server-help.pd b/ceammc/ext/doc/net.osc.server-help.pd new file mode 100644 index 0000000000..96f769958b --- /dev/null +++ b/ceammc/ext/doc/net.osc.server-help.pd @@ -0,0 +1,120 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 621 50 cnv 1 144 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 621 50 OSC server control; +#X obj 1 1 cnv 5 765 40 empty empty net.osc.server 20 20 0 20 -104026 +-4096 0; +#X obj 563 11 net.osc; +#X obj 638 11 net.osc.server; +#X text 50 118 default OSC server: osc.udp://:9000; +#X obj 50 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 176 @dump \$1; +#X msg 155 176 start; +#X msg 232 176 stop; +#X obj 50 205 net.osc.server; +#X text 50 234 send list of floats; +#X msg 50 262 send /addr 1 2 3 4; +#X obj 50 291 net.osc.send osc.udp://localhost:9000; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 380 1\.; +#X text 150 380 symbol; +#X obj 246 381 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 380 NAME: OSC server name (for using with other objects). +Type: symbol.; +#X text 110 415 2\.; +#X text 150 415 atom; +#X obj 246 416 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 415 URL: OSC server url (like udp:12345) \, see @url property. +Type: atom.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 500 @auto_start; +#X text 245 500 Get/Set automatically start on creation. Type: bool. +Default value: 1\.; +#X msg 110 542 @dump; +#X text 245 542 Get/Set dump incoming messages to Pd window. Type: +bool. Default value: 0\.; +#X msg 110 584 @host; +#X text 245 584 (readonly) Get OSC server host. Type: symbol.; +#X msg 110 613 @name; +#X text 245 613 (initonly) Get/Set OSC server name. Type: symbol. Default +value: default.; +#X msg 110 655 @path; +#X text 245 655 (readonly) Get OSC server local socket path. Type: +symbol.; +#X msg 110 684 @port; +#X text 245 684 (readonly) Get OSC server port. Type: int. Default +value: 9000\.; +#X msg 110 726 @proto; +#X text 245 726 (readonly) Get OSC server proto (udp or tcp). Type: +symbol. Default value: udp.; +#X msg 110 768 @url; +#X text 245 768 (initonly) Get/Set OSC server url in form: PROTO:PORT +(udp:12345) or just PORT \, or osc.PROTO://:PORT (for ex. osc.tcp://:9001). +Type: atom. Default value: udp:9000\.; +#X obj 20 835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 840 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 875 start; +#X text 245 875 start OSC server. Arguments are:; +#X obj 255 898 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 898 [VAL]: 1: start \, 0: stop. Type: int. Allowed values: +0 \, 1\.; +#X msg 110 923 stop; +#X text 245 923 stop OSC server. Arguments are:; +#X obj 255 946 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 946 [VAL]: 1: stop \, 0: start. Type: int. Allowed values: +0 \, 1\.; +#X obj 20 981 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 986 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 987 1\.; +#X text 245 987 ...; +#X obj 20 1017 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1022 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1023 1\.; +#X text 245 1023 ...; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title net @url ceammc.net-help.pd; +#X obj 1 1073 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1076 library: ceammc v0.9.6; +#X text 456 1088 see also:; +#X obj 530 1088 net.osc.send; +#X obj 631 1088 net.osc.receive; +#N canvas 10 1095 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 net.osc.server; +#X text 10 76 category:; +#X text 120 76 net; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 net \, osc \, server; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1095 pd info; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 12 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/net.osc.server.pddoc b/ceammc/ext/doc/net.osc.server.pddoc new file mode 100644 index 0000000000..bb753fb784 --- /dev/null +++ b/ceammc/ext/doc/net.osc.server.pddoc @@ -0,0 +1,82 @@ + + + + net.osc.server + + + Serge Poltavsky + + OSC server control + GPL3 or later + ceammc + net + net osc server + 0.9.5 + + net.osc.send + net.osc.receive + + + net.osc + + + + OSC server name (for using with other + objects) + OSC server url (like udp:12345), see @url + property + + + start OSC server + 1: start, 0: stop + stop OSC server + 1: stop, 0: start + + + dump incoming messages to Pd + window + automatically start on + creation + OSC server url + in form: PROTO:PORT (udp:12345) or just PORT, or osc.PROTO://:PORT (for ex. + osc.tcp://:9001) + OSC server + name + OSC server + port + OSC server local + socket path + OSC server proto + (udp or tcp) + OSC server + host + + + + ... + + + + ... + + + + + + + + diff --git a/ceammc/ext/doc/noise.baker-help.pd b/ceammc/ext/doc/noise.baker-help.pd index a2d56f2e9c..ad2ff784d4 100644 --- a/ceammc/ext/doc/noise.baker-help.pd +++ b/ceammc/ext/doc/noise.baker-help.pd @@ -31,8 +31,8 @@ -49933 0; #X text 110 563 1\.; #X text 150 563 float; -#X obj 246 564 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 563 ARG0: initial value. Type: float.; +#X obj 246 564 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 563 VALUE: initial value. Type: float.; #X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 598 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -80,19 +80,19 @@ Type: int.; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 1065 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1068 library: ceammc v0.9.4; +#X text 10 1068 library: ceammc v0.9.6; #N canvas 10 1087 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.baker; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; diff --git a/ceammc/ext/doc/noise.baker.pddoc b/ceammc/ext/doc/noise.baker.pddoc index ad0470c25b..a75f6aa68b 100644 --- a/ceammc/ext/doc/noise.baker.pddoc +++ b/ceammc/ext/doc/noise.baker.pddoc @@ -11,13 +11,13 @@ ceammc noise noise - .5 + 0.5 Port of Richard's chaos-baker from chaos collection - initial value + initial value diff --git a/ceammc/ext/doc/noise.clifford-help.pd b/ceammc/ext/doc/noise.clifford-help.pd index a597833474..65ef6dda5e 100644 --- a/ceammc/ext/doc/noise.clifford-help.pd +++ b/ceammc/ext/doc/noise.clifford-help.pd @@ -1,147 +1,153 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 621 50 cnv 1 144 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 621 50 clifford attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.clifford 20 20 0 20 -104026 -4096 0; #X obj 639 11 noise.clifford; -#X obj 210 80 cnv 1 555 385 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 135 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Clifford Attractors; #X text 215 105 Attributed to Cliff Pickover; -#X text 215 130 ---; -#X text 215 155 See also Peter de Jong attractors; -#X text 215 180 xn+1 = sin(a yn) + c cos(a xn); -#X text 215 205 yn+1 = sin(b xn) + d cos(b yn); -#X text 215 230 where a \, b \, c \, d are variabies that define each +#X text 215 130 x[n+1] = sin(a*y[n]) + c*cos(a*x[n]); +#X text 215 155 y[n+1] = sin(b*x[n]) + d*cos(b*y[n]); +#X text 215 180 where a \, b \, c \, d are variables that define each attractor.; -#X text 215 255 ---; -#X text 215 280 a = -1.4 \, b = 1.6 \, c = 1.0 \, d = 0.7; -#X text 215 305 a = 1.1 \, b = -1.0 \, c = 1.0 \, d = 1.5; -#X text 215 330 a = 1.6 \, b = -0.6 \, c = -1.2 \, d = 1.6; -#X text 215 355 a = 1.7 \, b = 1.7 \, c = 0.06 \, d = 1.2; -#X text 215 380 a = 1.3 \, b = 1.7 \, c = 0.5 \, d = 1.4; -#X text 215 405 ---; -#X text 215 430 a-chaos v1.0.2; -#X obj 50 508 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 537 metro 50; -#X obj 69 565 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 565 5 0 0 0 - - -; -#X msg 69 594 om \$1; -#X msg 184 594 set \$1; -#X msg 318 594 reset; -#X floatatom 59 623 5 0 0 0 - - -; -#X floatatom 194 623 5 0 0 0 - - -; -#X msg 59 652 x \$1; -#X msg 194 652 y \$1; -#X floatatom 88 680 5 0 0 0 - - -; -#X floatatom 184 680 5 0 0 0 - - -; -#X floatatom 280 680 5 0 0 0 - - -; -#X floatatom 376 680 5 0 0 0 - - -; -#X msg 88 709 a \$1; -#X msg 184 709 b \$1; -#X msg 280 709 c \$1; -#X msg 376 709 d \$1; -#X obj 50 738 noise.clifford -1.4 1.6 1 0.7; -#X obj 50 767 ui.display; -#X obj 20 801 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 806 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 243 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 126 243 ui.dsp~; +#X msg 222 243 set -1.4 1.6 1.0 0.7; +#X msg 482 243 set 1.7 1.7 0.06 1.2; +#X obj 50 272 metro 50; +#X msg 232 272 set 1.1 -1.0 1.0 1.5; +#X msg 491 272 set 1.3 1.7 0.5 1.4; +#X obj 69 301 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 301 5 0 0 0 - - -; +#X msg 232 301 set 1.6 -0.6 -1.2 1.6; +#X msg 69 330 om \$1; +#X msg 184 330 set \$1; +#X msg 318 330 reset; +#X floatatom 59 359 5 0 0 0 - - -; +#X floatatom 194 359 5 0 0 0 - - -; +#X msg 59 387 x \$1; +#X msg 194 387 y \$1; +#X floatatom 88 416 5 0 0 0 - - -; +#X floatatom 184 416 5 0 0 0 - - -; +#X floatatom 280 416 5 0 0 0 - - -; +#X floatatom 376 416 5 0 0 0 - - -; +#X msg 88 445 a \$1; +#X msg 184 445 b \$1; +#X msg 280 445 c \$1; +#X msg 376 445 d \$1; +#X obj 50 474 noise.clifford -1.4 1.6 1 0.7; +#X obj 50 503 l->l -2 2 3 30; +#X obj 213 503 l->l -2 2 0 20; +#X obj 50 531 lop~ 20; +#X obj 213 531 l->l -2 2 100 2000; +#X obj 50 560 osc.saw~; +#X obj 50 589 flt.resonlp~; +#X obj 50 618 dyn.limit~; +#X obj 50 646 ui.hgain~; +#X obj 50 675 dac~; +#X obj 20 724 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 729 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 841 1\.; -#X text 150 841 float; -#X obj 246 842 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 841 ARG0: x value (optional). Type: float.; -#X text 110 861 2\.; -#X text 150 861 float; -#X obj 246 862 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 861 ARG1: y value (optional). Type: float.; -#X text 110 881 3\.; -#X text 150 881 float; -#X obj 246 882 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 881 ARG2: a value (optional). Type: float.; -#X text 110 901 4\.; -#X text 150 901 float; -#X obj 246 902 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 901 ARG3: b value (optional). Type: float.; -#X text 110 921 5\.; -#X text 150 921 float; -#X obj 246 922 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 921 ARG4: c value (optional). Type: float.; -#X text 110 941 6\.; -#X text 150 941 float; -#X obj 246 942 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 941 ARG5: d value (optional). Type: float.; -#X obj 20 971 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 976 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 764 1\.; +#X text 150 764 float; +#X obj 246 765 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 764 X: x value (optional). Type: float.; +#X text 110 784 2\.; +#X text 150 784 float; +#X obj 246 785 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 784 Y: y value (optional). Type: float.; +#X text 110 804 3\.; +#X text 150 804 float; +#X obj 246 805 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 804 A: a value (optional). Type: float.; +#X text 110 824 4\.; +#X text 150 824 float; +#X obj 246 825 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 824 B: b value (optional). Type: float.; +#X text 110 844 5\.; +#X text 150 844 float; +#X obj 246 845 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 844 C: c value (optional). Type: float.; +#X text 110 864 6\.; +#X text 150 864 float; +#X obj 246 865 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 864 D: d value (optional). Type: float.; +#X obj 20 894 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 899 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1011 a; -#X text 245 1011 Arguments are:; -#X obj 255 1034 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1034 A: a value. Type: float.; -#X msg 110 1059 b; -#X text 245 1059 Arguments are:; -#X obj 255 1082 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1082 B: b value. Type: float.; -#X msg 110 1107 c; -#X text 245 1107 Arguments are:; -#X obj 255 1130 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1130 C: c value. Type: float.; -#X msg 110 1155 d; -#X text 245 1155 Arguments are:; -#X obj 255 1178 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1178 D: d value. Type: float.; -#X msg 110 1203 om; -#X text 245 1203 Arguments are:; -#X obj 255 1226 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1226 OM: enables output when cut or fold value is changed. +#X msg 110 934 a; +#X text 245 934 Arguments are:; +#X obj 255 957 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 957 A: a value. Type: float.; +#X msg 110 982 b; +#X text 245 982 Arguments are:; +#X obj 255 1005 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1005 B: b value. Type: float.; +#X msg 110 1030 c; +#X text 245 1030 Arguments are:; +#X obj 255 1053 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1053 C: c value. Type: float.; +#X msg 110 1078 d; +#X text 245 1078 Arguments are:; +#X obj 255 1101 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1101 D: d value. Type: float.; +#X msg 110 1126 om; +#X text 245 1126 Arguments are:; +#X obj 255 1149 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1149 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 1266 reset; -#X text 245 1266 reset state.; -#X msg 110 1293 set; -#X text 245 1293 Arguments are:; -#X obj 255 1316 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1316 SET: set to value. Type: float.; -#X msg 110 1341 x; -#X text 245 1341 Arguments are:; -#X obj 255 1364 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1364 X: x value. Type: float.; -#X msg 110 1389 y; -#X text 245 1389 Arguments are:; -#X obj 255 1412 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1412 Y: y value. Type: float.; -#X obj 20 1447 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1452 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset state.; +#X msg 110 1216 set; +#X text 245 1216 Arguments are:; +#X obj 255 1239 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1239 SET: set to value. Type: float.; +#X msg 110 1264 x; +#X text 245 1264 Arguments are:; +#X obj 255 1287 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1287 X: x value. Type: float.; +#X msg 110 1312 y; +#X text 245 1312 Arguments are:; +#X obj 255 1335 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1335 Y: y value. Type: float.; +#X obj 20 1370 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1375 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1453 1\.; -#X text 150 1453 *bang*; -#X text 245 1453 output value.; -#X obj 20 1483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1488 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1376 1\.; +#X text 150 1376 *bang*; +#X text 245 1376 output value.; +#X obj 20 1406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1411 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1489 1\.; -#X text 245 1489 main outlet.; +#X text 110 1412 1\.; +#X text 245 1412 x output.; +#X text 110 1432 2\.; +#X text 245 1432 y output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1539 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1542 library: ceammc v0.9.4; -#N canvas 10 1561 400 290 info 0; +#X obj 1 1482 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1485 library: ceammc v0.9.6; +#N canvas 10 1504 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.clifford; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; -#X text 120 142 %; +#X text 120 142 BSD; #X text 10 164 keywords:; #X text 120 164 noise; #X text 10 186 website:; @@ -150,24 +156,40 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1561 pd info; -#X connect 20 0 21 0; -#X connect 22 0 24 0; +#X restore 10 1504 pd info; +#X connect 10 0 14 0; +#X connect 17 0 20 0; +#X connect 18 0 21 0; #X connect 23 0 25 0; -#X connect 27 0 29 0; -#X connect 28 0 30 0; -#X connect 31 0 35 0; -#X connect 32 0 36 0; -#X connect 33 0 37 0; -#X connect 34 0 38 0; -#X connect 39 0 40 0; -#X connect 29 0 39 0; -#X connect 30 0 39 0; +#X connect 24 0 26 0; +#X connect 27 0 31 0; +#X connect 28 0 32 0; +#X connect 29 0 33 0; +#X connect 30 0 34 0; +#X connect 35 0 36 0; +#X connect 36 0 38 0; +#X connect 38 0 40 0; +#X connect 40 0 41 0; +#X connect 41 0 42 0; +#X connect 42 0 43 0; +#X connect 43 0 44 0; +#X connect 43 0 44 1; +#X connect 25 0 35 0; +#X connect 26 0 35 0; #X connect 35 0 39 0; -#X connect 36 0 39 0; -#X connect 37 0 39 0; -#X connect 38 0 39 0; -#X connect 24 0 39 0; -#X connect 25 0 39 0; -#X connect 26 0 39 0; -#X connect 21 0 39 0; \ No newline at end of file +#X connect 35 1 37 0; +#X connect 39 0 41 1; +#X connect 37 0 41 2; +#X connect 31 0 35 0; +#X connect 32 0 35 0; +#X connect 33 0 35 0; +#X connect 34 0 35 0; +#X connect 12 0 35 0; +#X connect 15 0 35 0; +#X connect 19 0 35 0; +#X connect 13 0 35 0; +#X connect 16 0 35 0; +#X connect 20 0 35 0; +#X connect 21 0 35 0; +#X connect 22 0 35 0; +#X connect 14 0 35 0; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.clifford.pddoc b/ceammc/ext/doc/noise.clifford.pddoc index 47212f4c83..28253106fa 100644 --- a/ceammc/ext/doc/noise.clifford.pddoc +++ b/ceammc/ext/doc/noise.clifford.pddoc @@ -6,37 +6,27 @@ André Sier - Part of a-chaos library - % + clifford attractor + BSD ceammc noise noise - .5 + 0.5 Clifford Attractors Attributed to Cliff Pickover - --- - See also Peter de Jong attractors - xn+1 = sin(a yn) + c cos(a xn) - yn+1 = sin(b xn) + d cos(b yn) - where a, b, c, d are variabies that define each attractor. - --- - a = -1.4, b = 1.6, c = 1.0, d = 0.7 - a = 1.1, b = -1.0, c = 1.0, d = 1.5 - a = 1.6, b = -0.6, c = -1.2, d = 1.6 - a = 1.7, b = 1.7, c = 0.06, d = 1.2 - a = 1.3, b = 1.7, c = 0.5, d = 1.4 - --- - a-chaos v1.0.2 + x[n+1] = sin(a*y[n]) + c*cos(a*x[n]) + y[n+1] = sin(b*x[n]) + d*cos(b*y[n]) + where a, b, c, d are variables that define each attractor. - x value (optional) - y value (optional) - a value (optional) - b value (optional) - c value (optional) - d value (optional) + x value (optional) + y value (optional) + a value (optional) + b value (optional) + c value (optional) + d value (optional) @@ -72,17 +62,17 @@ - main outlet + x output + y output l -2 2 3 30] [l->l -2 2 0 20 #f0] +| +[lop~ 20] [l->l -2 2 100 2000 #f1] +| +[osc.saw~] +| +[flt.resonlp~ #fx] +| +[dyn.limit~] +| +[ui.hgain~] +|\ +[dac~] + +[X x-msg:0->noise-obj] +[X y-msg:0->noise-obj] -[X x-msg:0->noise-obj:0] -[X y-msg:0->noise-obj:0] +[X noise-obj:0->f1] +[X noise-obj:1->f0] +[X f1->fx:1] +[X f0->fx:2] -[X a:0->noise-obj:0] -[X b:0->noise-obj:0] -[X c:0->noise-obj:0] -[X d:0->noise-obj:0] +[X a->noise-obj] +[X b->noise-obj] +[X c->noise-obj] +[X d->noise-obj] + +[X x0->noise-obj] +[X x1->noise-obj] +[X x2->noise-obj] +[X x3->noise-obj] +[X x4->noise-obj] [X om:0->noise-obj:0] [X set:0->noise-obj:0] [X reset:0->noise-obj:0] [X metro->noise-obj] - ]]> diff --git a/ceammc/ext/doc/noise.collatz-help.pd b/ceammc/ext/doc/noise.collatz-help.pd index fa71c1bfed..e21bbc30fb 100644 --- a/ceammc/ext/doc/noise.collatz-help.pd +++ b/ceammc/ext/doc/noise.collatz-help.pd @@ -1,7 +1,7 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 569 50 cnv 1 196 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 569 50 collatz conjecture output; #X obj 1 1 cnv 5 765 40 empty empty noise.collatz 20 20 0 20 -104026 -4096 0; #X obj 646 11 noise.collatz; @@ -54,19 +54,19 @@ Type: int.; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 769 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 772 library: ceammc v0.9.4; +#X text 10 772 library: ceammc v0.9.6; #N canvas 10 791 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.collatz; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; diff --git a/ceammc/ext/doc/noise.collatz.pddoc b/ceammc/ext/doc/noise.collatz.pddoc index c444913532..a0557f5d48 100644 --- a/ceammc/ext/doc/noise.collatz.pddoc +++ b/ceammc/ext/doc/noise.collatz.pddoc @@ -6,17 +6,17 @@ André Sier - Part of a-chaos library + collatz conjecture output % ceammc noise noise - .5 + 0.5 Collatz conjecture output - + offset value diff --git a/ceammc/ext/doc/noise.colored~-help.pd b/ceammc/ext/doc/noise.colored~-help.pd new file mode 100644 index 0000000000..97c51685a3 --- /dev/null +++ b/ceammc/ext/doc/noise.colored~-help.pd @@ -0,0 +1,87 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 338 50 cnv 1 427 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 338 50 colored noise generator with an arbitrary spectral roll; +#X obj 1 1 cnv 5 765 40 empty empty noise.colored~ 20 20 0 20 -104026 +-4096 0; +#X obj 638 11 noise.colored~; +#X obj 210 80 cnv 1 555 80 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Generates a colored noise signal with an arbitrary spectral +roll-off factor (alpha) over the entire audible frequency range (20-20000 +Hz). The output is normalized so that an equal RMS level is maintained +for different values of alpha.; +#X obj 50 188 ui.k -1 1 @show_value 1; +#X obj 50 246 noise.colored~; +#X obj 50 275 ui.gain~ @size 120 16; +#X obj 280 275 ui.ssc~ @size 300 120 @log_scale 1; +#X obj 50 361 dac~; +#X obj 50 390 ui.dsp~; +#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 444 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 479 1\.; +#X text 150 479 float; +#X obj 246 480 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 479 ALPHA: slope of roll-off \, between -1 and 1\. -1 corresponds +to brown/red noise \, -1/2 pink noise \, 0 white noise \, 1/2 blue +noise \, and 1 violet/azure noise.. Type: float. Range: -1\...1; +#X obj 20 539 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 544 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 579 @active; +#X text 245 579 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 608 @alpha; +#X text 245 608 Get/Set slope of roll-off \, between -1 and 1\. -1 +corresponds to brown/red noise \, -1/2 pink noise \, 0 white noise +\, 1/2 blue noise \, and 1 violet/azure noise. Type: float. Default +value: 0\. Range: -1\...1\.; +#X obj 20 690 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 695 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 696 1\.; +#X text 150 696 *float*; +#X text 245 696 set roll-off frequency.; +#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 731 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 732 1\.; +#X text 245 732 output signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; +#X obj 1 782 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 785 library: ceammc v0.9.6; +#N canvas 10 804 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 noise.colored~; +#X text 10 76 category:; +#X text 120 76 noise; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 noise \, colored \, white \, red \, brown \, blue \, +velvet; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 804 pd info; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 8 0 10 1; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.colored~.pddoc b/ceammc/ext/doc/noise.colored~.pddoc new file mode 100644 index 0000000000..7c9ff9f49f --- /dev/null +++ b/ceammc/ext/doc/noise.colored~.pddoc @@ -0,0 +1,62 @@ + + + + noise.colored~ + + + Serge Poltavsky + + colored noise generator with an arbitrary spectral roll + GPL3 or later + ceammc + noise + noise colored white red brown blue velvet + 0.9.6 + + + Generates a colored noise signal with an arbitrary spectral roll-off factor + (alpha) over the entire audible frequency range (20-20000 Hz). The output is normalized + so that an equal RMS level is maintained for different values of alpha. + + + slope of roll-off, + between -1 and 1. -1 corresponds to brown/red noise, -1/2 pink noise, 0 white noise, + 1/2 blue noise, and 1 violet/azure noise. + + + slope of + roll-off, between -1 and 1. -1 corresponds to brown/red noise, -1/2 pink noise, 0 white + noise, 1/2 blue noise, and 1 violet/azure noise. + on/off dsp processing + + + + set roll-off frequency + + + + output signal + + + + + + + + diff --git a/ceammc/ext/doc/noise.crackle~-help.pd b/ceammc/ext/doc/noise.crackle~-help.pd index fabdbb9c31..cc0dc7e63f 100644 --- a/ceammc/ext/doc/noise.crackle~-help.pd +++ b/ceammc/ext/doc/noise.crackle~-help.pd @@ -19,42 +19,42 @@ at an average rate of @freq impulses per second; -49933 0; #X text 110 363 1\.; #X text 150 363 float; -#X obj 246 364 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 363 FREQ: average frequency of noise impulses per second. -Type: float.; +#X obj 246 364 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 363 FREQ(Hz): average frequency of noise impulses per second. +Type: float. Range: 0\...100; #X obj 20 408 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 413 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 448 @active; -#X text 245 448 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 490 @freq; -#X text 245 490 Get/Set average frequency of noise impulses per second. +#X text 245 448 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 477 @freq; +#X text 245 477 Get/Set average frequency of noise impulses per second. Type: float. Units: Hz. Default value: 10\. Range: 0\...100\.; -#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 547 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 534 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 548 1\.; -#X text 150 548 *float*; -#X text 245 548 set average frequency.; -#X obj 20 578 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 583 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 535 1\.; +#X text 150 535 *float*; +#X text 245 535 set average frequency.; +#X obj 20 565 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 570 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 584 1\.; -#X text 245 584 output signal.; +#X text 110 571 1\.; +#X text 245 571 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 634 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 637 library: ceammc v0.9.4; -#N canvas 10 656 400 290 info 0; +#X obj 1 621 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 624 library: ceammc v0.9.6; +#N canvas 10 643 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.crackle~; #X text 10 76 category:; @@ -73,7 +73,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 656 pd info; +#X restore 10 643 pd info; #X connect 6 0 8 0; #X connect 7 0 8 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/noise.crackle~.pddoc b/ceammc/ext/doc/noise.crackle~.pddoc index df5dc8f94b..d3df0628f6 100644 --- a/ceammc/ext/doc/noise.crackle~.pddoc +++ b/ceammc/ext/doc/noise.crackle~.pddoc @@ -18,14 +18,13 @@ @freq impulses per second - average frequency of noise impulses per - second + average + frequency of noise impulses per second average frequency of noise impulses per second - on/off dsp - processing + units="hertz">average frequency of noise impulses per second + on/off dsp processing diff --git a/ceammc/ext/doc/noise.duffing-help.pd b/ceammc/ext/doc/noise.duffing-help.pd index 437e6bd308..147bdbb266 100644 --- a/ceammc/ext/doc/noise.duffing-help.pd +++ b/ceammc/ext/doc/noise.duffing-help.pd @@ -1,121 +1,122 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 629 50 cnv 1 136 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 629 50 duffing attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.duffing 20 20 0 20 -104026 -4096 0; #X obj 646 11 noise.duffing; -#X obj 210 80 cnv 1 555 325 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 300 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Duffing Attractor; #X text 215 105 Written by Paul Bourke; -#X text 215 130 March 1998; -#X text 215 155 ---; -#X text 215 180 The solution to the Duffing equations is often used +#X text 215 130 ---; +#X text 215 155 The solution to the Duffing equations is often used as an example of a classic chaotic system.; -#X text 215 220 The Duffing system of differential equations is:; -#X text 215 245 ===========; -#X text 215 270 dx / dt = y; -#X text 215 295 dy / dt = x - x3 - a y + b cos(w t); -#X text 215 320 ===================================; -#X text 215 345 where typically \, a = 0.25 \, b = 0.3 \, w = 1; -#X text 215 370 The following shows a "typical" segment of (x \, y) +#X text 215 195 The Duffing system of differential equations is:; +#X text 215 220 ===========; +#X text 215 245 dx / dt = y; +#X text 215 270 dy / dt = x - x3 - a y + b cos(w t); +#X text 215 295 ===================================; +#X text 215 320 where typically \, a = 0.25 \, b = 0.3 \, w = 1; +#X text 215 345 The following shows a "typical" segment of (x \, y) values.; -#X obj 50 448 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 477 metro 50; -#X obj 69 505 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 505 5 0 0 0 - - -; -#X msg 69 534 om \$1; -#X msg 184 534 set \$1; -#X msg 318 534 reset; -#X floatatom 88 563 5 0 0 0 - - -; -#X floatatom 184 563 5 0 0 0 - - -; -#X floatatom 280 563 5 0 0 0 - - -; -#X floatatom 376 563 5 0 0 0 - - -; -#X msg 88 592 a \$1; -#X msg 184 592 b \$1; -#X msg 280 592 w \$1; -#X msg 376 592 dt \$1; -#X obj 50 620 noise.duffing; -#X obj 50 649 ui.display; -#X obj 20 683 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 688 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 423 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 452 metro 50; +#X obj 69 480 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 480 5 0 0 0 - - -; +#X msg 69 509 om \$1; +#X msg 184 509 set \$1; +#X msg 318 509 reset; +#X floatatom 88 538 5 0 0 0 - - -; +#X floatatom 184 538 5 0 0 0 - - -; +#X floatatom 280 538 5 0 0 0 - - -; +#X floatatom 376 538 5 0 0 0 - - -; +#X msg 88 567 a \$1; +#X msg 184 567 b \$1; +#X msg 280 567 w \$1; +#X msg 376 567 dt \$1; +#X obj 50 595 noise.duffing; +#X obj 50 624 ui.display; +#X obj 20 658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 663 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 723 1\.; -#X text 150 723 float; -#X obj 246 724 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 723 ARG0: a value (default 0.25) \, optional. Type: float.; -#X text 110 743 2\.; -#X text 150 743 float; -#X obj 246 744 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 743 ARG1: b value (default 0.3) \, optional. Type: float.; -#X text 110 763 3\.; -#X text 150 763 float; -#X obj 246 764 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 763 ARG2: w value (default 1.0) \, optional. Type: float.; -#X text 110 783 4\.; -#X text 150 783 float; -#X obj 246 784 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 783 ARG3: dt value (default 0.01) \, optional. Type: float.; -#X obj 20 813 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 818 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 698 1\.; +#X text 150 698 float; +#X obj 246 699 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 698 A: a value (default 0.25) \, optional. Type: float.; +#X text 110 718 2\.; +#X text 150 718 float; +#X obj 246 719 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 718 B: b value (default 0.3) \, optional. Type: float.; +#X text 110 738 3\.; +#X text 150 738 float; +#X obj 246 739 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 738 W: w value (default 1.0) \, optional. Type: float.; +#X text 110 758 4\.; +#X text 150 758 float; +#X obj 246 759 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 758 DT: dt value (default 0.01) \, optional. Type: float.; +#X obj 20 788 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 793 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 853 a; -#X text 245 853 Arguments are:; -#X obj 255 876 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 876 A: a value. Type: float.; -#X msg 110 901 b; -#X text 245 901 Arguments are:; -#X obj 255 924 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 924 B: b value. Type: float.; -#X msg 110 949 dt; -#X text 245 949 Arguments are:; -#X obj 255 972 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 972 DT: dt value. Type: float.; -#X msg 110 997 om; -#X text 245 997 Arguments are:; -#X obj 255 1020 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1020 OM: enables output when cut or fold value is changed. +#X msg 110 828 a; +#X text 245 828 Arguments are:; +#X obj 255 851 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 851 A: a value. Type: float.; +#X msg 110 876 b; +#X text 245 876 Arguments are:; +#X obj 255 899 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 899 B: b value. Type: float.; +#X msg 110 924 dt; +#X text 245 924 Arguments are:; +#X obj 255 947 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 947 DT: dt value. Type: float.; +#X msg 110 972 om; +#X text 245 972 Arguments are:; +#X obj 255 995 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 995 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 1060 reset; -#X text 245 1060 reset state.; -#X msg 110 1087 set; -#X text 245 1087 Arguments are:; -#X obj 255 1110 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1110 SET: set to value. Type: float.; -#X msg 110 1135 w; -#X text 245 1135 Arguments are:; -#X obj 255 1158 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1158 W: w value. Type: float.; -#X obj 20 1193 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1198 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1035 reset; +#X text 245 1035 reset state.; +#X msg 110 1062 set; +#X text 245 1062 Arguments are:; +#X obj 255 1085 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1085 SET: set to value. Type: float.; +#X msg 110 1110 w; +#X text 245 1110 Arguments are:; +#X obj 255 1133 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1133 W: w value. Type: float.; +#X obj 20 1168 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1173 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1199 1\.; -#X text 150 1199 *bang*; -#X text 245 1199 output value.; -#X obj 20 1229 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1234 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1174 1\.; +#X text 150 1174 *bang*; +#X text 245 1174 output value.; +#X obj 20 1204 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1209 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1235 1\.; -#X text 245 1235 main outlet.; +#X text 110 1210 1\.; +#X text 245 1210 dx output.; +#X text 110 1230 2\.; +#X text 245 1230 dy output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1285 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1288 library: ceammc v0.9.4; -#N canvas 10 1307 400 290 info 0; +#X obj 1 1280 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1283 library: ceammc v0.9.6; +#N canvas 10 1302 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.duffing; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 Paul Bourke \, André Sier; #X text 10 142 license:; @@ -128,20 +129,20 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1307 pd info; -#X connect 17 0 18 0; +#X restore 10 1302 pd info; +#X connect 16 0 17 0; +#X connect 18 0 20 0; #X connect 19 0 21 0; -#X connect 20 0 22 0; +#X connect 23 0 27 0; #X connect 24 0 28 0; #X connect 25 0 29 0; #X connect 26 0 30 0; -#X connect 27 0 31 0; -#X connect 32 0 33 0; -#X connect 28 0 32 0; -#X connect 29 0 32 0; -#X connect 30 0 32 0; #X connect 31 0 32 0; -#X connect 21 0 32 0; -#X connect 22 0 32 0; -#X connect 23 0 32 0; -#X connect 18 0 32 0; \ No newline at end of file +#X connect 27 0 31 0; +#X connect 28 0 31 0; +#X connect 29 0 31 0; +#X connect 30 0 31 0; +#X connect 20 0 31 0; +#X connect 21 0 31 0; +#X connect 22 0 31 0; +#X connect 17 0 31 0; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.duffing.pddoc b/ceammc/ext/doc/noise.duffing.pddoc index 8681f85f33..2ea3ae2c91 100644 --- a/ceammc/ext/doc/noise.duffing.pddoc +++ b/ceammc/ext/doc/noise.duffing.pddoc @@ -7,17 +7,16 @@ Paul Bourke André Sier - Part of a-chaos library + duffing attractor % ceammc noise noise - .5 + 0.5 Duffing Attractor Written by Paul Bourke - March 1998 --- The solution to the Duffing equations is often used as an example of a classic chaotic system. @@ -30,10 +29,10 @@ The following shows a "typical" segment of (x,y) values. - a value (default 0.25), optional - b value (default 0.3), optional - w value (default 1.0), optional - dt value (default 0.01), optional + a value (default 0.25), optional + b value (default 0.3), optional + w value (default 1.0), optional + dt value (default 0.01), optional @@ -63,7 +62,8 @@ - main outlet + dx output + dy output diff --git a/ceammc/ext/doc/noise.ginger-help.pd b/ceammc/ext/doc/noise.ginger-help.pd index 8c07969827..fd53c88355 100644 --- a/ceammc/ext/doc/noise.ginger-help.pd +++ b/ceammc/ext/doc/noise.ginger-help.pd @@ -81,7 +81,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 1021 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1024 library: ceammc v0.9.4; +#X text 10 1024 library: ceammc v0.9.6; #X text 579 1036 see also:; #X obj 653 1036 chaos.gbman0; #N canvas 10 1043 400 290 info 0; @@ -89,7 +89,7 @@ https://en.wikipedia.org/wiki/Gingerbreadman_map; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.ginger; #X text 10 76 category:; diff --git a/ceammc/ext/doc/noise.henon-help.pd b/ceammc/ext/doc/noise.henon-help.pd index 34189e5ba8..ae003f8811 100644 --- a/ceammc/ext/doc/noise.henon-help.pd +++ b/ceammc/ext/doc/noise.henon-help.pd @@ -1,102 +1,105 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 644 50 cnv 1 121 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 644 50 henon attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.henon 20 20 0 20 -104026 -4096 0; #X obj 661 11 noise.henon; -#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 ---; -#X obj 50 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 187 metro 50; -#X obj 69 230 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 230 5 0 0 0 - - -; -#X msg 69 259 om \$1; -#X msg 184 259 set \$1; -#X msg 318 259 reset; -#X floatatom 59 287 5 0 0 0 - - -; -#X floatatom 194 287 5 0 0 0 - - -; -#X msg 59 316 x \$1; -#X msg 194 316 y \$1; -#X floatatom 88 345 5 0 0 0 - - -; -#X floatatom 184 345 5 0 0 0 - - -; -#X msg 88 374 a \$1; -#X msg 184 374 b \$1; -#X obj 50 403 noise.henon; -#X obj 50 431 ui.display; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 210 80 cnv 1 555 33 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 215 80 ui.link @background_color 0.98039 0.98039 0.98039 @title +wiki: Hénon map @url https://en.wikipedia.org/wiki/Hénon_map; +#X obj 50 141 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 170 metro 50; +#X obj 69 213 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 213 5 0 0 0 - - -; +#X msg 69 242 om \$1; +#X msg 184 242 set \$1; +#X msg 318 242 reset; +#X floatatom 59 271 5 0 0 0 - - -; +#X floatatom 194 271 5 0 0 0 - - -; +#X msg 59 300 x \$1; +#X msg 194 300 y \$1; +#X floatatom 88 328 5 0 0 0 - - -; +#X floatatom 184 328 5 0 0 0 - - -; +#X msg 88 357 a \$1; +#X msg 184 357 b \$1; +#X obj 50 386 noise.henon; +#X obj 50 415 ui.display; +#X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 469 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 505 1\.; -#X text 150 505 float; -#X obj 246 506 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 505 ARG0: a value (optional). Type: float.; -#X text 110 525 2\.; -#X text 150 525 float; -#X obj 246 526 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 525 ARG1: b value (optional). Type: float.; -#X text 110 545 3\.; -#X text 150 545 float; -#X obj 246 546 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 545 ARG2: x value (optional). Type: float.; -#X text 110 565 4\.; -#X text 150 565 float; -#X obj 246 566 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 565 ARG3: y value (optional). Type: float.; -#X obj 20 595 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 600 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 504 1\.; +#X text 150 504 float; +#X obj 246 505 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 504 A: a value (optional). Type: float.; +#X text 110 524 2\.; +#X text 150 524 float; +#X obj 246 525 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 524 B: b value (optional). Type: float.; +#X text 110 544 3\.; +#X text 150 544 float; +#X obj 246 545 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 544 X: x value (optional). Type: float.; +#X text 110 564 4\.; +#X text 150 564 float; +#X obj 246 565 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 564 Y: y value (optional). Type: float.; +#X obj 20 594 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 599 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 635 a; -#X text 245 635 Arguments are:; -#X obj 255 658 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 658 A: a value. Type: float.; -#X msg 110 683 b; -#X text 245 683 Arguments are:; -#X obj 255 706 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 706 B: b value. Type: float.; -#X msg 110 731 om; -#X text 245 731 Arguments are:; -#X obj 255 754 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 754 OM: enables output when cut or fold value is changed. +#X msg 110 634 a; +#X text 245 634 Arguments are:; +#X obj 255 657 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 657 A: a value. Type: float.; +#X msg 110 682 b; +#X text 245 682 Arguments are:; +#X obj 255 705 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 705 B: b value. Type: float.; +#X msg 110 730 om; +#X text 245 730 Arguments are:; +#X obj 255 753 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 753 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 794 reset; -#X text 245 794 reset state.; -#X msg 110 821 set; -#X text 245 821 Arguments are:; -#X obj 255 844 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 844 SET: set to value. Type: float.; -#X msg 110 869 x; -#X text 245 869 Arguments are:; -#X obj 255 892 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 892 X: x value. Type: float.; -#X msg 110 917 y; -#X text 245 917 Arguments are:; -#X obj 255 940 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 940 Y: y value. Type: float.; -#X obj 20 975 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 980 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 793 reset; +#X text 245 793 reset state.; +#X msg 110 820 set; +#X text 245 820 Arguments are:; +#X obj 255 843 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 843 SET: set to value. Type: float.; +#X msg 110 868 x; +#X text 245 868 Arguments are:; +#X obj 255 891 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 891 X: x value. Type: float.; +#X msg 110 916 y; +#X text 245 916 Arguments are:; +#X obj 255 939 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 939 Y: y value. Type: float.; +#X obj 20 974 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 979 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 981 1\.; -#X text 150 981 *bang*; -#X text 245 981 output value.; -#X obj 20 1011 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1016 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 980 1\.; +#X text 150 980 *bang*; +#X text 245 980 output value.; +#X obj 20 1010 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1015 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1017 1\.; -#X text 245 1017 main outlet.; +#X text 110 1016 1\.; +#X text 245 1016 x value.; +#X text 110 1036 2\.; +#X text 245 1036 y value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1067 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1070 library: ceammc v0.9.4; -#N canvas 10 1089 400 290 info 0; +#X obj 1 1086 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1089 library: ceammc v0.9.6; +#N canvas 10 1108 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.henon; #X text 10 76 category:; @@ -115,7 +118,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1089 pd info; +#X restore 10 1108 pd info; #X connect 6 0 7 0; #X connect 8 0 10 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/noise.henon.pddoc b/ceammc/ext/doc/noise.henon.pddoc index 15fa91599b..157d9fd3bc 100644 --- a/ceammc/ext/doc/noise.henon.pddoc +++ b/ceammc/ext/doc/noise.henon.pddoc @@ -7,7 +7,7 @@ Paul Bourke André Sier - Part of a-chaos library + henon attractor % ceammc noise @@ -15,13 +15,13 @@ .5 - --- + wiki: Hénon map - a value (optional) - b value (optional) - x value (optional) - y value (optional) + a value (optional) + b value (optional) + x value (optional) + y value (optional) @@ -51,12 +51,12 @@ - main outlet + x value + y value Richard Dudas André Sier - Part of a-chaos library + Hénon–Heiles_system % ceammc noise noise - .5 + 0.5 a port of Richard's chaos-henon-heilles from chaos collection - x value (optional) - y value (optional) - y' value (optional) - e value (optional) - dt value (optional) + x value (optional) + y value (optional) + y' value (optional) + e value (optional) + dt value (optional) @@ -53,11 +53,12 @@ x outlet y outlet + xdot outlet + ydot outlet Paul Bourke André Sier - Part of a-chaos library + henon phase Ddagrams % ceammc noise @@ -18,14 +18,14 @@ Henon Phase Diagrams Written by Paul Bourke January 1991 - xn+1 = xn cos(a) - (yn - xn2) sin(a) - yn+1 = xn sin(a) + (yn - xn2) cos(a) + x[n+1] = x[n]*cos(a) - (y[n] - x[n]^2)*sin(a) + y[n+1] = x[n]*sin(a) + (y[n] - x[n]^2)*cos(a) - a value (optional) - b value (optional) - x value (optional) - y value (optional) + a value (optional) + b value (optional) + x value (optional) + y value (optional) @@ -58,17 +58,16 @@ - main outlet + x outlet + y outlet Paul Bourke André Sier - Part of a-chaos library + Henon phase % ceammc noise noise - .5 + 0.5 Another 'Henon phase' implementation by André Sier - a value (optional) - b value (optional) - x value (optional) - y value (optional) + a value (optional) + b value (optional) + x value (optional) + y value (optional) @@ -54,17 +54,16 @@ - main outlet + x outlet + y outlet noise-obj:0] [X metro->noise-obj] - ]]> diff --git a/ceammc/ext/doc/noise.ikeda-help.pd b/ceammc/ext/doc/noise.ikeda-help.pd index 2e17de06d7..ab68f7f431 100644 --- a/ceammc/ext/doc/noise.ikeda-help.pd +++ b/ceammc/ext/doc/noise.ikeda-help.pd @@ -1,156 +1,143 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 644 50 cnv 1 121 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 644 50 Ikeda attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.ikeda 20 20 0 20 -104026 -4096 0; #X obj 661 11 noise.ikeda; -#X obj 210 80 cnv 1 555 340 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 308 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Ikeda attractor; -#X text 215 105 ---------------; -#X text 215 130 zn+1 = a + b zn exp[ i k - i p / (1 + | zn2 | ) ]; -#X text 215 155 ---; -#X text 215 180 where z is a complex number; -#X text 215 205 real number formula by euler returns:; -#X text 215 230 ===; -#X text 215 255 xn+1 = a + k*( x0*cos(b-(p/(1+x0*x0+y0*y0))) - y0*sin(b-(p/(1*x0*x0+y0*y0))) -); -#X text 215 295 yn+1 = k*( x0*sin(b-(p/(1+x0*x0+y0*y0))) - y0*cos(b-(p/(1*x0*x0+y0*y0))) -); -#X text 215 335 ===; -#X text 215 360 a = 0.85 \, b = 0.9 \, k = 0.4 \, p = 7.7; -#X text 215 385 a = 1.0 \, b = 0.9 \, k = 0.4 \, p = 6.0; -#X obj 50 463 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 492 metro 50; -#X obj 69 535 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 535 5 0 0 0 - - -; -#X msg 69 564 om \$1; -#X msg 184 564 set \$1; -#X msg 318 564 reset; -#X floatatom 59 592 5 0 0 0 - - -; -#X floatatom 194 592 5 0 0 0 - - -; -#X msg 59 621 x \$1; -#X msg 194 621 y \$1; -#X floatatom 88 650 5 0 0 0 - - -; -#X floatatom 184 650 5 0 0 0 - - -; -#X floatatom 280 650 5 0 0 0 - - -; -#X floatatom 376 650 5 0 0 0 - - -; -#X msg 88 679 a \$1; -#X msg 184 679 b \$1; -#X msg 280 679 c \$1; -#X msg 376 679 p \$1; -#X obj 50 708 noise.ikeda; -#X obj 50 736 ui.display; -#X obj 20 770 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 775 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 215 105 z[n+1] = a + b*z[n]*exp(kj - pj/(1+|z[n]^2|)); +#X text 215 130 where z is a complex number; +#X text 215 155 real number formula by euler returns:; +#X text 215 180 ===; +#X text 215 205 x[n+1] = a + k*(x0*cos(t[n])) - y0*sin(t[n]) ); +#X text 215 230 y[n+1] = k*(x0*sin(t[n])) - y0*cos(t[n]); +#X text 215 255 ===; +#X text 215 280 where t[n] = b - p/(1 + x[n]^2 + y[n]^2); +#X text 215 305 a = 0.85 \, b = 0.9 \, k = 0.4 \, p = 7.7; +#X text 215 330 a = 1.0 \, b = 0.9 \, k = 0.4 \, p = 6.0; +#X obj 215 355 ui.link @background_color 0.98039 0.98039 0.98039 +@title wiki: Ikeda map @url https://en.wikipedia.org/wiki/Ikeda_map; +#X obj 50 416 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 445 metro 50; +#X obj 69 474 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 474 5 0 0 0 - - -; +#X msg 69 503 om \$1; +#X msg 184 503 set \$1; +#X msg 318 503 reset; +#X floatatom 59 532 5 0 0 0 - - -; +#X floatatom 194 532 5 0 0 0 - - -; +#X msg 59 560 x \$1; +#X msg 194 560 y \$1; +#X floatatom 88 589 5 0 0 0 - - -; +#X floatatom 184 589 5 0 0 0 - - -; +#X floatatom 280 589 5 0 0 0 - - -; +#X floatatom 376 589 5 0 0 0 - - -; +#X msg 88 618 a \$1; +#X msg 184 618 b \$1; +#X msg 280 618 c \$1; +#X msg 376 618 p \$1; +#X obj 50 647 noise.ikeda; +#X obj 50 676 ui.display; +#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 730 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 810 1\.; -#X text 150 810 float; -#X obj 246 811 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 810 ARG0: a value (optional). Type: float.; -#X text 110 830 2\.; -#X text 150 830 float; -#X obj 246 831 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 830 ARG1: b value (optional). Type: float.; -#X text 110 850 3\.; -#X text 150 850 float; -#X obj 246 851 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 850 ARG2: k value (optional). Type: float.; -#X text 110 870 4\.; -#X text 150 870 float; -#X obj 246 871 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 870 ARG3: p value (optional). Type: float.; -#X text 110 890 5\.; -#X text 150 890 float; -#X obj 246 891 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 890 ARG4: nx value (optional). Type: float.; -#X text 110 910 6\.; -#X text 150 910 float; -#X obj 246 911 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 910 ARG5: ny value (optional). Type: float.; -#X obj 20 940 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 945 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 765 1\.; +#X text 150 765 float; +#X obj 246 766 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 765 A: a value (optional). Type: float.; +#X text 110 785 2\.; +#X text 150 785 float; +#X obj 246 786 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 785 B: b value (optional). Type: float.; +#X text 110 805 3\.; +#X text 150 805 float; +#X obj 246 806 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 805 K: k value (optional). Type: float.; +#X text 110 825 4\.; +#X text 150 825 float; +#X obj 246 826 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 825 P: p value (optional). Type: float.; +#X text 110 845 5\.; +#X text 150 845 float; +#X obj 246 846 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 845 NX: nx value (optional). Type: float.; +#X text 110 865 6\.; +#X text 150 865 float; +#X obj 246 866 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 865 NY: ny value (optional). Type: float.; +#X obj 20 895 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 900 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 980 a; -#X text 245 980 Arguments are:; -#X obj 255 1003 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1003 A: a value. Type: float.; -#X msg 110 1028 b; -#X text 245 1028 Arguments are:; -#X obj 255 1051 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1051 B: b value. Type: float.; -#X msg 110 1076 c; -#X text 245 1076 Arguments are:; -#X obj 255 1099 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1099 K: k value (note the "c" method in original a-chaos +#X msg 110 935 a; +#X text 245 935 Arguments are:; +#X obj 255 958 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 958 A: a value. Type: float.; +#X msg 110 983 b; +#X text 245 983 Arguments are:; +#X obj 255 1006 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1006 B: b value. Type: float.; +#X msg 110 1031 c; +#X text 245 1031 Arguments are:; +#X obj 255 1054 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1054 K: k value (note the "c" method in original a-chaos library). Type: float.; -#X msg 110 1139 om; -#X text 245 1139 Arguments are:; -#X obj 255 1162 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1162 OM: enables output when cut or fold value is changed. +#X msg 110 1094 om; +#X text 245 1094 Arguments are:; +#X obj 255 1117 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1117 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 1202 p; -#X text 245 1202 Arguments are:; -#X obj 255 1225 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1225 P: p value. Type: float.; -#X msg 110 1250 reset; -#X text 245 1250 reset state.; -#X msg 110 1277 set; -#X text 245 1277 Arguments are:; -#X obj 255 1300 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1300 SET: set to value. Type: float.; -#X msg 110 1325 x; -#X text 245 1325 Arguments are:; -#X obj 255 1348 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1348 NX: x value. Type: float.; -#X msg 110 1373 y; -#X text 245 1373 Arguments are:; -#X obj 255 1396 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1396 NY: y value. Type: float.; -#X obj 20 1431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1436 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1157 p; +#X text 245 1157 Arguments are:; +#X obj 255 1180 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1180 P: p value. Type: float.; +#X msg 110 1205 reset; +#X text 245 1205 reset state.; +#X msg 110 1232 set; +#X text 245 1232 Arguments are:; +#X obj 255 1255 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1255 SET: set to value. Type: float.; +#X msg 110 1280 x; +#X text 245 1280 Arguments are:; +#X obj 255 1303 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1303 NX: x value. Type: float.; +#X msg 110 1328 y; +#X text 245 1328 Arguments are:; +#X obj 255 1351 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1351 NY: y value. Type: float.; +#X obj 20 1386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1391 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1437 1\.; -#X text 150 1437 *bang*; -#X text 245 1437 output value.; -#X text 150 1457 *any*; -#X text 245 1457 a: a value.; -#X text 150 1477 *any*; -#X text 245 1477 b: b value.; -#X text 150 1497 *any*; -#X text 245 1497 c: c value.; -#X text 150 1517 *any*; -#X text 245 1517 d: d value.; -#X text 150 1537 *any*; -#X text 245 1537 r: r value.; -#X text 150 1557 *any*; -#X text 245 1557 dt: dt value.; -#X text 150 1577 *any*; -#X text 245 1577 om: enables output when any value is changed.; -#X obj 20 1607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1612 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1392 1\.; +#X text 150 1392 *bang*; +#X text 245 1392 output value.; +#X obj 20 1422 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1427 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1613 1\.; -#X text 245 1613 main outlet.; +#X text 110 1428 1\.; +#X text 245 1428 x outlet.; +#X text 110 1448 2\.; +#X text 245 1448 y outlet.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1663 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1666 library: ceammc v0.9.4; -#N canvas 10 1685 400 290 info 0; +#X obj 1 1498 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1501 library: ceammc v0.9.6; +#N canvas 10 1520 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.ikeda; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; @@ -163,7 +150,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1685 pd info; +#X restore 10 1520 pd info; #X connect 17 0 18 0; #X connect 19 0 21 0; #X connect 20 0 22 0; diff --git a/ceammc/ext/doc/noise.ikeda.pddoc b/ceammc/ext/doc/noise.ikeda.pddoc index 8551e86aae..41c2ab34c8 100644 --- a/ceammc/ext/doc/noise.ikeda.pddoc +++ b/ceammc/ext/doc/noise.ikeda.pddoc @@ -6,35 +6,34 @@ André Sier - Part of a-chaos library + Ikeda attractor % ceammc noise noise - .5 + 0.5 Ikeda attractor - --------------- - zn+1 = a + b zn exp[ i k - i p / (1 + | zn2 | ) ] - --- + z[n+1] = a + b*z[n]*exp(kj - pj/(1+|z[n]^2|)) where z is a complex number real number formula by euler returns: === - xn+1 = a + k*( x0*cos(b-(p/(1+x0*x0+y0*y0))) - y0*sin(b-(p/(1*x0*x0+y0*y0))) - ) - yn+1 = k*( x0*sin(b-(p/(1+x0*x0+y0*y0))) - y0*cos(b-(p/(1*x0*x0+y0*y0))) ) + x[n+1] = a + k*(x0*cos(t[n])) - y0*sin(t[n]) ) + y[n+1] = k*(x0*sin(t[n])) - y0*cos(t[n]) === + where t[n] = b - p/(1 + x[n]^2 + y[n]^2) a = 0.85, b = 0.9, k = 0.4, p = 7.7 a = 1.0, b = 0.9, k = 0.4, p = 6.0 + wiki: Ikeda map - a value (optional) - b value (optional) - k value (optional) - p value (optional) - nx value (optional) - ny value (optional) + a value (optional) + b value (optional) + k value (optional) + p value (optional) + nx value (optional) + ny value (optional) @@ -68,27 +67,19 @@ output value - a: a value - b: b value - c: c value - d: d value - r: r value - dt: dt value - om: enables output when any value is changed - main outlet + x outlet + y outlet new random number every int(SR/freq) samples or so - noise generation freq + noise + generation freq noise generation freq. New random number every int(SR/freq) - on/off dsp - processing + units="hertz">noise generation freq. New random number every int(SR/freq) + on/off dsp processing diff --git a/ceammc/ext/doc/noise.lfreq~-help.pd b/ceammc/ext/doc/noise.lfreq~-help.pd index 699de69667..8ae65b455a 100644 --- a/ceammc/ext/doc/noise.lfreq~-help.pd +++ b/ceammc/ext/doc/noise.lfreq~-help.pd @@ -17,43 +17,44 @@ -49933 0; #X text 110 452 1\.; #X text 150 452 float; -#X obj 246 453 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 452 FREQ: noise generation freq. Type: float.; -#X obj 20 482 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 487 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 453 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 452 FREQ(Hz): noise generation freq. Type: float. Range: +5\...22050; +#X obj 20 497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 502 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 522 @active; -#X text 245 522 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 564 @freq; -#X text 245 564 Get/Set noise generation freq. Type: float. Units: +#X msg 110 537 @active; +#X text 245 537 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 566 @freq; +#X text 245 566 Get/Set noise generation freq. Type: float. Units: Hz. Default value: 1000\. Range: 5\...22050\.; -#X obj 20 616 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 621 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 618 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 623 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 622 1\.; -#X text 150 622 *float*; -#X text 245 622 set average frequency.; -#X obj 20 652 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 657 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 624 1\.; +#X text 150 624 *float*; +#X text 245 624 set average frequency.; +#X obj 20 654 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 659 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 658 1\.; -#X text 245 658 output signal.; +#X text 110 660 1\.; +#X text 245 660 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 708 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 711 library: ceammc v0.9.4; -#X text 571 723 see also:; -#X obj 645 723 noise.lfreq0~; -#N canvas 10 730 400 290 info 0; +#X obj 1 710 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 713 library: ceammc v0.9.6; +#X text 571 725 see also:; +#X obj 645 725 noise.lfreq0~; +#N canvas 10 732 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.lfreq~; #X text 10 76 category:; @@ -72,7 +73,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 730 pd info; +#X restore 10 732 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/noise.lfreq~.pddoc b/ceammc/ext/doc/noise.lfreq~.pddoc index f9bbae0260..cb89b08407 100644 --- a/ceammc/ext/doc/noise.lfreq~.pddoc +++ b/ceammc/ext/doc/noise.lfreq~.pddoc @@ -17,13 +17,13 @@ - noise generation freq + noise + generation freq noise generation freq - on/off dsp - processing + units="hertz">noise generation freq + on/off dsp processing diff --git a/ceammc/ext/doc/noise.lorenz-help.pd b/ceammc/ext/doc/noise.lorenz-help.pd index 89d5321a0e..73140ef907 100644 --- a/ceammc/ext/doc/noise.lorenz-help.pd +++ b/ceammc/ext/doc/noise.lorenz-help.pd @@ -1,140 +1,147 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 668 50 cnv 1 97 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 668 50 Lorenz chaos; #X obj 1 1 cnv 5 765 40 empty empty noise.lorenz 20 20 0 20 -104026 -4096 0; #X obj 654 11 noise.lorenz; -#X obj 210 80 cnv 1 555 85 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 108 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Lorenz chaos by Heuns method - extra accuracy; #X text 215 105 sigma replaced with a; #X text 215 130 b replaced with c; -#X obj 50 208 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 237 metro 50; -#X obj 69 280 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 280 5 0 0 0 - - -; -#X msg 69 309 om \$1; -#X msg 184 309 set \$1; -#X msg 318 309 reset; -#X floatatom 59 337 5 0 0 0 - - -; -#X floatatom 194 337 5 0 0 0 - - -; -#X msg 59 366 r \$1; -#X msg 194 366 dt \$1; -#X floatatom 88 395 5 0 0 0 - - -; -#X floatatom 184 395 5 0 0 0 - - -; -#X msg 88 424 a \$1; -#X msg 184 424 c \$1; -#X floatatom 126 453 5 0 0 0 - - -; -#X floatatom 222 453 5 0 0 0 - - -; -#X floatatom 318 453 5 0 0 0 - - -; -#X msg 126 481 x \$1; -#X msg 222 481 y \$1; -#X msg 318 481 z \$1; -#X obj 50 510 noise.lorenz; -#X obj 50 539 ui.display; -#X obj 20 573 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 578 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 215 155 ui.link @background_color 0.98039 0.98039 0.98039 +@title wiki: Lorenz system @url +https://en.wikipedia.org/wiki/Lorenz_system; +#X obj 50 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 245 metro 50; +#X obj 69 288 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 288 5 0 0 0 - - -; +#X msg 69 317 om \$1; +#X msg 184 317 set \$1; +#X msg 318 317 reset; +#X floatatom 59 346 5 0 0 0 - - -; +#X floatatom 194 346 5 0 0 0 - - -; +#X msg 59 375 r \$1; +#X msg 194 375 dt \$1; +#X floatatom 88 403 5 0 0 0 - - -; +#X floatatom 184 403 5 0 0 0 - - -; +#X msg 88 432 a \$1; +#X msg 184 432 c \$1; +#X floatatom 126 461 5 0 0 0 - - -; +#X floatatom 222 461 5 0 0 0 - - -; +#X floatatom 318 461 5 0 0 0 - - -; +#X msg 126 490 x \$1; +#X msg 222 490 y \$1; +#X msg 318 490 z \$1; +#X obj 50 519 noise.lorenz; +#X obj 50 547 ui.display; +#X obj 20 596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 601 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 613 1\.; -#X text 150 613 float; -#X obj 246 614 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 613 ARG0: x value (optional). Type: float.; -#X text 110 633 2\.; -#X text 150 633 float; -#X obj 246 634 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 633 ARG1: y value (optional). Type: float.; -#X text 110 653 3\.; -#X text 150 653 float; -#X obj 246 654 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 653 ARG2: z value (optional). Type: float.; -#X text 110 673 4\.; -#X text 150 673 float; -#X obj 246 674 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 673 ARG3: a value (optional). Type: float.; -#X text 110 693 5\.; -#X text 150 693 float; -#X obj 246 694 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 693 ARG4: r value (optional). Type: float.; -#X text 110 713 6\.; -#X text 150 713 float; -#X obj 246 714 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 713 ARG5: c value (optional). Type: float.; -#X text 110 733 7\.; -#X text 150 733 float; -#X obj 246 734 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 733 ARG6: dt value (optional). Type: float.; -#X obj 20 763 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 768 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 636 1\.; +#X text 150 636 float; +#X obj 246 637 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 636 X: x value (optional). Type: float.; +#X text 110 656 2\.; +#X text 150 656 float; +#X obj 246 657 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 656 Y: y value (optional). Type: float.; +#X text 110 676 3\.; +#X text 150 676 float; +#X obj 246 677 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 676 Z: z value (optional). Type: float.; +#X text 110 696 4\.; +#X text 150 696 float; +#X obj 246 697 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 696 A: a value (optional). Type: float.; +#X text 110 716 5\.; +#X text 150 716 float; +#X obj 246 717 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 716 R: r value (optional). Type: float.; +#X text 110 736 6\.; +#X text 150 736 float; +#X obj 246 737 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 736 C: c value (optional). Type: float.; +#X text 110 756 7\.; +#X text 150 756 float; +#X obj 246 757 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 756 DT: dt value (optional). Type: float.; +#X obj 20 786 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 791 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 803 a; -#X text 245 803 Arguments are:; -#X obj 255 826 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 826 A: a value. Type: float.; -#X msg 110 851 c; -#X text 245 851 Arguments are:; -#X obj 255 874 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 874 B: b value. Type: float.; -#X msg 110 899 dt; -#X text 245 899 Arguments are:; -#X obj 255 922 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 922 DT: dt value. Type: float.; -#X msg 110 947 om; -#X text 245 947 Arguments are:; -#X obj 255 970 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 970 OM: enables output when cut or fold value is changed. +#X msg 110 826 a; +#X text 245 826 Arguments are:; +#X obj 255 849 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 849 A: a value. Type: float.; +#X msg 110 874 c; +#X text 245 874 Arguments are:; +#X obj 255 897 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 897 B: b value. Type: float.; +#X msg 110 922 dt; +#X text 245 922 Arguments are:; +#X obj 255 945 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 945 DT: dt value. Type: float.; +#X msg 110 970 om; +#X text 245 970 Arguments are:; +#X obj 255 993 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 993 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 1010 r; -#X text 245 1010 Arguments are:; -#X obj 255 1033 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1033 R: r value. Type: float.; -#X msg 110 1058 reset; -#X text 245 1058 reset state.; -#X msg 110 1085 set; -#X text 245 1085 Arguments are:; -#X obj 255 1108 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1108 SET: set to value. Type: float.; -#X msg 110 1133 x; -#X text 245 1133 Arguments are:; -#X obj 255 1156 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1156 NX: x value. Type: float.; -#X msg 110 1181 y; -#X text 245 1181 Arguments are:; -#X obj 255 1204 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1204 NY: y value. Type: float.; -#X msg 110 1229 z; -#X text 245 1229 Arguments are:; -#X obj 255 1252 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1252 NZ: z value. Type: float.; -#X obj 20 1287 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1292 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1033 r; +#X text 245 1033 Arguments are:; +#X obj 255 1056 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1056 R: r value. Type: float.; +#X msg 110 1081 reset; +#X text 245 1081 reset state.; +#X msg 110 1108 set; +#X text 245 1108 Arguments are:; +#X obj 255 1131 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1131 SET: set to value. Type: float.; +#X msg 110 1156 x; +#X text 245 1156 Arguments are:; +#X obj 255 1179 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1179 NX: x value. Type: float.; +#X msg 110 1204 y; +#X text 245 1204 Arguments are:; +#X obj 255 1227 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1227 NY: y value. Type: float.; +#X msg 110 1252 z; +#X text 245 1252 Arguments are:; +#X obj 255 1275 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1275 NZ: z value. Type: float.; +#X obj 20 1310 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1315 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1293 1\.; -#X text 150 1293 *bang*; -#X text 245 1293 output value.; -#X obj 20 1323 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1328 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1316 1\.; +#X text 150 1316 *bang*; +#X text 245 1316 output value.; +#X obj 20 1346 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1351 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1329 1\.; -#X text 245 1329 main outlet.; +#X text 110 1352 1\.; +#X text 245 1352 x outlet.; +#X text 110 1372 2\.; +#X text 245 1372 y outlet.; +#X text 110 1392 3\.; +#X text 245 1392 z outlet.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1379 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1382 library: ceammc v0.9.4; -#N canvas 10 1401 400 290 info 0; +#X obj 1 1442 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1445 library: ceammc v0.9.6; +#N canvas 10 1464 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.lorenz; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 Richard Dudas \, Mikhail Malt \, André Sier; #X text 10 142 license:; @@ -147,26 +154,26 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1401 pd info; -#X connect 8 0 9 0; -#X connect 10 0 12 0; +#X restore 10 1464 pd info; +#X connect 9 0 10 0; #X connect 11 0 13 0; -#X connect 15 0 17 0; +#X connect 12 0 14 0; #X connect 16 0 18 0; -#X connect 19 0 21 0; +#X connect 17 0 19 0; #X connect 20 0 22 0; -#X connect 23 0 26 0; +#X connect 21 0 23 0; #X connect 24 0 27 0; #X connect 25 0 28 0; -#X connect 29 0 30 0; -#X connect 17 0 29 0; -#X connect 18 0 29 0; -#X connect 21 0 29 0; -#X connect 22 0 29 0; #X connect 26 0 29 0; -#X connect 27 0 29 0; -#X connect 28 0 29 0; -#X connect 12 0 29 0; -#X connect 13 0 29 0; -#X connect 14 0 29 0; -#X connect 9 0 29 0; \ No newline at end of file +#X connect 30 0 31 0; +#X connect 18 0 30 0; +#X connect 19 0 30 0; +#X connect 22 0 30 0; +#X connect 23 0 30 0; +#X connect 27 0 30 0; +#X connect 28 0 30 0; +#X connect 29 0 30 0; +#X connect 13 0 30 0; +#X connect 14 0 30 0; +#X connect 15 0 30 0; +#X connect 10 0 30 0; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.lorenz.pddoc b/ceammc/ext/doc/noise.lorenz.pddoc index adb189ffbf..2be7f0b6c4 100644 --- a/ceammc/ext/doc/noise.lorenz.pddoc +++ b/ceammc/ext/doc/noise.lorenz.pddoc @@ -8,26 +8,27 @@ Mikhail Malt André Sier - Part of a-chaos library + Lorenz chaos % ceammc noise noise - .5 + 0.5 Lorenz chaos by Heuns method - extra accuracy sigma replaced with a b replaced with c + wiki: Lorenz system - x value (optional) - y value (optional) - z value (optional) - a value (optional) - r value (optional) - c value (optional) - dt value (optional) + x value (optional) + y value (optional) + z value (optional) + a value (optional) + r value (optional) + c value (optional) + dt value (optional) @@ -66,12 +67,13 @@ - main outlet + x outlet + y outlet + z outlet André Sier - Part of a-chaos library + lyapunov random attractor % ceammc noise noise - .5 + 0.5 inspired by Paul Bourke, implementation by André Sier @@ -23,22 +23,23 @@ --- On average 98% of the random selections of (an, bn) result in an infinite series. - This is so common because of the range (-2 <= a,b <= 2) for each of the + This is so common because of the range (-2<=a, b<=2) for each of the parameters a and b, the number of infinite cases will reduce greatly with a smaller range. About 1% were point attractors, and about 0.5% were periodic basins of attraction. === - xn+1 = a0 + a1 xn + a2 xn2 + a3 xn yn + a4 yn + a5 yn2 - yn+1 = b0 + b1 xn + b2 xn2 + b3 xn yn + b4 yn + b5 yn2 + x[n+1] = a[0] + a[1]*x[n] + a[2]*x[n]^2 + a[3]*x[n]*y[n] + a[4]*y[n] + + a[5]*y[n]^2 + y[n+1] = b[0] + b[1]*x[n] + b[2]*x[n]^2 + b[3]*x[n]*y[n] + b[4]*y[n] + + b[5]*y[n]^2 === - see references in object's source code - a value (optional) - b value (optional) - x value (optional) - y value (optional) + a value (optional) + b value (optional) + x value (optional) + y value (optional) @@ -50,10 +51,20 @@ is changed - a value + a[0] value + a[1] value + a[2] value + a[3] value + a[4] value + a[5] value - b value + b[0] value + b[1] value + b[2] value + b[3] value + b[4] value + b[5] value x value @@ -68,7 +79,8 @@ - main outlet + x outlet + y outlet diff --git a/ceammc/ext/doc/noise.navier_stokes-help.pd b/ceammc/ext/doc/noise.navier_stokes-help.pd index 01f2c410d3..5f82107d41 100644 --- a/ceammc/ext/doc/noise.navier_stokes-help.pd +++ b/ceammc/ext/doc/noise.navier_stokes-help.pd @@ -1,7 +1,7 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 546 50 cnv 1 219 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 546 50 navier-stokes diff equations; #X obj 1 1 cnv 5 765 40 empty empty noise.navier_stokes 20 20 0 20 -104026 -4096 0; #X obj 603 11 noise.navier_stokes; @@ -46,28 +46,28 @@ With 28.73 < R1 > 29.0 and R2 ± = 33.43\.; -49933 0; #X text 110 770 1\.; #X text 150 770 float; -#X obj 246 771 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 770 ARG0: a value (optional). Type: float.; +#X obj 246 771 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 770 A: a value (optional). Type: float.; #X text 110 790 2\.; #X text 150 790 float; -#X obj 246 791 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 790 ARG1: b value (optional). Type: float.; +#X obj 246 791 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 790 B: b value (optional). Type: float.; #X text 110 810 3\.; #X text 150 810 float; -#X obj 246 811 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 810 ARG2: c value (optional). Type: float.; +#X obj 246 811 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 810 C: c value (optional). Type: float.; #X text 110 830 4\.; #X text 150 830 float; -#X obj 246 831 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 830 ARG3: d value (optional). Type: float.; +#X obj 246 831 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 830 D: d value (optional). Type: float.; #X text 110 850 5\.; #X text 150 850 float; -#X obj 246 851 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 850 ARG4: r value (optional). Type: float.; +#X obj 246 851 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 850 R: r value (optional). Type: float.; #X text 110 870 6\.; #X text 150 870 float; -#X obj 246 871 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 870 ARG5: dt value (optional). Type: float.; +#X obj 246 871 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 870 DT: dt value (optional). Type: float.; #X obj 20 900 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 905 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -121,26 +121,34 @@ Type: int.; #X obj 20 1480 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X text 110 1481 1\.; -#X text 245 1481 main outlet.; +#X text 245 1481 a outlet.; +#X text 110 1501 2\.; +#X text 245 1501 b outlet.; +#X text 110 1521 3\.; +#X text 245 1521 c outlet.; +#X text 110 1541 4\.; +#X text 245 1541 d outlet.; +#X text 110 1561 5\.; +#X text 245 1561 e outlet.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1531 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1534 library: ceammc v0.9.4; -#N canvas 10 1553 400 290 info 0; +#X obj 1 1611 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1614 library: ceammc v0.9.6; +#N canvas 10 1633 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.navier_stokes; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 Richard Dudas \, André Sier; #X text 10 142 license:; @@ -153,7 +161,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1553 pd info; +#X restore 10 1633 pd info; #X connect 13 0 14 0; #X connect 15 0 17 0; #X connect 16 0 18 0; diff --git a/ceammc/ext/doc/noise.navier_stokes.pddoc b/ceammc/ext/doc/noise.navier_stokes.pddoc index 9758f66667..fbcebe4d8c 100644 --- a/ceammc/ext/doc/noise.navier_stokes.pddoc +++ b/ceammc/ext/doc/noise.navier_stokes.pddoc @@ -7,12 +7,12 @@ Richard Dudas André Sier - Part of a-chaos library + navier-stokes diff equations % ceammc noise noise - .5 + 0.5 A model obtained by a suitable five-mode truncation of the Navier-Stokes equations @@ -29,12 +29,12 @@ < <reyn> < R2. With 28.73 < R1 > 29.0 and R2 ± = 33.43. - a value (optional) - b value (optional) - c value (optional) - d value (optional) - r value (optional) - dt value (optional) + a value (optional) + b value (optional) + c value (optional) + d value (optional) + r value (optional) + dt value (optional) @@ -74,7 +74,11 @@ - main outlet + a outlet + b outlet + c outlet + d outlet + e outlet diff --git a/ceammc/ext/doc/noise.pink~-help.pd b/ceammc/ext/doc/noise.pink~-help.pd index 93984daeb0..71a7684fb5 100644 --- a/ceammc/ext/doc/noise.pink~-help.pd +++ b/ceammc/ext/doc/noise.pink~-help.pd @@ -16,33 +16,36 @@ carries an equal amount of noise energy.; light with this power spectrum.; #X obj 50 268 ui.dsp~; #X obj 50 312 noise.pink~; -#X obj 50 369 ui.scope~ @size 150 100; -#X obj 20 501 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 506 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 340 ui.gain~ @size 120 16; +#X obj 280 340 ui.ssc~ @size 300 120 @log_scale 1; +#X obj 50 427 dac~; +#X obj 50 455 ui.dsp~; +#X obj 20 504 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 509 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 541 @active; -#X text 245 541 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 598 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X msg 110 544 @active; +#X text 245 544 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 583 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 588 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 599 1\.; -#X text 245 599 output signal.; +#X text 110 589 1\.; +#X text 245 589 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 649 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 652 library: ceammc v0.9.4; -#X text 579 664 see also:; -#X obj 653 664 noise.white~; -#N canvas 10 671 400 290 info 0; +#X obj 1 639 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 642 library: ceammc v0.9.6; +#X text 579 654 see also:; +#X obj 653 654 noise.white~; +#N canvas 10 661 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.pink~; #X text 10 76 category:; @@ -61,5 +64,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 671 pd info; -#X connect 9 0 10 0; \ No newline at end of file +#X restore 10 661 pd info; +#X connect 9 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 12 0; +#X connect 10 0 12 1; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.pink~.pddoc b/ceammc/ext/doc/noise.pink~.pddoc index 96974a3e4f..8a3c234af6 100644 --- a/ceammc/ext/doc/noise.pink~.pddoc +++ b/ceammc/ext/doc/noise.pink~.pddoc @@ -17,8 +17,7 @@ - on/off dsp - processing + on/off dsp processing Pink noise or 1/f noise is a signal or process with a frequency spectrum such that @@ -38,11 +37,17 @@ [ui.dsp~] -[noise.pink~] -| -| -| -[ui.scope~] +[noise.pink~ ] +| | +[ui.gain~ @size 120 16] [ui.ssc~ @size 300 120 @log_scale 1] +|* +|* +|* +|* +|* +[dac~] + +[ui.dsp~] ]]> diff --git a/ceammc/ext/doc/noise.rossler-help.pd b/ceammc/ext/doc/noise.rossler-help.pd index c768e5ba67..a4ed5c5143 100644 --- a/ceammc/ext/doc/noise.rossler-help.pd +++ b/ceammc/ext/doc/noise.rossler-help.pd @@ -1,138 +1,145 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 629 50 cnv 1 136 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 629 50 Rössler attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.rossler 20 20 0 20 -104026 -4096 0; #X obj 646 11 noise.rossler; -#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 58 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Heuns' method; -#X obj 50 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 187 metro 50; -#X obj 69 230 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 230 5 0 0 0 - - -; -#X msg 69 259 om \$1; -#X msg 184 259 set \$1; -#X msg 318 259 reset; -#X floatatom 59 287 5 0 0 0 - - -; -#X floatatom 194 287 5 0 0 0 - - -; -#X floatatom 309 287 5 0 0 0 - - -; -#X msg 59 316 x \$1; -#X msg 194 316 y \$1; -#X msg 309 316 z \$1; -#X floatatom 88 345 5 0 0 0 - - -; -#X floatatom 184 345 5 0 0 0 - - -; -#X floatatom 280 345 5 0 0 0 - - -; -#X floatatom 376 345 5 0 0 0 - - -; -#X msg 88 374 a \$1; -#X msg 184 374 b \$1; -#X msg 280 374 c \$1; -#X msg 376 374 dt \$1; -#X obj 50 403 noise.rossler; -#X obj 50 431 ui.display; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 215 105 ui.link @background_color 0.98039 0.98039 0.98039 +@title wiki: Rössler attractor @url +https://en.wikipedia.org/wiki/R%C3%B6ssler_attractor; +#X obj 50 166 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 195 metro 50; +#X obj 69 238 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 238 5 0 0 0 - - -; +#X msg 69 267 om \$1; +#X msg 184 267 set \$1; +#X msg 318 267 reset; +#X floatatom 59 296 5 0 0 0 - - -; +#X floatatom 194 296 5 0 0 0 - - -; +#X floatatom 309 296 5 0 0 0 - - -; +#X msg 59 325 x \$1; +#X msg 194 325 y \$1; +#X msg 309 325 z \$1; +#X floatatom 88 353 5 0 0 0 - - -; +#X floatatom 184 353 5 0 0 0 - - -; +#X floatatom 280 353 5 0 0 0 - - -; +#X floatatom 376 353 5 0 0 0 - - -; +#X msg 88 382 a \$1; +#X msg 184 382 b \$1; +#X msg 280 382 c \$1; +#X msg 376 382 dt \$1; +#X obj 50 411 noise.rossler; +#X obj 50 440 ui.display; +#X obj 20 489 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 494 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 505 1\.; -#X text 150 505 float; -#X obj 246 506 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 505 ARG0: x value (optional). Type: float.; -#X text 110 525 2\.; -#X text 150 525 float; -#X obj 246 526 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 525 ARG1: y value (optional). Type: float.; -#X text 110 545 3\.; -#X text 150 545 float; -#X obj 246 546 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 545 ARG2: z value (optional). Type: float.; -#X text 110 565 4\.; -#X text 150 565 float; -#X obj 246 566 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 565 ARG3: a value (optional). Type: float.; -#X text 110 585 5\.; -#X text 150 585 float; -#X obj 246 586 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 585 ARG4: b value (optional). Type: float.; -#X text 110 605 6\.; -#X text 150 605 float; -#X obj 246 606 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 605 ARG5: c value (optional). Type: float.; -#X text 110 625 7\.; -#X text 150 625 float; -#X obj 246 626 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 625 ARG6: dt value (optional). Type: float.; -#X obj 20 655 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 660 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 529 1\.; +#X text 150 529 float; +#X obj 246 530 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 529 X: x value (optional). Type: float.; +#X text 110 549 2\.; +#X text 150 549 float; +#X obj 246 550 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 549 Y: y value (optional). Type: float.; +#X text 110 569 3\.; +#X text 150 569 float; +#X obj 246 570 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 569 Z: z value (optional). Type: float.; +#X text 110 589 4\.; +#X text 150 589 float; +#X obj 246 590 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 589 A: a value (optional). Type: float.; +#X text 110 609 5\.; +#X text 150 609 float; +#X obj 246 610 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 609 B: b value (optional). Type: float.; +#X text 110 629 6\.; +#X text 150 629 float; +#X obj 246 630 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 629 C: c value (optional). Type: float.; +#X text 110 649 7\.; +#X text 150 649 float; +#X obj 246 650 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 649 DT: dt value (optional). Type: float.; +#X obj 20 679 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 684 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 695 a; -#X text 245 695 Arguments are:; -#X obj 255 718 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 718 A: a value. Type: float.; -#X msg 110 743 b; -#X text 245 743 Arguments are:; -#X obj 255 766 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 766 B: b value. Type: float.; -#X msg 110 791 c; -#X text 245 791 Arguments are:; -#X obj 255 814 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 814 C: c value. Type: float.; -#X msg 110 839 dt; -#X text 245 839 Arguments are:; -#X obj 255 862 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 862 D: dt value. Type: float.; -#X msg 110 887 om; -#X text 245 887 Arguments are:; -#X obj 255 910 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 910 OM: enables output when cut or fold value is changed. +#X msg 110 719 a; +#X text 245 719 Arguments are:; +#X obj 255 742 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 742 A: a value. Type: float.; +#X msg 110 767 b; +#X text 245 767 Arguments are:; +#X obj 255 790 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 790 B: b value. Type: float.; +#X msg 110 815 c; +#X text 245 815 Arguments are:; +#X obj 255 838 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 838 C: c value. Type: float.; +#X msg 110 863 dt; +#X text 245 863 Arguments are:; +#X obj 255 886 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 886 D: dt value. Type: float.; +#X msg 110 911 om; +#X text 245 911 Arguments are:; +#X obj 255 934 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 934 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 950 reset; -#X text 245 950 reset state.; -#X msg 110 977 set; -#X text 245 977 Arguments are:; -#X obj 255 1000 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1000 SET: set to value. Type: float.; -#X msg 110 1025 x; -#X text 245 1025 Arguments are:; -#X obj 255 1048 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1048 NX: x value. Type: float.; -#X msg 110 1073 y; -#X text 245 1073 Arguments are:; -#X obj 255 1096 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1096 NY: y value. Type: float.; -#X msg 110 1121 z; -#X text 245 1121 Arguments are:; -#X obj 255 1144 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1144 NZ: z value. Type: float.; -#X obj 20 1179 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1184 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 974 reset; +#X text 245 974 reset state.; +#X msg 110 1001 set; +#X text 245 1001 Arguments are:; +#X obj 255 1024 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1024 SET: set to value. Type: float.; +#X msg 110 1049 x; +#X text 245 1049 Arguments are:; +#X obj 255 1072 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1072 NX: x value. Type: float.; +#X msg 110 1097 y; +#X text 245 1097 Arguments are:; +#X obj 255 1120 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1120 NY: y value. Type: float.; +#X msg 110 1145 z; +#X text 245 1145 Arguments are:; +#X obj 255 1168 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1168 NZ: z value. Type: float.; +#X obj 20 1203 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1208 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1185 1\.; -#X text 150 1185 *bang*; -#X text 245 1185 output value.; -#X obj 20 1215 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1220 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1209 1\.; +#X text 150 1209 *bang*; +#X text 245 1209 output value.; +#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1244 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1221 1\.; -#X text 245 1221 main outlet.; +#X text 110 1245 1\.; +#X text 245 1245 x outlet.; +#X text 110 1265 2\.; +#X text 245 1265 y outlet.; +#X text 110 1285 3\.; +#X text 245 1285 z outlet.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1271 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1274 library: ceammc v0.9.4; -#N canvas 10 1293 400 290 info 0; +#X obj 1 1335 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1338 library: ceammc v0.9.6; +#N canvas 10 1357 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.rossler; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; @@ -145,26 +152,26 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1293 pd info; -#X connect 6 0 7 0; -#X connect 8 0 10 0; +#X restore 10 1357 pd info; +#X connect 7 0 8 0; #X connect 9 0 11 0; -#X connect 13 0 16 0; +#X connect 10 0 12 0; #X connect 14 0 17 0; #X connect 15 0 18 0; -#X connect 19 0 23 0; +#X connect 16 0 19 0; #X connect 20 0 24 0; #X connect 21 0 25 0; #X connect 22 0 26 0; -#X connect 27 0 28 0; -#X connect 16 0 27 0; -#X connect 17 0 27 0; -#X connect 18 0 27 0; #X connect 23 0 27 0; -#X connect 24 0 27 0; -#X connect 25 0 27 0; -#X connect 26 0 27 0; -#X connect 10 0 27 0; -#X connect 11 0 27 0; -#X connect 12 0 27 0; -#X connect 7 0 27 0; \ No newline at end of file +#X connect 28 0 29 0; +#X connect 17 0 28 0; +#X connect 18 0 28 0; +#X connect 19 0 28 0; +#X connect 24 0 28 0; +#X connect 25 0 28 0; +#X connect 26 0 28 0; +#X connect 27 0 28 0; +#X connect 11 0 28 0; +#X connect 12 0 28 0; +#X connect 13 0 28 0; +#X connect 8 0 28 0; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.rossler.pddoc b/ceammc/ext/doc/noise.rossler.pddoc index 211a6d51c4..49d5bb473a 100644 --- a/ceammc/ext/doc/noise.rossler.pddoc +++ b/ceammc/ext/doc/noise.rossler.pddoc @@ -6,24 +6,26 @@ André Sier - Part of a-chaos library + Rössler attractor % ceammc noise noise - .5 + 0.5 Heuns' method + wiki: Rössler + attractor - x value (optional) - y value (optional) - z value (optional) - a value (optional) - b value (optional) - c value (optional) - dt value (optional) + x value (optional) + y value (optional) + z value (optional) + a value (optional) + b value (optional) + c value (optional) + dt value (optional) @@ -62,12 +64,13 @@ - main outlet + x outlet + y outlet + z outlet André Sier - Part of a-chaos library + Stein distribution % ceammc noise noise - .5 + 0.5 Stein distribution diff --git a/ceammc/ext/doc/noise.torus-help.pd b/ceammc/ext/doc/noise.torus-help.pd index f4c765eb2a..a745c494fc 100644 --- a/ceammc/ext/doc/noise.torus-help.pd +++ b/ceammc/ext/doc/noise.torus-help.pd @@ -1,101 +1,102 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 644 50 cnv 1 121 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 644 50 torus attractor; #X obj 1 1 cnv 5 765 40 empty empty noise.torus 20 20 0 20 -104026 -4096 0; #X obj 661 11 noise.torus; -#X obj 210 80 cnv 1 555 110 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 a-torus; -#X text 215 105 try these parameters:; -#X text 215 130 0.7 1.1 1.3; -#X text 215 155 0.9 1\. 1.6; -#X obj 50 233 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 262 metro 50; -#X obj 69 305 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 184 305 5 0 0 0 - - -; -#X msg 69 334 om \$1; -#X msg 184 334 set \$1; -#X msg 318 334 reset; -#X floatatom 88 362 5 0 0 0 - - -; -#X floatatom 184 362 5 0 0 0 - - -; -#X floatatom 280 362 5 0 0 0 - - -; -#X msg 88 391 x \$1; -#X msg 184 391 y \$1; -#X msg 280 391 cr \$1; -#X obj 50 420 noise.torus; -#X obj 50 449 ui.display; -#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 488 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 210 80 cnv 1 555 85 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 try these parameters:; +#X text 215 105 0.7 1.1 1.3; +#X text 215 130 0.9 1\. 1.6; +#X obj 50 193 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 222 metro 50; +#X obj 69 265 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 184 265 5 0 0 0 - - -; +#X msg 69 294 om \$1; +#X msg 184 294 set \$1; +#X msg 318 294 reset; +#X floatatom 88 323 5 0 0 0 - - -; +#X floatatom 184 323 5 0 0 0 - - -; +#X floatatom 280 323 5 0 0 0 - - -; +#X msg 88 352 x \$1; +#X msg 184 352 y \$1; +#X msg 280 352 cr \$1; +#X obj 50 380 noise.torus; +#X obj 50 409 ui.display; +#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 463 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 523 1\.; -#X text 150 523 float; -#X obj 246 524 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 523 ARG0: x value (optional). Type: float.; -#X text 110 543 2\.; -#X text 150 543 float; -#X obj 246 544 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 543 ARG1: y value (optional). Type: float.; -#X text 110 563 3\.; -#X text 150 563 float; -#X obj 246 564 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 563 ARG2: cr value (optional). Type: float.; -#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 598 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 110 498 1\.; +#X text 150 498 float; +#X obj 246 499 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 498 X: x value (optional). Type: float.; +#X text 110 518 2\.; +#X text 150 518 float; +#X obj 246 519 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 518 Y: y value (optional). Type: float.; +#X text 110 538 3\.; +#X text 150 538 float; +#X obj 246 539 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 538 CR: cr value (optional). Type: float.; +#X obj 20 568 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 573 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 633 cr; -#X text 245 633 Arguments are:; -#X obj 255 656 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 656 SEED: cr value. Type: float.; -#X msg 110 681 om; -#X text 245 681 Arguments are:; -#X obj 255 704 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 704 OM: enables output when cut or fold value is changed. +#X msg 110 608 cr; +#X text 245 608 Arguments are:; +#X obj 255 631 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 631 SEED: cr value. Type: float.; +#X msg 110 656 om; +#X text 245 656 Arguments are:; +#X obj 255 679 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 679 OM: enables output when cut or fold value is changed. Type: int.; -#X msg 110 744 reset; -#X text 245 744 reset state.; -#X msg 110 771 set; -#X text 245 771 Arguments are:; -#X obj 255 794 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 794 SET: set to value. Type: float.; -#X msg 110 819 x; -#X text 245 819 Arguments are:; -#X obj 255 842 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 842 NX: x value. Type: float.; -#X msg 110 867 y; -#X text 245 867 Arguments are:; -#X obj 255 890 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 890 NY: y value. Type: float.; -#X obj 20 925 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 930 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 719 reset; +#X text 245 719 reset state.; +#X msg 110 746 set; +#X text 245 746 Arguments are:; +#X obj 255 769 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 769 SET: set to value. Type: float.; +#X msg 110 794 x; +#X text 245 794 Arguments are:; +#X obj 255 817 cnv 1 23 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 817 NX: x value. Type: float.; +#X msg 110 842 y; +#X text 245 842 Arguments are:; +#X obj 255 865 cnv 1 22 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 865 NY: y value. Type: float.; +#X obj 20 900 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 905 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 931 1\.; -#X text 150 931 *bang*; -#X text 245 931 output value.; -#X obj 20 961 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 966 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 906 1\.; +#X text 150 906 *bang*; +#X text 245 906 output value.; +#X obj 20 936 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 941 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 967 1\.; -#X text 245 967 main outlet.; +#X text 110 942 1\.; +#X text 245 942 x outlet.; +#X text 110 962 2\.; +#X text 245 962 y outlet.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 1017 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1020 library: ceammc v0.9.4; -#N canvas 10 1039 400 290 info 0; +#X obj 1 1012 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1015 library: ceammc v0.9.6; +#N canvas 10 1034 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.torus; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; @@ -108,18 +109,18 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1039 pd info; -#X connect 9 0 10 0; +#X restore 10 1034 pd info; +#X connect 8 0 9 0; +#X connect 10 0 12 0; #X connect 11 0 13 0; -#X connect 12 0 14 0; +#X connect 15 0 18 0; #X connect 16 0 19 0; #X connect 17 0 20 0; -#X connect 18 0 21 0; -#X connect 22 0 23 0; -#X connect 19 0 22 0; -#X connect 20 0 22 0; #X connect 21 0 22 0; -#X connect 13 0 22 0; -#X connect 14 0 22 0; -#X connect 15 0 22 0; -#X connect 10 0 22 0; \ No newline at end of file +#X connect 18 0 21 0; +#X connect 19 0 21 0; +#X connect 20 0 21 0; +#X connect 12 0 21 0; +#X connect 13 0 21 0; +#X connect 14 0 21 0; +#X connect 9 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.torus.pddoc b/ceammc/ext/doc/noise.torus.pddoc index b75e6ee4a0..203d47c2f5 100644 --- a/ceammc/ext/doc/noise.torus.pddoc +++ b/ceammc/ext/doc/noise.torus.pddoc @@ -6,23 +6,22 @@ André Sier - Part of a-chaos library + torus attractor % ceammc noise noise - .5 + 0.5 - a-torus try these parameters: 0.7 1.1 1.3 0.9 1. 1.6 - x value (optional) - y value (optional) - cr value (optional) + x value (optional) + y value (optional) + cr value (optional) @@ -49,12 +48,12 @@ - main outlet + x outlet + y outlet noise-obj:0] [X metro->noise-obj] - ]]> diff --git a/ceammc/ext/doc/noise.verhulst-help.pd b/ceammc/ext/doc/noise.verhulst-help.pd index 654277c8a4..0499aa7d1c 100644 --- a/ceammc/ext/doc/noise.verhulst-help.pd +++ b/ceammc/ext/doc/noise.verhulst-help.pd @@ -1,7 +1,7 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 583 50 Part of a-chaos library; +#X obj 598 50 cnv 1 167 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 598 50 verhulst distribution; #X obj 1 1 cnv 5 765 40 empty empty noise.verhulst 20 20 0 20 -104026 -4096 0; #X obj 639 11 noise.verhulst; @@ -78,19 +78,19 @@ Type: int.; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; #X obj 1 914 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 917 library: ceammc v0.9.4; +#X text 10 917 library: ceammc v0.9.6; #N canvas 10 936 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.verhulst; #X text 10 76 category:; #X text 120 76 noise; #X text 10 98 since:; -#X text 120 98 .5; +#X text 120 98 0.5; #X text 10 120 authors:; #X text 120 120 André Sier; #X text 10 142 license:; diff --git a/ceammc/ext/doc/noise.verhulst.pddoc b/ceammc/ext/doc/noise.verhulst.pddoc index 2eb100bab6..a09069a210 100644 --- a/ceammc/ext/doc/noise.verhulst.pddoc +++ b/ceammc/ext/doc/noise.verhulst.pddoc @@ -6,12 +6,12 @@ André Sier - Part of a-chaos library + verhulst distribution % ceammc noise noise - .5 + 0.5 Verhulst distribution diff --git a/ceammc/ext/doc/noise.white~-help.pd b/ceammc/ext/doc/noise.white~-help.pd index 05247f6e27..2f63567d18 100644 --- a/ceammc/ext/doc/noise.white~-help.pd +++ b/ceammc/ext/doc/noise.white~-help.pd @@ -9,33 +9,36 @@ #X text 215 80 outputs random numbers between -1 and 1 at signal rate.; #X obj 50 143 ui.dsp~; #X obj 50 187 noise.white~; -#X obj 50 244 ui.scope~ @size 150 100; -#X obj 20 376 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 381 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 50 215 ui.gain~ @size 120 16; +#X obj 280 215 ui.ssc~ @size 300 120 @log_scale 1; +#X obj 50 302 dac~; +#X obj 50 330 ui.dsp~; +#X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 416 @active; -#X text 245 416 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 468 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 473 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X msg 110 419 @active; +#X text 245 419 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 463 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 474 1\.; -#X text 245 474 output signal.; +#X text 110 464 1\.; +#X text 245 464 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title noise @url ceammc.noise-help.pd; -#X obj 1 524 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 527 library: ceammc v0.9.4; -#X text 586 539 see also:; -#X obj 660 539 noise.pink~; -#N canvas 10 546 400 290 info 0; +#X obj 1 514 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 517 library: ceammc v0.9.6; +#X text 586 529 see also:; +#X obj 660 529 noise.pink~; +#N canvas 10 536 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 noise.white~; #X text 10 76 category:; @@ -54,5 +57,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 546 pd info; -#X connect 7 0 8 0; \ No newline at end of file +#X restore 10 536 pd info; +#X connect 7 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 8 0 10 1; \ No newline at end of file diff --git a/ceammc/ext/doc/noise.white~.pddoc b/ceammc/ext/doc/noise.white~.pddoc index 6863ce6c58..b116f3af1c 100644 --- a/ceammc/ext/doc/noise.white~.pddoc +++ b/ceammc/ext/doc/noise.white~.pddoc @@ -17,8 +17,7 @@ - on/off dsp - processing + on/off dsp processing outputs random numbers between -1 and 1 at signal rate. @@ -32,11 +31,17 @@ [ui.dsp~] -[noise.white~] -| -| -| -[ui.scope~] +[noise.white~ ] +| | +[ui.gain~ @size 120 16] [ui.ssc~ @size 300 120 @log_scale 1] +|* +|* +|* +|* +|* +[dac~] + +[ui.dsp~] ]]> diff --git a/ceammc/ext/doc/nsig~-help.pd b/ceammc/ext/doc/nsig~-help.pd index c02afa8d62..ddfd52c3c1 100644 --- a/ceammc/ext/doc/nsig~-help.pd +++ b/ceammc/ext/doc/nsig~-help.pd @@ -19,19 +19,19 @@ #X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 351 1\.; -#X text 150 351 float; -#X obj 246 352 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 NUM: @n property. Type: float. Range: 1\...12; +#X text 150 351 int; +#X obj 246 352 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 N: number of inputs/outputs. Type: int. Range: 1\...12; #X text 110 371 2\.; #X text 150 371 list; -#X obj 246 372 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 371 INIT: init values. Type: list.; +#X obj 246 372 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 371 VALUES: init values. Type: list.; #X obj 20 401 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 406 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 441 @n; -#X text 245 441 Get/Set number of inputs/outputs. Type: int. Default -value: 1\. Range: 1\...12\.; +#X text 245 441 (initonly) Get/Set number of inputs/outputs. Type: +int. Default value: 1\. Range: 1\...12\.; #X msg 110 483 @values; #X text 245 483 Get/Set current output values. Default: 0\. Type: list.; #X obj 20 522 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -63,7 +63,7 @@ value: 1\. Range: 1\...12\.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 714 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 717 library: ceammc v0.9.4; +#X text 10 717 library: ceammc v0.9.6; #X text 636 729 see also:; #X obj 710 729 sig~; #N canvas 10 736 400 290 info 0; @@ -71,7 +71,7 @@ value: 1\. Range: 1\...12\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 nsig~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/nsig~.pddoc b/ceammc/ext/doc/nsig~.pddoc index 220a8d0d5c..bb0093221a 100644 --- a/ceammc/ext/doc/nsig~.pddoc +++ b/ceammc/ext/doc/nsig~.pddoc @@ -20,13 +20,15 @@ - @n property - init values + number of + inputs/outputs + init values - number of - inputs/outputs - current output values. Default: 0 + number of inputs/outputs + current output values. Default: + 0 diff --git a/ceammc/ext/doc/obj.props-help.pd b/ceammc/ext/doc/obj.props-help.pd index c5f5eed839..f908e83f50 100644 --- a/ceammc/ext/doc/obj.props-help.pd +++ b/ceammc/ext/doc/obj.props-help.pd @@ -33,13 +33,13 @@ outlet; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 obj.props; #X text 10 76 category:; diff --git a/ceammc/ext/doc/osc.blit~-help.pd b/ceammc/ext/doc/osc.blit~-help.pd index 3eb658149d..3e8c72d81d 100644 --- a/ceammc/ext/doc/osc.blit~-help.pd +++ b/ceammc/ext/doc/osc.blit~-help.pd @@ -21,43 +21,48 @@ #X text 110 420 1\.; #X text 150 420 float; #X obj 246 421 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 420 freq(Hz): default frequency (440hz if not specified). +#X text 245 420 FREQ(Hz): default frequency (440hz if not specified). Type: float. Min value: 0; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 455 2\.; +#X text 150 455 int; +#X obj 246 456 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 455 HARMONICS: number of harmonics. Missing or 0 means +all available harmonics until SR/2\. Type: int. Min value: 0; +#X obj 20 500 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 505 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 505 @harmonics; -#X text 245 505 Get/Set number of harmonics. 0 means all available +#X msg 110 540 @harmonics; +#X text 245 540 Get/Set number of harmonics. 0 means all available harmonics until SR/2\. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 562 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 592 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 597 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 563 1\.; -#X text 245 563 frequency in Hz.; -#X text 110 583 2\.; -#X text 150 583 *bang*; -#X text 245 583 reset phase.; -#X obj 20 613 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 618 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 598 1\.; +#X text 245 598 frequency in Hz.; +#X text 110 618 2\.; +#X text 150 618 *bang*; +#X text 245 618 reset phase.; +#X obj 20 648 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 653 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 619 1\.; -#X text 245 619 output signal.; +#X text 110 654 1\.; +#X text 245 654 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 669 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 672 library: ceammc v0.9.4; -#X text 511 684 see also:; -#X obj 585 684 osc.saw~; -#X obj 659 684 osc.square~; -#N canvas 10 691 400 290 info 0; +#X obj 1 704 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 707 library: ceammc v0.9.6; +#X text 511 719 see also:; +#X obj 585 719 osc.saw~; +#X obj 659 719 osc.square~; +#N canvas 10 726 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.blit~; #X text 10 76 category:; @@ -76,7 +81,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 691 pd info; +#X restore 10 726 pd info; #X connect 4 0 9 0; #X connect 5 0 10 0; #X connect 6 0 10 0; diff --git a/ceammc/ext/doc/osc.blit~.pddoc b/ceammc/ext/doc/osc.blit~.pddoc index d6134935dd..fe72734c60 100644 --- a/ceammc/ext/doc/osc.blit~.pddoc +++ b/ceammc/ext/doc/osc.blit~.pddoc @@ -18,8 +18,10 @@ - default frequency (440hz + default frequency (440hz if not specified) + number of harmonics. Missing or 0 + means all available harmonics until SR/2 number of harmonics. 0 diff --git a/ceammc/ext/doc/osc.impulse~-help.pd b/ceammc/ext/doc/osc.impulse~-help.pd index 37d8d9317c..0a80497cb6 100644 --- a/ceammc/ext/doc/osc.impulse~-help.pd +++ b/ceammc/ext/doc/osc.impulse~-help.pd @@ -21,40 +21,40 @@ #X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 393 @active; -#X text 245 393 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 450 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 393 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 451 1\.; -#X text 150 451 *float*; -#X text 245 451 frequency in Hz. Min value: 20\.; -#X text 110 471 2\.; -#X text 150 471 *bang*; -#X text 245 471 reset phase.; -#X obj 20 501 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 506 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 438 1\.; +#X text 150 438 *float*; +#X text 245 438 frequency in Hz. Min value: 20\.; +#X text 110 458 2\.; +#X text 150 458 *bang*; +#X text 245 458 reset phase.; +#X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 493 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 507 1\.; -#X text 245 507 output signal.; +#X text 110 494 1\.; +#X text 245 494 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 557 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 560 library: ceammc v0.9.4; -#X text 335 572 see also:; -#X obj 409 572 osc.saw~; -#X obj 483 572 osc.tri~; -#X obj 557 572 osc.square~; -#X obj 653 572 lfo.impulse~; -#N canvas 10 579 400 290 info 0; +#X obj 1 544 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 547 library: ceammc v0.9.6; +#X text 335 559 see also:; +#X obj 409 559 osc.saw~; +#X obj 483 559 osc.tri~; +#X obj 557 559 osc.square~; +#X obj 653 559 lfo.impulse~; +#N canvas 10 566 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.impulse~; #X text 10 76 category:; @@ -73,7 +73,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 579 pd info; +#X restore 10 566 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/osc.impulse~.pddoc b/ceammc/ext/doc/osc.impulse~.pddoc index ea03bf8239..afbecff338 100644 --- a/ceammc/ext/doc/osc.impulse~.pddoc +++ b/ceammc/ext/doc/osc.impulse~.pddoc @@ -20,11 +20,10 @@ - frequency + frequency - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/osc.pulse~-help.pd b/ceammc/ext/doc/osc.pulse~-help.pd index c3ed8760dc..7ddb230976 100644 --- a/ceammc/ext/doc/osc.pulse~-help.pd +++ b/ceammc/ext/doc/osc.pulse~-help.pd @@ -19,49 +19,49 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): frequency. Type: float. Min value: 20; +#X text 245 434 FREQ(Hz): frequency. Type: float. Min value: 20; #X text 110 454 2\.; #X text 150 454 float; #X obj 246 455 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 454 duty: duty cycle. Type: float. Range: 0\...1; +#X text 245 454 DUTY: duty cycle. Type: float. Range: 0\...1; #X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 524 @active; -#X text 245 524 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 566 @duty; -#X text 245 566 Get/Set duty cycle. Type: float. Default value: 0.5\. +#X text 245 524 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 553 @duty; +#X text 245 553 Get/Set duty cycle. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 618 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 623 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 605 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 610 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 624 1\.; -#X text 150 624 *float*; -#X text 245 624 frequency in Hz.; -#X text 110 644 2\.; -#X text 150 644 *bang*; -#X text 245 644 reset phase.; -#X obj 20 674 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 679 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 611 1\.; +#X text 150 611 *float*; +#X text 245 611 frequency in Hz.; +#X text 110 631 2\.; +#X text 150 631 *bang*; +#X text 245 631 reset phase.; +#X obj 20 661 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 666 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 680 1\.; -#X text 245 680 output signal.; +#X text 110 667 1\.; +#X text 245 667 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 730 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 733 library: ceammc v0.9.4; -#X text 578 745 see also:; -#X obj 652 745 osc.impulse~; -#N canvas 10 752 400 290 info 0; +#X obj 1 717 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 720 library: ceammc v0.9.6; +#X text 578 732 see also:; +#X obj 652 732 osc.impulse~; +#N canvas 10 739 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.pulse~; #X text 10 76 category:; @@ -80,7 +80,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 752 pd info; +#X restore 10 739 pd info; #X connect 5 0 7 0; #X connect 4 0 8 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/osc.pulse~.pddoc b/ceammc/ext/doc/osc.pulse~.pddoc index 1a5c7ed9e8..9567dd959e 100644 --- a/ceammc/ext/doc/osc.pulse~.pddoc +++ b/ceammc/ext/doc/osc.pulse~.pddoc @@ -17,12 +17,11 @@ - frequency - duty cycle + frequency + duty cycle - on/off dsp - processing + on/off dsp processing duty cycle diff --git a/ceammc/ext/doc/osc.saw4~-help.pd b/ceammc/ext/doc/osc.saw4~-help.pd index b486ff8ef1..3dc0ee7aa2 100644 --- a/ceammc/ext/doc/osc.saw4~-help.pd +++ b/ceammc/ext/doc/osc.saw4~-help.pd @@ -23,48 +23,48 @@ suppression. 4nd order interpolation.; #X text 110 474 1\.; #X text 150 474 float; #X obj 246 475 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 474 freq(Hz): frequency. Type: float.; +#X text 245 474 FREQ(Hz): frequency. Type: float.; #X obj 20 504 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 509 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 544 @active; -#X text 245 544 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 586 @phase; -#X text 245 586 Get/Set phase. Type: float. Default value: 0\. Range: +#X text 245 544 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 573 @phase; +#X text 245 573 Get/Set phase. Type: float. Default value: 0\. Range: 0\...1\.; -#X obj 20 638 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 643 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 625 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 630 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 644 1\.; -#X text 150 644 *float*; -#X text 245 644 frequency in Hz.; -#X text 110 664 2\.; -#X text 150 664 *bang*; -#X text 245 664 reset phase.; -#X obj 20 694 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 699 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 631 1\.; +#X text 150 631 *float*; +#X text 245 631 frequency in Hz.; +#X text 110 651 2\.; +#X text 150 651 *bang*; +#X text 245 651 reset phase.; +#X obj 20 681 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 686 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 700 1\.; -#X text 245 700 output signal.; +#X text 110 687 1\.; +#X text 245 687 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 750 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 753 library: ceammc v0.9.4; -#X text 364 765 see also:; -#X obj 438 765 osc.saw~; -#X obj 512 765 osc.tri~; -#X obj 586 765 osc.square~; -#X obj 682 765 lfo.tri~; -#N canvas 10 772 400 290 info 0; +#X obj 1 737 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 740 library: ceammc v0.9.6; +#X text 364 752 see also:; +#X obj 438 752 osc.saw~; +#X obj 512 752 osc.tri~; +#X obj 586 752 osc.square~; +#X obj 682 752 lfo.tri~; +#N canvas 10 759 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.saw4~; #X text 10 76 category:; @@ -83,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 772 pd info; +#X restore 10 759 pd info; #X connect 6 0 8 0; #X connect 8 0 9 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/osc.saw4~.pddoc b/ceammc/ext/doc/osc.saw4~.pddoc index 20af1ff6ec..1db6f0c8b8 100644 --- a/ceammc/ext/doc/osc.saw4~.pddoc +++ b/ceammc/ext/doc/osc.saw4~.pddoc @@ -24,11 +24,10 @@ interpolation. - frequency + frequency - on/off dsp - processing + on/off dsp processing phase diff --git a/ceammc/ext/doc/osc.saw~-help.pd b/ceammc/ext/doc/osc.saw~-help.pd index eae1d436b4..7e0db108a0 100644 --- a/ceammc/ext/doc/osc.saw~-help.pd +++ b/ceammc/ext/doc/osc.saw~-help.pd @@ -23,45 +23,45 @@ suppression. 2nd order interpolation.; #X text 110 474 1\.; #X text 150 474 float; #X obj 246 475 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 474 freq(Hz): frequency. Type: float.; +#X text 245 474 FREQ(Hz): frequency. Type: float.; #X obj 20 504 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 509 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 544 @active; -#X text 245 544 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 601 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 544 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 583 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 588 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 602 1\.; -#X text 150 602 *float*; -#X text 245 602 frequency in Hz.; -#X text 110 622 2\.; -#X text 150 622 *bang*; -#X text 245 622 reset phase.; -#X obj 20 652 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 657 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 589 1\.; +#X text 150 589 *float*; +#X text 245 589 frequency in Hz.; +#X text 110 609 2\.; +#X text 150 609 *bang*; +#X text 245 609 reset phase.; +#X obj 20 639 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 644 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 658 1\.; -#X text 245 658 output signal.; +#X text 110 645 1\.; +#X text 245 645 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 708 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 711 library: ceammc v0.9.4; -#X text 357 723 see also:; -#X obj 431 723 osc.saw4~; -#X obj 512 723 osc.tri~; -#X obj 586 723 osc.square~; -#X obj 682 723 lfo.tri~; -#N canvas 10 730 400 290 info 0; +#X obj 1 695 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 698 library: ceammc v0.9.6; +#X text 357 710 see also:; +#X obj 431 710 osc.saw4~; +#X obj 512 710 osc.tri~; +#X obj 586 710 osc.square~; +#X obj 682 710 lfo.tri~; +#N canvas 10 717 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.saw~; #X text 10 76 category:; @@ -80,7 +80,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 730 pd info; +#X restore 10 717 pd info; #X connect 6 0 8 0; #X connect 8 0 9 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/osc.saw~.pddoc b/ceammc/ext/doc/osc.saw~.pddoc index 8748097b64..ca8d7f46ee 100644 --- a/ceammc/ext/doc/osc.saw~.pddoc +++ b/ceammc/ext/doc/osc.saw~.pddoc @@ -24,11 +24,10 @@ interpolation. - frequency + frequency - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/osc.sinfb~-help.pd b/ceammc/ext/doc/osc.sinfb~-help.pd index 73858404a6..92be8fae15 100644 --- a/ceammc/ext/doc/osc.sinfb~-help.pd +++ b/ceammc/ext/doc/osc.sinfb~-help.pd @@ -19,47 +19,47 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): initial frequency. Type: float. Range: 0\...20000; +#X text 245 434 FREQ(Hz): initial frequency. Type: float. Range: 0\...20000; #X text 110 454 2\.; #X text 150 454 float; #X obj 246 455 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 454 feedback: oscillator feedback coefficient in range +#X text 245 454 FEEDBACK: oscillator feedback coefficient in range 0\..2pi. Type: float. Range: 0\...6.283185; #X obj 20 499 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 504 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 539 @active; -#X text 245 539 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 581 @feedback; -#X text 245 581 Get/Set oscillator feedback coefficient. Type: float. -Default value: 0\. Range: 0\...6.28319\.; -#X obj 20 633 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 638 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 539 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 568 @feedback; +#X text 245 568 Get/Set oscillator feedback coefficient. Type: float. +Default value: 0\. Range: 0\...6.283\.; +#X obj 20 620 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 625 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 639 1\.; -#X text 245 639 frequency.; -#X text 110 659 2\.; -#X text 150 659 *bang*; -#X text 245 659 reset phase.; -#X obj 20 689 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 694 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 626 1\.; +#X text 245 626 frequency.; +#X text 110 646 2\.; +#X text 150 646 *bang*; +#X text 245 646 reset phase.; +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 695 1\.; -#X text 245 695 output signal.; +#X text 110 682 1\.; +#X text 245 682 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 745 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 748 library: ceammc v0.9.4; -#N canvas 10 767 400 290 info 0; +#X obj 1 732 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 735 library: ceammc v0.9.6; +#N canvas 10 754 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.sinfb~; #X text 10 76 category:; @@ -78,7 +78,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 767 pd info; +#X restore 10 754 pd info; #X connect 5 0 6 0; #X connect 4 0 7 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/osc.sinfb~.pddoc b/ceammc/ext/doc/osc.sinfb~.pddoc index 747bb275af..df9ab1dc11 100644 --- a/ceammc/ext/doc/osc.sinfb~.pddoc +++ b/ceammc/ext/doc/osc.sinfb~.pddoc @@ -14,16 +14,15 @@ 0.1 - initial + initial frequency - oscillator + oscillator feedback coefficient in range 0..2pi - + oscillator feedback coefficient - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/osc.sin~-help.pd b/ceammc/ext/doc/osc.sin~-help.pd index 3ffc706ce3..fd27125c6d 100644 --- a/ceammc/ext/doc/osc.sin~-help.pd +++ b/ceammc/ext/doc/osc.sin~-help.pd @@ -18,44 +18,44 @@ #X text 110 319 1\.; #X text 150 319 float; #X obj 246 320 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 freq(Hz): frequency. Type: float. Min value: 20; +#X text 245 319 FREQ(Hz): frequency. Type: float. Min value: 20; #X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 354 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 389 @active; -#X text 245 389 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 441 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 446 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 389 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 428 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 433 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 447 1\.; -#X text 245 447 frequency in Hz.; -#X text 110 467 2\.; -#X text 150 467 *bang*; -#X text 245 467 reset phase.; -#X obj 20 497 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 502 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 434 1\.; +#X text 245 434 frequency in Hz.; +#X text 110 454 2\.; +#X text 150 454 *bang*; +#X text 245 454 reset phase.; +#X obj 20 484 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 489 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 503 1\.; -#X text 245 503 output signal.; +#X text 110 490 1\.; +#X text 245 490 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.9.4; -#X text 335 568 see also:; -#X obj 409 568 osc.saw~; -#X obj 483 568 osc.tri~; -#X obj 557 568 osc.square~; -#X obj 653 568 lfo.impulse~; -#N canvas 10 575 400 290 info 0; +#X obj 1 540 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 543 library: ceammc v0.9.6; +#X text 335 555 see also:; +#X obj 409 555 osc.saw~; +#X obj 483 555 osc.tri~; +#X obj 557 555 osc.square~; +#X obj 653 555 lfo.impulse~; +#N canvas 10 562 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.sin~; #X text 10 76 category:; @@ -74,7 +74,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 575 pd info; +#X restore 10 562 pd info; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/osc.sin~.pddoc b/ceammc/ext/doc/osc.sin~.pddoc index 1fafedabc6..c94c1e5589 100644 --- a/ceammc/ext/doc/osc.sin~.pddoc +++ b/ceammc/ext/doc/osc.sin~.pddoc @@ -23,11 +23,10 @@ included for library comprehension - frequency + frequency - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/osc.square~-help.pd b/ceammc/ext/doc/osc.square~-help.pd index fc06f1518c..8e2c0a85be 100644 --- a/ceammc/ext/doc/osc.square~-help.pd +++ b/ceammc/ext/doc/osc.square~-help.pd @@ -20,44 +20,44 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): frequency. Type: float.; +#X text 245 434 FREQ(Hz): frequency. Type: float.; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 504 @active; -#X text 245 504 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 556 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 561 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 504 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 548 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 562 1\.; -#X text 150 562 *float*; -#X text 245 562 frequency in Hz.; -#X text 110 582 2\.; -#X text 150 582 *bang*; -#X text 245 582 reset phase.; -#X obj 20 612 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 617 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 549 1\.; +#X text 150 549 *float*; +#X text 245 549 frequency in Hz.; +#X text 110 569 2\.; +#X text 150 569 *bang*; +#X text 245 569 reset phase.; +#X obj 20 599 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 604 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 618 1\.; -#X text 245 618 output signal.; +#X text 110 605 1\.; +#X text 245 605 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 668 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 671 library: ceammc v0.9.4; -#X text 438 683 see also:; -#X obj 512 683 osc.saw~; -#X obj 586 683 osc.tri~; -#X obj 660 683 lfo.square~; -#N canvas 10 690 400 290 info 0; +#X obj 1 655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 658 library: ceammc v0.9.6; +#X text 438 670 see also:; +#X obj 512 670 osc.saw~; +#X obj 586 670 osc.tri~; +#X obj 660 670 lfo.square~; +#N canvas 10 677 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.square~; #X text 10 76 category:; @@ -76,7 +76,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 690 pd info; +#X restore 10 677 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/osc.square~.pddoc b/ceammc/ext/doc/osc.square~.pddoc index 38bfec8ff6..6ce6dfcc36 100644 --- a/ceammc/ext/doc/osc.square~.pddoc +++ b/ceammc/ext/doc/osc.square~.pddoc @@ -19,11 +19,10 @@ - frequency + frequency - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/osc.tri~-help.pd b/ceammc/ext/doc/osc.tri~-help.pd index 085fb4c598..eb8b7ab372 100644 --- a/ceammc/ext/doc/osc.tri~-help.pd +++ b/ceammc/ext/doc/osc.tri~-help.pd @@ -20,43 +20,43 @@ #X text 110 434 1\.; #X text 150 434 float; #X obj 246 435 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 434 freq(Hz): frequency. Type: float.; +#X text 245 434 FREQ(Hz): frequency. Type: float.; #X obj 20 464 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 469 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 504 @active; -#X text 245 504 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X obj 20 556 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 561 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X text 245 504 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 548 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 562 1\.; -#X text 245 562 frequency in Hz.; -#X text 110 582 2\.; -#X text 150 582 *bang*; -#X text 245 582 reset phase.; -#X obj 20 612 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 617 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 549 1\.; +#X text 245 549 frequency in Hz.; +#X text 110 569 2\.; +#X text 150 569 *bang*; +#X text 245 569 reset phase.; +#X obj 20 599 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 604 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 618 1\.; -#X text 245 618 output signal in [1 \, -1] range.; +#X text 110 605 1\.; +#X text 245 605 output signal in [1 \, -1] range.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title osc @url ceammc.osc-help.pd; -#X obj 1 668 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 671 library: ceammc v0.9.4; -#X text 438 683 see also:; -#X obj 512 683 osc.saw~; -#X obj 586 683 osc.square~; -#X obj 682 683 lfo.tri~; -#N canvas 10 690 400 290 info 0; +#X obj 1 655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 658 library: ceammc v0.9.6; +#X text 438 670 see also:; +#X obj 512 670 osc.saw~; +#X obj 586 670 osc.square~; +#X obj 682 670 lfo.tri~; +#N canvas 10 677 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 osc.tri~; #X text 10 76 category:; @@ -75,7 +75,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 690 pd info; +#X restore 10 677 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/osc.tri~.pddoc b/ceammc/ext/doc/osc.tri~.pddoc index 7b5d370194..134cf08619 100644 --- a/ceammc/ext/doc/osc.tri~.pddoc +++ b/ceammc/ext/doc/osc.tri~.pddoc @@ -19,11 +19,10 @@ - frequency + frequency - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/pan.cos~-help.pd b/ceammc/ext/doc/pan.cos~-help.pd index bfba122cb5..88c3ed7722 100644 --- a/ceammc/ext/doc/pan.cos~-help.pd +++ b/ceammc/ext/doc/pan.cos~-help.pd @@ -34,39 +34,39 @@ at every pan position is 0 dB.; #X text 245 491 Get/Set panning position. -1 means left \, 0 - center \, +1 - right. Type: float. Default value: 0\. Range: -1\...1\.; #X msg 110 533 @smooth; -#X text 245 533 (readonly) Get smooth control signal to avoid zipping-noise. +#X text 245 533 (initonly) Get/Set smooth control signal to avoid zipping-noise. Type: int. Default value: 20\. Range: 0\...100\.; -#X obj 20 585 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 590 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 600 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 605 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 591 1\.; -#X text 245 591 input signal.; -#X text 110 611 2\.; -#X text 150 611 *float*; -#X text 245 611 pan position. Range: -1\...1\.; -#X obj 20 641 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 646 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 606 1\.; +#X text 245 606 input signal.; +#X text 110 626 2\.; +#X text 150 626 *float*; +#X text 245 626 pan position. Range: -1\...1\.; +#X obj 20 656 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 661 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 647 1\.; -#X text 245 647 left output channel.; -#X text 110 667 2\.; -#X text 245 667 right output channel.; +#X text 110 662 1\.; +#X text 245 662 left output channel.; +#X text 110 682 2\.; +#X text 245 682 right output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 717 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 720 library: ceammc v0.9.4; -#X text 526 732 see also:; -#X obj 600 732 pan.lin~; -#X obj 674 732 pan.sqrt~; -#N canvas 10 739 400 290 info 0; +#X obj 1 732 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 735 library: ceammc v0.9.6; +#X text 526 747 see also:; +#X obj 600 747 pan.lin~; +#X obj 674 747 pan.sqrt~; +#N canvas 10 754 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 pan.cos~; #X text 10 76 category:; @@ -85,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 739 pd info; +#X restore 10 754 pd info; #X connect 6 0 7 0; #X connect 7 0 9 0; #X connect 8 0 10 0; diff --git a/ceammc/ext/doc/pan.cos~.pddoc b/ceammc/ext/doc/pan.cos~.pddoc index ccc11af12d..0554263616 100644 --- a/ceammc/ext/doc/pan.cos~.pddoc +++ b/ceammc/ext/doc/pan.cos~.pddoc @@ -29,7 +29,7 @@ panning position. -1 means left, 0 - center, +1 - right smooth control signal to avoid zipping-noise + access="initonly">smooth control signal to avoid zipping-noise diff --git a/ceammc/ext/doc/pan.linsig~-help.pd b/ceammc/ext/doc/pan.linsig~-help.pd index 65d66c3d55..51e57f2c35 100644 --- a/ceammc/ext/doc/pan.linsig~-help.pd +++ b/ceammc/ext/doc/pan.linsig~-help.pd @@ -31,7 +31,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 526 520 see also:; #X obj 600 520 pan.sqrt~; #X obj 681 520 pan.cos~; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 pan.linsig~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/pan.lin~-help.pd b/ceammc/ext/doc/pan.lin~-help.pd index 079384f1a0..af5c47d3e8 100644 --- a/ceammc/ext/doc/pan.lin~-help.pd +++ b/ceammc/ext/doc/pan.lin~-help.pd @@ -43,39 +43,39 @@ like the Rhodes tremolo than [pan.sqrt~].; #X text 245 616 Get/Set panning position. -1 means left \, 0 - center \, +1 - right. Type: float. Default value: 0\. Range: -1\...1\.; #X msg 110 658 @smooth; -#X text 245 658 (readonly) Get smooth control signal to avoid zipping-noise. +#X text 245 658 (initonly) Get/Set smooth control signal to avoid zipping-noise. Type: int. Default value: 20\. Range: 0\...100\.; -#X obj 20 710 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 715 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 725 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 730 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 716 1\.; -#X text 245 716 input signal.; -#X text 110 736 2\.; -#X text 150 736 *float*; -#X text 245 736 pan position. Range: -1\...1\.; -#X obj 20 766 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 771 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 731 1\.; +#X text 245 731 input signal.; +#X text 110 751 2\.; +#X text 150 751 *float*; +#X text 245 751 pan position. Range: -1\...1\.; +#X obj 20 781 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 786 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 772 1\.; -#X text 245 772 left output channel.; -#X text 110 792 2\.; -#X text 245 792 right output channel.; +#X text 110 787 1\.; +#X text 245 787 left output channel.; +#X text 110 807 2\.; +#X text 245 807 right output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 842 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 845 library: ceammc v0.9.4; -#X text 526 857 see also:; -#X obj 600 857 pan.sqrt~; -#X obj 681 857 pan.cos~; -#N canvas 10 864 400 290 info 0; +#X obj 1 857 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 860 library: ceammc v0.9.6; +#X text 526 872 see also:; +#X obj 600 872 pan.sqrt~; +#X obj 681 872 pan.cos~; +#N canvas 10 879 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 pan.lin~; #X text 10 76 category:; @@ -94,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 864 pd info; +#X restore 10 879 pd info; #X connect 10 0 11 0; #X connect 11 0 13 0; #X connect 12 0 14 0; diff --git a/ceammc/ext/doc/pan.lin~.pddoc b/ceammc/ext/doc/pan.lin~.pddoc index 47aac59437..616bbd0cdc 100644 --- a/ceammc/ext/doc/pan.lin~.pddoc +++ b/ceammc/ext/doc/pan.lin~.pddoc @@ -40,7 +40,7 @@ panning position. -1 means left, 0 - center, +1 - right smooth control signal to avoid zipping-noise + access="initonly">smooth control signal to avoid zipping-noise diff --git a/ceammc/ext/doc/pan.spread~-help.pd b/ceammc/ext/doc/pan.spread~-help.pd index eaef7c80cd..1e32162980 100644 --- a/ceammc/ext/doc/pan.spread~-help.pd +++ b/ceammc/ext/doc/pan.spread~-help.pd @@ -35,48 +35,47 @@ #X msg 110 623 @center; #X text 245 623 Get/Set shift the centre of the distribution. Type: float. Default value: 0\. Range: -0.5\...0.5\.; -#X msg 110 665 @ch; -#X text 245 665 Get/Set number of input channels. Type: int. Default -value: 2\. Range: 2\...16\.; -#X msg 110 707 @coeffs; -#X text 245 707 (readonly) Get list of gain pairs. Type: list.; -#X msg 110 736 @compensate; -#X text 245 736 Get/Set compensate output level: divide amplitude to -number of input channels. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 793 @spread; -#X text 245 793 Get/Set for @spread = 0 \, all channels are in the +#X msg 110 665 @coeffs; +#X text 245 665 (readonly) Get list of gain pairs. Type: list.; +#X msg 110 694 @compensate; +#X text 245 694 Get/Set compensate output level: divide amplitude to +number of input channels. Type: bool. Default value: 0\.; +#X msg 110 736 @n; +#X text 245 736 (initonly) Get/Set number of input channels. Type: +int. Default value: 2\. Range: 2\...16\.; +#X msg 110 778 @spread; +#X text 245 778 Get/Set for @spread = 0 \, all channels are in the centre \, for 1 \, they have maximum distribution. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 860 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 865 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 845 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 850 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 866 1\.; -#X text 245 866 input signal.; -#X text 110 886 ....; -#X text 245 886 input signal.; -#X text 110 906 n.; -#X text 245 906 input signal.; -#X obj 20 936 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 941 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 851 1\.; +#X text 245 851 input signal.; +#X text 110 871 ....; +#X text 245 871 input signal.; +#X text 110 891 n.; +#X text 245 891 input signal.; +#X obj 20 921 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 926 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 942 1\.; -#X text 245 942 left output channel.; -#X text 110 962 2\.; -#X text 245 962 right output channel.; +#X text 110 927 1\.; +#X text 245 927 left output channel.; +#X text 110 947 2\.; +#X text 245 947 right output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 1012 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1015 library: ceammc v0.9.4; -#N canvas 10 1034 400 290 info 0; +#X obj 1 997 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1000 library: ceammc v0.9.6; +#N canvas 10 1019 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 pan.spread~; #X text 10 76 category:; @@ -95,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1034 pd info; +#X restore 10 1019 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/pan.spread~.pddoc b/ceammc/ext/doc/pan.spread~.pddoc index a18df407fa..7121b70ebd 100644 --- a/ceammc/ext/doc/pan.spread~.pddoc +++ b/ceammc/ext/doc/pan.spread~.pddoc @@ -18,15 +18,16 @@ channels - number of input - channels + number of input channels for @spread = 0, all channels are in the centre, for 1, they have maximum distribution shift the centre of the distribution - compensate output level: - divide amplitude to number of input channels - list of gain pairs + compensate output level: divide + amplitude to number of input channels + list of gain + pairs diff --git a/ceammc/ext/doc/pan.sqrt~-help.pd b/ceammc/ext/doc/pan.sqrt~-help.pd index e6ac1cc6ed..249bd39a0e 100644 --- a/ceammc/ext/doc/pan.sqrt~-help.pd +++ b/ceammc/ext/doc/pan.sqrt~-help.pd @@ -37,39 +37,39 @@ volume of the signal drops in the middle. [pan.sqrt~] solves this.; #X text 245 576 Get/Set panning position. -1 means left \, 0 - center \, +1 - right. Type: float. Default value: 0\. Range: -1\...1\.; #X msg 110 618 @smooth; -#X text 245 618 (readonly) Get smooth control signal to avoid zipping-noise. +#X text 245 618 (initonly) Get/Set smooth control signal to avoid zipping-noise. Type: int. Default value: 20\. Range: 0\...100\.; -#X obj 20 670 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 675 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 685 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 690 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 676 1\.; -#X text 245 676 input signal.; -#X text 110 696 2\.; -#X text 150 696 *float*; -#X text 245 696 pan position. Range: -1\...1\.; -#X obj 20 726 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 731 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 691 1\.; +#X text 245 691 input signal.; +#X text 110 711 2\.; +#X text 150 711 *float*; +#X text 245 711 pan position. Range: -1\...1\.; +#X obj 20 741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 746 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 732 1\.; -#X text 245 732 left output channel.; -#X text 110 752 2\.; -#X text 245 752 right output channel.; +#X text 110 747 1\.; +#X text 245 747 left output channel.; +#X text 110 767 2\.; +#X text 245 767 right output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 802 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 805 library: ceammc v0.9.4; -#X text 533 817 see also:; -#X obj 607 817 pan.lin~; -#X obj 681 817 pan.cos~; -#N canvas 10 824 400 290 info 0; +#X obj 1 817 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 820 library: ceammc v0.9.6; +#X text 533 832 see also:; +#X obj 607 832 pan.lin~; +#X obj 681 832 pan.cos~; +#N canvas 10 839 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 pan.sqrt~; #X text 10 76 category:; @@ -88,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 824 pd info; +#X restore 10 839 pd info; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 11 0; diff --git a/ceammc/ext/doc/pan.sqrt~.pddoc b/ceammc/ext/doc/pan.sqrt~.pddoc index 8d4ccd25ac..47f22b3a30 100644 --- a/ceammc/ext/doc/pan.sqrt~.pddoc +++ b/ceammc/ext/doc/pan.sqrt~.pddoc @@ -32,7 +32,7 @@ panning position. -1 means left, 0 - center, +1 - right smooth control signal to avoid zipping-noise + access="initonly">smooth control signal to avoid zipping-noise diff --git a/ceammc/ext/doc/patch.args-help.pd b/ceammc/ext/doc/patch.args-help.pd index 2108b47a75..a197b98770 100644 --- a/ceammc/ext/doc/patch.args-help.pd +++ b/ceammc/ext/doc/patch.args-help.pd @@ -15,39 +15,46 @@ #X obj 50 234 patch.args.ex2 1 2 3 4 5; #X obj 50 262 ui.dt; #X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 351 @from; -#X text 245 351 Get/Set starting args index. Type: int. Default value: +#X text 110 351 1\.; +#X text 150 351 int; +#X obj 246 352 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 FROM: starting args index. Type: int. Min value: 0; +#X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 421 @from; +#X text 245 421 Get/Set starting args index. Type: int. Default value: 0\. Min value: 0\.; -#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 408 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 473 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 478 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 409 1\.; -#X text 150 409 *bang*; -#X text 245 409 output patch or subpatch arguments.; -#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 444 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 479 1\.; +#X text 150 479 *bang*; +#X text 245 479 output patch or subpatch arguments.; +#X obj 20 509 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 514 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 445 1\.; -#X text 245 445 list of arguments.; +#X text 110 515 1\.; +#X text 245 515 list of arguments.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#X text 384 520 see also:; -#X obj 458 520 canvas.current; -#X obj 574 520 canvas.top; -#X obj 661 520 list->props; -#N canvas 10 527 400 290 info 0; +#X obj 1 565 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 568 library: ceammc v0.9.6; +#X text 384 580 see also:; +#X obj 458 580 canvas.current; +#X obj 574 580 canvas.top; +#X obj 661 580 list->props; +#N canvas 10 587 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 patch.args; #X text 10 76 category:; @@ -66,7 +73,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; +#X restore 10 587 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/patch.args.pddoc b/ceammc/ext/doc/patch.args.pddoc index 095ef6ae80..0548581935 100644 --- a/ceammc/ext/doc/patch.args.pddoc +++ b/ceammc/ext/doc/patch.args.pddoc @@ -18,6 +18,9 @@ 0.4 + + starting args index + starting args index diff --git a/ceammc/ext/doc/patch.deps-help.pd b/ceammc/ext/doc/patch.deps-help.pd index 33e0fc28aa..0de93c7915 100644 --- a/ceammc/ext/doc/patch.deps-help.pd +++ b/ceammc/ext/doc/patch.deps-help.pd @@ -32,7 +32,7 @@ abstraction names. PureData core objects listed under "_core" key.; #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 594 520 see also:; #X obj 668 520 patch.tree; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ abstraction names. PureData core objects listed under "_core" key.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 patch.deps; #X text 10 76 category:; @@ -48,7 +48,7 @@ abstraction names. PureData core objects listed under "_core" key.; #X text 10 98 since:; #X text 120 98 0.9.0; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/patch.deps.pddoc b/ceammc/ext/doc/patch.deps.pddoc index 109971ee1d..3916553cb9 100644 --- a/ceammc/ext/doc/patch.deps.pddoc +++ b/ceammc/ext/doc/patch.deps.pddoc @@ -4,7 +4,7 @@ patch.deps - Serge Poltavski + Serge Poltavsky patch dependencies: used objects and abstractions GPL3 or later diff --git a/ceammc/ext/doc/patch.props-help.pd b/ceammc/ext/doc/patch.props-help.pd index ed2a2e4b19..b1994bf768 100644 --- a/ceammc/ext/doc/patch.props-help.pd +++ b/ceammc/ext/doc/patch.props-help.pd @@ -47,7 +47,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 610 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 613 library: ceammc v0.9.4; +#X text 10 613 library: ceammc v0.9.6; #X text 535 625 see also:; #X obj 609 625 prop.declare; #X obj 711 625 prop; @@ -56,7 +56,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 patch.props; #X text 10 76 category:; diff --git a/ceammc/ext/doc/patch.tree-help.pd b/ceammc/ext/doc/patch.tree-help.pd index 42062c7cbf..78375add07 100644 --- a/ceammc/ext/doc/patch.tree-help.pd +++ b/ceammc/ext/doc/patch.tree-help.pd @@ -25,7 +25,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title patch @url ceammc.patch-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 594 520 see also:; #X obj 668 520 patch.deps; #N canvas 10 527 400 290 info 0; @@ -33,7 +33,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 patch.tree; #X text 10 76 category:; @@ -41,7 +41,7 @@ #X text 10 98 since:; #X text 120 98 0.9.1; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/patch.tree.pddoc b/ceammc/ext/doc/patch.tree.pddoc index 1fc7e4b256..3e22eb44a8 100644 --- a/ceammc/ext/doc/patch.tree.pddoc +++ b/ceammc/ext/doc/patch.tree.pddoc @@ -4,7 +4,7 @@ patch.tree - Serge Poltavski + Serge Poltavsky patch tree GPL3 or later diff --git a/ceammc/ext/doc/path.basename-help.pd b/ceammc/ext/doc/path.basename-help.pd index 86a5da4075..b73a5823a5 100644 --- a/ceammc/ext/doc/path.basename-help.pd +++ b/ceammc/ext/doc/path.basename-help.pd @@ -37,7 +37,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 579 520 see also:; #X obj 653 520 path.dirname; #N canvas 10 527 400 290 info 0; @@ -45,7 +45,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.basename; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.dirname-help.pd b/ceammc/ext/doc/path.dirname-help.pd index f17cdb49e4..b84e4d53ab 100644 --- a/ceammc/ext/doc/path.dirname-help.pd +++ b/ceammc/ext/doc/path.dirname-help.pd @@ -37,7 +37,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 572 520 see also:; #X obj 646 520 path.basename; #N canvas 10 527 400 290 info 0; @@ -45,7 +45,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.dirname; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.exists-help.pd b/ceammc/ext/doc/path.exists-help.pd index 478188d61f..6a8f0823a6 100644 --- a/ceammc/ext/doc/path.exists-help.pd +++ b/ceammc/ext/doc/path.exists-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.exists; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.file-help.pd b/ceammc/ext/doc/path.file-help.pd new file mode 100644 index 0000000000..7a1b20f902 --- /dev/null +++ b/ceammc/ext/doc/path.file-help.pd @@ -0,0 +1,139 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 630 50 cnv 1 135 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 630 50 file input/output; +#X obj 1 1 cnv 5 765 40 empty empty path.file 20 20 0 20 -104026 -4096 +0; +#X obj 675 11 path.file; +#X msg 50 118 open ~/test.txt w+ \, write_line 1 2 3 4 5; +#X msg 69 147 close; +#X msg 146 147 write_bytes 67 69 0x41 0x4D 0x43; +#X msg 165 176 seek_read 0; +#X msg 184 205 read_line; +#X msg 299 205 remove ~/test.txt; +#X obj 50 234 path.file; +#X obj 50 262 ui.dt; +#X obj 165 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 351 @path; +#X text 245 351 Get/Set file path. Type: symbol.; +#X obj 20 390 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 395 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 430 close; +#X text 245 430 close file.; +#X msg 110 457 open; +#X text 245 457 open file \, updates @path property. Arguments are:; +#X obj 255 480 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 480 FNAME: file path: absolute or relative. Type: symbol.; +#X obj 255 503 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 503 [MODE]: open mode \, 'r': open text file for reading +only. 'w': truncate to 0 length \, if existent \, or create text file +for writing only. 'a': append \, open or create text file only for +writing at end of file. 'r+': open text file for reading and writing. +'w+': truncate to 0 length \, if existent \, or create text file for +reading and writing. 'a+': append \, open or create text file for reading +and writing \, writing at end of file. Type: symbol. Allowed values: +r \, w \, a \, r+ \, w+ \, a+.; +#X msg 110 633 read_bytes; +#X text 245 633 read bytes from file \, output as list of integers. +Arguments are:; +#X obj 255 671 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 671 [N]: number of bytes to read \, if omitted read all +content. Type: int.; +#X msg 110 711 read_line; +#X text 245 711 read line from file \, output as list as atoms.; +#X msg 110 738 remove; +#X text 245 738 remove file. Arguments are:; +#X obj 255 761 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 761 NAME: file path. Type: symbol.; +#X msg 110 786 rename; +#X text 245 786 rename file. Arguments are:; +#X obj 255 809 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 809 PATH: old file path. Type: symbol.; +#X obj 255 832 cnv 1 68 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 832 NEW_PATH: new file path. Type: symbol.; +#X msg 110 857 seek_read; +#X text 245 857 change reading position. Arguments are:; +#X obj 255 880 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 880 POS: offset position. Type: int.; +#X obj 255 903 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 903 [ORIG]: offset origin \, if omitted offset from the +beginning. Type: symbol. Allowed values: beg|cur|end.; +#X msg 110 943 seek_write; +#X text 245 943 change writing position. Arguments are:; +#X obj 255 966 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 966 POS: offset position. Type: int.; +#X obj 255 989 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 989 [ORIG]: offset origin \, if omitted offset from the +beginning. Type: symbol. Allowed values: beg|cur|end.; +#X msg 110 1029 write; +#X text 245 1029 write space separated atoms to file \, no newline +added. Arguments are:; +#X obj 255 1067 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1067 ARGS: atoms to write. Type: list.; +#X msg 110 1092 write_bytes; +#X text 245 1092 write given bytes to file. Arguments are:; +#X obj 255 1115 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1115 ARGS: list of bytes: integers in 0-255 or symbols +with '0x' prefix: 0x11 \, 0xFF etc.. Type: list.; +#X msg 110 1155 write_line; +#X text 245 1155 write space separated atoms to file \, newline added. +Arguments are:; +#X obj 255 1193 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1193 ARGS: atoms to write. Type: list.; +#X obj 20 1228 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1233 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1234 1\.; +#X text 245 1234 ...; +#X obj 20 1264 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1269 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1270 1\.; +#X text 245 1270 list: read output.; +#X text 110 1290 2\.; +#X text 245 1290 bang on EOF reached.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title path @url ceammc.path-help.pd; +#X obj 1 1340 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1343 library: ceammc v0.9.6; +#N canvas 10 1362 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 path.file; +#X text 10 76 category:; +#X text 120 76 path; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 path \, file; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1362 pd info; +#X connect 4 0 10 0; +#X connect 5 0 10 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 10 1 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/path.file.pddoc b/ceammc/ext/doc/path.file.pddoc new file mode 100644 index 0000000000..0fb7669c4e --- /dev/null +++ b/ceammc/ext/doc/path.file.pddoc @@ -0,0 +1,82 @@ + + + + path.file + + + Serge Poltavsky + + file input/output + GPL3 or later + ceammc + path + path file + 0.9.5 + + + file path + + + close file + open file, updates @path property + file path: absolute or + relative + open mode, 'r': + open text file for reading only. 'w': truncate to 0 length, if existent, or create text + file for writing only. 'a': append, open or create text file only for writing at end of + file. 'r+': open text file for reading and writing. 'w+': truncate to 0 length, if + existent, or create text file for reading and writing. 'a+': append, open or create + text file for reading and writing, writing at end of file + write space separated atoms to file, no newline added + atoms to write + write space separated atoms to file, newline added + atoms to write + write given bytes to file + list of bytes: integers in 0-255 or + symbols with '0x' prefix: 0x11, 0xFF etc.. + change writing position + offset position + offset origin, if + omitted offset from the beginning + change reading position + offset position + offset origin, if + omitted offset from the beginning + read line from file, output as list as atoms + read bytes from file, output as list of integers + number of bytes to read, if omitted read + all content + remove file + file path + rename file + old file path + new file path + + + + ... + + + + list: read output + bang on EOF reached + + + + + + + + diff --git a/ceammc/ext/doc/path.is_dir-help.pd b/ceammc/ext/doc/path.is_dir-help.pd index ae576b55d6..40788799ce 100644 --- a/ceammc/ext/doc/path.is_dir-help.pd +++ b/ceammc/ext/doc/path.is_dir-help.pd @@ -31,13 +31,13 @@ otherwise false.; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.is_dir; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.lsdir-help.pd b/ceammc/ext/doc/path.lsdir-help.pd index ffb9b82bab..632b238b0b 100644 --- a/ceammc/ext/doc/path.lsdir-help.pd +++ b/ceammc/ext/doc/path.lsdir-help.pd @@ -19,9 +19,9 @@ #X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 294 1\.; -#X text 150 294 symbol; +#X text 150 294 list; #X obj 246 295 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 PATH: init directory value. Type: symbol.; +#X text 245 294 PATH: init directory value. Type: list.; #X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -53,13 +53,13 @@ content. If not absolute path is given list current patch directory.; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 592 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 595 library: ceammc v0.9.4; +#X text 10 595 library: ceammc v0.9.6; #N canvas 10 614 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.lsdir; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.lsdir.pddoc b/ceammc/ext/doc/path.lsdir.pddoc index 37b2ba1dde..f54e5013d4 100644 --- a/ceammc/ext/doc/path.lsdir.pddoc +++ b/ceammc/ext/doc/path.lsdir.pddoc @@ -17,7 +17,7 @@ - init directory value + init directory value match mask: for example *.wav for all wav diff --git a/ceammc/ext/doc/path.monitor-help.pd b/ceammc/ext/doc/path.monitor-help.pd new file mode 100644 index 0000000000..dbe99d28a4 --- /dev/null +++ b/ceammc/ext/doc/path.monitor-help.pd @@ -0,0 +1,71 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 575 50 cnv 1 190 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 575 50 filesystem event monitor; +#X obj 1 1 cnv 5 765 40 empty empty path.monitor 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 path.monitor; +#X obj 50 118 path.monitor "%PD%"; +#X obj 50 147 ui.dt; +#X msg 50 176 open "%PD%/test.txt" w; +#X msg 69 205 write 1 2 3 \, close; +#X msg 88 234 remove "%PD%/test.txt"; +#X obj 50 262 file; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 351 1\.; +#X text 150 351 symbol; +#X obj 246 352 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 PATH: directory to monitor filesystem events. Type: +symbol.; +#X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 421 @path; +#X text 245 421 Get/Set directory to monitor filesystem events. Type: +symbol.; +#X obj 20 460 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 465 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 466 1\.; +#X text 245 466 ...; +#X obj 20 496 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 501 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 502 1\.; +#X text 245 502 messages: [create fname( \, [update fname( \, [move +fname( \, [remove fname(.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title path @url ceammc.path-help.pd; +#X obj 1 567 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 570 library: ceammc v0.9.6; +#N canvas 10 589 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 path.monitor; +#X text 10 76 category:; +#X text 120 76 path; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 path \, filesystem; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 589 pd info; +#X connect 4 0 5 0; \ No newline at end of file diff --git a/ceammc/ext/doc/path.monitor.pddoc b/ceammc/ext/doc/path.monitor.pddoc new file mode 100644 index 0000000000..7aa653d4e4 --- /dev/null +++ b/ceammc/ext/doc/path.monitor.pddoc @@ -0,0 +1,49 @@ + + + + path.monitor + + + Serge Poltavsky + + filesystem event monitor + GPL3 or later + ceammc + path + path filesystem + 0.9.5 + + + directory to monitor filesystem events + + + directory to monitor filesystem + events + + + + ... + + + + messages: [create fname(, [update fname(, [move fname(, [remove fname( + + + + + + + + diff --git a/ceammc/ext/doc/path.normalize-help.pd b/ceammc/ext/doc/path.normalize-help.pd index 18a6c7da6b..e4929925bf 100644 --- a/ceammc/ext/doc/path.normalize-help.pd +++ b/ceammc/ext/doc/path.normalize-help.pd @@ -32,7 +32,7 @@ the filesystem at all; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 594 520 see also:; #X obj 668 520 path.split; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ the filesystem at all; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.normalize; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.pattern-help.pd b/ceammc/ext/doc/path.pattern-help.pd new file mode 100644 index 0000000000..fca1067251 --- /dev/null +++ b/ceammc/ext/doc/path.pattern-help.pd @@ -0,0 +1,87 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 560 50 cnv 1 205 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 560 50 pattern filename generator; +#X obj 1 1 cnv 5 765 40 empty empty path.pattern 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 path.pattern; +#X obj 210 80 cnv 1 555 325 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Note: generate NEW filename (checks that generated filename +not exists); +#X text 215 120 ### sequence is replaced with number; +#X text 215 145 Following variables in pattern expanded:; +#X text 215 170 • %YEAR% - current year (4-digits); +#X text 215 195 • %MONTH% - current month (2-digits); +#X text 215 220 • %DAY% - current day (2-digits); +#X text 215 245 • %HOUR% - current hour (2-digits); +#X text 215 270 • %MIN% - current minute (2-digits); +#X text 215 295 • %SEC% - current second (2-digits); +#X text 215 320 • %TIME% - current time: %HOUR%-%MIN%-%SEC%; +#X text 215 345 • %DATE% - current date: %YEAR%-%MONTH%-%DAY%; +#X text 215 370 • %NOW% - current datetime: %DATE%_%TIME%; +#X msg 50 433 symbol file-###.wav; +#X msg 78 462 symbol ~/test-%NOW%.wav; +#X msg 107 491 bang; +#X obj 50 520 path.pattern; +#X obj 50 549 ui.dt @auto_size 0 @size 400 40; +#X obj 20 598 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 603 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 638 1\.; +#X text 150 638 symbol; +#X obj 246 639 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 638 PATTERN: filename generation pattern. Type: symbol.; +#X obj 20 668 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 673 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 708 @pattern; +#X text 245 708 Get/Set filename pattern. Type: symbol.; +#X obj 20 747 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 752 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 753 1\.; +#X text 150 753 *bang*; +#X text 245 753 output generated filename pattern.; +#X text 150 773 *symbol*; +#X text 245 773 set new pattern and generate filename pattern.; +#X obj 20 803 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 808 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 809 1\.; +#X text 245 809 symbol: filename.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title path @url ceammc.path-help.pd; +#X obj 1 859 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 862 library: ceammc v0.9.6; +#N canvas 10 881 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 path.pattern; +#X text 10 76 category:; +#X text 120 76 path; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 path \, environment \, pattern \, filename; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 881 pd info; +#X connect 17 0 20 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/path.pattern.pddoc b/ceammc/ext/doc/path.pattern.pddoc new file mode 100644 index 0000000000..b857cb6212 --- /dev/null +++ b/ceammc/ext/doc/path.pattern.pddoc @@ -0,0 +1,61 @@ + + + + path.pattern + + + Serge Poltavsky + + pattern filename generator + GPL3 or later + ceammc + path + path environment pattern filename + 0.9.5 + + + Note: generate NEW filename (checks that generated filename not exists) + ### sequence is replaced with number + Following variables in pattern expanded: + • %YEAR% - current year (4-digits) + • %MONTH% - current month (2-digits) + • %DAY% - current day (2-digits) + • %HOUR% - current hour (2-digits) + • %MIN% - current minute (2-digits) + • %SEC% - current second (2-digits) + • %TIME% - current time: %HOUR%-%MIN%-%SEC% + • %DATE% - current date: %YEAR%-%MONTH%-%DAY% + • %NOW% - current datetime: %DATE%_%TIME% + + + filename generation pattern + + + filename pattern + + + + output generated filename pattern + set new pattern and generate filename pattern + + + + symbol: filename + + + + + + + + diff --git a/ceammc/ext/doc/path.search-help.pd b/ceammc/ext/doc/path.search-help.pd index 19ca2f697c..8e1e660877 100644 --- a/ceammc/ext/doc/path.search-help.pd +++ b/ceammc/ext/doc/path.search-help.pd @@ -39,13 +39,13 @@ Type: list.; -49933 0; #X msg 110 675 @async; #X text 245 675 Get/Set perform async search in separate thread. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; +bool. Default value: 1\.; #X msg 110 717 @depth; #X text 245 717 Get/Set search recursion depth (-1: infinite). Type: int. Default value: 0\. Min value: -1\.; #X msg 110 759 @home; -#X text 245 759 Get/Set search in home directory. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 759 Get/Set search in home directory. Type: bool. Default +value: 1\.; #X msg 110 801 @nohome; #X text 245 801 alias to @home 0 \, do not search in home directory.; #X msg 110 830 @nostd; @@ -54,7 +54,7 @@ value: 1\. Allowed values: 0 \, 1\.; #X text 245 859 Get/Set user defined search paths. Type: list.; #X msg 110 888 @std; #X text 245 888 Get/Set search in PureData standard directory. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; +bool. Default value: 1\.; #X msg 110 930 @sync; #X text 245 930 alias to @async 0\.; #X obj 20 969 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -83,7 +83,7 @@ int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 1178 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1181 library: ceammc v0.9.4; +#X text 10 1181 library: ceammc v0.9.6; #X text 601 1193 see also:; #X obj 675 1193 file.size; #N canvas 10 1200 400 290 info 0; @@ -91,7 +91,7 @@ int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.search; #X text 10 76 category:; diff --git a/ceammc/ext/doc/path.search.pddoc b/ceammc/ext/doc/path.search.pddoc index 685f352f5a..11babd1732 100644 --- a/ceammc/ext/doc/path.search.pddoc +++ b/ceammc/ext/doc/path.search.pddoc @@ -34,15 +34,14 @@ cancel search process - perform async search in - separate thread + perform async search in separate + thread alias to @async 0 search recursion depth (-1: infinite) - user defined search paths - search in home - directory - search in PureData standard + user defined search paths + search in home directory + search in PureData standard directory alias to @home 0, do not search in home directory diff --git a/ceammc/ext/doc/path.split-help.pd b/ceammc/ext/doc/path.split-help.pd index d17cd4cafe..4247ae8ee9 100644 --- a/ceammc/ext/doc/path.split-help.pd +++ b/ceammc/ext/doc/path.split-help.pd @@ -32,7 +32,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title path @url ceammc.path-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 601 520 see also:; #X obj 675 520 file.size; #N canvas 10 527 400 290 info 0; @@ -40,7 +40,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 path.split; #X text 10 76 category:; diff --git a/ceammc/ext/doc/plot.geomspace~-help.pd b/ceammc/ext/doc/plot.geomspace~-help.pd index 7239d90d1d..a3459d365d 100644 --- a/ceammc/ext/doc/plot.geomspace~-help.pd +++ b/ceammc/ext/doc/plot.geomspace~-help.pd @@ -13,63 +13,83 @@ progression); 1 @ymin_ticks 0 @xmin_ticks 0 @yauto 1; #X obj 50 349 ui.dsp~; #X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 438 @10; -#X text 245 438 Get/Set alias to @base 10\. Type: atom.; -#X msg 110 467 @2; -#X text 245 467 Get/Set alias to @base 2\. Type: atom.; -#X msg 110 496 @base; -#X text 245 496 Get/Set x-axis scale base. Type: atom. Default value: +#X text 110 438 1\.; +#X text 150 438 float; +#X obj 246 439 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 START: @start property. Type: float. Min value: 0; +#X text 110 458 2\.; +#X text 150 458 float; +#X obj 246 459 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 458 STOP: @stop property. Type: float. Min value: 0; +#X text 110 478 3\.; +#X text 150 478 int; +#X obj 246 479 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 478 N: @n property. Type: int. Range: 4\...1024; +#X text 110 498 4\.; +#X text 150 498 atom; +#X obj 246 499 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 498 BASE: x-axis scale base. Allowed values: 10 \, 2 \, +e. . Type: atom.; +#X obj 20 543 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 548 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 583 @10; +#X text 245 583 Get/Set alias to @base 10\. Type: atom.; +#X msg 110 612 @2; +#X text 245 612 Get/Set alias to @base 2\. Type: atom.; +#X msg 110 641 @base; +#X text 245 641 Get/Set x-axis scale base. Type: atom. Default value: 10\. Allowed values: 10 \, 2 \, e.; -#X msg 110 538 @e; -#X text 245 538 Get/Set alias to @base e. Type: atom.; -#X msg 110 567 @endpoint; -#X text 245 567 Get/Set include @stop to interval. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 609 @n; -#X text 245 609 Get/Set number of points. Type: int. Default value: +#X msg 110 683 @e; +#X text 245 683 Get/Set alias to @base e. Type: atom.; +#X msg 110 712 @endpoint; +#X text 245 712 Get/Set include @stop to interval. Type: bool. Default +value: 1\.; +#X msg 110 754 @n; +#X text 245 754 Get/Set number of points. Type: int. Default value: 100\. Range: 4\...1024\.; -#X msg 110 651 @start; -#X text 245 651 Get/Set the starting value of the sequence. Type: float. +#X msg 110 796 @start; +#X text 245 796 Get/Set the starting value of the sequence. Type: float. Default value: 0.1\. Min value: 0\.; -#X msg 110 693 @stop; -#X text 245 693 Get/Set the final value of the sequence \, unless @endpoint +#X msg 110 838 @stop; +#X text 245 838 Get/Set the final value of the sequence \, unless @endpoint is false. In that case \, @n + 1 values are spaced over the interval in log-space \, of which all but the last (a sequence of length @n) are returned. Type: float. Default value: 100\. Min value: 0\.; -#X obj 20 790 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 795 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 935 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 940 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 796 1\.; -#X text 150 796 *bang*; -#X text 245 796 starts output.; -#X text 150 816 *float*; -#X text 245 816 output specified number of values \, change @n property +#X text 110 941 1\.; +#X text 150 941 *bang*; +#X text 245 941 starts output.; +#X text 150 961 *float*; +#X text 245 961 output specified number of values \, change @n property valuue.; -#X obj 20 846 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 851 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 991 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 996 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 852 1\.; -#X text 245 852 signal output.; -#X text 110 872 2\.; -#X text 245 872 output to [array.plot~] or [ui.plot~].; +#X text 110 997 1\.; +#X text 245 997 signal output.; +#X text 110 1017 2\.; +#X text 245 1017 output to [array.plot~] or [ui.plot~].; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 922 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 925 library: ceammc v0.9.4; -#X text 447 937 see also:; -#X obj 521 937 plot.linspace~; -#X obj 638 937 plot.logspace~; -#N canvas 10 944 400 290 info 0; +#X obj 1 1067 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1070 library: ceammc v0.9.6; +#X text 447 1082 see also:; +#X obj 521 1082 plot.linspace~; +#X obj 638 1082 plot.logspace~; +#N canvas 10 1089 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 plot.geomspace~; #X text 10 76 category:; @@ -88,7 +108,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 944 pd info; +#X restore 10 1089 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 5 1 6 1; \ No newline at end of file diff --git a/ceammc/ext/doc/plot.geomspace~.pddoc b/ceammc/ext/doc/plot.geomspace~.pddoc index 6b6d9f0dd7..9def802fc8 100644 --- a/ceammc/ext/doc/plot.geomspace~.pddoc +++ b/ceammc/ext/doc/plot.geomspace~.pddoc @@ -18,6 +18,12 @@ 0.9 + + @start property + @stop property + @n property + x-axis scale base + the starting value of the sequence @@ -32,8 +38,7 @@ alias to @base 2 alias to @base 10 alias to @base e - include @stop to - interval + include @stop to interval diff --git a/ceammc/ext/doc/plot.hist~-help.pd b/ceammc/ext/doc/plot.hist~-help.pd index e27754be98..fb1296da8a 100644 --- a/ceammc/ext/doc/plot.hist~-help.pd +++ b/ceammc/ext/doc/plot.hist~-help.pd @@ -23,56 +23,55 @@ bars @plot_color0 0.2 0.2 0.2; #X text 110 481 1\.; #X text 150 481 int; #X obj 246 482 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 481 NSAMP: @nsamp property. Type: int.; +#X text 245 481 NSAMP: @nsamp property. Type: int. Range: 8\...32768; #X obj 20 511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 516 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 551 @clip; #X text 245 551 Get/Set clip input values into input range \, otherwise -just ignore them. Type: int. Default value: 1\. Allowed values: 0 \, +just ignore them. Type: bool. Default value: 1\.; +#X msg 110 593 @max; +#X text 245 593 Get/Set maximum input value. Type: float. Default value: 1\.; -#X msg 110 608 @max; -#X text 245 608 Get/Set maximum input value. Type: float. Default value: -1\.; -#X msg 110 637 @min; -#X text 245 637 Get/Set minimal input value. Type: float. Default value: +#X msg 110 622 @min; +#X text 245 622 Get/Set minimal input value. Type: float. Default value: -1\.; -#X msg 110 666 @nbins; -#X text 245 666 Get/Set number of histogram bins. Type: int. Default +#X msg 110 651 @nbins; +#X text 245 651 Get/Set number of histogram bins. Type: int. Default value: 63\. Range: 8\...512\.; -#X msg 110 708 @nsamp; -#X text 245 708 Get/Set max number of input samples. Type: int. Default +#X msg 110 693 @nsamp; +#X text 245 693 Get/Set max number of input samples. Type: int. Default value: 512\. Range: 8\...32768\.; -#X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 765 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 750 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 766 1\.; -#X text 150 766 *bang*; -#X text 245 766 starts histogram calculation.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 751 1\.; +#X text 150 751 *bang*; +#X text 245 751 starts histogram calculation.; +#X obj 20 781 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 786 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 802 1\.; -#X text 245 802 signal output.; -#X text 110 822 2\.; -#X text 245 822 output to [array.plot~] or [ui.plot~].; +#X text 110 787 1\.; +#X text 245 787 signal output.; +#X text 110 807 2\.; +#X text 245 807 output to [array.plot~] or [ui.plot~].; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 872 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 875 library: ceammc v0.9.4; -#X text 323 887 see also:; -#X obj 397 887 plot.linspace~; -#X obj 514 887 plot.geomspace~; -#X obj 638 887 plot.response~; -#N canvas 10 894 400 290 info 0; +#X obj 1 857 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 860 library: ceammc v0.9.6; +#X text 323 872 see also:; +#X obj 397 872 plot.linspace~; +#X obj 514 872 plot.geomspace~; +#X obj 638 872 plot.response~; +#N canvas 10 879 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 plot.hist~; #X text 10 76 category:; @@ -91,7 +90,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 894 pd info; +#X restore 10 879 pd info; #X connect 6 0 9 0; #X connect 9 0 11 0; #X connect 10 0 11 0; diff --git a/ceammc/ext/doc/plot.hist~.pddoc b/ceammc/ext/doc/plot.hist~.pddoc index 2046e7352d..206b8bc9ba 100644 --- a/ceammc/ext/doc/plot.hist~.pddoc +++ b/ceammc/ext/doc/plot.hist~.pddoc @@ -23,7 +23,8 @@ 0.9 - @nsamp property + @nsamp + property max @@ -32,8 +33,8 @@ histogram bins minimal input value maximum input value - clip input values into input - range, otherwise just ignore them + clip input values into input range, + otherwise just ignore them diff --git a/ceammc/ext/doc/plot.linspace~-help.pd b/ceammc/ext/doc/plot.linspace~-help.pd index cf48244b1a..44c76c49d4 100644 --- a/ceammc/ext/doc/plot.linspace~-help.pd +++ b/ceammc/ext/doc/plot.linspace~-help.pd @@ -8,65 +8,79 @@ interval; #X obj 638 11 plot.linspace~; #X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 174 118 ui.dsp~; #X obj 50 162 plot.linspace~ -5 5; #X obj 50 190 ui.plot~ @size 400 150 @xlabels 1 @ylabels 1 @xmin_grid 0 @ymin_ticks 0 @xmin_ticks 0 @yauto 1; #X obj 50 349 ui.dsp~; #X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 403 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 438 @base; -#X text 245 438 Get/Set x-axis scale base. Type: atom. Default value: +#X text 110 438 1\.; +#X text 150 438 float; +#X obj 246 439 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 START: @start property. Type: float.; +#X text 110 458 2\.; +#X text 150 458 float; +#X obj 246 459 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 458 STOP: @stop property. Type: float.; +#X text 110 478 3\.; +#X text 150 478 int; +#X obj 246 479 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 478 N: @n property. Type: int. Range: 4\...1024; +#X obj 20 508 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 513 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 548 @base; +#X text 245 548 Get/Set x-axis scale base. Type: atom. Default value: 0\. Allowed values: 0 \, pi.; -#X msg 110 480 @endpoint; -#X text 245 480 Get/Set include @stop to interval. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 522 @n; -#X text 245 522 Get/Set number of points. Type: int. Default value: +#X msg 110 590 @endpoint; +#X text 245 590 Get/Set include @stop to interval. Type: bool. Default +value: 1\.; +#X msg 110 632 @n; +#X text 245 632 Get/Set number of points. Type: int. Default value: 256\. Range: 4\...1024\.; -#X msg 110 564 @pi; -#X text 245 564 Get/Set alias to @base pi. Type: atom.; -#X msg 110 593 @start; -#X text 245 593 Get/Set the starting value of the sequence. Type: float. -Default value: 0\. Min value: 0\.; -#X msg 110 635 @stop; -#X text 245 635 Get/Set the final value of the sequence \, unless @endpoint +#X msg 110 674 @pi; +#X text 245 674 Get/Set alias to @base pi. Type: atom.; +#X msg 110 703 @start; +#X text 245 703 Get/Set the starting value of the sequence. Type: float. +Default value: 0\.; +#X msg 110 745 @stop; +#X text 245 745 Get/Set the final value of the sequence \, unless @endpoint is false. In that case \, @n + 1 values are spaced over the interval in lin-space \, of which all but the last (a sequence of length @n) -are returned. Type: float. Default value: 255\. Min value: 0\.; -#X obj 20 732 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 737 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +are returned. Type: float. Default value: 255\.; +#X obj 20 827 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 832 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 738 1\.; -#X text 150 738 *bang*; -#X text 245 738 starts output.; -#X text 150 758 *float*; -#X text 245 758 output specified number of values \, change @n property +#X text 110 833 1\.; +#X text 150 833 *bang*; +#X text 245 833 starts output.; +#X text 150 853 *float*; +#X text 245 853 output specified number of values \, change @n property valuue.; -#X obj 20 788 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 793 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 883 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 888 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 794 1\.; -#X text 245 794 signal output.; -#X text 110 814 2\.; -#X text 245 814 output to [array.plot~] or [ui.plot~].; +#X text 110 889 1\.; +#X text 245 889 signal output.; +#X text 110 909 2\.; +#X text 245 909 output to [array.plot~] or [ui.plot~].; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 864 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 867 library: ceammc v0.9.4; -#X text 440 879 see also:; -#X obj 514 879 plot.geomspace~; -#X obj 638 879 plot.logspace~; -#N canvas 10 886 400 290 info 0; +#X obj 1 959 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 962 library: ceammc v0.9.6; +#X text 440 974 see also:; +#X obj 514 974 plot.geomspace~; +#X obj 638 974 plot.logspace~; +#N canvas 10 981 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 plot.linspace~; #X text 10 76 category:; @@ -85,7 +99,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 886 pd info; -#X connect 4 0 6 0; -#X connect 6 0 7 0; -#X connect 6 1 7 1; \ No newline at end of file +#X restore 10 981 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 5 1 6 1; \ No newline at end of file diff --git a/ceammc/ext/doc/plot.linspace~.pddoc b/ceammc/ext/doc/plot.linspace~.pddoc index 4dd413070c..f09ee10013 100644 --- a/ceammc/ext/doc/plot.linspace~.pddoc +++ b/ceammc/ext/doc/plot.linspace~.pddoc @@ -18,19 +18,22 @@ 0.9 + + @start property + @stop property + @n property + - the starting value of the + the starting value of the sequence - the final value of the - sequence, unless @endpoint is false. In that case, @n + 1 values are spaced over the - interval in lin-space, of which all but the last (a sequence of length @n) are - returned. + the final value of the sequence, + unless @endpoint is false. In that case, @n + 1 values are spaced over the interval in + lin-space, of which all but the last (a sequence of length @n) are returned. number of points x-axis scale base alias to @base pi - include @stop to - interval + include @stop to interval @@ -46,7 +49,7 @@ - @start property - @stop property + @start property + @stop property + @base property + @n property - starting value of the - sequence: base^start - the final value - (base^stop) of the sequence, unless @endpoint is false. In that case, @n + 1 values are - spaced over the interval in log-space, of which all but the last (a sequence of length - @n) are returned. + starting value of the sequence: + base^start + the final value (base^stop) of the + sequence, unless @endpoint is false. In that case, @n + 1 values are spaced over the + interval in log-space, of which all but the last (a sequence of length @n) are + returned. number of points x-axis scale @@ -39,8 +41,7 @@ alias to @base 2 alias to @base 10 alias to @base e - include @stop to - interval + include @stop to interval diff --git a/ceammc/ext/doc/plot.response~-help.pd b/ceammc/ext/doc/plot.response~-help.pd index 419ee7883d..beeb2684d9 100644 --- a/ceammc/ext/doc/plot.response~-help.pd +++ b/ceammc/ext/doc/plot.response~-help.pd @@ -18,53 +18,52 @@ #X text 110 553 1\.; #X text 150 553 int; #X obj 246 554 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 553 N: @n property. Type: int.; +#X text 245 553 N: @n property. Type: int. Range: 32\...8192; #X obj 20 583 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 588 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 623 @db; #X text 245 623 Get/Set decibel mode. It true outputs amplitude in -decibels. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +decibels. Type: bool. Default value: 0\.; #X msg 110 665 @n; #X text 245 665 Get/Set number of processed samples. Type: int. Default value: 512\. Range: 32\...8192\.; #X msg 110 707 @sr; #X text 245 707 Get/Set using samplerate. If true output in [0\..SR/2] -instead of [0\..pi]. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X obj 20 774 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 779 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +instead of [0\..pi]. Type: bool. Default value: 0\.; +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 780 1\.; -#X text 245 780 input signal.; -#X text 110 800 2\.; -#X text 150 800 *bang*; -#X text 245 800 starts response calculation.; -#X obj 20 830 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 835 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 765 1\.; +#X text 245 765 input signal.; +#X text 110 785 2\.; +#X text 150 785 *bang*; +#X text 245 785 starts response calculation.; +#X obj 20 815 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 820 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 836 1\.; -#X text 245 836 frequency response.; -#X text 110 856 2\.; -#X text 245 856 phase response.; -#X text 110 876 3\.; -#X text 245 876 output to [array.plot~] or [ui.plot~].; +#X text 110 821 1\.; +#X text 245 821 frequency response.; +#X text 110 841 2\.; +#X text 245 841 phase response.; +#X text 110 861 3\.; +#X text 245 861 output to [array.plot~] or [ui.plot~].; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title array @url ceammc.array-help.pd; -#X obj 1 926 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 929 library: ceammc v0.9.4; -#X text 440 941 see also:; -#X obj 514 941 plot.linspace~; -#X obj 631 941 plot.geomspace~; -#N canvas 10 948 400 290 info 0; +#X obj 1 911 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 914 library: ceammc v0.9.6; +#X text 440 926 see also:; +#X obj 514 926 plot.linspace~; +#X obj 631 926 plot.geomspace~; +#N canvas 10 933 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 plot.response~; #X text 10 76 category:; @@ -83,7 +82,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 948 pd info; +#X restore 10 933 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/plot.response~.pddoc b/ceammc/ext/doc/plot.response~.pddoc index 4776cbd4d4..dafd82bd5d 100644 --- a/ceammc/ext/doc/plot.response~.pddoc +++ b/ceammc/ext/doc/plot.response~.pddoc @@ -18,15 +18,15 @@ 0.9 - @n property + @n property number of processed samples - decibel mode. It true outputs - amplitude in decibels - using samplerate. If true output - in [0..SR/2] instead of [0..pi] + decibel mode. It true outputs amplitude in + decibels + using samplerate. If true output in + [0..SR/2] instead of [0..pi] diff --git a/ceammc/ext/doc/preset.float-help.pd b/ceammc/ext/doc/preset.float-help.pd index a8643ecea1..8572b84e39 100644 --- a/ceammc/ext/doc/preset.float-help.pd +++ b/ceammc/ext/doc/preset.float-help.pd @@ -27,63 +27,63 @@ float values; Type: symbol.; #X text 110 437 2\.; #X text 150 437 float; -#X obj 246 438 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 437 VAL: preset initial value. Type: float.; +#X obj 246 438 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 437 INIT: preset initial value. Type: float.; #X obj 20 467 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 472 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 507 @global; #X text 245 507 use global path like /ID. Default value: 0\.; #X msg 110 536 @id; -#X text 245 536 (readonly) Get preset id. Type: symbol.; +#X text 245 536 (initonly) Get/Set preset id. Type: symbol.; #X msg 110 565 @init; -#X text 245 565 Get/Set init float value. Type: float. Default value: -0\.; -#X msg 110 594 @path; -#X text 245 594 (readonly) Get property OSC-like path that includes +#X text 245 565 (initonly) Get/Set init float value. Type: float. Default +value: 0\.; +#X msg 110 607 @path; +#X text 245 607 (readonly) Get property OSC-like path that includes id \, abstraction name and may be subpatch name separated by slashes. Type: symbol.; -#X msg 110 651 @subpatch; -#X text 245 651 include subpatch name to path. Default value: 0\.; -#X obj 20 690 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 695 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 664 @subpatch; +#X text 245 664 include subpatch name to path. Default value: 0\.; +#X obj 20 703 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 708 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 730 clear; -#X text 245 730 clear preset at specified index.; -#X msg 110 757 interp; -#X text 245 757 linearly interpolate between preset indexes and output.; -#X msg 110 784 load; -#X text 245 784 load preset value by specified index and output it.; -#X msg 110 811 store; -#X text 245 811 stores preset value at specified index.; -#X obj 20 848 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 853 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 743 clear; +#X text 245 743 clear preset at specified index.; +#X msg 110 770 interp; +#X text 245 770 linearly interpolate between preset indexes and output.; +#X msg 110 797 load; +#X text 245 797 load preset value by specified index and output it.; +#X msg 110 824 store; +#X text 245 824 stores preset value at specified index.; +#X obj 20 861 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 866 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 854 1\.; -#X text 150 854 *float*; -#X text 245 854 set preset value without output.; -#X obj 20 884 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 889 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 867 1\.; +#X text 150 867 *float*; +#X text 245 867 set preset value without output.; +#X obj 20 897 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 902 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 890 1\.; -#X text 245 890 preset float value.; +#X text 110 903 1\.; +#X text 245 903 preset float value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; -#X obj 1 940 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 943 library: ceammc v0.9.4; -#X text 362 955 see also:; -#X obj 436 955 preset.storage; -#X obj 552 955 preset.symbol; -#X obj 661 955 preset.list; -#N canvas 10 962 400 290 info 0; +#X obj 1 953 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 956 library: ceammc v0.9.6; +#X text 362 968 see also:; +#X obj 436 968 preset.storage; +#X obj 552 968 preset.symbol; +#X obj 661 968 preset.list; +#N canvas 10 975 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 preset.float; #X text 10 76 category:; @@ -102,7 +102,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 962 pd info; +#X restore 10 975 pd info; #X connect 10 0 11 0; #X connect 11 0 13 0; #X connect 8 0 9 0; diff --git a/ceammc/ext/doc/preset.float.pddoc b/ceammc/ext/doc/preset.float.pddoc index 79430ee039..75dfdbe324 100644 --- a/ceammc/ext/doc/preset.float.pddoc +++ b/ceammc/ext/doc/preset.float.pddoc @@ -27,16 +27,18 @@ preset id (should be unique in most use cases) - preset initial value + preset initial value - property OSC-like path that + property OSC-like path that includes id, abstraction name and may be subpatch name separated by slashes. - preset id - init float value - use global path like /ID - include subpatch name to - path + preset id + init float + value + use global path like + /ID + include subpatch + name to path load preset value by specified index and output it diff --git a/ceammc/ext/doc/preset.list-help.pd b/ceammc/ext/doc/preset.list-help.pd index 9aa23e3471..087de35eb9 100644 --- a/ceammc/ext/doc/preset.list-help.pd +++ b/ceammc/ext/doc/preset.list-help.pd @@ -27,15 +27,15 @@ lists; Type: symbol.; #X text 110 426 2\.; #X text 150 426 list; -#X obj 246 427 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 426 VALUES: preset initial value. Type: list.; +#X obj 246 427 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 426 INIT: preset initial value. Type: list.; #X obj 20 456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 461 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 496 @global; #X text 245 496 use global path like /ID. Default value: 0\.; #X msg 110 525 @id; -#X text 245 525 (readonly) Get preset id. Type: symbol.; +#X text 245 525 (initonly) Get/Set preset id. Type: symbol.; #X msg 110 554 @init; #X text 245 554 Get/Set init list value. Type: list.; #X msg 110 583 @path; @@ -70,7 +70,7 @@ Type: symbol.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 902 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 905 library: ceammc v0.9.4; +#X text 10 905 library: ceammc v0.9.6; #X text 355 917 see also:; #X obj 429 917 preset.storage; #X obj 545 917 preset.float; @@ -80,7 +80,7 @@ Type: symbol.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 preset.list; #X text 10 76 category:; diff --git a/ceammc/ext/doc/preset.list.pddoc b/ceammc/ext/doc/preset.list.pddoc index 8db4a65714..f19bb8d000 100644 --- a/ceammc/ext/doc/preset.list.pddoc +++ b/ceammc/ext/doc/preset.list.pddoc @@ -27,16 +27,17 @@ preset id (should be unique in most use cases) - preset initial value + preset initial value - property OSC-like path that + property OSC-like path that includes id, abstraction name and may be subpatch name separated by slashes. - preset id - init list value - use global path like /ID - include subpatch name to - path + preset id + init list value + use global path like + /ID + include subpatch + name to path load preset value by specified index and output it diff --git a/ceammc/ext/doc/preset.storage-help.pd b/ceammc/ext/doc/preset.storage-help.pd index 054171f258..17fd99e1c9 100644 --- a/ceammc/ext/doc/preset.storage-help.pd +++ b/ceammc/ext/doc/preset.storage-help.pd @@ -72,7 +72,7 @@ autogenerated name like PATCHNAME-preset.txt.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 915 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 918 library: ceammc v0.9.4; +#X text 10 918 library: ceammc v0.9.6; #X text 377 930 see also:; #X obj 451 930 preset.float; #X obj 552 930 preset.symbol; @@ -82,7 +82,7 @@ autogenerated name like PATCHNAME-preset.txt.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 preset.storage; #X text 10 76 category:; diff --git a/ceammc/ext/doc/preset.storage.pddoc b/ceammc/ext/doc/preset.storage.pddoc index 884f8cf1c3..d7ed8c3bee 100644 --- a/ceammc/ext/doc/preset.storage.pddoc +++ b/ceammc/ext/doc/preset.storage.pddoc @@ -39,8 +39,8 @@ fill empty presets by coping exiting values - list of all existing preset - keys + list of all existing + preset keys diff --git a/ceammc/ext/doc/preset.symbol-help.pd b/ceammc/ext/doc/preset.symbol-help.pd index a3e7cbe689..c6628dd4bc 100644 --- a/ceammc/ext/doc/preset.symbol-help.pd +++ b/ceammc/ext/doc/preset.symbol-help.pd @@ -25,17 +25,17 @@ various symbol values; Type: symbol.; #X text 110 369 2\.; #X text 150 369 symbol; -#X obj 246 370 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 369 VAL: preset initial value. Type: symbol.; +#X obj 246 370 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 369 INIT: preset initial value. Type: symbol.; #X obj 20 399 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 404 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 439 @global; #X text 245 439 use global path like /ID. Default value: 0\.; #X msg 110 468 @id; -#X text 245 468 (readonly) Get preset id. Type: symbol.; +#X text 245 468 (initonly) Get/Set preset id. Type: symbol.; #X msg 110 497 @init; -#X text 245 497 Get/Set init symbol value. Type: symbol.; +#X text 245 497 (initonly) Get/Set init symbol value. Type: symbol.; #X msg 110 526 @path; #X text 245 526 (readonly) Get property OSC-like path that includes id \, abstraction name and may be subpatch name separated by slashes. @@ -68,7 +68,7 @@ Type: symbol.; #X text 115 45 ::; #X obj 131 48 ui.link @title preset @url ceammc.preset-help.pd; #X obj 1 845 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 848 library: ceammc v0.9.4; +#X text 10 848 library: ceammc v0.9.6; #X text 370 860 see also:; #X obj 444 860 preset.storage; #X obj 560 860 preset.float; @@ -78,7 +78,7 @@ Type: symbol.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 preset.symbol; #X text 10 76 category:; diff --git a/ceammc/ext/doc/preset.symbol.pddoc b/ceammc/ext/doc/preset.symbol.pddoc index a01b58b68a..c6005fbc4b 100644 --- a/ceammc/ext/doc/preset.symbol.pddoc +++ b/ceammc/ext/doc/preset.symbol.pddoc @@ -27,16 +27,17 @@ preset id (should be unique in most use cases) - preset initial value + preset initial value - property OSC-like path that + property OSC-like path that includes id, abstraction name and may be subpatch name separated by slashes. - preset id - init symbol value - use global path like /ID - include subpatch name to - path + preset id + init symbol value + use global path like + /ID + include subpatch + name to path load preset value by specified index and output it diff --git a/ceammc/ext/doc/prop-help.pd b/ceammc/ext/doc/prop-help.pd index 45713bbf79..fa4843e905 100644 --- a/ceammc/ext/doc/prop-help.pd +++ b/ceammc/ext/doc/prop-help.pd @@ -49,7 +49,7 @@ limits can be set to property; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 668 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 671 library: ceammc v0.9.4; +#X text 10 671 library: ceammc v0.9.6; #X text 485 683 see also:; #X obj 559 683 prop.declare; #X obj 661 683 patch.props; @@ -58,7 +58,7 @@ limits can be set to property; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.declare-help.pd b/ceammc/ext/doc/prop.declare-help.pd index 0282249ad5..80fa445955 100644 --- a/ceammc/ext/doc/prop.declare-help.pd +++ b/ceammc/ext/doc/prop.declare-help.pd @@ -25,10 +25,10 @@ current canvas). Type: symbol.; #X msg 110 379 @b; #X text 245 379 alias to @type bool.; #X msg 110 408 @default; -#X text 245 408 Get/Set default property value. Type: list.; +#X text 245 408 (initonly) Get/Set default property value. Type: list.; #X msg 110 437 @enum; -#X text 245 437 Get/Set allowed values (without default value) (for -symbol properties only). Type: list.; +#X text 245 437 (initonly) Get/Set allowed values (without default +value) (for symbol properties only). Type: list.; #X msg 110 479 @f; #X text 245 479 alias to @type float.; #X msg 110 508 @i; @@ -36,11 +36,11 @@ symbol properties only). Type: list.; #X msg 110 537 @l; #X text 245 537 alias to @type list.; #X msg 110 566 @max; -#X text 245 566 Get/Set maximum value (for float and int properties -only). Type: float. Default value: +inf.; +#X text 245 566 (initonly) Get/Set maximum value (for float and int +properties only). Type: float. Default value: +inf.; #X msg 110 608 @min; -#X text 245 608 Get/Set minimal value (for float and int properties -only). Type: float. Default value: -inf.; +#X text 245 608 (initonly) Get/Set minimal value (for float and int +properties only). Type: float. Default value: -inf.; #X msg 110 650 @s; #X text 245 650 alias to @type symbol.; #X msg 110 679 @type; @@ -52,7 +52,7 @@ float. Allowed values: float \, int \, bool \, enum \, symbol \, list.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 751 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 754 library: ceammc v0.9.4; +#X text 10 754 library: ceammc v0.9.6; #X text 543 766 see also:; #X obj 617 766 prop; #X obj 661 766 patch.props; @@ -61,7 +61,7 @@ float. Allowed values: float \, int \, bool \, enum \, symbol \, list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.declare; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.declare.pddoc b/ceammc/ext/doc/prop.declare.pddoc index f10a1e761e..89b5a4b3e3 100644 --- a/ceammc/ext/doc/prop.declare.pddoc +++ b/ceammc/ext/doc/prop.declare.pddoc @@ -29,13 +29,14 @@ alias to @type bool alias to @type symbol alias to @type list - default property value - minimal value (for float and int - properties only) - maximum value (for float and int - properties only) - allowed values (without default value) (for symbol - properties only) + default property + value + minimal value (for + float and int properties only) + maximum value (for + float and int properties only) + allowed values (without + default value) (for symbol properties only) diff --git a/ceammc/ext/doc/prop.get-help.pd b/ceammc/ext/doc/prop.get-help.pd index ac66e69e35..83895bc8c7 100644 --- a/ceammc/ext/doc/prop.get-help.pd +++ b/ceammc/ext/doc/prop.get-help.pd @@ -50,7 +50,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 591 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 594 library: ceammc v0.9.4; +#X text 10 594 library: ceammc v0.9.6; #X text 622 606 see also:; #X obj 696 606 prop<-; #N canvas 10 613 400 290 info 0; @@ -58,7 +58,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.get; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.get~-help.pd b/ceammc/ext/doc/prop.get~-help.pd index bb2fe93bd0..d436194350 100644 --- a/ceammc/ext/doc/prop.get~-help.pd +++ b/ceammc/ext/doc/prop.get~-help.pd @@ -4,8 +4,12 @@ #X text 484 50 Property extractor from sound stream; #X obj 1 1 cnv 5 765 40 empty empty prop.get~ 20 20 0 20 -104026 -4096 0; -#X obj 557 11 prop~>; -#X obj 626 11 @~>; +#N canvas 576 11 250 400 aliases 0; +#X obj 30 40 prop~>; +#X obj 30 77 @~>; +#X obj 30 114 ceammc/prop~>; +#X obj 30 151 ceammc/@~>; +#X restore 576 11 pd aliases; #X obj 674 11 prop.get~; #X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Extracts properties from sound stream with matching. @@ -43,7 +47,7 @@ Non property values are passed untouched.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 586 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 589 library: ceammc v0.9.4; +#X text 10 589 library: ceammc v0.9.6; #X text 622 601 see also:; #X obj 696 601 prop->; #N canvas 10 608 400 290 info 0; @@ -51,7 +55,7 @@ Non property values are passed untouched.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.get~; #X text 10 76 category:; @@ -71,11 +75,11 @@ https://github.com/uliss/pure-data; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; #X restore 10 608 pd info; -#X connect 8 0 12 0; -#X connect 9 0 12 0; -#X connect 10 0 12 0; -#X connect 11 0 12 0; -#X connect 12 0 14 0; -#X connect 14 2 15 0; -#X connect 14 1 16 0; -#X connect 14 0 17 0; \ No newline at end of file +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 13 2 14 0; +#X connect 13 1 15 0; +#X connect 13 0 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/prop.get~.pddoc b/ceammc/ext/doc/prop.get~.pddoc index 1ce8f2875e..f8ab7fe033 100644 --- a/ceammc/ext/doc/prop.get~.pddoc +++ b/ceammc/ext/doc/prop.get~.pddoc @@ -15,6 +15,8 @@ prop~> @~> + ceammc/prop~> + ceammc/@~> prop-> diff --git a/ceammc/ext/doc/prop.join-help.pd b/ceammc/ext/doc/prop.join-help.pd index baeb56c576..6258b10c6f 100644 --- a/ceammc/ext/doc/prop.join-help.pd +++ b/ceammc/ext/doc/prop.join-help.pd @@ -42,7 +42,7 @@ value on inlet it immediately outputs it.; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 513 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 516 library: ceammc v0.9.4; +#X text 10 516 library: ceammc v0.9.6; #X text 622 528 see also:; #X obj 696 528 prop->; #N canvas 10 535 400 290 info 0; @@ -50,7 +50,7 @@ value on inlet it immediately outputs it.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.join; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.random-help.pd b/ceammc/ext/doc/prop.random-help.pd index 5a1c3475ce..f2e03210d0 100644 --- a/ceammc/ext/doc/prop.random-help.pd +++ b/ceammc/ext/doc/prop.random-help.pd @@ -55,7 +55,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 690 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 693 library: ceammc v0.9.4; +#X text 10 693 library: ceammc v0.9.6; #X text 441 705 see also:; #X obj 515 705 prop; #X obj 559 705 prop.declare; @@ -65,7 +65,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.random; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.set-help.pd b/ceammc/ext/doc/prop.set-help.pd index eb852c10f8..ccfdd09554 100644 --- a/ceammc/ext/doc/prop.set-help.pd +++ b/ceammc/ext/doc/prop.set-help.pd @@ -57,7 +57,7 @@ props \, but using internal pd method calls; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 792 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 795 library: ceammc v0.9.4; +#X text 10 795 library: ceammc v0.9.6; #X text 608 807 see also:; #X obj 682 807 prop.get; #N canvas 10 814 400 290 info 0; @@ -65,7 +65,7 @@ props \, but using internal pd method calls; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.set; #X text 10 76 category:; diff --git a/ceammc/ext/doc/prop.split-help.pd b/ceammc/ext/doc/prop.split-help.pd index 0d39eb5e40..ae79a69177 100644 --- a/ceammc/ext/doc/prop.split-help.pd +++ b/ceammc/ext/doc/prop.split-help.pd @@ -4,8 +4,12 @@ #X text 506 50 separate properties from dataflow; #X obj 1 1 cnv 5 765 40 empty empty prop.split 20 20 0 20 -104026 -4096 0; -#X obj 551 11 prop->; -#X obj 620 11 @->; +#N canvas 570 11 250 400 aliases 0; +#X obj 30 40 prop->; +#X obj 30 77 @->; +#X obj 30 114 ceammc/prop->; +#X obj 30 151 ceammc/@->; +#X restore 570 11 pd aliases; #X obj 668 11 prop.split; #X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Extracts properties from data stream with matching. @@ -44,7 +48,7 @@ Non property values are passed untouched; #X text 115 45 ::; #X obj 131 48 ui.link @title property @url ceammc.property-help.pd; #X obj 1 561 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 564 library: ceammc v0.9.4; +#X text 10 564 library: ceammc v0.9.6; #X text 622 576 see also:; #X obj 696 576 prop<-; #N canvas 10 583 400 290 info 0; @@ -52,7 +56,7 @@ Non property values are passed untouched; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 prop.split; #X text 10 76 category:; @@ -72,12 +76,12 @@ https://github.com/uliss/pure-data; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; #X restore 10 583 pd info; -#X connect 9 0 14 0; -#X connect 12 0 14 0; -#X connect 8 0 14 0; -#X connect 10 0 14 0; -#X connect 13 0 14 0; -#X connect 11 0 14 0; -#X connect 14 2 15 0; -#X connect 14 1 16 0; -#X connect 14 0 17 0; \ No newline at end of file +#X connect 8 0 13 0; +#X connect 11 0 13 0; +#X connect 7 0 13 0; +#X connect 9 0 13 0; +#X connect 12 0 13 0; +#X connect 10 0 13 0; +#X connect 13 2 14 0; +#X connect 13 1 15 0; +#X connect 13 0 16 0; \ No newline at end of file diff --git a/ceammc/ext/doc/prop.split.pddoc b/ceammc/ext/doc/prop.split.pddoc index 6c297b5719..80e32b2e7c 100644 --- a/ceammc/ext/doc/prop.split.pddoc +++ b/ceammc/ext/doc/prop.split.pddoc @@ -15,6 +15,8 @@ prop-> @-> + ceammc/prop-> + ceammc/@-> prop<- diff --git a/ceammc/ext/doc/proto.feelworld-help.pd b/ceammc/ext/doc/proto.feelworld-help.pd new file mode 100644 index 0000000000..9bd9a10a52 --- /dev/null +++ b/ceammc/ext/doc/proto.feelworld-help.pd @@ -0,0 +1,74 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 422 50 cnv 1 343 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 422 50 protocol for FeelWorld LivePro L1 HDMI mixer; +#X obj 1 1 cnv 5 765 40 empty empty proto.feelworld 20 20 0 20 -104026 +-4096 0; +#X obj 632 11 proto.feelworld; +#X obj 50 118 ui.hrd 4; +#X msg 50 147 input \$1; +#X obj 50 176 proto.feelworld; +#X obj 50 205 msg send; +#X symbolatom 69 234 20 0 0 0 - - -; +#X msg 69 262 connect \$1 1000; +#X obj 50 291 netsend -u -b; +#X obj 50 320 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 372 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X obj 20 427 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 432 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 467 input; +#X text 245 467 select HDMI input. Arguments are:; +#X obj 255 490 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 490 N: input index. Type: int. Range: 0\...3\.; +#X obj 20 525 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 530 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 531 1\.; +#X text 245 531 commands.; +#X obj 20 561 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 566 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 567 1\.; +#X text 245 567 list: bytes to send to UDP port 1000\.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 617 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 620 library: ceammc v0.9.6; +#N canvas 10 639 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 proto.feelworld; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 video \, mixer \, fellworld; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 639 pd info; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 8 0 9 0; +#X connect 7 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.feelworld.pddoc b/ceammc/ext/doc/proto.feelworld.pddoc new file mode 100644 index 0000000000..9407b3076f --- /dev/null +++ b/ceammc/ext/doc/proto.feelworld.pddoc @@ -0,0 +1,52 @@ + + + + proto.feelworld + + + Serge Poltavsky + + protocol for FeelWorld LivePro L1 HDMI mixer + GPL3 or later + ceammc + proto + video mixer fellworld + 0.9.5 + + + + select HDMI input + input + index + + + + commands + + + + list: bytes to send to UDP port 1000 + + + + + + + + diff --git a/ceammc/ext/doc/proto.firmata-help.pd b/ceammc/ext/doc/proto.firmata-help.pd index 53a65d7e95..dde148f1fb 100644 --- a/ceammc/ext/doc/proto.firmata-help.pd +++ b/ceammc/ext/doc/proto.firmata-help.pd @@ -24,17 +24,14 @@ #X obj 50 431 hw.arduino; #X obj 50 460 proto.firmata; #X obj 50 489 route version firmware apin dport; -#X obj 50 518 msg set; -#X obj 146 518 msg set; -#X obj 242 518 msg set; -#X msg 50 546 ; -#X msg 146 546 ; -#X msg 242 575 ; -#X obj 20 624 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 629 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 50 518 ui.dt; +#X obj 146 518 ui.dt; +#X obj 242 518 ui.dt; +#X obj 20 567 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 572 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 664 apin_mapping?; -#X text 245 664 query mapping between analog port number and digital +#X msg 110 607 apin_mapping?; +#X text 245 607 query mapping between analog port number and digital pin. Analog messages are numbered 0 to 15 \, which traditionally refer to the Arduino pins labeled A0 \, A1 \, A2 \, etc. However \, these pis are actually configured using "normal" pin numbers in the pin mode @@ -43,22 +40,22 @@ analog mapping query provides the information about which pins (as used with Firmata's pin mode message) correspond to the analog channels. Return sequence of messages like: [apin_mapping A# PIN#( \, where # is number.; -#X msg 110 809 capabilities?; -#X text 245 809 query pin capabilities. Return sequence of messages +#X msg 110 752 capabilities?; +#X text 245 752 query pin capabilities. Return sequence of messages like: [pin_info PIN# MODE RESOLUTION( \, where # is pin number.; -#X msg 110 849 firmware?; -#X text 245 849 query firmata protocol version. Returns message like: +#X msg 110 792 firmware?; +#X text 245 792 query firmata protocol version. Returns message like: [firmware ARDUINO_FIRMWARE_NAME.ino MAJOR MINOR(.; -#X msg 110 889 pin_mode; -#X text 245 889 sets pin mode. Arguments are:; -#X obj 255 912 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 912 PIN#: pin number. Type: int. Min value: 0\.; -#X obj 255 935 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 935 MODE: pin mode. Type: symbol. Allowed values: INPUT +#X msg 110 832 pin_mode; +#X text 245 832 sets pin mode. Arguments are:; +#X obj 255 855 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 855 PIN#: pin number. Type: int. Min value: 0\.; +#X obj 255 878 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 878 MODE: pin mode. Type: symbol. Allowed values: INPUT \, OUTPUT \, ANALOG \, PWM \, SERVO \, SHIFT \, I2C \, ONEWIRE \, STEPPER \, ENCODER \, SERIAL \, PULLUP.; -#X msg 110 990 pin_state?; -#X text 245 990 query pin state. The pin state is any data written +#X msg 110 933 pin_state?; +#X text 245 933 query pin state. The pin state is any data written to the pin (it is important to note that pin state != pin value). For output modes (digital output \, PWM \, and Servo) \, the state is any value that has been previously written to the pin. For input modes @@ -66,78 +63,78 @@ value that has been previously written to the pin. For input modes state is the status of the pull-up resistor which is 1 if enabled \, 0 if disabled. Returns message like [pin_state PIN# MODE state( \, where # is pin number. Arguments are:; -#X obj 255 1133 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1133 PIN#: pin number. Type: int.; -#X msg 110 1158 report_apin; -#X text 245 1158 turns on/off analog pin (A0-A6) value reporting. Arguments +#X obj 255 1076 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1076 PIN#: pin number. Type: int.; +#X msg 110 1101 report_apin; +#X text 245 1101 turns on/off analog pin (A0-A6) value reporting. Arguments are:; -#X obj 255 1196 cnv 1 83 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1196 ANALOG_PIN: analog pin number. Type: int.; -#X obj 255 1219 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1219 VALUE: value. If 1 - activates analog reporting \, +#X obj 255 1139 cnv 1 83 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1139 ANALOG_PIN: analog pin number. Type: int.; +#X obj 255 1162 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1162 VALUE: value. If 1 - activates analog reporting \, messages like [apin PIN# value( are returned every sampling interval (by default 19ms). Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1274 report_dport; -#X text 245 1274 turns on/off digital port value reporting. Arguments +#X msg 110 1217 report_dport; +#X text 245 1217 turns on/off digital port value reporting. Arguments are:; -#X obj 255 1297 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1297 PORT#: digital port number. Port is a group of pins +#X obj 255 1240 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1240 PORT#: digital port number. Port is a group of pins \, port 0 refers pins 0-8\. Type: int.; -#X obj 255 1335 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1335 VALUE: value. If 1 - activates digital port reporting +#X obj 255 1278 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1278 VALUE: value. If 1 - activates digital port reporting \, messages like [dport PORT# value( are returned only on pin value change. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1390 samp_interval; -#X text 245 1390 sets sampling interval - how often analog data and +#X msg 110 1333 samp_interval; +#X text 245 1333 sets sampling interval - how often analog data and i2c data is reported to the client. The default for the arduino implementation is 19ms. This means that every 19ms analog data will be reported and any i2c devices with read continuous mode will be read. Arguments are:; -#X obj 255 1473 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1473 TIME: time. Type: int. Range: 10\...10000\. Units: +#X obj 255 1416 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1416 TIME: time. Type: int. Range: 10\...10000\. Units: ms.; -#X msg 110 1498 version?; -#X text 245 1498 query firmata protocol version. Returns message like: +#X msg 110 1441 version?; +#X text 245 1441 query firmata protocol version. Returns message like: [version MAJOR MINOR(.; -#X msg 110 1538 write_dpin; -#X text 245 1538 write 1 or 0 to digital pin. Pin mode should be OUTPUT. +#X msg 110 1481 write_dpin; +#X text 245 1481 write 1 or 0 to digital pin. Pin mode should be OUTPUT. Arguments are:; -#X obj 255 1576 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1576 PIN#: pin number. Type: int.; -#X obj 255 1599 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1599 VALUE: pin value. Type: int. Allowed values: 0 \, +#X obj 255 1519 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1519 PIN#: pin number. Type: int.; +#X obj 255 1542 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1542 VALUE: pin value. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1624 write_pwm; -#X text 245 1624 writes PWM (Pulse Width Modulation) value to specified +#X msg 110 1567 write_pwm; +#X text 245 1567 writes PWM (Pulse Width Modulation) value to specified pin. Arguments are:; -#X obj 255 1662 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1662 PIN#: pin number. Type: int.; -#X obj 255 1685 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1685 VALUE: pin value. Type: int. Range: 0\...256\.; -#X obj 20 1720 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1725 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1605 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1605 PIN#: pin number. Type: int.; +#X obj 255 1628 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1628 VALUE: pin value. Type: int. Range: 0\...256\.; +#X obj 20 1663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1668 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1726 1\.; -#X text 150 1726 *float*; -#X text 245 1726 raw input of bytes from Arduino serial connection.; -#X obj 20 1756 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1761 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1669 1\.; +#X text 150 1669 *float*; +#X text 245 1669 raw input of bytes from Arduino serial connection.; +#X obj 20 1699 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1704 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1762 1\.; -#X text 245 1762 raw byte output to Arduino serial connection and tagged +#X text 110 1705 1\.; +#X text 245 1705 raw byte output to Arduino serial connection and tagged parsed output from Arduino.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; -#X obj 1 1827 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1830 library: ceammc v0.9.4; -#N canvas 10 1849 400 290 info 0; +#X obj 1 1770 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1773 library: ceammc v0.9.6; +#N canvas 10 1792 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.firmata; #X text 10 76 category:; @@ -156,7 +153,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1849 pd info; +#X restore 10 1792 pd info; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 10 0 12 0; @@ -173,7 +170,4 @@ https://github.com/uliss/pure-data; #X connect 21 0 22 0; #X connect 22 0 23 0; #X connect 22 1 24 0; -#X connect 22 2 25 0; -#X connect 23 0 26 0; -#X connect 24 0 27 0; -#X connect 25 0 28 0; \ No newline at end of file +#X connect 22 2 25 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.firmata.pddoc b/ceammc/ext/doc/proto.firmata.pddoc index 3af2691e65..bc45e2fe43 100644 --- a/ceammc/ext/doc/proto.firmata.pddoc +++ b/ceammc/ext/doc/proto.firmata.pddoc @@ -105,11 +105,7 @@ | [route version firmware apin dport] | ^| ^^| -[msg set] [msg set] [msg set] -| | | -[ ( [ ( | - | - [ ( +[ui.dt] [ui.dt] [ui.dt] ]]> diff --git a/ceammc/ext/doc/proto.inscore-help.pd b/ceammc/ext/doc/proto.inscore-help.pd new file mode 100644 index 0000000000..7d9560e77a --- /dev/null +++ b/ceammc/ext/doc/proto.inscore-help.pd @@ -0,0 +1,260 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 583 50 cnv 1 182 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 583 50 INScore message creator; +#X obj 1 1 cnv 5 765 40 empty empty proto.inscore 20 20 0 20 -104026 +-4096 0; +#X obj 646 11 proto.inscore; +#X msg 50 118 text LABEL text message; +#X obj 69 147 ui.hsl -1 1; +#X obj 242 147 ui.hsl 0 360; +#X msg 69 176 x LABEL \$1; +#X msg 242 176 angle LABEL \$1; +#X msg 88 205 dx LABEL 0.1; +#X msg 261 205 gmn M [f b d# g#]; +#X msg 107 234 del LABEL; +#X obj 50 262 proto.inscore; +#X obj 78 291 print INSCORE; +#X obj 50 320 net.osc.send osc.udp://localhost:7000; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 409 @scene; +#X text 245 409 Get/Set scene id. Type: int. Default value: 0\. Min +value: 0\.; +#X obj 20 461 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 466 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 501 alpha; +#X text 245 501 set object alpha opacity. Arguments are:; +#X obj 255 524 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 524 NAME: object name. Type: symbol.; +#X obj 255 547 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 547 VAL: alpha value. Type: float.; +#X msg 110 572 angle; +#X text 245 572 rotate object. Arguments are:; +#X obj 255 595 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 595 NAME: object name. Type: symbol.; +#X obj 255 618 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 618 ANGLE: rotation angle (clockwise). Type: float. Units: +deg.; +#X msg 110 643 color; +#X text 245 643 set object color. Arguments are:; +#X obj 255 666 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 666 NAME: object name. Type: symbol.; +#X obj 255 689 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 689 VAL: color: RGB list of floats in [0-1] range or color +name. Type: list.; +#X msg 110 729 del; +#X text 245 729 remove object. Arguments are:; +#X obj 255 752 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 752 NAME: object name. Type: symbol.; +#X msg 110 777 dscale; +#X text 245 777 relative object scale. Arguments are:; +#X obj 255 800 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 800 NAME: object name. Type: symbol.; +#X obj 255 823 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 823 VAL: value. Type: float.; +#X msg 110 848 dx; +#X text 245 848 move object horizontally by specified X offset. Arguments +are:; +#X obj 255 886 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 886 NAME: object name. Type: symbol.; +#X obj 255 909 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 909 [POS]: X offset. Type: float.; +#X msg 110 934 dy; +#X text 245 934 move object vertically by specified Y offset. Arguments +are:; +#X obj 255 957 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 957 NAME: object name. Type: symbol.; +#X obj 255 980 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 980 [POS]: Y offset. Type: float.; +#X msg 110 1005 dz; +#X text 245 1005 move object vertically by specified Z offset. Arguments +are:; +#X obj 255 1028 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1028 NAME: object name. Type: symbol.; +#X obj 255 1051 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1051 [POS]: Z offset. Type: float.; +#X msg 110 1076 ellipse; +#X text 245 1076 create ellipse. Arguments are:; +#X obj 255 1099 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1099 NAME: object name. Type: symbol.; +#X obj 255 1122 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1122 W: width. Type: float.; +#X obj 255 1145 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1145 H: height. Type: float.; +#X msg 110 1170 file; +#X text 245 1170 set object from file content. Arguments are:; +#X obj 255 1193 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1193 NAME: object name. Type: symbol.; +#X obj 255 1216 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1216 URL: url. Type: symbol.; +#X msg 110 1241 font_size; +#X text 245 1241 set object fontsize. Arguments are:; +#X obj 255 1264 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1264 NAME: object name. Type: symbol.; +#X obj 255 1287 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1287 SIZE: fontsize. Type: float.; +#X msg 110 1312 font_weight; +#X text 245 1312 set object font weight. Arguments are:; +#X obj 255 1335 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1335 NAME: object name. Type: symbol.; +#X obj 255 1358 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1358 SIZE: weight. Type: symbol. Allowed values: light|demibold|normal|bold|black.; +#X msg 110 1398 gmn; +#X text 245 1398 create Guido Music notation. Arguments are:; +#X obj 255 1421 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1421 NAME: object name. Type: symbol.; +#X obj 255 1444 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1444 [NOTES]: Guido Music Notation. Type: list.; +#X msg 110 1469 gmn<<; +#X text 245 1469 append Guido Music notation to object \, can be called +several times. Arguments are:; +#X obj 255 1507 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1507 NAME: object name. Type: symbol.; +#X obj 255 1530 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1530 NOTES: Guido Music Notation. Type: list.; +#X msg 110 1555 height; +#X text 245 1555 set object width. Arguments are:; +#X obj 255 1578 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1578 NAME: object name. Type: symbol.; +#X obj 255 1601 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1601 [WD]: height. Type: float.; +#X msg 110 1626 make_chord; +#X text 245 1626 output guido chord as symbol. Arguments are:; +#X obj 255 1649 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1649 [NOTES]: guido notation. Type: list.; +#X msg 110 1674 make_cluster; +#X text 245 1674 output guido cluster as symbol. Arguments are:; +#X obj 255 1697 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1697 [NOTES]: guido notation. Type: list.; +#X msg 110 1722 rect; +#X text 245 1722 create rectangle. Arguments are:; +#X obj 255 1745 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1745 NAME: object name. Type: symbol.; +#X obj 255 1768 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1768 W: width. Type: float.; +#X obj 255 1791 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1791 H: height. Type: float.; +#X msg 110 1816 scale; +#X text 245 1816 scale object. Arguments are:; +#X obj 255 1839 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1839 NAME: object name. Type: symbol.; +#X obj 255 1862 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1862 VAL: value. Type: float.; +#X msg 110 1887 show; +#X text 245 1887 show/hide object. Arguments are:; +#X obj 255 1910 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1910 NAME: object name. Type: symbol.; +#X obj 255 1933 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1933 VAL: object state. Type: int. Allowed values: 0 \, +1\.; +#X msg 110 1958 text; +#X text 245 1958 create text object at (0 \, 0) position. Arguments +are:; +#X obj 255 1981 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1981 NAME: object name. Type: symbol.; +#X obj 255 2004 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2004 [ARGS]: content. Type: list.; +#X msg 110 2029 width; +#X text 245 2029 set object width. Arguments are:; +#X obj 255 2052 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2052 NAME: object name. Type: symbol.; +#X obj 255 2075 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2075 [WD]: width. Type: float.; +#X msg 110 2100 write; +#X text 245 2100 text objects support writing in a stream-like way. +Arguments are:; +#X obj 255 2138 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2138 NAME: object name. Type: symbol.; +#X obj 255 2161 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2161 ITEMS: added content. Type: list.; +#X msg 110 2186 write_chord; +#X text 245 2186 add chord to INScore. Arguments are:; +#X obj 255 2209 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2209 NAME: object name. Type: symbol.; +#X obj 255 2232 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2232 [NOTES]: guido notation. Type: list.; +#X msg 110 2257 x; +#X text 245 2257 move object to new Y-coord. Arguments are:; +#X obj 255 2280 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2280 NAME: object name. Type: symbol.; +#X obj 255 2303 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2303 [POS]: new X position. Type: float.; +#X msg 110 2328 xorigin; +#X text 245 2328 set object X origin. Arguments are:; +#X obj 255 2351 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2351 NAME: object name. Type: symbol.; +#X obj 255 2374 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2374 POS: X origin position. Type: float.; +#X msg 110 2399 y; +#X text 245 2399 move object to new Y-coord. Arguments are:; +#X obj 255 2422 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2422 NAME: object name. Type: symbol.; +#X obj 255 2445 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2445 [POS]: new Y position. Type: float.; +#X msg 110 2470 yorigin; +#X text 245 2470 set object Y origin. Arguments are:; +#X obj 255 2493 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2493 NAME: object name. Type: symbol.; +#X obj 255 2516 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2516 POS: Y origin position. Type: float.; +#X msg 110 2541 z; +#X text 245 2541 move object to new Z-coord. Arguments are:; +#X obj 255 2564 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2564 NAME: object name. Type: symbol.; +#X obj 255 2587 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2587 [POS]: new Z position. Type: float.; +#X obj 20 2622 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2627 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2628 1\.; +#X text 245 2628 control input.; +#X obj 20 2658 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2663 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 2664 1\.; +#X text 245 2664 osc send command.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 2714 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2717 library: ceammc v0.9.6; +#N canvas 10 2736 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 proto.inscore; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 inscore; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 2736 pd info; +#X connect 5 0 7 0; +#X connect 6 0 8 0; +#X connect 4 0 12 0; +#X connect 7 0 12 0; +#X connect 9 0 12 0; +#X connect 11 0 12 0; +#X connect 8 0 12 0; +#X connect 10 0 12 0; +#X connect 12 0 13 0; +#X connect 12 0 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.inscore.pddoc b/ceammc/ext/doc/proto.inscore.pddoc new file mode 100644 index 0000000000..b191fade19 --- /dev/null +++ b/ceammc/ext/doc/proto.inscore.pddoc @@ -0,0 +1,157 @@ + + + + proto.inscore + + + Serge Poltavsky + + INScore message creator + GPL3 or later + ceammc + proto + inscore + 0.9.6 + + + create text object at (0,0) position + object name + content + remove object + object name + show/hide object + object name + object state + text objects support writing in a stream-like way. + object name + added content + + move object to new Y-coord + object name + new X position + move object to new Y-coord + object name + new Y position + move object to new Z-coord + object name + new Z position + move object horizontally by specified X offset + object name + X offset + move object vertically by specified Y offset + object name + Y offset + move object vertically by specified Z offset + object name + Z offset + + set object X origin + object name + X origin position + + set object Y origin + object name + Y origin position + + set object width + object name + width + + set object width + object name + height + + rotate object + object name + rotation angle + (clockwise) + + scale object + object name + value + relative object scale + object name + value + + set object fontsize + object name + fontsize + + set object font weight + object name + weight + + set object color + object name + color: RGB list of floats in [0-1] range + or color name + + set object alpha opacity + object name + alpha value + + create Guido Music notation + object name + Guido Music Notation + output guido chord as symbol + guido notation + output guido cluster as symbol + guido notation + add chord to INScore + object name + guido notation + + append Guido Music notation to object, can be called several + times + object name + Guido Music Notation + + create rectangle + object name + width + height + + create ellipse + object name + width + height + + set object from file content + object name + url + + + scene id + + + + control input + + + + osc send command + + + + + + + + diff --git a/ceammc/ext/doc/proto.midi-help.pd b/ceammc/ext/doc/proto.midi-help.pd index 3b40741da6..f284b62fc7 100644 --- a/ceammc/ext/doc/proto.midi-help.pd +++ b/ceammc/ext/doc/proto.midi-help.pd @@ -131,13 +131,13 @@ messages (0xF1). Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; #X obj 1 1676 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1679 library: ceammc v0.9.4; +#X text 10 1679 library: ceammc v0.9.6; #N canvas 10 1698 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.midi; #X text 10 76 category:; diff --git a/ceammc/ext/doc/proto.midi.casio-help.pd b/ceammc/ext/doc/proto.midi.casio-help.pd new file mode 100644 index 0000000000..d9ee7fc42b --- /dev/null +++ b/ceammc/ext/doc/proto.midi.casio-help.pd @@ -0,0 +1,94 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 568 50 cnv 1 197 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 568 50 Casio Privia MIDI control; +#X obj 1 1 cnv 5 765 40 empty empty proto.midi.casio 20 20 0 20 +-104026 -4096 0; +#X obj 624 11 proto.midi.casio; +#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Note: only PX160 model supported at this moment; +#X obj 50 143 ui.tab piano epiano strings bass organ vibr harps @size +310 15; +#X obj 117 172 ui.hrd 6; +#X obj 50 201 sync 2; +#X obj 50 230 pack f f; +#X obj 50 259 msg instr; +#X obj 50 287 proto.midi.casio; +#X obj 50 316 midiout; +#X obj 20 365 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 370 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 405 @model; +#X text 245 405 Get/Set device model. Type: symbol. Default value: +px160\.; +#X obj 20 444 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 449 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 484 instr; +#X text 245 484 send Note On message. Arguments are:; +#X obj 255 507 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 507 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 530 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 530 NAME: instrument name. Type: symbol. Allowed values: +piano \, epiano \, strings \, bass \, organ \, vibr \, harps.; +#X obj 255 568 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 568 TYPE: instrument type. for 'piano': concert|modern|classic|mellow|bright|0\..4 +\, for 'epiano': 0|1|fm|2|3|60 \, for 'strings': 0|1 \, for 'bass': +0 \, for 'organ': pipe|jass|elec1|elec2|0\..3 \, for 'vibr' and 'haprs': +0\. Type: atom.; +#X msg 110 653 rev_time; +#X text 245 653 set reverb time. Arguments are:; +#X obj 255 676 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 676 AMOUNT: reverb time. Type: int. Range: 0\...127\.; +#X msg 110 701 rev_type; +#X text 245 701 set reverb type. Arguments are:; +#X obj 255 724 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 724 TYPE: reverb type. Type: int. Range: 1\...4\.; +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 765 1\.; +#X text 245 765; +#X obj 20 780 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 785 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 786 1\.; +#X text 245 786 float: raw midi output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 836 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 839 library: ceammc v0.9.4; +#N canvas 10 858 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.4; +#X text 10 54 object:; +#X text 120 54 proto.midi.casio; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 parser \, midi \, casio; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 858 pd info; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.midi.casio.pddoc b/ceammc/ext/doc/proto.midi.casio.pddoc new file mode 100644 index 0000000000..0fb8f63f42 --- /dev/null +++ b/ceammc/ext/doc/proto.midi.casio.pddoc @@ -0,0 +1,67 @@ + + + + proto.midi.casio + + + Serge Poltavsky + + Casio Privia MIDI control + GPL3 or later + ceammc + proto + parser midi casio + 0.9.5 + + + Note: only PX160 model supported at this moment + + + send Note On message + midi + channel + instrument name + instrument type. for 'piano': + concert|modern|classic|mellow|bright|0..4, for 'epiano': 0|1|fm|2|3|60, for 'strings': + 0|1, for 'bass': 0, for 'organ': pipe|jass|elec1|elec2|0..3, for 'vibr' and 'haprs': + 0 + set reverb type + reverb + type + set reverb time + reverb + time + + + device model + + + + + + + + float: raw midi output + + + + + + + + diff --git a/ceammc/ext/doc/proto.midi.cc-help.pd b/ceammc/ext/doc/proto.midi.cc-help.pd index 751f63a00e..6006afcd53 100644 --- a/ceammc/ext/doc/proto.midi.cc-help.pd +++ b/ceammc/ext/doc/proto.midi.cc-help.pd @@ -11,236 +11,236 @@ #X obj 20 201 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 236 @list; -#X text 245 236 Get/Set output as list. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X obj 20 288 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 293 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 236 output as list. Default value: 0\. Allowed values: +0 \, 1\.; +#X obj 20 275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 280 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 328 bank; -#X text 245 328 send CC Bank Select. Arguments are:; -#X obj 255 351 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 351 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 374 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 374 BANK: bank. Type: int. Range: 0\...16384\.; -#X msg 110 399 bank:i; -#X text 245 399 same as [bank(.; -#X msg 110 426 bank:lsb; -#X text 245 426 send CC Bank Select LSB. Arguments are:; -#X obj 255 449 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 449 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 472 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 472 BANK: bank LSB. Type: int. Range: 0\...127\.; -#X msg 110 497 bank:msb; -#X text 245 497 send CC Bank Select MSB. Arguments are:; -#X obj 255 520 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 520 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 543 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 543 BANK: bank MSB. Type: int. Range: 0\...127\.; -#X msg 110 568 bendsens; -#X text 245 568 send Pitch bend sensivity message. Arguments are:; -#X obj 255 591 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 591 CH: midi channel. Type: int. Min value: 0\.; -#X msg 110 616 exp.; -#X text 245 616 send fine CC Expression message. Arguments are:; -#X obj 255 639 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 639 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 662 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 662 VAL: expression value. Type: int. Range: 0\...127\.; -#X msg 110 687 exp:f; -#X text 245 687 send CC normalized Expression message. Arguments are:; -#X obj 255 710 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 710 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 733 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 733 VAL: expression value. Type: float. Range: 0\...1\.; -#X msg 110 758 exp:i; -#X text 245 758 send 14-bit CC Expression message. Arguments are:; -#X obj 255 781 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 781 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 804 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 804 VAL: expression. Type: int. Range: 0\...16384\.; -#X msg 110 829 exp~; -#X text 245 829 send coarse CC Expression message. Arguments are:; -#X obj 255 852 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 852 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 875 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 875 VAL: expression value. Type: int. Range: 0\...127\.; -#X msg 110 900 hold; -#X text 245 900 send CC Hold pedal message. Arguments are:; -#X obj 255 923 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 923 [CHAN]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 946 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 946 BOOL: on/off value. Type: int. Allowed values: 0 \, +#X msg 110 315 bank; +#X text 245 315 send CC Bank Select. Arguments are:; +#X obj 255 338 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 338 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 361 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 361 BANK: bank. Type: int. Range: 0\...16384\.; +#X msg 110 386 bank:i; +#X text 245 386 same as [bank(.; +#X msg 110 413 bank:lsb; +#X text 245 413 send CC Bank Select LSB. Arguments are:; +#X obj 255 436 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 436 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 459 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 459 BANK: bank LSB. Type: int. Range: 0\...127\.; +#X msg 110 484 bank:msb; +#X text 245 484 send CC Bank Select MSB. Arguments are:; +#X obj 255 507 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 507 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 530 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 530 BANK: bank MSB. Type: int. Range: 0\...127\.; +#X msg 110 555 bendsens; +#X text 245 555 send Pitch bend sensitivity message. Arguments are:; +#X obj 255 578 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 578 CH: midi channel. Type: int. Min value: 0\.; +#X msg 110 603 exp.; +#X text 245 603 send fine CC Expression message. Arguments are:; +#X obj 255 626 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 626 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 649 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 649 VAL: expression value. Type: int. Range: 0\...127\.; +#X msg 110 674 exp:f; +#X text 245 674 send CC normalized Expression message. Arguments are:; +#X obj 255 697 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 697 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 720 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 720 VAL: expression value. Type: float. Range: 0\...1\.; +#X msg 110 745 exp:i; +#X text 245 745 send 14-bit CC Expression message. Arguments are:; +#X obj 255 768 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 768 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 791 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 791 VAL: expression. Type: int. Range: 0\...16384\.; +#X msg 110 816 exp~; +#X text 245 816 send coarse CC Expression message. Arguments are:; +#X obj 255 839 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 839 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 862 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 862 VAL: expression value. Type: int. Range: 0\...127\.; +#X msg 110 887 hold; +#X text 245 887 send CC Hold pedal message. Arguments are:; +#X obj 255 910 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 910 [CHAN]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 933 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 933 BOOL: on/off value. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 971 mod.; -#X text 245 971 send fine CC Modulation message. Arguments are:; -#X obj 255 994 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 994 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1017 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1017 VAL: modulation value. Type: int. Range: 0\...127\.; -#X msg 110 1042 mod:f; -#X text 245 1042 send CC normalized Modulation message. Arguments are:; -#X obj 255 1065 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1065 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1088 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1088 VAL: modulation value. Type: float. Range: 0\...1\.; -#X msg 110 1113 mod:i; -#X text 245 1113 send 14-bit CC Modulation message. Arguments are:; -#X obj 255 1136 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1136 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1159 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1159 VAL: modulation. Type: int. Range: 0\...16384\.; -#X msg 110 1184 mod~; -#X text 245 1184 send coarse CC Modulation message. Arguments are:; -#X obj 255 1207 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1207 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1230 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1230 VAL: modulation value. Type: int. Range: 0\...127\.; -#X msg 110 1255 notes_off; -#X text 245 1255 send All Notes Off message. Arguments are:; -#X obj 255 1278 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1278 CH: midi channel. if missing or -1: send to all channels. +#X msg 110 958 mod.; +#X text 245 958 send fine CC Modulation message. Arguments are:; +#X obj 255 981 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 981 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1004 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1004 VAL: modulation value. Type: int. Range: 0\...127\.; +#X msg 110 1029 mod:f; +#X text 245 1029 send CC normalized Modulation message. Arguments are:; +#X obj 255 1052 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1052 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1075 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1075 VAL: modulation value. Type: float. Range: 0\...1\.; +#X msg 110 1100 mod:i; +#X text 245 1100 send 14-bit CC Modulation message. Arguments are:; +#X obj 255 1123 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1123 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1146 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1146 VAL: modulation. Type: int. Range: 0\...16384\.; +#X msg 110 1171 mod~; +#X text 245 1171 send coarse CC Modulation message. Arguments are:; +#X obj 255 1194 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1194 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1217 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1217 VAL: modulation value. Type: int. Range: 0\...127\.; +#X msg 110 1242 notes_off; +#X text 245 1242 send All Notes Off message. Arguments are:; +#X obj 255 1265 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1265 CH: midi channel. if missing or -1: send to all channels. Type: int. Range: 0\...15\.; -#X msg 110 1318 pan.; -#X text 245 1318 send Pan CC fine message. Arguments are:; -#X obj 255 1341 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1341 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1364 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1364 PAN: pan value. Type: int. Range: 0\...127\.; -#X msg 110 1389 pan:f; -#X text 245 1389 send CC Pan messages (coarse and fine). Arguments +#X msg 110 1305 pan.; +#X text 245 1305 send Pan CC fine message. Arguments are:; +#X obj 255 1328 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1328 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1351 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1351 PAN: pan value. Type: int. Range: 0\...127\.; +#X msg 110 1376 pan:f; +#X text 245 1376 send CC Pan messages (coarse and fine). Arguments are:; -#X obj 255 1412 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1412 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1435 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1435 PAN: pan value. -1 means left \, 0: center \, +1: +#X obj 255 1399 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1399 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1422 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1422 PAN: pan value. -1 means left \, 0: center \, +1: right. Type: float. Range: -1\...1\.; -#X msg 110 1475 pan:i; -#X text 245 1475 send Pan CC message. Args: CHAN PAN(0\..0x3fff) or +#X msg 110 1462 pan:i; +#X text 245 1462 send Pan CC message. Args: CHAN PAN(0\..0x3fff) or CHAN MSB(0\..127) LSB(0\..127). In case of 14 bit value 0 means left \, 0x2000: center and 0x3fff: right.; -#X msg 110 1530 pan~; -#X text 245 1530 send Pan CC coarse message. Arguments are:; -#X obj 255 1553 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1553 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1576 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1576 PAN: pan value. Type: int. Range: 0\...127\.; -#X msg 110 1601 portamento; -#X text 245 1601 send CC portamento switch message. Arguments are:; -#X obj 255 1624 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1624 [CHAN]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1647 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1647 BOOL: on/off value. Type: int. Allowed values: 0 \, +#X msg 110 1517 pan~; +#X text 245 1517 send Pan CC coarse message. Arguments are:; +#X obj 255 1540 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1540 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1563 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1563 PAN: pan value. Type: int. Range: 0\...127\.; +#X msg 110 1588 portamento; +#X text 245 1588 send CC portamento switch message. Arguments are:; +#X obj 255 1611 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1611 [CHAN]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1634 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1634 BOOL: on/off value. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1672 sostenuto; -#X text 245 1672 send CC sostenuto pedal message. Arguments are:; -#X obj 255 1695 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1695 [CHAN]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1718 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1718 BOOL: on/off value. Type: int. Allowed values: 0 \, +#X msg 110 1659 sostenuto; +#X text 245 1659 send CC sostenuto pedal message. Arguments are:; +#X obj 255 1682 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1682 [CHAN]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1705 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1705 BOOL: on/off value. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1743 sounds_off; -#X text 245 1743 send All Sounds Off message. Arguments are:; -#X obj 255 1766 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1766 [CH]: midi channel. if missing or -1: send to all +#X msg 110 1730 sounds_off; +#X text 245 1730 send All Sounds Off message. Arguments are:; +#X obj 255 1753 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1753 [CH]: midi channel. if missing or -1: send to all channels. Type: int. Range: 0\...15\.; -#X msg 110 1806 tune.; -#X text 245 1806 send RPN fine tuning request (in cents). Arguments +#X msg 110 1793 tune.; +#X text 245 1793 send RPN fine tuning request (in cents). Arguments are:; -#X obj 255 1829 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1829 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1852 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1852 CENTS: tuning in cents. Type: float. Range: -100\...100\.; -#X msg 110 1877 tune:c; -#X text 245 1877 send RPN fine tuning request (in cents). Arguments +#X obj 255 1816 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1816 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1839 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1839 CENTS: tuning in cents. Type: float. Range: -100\...100\.; +#X msg 110 1864 tune:c; +#X text 245 1864 send RPN fine tuning request (in cents). Arguments are:; -#X obj 255 1900 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1900 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1923 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1923 CENTS: tuning in cents. Type: float. Range: -100\...100\.; -#X msg 110 1948 tune:s; -#X text 245 1948 send RPN tuning request in semitones. Arguments are:; -#X obj 255 1971 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1971 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 1994 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1994 SEMI: tuning in semitones. Type: float. Range: -64\...63\.; -#X msg 110 2019 tunebank; -#X text 245 2019 send RPN tune bank select. Arguments are:; -#X obj 255 2042 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2042 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2065 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2065 BANK: tuning bank. Type: int. Range: 0\...127\.; -#X msg 110 2090 tuneprog; -#X text 245 2090 send RPN tune prog change. Arguments are:; -#X obj 255 2113 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2113 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2136 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2136 PROG: tuning program. Type: int. Range: 0\...127\.; -#X msg 110 2161 tunesel; -#X text 245 2161 send RPN tune select. Arguments are:; -#X obj 255 2184 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2184 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2207 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2207 BANK: tuning bank. Type: int. Range: 0\...127\.; -#X obj 255 2230 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2230 PROG: tuning program. Type: int. Range: 0\...127\.; -#X msg 110 2255 tune~; -#X text 245 2255 send RPN coarse tuning request (in semitones). Arguments +#X obj 255 1887 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1887 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1910 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1910 CENTS: tuning in cents. Type: float. Range: -100\...100\.; +#X msg 110 1935 tune:s; +#X text 245 1935 send RPN tuning request in semitones. Arguments are:; +#X obj 255 1958 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1958 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 1981 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1981 SEMI: tuning in semitones. Type: float. Range: -64\...63\.; +#X msg 110 2006 tunebank; +#X text 245 2006 send RPN tune bank select. Arguments are:; +#X obj 255 2029 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2029 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2052 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2052 BANK: tuning bank. Type: int. Range: 0\...127\.; +#X msg 110 2077 tuneprog; +#X text 245 2077 send RPN tune prog change. Arguments are:; +#X obj 255 2100 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2100 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2123 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2123 PROG: tuning program. Type: int. Range: 0\...127\.; +#X msg 110 2148 tunesel; +#X text 245 2148 send RPN tune select. Arguments are:; +#X obj 255 2171 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2171 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2194 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2194 BANK: tuning bank. Type: int. Range: 0\...127\.; +#X obj 255 2217 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2217 PROG: tuning program. Type: int. Range: 0\...127\.; +#X msg 110 2242 tune~; +#X text 245 2242 send RPN coarse tuning request (in semitones). Arguments are:; -#X obj 255 2278 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2278 [CH]: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2301 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2301 SEMI: tuning in semitones. Type: int. Range: -64\...63\.; -#X msg 110 2326 volume.; -#X text 245 2326 send fine CC Volume message. Arguments are:; -#X obj 255 2349 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2349 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2372 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2372 VOL: pan value. Type: int. Range: 0\...127\.; -#X msg 110 2397 volume:f; -#X text 245 2397 send CC normalized Volume message. Arguments are:; -#X obj 255 2420 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2420 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2443 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2443 VOL: volume value. Type: float. Range: 0\...1\.; -#X msg 110 2468 volume:i; -#X text 245 2468 send 14-bit CC Volume message. Arguments are:; -#X obj 255 2491 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2491 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2514 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2514 VOL: value. Type: int. Range: 0\...16384\.; -#X msg 110 2539 volume~; -#X text 245 2539 send coarse CC Volume message. Arguments are:; -#X obj 255 2562 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2562 CHAN: midi channel. Type: int. Range: 0\...15\.; -#X obj 255 2585 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2585 VOL: pan value. Type: int. Range: 0\...127\.; -#X obj 20 2620 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2625 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2265 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2265 [CH]: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2288 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2288 SEMI: tuning in semitones. Type: int. Range: -64\...63\.; +#X msg 110 2313 volume.; +#X text 245 2313 send fine CC Volume message. Arguments are:; +#X obj 255 2336 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2336 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2359 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2359 VOL: pan value. Type: int. Range: 0\...127\.; +#X msg 110 2384 volume:f; +#X text 245 2384 send CC normalized Volume message. Arguments are:; +#X obj 255 2407 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2407 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2430 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2430 VOL: volume value. Type: float. Range: 0\...1\.; +#X msg 110 2455 volume:i; +#X text 245 2455 send 14-bit CC Volume message. Arguments are:; +#X obj 255 2478 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2478 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2501 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2501 VOL: value. Type: int. Range: 0\...16384\.; +#X msg 110 2526 volume~; +#X text 245 2526 send coarse CC Volume message. Arguments are:; +#X obj 255 2549 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2549 CHAN: midi channel. Type: int. Range: 0\...15\.; +#X obj 255 2572 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2572 VOL: pan value. Type: int. Range: 0\...127\.; +#X obj 20 2607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2612 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2626 1\.; -#X text 150 2626 *float*; -#X text 245 2626 raw midi input bytes.; -#X text 150 2646 *list*; -#X text 245 2646 raw midi input bytes.; -#X obj 20 2676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2681 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2613 1\.; +#X text 150 2613 *float*; +#X text 245 2613 raw midi input bytes.; +#X text 150 2633 *list*; +#X text 245 2633 raw midi input bytes.; +#X obj 20 2663 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2668 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2682 1\.; -#X text 245 2682 float: raw midi output or parsed messages with selector +#X text 110 2669 1\.; +#X text 245 2669 float: raw midi output or parsed messages with selector (output format is the same as for corresponding methods).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; -#X obj 1 2747 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2750 library: ceammc v0.9.4; -#N canvas 10 2769 400 290 info 0; +#X obj 1 2734 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2737 library: ceammc v0.9.6; +#N canvas 10 2756 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.midi.cc; #X text 10 76 category:; @@ -259,4 +259,4 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2769 pd info; \ No newline at end of file +#X restore 10 2756 pd info; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.midi.cc.pddoc b/ceammc/ext/doc/proto.midi.cc.pddoc index acb70f25f5..1e6c87ce39 100644 --- a/ceammc/ext/doc/proto.midi.cc.pddoc +++ b/ceammc/ext/doc/proto.midi.cc.pddoc @@ -119,8 +119,8 @@ send All Sounds Off message midi channel. if missing or -1: send to all channels - - send Pitch bend sensivity message + + send Pitch bend sensitivity message midi channel send RPN tuning request in semitones @@ -188,7 +188,8 @@ LSB - output as list + output as + list diff --git a/ceammc/ext/doc/proto.midi.sysex-help.pd b/ceammc/ext/doc/proto.midi.sysex-help.pd index ee3214f27d..45d94b41c9 100644 --- a/ceammc/ext/doc/proto.midi.sysex-help.pd +++ b/ceammc/ext/doc/proto.midi.sysex-help.pd @@ -54,13 +54,13 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; #X obj 1 686 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 689 library: ceammc v0.9.4; +#X text 10 689 library: ceammc v0.9.6; #N canvas 10 708 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.midi.sysex; #X text 10 76 category:; diff --git a/ceammc/ext/doc/proto.moppy-help.pd b/ceammc/ext/doc/proto.moppy-help.pd new file mode 100644 index 0000000000..456cc65c94 --- /dev/null +++ b/ceammc/ext/doc/proto.moppy-help.pd @@ -0,0 +1,130 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 468 50 cnv 1 297 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 468 50 protocol for Musical flOPPY controller; +#X obj 1 1 cnv 5 765 40 empty empty proto.moppy 20 20 0 20 -104026 +-4096 0; +#X obj 660 11 proto.moppy; +#X obj 210 80 cnv 1 555 33 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 215 80 ui.link @background_color 0.98039 0.98039 0.98039 @title +https://github.com/Sammy1Am/Moppy2 @url +https://github.com/Sammy1Am/Moppy2; +#X obj 50 141 ui.keyboard 60 12; +#X msg 232 228 choose; +#X obj 50 257 msg note; +#X msg 155 257 reset; +#X obj 232 257 data.list 1 14 15 19; +#X msg 232 285 @v 1 \, period \$1; +#X obj 50 314 proto.moppy; +#X msg 232 314 dump; +#X obj 50 343 hw.arduino @rate 57600; +#X obj 20 392 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 397 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 432 @device; +#X text 245 432 Get/Set moppy device ID. Type: int. Default value: +1\. Range: 1\...255\.; +#X msg 110 474 @floppy; +#X text 245 474 Get/Set floppy ID on moppy device. Type: int. Default +value: 1\. Range: 1\...16\.; +#X msg 110 516 @v; +#X text 245 516 Get/Set MOPPY protocol version. Type: int. Default +value: 2\. Allowed values: 2 \, 1\.; +#X obj 20 568 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 573 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 608 bend:f; +#X text 245 608 note pitchbend. Arguments are:; +#X obj 255 631 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 631 VAL: pitch bend. Type: float. Range: -1\...1\.; +#X msg 110 656 freq; +#X text 245 656 set floppy frequency. Note: moppy.v1 version only. +Arguments are:; +#X obj 255 694 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 694 [CHAN]: optional floppy id (overrides @floppy property). +Type: int.; +#X obj 255 732 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 732 FREQ: freq. Type: float. Units: Hz.; +#X msg 110 757 note; +#X text 245 757 see noteon.; +#X msg 110 784 noteoff; +#X text 245 784 note off message. Arguments are:; +#X obj 255 807 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 807 [CHAN]: optional floppy id (overrides @floppy property). +Type: int.; +#X obj 255 845 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 845 NOTE: MIDI note. Type: int. Range: 24\...72\.; +#X msg 110 870 noteon; +#X text 245 870 play note. Arguments are:; +#X obj 255 893 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 893 [CHAN]: optional floppy id (overrides @floppy property). +Type: int.; +#X obj 255 931 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 931 NOTE: MIDI note. Type: int. Range: 24\...72\.; +#X obj 255 954 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 954 VEL: note velocity (if 0 - turns note off \, otherwise +ignored). Type: int. Range: 0\...127\.; +#X msg 110 994 period; +#X text 245 994 directly set floppy drive period. Note: moppy.v1 version +only. Arguments are:; +#X obj 255 1032 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1032 [CHAN]: optional floppy id (overrides @floppy property). +Type: int.; +#X obj 255 1070 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1070 TIME: period in microseconds. Type: int.; +#X msg 110 1095 ping; +#X text 245 1095 send ping request to all devices.; +#X msg 110 1122 reset; +#X text 245 1122 reset moppy device. Arguments are:; +#X obj 255 1145 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1145 [all]: reset all devices. Type: symbol.; +#X obj 20 1180 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1185 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1186 1\.; +#X text 245 1186 commands.; +#X obj 20 1216 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1221 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1222 1\.; +#X text 245 1222 list: output to moppy.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 1272 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1275 library: ceammc v0.9.6; +#N canvas 10 1294 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 proto.moppy; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 floppy \, diy \, serial; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1294 pd info; +#X connect 6 0 8 0; +#X connect 7 0 10 0; +#X connect 10 0 11 0; +#X connect 8 0 12 0; +#X connect 9 0 12 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 11 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.moppy.pddoc b/ceammc/ext/doc/proto.moppy.pddoc new file mode 100644 index 0000000000..035e6c0ea1 --- /dev/null +++ b/ceammc/ext/doc/proto.moppy.pddoc @@ -0,0 +1,86 @@ + + + + proto.moppy + + + Serge Poltavsky + + protocol for Musical flOPPY controller + GPL3 or later + ceammc + proto + floppy diy serial + 0.9.5 + + + https://github.com/Sammy1Am/Moppy2 + + + MOPPY protocol version + moppy + device ID + floppy ID on + moppy device + + + send ping request to all devices + see noteon + play note + optional floppy id (overrides @floppy + property) + MIDI + note + note velocity + (if 0 - turns note off, otherwise ignored) + note off message + optional floppy id (overrides @floppy + property) + MIDI + note + reset moppy device. + reset all devices + note pitchbend + pitch + bend + set floppy frequency. Note: moppy.v1 version only. + optional floppy id (overrides @floppy + property) + freq + directly set floppy drive period. Note: moppy.v1 version only. + optional floppy id (overrides @floppy + property) + period in microseconds + + + + commands + + + + list: output to moppy + + + +x] +]]> + + + + diff --git a/ceammc/ext/doc/proto.mpv-help.pd b/ceammc/ext/doc/proto.mpv-help.pd index ec2bb2aa1f..079358dd0d 100644 --- a/ceammc/ext/doc/proto.mpv-help.pd +++ b/ceammc/ext/doc/proto.mpv-help.pd @@ -122,13 +122,13 @@ int. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; #X obj 1 1581 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1584 library: ceammc v0.9.4; +#X text 10 1584 library: ceammc v0.9.6; #N canvas 10 1603 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.mpv; #X text 10 76 category:; diff --git a/ceammc/ext/doc/proto.sp.alpaca-help.pd b/ceammc/ext/doc/proto.sp.alpaca-help.pd index 695ad09646..33794b63d5 100644 --- a/ceammc/ext/doc/proto.sp.alpaca-help.pd +++ b/ceammc/ext/doc/proto.sp.alpaca-help.pd @@ -119,13 +119,13 @@ N].; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; #X obj 1 1439 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1442 library: ceammc v0.9.4; +#X text 10 1442 library: ceammc v0.9.6; #N canvas 10 1461 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.sp.alpaca; #X text 10 76 category:; @@ -133,7 +133,7 @@ N].; #X text 10 98 since:; #X text 120 98 0.8; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/proto.sp.alpaca.pddoc b/ceammc/ext/doc/proto.sp.alpaca.pddoc index 4493320ee8..5733641a17 100644 --- a/ceammc/ext/doc/proto.sp.alpaca.pddoc +++ b/ceammc/ext/doc/proto.sp.alpaca.pddoc @@ -4,7 +4,7 @@ proto.sp.alpaca - Serge Poltavski + Serge Poltavsky protocol parser for Arduino-based CEAMMC footswitch GPL3 or later diff --git a/ceammc/ext/doc/proto.vlc-help.pd b/ceammc/ext/doc/proto.vlc-help.pd new file mode 100644 index 0000000000..e817da7655 --- /dev/null +++ b/ceammc/ext/doc/proto.vlc-help.pd @@ -0,0 +1,158 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 498 50 cnv 1 267 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 498 50 VLC video player control over HTTP; +#X obj 1 1 cnv 5 765 40 empty empty proto.vlc 20 20 0 20 -104026 -4096 +0; +#X obj 675 11 proto.vlc; +#X obj 210 80 cnv 1 555 58 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 VLC video player control; +#X obj 215 105 ui.link @background_color 0.98039 0.98039 0.98039 +@title videolan.org @url https://www.videolan.org/vlc; +#X msg 50 166 play; +#X msg 174 166 playlist; +#X msg 328 166 next; +#X msg 424 166 prev; +#X msg 50 195 stop; +#X obj 174 195 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 328 195 browse file://; +#X obj 59 224 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 174 224 openpanel; +#X symbolatom 328 224 10 0 0 0 - - -; +#X msg 50 253 pause; +#X msg 126 253 fs; +#X msg 174 253 add file://\$1; +#X msg 328 253 seek \$1; +#X obj 50 282 proto.vlc localhost @pass 12345; +#X obj 50 310 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 270 310 print; +#X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 364 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 399 1\.; +#X text 150 399 symbol; +#X obj 246 400 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 399 HOST: hostname on that VLC player is running on. Type: +symbol.; +#X obj 20 444 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 449 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 484 @host; +#X text 245 484 Get/Set hostname on that VLC player is running on. +Type: symbol. Default value: localhost.; +#X msg 110 526 @pass; +#X text 245 526 Get/Set VLC http password. Type: atom.; +#X msg 110 555 @port; +#X text 245 555 Get/Set hostname on that VLC player is running on. +Type: int. Default value: 8080\. Range: 1\...32768\.; +#X obj 20 607 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 612 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 647 add; +#X text 245 647 add URI to playlist. Arguments are:; +#X obj 255 670 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 670 URI: resource URI (file:// or http:// or camera://). +Type: symbol.; +#X msg 110 710 browse; +#X text 245 710 browse resource. Arguments are:; +#X obj 255 733 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 733 URI: resource URI (file:///path). Type: symbol.; +#X msg 110 758 clear; +#X text 245 758 clear playlist.; +#X msg 110 785 delete; +#X text 245 785 delete item from playlist. Arguments are:; +#X obj 255 808 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 808 [ID]: playlist entry id. Type: int.; +#X msg 110 833 fs; +#X text 245 833 toggle VLC fullscreen mode.; +#X msg 110 860 loop; +#X text 245 860 toggle loop.; +#X msg 110 887 next; +#X text 245 887 go to the next entry on the playlist.; +#X msg 110 914 pause; +#X text 245 914 pause/resume playback. Arguments are:; +#X obj 255 937 cnv 1 39 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 937 [VAL]: 1 or omitted: pause \, 0: resume. Type: int. +Allowed values: 0 \, 1\.; +#X msg 110 977 play; +#X text 245 977 start playback.; +#X msg 110 1004 playlist; +#X text 245 1004 request playlist. Output as dict to second outlet.; +#X msg 110 1031 prev; +#X text 245 1031 go to the previous entry on the playlist.; +#X msg 110 1058 seek; +#X text 245 1058 seek playback position. Arguments are:; +#X obj 255 1081 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1081 TIME: absolute time position (int value in seconds +or 00h:00m:00s) or relative offset (+val \, -val). Type: atom.; +#X msg 110 1121 status; +#X text 245 1121 request playback status. Output as dict to second +outlet.; +#X msg 110 1148 stop; +#X text 245 1148 stop playback.; +#X msg 110 1175 volume; +#X text 245 1175 set playing volume. Arguments are:; +#X obj 255 1198 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1198 VAL: absolute value in percent or relative change ++VOL or -VOL. Type: atom.; +#X obj 20 1248 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1253 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1254 1\.; +#X text 245 1254 commands.; +#X obj 20 1284 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1289 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1290 1\.; +#X text 245 1290 int: 1 on success \, 0 on error.; +#X text 110 1310 2\.; +#X text 245 1310 dict: response data.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 1360 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1363 library: ceammc v0.9.6; +#N canvas 10 1382 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 proto.vlc; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 mpv \, mplayer; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1382 pd info; +#X connect 12 0 15 0; +#X connect 14 0 17 0; +#X connect 15 0 19 0; +#X connect 16 0 20 0; +#X connect 17 0 21 0; +#X connect 18 0 21 0; +#X connect 19 0 21 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 21 1 23 0; +#X connect 7 0 21 0; +#X connect 11 0 21 0; +#X connect 8 0 21 0; +#X connect 9 0 21 0; +#X connect 10 0 21 0; +#X connect 13 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.vlc.pddoc b/ceammc/ext/doc/proto.vlc.pddoc new file mode 100644 index 0000000000..4eb716e826 --- /dev/null +++ b/ceammc/ext/doc/proto.vlc.pddoc @@ -0,0 +1,91 @@ + + + + proto.vlc + + + Serge Poltavsky + + VLC video player control over HTTP + GPL3 or later + ceammc + proto + mpv mplayer + 0.9.5 + + + VLC video player control + videolan.org + + + hostname on that VLC player is running + on + + + hostname on that VLC player is + running on + hostname + on that VLC player is running on + VLC http password + + + delete item from playlist + playlist entry id + toggle VLC fullscreen mode + clear playlist + set playing volume + absolute value in percent or relative + change +VOL or -VOL + toggle loop + go to the next entry on the playlist + go to the previous entry on the playlist + seek playback position + absolute time position (int value in + seconds or 00h:00m:00s) or relative offset (+val, -val) + start playback + stop playback + pause/resume playback + 1 or omitted: pause, 0: resume + add URI to playlist + resource URI (file:// or http:// or + camera://) + request playback status. Output as dict to second outlet + request playlist. Output as dict to second outlet + browse resource + resource URI + (file:///path) + + + + commands + + + + int: 1 on success, 0 on error + dict: response data + + + +z] +[X b->z] +[X c->z] +[X d->z] +[X e->z] +[X f->z] +]]> + + + + diff --git a/ceammc/ext/doc/proto.whammy-help.pd b/ceammc/ext/doc/proto.whammy-help.pd new file mode 100644 index 0000000000..a92e970518 --- /dev/null +++ b/ceammc/ext/doc/proto.whammy-help.pd @@ -0,0 +1,146 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 506 50 cnv 1 259 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 506 50 Control for Digitech Whammy pedal; +#X obj 1 1 cnv 5 765 40 empty empty proto.whammy 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 proto.whammy; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 232 118 ui.tab chords classic; +#X msg 88 147 random harm; +#X msg 232 147 @mode \$2; +#X obj 50 176 proto.whammy @chan 0 @mode classic; +#X obj 50 205 midiout; +#X obj 146 205 print; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 294 1\.; +#X text 150 294 symbol; +#X obj 246 295 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 MODE: pedal mode (should correspond to hardware switch +on pedal). Allowed values: chords \, classic. . Type: symbol.; +#X text 110 329 2\.; +#X text 150 329 bool; +#X obj 246 330 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 329 ACTIVE: pedal initial state. Type: bool.; +#X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 364 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 399 @active; +#X text 245 399 Get/Set pedal state. Type: bool. Default value: 1\.; +#X msg 110 428 @chan; +#X text 245 428 Get/Set output Midi channel. Type: int. Default value: +0\. Range: 0\...15\.; +#X msg 110 470 @chords; +#X text 245 470 alias for @mode chords.; +#X msg 110 499 @classic; +#X text 245 499 alias for @mode classic.; +#X msg 110 528 @mode; +#X text 245 528 Get/Set pedal mode (should correspond to hardware switch +on pedal). Type: symbol. Default value: classic. Allowed values: chords +\, classic.; +#X msg 110 585 @seed; +#X text 245 585 Get/Set random seed. Type: int. Default value: 0\. +Min value: 0\.; +#X obj 20 637 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 642 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 677 next; +#X text 245 677 select next preset. Arguments are:; +#X obj 255 700 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 700 [N]: positive step or 'random'. Type: atom.; +#X msg 110 725 prev; +#X text 245 725 select previous preset. Arguments are:; +#X obj 255 748 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 748 [N]: positive step or 'random'. Type: atom.; +#X msg 110 773 random; +#X text 245 773 choose random preset. Arguments are:; +#X obj 255 796 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 796 MODE: if 'whammy' - select random preset from 'whammy' +modes (right pedal side) \, if 'harm' - select random preset from harmonizer +modes (left pedal side) \, if 'detune' - select random detune mode. +If not specified - select random mode from all categories. Type: symbol. +Allowed values: whammy \, harm \, detune.; +#X obj 255 894 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 894 [STATE]: pedal state (on/off). Type: int. Allowed values: +0 \, 1\.; +#X msg 110 934 reset; +#X text 245 934 turn off pedal and select default preset.; +#X msg 110 961 set IDX; +#X text 245 961 set preset by index. Arguments are:; +#X obj 255 984 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 984 IDX: preset index. Type: int. Range: 0\...20\.; +#X obj 255 1007 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1007 [STATE]: pedal state (on/off). Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1047 set NAME; +#X text 245 1047 set preset by name. Arguments are:; +#X obj 255 1070 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1070 NAME: preset name. Type: symbol. Range: 0\...20\. +Allowed values: +2oct \, +1oct \, +5th \, +4th \, -2nd \, -4th \, -5th +\, -1oct \, -2oct \, bomb \, deep \, shallow \, +2+3 \, +3b+3 \, +3+4 +\, +4+5 \, +5+6 \, +5+7 \, -4-3 \, -5-4 \, -8+8\.; +#X obj 255 1138 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1138 [STATE]: pedal state (on/off). Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1178 set UP DOWN; +#X text 245 1178 set preset by transpose range. Arguments are:; +#X obj 255 1201 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1201 UP: up range. Type: int.; +#X obj 255 1224 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1224 DOWN: down range. Type: int.; +#X obj 255 1247 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1247 [STATE]: pedal state (on/off). Type: int. Allowed +values: 0 \, 1\.; +#X msg 110 1287 toggle; +#X text 245 1287 toggle pedal on/off.; +#X obj 20 1324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1329 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1330 1\.; +#X text 150 1330 *int*; +#X text 245 1330 1: turn on \, 0: turn off pedal.; +#X obj 20 1360 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1365 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1366 1\.; +#X text 245 1366 float stream: raw midi output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; +#X obj 1 1416 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1419 library: ceammc v0.9.6; +#N canvas 10 1438 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 proto.whammy; +#X text 10 76 category:; +#X text 120 76 proto; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 parser \, midi \, whammy; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1438 pd info; +#X connect 5 0 7 0; +#X connect 4 0 8 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/proto.whammy.pddoc b/ceammc/ext/doc/proto.whammy.pddoc new file mode 100644 index 0000000000..588e591d5b --- /dev/null +++ b/ceammc/ext/doc/proto.whammy.pddoc @@ -0,0 +1,80 @@ + + + + proto.whammy + + + Serge Poltavsky + + Control for Digitech Whammy pedal + GPL3 or later + ceammc + proto + parser midi whammy + 0.9.5 + + + toggle pedal on/off + choose random preset + if 'whammy' + - select random preset from 'whammy' modes (right pedal side), if 'harm' - select + random preset from harmonizer modes (left pedal side), if 'detune' - select random + detune mode. If not specified - select random mode from all categories. + pedal state (on/off) + turn off pedal and select default preset + set preset by index + preset + index + pedal state (on/off) + set preset by name + preset name + pedal state (on/off) + set preset by transpose range. + up range + down range + pedal state (on/off) + select next preset + positive step or 'random' + select previous preset + positive step or 'random' + + + pedal mode (should correspond + to hardware switch on pedal) + pedal initial state + + + pedal state + pedal mode + (should correspond to hardware switch on pedal) + output Midi + channel + random seed + alias for @mode chords + alias for @mode classic + + + + 1: turn on, 0: turn off pedal + + + + float stream: raw midi output + + + + + + + + diff --git a/ceammc/ext/doc/proto.xtouch_ext-help.pd b/ceammc/ext/doc/proto.xtouch_ext-help.pd index 26faea88b7..e20952dfa0 100644 --- a/ceammc/ext/doc/proto.xtouch_ext-help.pd +++ b/ceammc/ext/doc/proto.xtouch_ext-help.pd @@ -22,258 +22,269 @@ #X obj 155 287 s oxt; #X obj 366 287 s ixt; #X obj 20 336 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 341 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 341 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 376 @n; -#X text 245 376 (readonly) Get number of scenes. Type: int. Default +#X text 110 376 1\.; +#X text 150 376 symbol; +#X obj 246 377 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 376 PROTO: connection protocol. Allowed values: hui \, +mcu \, xmidi. . Type: symbol.; +#X obj 20 421 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 426 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 461 @n; +#X text 245 461 (initonly) Get/Set number of scenes. Type: int. Default value: 2\. Range: 1\...32\.; -#X msg 110 418 @scene; -#X text 245 418 (readonly) Get current scene. Type: int. Default value: -0\. Min value: 0\.; -#X obj 20 470 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 475 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 503 @proto; +#X text 245 503 Get/Set connection protocol. Type: symbol. Default +value: xmidi. Allowed values: hui \, mcu \, xmidi.; +#X msg 110 545 @scene; +#X text 245 545 Get/Set current scene. Type: int. Default value: 0\. +Min value: 0\.; +#X obj 20 597 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 602 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 510 fader; -#X text 245 510 set fader value. Arguments are:; -#X obj 255 533 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 533 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 637 fader; +#X text 245 637 set fader value. Arguments are:; +#X obj 255 660 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 660 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 571 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 571 X: fader value(s). Type: list.; -#X msg 110 596 fader?; -#X text 245 596 get fader value \, output to second outlet in format +#X obj 255 698 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 698 X: fader value(s). Type: list.; +#X msg 110 723 fader?; +#X text 245 723 get fader value \, output to second outlet in format [fader? IDX VALUE(. Arguments are:; -#X obj 255 634 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 634 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 761 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 761 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 674 knob; -#X text 245 674 set knob value. Arguments are:; -#X obj 255 697 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 697 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 801 knob; +#X text 245 801 set knob value. Arguments are:; +#X obj 255 824 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 824 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 735 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 735 X: fader value(s). Type: list.; -#X msg 110 760 knob?; -#X text 245 760 get knob value \, output to second outlet in format +#X obj 255 862 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 862 X: fader value(s). Type: list.; +#X msg 110 887 knob?; +#X text 245 887 get knob value \, output to second outlet in format [knob? IDX VALUE(. Arguments are:; -#X obj 255 798 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 798 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 925 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 925 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 838 lcd; -#X text 245 838 set LCD text. Arguments are:; -#X obj 255 861 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 861 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X msg 110 965 lcd; +#X text 245 965 set LCD text. Arguments are:; +#X obj 255 988 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 988 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 899 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 899 UPPER: upper display text. Type: atom.; -#X obj 255 922 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 922 LOWER: lower display text. Type: atom.; -#X msg 110 947 lcd0; -#X text 245 947 set upper LCD text. Arguments are:; -#X obj 255 970 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 970 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 1026 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1026 UPPER: upper display text. Type: atom.; +#X obj 255 1049 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1049 LOWER: lower display text. Type: atom.; +#X msg 110 1074 lcd0; +#X text 245 1074 set upper LCD text. Arguments are:; +#X obj 255 1097 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1097 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 1008 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1008 STR: upper display text. Type: list.; -#X msg 110 1033 lcd1; -#X text 245 1033 set lower LCD text. Arguments are:; -#X obj 255 1056 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1056 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 1135 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1135 STR: upper display text. Type: list.; +#X msg 110 1160 lcd1; +#X text 245 1160 set lower LCD text. Arguments are:; +#X obj 255 1183 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1183 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 1094 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1094 STR: lower display text. Type: list.; -#X msg 110 1119 lcd_align; -#X text 245 1119 set all texts alignment. Note: you should set this +#X obj 255 1221 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1221 STR: lower display text. Type: list.; +#X msg 110 1246 lcd_align; +#X text 245 1246 set all texts alignment. Note: you should set this before setting upper display text. Arguments are:; -#X obj 255 1157 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1157 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 1284 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1284 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 1195 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1195 ALIGN: align name. Valid names are: left \, right +#X obj 255 1322 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1322 ALIGN: align name. Valid names are: left \, right \, center \, justify and auto. Type: list.; -#X msg 110 1235 lcd_align0; -#X text 245 1235 set upper text alignment. Note: you should set this +#X msg 110 1362 lcd_align0; +#X text 245 1362 set upper text alignment. Note: you should set this before setting upper display text. Arguments are:; -#X obj 255 1273 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1273 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 1400 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1400 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 1311 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1311 ALIGN: align name. Valid names are: left \, right +#X obj 255 1438 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1438 ALIGN: align name. Valid names are: left \, right \, center \, justify and auto. Type: list.; -#X msg 110 1351 lcd_align1; -#X text 245 1351 set lower text alignment. Note: you should set this +#X msg 110 1478 lcd_align1; +#X text 245 1478 set lower text alignment. Note: you should set this before setting lower display text. Arguments are:; -#X obj 255 1389 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1389 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 1516 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1516 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 1427 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1427 ALIGN: align name. Valid names are: left \, right +#X obj 255 1554 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1554 ALIGN: align name. Valid names are: left \, right \, center \, justify and auto. Type: list.; -#X msg 110 1467 lcd_color; -#X text 245 1467 set display color. Arguments are:; -#X obj 255 1490 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1490 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 1594 lcd_color; +#X text 245 1594 set display color. Arguments are:; +#X obj 255 1617 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1617 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 1528 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1528 COLOR: list of color name or color indexes. Valid +#X obj 255 1655 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1655 COLOR: list of color name or color indexes. Valid color names are: black \, red \, green \, blue \, yellow \, magenta \, cyan \, white and random. Valid color indexes are in 0\..7 range. Type: list.; -#X msg 110 1598 lcd_enum0; -#X text 245 1598 set all upper display text with incremental enumeration. +#X msg 110 1725 lcd_enum0; +#X text 245 1725 set all upper display text with incremental enumeration. Arguments are:; -#X obj 255 1636 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1636 [PREFIX]: name prefix. Type: atom.; -#X msg 110 1661 lcd_enum1; -#X text 245 1661 set all lower display text with incremental enumeration. +#X obj 255 1763 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1763 [PREFIX]: name prefix. Type: atom.; +#X msg 110 1788 lcd_enum1; +#X text 245 1788 set all lower display text with incremental enumeration. Arguments are:; -#X obj 255 1699 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1699 [PREFIX]: name prefix. Type: atom.; -#X msg 110 1724 lcd_mode; -#X text 245 1724 set lcd background/highlight mode. Arguments are:; -#X obj 255 1747 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1747 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 1826 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1826 [PREFIX]: name prefix. Type: atom.; +#X msg 110 1851 lcd_mode; +#X text 245 1851 set lcd background/highlight mode. Arguments are:; +#X obj 255 1874 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1874 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 1785 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1785 MODE: mod values. 0: display is inverted \, 1: upper +#X obj 255 1912 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1912 MODE: mod values. 0: display is inverted \, 1: upper is inverted \, 2: lower is inverted \, 3: none in inverted. Type: list.; -#X msg 110 1840 llcd; -#X text 245 1840 set several lower LCD text. Arguments are:; -#X obj 255 1863 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1863 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X msg 110 1967 llcd; +#X text 245 1967 set several lower LCD text. Arguments are:; +#X obj 255 1990 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1990 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 1901 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1901 ATOMS: lower display texts \, each atom per display. +#X obj 255 2028 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2028 ATOMS: lower display texts \, each atom per display. Type: list.; -#X msg 110 1941 mute; -#X text 245 1941 set mute buttons. Arguments are:; -#X obj 255 1964 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1964 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 2068 mute; +#X text 245 2068 set mute buttons. Arguments are:; +#X obj 255 2091 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2091 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2002 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2002 X: button value(s). Type: list.; -#X msg 110 2027 mute?; -#X text 245 2027 get mute button \, output to second outlet in format +#X obj 255 2129 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2129 X: button value(s). Type: list.; +#X msg 110 2154 mute?; +#X text 245 2154 get mute button \, output to second outlet in format [mute? IDX VALUE(. Arguments are:; -#X obj 255 2065 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2065 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 2192 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2192 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 2105 mute_mode; -#X text 245 2105 set mute buttons toggle mode. Arguments are:; -#X obj 255 2128 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2128 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 2232 mute_mode; +#X text 245 2232 set mute buttons toggle mode. Arguments are:; +#X obj 255 2255 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2255 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2166 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2166 X: values list: -1 \, 0 or 1\. Type: list.; -#X msg 110 2191 rec; -#X text 245 2191 set rec buttons. Arguments are:; -#X obj 255 2214 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2214 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 2293 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2293 X: values list: -1 \, 0 or 1\. Type: list.; +#X msg 110 2318 rec; +#X text 245 2318 set rec buttons. Arguments are:; +#X obj 255 2341 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2341 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2252 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2252 X: button value(s). Type: list.; -#X msg 110 2277 rec?; -#X text 245 2277 get rec button \, output to second outlet in format +#X obj 255 2379 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2379 X: button value(s). Type: list.; +#X msg 110 2404 rec?; +#X text 245 2404 get rec button \, output to second outlet in format [rec? IDX VALUE(. Arguments are:; -#X obj 255 2315 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2315 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 2442 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2442 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 2355 rec_mode; -#X text 245 2355 set rec buttons toggle mode. Arguments are:; -#X obj 255 2378 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2378 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 2482 rec_mode; +#X text 245 2482 set rec buttons toggle mode. Arguments are:; +#X obj 255 2505 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2505 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2416 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2416 X: values list: -1 \, 0 or 1\. Type: list.; -#X msg 110 2441 reset; -#X text 245 2441 reset all knobs \, faders and buttons to 0 \, vu to +#X obj 255 2543 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2543 X: values list: -1 \, 0 or 1\. Type: list.; +#X msg 110 2568 reset; +#X text 245 2568 reset all knobs \, faders and buttons to 0 \, vu to lowest values. Do not change display texts.; -#X msg 110 2481 select; -#X text 245 2481 set select buttons. Arguments are:; -#X obj 255 2504 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2504 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 2608 select; +#X text 245 2608 set select buttons. Arguments are:; +#X obj 255 2631 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2631 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2542 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2542 X: button value(s). Type: list.; -#X msg 110 2567 select?; -#X text 245 2567 get select button \, output to second outlet in format +#X obj 255 2669 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2669 X: button value(s). Type: list.; +#X msg 110 2694 select?; +#X text 245 2694 get select button \, output to second outlet in format [select? IDX VALUE(. Arguments are:; -#X obj 255 2605 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2605 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 2732 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2732 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 2645 select_mode; -#X text 245 2645 set select buttons toggle mode. Arguments are:; -#X obj 255 2668 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2668 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 2772 select_mode; +#X text 245 2772 set select buttons toggle mode. Arguments are:; +#X obj 255 2795 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2795 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2706 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2706 X: values list: -1 \, 0 or 1\. Type: list.; -#X msg 110 2731 solo; -#X text 245 2731 set solo buttons. Arguments are:; -#X obj 255 2754 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2754 CHAN: 'all' \, 'scene' or channel index \, max value +#X obj 255 2833 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2833 X: values list: -1 \, 0 or 1\. Type: list.; +#X msg 110 2858 solo; +#X text 245 2858 set solo buttons. Arguments are:; +#X obj 255 2881 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2881 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2792 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2792 X: button value(s). Type: list.; -#X msg 110 2817 solo?; -#X text 245 2817 get solo button \, output to second outlet in format +#X obj 255 2919 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2919 X: button value(s). Type: list.; +#X msg 110 2944 solo?; +#X text 245 2944 get solo button \, output to second outlet in format [solo? IDX VALUE(. Arguments are:; -#X obj 255 2855 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2855 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 2982 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2982 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X msg 110 2895 solo_mode; -#X text 245 2895 set solo buttons toggle mode. Arguments are:; -#X obj 255 2918 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2918 CHAN: 'all' \, 'scene' or channel index \, max value +#X msg 110 3022 solo_mode; +#X text 245 3022 set solo buttons toggle mode. Arguments are:; +#X obj 255 3045 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3045 CHAN: 'all' \, 'scene' or channel index \, max value is NUM_SCENES * 8\. Type: atom.; -#X obj 255 2956 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2956 X: values list: -1 \, 0 or 1\. Type: list.; -#X msg 110 2981 ulcd; -#X text 245 2981 set several upper LCD text. Arguments are:; -#X obj 255 3004 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3004 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X obj 255 3083 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3083 X: values list: -1 \, 0 or 1\. Type: list.; +#X msg 110 3108 ulcd; +#X text 245 3108 set several upper LCD text. Arguments are:; +#X obj 255 3131 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3131 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 3042 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3042 ATOMS: upper display texts \, each atom per display. +#X obj 255 3169 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3169 ATOMS: upper display texts \, each atom per display. Type: list.; -#X msg 110 3082 vu; -#X text 245 3082 set VU meter indicator. Arguments are:; -#X obj 255 3105 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3105 CHAN: channel index \, max value is NUM_SCENES * 8\. +#X msg 110 3209 vu; +#X text 245 3209 set VU meter indicator. Arguments are:; +#X obj 255 3232 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3232 CHAN: channel index \, max value is NUM_SCENES * 8\. Type: int. Min value: 0\.; -#X obj 255 3143 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3143 DB: level in decibels \, in -144\..0 range. Type: +#X obj 255 3270 cnv 1 21 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3270 DB: level in decibels \, in -144\..0 range. Type: float.; -#X obj 20 3178 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3183 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 3305 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3310 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3184 1\.; -#X text 150 3184 *float*; -#X text 245 3184 raw midi input.; -#X text 150 3204 *any*; -#X text 245 3204 recIDX VAL: set rec button \, muteIDX VAL: set mute +#X text 110 3311 1\.; +#X text 150 3311 *float*; +#X text 245 3311 raw midi input.; +#X text 150 3331 *any*; +#X text 245 3331 recIDX VAL: set rec button \, muteIDX VAL: set mute button \, soloIDX VAL: set solo button \, selectIDX VAL: set select button \, knobIDX VAL: set knob value \, faderIDX VAL: set fader value.; -#X obj 20 3279 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3284 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 3406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3411 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3285 1\.; -#X text 245 3285 raw midi output to behringer device.; -#X text 110 3305 2\.; -#X text 245 3305 control messages from device.; +#X text 110 3412 1\.; +#X text 245 3412 raw midi output to behringer device.; +#X text 110 3432 2\.; +#X text 245 3432 control messages from device.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title proto @url ceammc.proto-help.pd; -#X obj 1 3355 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3358 library: ceammc v0.9.4; -#N canvas 10 3377 400 290 info 0; +#X obj 1 3482 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 3485 library: ceammc v0.9.6; +#N canvas 10 3504 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 proto.xtouch_ext; #X text 10 76 category:; @@ -292,7 +303,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 3377 pd info; +#X restore 10 3504 pd info; #X connect 8 0 9 0; #X connect 7 0 11 0; #X connect 9 0 12 0; diff --git a/ceammc/ext/doc/proto.xtouch_ext.pddoc b/ceammc/ext/doc/proto.xtouch_ext.pddoc index 3048c402ff..65d905f938 100644 --- a/ceammc/ext/doc/proto.xtouch_ext.pddoc +++ b/ceammc/ext/doc/proto.xtouch_ext.pddoc @@ -155,11 +155,16 @@ reset all knobs, faders and buttons to 0, vu to lowest values. Do not change display texts + + connection + protocol + - - number of scenes - current - scene + number of scenes + current scene + connection + protocol diff --git a/ceammc/ext/doc/radio-help.pd b/ceammc/ext/doc/radio-help.pd index 8edbf47035..655b674da0 100644 --- a/ceammc/ext/doc/radio-help.pd +++ b/ceammc/ext/doc/radio-help.pd @@ -23,8 +23,8 @@ #X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 391 @n; -#X text 245 391 Get/Set number of outlets. Type: int. Default value: -2\. Range: 2\...24\.; +#X text 245 391 (initonly) Get/Set number of outlets. Type: int. Default +value: 2\. Range: 2\...24\.; #X obj 20 443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 448 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -49,7 +49,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 632 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 635 library: ceammc v0.9.4; +#X text 10 635 library: ceammc v0.9.6; #X text 551 647 see also:; #X obj 625 647 hradio 15 1 0 8 empty empty empty 17 7 0 10 -262144 -1 -1 0; @@ -58,7 +58,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 radio; #X text 10 76 category:; diff --git a/ceammc/ext/doc/radio.pddoc b/ceammc/ext/doc/radio.pddoc index 9fd1d7e789..37c3936a34 100644 --- a/ceammc/ext/doc/radio.pddoc +++ b/ceammc/ext/doc/radio.pddoc @@ -23,8 +23,8 @@ number of outlets - number of - outlets + number of outlets output zeroes to all outlets diff --git a/ceammc/ext/doc/random.atom-help.pd b/ceammc/ext/doc/random.atom-help.pd index 58f6b248c6..b8ce5ff0f7 100644 --- a/ceammc/ext/doc/random.atom-help.pd +++ b/ceammc/ext/doc/random.atom-help.pd @@ -6,67 +6,80 @@ -4096 0; #X obj 579 11 random.a; #X obj 661 11 random.atom; -#X obj 210 80 cnv 1 555 105 empty empty empty 17 7 0 10 -257983 -1 0; +#X obj 210 80 cnv 1 555 185 empty empty empty 17 7 0 10 -257983 -1 0; #X text 215 80 Choose random atom from specified list (with weights) -and output it; -#X text 215 120 Use @seed property to get reproducible sequences. If +and output it.; +#X text 215 120 If no weights specified \, choose elements with random +uniform distribution.; +#X text 215 160 Use @seed property to get reproducible sequences. If @seed property was not explicitly set or specified \, uses generator initialized with current time.; -#X obj 50 213 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 50 242 metro 110; -#X obj 50 271 random.atom C5 D5 C6 Eb4 @w 2 1 6 3; -#X obj 50 300 pitch->midi; -#X obj 50 329 mtof; -#X obj 50 357 osc~; -#X obj 117 357 b; -#X obj 50 386 env.ar~ 10 70; -#X obj 50 415 ui.hgain~; -#X obj 203 415 ui.dsp~; -#X obj 50 444 dac~; -#X obj 20 493 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 498 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 215 215 Note: when @nonrep property is set \, distribution +is not uniform or weighted.; +#X obj 50 293 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 184 293 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 50 322 metro 110; +#X msg 184 322 @nonrep \$1; +#X obj 50 351 random.atom C5 D5 C6 Eb4 @w 2 1 6 3; +#X obj 50 380 pitch->midi; +#X obj 50 409 mtof; +#X obj 50 437 osc~; +#X obj 117 437 b; +#X obj 50 466 env.ar~ 10 70; +#X obj 50 495 ui.hgain~; +#X obj 203 495 ui.dsp~; +#X obj 50 524 dac~; +#X obj 20 573 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 578 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 533 1\.; -#X text 150 533 list; -#X obj 246 534 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 533 ARG: list of atoms. Type: list.; -#X obj 20 563 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 568 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 613 1\.; +#X text 150 613 list; +#X obj 246 614 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 613 VALUE: list of atoms. Type: list.; +#X obj 20 643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 648 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 603 @a; -#X text 245 603 Get/Set list of atoms. Type: list.; -#X msg 110 632 @seed; -#X text 245 632 Get/Set generator seed. Type: int. Default value: 0\. +#X msg 110 683 @nonrep; +#X text 245 683 Get/Set generate non-repeated adjacent values (note: +distribution will changed!). Type: bool. Default value: 0\.; +#X msg 110 725 @seed; +#X text 245 725 Get/Set generator seed. Type: int. Default value: 0\. Min value: 0\.; -#X msg 110 674 @w; -#X text 245 674 Get/Set list of atom weights. Type: list.; -#X obj 20 713 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 718 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 767 @value; +#X text 245 767 Get/Set list of atoms. Type: list.; +#X msg 110 796 @w; +#X text 245 796 Get/Set list of atom weights. Type: list.; +#X obj 20 835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 840 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 719 1\.; -#X text 150 719 *bang*; -#X text 245 719 output random atom.; -#X obj 20 749 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 754 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 841 1\.; +#X text 150 841 *bang*; +#X text 245 841 output random atom.; +#X text 110 861 2\.; +#X text 150 861 *list*; +#X text 245 861 set list of elements to choose from. Note: clear all +weights.; +#X obj 20 891 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 896 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 755 1\.; -#X text 245 755 random atom value.; +#X text 110 897 1\.; +#X text 245 897 random atom value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; -#X obj 1 805 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 808 library: ceammc v0.9.4; -#X text 481 820 see also:; -#X obj 555 820 random.float; -#X obj 655 820 random.gauss; -#N canvas 10 827 400 290 info 0; +#X obj 1 947 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 950 library: ceammc v0.9.6; +#X text 481 962 see also:; +#X obj 555 962 random.float; +#X obj 655 962 random.gauss; +#N canvas 10 969 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.atom; #X text 10 76 category:; @@ -85,15 +98,17 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 827 pd info; -#X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 11 0 14 0; -#X connect 13 0 15 0; +#X restore 10 969 pd info; +#X connect 10 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; #X connect 14 0 15 0; #X connect 15 0 16 0; -#X connect 16 0 18 0; -#X connect 16 0 18 1; \ No newline at end of file +#X connect 16 0 17 0; +#X connect 15 0 18 0; +#X connect 17 0 19 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 20 0 22 0; +#X connect 20 0 22 1; \ No newline at end of file diff --git a/ceammc/ext/doc/random.atom.pddoc b/ceammc/ext/doc/random.atom.pddoc index ec172bf558..2421e363fe 100644 --- a/ceammc/ext/doc/random.atom.pddoc +++ b/ceammc/ext/doc/random.atom.pddoc @@ -21,22 +21,30 @@ - Choose random atom from specified list (with weights) and output it + Choose random atom from specified list (with weights) and output it. + If no weights specified, choose elements with random uniform distribution. Use @seed property to get reproducible sequences. If @seed property was not explicitly set or specified, uses generator initialized with current time. + Note: when @nonrep property is set, distribution is not uniform or weighted. - list of atoms + list of atoms - list of atoms - list of atom weights + list of atoms + list of atom weights generator seed + generate non-repeated adjacent values + (note: distribution will changed!) output random atom + + set list of elements to choose from. Note: clear all + weights. + random atom value @@ -44,10 +52,10 @@ midi] diff --git a/ceammc/ext/doc/random.discrete-help.pd b/ceammc/ext/doc/random.discrete-help.pd index ebff2c0f24..6a023134bf 100644 --- a/ceammc/ext/doc/random.discrete-help.pd +++ b/ceammc/ext/doc/random.discrete-help.pd @@ -32,8 +32,9 @@ initialized with current time.; -49933 0; #X text 110 505 1\.; #X text 150 505 list; -#X obj 246 506 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 505 W: weights (list of non-negative floats). Type: list.; +#X obj 246 506 cnv 1 63 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 505 WEIGHTS: weights (list of non-negative floats). Type: +list.; #X obj 20 535 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 540 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -63,7 +64,7 @@ N is number of weights.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 783 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 786 library: ceammc v0.9.4; +#X text 10 786 library: ceammc v0.9.6; #X text 451 798 see also:; #X obj 525 798 random.linear; #X obj 633 798 random.pw_const; @@ -72,7 +73,7 @@ N is number of weights.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.discrete; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.discrete.pddoc b/ceammc/ext/doc/random.discrete.pddoc index 6532bd9942..22833f0fbd 100644 --- a/ceammc/ext/doc/random.discrete.pddoc +++ b/ceammc/ext/doc/random.discrete.pddoc @@ -25,10 +25,11 @@ explicitly set or specified, uses generator initialized with current time. - weights (list of non-negative floats) + weights (list of non-negative floats) - list of weights (non-negative floats) + list of weights (non-negative + floats) generator seed diff --git a/ceammc/ext/doc/random.float-help.pd b/ceammc/ext/doc/random.float-help.pd index b640ff9080..9b5076ad95 100644 --- a/ceammc/ext/doc/random.float-help.pd +++ b/ceammc/ext/doc/random.float-help.pd @@ -74,7 +74,7 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 918 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 921 library: ceammc v0.9.4; +#X text 10 921 library: ceammc v0.9.6; #X text 495 933 see also:; #X obj 569 933 random.int; #X obj 655 933 random.gauss; @@ -83,7 +83,7 @@ Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.gauss-help.pd b/ceammc/ext/doc/random.gauss-help.pd index 31e1d2ee16..cfebd14fbd 100644 --- a/ceammc/ext/doc/random.gauss-help.pd +++ b/ceammc/ext/doc/random.gauss-help.pd @@ -79,7 +79,7 @@ value: 0\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 993 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 996 library: ceammc v0.9.4; +#X text 10 996 library: ceammc v0.9.6; #X text 495 1008 see also:; #X obj 569 1008 random.float; #X obj 669 1008 random.int; @@ -88,7 +88,7 @@ value: 0\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.gauss; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.int-help.pd b/ceammc/ext/doc/random.int-help.pd index e70a0130a9..6c60cce072 100644 --- a/ceammc/ext/doc/random.int-help.pd +++ b/ceammc/ext/doc/random.int-help.pd @@ -73,7 +73,7 @@ Arguments are:; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 903 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 906 library: ceammc v0.9.4; +#X text 10 906 library: ceammc v0.9.6; #X text 481 918 see also:; #X obj 555 918 random.float; #X obj 655 918 random.gauss; @@ -82,7 +82,7 @@ Arguments are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.int; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.linear-help.pd b/ceammc/ext/doc/random.linear-help.pd index 1c496f8fc4..70f7de7f72 100644 --- a/ceammc/ext/doc/random.linear-help.pd +++ b/ceammc/ext/doc/random.linear-help.pd @@ -67,7 +67,7 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 848 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 851 library: ceammc v0.9.4; +#X text 10 851 library: ceammc v0.9.6; #X text 495 863 see also:; #X obj 569 863 random.float; #X obj 669 863 random.int; @@ -76,7 +76,7 @@ value: 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.linear; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.pw_const-help.pd b/ceammc/ext/doc/random.pw_const-help.pd index 282de11060..198de8238b 100644 --- a/ceammc/ext/doc/random.pw_const-help.pd +++ b/ceammc/ext/doc/random.pw_const-help.pd @@ -36,7 +36,7 @@ initialized with current time.; #X text 110 530 1\.; #X text 150 530 list; #X obj 246 531 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 530 P: interleaved interval boundaries and boundary propabilities. +#X text 245 530 V: interleaved interval boundaries and boundary propabilities. Note: number of arguments should be odd and >=5\. Boundaries should be in strictly increasing order and weights should be non-negative. Type: list.; @@ -72,7 +72,7 @@ propabilities. Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 909 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 912 library: ceammc v0.9.4; +#X text 10 912 library: ceammc v0.9.6; #X text 465 924 see also:; #X obj 539 924 random.linear; #X obj 647 924 random.pw_lin; @@ -81,7 +81,7 @@ propabilities. Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.pw_const; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.pw_const.pddoc b/ceammc/ext/doc/random.pw_const.pddoc index 94b93dc343..54fcab5629 100644 --- a/ceammc/ext/doc/random.pw_const.pddoc +++ b/ceammc/ext/doc/random.pw_const.pddoc @@ -25,15 +25,17 @@ explicitly set or specified, uses generator initialized with current time. - interleaved interval boundaries and boundary + interleaved interval boundaries and boundary propabilities. Note: number of arguments should be odd and >=5. Boundaries should be in strictly increasing order and weights should be non-negative - interleaved interval boundaries and boundary + interleaved interval boundaries and boundary propabilities. - list of boundaries - list of weights + list of + boundaries + list of + weights generator seed diff --git a/ceammc/ext/doc/random.pw_lin-help.pd b/ceammc/ext/doc/random.pw_lin-help.pd index a3fb7b01d2..c54a11628b 100644 --- a/ceammc/ext/doc/random.pw_lin-help.pd +++ b/ceammc/ext/doc/random.pw_lin-help.pd @@ -35,7 +35,7 @@ initialized with current time.; #X text 110 530 1\.; #X text 150 530 list; #X obj 246 531 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 530 P: interleaved interval boundaries and boundary propabilities. +#X text 245 530 V: interleaved interval boundaries and boundary propabilities. Note: number of arguments should be even and >=4\. Boundaries should be in strictly increasing order and weights should be non-negative. Type: list.; @@ -72,7 +72,7 @@ Type: list.; #X text 115 45 ::; #X obj 131 48 ui.link @title random @url ceammc.random-help.pd; #X obj 1 924 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 927 library: ceammc v0.9.4; +#X text 10 927 library: ceammc v0.9.6; #X text 451 939 see also:; #X obj 525 939 random.linear; #X obj 633 939 random.pw_const; @@ -81,7 +81,7 @@ Type: list.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 random.pw_lin; #X text 10 76 category:; diff --git a/ceammc/ext/doc/random.pw_lin.pddoc b/ceammc/ext/doc/random.pw_lin.pddoc index 001cf79fdf..e0a8522db0 100644 --- a/ceammc/ext/doc/random.pw_lin.pddoc +++ b/ceammc/ext/doc/random.pw_lin.pddoc @@ -26,16 +26,18 @@ explicitly set or specified, uses generator initialized with current time. - interleaved interval boundaries and boundary + interleaved interval boundaries and boundary propabilities. Note: number of arguments should be even and >=4. Boundaries should be in strictly increasing order and weights should be non-negative - interleaved interval boundaries and boundary + interleaved interval boundaries and boundary propabilities. For example: values 0 0 0.5 0 1 0 produce triangle distribution - list of boundaries - list of weights + list of + boundaries + list of + weights generator seed diff --git a/ceammc/ext/doc/replace-help.pd b/ceammc/ext/doc/replace-help.pd index 7b8c741ce7..f20adda3e5 100644 --- a/ceammc/ext/doc/replace-help.pd +++ b/ceammc/ext/doc/replace-help.pd @@ -32,9 +32,10 @@ or first and second arguments.; #X obj 20 446 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 481 @from; -#X text 245 481 Get/Set replace subject. Type: atom.; +#X text 245 481 Get/Set replace subject. Type: atom. Default value: +None.; #X msg 110 510 @to; -#X text 245 510 Get/Set replace value. Type: atom.; +#X text 245 510 Get/Set replace value. Type: atom. Default value: None.; #X obj 20 549 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 554 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -55,7 +56,7 @@ or first and second arguments.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 681 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 684 library: ceammc v0.9.4; +#X text 10 684 library: ceammc v0.9.6; #X text 601 696 see also:; #X obj 675 696 flow.pass; #N canvas 10 703 400 290 info 0; @@ -63,7 +64,7 @@ or first and second arguments.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 replace; #X text 10 76 category:; diff --git a/ceammc/ext/doc/replace.pddoc b/ceammc/ext/doc/replace.pddoc index e4631b594e..af7d4c9243 100644 --- a/ceammc/ext/doc/replace.pddoc +++ b/ceammc/ext/doc/replace.pddoc @@ -28,8 +28,8 @@ replace value - replace subject - replace value + replace subject + replace value diff --git a/ceammc/ext/doc/risset.gliss-help.pd b/ceammc/ext/doc/risset.gliss-help.pd new file mode 100644 index 0000000000..179c68d24f --- /dev/null +++ b/ceammc/ext/doc/risset.gliss-help.pd @@ -0,0 +1,110 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 483 50 cnv 1 282 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 483 50 Sheppard/Risset glissando calculator; +#X obj 1 1 cnv 5 765 40 empty empty risset.gliss 20 20 0 20 -104026 +-4096 0; +#X obj 655 11 risset.gliss; +#X msg 50 118 0 \, 1 10000; +#X floatatom 184 118 5 0 0 0 - - -; +#X floatatom 357 118 5 0 0 0 - - -; +#X obj 50 147 line 0 20; +#X msg 184 147 @interval \$1; +#X msg 357 147 @shift \$1; +#X obj 50 205 risset.gliss 60; +#X obj 50 234 msg \#:0; +#X obj 155 234 msg \#:0; +#X obj 50 262 hoa.process~ 5 risset.gliss.osc~ planewaves; +#X obj 50 305 ui.hgain~; +#X obj 357 305 ui.dsp~; +#X obj 50 334 dac~ 1 2; +#X obj 20 383 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 388 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 423 1\.; +#X text 150 423 float; +#X obj 246 424 cnv 1 123 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 423 PITCH(semitone): base pitch. Type: float.; +#X obj 20 453 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 458 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 493 @ampexp; +#X text 245 493 Get/Set amplitude exponent. Type: float. Default value: +2\.; +#X msg 110 522 @base; +#X text 245 522 Get/Set base pitch. Type: float. Units: semitone. Default +value: 60\. Range: 10\...100\.; +#X msg 110 564 @interval; +#X text 245 564 Get/Set interval between bands. Type: float. Units: +semitone. Default value: 12\.; +#X msg 110 606 @n; +#X text 245 606 (initonly) Get/Set number of bands. Type: int. Default +value: 5\.; +#X msg 110 648 @shift; +#X text 245 648 Get/Set band shift in octaves. Type: float. Default +value: 0\.; +#X obj 20 700 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 705 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 765 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 766 1\.; +#X text 150 766 *float*; +#X text 245 766 glissando phase.; +#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 802 1\.; +#X text 245 802 list of midi pitches.; +#X text 110 822 2\.; +#X text 245 822 list of amplitudes.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; +#X obj 1 872 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 875 library: ceammc v0.9.6; +#N canvas 10 894 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 risset.gliss; +#X text 10 76 category:; +#X text 120 76 misc; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 misc \, risset \, glissando; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 894 pd info; +#X connect 4 0 7 0; +#X connect 5 0 8 0; +#X connect 6 0 9 0; +#X connect 7 0 10 0; +#X connect 10 0 11 0; +#X connect 10 1 12 0; +#X connect 11 0 13 1; +#X connect 12 0 13 2; +#X connect 13 0 14 0; +#X connect 13 1 14 0; +#X connect 13 2 14 0; +#X connect 13 3 14 0; +#X connect 13 4 14 0; +#X connect 14 0 16 0; +#X connect 14 0 16 1; +#X connect 8 0 10 0; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/risset.gliss.osc~.pd b/ceammc/ext/doc/risset.gliss.osc~.pd new file mode 100644 index 0000000000..69c22d26a8 --- /dev/null +++ b/ceammc/ext/doc/risset.gliss.osc~.pd @@ -0,0 +1,16 @@ +#N canvas 0 0 462 313 12; +#X obj 20 48 hoa.in 1; +#X obj 125 48 hoa.in 2; +#X obj 20 77 mtof; +#X floatatom 87 77 5 0 0 0 - - -; +#X floatatom 144 77 5 0 0 0 - - -; +#X obj 20 106 osc~; +#X obj 20 135 *~; +#X obj 20 164 hoa.out~; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 5 0 6 0; +#X connect 1 0 6 1; +#X connect 6 0 7 0; diff --git a/ceammc/ext/doc/risset.gliss.pddoc b/ceammc/ext/doc/risset.gliss.pddoc new file mode 100644 index 0000000000..4c30658a21 --- /dev/null +++ b/ceammc/ext/doc/risset.gliss.pddoc @@ -0,0 +1,77 @@ + + + + risset.gliss + + + Serge Poltavsky + + Sheppard/Risset glissando calculator + GPL3 or later + ceammc + misc + misc risset glissando + 0.9.5 + + + base pitch + + + base pitch + number of bands + interval between + bands + band shift in octaves + amplitude exponent + + + + + glissando phase + + + + list of midi pitches + list of amplitudes + + + +x] +[X b->x] +]]> + + + + + + + diff --git a/ceammc/ext/doc/route.any-help.pd b/ceammc/ext/doc/route.any-help.pd new file mode 100644 index 0000000000..ba173aac9e --- /dev/null +++ b/ceammc/ext/doc/route.any-help.pd @@ -0,0 +1,84 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 308 50 cnv 1 457 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 308 50 separate any messages from bangs \, floats \, symbols +and lists; +#X obj 1 1 cnv 5 765 40 empty empty route.any 20 20 0 20 -104026 -4096 +0; +#X obj 676 11 route.any; +#X floatatom 50 118 5 0 0 0 - - -; +#X msg 98 118 bang; +#X msg 165 118 symbol ABC; +#X msg 136 147 list 1 2 3; +#X msg 165 176 list; +#X msg 184 205 @any; +#X msg 251 205 other; +#X obj 50 234 route.list; +#X obj 50 262 ui.dt; +#X obj 136 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 346 1\.; +#X text 150 346 *any*; +#X text 245 346 any to *first* outlet.; +#X text 150 366 *bang*; +#X text 245 366 bang to second outlet.; +#X text 150 386 *float*; +#X text 245 386 float to second outlet.; +#X text 150 406 *list*; +#X text 245 406 list to second outlet.; +#X text 150 426 *symbol*; +#X text 245 426 symbol to second outlet.; +#X obj 20 456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 461 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 462 1\.; +#X text 245 462 any output.; +#X text 110 482 2\.; +#X text 245 482 bangs \, floats \, symbols and lists.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 532 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 535 library: ceammc v0.9.6; +#X text 401 547 see also:; +#X obj 475 547 route.float; +#X obj 568 547 route.random; +#X obj 669 547 route.prop; +#N canvas 10 554 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.any; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route \, list; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 554 pd info; +#X connect 4 0 11 0; +#X connect 5 0 11 0; +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 6 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.any.pddoc b/ceammc/ext/doc/route.any.pddoc new file mode 100644 index 0000000000..e5d7a670c2 --- /dev/null +++ b/ceammc/ext/doc/route.any.pddoc @@ -0,0 +1,56 @@ + + + + route.any + + + Serge Poltavsky + + separate any messages from bangs, floats, symbols and lists + GPL3 or later + ceammc + flow + route list + 0.9.6 + + route.float + route.random + route.prop + + + + + any to *first* outlet + bang to second outlet + float to second outlet + list to second outlet + symbol to second outlet + + + + any output + bangs, floats, symbols and lists + + + +z] +]]> + + + + diff --git a/ceammc/ext/doc/route.bang-help.pd b/ceammc/ext/doc/route.bang-help.pd new file mode 100644 index 0000000000..7afa2c9a2d --- /dev/null +++ b/ceammc/ext/doc/route.bang-help.pd @@ -0,0 +1,96 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 461 50 cnv 1 304 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 461 50 separate bang messages from other types; +#X obj 1 1 cnv 5 765 40 empty empty route.bang 20 20 0 20 -104026 +-4096 0; +#X obj 594 11 route.b; +#X obj 669 11 route.bang; +#X obj 210 80 cnv 1 555 50 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 to get properties use *prop.get* object \, cause all +messages (including property requests) are passed thru; +#X floatatom 50 158 5 0 0 0 - - -; +#X msg 98 158 bang; +#X msg 165 158 symbol ABC; +#X msg 136 187 list 1 2 3; +#X obj 280 187 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 165 216 list; +#X obj 280 216 prop.set @strict; +#X msg 184 245 @any; +#X obj 50 274 route.bang; +#X obj 50 302 ui.dt; +#X obj 136 331 ui.dt; +#X obj 20 380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 385 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 420 @strict; +#X text 245 420 Get/Set strict mode. By default empty list treated +as bang. Set to true to disable this behavior. Type: bool. Default +value: 0\.; +#X obj 20 487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 492 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 493 1\.; +#X text 150 493 *any*; +#X text 245 493 any to second outlet.; +#X text 150 513 *bang*; +#X text 245 513 bang to *first* outlet.; +#X text 150 533 *float*; +#X text 245 533 float to second outlet.; +#X text 150 553 *list*; +#X text 245 553 list to second outlet. See @strict property for more +info.; +#X text 150 573 *symbol*; +#X text 245 573 symbol to second outlet.; +#X obj 20 603 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 608 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 609 1\.; +#X text 245 609 bang output.; +#X text 110 629 2\.; +#X text 245 629 other messages.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 679 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 682 library: ceammc v0.9.6; +#X text 487 694 see also:; +#X obj 561 694 route.float; +#X obj 654 694 route.random; +#N canvas 10 701 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.bang; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route \, bang; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 701 pd info; +#X connect 11 0 13 0; +#X connect 7 0 15 0; +#X connect 8 0 15 0; +#X connect 10 0 15 0; +#X connect 12 0 15 0; +#X connect 14 0 15 0; +#X connect 13 0 15 0; +#X connect 15 0 16 0; +#X connect 15 1 17 0; +#X connect 9 0 15 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.bang.pddoc b/ceammc/ext/doc/route.bang.pddoc new file mode 100644 index 0000000000..c75537b819 --- /dev/null +++ b/ceammc/ext/doc/route.bang.pddoc @@ -0,0 +1,66 @@ + + + + route.bang + + + Serge Poltavsky + + separate bang messages from other types + GPL3 or later + ceammc + flow + route bang + 0.9.6 + + route.b + + + route.float + route.random + + + + to get properties use *prop.get* object, cause all messages (including property + requests) are passed thru + + + strict mode. By default empty list + treated as bang. Set to true to disable this behavior + + + + any to second outlet + bang to *first* outlet + float to second outlet + list to second outlet. See @strict property for more info. + symbol to second outlet + + + + bang output + other messages + + + +z] +]]> + + + + diff --git a/ceammc/ext/doc/route.float-help.pd b/ceammc/ext/doc/route.float-help.pd index 501e8a7043..9311b442ec 100644 --- a/ceammc/ext/doc/route.float-help.pd +++ b/ceammc/ext/doc/route.float-help.pd @@ -25,20 +25,20 @@ messages (including property requests) are passed thru; -49933 0; #X msg 110 391 @strict; #X text 245 391 Get/Set strict mode. By default list with single float -treated as float. Set to true to disable this behavior. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +treated as float. Set to true to disable this behavior. Type: bool. +Default value: 0\.; #X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 463 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; #X text 110 464 1\.; #X text 150 464 *float*; -#X text 245 464 float to first outlet.; +#X text 245 464 float to *first* outlet.; #X text 150 484 *bang*; #X text 245 484 bang to second outlet.; #X text 150 504 *symbol*; #X text 245 504 symbol to second outlet.; #X text 150 524 *list*; -#X text 245 524 list to second outlet.; +#X text 245 524 list to second outlet. See @strict property for details.; #X text 150 544 *any*; #X text 245 544 any to second outlet.; #X obj 20 574 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -54,13 +54,13 @@ Default value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; #X obj 1 650 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 653 library: ceammc v0.9.4; +#X text 10 653 library: ceammc v0.9.6; #N canvas 10 672 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 route.float; #X text 10 76 category:; diff --git a/ceammc/ext/doc/route.float.pddoc b/ceammc/ext/doc/route.float.pddoc index c5f61a6904..b18a751ce3 100644 --- a/ceammc/ext/doc/route.float.pddoc +++ b/ceammc/ext/doc/route.float.pddoc @@ -21,15 +21,15 @@ requests) are passed thru - strict mode. By default list - with single float treated as float. Set to true to disable this behavior + strict mode. By default list with + single float treated as float. Set to true to disable this behavior - float to first outlet + float to *first* outlet bang to second outlet symbol to second outlet - list to second outlet + list to second outlet. See @strict property for details any to second outlet diff --git a/ceammc/ext/doc/route.list-help.pd b/ceammc/ext/doc/route.list-help.pd new file mode 100644 index 0000000000..22d5257cd7 --- /dev/null +++ b/ceammc/ext/doc/route.list-help.pd @@ -0,0 +1,83 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 461 50 cnv 1 304 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 461 50 separate list messages from other types; +#X obj 1 1 cnv 5 765 40 empty empty route.list 20 20 0 20 -104026 +-4096 0; +#X obj 594 11 route.l; +#X obj 669 11 route.list; +#X floatatom 50 118 5 0 0 0 - - -; +#X msg 98 118 bang; +#X msg 165 118 symbol ABC; +#X msg 136 147 list 1 2 3; +#X msg 165 176 list; +#X msg 184 205 @any; +#X msg 251 205 other; +#X obj 50 234 route.list; +#X obj 50 262 ui.dt; +#X obj 136 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 346 1\.; +#X text 150 346 *any*; +#X text 245 346 any to second outlet.; +#X text 150 366 *bang*; +#X text 245 366 bang to second outlet.; +#X text 150 386 *float*; +#X text 245 386 float to second outlet.; +#X text 150 406 *list*; +#X text 245 406 list to *first* outlet.; +#X text 150 426 *symbol*; +#X text 245 426 symbol to second outlet.; +#X obj 20 456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 461 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 462 1\.; +#X text 245 462 list output.; +#X text 110 482 2\.; +#X text 245 482 other messages.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 532 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 535 library: ceammc v0.9.6; +#X text 487 547 see also:; +#X obj 561 547 route.float; +#X obj 654 547 route.random; +#N canvas 10 554 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.list; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route \, list; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 554 pd info; +#X connect 5 0 12 0; +#X connect 6 0 12 0; +#X connect 8 0 12 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 14 0; +#X connect 7 0 12 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.list.pddoc b/ceammc/ext/doc/route.list.pddoc new file mode 100644 index 0000000000..f8f771fa6f --- /dev/null +++ b/ceammc/ext/doc/route.list.pddoc @@ -0,0 +1,58 @@ + + + + route.list + + + Serge Poltavsky + + separate list messages from other types + GPL3 or later + ceammc + flow + route list + 0.9.6 + + route.l + + + route.float + route.random + + + + + any to second outlet + bang to second outlet + float to second outlet + list to *first* outlet + symbol to second outlet + + + + list output + other messages + + + +z] +]]> + + + + diff --git a/ceammc/ext/doc/route.prop-help.pd b/ceammc/ext/doc/route.prop-help.pd new file mode 100644 index 0000000000..7ee3349ccb --- /dev/null +++ b/ceammc/ext/doc/route.prop-help.pd @@ -0,0 +1,84 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 431 50 cnv 1 334 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 431 50 separate property messages from other types; +#X obj 1 1 cnv 5 765 40 empty empty route.prop 20 20 0 20 -104026 +-4096 0; +#X obj 669 11 route.prop; +#X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 126 118 100; +#X msg 222 118 symbol TEST; +#X msg 59 147 list 1 2 3; +#X msg 222 147 some message; +#X msg 69 176 @prop A B; +#X msg 222 176 @prop?; +#X obj 50 234 route.prop; +#X obj 50 262 ui.dt; +#X obj 136 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 346 1\.; +#X text 150 346 *any*; +#X text 245 346 property to *first* outlet \, any other messages to +second outlet.; +#X text 150 381 *bang*; +#X text 245 381 bang to second outlet.; +#X text 150 401 *float*; +#X text 245 401 float to first outlet.; +#X text 150 421 *list*; +#X text 245 421 list to second outlet.; +#X text 150 441 *symbol*; +#X text 245 441 symbol to second outlet.; +#X obj 20 471 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 476 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 477 1\.; +#X text 245 477 property output.; +#X text 110 497 2\.; +#X text 245 497 other messages.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 547 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 550 library: ceammc v0.9.6; +#X text 509 562 see also:; +#X obj 583 562 route.float; +#X obj 676 562 route.any; +#N canvas 10 569 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.prop; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 569 pd info; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 4 0 11 0; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.prop.pddoc b/ceammc/ext/doc/route.prop.pddoc new file mode 100644 index 0000000000..586fd71dea --- /dev/null +++ b/ceammc/ext/doc/route.prop.pddoc @@ -0,0 +1,60 @@ + + + + route.prop + + + Serge Poltavsky + + separate property messages from other types + GPL3 or later + ceammc + flow + route + 0.9.6 + + route.float + route.any + + + + + property to *first* outlet, any other messages to second outlet + bang to second outlet + float to first outlet + list to second outlet + symbol to second outlet + + + + property output + other messages + + + +z] +[X b->z] +[X c->z] +[X d->z] +[X e->z] +[X f->z] +[X g->z] +]]> + + + + diff --git a/ceammc/ext/doc/route.random-help.pd b/ceammc/ext/doc/route.random-help.pd new file mode 100644 index 0000000000..2752d6985c --- /dev/null +++ b/ceammc/ext/doc/route.random-help.pd @@ -0,0 +1,98 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 501 50 cnv 1 264 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 501 50 routes input flow to random outlet; +#X obj 1 1 cnv 5 765 40 empty empty route.random 20 20 0 20 -104026 +-4096 0; +#X obj 579 11 route.r; +#X obj 654 11 route.random; +#X floatatom 50 118 5 0 0 0 - - -; +#X msg 78 147 1 2 3; +#X msg 107 176 bang; +#X msg 174 176 any message; +#X obj 50 205 route.random 4; +#X obj 155 234 ui.dt; +#X obj 126 262 ui.dt; +#X obj 88 291 ui.dt; +#X obj 50 320 ui.dt; +#X obj 50 349 route.random.chord; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 438 1\.; +#X text 150 438 int; +#X obj 246 439 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 N: number of outlets. See @n property. Type: int. Range: +2\...64; +#X obj 20 483 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 488 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 523 @n; +#X text 245 523 (initonly) Get/Set number of outlets. Type: int. Default +value: 2\. Range: 2\...64\.; +#X msg 110 565 @seed; +#X text 245 565 Get/Set generator seed. Type: int. Default value: 0\. +Min value: 0\.; +#X obj 20 617 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 622 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 623 1\.; +#X text 150 623 *bang*; +#X text 245 623 bang to random outlet.; +#X text 150 643 *float*; +#X text 245 643 float to random outlet.; +#X text 150 663 *symbol*; +#X text 245 663 symbol to random outlet.; +#X text 150 683 *list*; +#X text 245 683 list to random outlet.; +#X text 150 703 *any*; +#X text 245 703 any to random outlet.; +#X obj 20 733 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 738 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 739 1\.; +#X text 245 739 first outlet.; +#X text 110 759 ....; +#X text 245 759 ... outlet.; +#X text 110 779 n.; +#X text 245 779 n-th outlet.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 829 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 832 library: ceammc v0.9.6; +#N canvas 10 851 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.random; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 851 pd info; +#X connect 5 0 9 0; +#X connect 6 0 9 0; +#X connect 7 0 9 0; +#X connect 8 0 9 0; +#X connect 9 3 10 0; +#X connect 9 2 11 0; +#X connect 9 1 12 0; +#X connect 9 0 13 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.random.chord.pd b/ceammc/ext/doc/route.random.chord.pd new file mode 100644 index 0000000000..5b052b0254 --- /dev/null +++ b/ceammc/ext/doc/route.random.chord.pd @@ -0,0 +1,33 @@ +#N canvas 0 0 293 400 12; +#X obj 20 48 ui.keyboard 24 48; +#X obj 20 120 stripnote; +#X msg 20 149 \$1; +#X obj 116 149 ui.dsp~; +#X obj 20 178 mtof; +#X obj 20 207 route.random 3; +#X floatatom 20 235 5 0 0 0 - - -; +#X floatatom 87 235 5 0 0 0 - - -; +#X floatatom 154 235 5 0 0 0 - - -; +#X obj 20 264 osc~; +#X obj 87 264 osc~; +#X obj 154 264 osc~; +#X obj 20 293 pan.spread~ 3; +#X obj 20 322 ui.hgain2~; +#X obj 20 351 dac~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 5 1 7 0; +#X connect 5 2 8 0; +#X connect 6 0 9 0; +#X connect 7 0 10 0; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 10 0 12 1; +#X connect 11 0 12 2; +#X connect 12 0 13 0; +#X connect 12 1 13 1; +#X connect 13 0 14 0; +#X connect 13 1 14 1; diff --git a/ceammc/ext/doc/route.random.pddoc b/ceammc/ext/doc/route.random.pddoc new file mode 100644 index 0000000000..ebc5de35ea --- /dev/null +++ b/ceammc/ext/doc/route.random.pddoc @@ -0,0 +1,92 @@ + + + + route.random + + + Serge Poltavsky + + routes input flow to random outlet + GPL3 or later + ceammc + flow + route + 0.9.6 + + route.r + + + + number of outlets. See @n + property + + + number of outlets + generator seed + + + + bang to random outlet + float to random outlet + symbol to random outlet + list to random outlet + any to random outlet + + + + first outlet + ... outlet + n-th outlet + + + + + + + + + + + diff --git a/ceammc/ext/doc/route.symbol-help.pd b/ceammc/ext/doc/route.symbol-help.pd new file mode 100644 index 0000000000..8a811c8466 --- /dev/null +++ b/ceammc/ext/doc/route.symbol-help.pd @@ -0,0 +1,81 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 446 50 cnv 1 319 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 446 50 separate symbol messages from other types; +#X obj 1 1 cnv 5 765 40 empty empty route.symbol 20 20 0 20 -104026 +-4096 0; +#X obj 580 11 route.s; +#X obj 654 11 route.symbol; +#X floatatom 50 118 5 0 0 0 - - -; +#X msg 98 118 bang; +#X msg 165 118 symbol ABC; +#X msg 136 147 list 1 2 3; +#X msg 165 176 list; +#X msg 184 205 @any; +#X obj 50 234 route.symbol; +#X obj 50 262 ui.dt; +#X obj 136 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 346 1\.; +#X text 150 346 *any*; +#X text 245 346 any to second outlet.; +#X text 150 366 *bang*; +#X text 245 366 bang to second outlet.; +#X text 150 386 *float*; +#X text 245 386 float to second outlet.; +#X text 150 406 *list*; +#X text 245 406 list to second outlet.; +#X text 150 426 *symbol*; +#X text 245 426 symbol to *first* outlet.; +#X obj 20 456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 461 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 462 1\.; +#X text 245 462 symbol output.; +#X text 110 482 2\.; +#X text 245 482 other messages.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title flow @url ceammc.flow-help.pd; +#X obj 1 532 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 535 library: ceammc v0.9.6; +#X text 487 547 see also:; +#X obj 561 547 route.float; +#X obj 654 547 route.random; +#N canvas 10 554 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 route.symbol; +#X text 10 76 category:; +#X text 120 76 flow; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 route \, symbol; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 554 pd info; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 7 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/route.symbol.pddoc b/ceammc/ext/doc/route.symbol.pddoc new file mode 100644 index 0000000000..cc2b7ca923 --- /dev/null +++ b/ceammc/ext/doc/route.symbol.pddoc @@ -0,0 +1,58 @@ + + + + route.symbol + + + Serge Poltavsky + + separate symbol messages from other types + GPL3 or later + ceammc + flow + route symbol + 0.9.6 + + route.s + + + route.float + route.random + + + + + any to second outlet + bang to second outlet + float to second outlet + list to second outlet + symbol to *first* outlet + + + + symbol output + other messages + + + +z] +]]> + + + + diff --git a/ceammc/ext/doc/rtree.to_list-help.pd b/ceammc/ext/doc/rtree.to_list-help.pd index 5d4e99b3ad..c3d29f72d1 100644 --- a/ceammc/ext/doc/rtree.to_list-help.pd +++ b/ceammc/ext/doc/rtree.to_list-help.pd @@ -73,13 +73,13 @@ value: 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 897 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 900 library: ceammc v0.9.4; +#X text 10 900 library: ceammc v0.9.6; #N canvas 10 919 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 rtree.to_list; #X text 10 76 category:; diff --git a/ceammc/ext/doc/samp.time~-help.pd b/ceammc/ext/doc/samp.time~-help.pd index 701347dfbf..3844003740 100644 --- a/ceammc/ext/doc/samp.time~-help.pd +++ b/ceammc/ext/doc/samp.time~-help.pd @@ -55,13 +55,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title samp @url ceammc.samp-help.pd; #X obj 1 653 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 656 library: ceammc v0.9.4; +#X text 10 656 library: ceammc v0.9.6; #N canvas 10 675 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 samp.time~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/samp.time~.pddoc b/ceammc/ext/doc/samp.time~.pddoc index 8738d5aefe..6bb4725a03 100644 --- a/ceammc/ext/doc/samp.time~.pddoc +++ b/ceammc/ext/doc/samp.time~.pddoc @@ -35,7 +35,7 @@ - current sample number + current sample number diff --git a/ceammc/ext/doc/seq.arp-help.pd b/ceammc/ext/doc/seq.arp-help.pd index 6354760284..b8a04d74ee 100644 --- a/ceammc/ext/doc/seq.arp-help.pd +++ b/ceammc/ext/doc/seq.arp-help.pd @@ -5,101 +5,100 @@ #X obj 1 1 cnv 5 765 40 empty empty seq.arp 20 20 0 20 -104026 -4096 0; #X obj 689 11 seq.arp; -#X msg 50 118 on; -#X msg 107 118 on last 80; -#X obj 309 118 ui.dsp~; -#X obj 50 147 flow.dup 6; -#X obj 50 176 flow.space 130; -#X msg 213 176 on all; -#X msg 309 176 off all; -#X obj 50 205 seq.arp 60 64 67 79 54 80; -#X obj 50 234 msg note; -#X obj 155 234 loadmsg prog 1 12; -#X obj 50 262 fluid~ sf2/VintageDreamsWaves-v2.sf2; -#X obj 50 291 ui.hgain2~; -#X obj 50 320 dac~; -#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X msg 50 118 asr 100 first 10 last; +#X obj 328 118 ui.dsp~; +#X msg 69 147 asr 200 first 10 first; +#X msg 98 176 asr 150 all 10 last; +#X msg 117 205 on; +#X msg 165 205 off; +#X obj 50 234 seq.arp 60 64 67 79 54 80; +#X obj 50 262 msg note; +#X obj 155 262 loadmsg prog 1 12; +#X obj 50 291 fluid~ sf2/VintageDreamsWaves-v2.sf2; +#X obj 50 320 ui.hgain2~; +#X obj 50 349 dac~; +#X obj 20 398 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 403 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 409 1\.; -#X text 150 409 list; -#X obj 246 410 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 CHORD: list of pitches to arpeggiate. Type: list.; -#X obj 20 439 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 444 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 438 1\.; +#X text 150 438 list; +#X obj 246 439 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 438 CHORD: list of pitches to arpeggiate. Type: list.; +#X obj 20 468 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 473 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 479 @chord; -#X text 245 479 Get/Set list of pitches to arpeggiate. Type: list.; -#X obj 20 518 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 523 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 508 @chord; +#X text 245 508 Get/Set list of pitches to arpeggiate. Type: list.; +#X obj 20 547 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 552 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 558 asr; -#X text 245 558 set arpeggiate mode and run. Arguments are:; -#X obj 255 581 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 581 STEP: step duration. Type: float. Min value: 0\. Units: +#X msg 110 587 asr; +#X text 245 587 set arpeggiate mode and run. Arguments are:; +#X obj 255 610 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 610 STEP: step duration. Type: float. Min value: 0\. Units: ms.; -#X obj 255 604 cnv 1 60 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 604 ON_MODE: on mode. Type: symbol. Allowed values: all +#X obj 255 633 cnv 1 60 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 633 ON_MODE: on mode. Type: symbol. Allowed values: all \, first \, last.; -#X obj 255 642 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 642 HOLD: number of steps to hold value. Type: int. Min +#X obj 255 671 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 671 HOLD: number of steps to hold value. Type: int. Min value: 1\.; -#X obj 255 680 cnv 1 67 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 680 OFF_MODE: off mode. Type: symbol. Allowed values: all +#X obj 255 709 cnv 1 67 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 709 OFF_MODE: off mode. Type: symbol. Allowed values: all \, first \, last.; -#X msg 110 720 off; -#X text 245 720 turn off active notes. Arguments are:; -#X obj 255 743 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 743 [MODE]: if =first turn off first active note in chord +#X msg 110 749 off; +#X text 245 749 turn off active notes. Arguments are:; +#X obj 255 772 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 772 [MODE]: if =first turn off first active note in chord list \, if =last turn off last inactive note in chord list \, if =all turn off all active notes. Type: symbol. Allowed values: first \, last \, all \, random.; -#X obj 255 811 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 811 [NUM=1]: number of notes to turn on. Type: int. Min +#X obj 255 840 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 840 [NUM=1]: number of notes to turn on. Type: int. Min value: 1\.; -#X msg 110 851 on; -#X text 245 851 turn on inactive notes. Arguments are:; -#X obj 255 874 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 874 [MODE]: if =first play first inactive note in chord +#X msg 110 880 on; +#X text 245 880 turn on inactive notes. Arguments are:; +#X obj 255 903 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 903 [MODE]: if =first play first inactive note in chord list \, if =last play last inactive note in chord list \, if =all play all inactive notes. Type: symbol. Allowed values: first \, last \, all \, random.; -#X obj 255 942 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 942 [VEL=127]: note velocity. Type: float. Range: 1\...127\.; -#X obj 255 965 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 965 [NUM=1]: number of notes to turn on. Type: int. Min +#X obj 255 971 cnv 1 70 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 971 [VEL=127]: note velocity. Type: float. Range: 1\...127\.; +#X obj 255 994 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 994 [NUM=1]: number of notes to turn on. Type: int. Min value: 1\.; -#X msg 110 1005 reset; -#X text 245 1005 reset all notes to off without output.; -#X obj 20 1042 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1047 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1034 reset; +#X text 245 1034 reset all notes to off without output.; +#X obj 20 1071 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1076 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1048 1\.; -#X text 150 1048 *bang*; -#X text 245 1048 starts sequencer.; -#X obj 20 1078 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1083 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1077 1\.; +#X text 150 1077 *bang*; +#X text 245 1077 play one note in sequence (same as [on( message).; +#X obj 20 1107 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1112 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1084 1\.; -#X text 245 1084 list: pitch vel.; -#X text 110 1104 2\.; -#X text 245 1104 float: number of active notes.; +#X text 110 1113 1\.; +#X text 245 1113 list: pitch vel.; +#X text 110 1133 2\.; +#X text 245 1133 float: number of active notes.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; -#X obj 1 1154 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1157 library: ceammc v0.9.4; -#X text 579 1169 see also:; -#X obj 653 1169 seq.b; -#X obj 704 1169 seq.t; -#N canvas 10 1176 400 290 info 0; +#X obj 1 1183 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1186 library: ceammc v0.9.6; +#X text 579 1198 see also:; +#X obj 653 1198 seq.b; +#X obj 704 1198 seq.t; +#N canvas 10 1205 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.arp; #X text 10 76 category:; @@ -118,17 +117,16 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1176 pd info; -#X connect 4 0 7 0; -#X connect 5 0 7 0; -#X connect 7 0 8 0; -#X connect 8 0 11 0; -#X connect 9 0 11 0; +#X restore 10 1205 pd info; +#X connect 4 0 10 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; #X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 14 0; +#X connect 11 0 13 0; +#X connect 12 0 13 0; #X connect 13 0 14 0; +#X connect 13 1 14 1; #X connect 14 0 15 0; -#X connect 14 1 15 1; -#X connect 15 0 16 0; -#X connect 15 0 16 1; \ No newline at end of file +#X connect 14 0 15 1; \ No newline at end of file diff --git a/ceammc/ext/doc/seq.arp.pddoc b/ceammc/ext/doc/seq.arp.pddoc index 59a11c452e..76f9caad62 100644 --- a/ceammc/ext/doc/seq.arp.pddoc +++ b/ceammc/ext/doc/seq.arp.pddoc @@ -21,7 +21,7 @@ list of pitches to arpeggiate - list of pitches to arpeggiate + list of pitches to arpeggiate reset all notes to off without output @@ -51,7 +51,7 @@ - starts sequencer + play one note in sequence (same as [on( message) @@ -61,12 +61,14 @@ time between beats. Unit values like 100ms or 240bpm also can be used - sequencer pattern in beat duration units + sequencer pattern in beat duration + units number of whole sequence repeats. If -1: repeat infinitely alias to @r -1, repeats infinitely alias to @r 1, play once whole sequence duration. (Recalculates @t property accordingly) - current + current sequence iteration - current repeat - iteration + current + repeat iteration sequencer mode. 'inc': from first to last, 'dec': from last to first, 'tri': from first to last, then back diff --git a/ceammc/ext/doc/seq.counter-help.pd b/ceammc/ext/doc/seq.counter-help.pd index b94093bfca..40f1b745ba 100644 --- a/ceammc/ext/doc/seq.counter-help.pd +++ b/ceammc/ext/doc/seq.counter-help.pd @@ -7,96 +7,104 @@ #X obj 660 11 seq.counter; #X obj 50 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 222 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 357 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; +#X msg 107 118 prev; +#X msg 174 118 next; #X obj 50 147 seq.counter 1 4; -#X obj 222 147 seq.counter 1 4 @r 2; -#X text 434 147 repeat two times; -#X floatatom 50 176 5 0 0 0 - - -; -#X floatatom 222 176 5 0 0 0 - - -; -#X obj 357 176 route done; -#X obj 357 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 50 176 ui.dt; +#X obj 50 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 194 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X floatatom 434 205 5 0 0 0 - - -; -#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X obj 50 234 seq.counter 1 4 @r 2; +#X text 261 234 repeat two times; +#X floatatom 50 262 5 0 0 0 - - -; +#X obj 194 262 ui.dt; +#X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 316 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 294 1\.; -#X text 150 294 int; -#X obj 246 295 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 FROM: start value. Type: int.; -#X text 110 314 2\.; -#X text 150 314 int; -#X obj 246 315 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 314 TO: end value. Type: int.; -#X text 110 334 3\.; -#X text 150 334 int; -#X obj 246 335 cnv 1 62 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 334 REPEATS: number of repeats. Type: int.; -#X obj 20 364 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 369 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 351 1\.; +#X text 150 351 int; +#X obj 246 352 cnv 1 38 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 FROM: start value. Type: int.; +#X text 110 371 2\.; +#X text 150 371 int; +#X obj 246 372 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 371 TO: end value. Type: int.; +#X text 110 391 3\.; +#X text 150 391 int; +#X obj 246 392 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 391 R: number of repeats. Type: int.; +#X obj 20 421 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 426 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 404 @fold; -#X text 245 404 alias to @mode fold.; -#X msg 110 433 @from; -#X text 245 433 Get/Set start value. Type: int. Default value: 0\.; -#X msg 110 462 @i; -#X text 245 462 (readonly) Get current iteration. Type: int. Default -value: 0\.; -#X msg 110 504 @inf; -#X text 245 504 alias to @r -1 \, repeats infinitely.; -#X msg 110 533 @mode; -#X text 245 533 Get/Set repeat counter mode. Type: symbol. Default +#X msg 110 461 @fold; +#X text 245 461 alias to @mode fold.; +#X msg 110 490 @from; +#X text 245 490 Get/Set start value. Setting this property resets @i +to 0\. Type: int. Default value: 0\.; +#X msg 110 532 @i; +#X text 245 532 Get/Set current iteration. Type: int. Default value: +0\.; +#X msg 110 561 @inf; +#X text 245 561 alias to @r -1 \, repeats infinitely.; +#X msg 110 590 @mode; +#X text 245 590 Get/Set repeat counter mode. Type: symbol. Default value: wrap. Allowed values: wrap \, fold.; -#X msg 110 575 @once; -#X text 245 575 alias to @r 1 \, play once.; -#X msg 110 604 @r; -#X text 245 604 Get/Set number of repeats. If -1: repeat infinitely. +#X msg 110 632 @once; +#X text 245 632 alias to @r 1 \, play once.; +#X msg 110 661 @r; +#X text 245 661 Get/Set number of repeats. If -1: repeat infinitely. Type: int. Default value: -1\. Min value: -1\.; -#X msg 110 646 @ri; -#X text 245 646 (readonly) Get current repeat iteration. Type: int. +#X msg 110 703 @ri; +#X text 245 703 (readonly) Get current repeat iteration. Type: int. Default value: 0\.; -#X msg 110 688 @to; -#X text 245 688 Get/Set end value. Type: int. Default value: 0\.; -#X msg 110 717 @wrap; -#X text 245 717 alias to @mode wrap.; -#X obj 20 756 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 761 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 745 @to; +#X text 245 745 Get/Set end value (inclusive). Type: int. Default value: +0\.; +#X msg 110 774 @value; +#X text 245 774 (readonly) Get current value. Type: int. Default value: +0\.; +#X msg 110 803 @wrap; +#X text 245 803 alias to @mode wrap.; +#X obj 20 842 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 847 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 796 reset; -#X text 245 796 reset counter to start value and repeat counter to +#X msg 110 882 next; +#X text 245 882 increment counter then output.; +#X msg 110 909 prev; +#X text 245 909 decrement counter then output.; +#X msg 110 936 reset; +#X text 245 936 reset counter to start value and repeat counter to 0\.; -#X obj 20 833 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 838 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 973 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 978 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 839 1\.; -#X text 150 839 *bang*; -#X text 245 839 output current value and increment counter.; -#X text 110 859 2\.; -#X text 150 859 *bang*; -#X text 245 859 reset counter to start value.; -#X obj 20 889 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 894 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 979 1\.; +#X text 150 979 *bang*; +#X text 245 979 output current value then increment counter.; +#X text 110 999 2\.; +#X text 150 999 *bang*; +#X text 245 999 reset counter to start value.; +#X obj 20 1029 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1034 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 895 1\.; -#X text 245 895 int: counter value.; -#X text 110 915 2\.; -#X text 245 915 int: repeat counter \, done: when done.; +#X text 110 1035 1\.; +#X text 245 1035 int: counter value.; +#X text 110 1055 2\.; +#X text 245 1055 int: repeat counter \, done: when done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; -#X obj 1 965 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 968 library: ceammc v0.9.4; -#N canvas 10 987 400 290 info 0; +#X obj 1 1105 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1108 library: ceammc v0.9.6; +#N canvas 10 1127 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.counter; #X text 10 76 category:; @@ -115,12 +123,12 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 987 pd info; +#X restore 10 1127 pd info; #X connect 4 0 7 0; -#X connect 5 0 8 0; -#X connect 6 0 8 1; -#X connect 7 0 10 0; -#X connect 8 0 11 0; -#X connect 8 1 12 0; -#X connect 12 0 13 0; -#X connect 12 1 14 0; \ No newline at end of file +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 9 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 13 0; +#X connect 11 1 14 0; \ No newline at end of file diff --git a/ceammc/ext/doc/seq.counter.pddoc b/ceammc/ext/doc/seq.counter.pddoc index b83ab1f075..72617d3b68 100644 --- a/ceammc/ext/doc/seq.counter.pddoc +++ b/ceammc/ext/doc/seq.counter.pddoc @@ -16,29 +16,34 @@ start value end value - number of repeats + number of repeats - start value - end value + start value. Setting this property resets + @i to 0 + end value (inclusive) number of repeats. If -1: repeat infinitely. alias to @r -1, repeats infinitely alias to @r 1, play once - current iteration - current repeat + current iteration + current repeat iteration repeat counter mode alias to @mode wrap alias to @mode fold + current + value reset counter to start value and repeat counter to 0 + increment counter then output + decrement counter then output - output current value and increment counter + output current value then increment counter reset counter to start value @@ -51,13 +56,17 @@ diff --git a/ceammc/ext/doc/seq.life-help.pd b/ceammc/ext/doc/seq.life-help.pd index 7b7b8427ce..18331772f6 100644 --- a/ceammc/ext/doc/seq.life-help.pd +++ b/ceammc/ext/doc/seq.life-help.pd @@ -122,7 +122,7 @@ value: 256\.; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; #X obj 1 1578 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1581 library: ceammc v0.9.4; +#X text 10 1581 library: ceammc v0.9.6; #X text 579 1593 see also:; #X obj 653 1593 seq.b; #X obj 704 1593 seq.t; @@ -131,7 +131,7 @@ value: 256\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.life; #X text 10 76 category:; diff --git a/ceammc/ext/doc/seq.life.pddoc b/ceammc/ext/doc/seq.life.pddoc index 0c8f6d8e7b..8a881ff750 100644 --- a/ceammc/ext/doc/seq.life.pddoc +++ b/ceammc/ext/doc/seq.life.pddoc @@ -27,7 +27,7 @@ rows number of columns - total cell + total cell count diff --git a/ceammc/ext/doc/seq.matrix-help.pd b/ceammc/ext/doc/seq.matrix-help.pd index 16070d1631..1dbfb3e957 100644 --- a/ceammc/ext/doc/seq.matrix-help.pd +++ b/ceammc/ext/doc/seq.matrix-help.pd @@ -10,21 +10,17 @@ #X obj 184 118 ui.tab inc dec tri; #X obj 405 118 ui.dsp~; #X msg 184 147 @mode \$1; -#X obj 50 176 seq.matrix 16 120#4bpm; -#X obj 290 176 loadmsg random; -#X obj 50 205 ui.matrix 3 16 @size 257 46; +#X obj 50 176 seq.matrix 16 120|16bpm; +#X obj 299 176 loadmsg random; +#X obj 50 205 ui.matrix 3 16 @size 320 51; #X obj 50 262 route col; #X obj 50 291 unpack f f f f; #X floatatom 50 320 5 0 0 0 - - -; #X obj 98 320 osc~ 400; -#X obj 232 320 osc~ 1200; -#X obj 366 320 osc~ 100; #X msg 117 349 @gate \$1; -#X msg 251 349 @gate \$1; -#X msg 386 349 @gate \$1; +#X obj 232 349 synth.kick2~ 10 80; #X obj 98 378 env.ar~ 20 100; -#X obj 232 378 env.ar~ 10 80; -#X obj 366 378 env.ar~ 6 200; +#X obj 232 378 synth.clap~ 6 200; #X obj 50 406 pan.spread~ 5, f 16; #X obj 50 435 ui.hgain2~; #X obj 50 464 dac~, f 16; @@ -37,9 +33,9 @@ #X text 245 553 N: number of steps. Type: int. Min value: 0; #X text 110 573 2\.; #X text 150 573 float; -#X obj 246 574 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 573 T: time interval between steps or bpm. Type: float. -Min value: 0; +#X obj 246 574 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 573 T(ms): time interval between steps or bpm. Type: float. +Range: 1\...20000; #X obj 20 618 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 623 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -111,7 +107,7 @@ iteration or [done( when done.; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; #X obj 1 1452 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1455 library: ceammc v0.9.4; +#X text 10 1455 library: ceammc v0.9.6; #X text 598 1467 see also:; #X obj 672 1470 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.matrix] @url ui.matrix-help.pd; @@ -120,7 +116,7 @@ iteration or [done( when done.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.matrix; #X text 10 76 category:; @@ -149,19 +145,15 @@ https://github.com/uliss/pure-data; #X connect 11 0 12 0; #X connect 12 0 13 0; #X connect 13 0 14 0; -#X connect 15 0 21 0; -#X connect 18 0 21 0; -#X connect 16 0 22 0; -#X connect 19 0 22 0; -#X connect 17 0 23 0; -#X connect 20 0 23 0; -#X connect 24 0 25 0; -#X connect 24 1 25 1; -#X connect 25 0 26 0; -#X connect 25 1 26 1; -#X connect 13 1 18 0; -#X connect 13 2 19 0; -#X connect 13 3 20 0; -#X connect 21 0 24 1; -#X connect 22 0 24 2; -#X connect 23 0 24 3; \ No newline at end of file +#X connect 15 0 18 0; +#X connect 16 0 18 0; +#X connect 20 0 21 0; +#X connect 20 1 21 1; +#X connect 21 0 22 0; +#X connect 21 1 22 1; +#X connect 13 1 16 0; +#X connect 13 2 17 0; +#X connect 13 3 19 0; +#X connect 18 0 20 1; +#X connect 17 0 20 2; +#X connect 19 0 20 3; \ No newline at end of file diff --git a/ceammc/ext/doc/seq.matrix.pddoc b/ceammc/ext/doc/seq.matrix.pddoc index 5bc7fe8457..6bc639a27f 100644 --- a/ceammc/ext/doc/seq.matrix.pddoc +++ b/ceammc/ext/doc/seq.matrix.pddoc @@ -18,8 +18,8 @@ number of steps - time interval between steps or - bpm + time + interval between steps or bpm alias to @r 1, play once whole sequence duration. (Recalculates @t property accordingly) - current + current sequence iteration - current repeat - iteration + current + repeat iteration sequencer mode. 'inc': from first to last, 'dec': from last to first, 'tri': from first to last, then back @@ -70,9 +70,9 @@ | | | | | [@mode $1( | | | -[seq.matrix 16 120#4bpm] [loadmsg random] -| | -[ui.matrix 3 16 @size 257 46] +[seq.matrix 16 120|16bpm] [loadmsg random] +| | +[ui.matrix 3 16 @size 320 51] | | | @@ -80,11 +80,11 @@ | [unpack f f f f #a] | -[F] [osc~ 400] [osc~ 1200] [osc~ 100] - | | | - | [@gate #g0( | [@gate #g1( | [@gate #g2( - | | | | | | - [env.ar~ #e0] [env.ar~ #e1] [env.ar~ #e2] +[F] [osc~ 400] + | + | [@gate #g0( [synth.kick2~ #e1] + | | + [env.ar~ #e0] [synth.clap~ #e2] [pan.spread~ 5 #s {w=16}] *|* @@ -98,8 +98,8 @@ #g1 $1 #g2 $1 [X a:1->g0] -[X a:2->g1] -[X a:3->g2] +[X a:2->e1] +[X a:3->e2] [X e0->s:1] [X e1->s:2] [X e2->s:3] diff --git a/ceammc/ext/doc/seq.nbangs-help.pd b/ceammc/ext/doc/seq.nbangs-help.pd index c675f58bbf..2d168f9f8c 100644 --- a/ceammc/ext/doc/seq.nbangs-help.pd +++ b/ceammc/ext/doc/seq.nbangs-help.pd @@ -29,73 +29,73 @@ #X text 110 400 2\.; #X text 150 400 float; #X obj 246 401 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 400 T(ms): time interval between bangs. Type: float. Min -value: 1; -#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 435 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 245 400 T(ms): time interval between bangs. Type: float. Range: +1\...20000; +#X obj 20 445 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 450 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 470 @dur; -#X text 245 470 Get/Set sequence duration. Changing this property also +#X msg 110 485 @dur; +#X text 245 485 Get/Set sequence duration. Changing this property also changes @t interval between bangs. Type: float. Default value: 0\. Min value: 0\.; -#X msg 110 527 @n; -#X text 245 527 Get/Set number of bangs. Type: int. Default value: +#X msg 110 542 @n; +#X text 245 542 Get/Set number of bangs. Type: int. Default value: 0\. Min value: 0\.; -#X msg 110 569 @t; -#X text 245 569 Get/Set time interval between bangs. You could also +#X msg 110 584 @t; +#X text 245 584 Get/Set time interval between bangs. You could also use units values like 100ms or 120bpm. Type: float. Units: ms. Default value: 0\. Range: 1\...20000\.; -#X obj 20 636 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 641 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 651 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 656 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 676 reset; -#X text 245 676 stop bang output and reset bang counter.; -#X msg 110 703 rewind; -#X text 245 703 reset all counters without stopping.; -#X msg 110 730 start; -#X text 245 730 start/stop. Arguments are:; -#X obj 255 753 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 753 [on=1]: if true - starts bang sequence \, otherwise +#X msg 110 691 reset; +#X text 245 691 stop bang output and reset bang counter.; +#X msg 110 718 rewind; +#X text 245 718 reset all counters without stopping.; +#X msg 110 745 start; +#X text 245 745 start/stop. Arguments are:; +#X obj 255 768 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 768 [on=1]: if true - starts bang sequence \, otherwise stops. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 793 stop; -#X text 245 793 stop bang output.; -#X msg 110 820 tick; -#X text 245 820 manually output current sequence element and move to +#X msg 110 808 stop; +#X text 245 808 stop bang output.; +#X msg 110 835 tick; +#X text 245 835 manually output current sequence element and move to next.; -#X obj 20 857 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 862 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 872 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 877 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 863 1\.; -#X text 150 863 *bang*; -#X text 245 863 reset counter and starts output.; -#X text 150 883 *float*; -#X text 245 883 sets number of bangs and starts output.; -#X text 110 903 2\.; -#X text 150 903 *float*; -#X text 245 903 set number of bangs.; -#X obj 20 933 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 938 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 878 1\.; +#X text 150 878 *bang*; +#X text 245 878 reset counter and starts output.; +#X text 150 898 *float*; +#X text 245 898 sets number of bangs and starts output.; +#X text 110 918 2\.; +#X text 150 918 *float*; +#X text 245 918 set number of bangs.; +#X obj 20 948 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 953 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 939 1\.; -#X text 245 939 bang output.; -#X text 110 959 2\.; -#X text 245 959 [i IDX N( - bang index or [done( when done.; +#X text 110 954 1\.; +#X text 245 954 bang output.; +#X text 110 974 2\.; +#X text 245 974 [i IDX N( - bang index or [done( when done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; -#X obj 1 1009 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1012 library: ceammc v0.9.4; -#X text 507 1024 see also:; -#X obj 581 1024 seq.bangs; -#X obj 661 1024 seq.toggles; -#N canvas 10 1031 400 290 info 0; +#X obj 1 1024 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1027 library: ceammc v0.9.6; +#X text 507 1039 see also:; +#X obj 581 1039 seq.bangs; +#X obj 661 1039 seq.toggles; +#N canvas 10 1046 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.nbangs; #X text 10 76 category:; @@ -114,7 +114,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1031 pd info; +#X restore 10 1046 pd info; #X connect 5 0 9 0; #X connect 6 0 9 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/seq.nbangs.pddoc b/ceammc/ext/doc/seq.nbangs.pddoc index 86cfb0b9ee..e87a598ade 100644 --- a/ceammc/ext/doc/seq.nbangs.pddoc +++ b/ceammc/ext/doc/seq.nbangs.pddoc @@ -22,8 +22,8 @@ number of bangs - time interval between - bangs + time + interval between bangs sequence duration. Changing diff --git a/ceammc/ext/doc/seq.phasor-help.pd b/ceammc/ext/doc/seq.phasor-help.pd index f93e78f0ba..34798a60b1 100644 --- a/ceammc/ext/doc/seq.phasor-help.pd +++ b/ceammc/ext/doc/seq.phasor-help.pd @@ -45,59 +45,57 @@ at high frequencies!; value: 0\. Range: 0\...100\.; #X msg 110 606 @invert; #X text 245 606 Get/Set saw inversion mode. If true \, outputs descreasing -waveform. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 663 @on; -#X text 245 663 Get/Set on/off state. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 705 @open; -#X text 245 705 Get/Set output in open [0\..1) range \, otherwise output -range is [0\..1]. Type: int. Default value: 0\. Allowed values: 0 \, -1\.; -#X msg 110 762 @steps; -#X text 245 762 Get/Set numbers of steps. Type: int. Default value: +waveform. Type: bool. Default value: 0\.; +#X msg 110 648 @on; +#X text 245 648 Get/Set on/off state. Type: bool. Default value: 0\.; +#X msg 110 677 @open; +#X text 245 677 Get/Set output in open [0\..1) range \, otherwise output +range is [0\..1]. Type: bool. Default value: 0\.; +#X msg 110 719 @steps; +#X text 245 719 Get/Set numbers of steps. Type: int. Default value: 128\. Min value: 3\.; -#X obj 20 814 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 819 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 771 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 776 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 854 reset; -#X text 245 854 reset phase and stop.; -#X msg 110 881 rewind; -#X text 245 881 reset phase without stopping.; -#X msg 110 908 start; -#X text 245 908 start from current position.; -#X msg 110 935 stop; -#X text 245 935 stop.; -#X msg 110 962 tick; -#X text 245 962 output current value and move to next.; -#X obj 20 999 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1004 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 811 reset; +#X text 245 811 reset phase and stop.; +#X msg 110 838 rewind; +#X text 245 838 reset phase without stopping.; +#X msg 110 865 start; +#X text 245 865 start from current position.; +#X msg 110 892 stop; +#X text 245 892 stop.; +#X msg 110 919 tick; +#X text 245 919 output current value and move to next.; +#X obj 20 956 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 961 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 962 1\.; +#X text 150 962 *float*; +#X text 245 962 1: starts output \, 0: stop.; +#X text 110 982 2\.; +#X text 150 982 *any*; +#X text 245 982 reset phase to 0\.; +#X obj 20 1012 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1017 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1005 1\.; -#X text 150 1005 *float*; -#X text 245 1005 1: starts output \, 0: stop.; -#X text 110 1025 2\.; -#X text 150 1025 *any*; -#X text 245 1025 reset phase to 0\.; -#X obj 20 1055 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1060 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 --49933 0; -#X text 110 1061 1\.; -#X text 245 1061 float value in 0\..1 range.; -#X text 110 1081 2\.; -#X text 245 1081 bang after full cycle.; +#X text 110 1018 1\.; +#X text 245 1018 float value in 0\..1 range.; +#X text 110 1038 2\.; +#X text 245 1038 bang after full cycle.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; -#X obj 1 1131 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1134 library: ceammc v0.9.4; -#N canvas 10 1153 400 290 info 0; +#X obj 1 1088 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1091 library: ceammc v0.9.6; +#N canvas 10 1110 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.phasor; #X text 10 76 category:; @@ -116,7 +114,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1153 pd info; +#X restore 10 1110 pd info; #X connect 7 0 10 0; #X connect 9 0 11 0; #X connect 10 0 14 0; diff --git a/ceammc/ext/doc/seq.phasor.pddoc b/ceammc/ext/doc/seq.phasor.pddoc index 8ae8e9522e..6a8c480019 100644 --- a/ceammc/ext/doc/seq.phasor.pddoc +++ b/ceammc/ext/doc/seq.phasor.pddoc @@ -19,20 +19,20 @@ on strict timing for this object, especially at high frequencies! - + frequency on/off initial state frequency - on/off state - saw inversion mode. If true, - outputs descreasing waveform + units="hertz">frequency + on/off state + saw inversion mode. If true, outputs + descreasing waveform numbers of steps - output in open [0..1) range, - otherwise output range is [0..1] + output in open [0..1) range, otherwise + output range is [0..1] start from current position diff --git a/ceammc/ext/doc/seq.toggles-help.pd b/ceammc/ext/doc/seq.toggles-help.pd index 39a15ca521..d8d21063b3 100644 --- a/ceammc/ext/doc/seq.toggles-help.pd +++ b/ceammc/ext/doc/seq.toggles-help.pd @@ -48,76 +48,76 @@ For event value '1' \, event duration is 100ms \, event length is 60 -49933 0; #X text 110 654 1\.; #X text 150 654 list; -#X obj 246 655 cnv 1 61 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 654 PATTERN: sequencer pattern in beat duration units. -Type: list.; -#X obj 20 699 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 704 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 655 cnv 1 16 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 654 P: sequencer pattern in beat duration units. Type: +list.; +#X obj 20 684 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 689 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 739 @dur; -#X text 245 739 Get/Set whole sequence duration. (Recalculates @t property +#X msg 110 724 @dur; +#X text 245 724 Get/Set whole sequence duration. (Recalculates @t property accordingly). Type: float. Units: ms. Default value: 0\. Min value: 0\.; -#X msg 110 796 @i; -#X text 245 796 (readonly) Get current sequence iteration. Type: int. +#X msg 110 781 @i; +#X text 245 781 (readonly) Get current sequence iteration. Type: int. Default value: 0\. Min value: 0\.; -#X msg 110 838 @inf; -#X text 245 838 alias to @r -1 \, repeats infinitely.; -#X msg 110 867 @length; -#X text 245 867 Get/Set event length. In case of float or float wuth +#X msg 110 823 @inf; +#X text 245 823 alias to @r -1 \, repeats infinitely.; +#X msg 110 852 @length; +#X text 245 852 Get/Set event length. In case of float or float wuth 'ms' suffix - event length is fixed for any event duration. In case of V% - @length expected to be in 0\..100 range and event length is percent of duration. In case of negative @length event duration is calculated as duration+@length \, but not less then 1\. Type: float. Default value: 75\.; -#X msg 110 969 @mode; -#X text 245 969 Get/Set sequencer mode. 'inc': from first to last \, +#X msg 110 954 @mode; +#X text 245 954 Get/Set sequencer mode. 'inc': from first to last \, 'dec': from last to first \, 'tri': from first to last \, then back. Type: symbol. Default value: inc. Allowed values: inc \, dec \, tri.; -#X msg 110 1041 @once; -#X text 245 1041 alias to @r 1 \, play once.; -#X msg 110 1070 @p; -#X text 245 1070 Get/Set sequencer pattern in beat duration units. +#X msg 110 1026 @once; +#X text 245 1026 alias to @r 1 \, play once.; +#X msg 110 1055 @p; +#X text 245 1055 Get/Set sequencer pattern in beat duration units. Type: list.; -#X msg 110 1099 @r; -#X text 245 1099 Get/Set number of whole sequence repeats. If -1: repeat +#X msg 110 1084 @r; +#X text 245 1084 Get/Set number of whole sequence repeats. If -1: repeat infinitely. Type: int. Default value: 1\. Min value: -1\.; -#X msg 110 1141 @ri; -#X text 245 1141 (readonly) Get current repeat iteration. Type: int. +#X msg 110 1126 @ri; +#X text 245 1126 (readonly) Get current repeat iteration. Type: int. Default value: 0\. Min value: 0\.; -#X msg 110 1183 @t; -#X text 245 1183 Get/Set time between beats. Unit values like 100ms -or 240bpm also can be used. Type: float. Units: ms. Default value: -100\. Range: 1\...20000\.; -#X obj 20 1250 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1255 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 1168 @t; +#X text 245 1168 Get/Set time between beats. Unit values like 100ms +\, 240bpm or 60|4bpm also can be used. Type: float. Units: ms. Default +value: 100\. Range: 1\...20000\.; +#X obj 20 1235 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1240 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1290 reset; -#X text 245 1290 reset all counters and stop.; -#X msg 110 1317 rewind; -#X text 245 1317 reset all counters without stopping.; -#X msg 110 1344 start; -#X text 245 1344 start sequencer from current position.; -#X msg 110 1371 stop; -#X text 245 1371 stop sequencer.; -#X msg 110 1398 tick; -#X text 245 1398 output current sequence element and move to next.; -#X obj 20 1435 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1440 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1275 reset; +#X text 245 1275 reset all counters and stop.; +#X msg 110 1302 rewind; +#X text 245 1302 reset all counters without stopping.; +#X msg 110 1329 start; +#X text 245 1329 start sequencer from current position.; +#X msg 110 1356 stop; +#X text 245 1356 stop sequencer.; +#X msg 110 1383 tick; +#X text 245 1383 output current sequence element and move to next.; +#X obj 20 1420 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1425 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1441 1\.; -#X text 150 1441 *bang*; -#X text 245 1441 reset sequence and repeat counters and start sequencer.; -#X text 110 1461 2\.; -#X text 150 1461 *list*; -#X text 245 1461 set new pattern value.; -#X obj 20 1491 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1496 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1426 1\.; +#X text 150 1426 *bang*; +#X text 245 1426 reset sequence and repeat counters and start sequencer.; +#X text 110 1446 2\.; +#X text 150 1446 *list*; +#X text 245 1446 set new pattern value.; +#X obj 20 1476 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1481 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1497 1\.; -#X text 245 1497 1 and 0\.; -#X text 110 1517 2\.; -#X text 245 1517 [i IDX N( - sequence iteration \, [ri IDX N( - repeat +#X text 110 1482 1\.; +#X text 245 1482 1 and 0\.; +#X text 110 1502 2\.; +#X text 245 1502 [i IDX N( - sequence iteration \, [ri IDX N( - repeat iteration \, [ed MS( - event duration \, [el MS( event length or [done( when done.; #X obj 10 48 ui.link @title index @url ../index-help.pd; @@ -125,14 +125,14 @@ when done.; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; -#X obj 1 1597 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1600 library: ceammc v0.9.4; -#N canvas 10 1619 400 290 info 0; +#X obj 1 1582 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1585 library: ceammc v0.9.6; +#N canvas 10 1604 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 seq.toggles; #X text 10 76 category:; @@ -151,7 +151,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1619 pd info; +#X restore 10 1604 pd info; #X connect 15 0 17 0; #X connect 16 0 18 0; #X connect 11 0 19 0; diff --git a/ceammc/ext/doc/seq.toggles.pddoc b/ceammc/ext/doc/seq.toggles.pddoc index 72ff9b2f05..1b5cf14866 100644 --- a/ceammc/ext/doc/seq.toggles.pddoc +++ b/ceammc/ext/doc/seq.toggles.pddoc @@ -31,14 +31,14 @@ event length is 60 (100-40) - sequencer pattern in beat duration - units + sequencer pattern in beat duration units time between beats. Unit values like 100ms or 240bpm also can be - used - sequencer pattern in beat duration units + units="millisecond">time between beats. Unit values like 100ms, 240bpm or 60|4bpm also + can be used + sequencer pattern in beat duration + units number of whole sequence repeats. If -1: repeat infinitely alias to @r -1, repeats infinitely @@ -50,10 +50,10 @@ @length expected to be in 0..100 range and event length is percent of duration. In case of negative @length event duration is calculated as duration+@length, but not less then 1 - current + current sequence iteration - current repeat - iteration + current + repeat iteration sequencer mode. 'inc': from first to last, 'dec': from last to first, 'tri': from first to last, then back diff --git a/ceammc/ext/doc/sequencer-help.pd b/ceammc/ext/doc/sequencer-help.pd index 7b80b22693..080185156a 100644 --- a/ceammc/ext/doc/sequencer-help.pd +++ b/ceammc/ext/doc/sequencer-help.pd @@ -106,13 +106,13 @@ iteration or [done( when done.; #X text 115 45 ::; #X obj 131 48 ui.link @title seq @url ceammc.seq-help.pd; #X obj 1 1320 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1323 library: ceammc v0.9.4; +#X text 10 1323 library: ceammc v0.9.6; #N canvas 10 1342 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 sequencer; #X text 10 76 category:; diff --git a/ceammc/ext/doc/sequencer.pddoc b/ceammc/ext/doc/sequencer.pddoc index 4dde84d2c7..f0d09471be 100644 --- a/ceammc/ext/doc/sequencer.pddoc +++ b/ceammc/ext/doc/sequencer.pddoc @@ -22,7 +22,7 @@ sequence elements - sequence elements + sequence elements whole sequence duration. Changing this property also changes @t interval between bangs. alias to @r 1 alias to @r -1 - current + current sequence iteration - current repeat - iteration + current + repeat iteration sequencer mode. 'inc': from first to last, 'dec': from last to first, 'tri': from first to last, then back diff --git a/ceammc/ext/doc/set.contains-help.pd b/ceammc/ext/doc/set.contains-help.pd index 886e2172e2..ceed543358 100644 --- a/ceammc/ext/doc/set.contains-help.pd +++ b/ceammc/ext/doc/set.contains-help.pd @@ -16,13 +16,14 @@ -49933 0; #X text 110 321 1\.; #X text 150 321 atom; -#X obj 246 322 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 321 X: searched element. Type: atom.; +#X obj 246 322 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 321 SUBJ: searched element. Type: atom.; #X obj 20 351 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 391 @subj; -#X text 245 391 Get/Set searched element. Type: atom.; +#X text 245 391 Get/Set searched element. Type: atom. Default value: +null.; #X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; @@ -42,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 542 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 545 library: ceammc v0.9.4; +#X text 10 545 library: ceammc v0.9.6; #X text 608 557 see also:; #X obj 682 557 data.set; #N canvas 10 564 400 290 info 0; @@ -50,7 +51,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.contains; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.contains.pddoc b/ceammc/ext/doc/set.contains.pddoc index b8a95e2402..c17b2a0133 100644 --- a/ceammc/ext/doc/set.contains.pddoc +++ b/ceammc/ext/doc/set.contains.pddoc @@ -17,10 +17,10 @@ - searched element + searched element - searched element + searched element diff --git a/ceammc/ext/doc/set.diff-help.pd b/ceammc/ext/doc/set.diff-help.pd index 26d749c4ca..2f5d514f60 100644 --- a/ceammc/ext/doc/set.diff-help.pd +++ b/ceammc/ext/doc/set.diff-help.pd @@ -37,7 +37,7 @@ not in second set.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 528 520 see also:; #X obj 602 520 data.set; #X obj 675 520 set.union; @@ -46,7 +46,7 @@ not in second set.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.diff; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.equal-help.pd b/ceammc/ext/doc/set.equal-help.pd index 0b3f40caf0..751ecc6f59 100644 --- a/ceammc/ext/doc/set.equal-help.pd +++ b/ceammc/ext/doc/set.equal-help.pd @@ -21,8 +21,8 @@ -49933 0; #X text 110 351 1\.; #X text 150 351 any; -#X obj 246 352 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 351 ARGS: right set elements. Type: any.; +#X obj 246 352 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 351 SUBJ: right set elements. Type: any.; #X obj 20 381 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 386 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -50,7 +50,7 @@ Default value: Set().; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 605 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 608 library: ceammc v0.9.4; +#X text 10 608 library: ceammc v0.9.6; #X text 608 620 see also:; #X obj 682 620 data.set; #N canvas 10 627 400 290 info 0; @@ -58,7 +58,7 @@ Default value: Set().; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.equal; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.equal.pddoc b/ceammc/ext/doc/set.equal.pddoc index e15e9be573..12635c99da 100644 --- a/ceammc/ext/doc/set.equal.pddoc +++ b/ceammc/ext/doc/set.equal.pddoc @@ -17,7 +17,7 @@ - right set elements + right set elements right set elements of diff --git a/ceammc/ext/doc/set.intersect-help.pd b/ceammc/ext/doc/set.intersect-help.pd index 1baa1eccf5..55f6f70ff5 100644 --- a/ceammc/ext/doc/set.intersect-help.pd +++ b/ceammc/ext/doc/set.intersect-help.pd @@ -38,7 +38,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 528 520 see also:; #X obj 602 520 data.set; #X obj 675 520 set.union; @@ -47,7 +47,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.intersect; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.size-help.pd b/ceammc/ext/doc/set.size-help.pd index 71f57fbdea..0f5d3e9f6f 100644 --- a/ceammc/ext/doc/set.size-help.pd +++ b/ceammc/ext/doc/set.size-help.pd @@ -28,7 +28,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 608 520 see also:; #X obj 682 520 data.set; #N canvas 10 527 400 290 info 0; @@ -36,7 +36,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.size; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.symdiff-help.pd b/ceammc/ext/doc/set.symdiff-help.pd index 544516f2dd..9bbb7a682a 100644 --- a/ceammc/ext/doc/set.symdiff-help.pd +++ b/ceammc/ext/doc/set.symdiff-help.pd @@ -39,7 +39,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 535 520 see also:; #X obj 609 520 data.set; #X obj 682 520 set.diff; @@ -48,7 +48,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.symdiff; #X text 10 76 category:; diff --git a/ceammc/ext/doc/set.union-help.pd b/ceammc/ext/doc/set.union-help.pd index 8b647918df..0eaa8a458b 100644 --- a/ceammc/ext/doc/set.union-help.pd +++ b/ceammc/ext/doc/set.union-help.pd @@ -38,7 +38,7 @@ are ignored.; #X text 115 45 ::; #X obj 131 48 ui.link @title data @url ceammc.data-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 500 520 see also:; #X obj 574 520 data.set; #X obj 647 520 set.intersect; @@ -47,7 +47,7 @@ are ignored.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 set.union; #X text 10 76 category:; diff --git a/ceammc/ext/doc/sfizz~-help.pd b/ceammc/ext/doc/sfizz~-help.pd index 180dde02b5..110c060b01 100644 --- a/ceammc/ext/doc/sfizz~-help.pd +++ b/ceammc/ext/doc/sfizz~-help.pd @@ -38,10 +38,10 @@ value: 0\.; Default value: 440\.; #X msg 110 621 @gain; #X text 245 621 Get/Set output gain (same as @value but in amp units). -Type: float. Default value: 0.429042\. Range: 0\...10\.; +Type: float. Default value: 0.429\. Range: 0\...16\.; #X msg 110 663 @poly; #X text 245 663 Get/Set max number of voices. Type: int. Default value: -64\. Range: 1\...1024\.; +64\. Range: 1\...256\.; #X msg 110 705 @sf; #X text 245 705 Get/Set soundfont path or builtin waveform name: #sine \, #tri \, #saw \, #square \, #noise. Type: symbol.; @@ -89,13 +89,13 @@ float. Range: -1\...1\.; #X text 255 1212 VALUE: value in -0x2000\..0x1fff range \, with 0 center. Type: int. Range: -8192\...8191\.; #X msg 110 1252 bendsens; -#X text 245 1252 set pitchbend sensivity (NOT SUPPORTED \, this is +#X text 245 1252 set pitchbend sensitivity (NOT SUPPORTED \, this is stub function). Arguments are:; #X obj 255 1290 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; #X text 255 1290 [CHAN=0]: MIDI channel \, ignored. Type: int. Range: 0\...16\.; #X obj 255 1313 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1313 RANGE: semitones sensivity. Type: int. Range: 0\...64\. +#X text 255 1313 RANGE: semitones sensitivity. Type: int. Range: 0\...64\. Units: semitone.; #X msg 110 1353 cc; #X text 245 1353 control change. Arguments are:; @@ -177,76 +177,83 @@ channel configuration.; #X text 255 2183 NOTE: MIDI note. Type: int. Range: 0\...127\.; #X obj 255 2206 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; #X text 255 2206 VEL: MIDI velocity. Type: float. Range: 0\...127\.; -#X msg 110 2231 reset; -#X text 245 2231 reset all synth channels.; -#X msg 110 2258 soft; -#X text 245 2258 soft (left) pedal \, activate the soft strike effect. +#X msg 110 2231 prog; +#X text 245 2231 program change. Arguments are:; +#X obj 255 2254 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2254 [CHAN=0]: MIDI channel \, if zero or ommited set for +all channels. Type: int. Range: 0\...16\.; +#X obj 255 2292 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2292 PGM: program number. Type: int. Range: 0\...16383\.; +#X msg 110 2317 reset; +#X text 245 2317 reset all synth channels.; +#X msg 110 2344 soft; +#X text 245 2344 soft (left) pedal \, activate the soft strike effect. Arguments are:; -#X obj 255 2296 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2296 CHAN: MIDI channel \, ignored. Type: int. Range: 0\...15\.; -#X obj 255 2319 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2319 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 2382 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2382 CHAN: MIDI channel \, ignored. Type: int. Range: 0\...15\.; +#X obj 255 2405 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2405 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 2344 sostenuto; -#X text 245 2344 sostenuto (middle) pedal \, hold notes pressed before +#X msg 110 2430 sostenuto; +#X text 245 2430 sostenuto (middle) pedal \, hold notes pressed before pedal activation \, new notes are passed untouched. Release holded notes when set to off. Arguments are:; -#X obj 255 2397 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2397 CHAN: MIDI channel \, ignored. Type: int. Range: 0\...15\.; -#X obj 255 2420 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2420 VAL: pedal state. Type: int. Allowed values: 0 \, +#X obj 255 2483 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2483 CHAN: MIDI channel \, ignored. Type: int. Range: 0\...15\.; +#X obj 255 2506 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2506 VAL: pedal state. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 2445 sounds_off; -#X text 245 2445 immediately stop all notes on a MIDI channel (skips +#X msg 110 2531 sounds_off; +#X text 245 2531 immediately stop all notes on a MIDI channel (skips release phase). Arguments are:; -#X obj 255 2483 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2483 [CHAN=0]: MIDI channel. Type: int.; -#X msg 110 2508 tune:12; -#X text 245 2508 set octave tuning program in cents deviations. Arguments +#X obj 255 2569 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2569 [CHAN=0]: MIDI channel. Type: int.; +#X msg 110 2594 tune:12; +#X text 245 2594 set octave tuning program in cents deviations. Arguments are:; -#X obj 255 2531 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2531 BANK: tuning bank (not related to MIDI instrument +#X obj 255 2617 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2617 BANK: tuning bank (not related to MIDI instrument bank). Type: int. Range: 1\...256\.; -#X obj 255 2569 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2569 PRESET: tuning preset (not related to MIDI instrument +#X obj 255 2655 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2655 PRESET: tuning preset (not related to MIDI instrument program). Type: int. Range: 1\...256\.; -#X obj 255 2607 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2607 TUNES: list of scale deviations from 12TET in cents. +#X obj 255 2693 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2693 TUNES: list of scale deviations from 12TET in cents. Type: list.; -#X msg 110 2647 tunesel; -#X text 245 2647 select tuning bank and preset. Arguments are:; -#X obj 255 2670 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2670 BANK: tuning bank (not related to MIDI instrument +#X msg 110 2733 tunesel; +#X text 245 2733 select tuning bank and preset. Arguments are:; +#X obj 255 2756 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2756 BANK: tuning bank (not related to MIDI instrument bank). Type: int. Range: 1\...256\.; -#X obj 255 2708 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2708 PRESET: tuning preset (not related to MIDI instrument +#X obj 255 2794 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2794 PRESET: tuning preset (not related to MIDI instrument program). Type: int. Range: 1\...256\.; -#X obj 20 2758 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2763 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 2844 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2849 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2764 1\.; -#X text 150 2764 *symbol*; -#X text 245 2764 load mod file.; -#X obj 20 2794 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2799 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2850 1\.; +#X text 150 2850 *symbol*; +#X text 245 2850 load mod file.; +#X obj 20 2880 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2885 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2800 1\.; -#X text 245 2800 left channel and property output.; -#X text 110 2820 2\.; -#X text 245 2820 right channel.; +#X text 110 2886 1\.; +#X text 245 2886 left channel and property output.; +#X text 110 2906 2\.; +#X text 245 2906 right channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; -#X obj 1 2870 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2873 library: ceammc v0.9.4; -#N canvas 10 2892 400 290 info 0; +#X obj 1 2956 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2959 library: ceammc v0.9.6; +#N canvas 10 2978 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 sfizz~; #X text 10 76 category:; @@ -265,7 +272,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2892 pd info; +#X restore 10 2978 pd info; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/sfizz~.pddoc b/ceammc/ext/doc/sfizz~.pddoc index 19564c8c10..98ecbd7bf0 100644 --- a/ceammc/ext/doc/sfizz~.pddoc +++ b/ceammc/ext/doc/sfizz~.pddoc @@ -51,6 +51,12 @@ note MIDI velocity + + program change + + MIDI channel, if zero or ommited set for all channels + program + number pitchband change @@ -67,11 +73,12 @@ MIDI channel, ignored value in -1..+1 range, with 0 center. - set pitchbend sensivity (NOT SUPPORTED, this is stub function) + set pitchbend sensitivity (NOT SUPPORTED, this is stub + function) MIDI channel, ignored semitones sensivity + required="true">semitones sensitivity set octave tuning program in cents deviations tuning bank @@ -144,18 +151,18 @@ soundfont path or builtin waveform name: #sine, #tri, #saw, #square, #noise - max number + max number of voices - number midi + number midi channels - A4 standard + A4 standard tuning - dict of control + dict of control key labels - dict of controller - labels - - output gain (same as @value but in amp units) + dict of + controller labels + output + gain (same as @value but in amp units) output volume (same as @gain but in db) diff --git a/ceammc/ext/doc/snd.file-help.pd b/ceammc/ext/doc/snd.file-help.pd index d045c5390a..3ad818ddbc 100644 --- a/ceammc/ext/doc/snd.file-help.pd +++ b/ceammc/ext/doc/snd.file-help.pd @@ -65,8 +65,8 @@ Type: float. Default value: 30\. Range: 1\...99\.; #X msg 110 921 @sr; #X text 245 921 (readonly) Get source file samplerate. Type: list.; #X msg 110 950 @verbose; -#X text 245 950 Get/Set verbose output to Pd window. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 950 (initonly) Get/Set verbose output to Pd window. Type: +bool. Default value: 0\.; #X obj 20 1002 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 1007 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; @@ -129,13 +129,13 @@ R as float value or integer fraction - 44100/48000\. Type: property.; #X text 115 45 ::; #X obj 131 48 ui.link @title snd @url ceammc.snd-help.pd; #X obj 1 1707 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1710 library: ceammc v0.9.4; +#X text 10 1710 library: ceammc v0.9.6; #N canvas 10 1729 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 snd.file; #X text 10 76 category:; diff --git a/ceammc/ext/doc/snd.file.pddoc b/ceammc/ext/doc/snd.file.pddoc index 12e185cac0..9c05781479 100644 --- a/ceammc/ext/doc/snd.file.pddoc +++ b/ceammc/ext/doc/snd.file.pddoc @@ -45,19 +45,20 @@ integer fraction - 44100/48000 - list of supported formats - source file samplerate - filename - list of number of loaded samples - into each array - list of loaded channels into - each array + source file + samplerate + filename + list of number of + loaded samples into each array + list of loaded + channels into each array SMPTE framerate for SMPTE offset calculations - verbose output to Pd - window + verbose output to + Pd window diff --git a/ceammc/ext/doc/spat.pan4~-help.pd b/ceammc/ext/doc/spat.pan4~-help.pd index b1e100b01b..240f584ce7 100644 --- a/ceammc/ext/doc/spat.pan4~-help.pd +++ b/ceammc/ext/doc/spat.pan4~-help.pd @@ -35,47 +35,47 @@ float. Range: 0\...2π; #X obj 20 565 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 600 @active; -#X text 245 600 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 642 @angle; -#X text 245 642 Get/Set panning position in radians. Type: float. Default +#X text 245 600 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 629 @angle; +#X text 245 629 Get/Set panning position in radians. Type: float. Default value: 0\. Range: 0\...2π.; -#X msg 110 684 @radius; -#X text 245 684 Get/Set distance from circle center. Type: float. Default +#X msg 110 671 @radius; +#X text 245 671 Get/Set distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 736 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 741 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 723 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 728 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 742 1\.; -#X text 245 742 input signal.; -#X text 150 762 *list*; -#X text 245 762 set radius and angle.; -#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 797 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 729 1\.; +#X text 245 729 input signal.; +#X text 150 749 *list*; +#X text 245 749 set radius and angle.; +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 798 1\.; -#X text 245 798 1st output channel.; -#X text 110 818 2\.; -#X text 245 818 2nd output channel.; -#X text 110 838 3\.; -#X text 245 838 3rd output channel.; -#X text 110 858 4\.; -#X text 245 858 4th output channel.; +#X text 110 785 1\.; +#X text 245 785 1st output channel.; +#X text 110 805 2\.; +#X text 245 805 2nd output channel.; +#X text 110 825 3\.; +#X text 245 825 3rd output channel.; +#X text 110 845 4\.; +#X text 245 845 4th output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 908 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 911 library: ceammc v0.9.4; -#X text 629 923 see also:; -#X obj 703 923 pan8~; -#N canvas 10 930 400 290 info 0; +#X obj 1 895 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 898 library: ceammc v0.9.6; +#X text 629 910 see also:; +#X obj 703 910 pan8~; +#N canvas 10 917 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 spat.pan4~; #X text 10 76 category:; @@ -94,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 930 pd info; +#X restore 10 917 pd info; #X connect 7 0 9 0; #X connect 9 0 10 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/spat.pan4~.pddoc b/ceammc/ext/doc/spat.pan4~.pddoc index f8b7198379..745ecfebba 100644 --- a/ceammc/ext/doc/spat.pan4~.pddoc +++ b/ceammc/ext/doc/spat.pan4~.pddoc @@ -30,8 +30,7 @@ position in radians distance from circle center - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/spat.pan8~-help.pd b/ceammc/ext/doc/spat.pan8~-help.pd index 75dd29b1d8..e910e69f5c 100644 --- a/ceammc/ext/doc/spat.pan8~-help.pd +++ b/ceammc/ext/doc/spat.pan8~-help.pd @@ -39,55 +39,55 @@ float. Range: 0\...2π; #X obj 20 565 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 600 @active; -#X text 245 600 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 642 @angle; -#X text 245 642 Get/Set panning position in radians. Type: float. Default +#X text 245 600 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 629 @angle; +#X text 245 629 Get/Set panning position in radians. Type: float. Default value: 0\. Range: 0\...2π.; -#X msg 110 684 @radius; -#X text 245 684 Get/Set distance from circle center. Type: float. Default +#X msg 110 671 @radius; +#X text 245 671 Get/Set distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 736 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 741 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 723 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 728 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 742 1\.; -#X text 245 742 input signal.; -#X text 150 762 *list*; -#X text 245 762 set radius and angle.; -#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 797 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 729 1\.; +#X text 245 729 input signal.; +#X text 150 749 *list*; +#X text 245 749 set radius and angle.; +#X obj 20 779 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 784 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 798 1\.; -#X text 245 798 1st output channel.; -#X text 110 818 2\.; -#X text 245 818 2nd output channel.; -#X text 110 838 3\.; -#X text 245 838 3rd output channel.; -#X text 110 858 4\.; -#X text 245 858 4th output channel.; -#X text 110 878 5\.; -#X text 245 878 5th output channel.; -#X text 110 898 6\.; -#X text 245 898 6th output channel.; -#X text 110 918 7\.; -#X text 245 918 7th output channel.; -#X text 110 938 8\.; -#X text 245 938 8th output channel.; +#X text 110 785 1\.; +#X text 245 785 1st output channel.; +#X text 110 805 2\.; +#X text 245 805 2nd output channel.; +#X text 110 825 3\.; +#X text 245 825 3rd output channel.; +#X text 110 845 4\.; +#X text 245 845 4th output channel.; +#X text 110 865 5\.; +#X text 245 865 5th output channel.; +#X text 110 885 6\.; +#X text 245 885 6th output channel.; +#X text 110 905 7\.; +#X text 245 905 7th output channel.; +#X text 110 925 8\.; +#X text 245 925 8th output channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 988 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 991 library: ceammc v0.9.4; -#X text 629 1003 see also:; -#X obj 703 1003 pan4~; -#N canvas 10 1010 400 290 info 0; +#X obj 1 975 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 978 library: ceammc v0.9.6; +#X text 629 990 see also:; +#X obj 703 990 pan4~; +#N canvas 10 997 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 spat.pan8~; #X text 10 76 category:; @@ -106,7 +106,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1010 pd info; +#X restore 10 997 pd info; #X connect 7 0 9 0; #X connect 9 0 10 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/spat.pan8~.pddoc b/ceammc/ext/doc/spat.pan8~.pddoc index f44402a897..b43fa65610 100644 --- a/ceammc/ext/doc/spat.pan8~.pddoc +++ b/ceammc/ext/doc/spat.pan8~.pddoc @@ -30,8 +30,7 @@ position in radians distance from circle center - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/spat.zita6x8~-help.pd b/ceammc/ext/doc/spat.zita6x8~-help.pd index ebfb17e9eb..657b3539d3 100644 --- a/ceammc/ext/doc/spat.zita6x8~-help.pd +++ b/ceammc/ext/doc/spat.zita6x8~-help.pd @@ -45,138 +45,138 @@ value: 0\. Range: 0\...1\.; #X text 245 648 Get/Set 6th source panning position. Type: float. Default value: 0\. Range: 0\...1\.; #X msg 110 690 @active; -#X text 245 690 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 732 @dry0; -#X text 245 732 Get/Set 1st source direct sound level. Type: float. +#X text 245 690 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 719 @dry0; +#X text 245 719 Get/Set 1st source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 774 @dry1; -#X text 245 774 Get/Set 2nd source direct sound level. Type: float. +#X msg 110 761 @dry1; +#X text 245 761 Get/Set 2nd source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 816 @dry2; -#X text 245 816 Get/Set 3rd source direct sound level. Type: float. +#X msg 110 803 @dry2; +#X text 245 803 Get/Set 3rd source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 858 @dry3; -#X text 245 858 Get/Set 4th source direct sound level. Type: float. +#X msg 110 845 @dry3; +#X text 245 845 Get/Set 4th source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 900 @dry4; -#X text 245 900 Get/Set 5th source direct sound level. Type: float. +#X msg 110 887 @dry4; +#X text 245 887 Get/Set 5th source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 942 @dry5; -#X text 245 942 Get/Set 6th source direct sound level. Type: float. +#X msg 110 929 @dry5; +#X text 245 929 Get/Set 6th source direct sound level. Type: float. Units: db. Default value: -3\. Range: -60\...0\.; -#X msg 110 984 @r0; -#X text 245 984 Get/Set 1st source distance from circle center. Type: +#X msg 110 971 @r0; +#X text 245 971 Get/Set 1st source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1026 @r1; -#X text 245 1026 Get/Set 2nd source distance from circle center. Type: +#X msg 110 1013 @r1; +#X text 245 1013 Get/Set 2nd source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1068 @r2; -#X text 245 1068 Get/Set 3rd source distance from circle center. Type: +#X msg 110 1055 @r2; +#X text 245 1055 Get/Set 3rd source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1110 @r3; -#X text 245 1110 Get/Set 4th source distance from circle center. Type: +#X msg 110 1097 @r3; +#X text 245 1097 Get/Set 4th source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1152 @r4; -#X text 245 1152 Get/Set 5th source distance from circle center. Type: +#X msg 110 1139 @r4; +#X text 245 1139 Get/Set 5th source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1194 @r5; -#X text 245 1194 Get/Set 6th source distance from circle center. Type: +#X msg 110 1181 @r5; +#X text 245 1181 Get/Set 6th source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 1236 @t0; -#X text 245 1236 Get/Set 1st source reverb time (in seconds) to decay +#X msg 110 1223 @t0; +#X text 245 1223 Get/Set 1st source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1293 @t1; -#X text 245 1293 Get/Set 2nd source reverb time (in seconds) to decay +#X msg 110 1280 @t1; +#X text 245 1280 Get/Set 2nd source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1350 @t2; -#X text 245 1350 Get/Set 3rd source reverb time (in seconds) to decay +#X msg 110 1337 @t2; +#X text 245 1337 Get/Set 3rd source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1407 @t3; -#X text 245 1407 Get/Set 4th source reverb time (in seconds) to decay +#X msg 110 1394 @t3; +#X text 245 1394 Get/Set 4th source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1464 @t4; -#X text 245 1464 Get/Set 5th source reverb time (in seconds) to decay +#X msg 110 1451 @t4; +#X text 245 1451 Get/Set 5th source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1521 @t5; -#X text 245 1521 Get/Set 6th source reverb time (in seconds) to decay +#X msg 110 1508 @t5; +#X text 245 1508 Get/Set 6th source reverb time (in seconds) to decay 60dB in low and mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 0\...90\.; -#X msg 110 1578 @wet0; -#X text 245 1578 Get/Set 1st source reverb sound level. Type: float. +#X msg 110 1565 @wet0; +#X text 245 1565 Get/Set 1st source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X msg 110 1620 @wet1; -#X text 245 1620 Get/Set 2nd source reverb sound level. Type: float. +#X msg 110 1607 @wet1; +#X text 245 1607 Get/Set 2nd source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X msg 110 1662 @wet2; -#X text 245 1662 Get/Set 3rd source reverb sound level. Type: float. +#X msg 110 1649 @wet2; +#X text 245 1649 Get/Set 3rd source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X msg 110 1704 @wet3; -#X text 245 1704 Get/Set 4th source reverb sound level. Type: float. +#X msg 110 1691 @wet3; +#X text 245 1691 Get/Set 4th source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X msg 110 1746 @wet4; -#X text 245 1746 Get/Set 5th source reverb sound level. Type: float. +#X msg 110 1733 @wet4; +#X text 245 1733 Get/Set 5th source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X msg 110 1788 @wet5; -#X text 245 1788 Get/Set 6th source reverb sound level. Type: float. +#X msg 110 1775 @wet5; +#X text 245 1775 Get/Set 6th source reverb sound level. Type: float. Units: db. Default value: -8\. Range: -60\...0\.; -#X obj 20 1840 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1845 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1827 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1832 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1880 reset; -#X text 245 1880 reset reverb.; -#X obj 20 1917 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1922 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1867 reset; +#X text 245 1867 reset reverb.; +#X obj 20 1904 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1909 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1923 1\.; -#X text 245 1923 1st source input.; -#X text 110 1943 2\.; -#X text 245 1943 2nd source input.; -#X text 110 1963 3\.; -#X text 245 1963 3rd source input.; -#X text 110 1983 4\.; -#X text 245 1983 4th source input.; -#X text 110 2003 5\.; -#X text 245 2003 5th source input.; -#X text 110 2023 6\.; -#X text 245 2023 6th source input.; -#X obj 20 2053 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2058 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1910 1\.; +#X text 245 1910 1st source input.; +#X text 110 1930 2\.; +#X text 245 1930 2nd source input.; +#X text 110 1950 3\.; +#X text 245 1950 3rd source input.; +#X text 110 1970 4\.; +#X text 245 1970 4th source input.; +#X text 110 1990 5\.; +#X text 245 1990 5th source input.; +#X text 110 2010 6\.; +#X text 245 2010 6th source input.; +#X obj 20 2040 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2045 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2059 1\.; -#X text 245 2059 1st output.; -#X text 110 2079 2\.; -#X text 245 2079 2dn output.; -#X text 110 2099 3\.; -#X text 245 2099 3rd output.; -#X text 110 2119 4\.; -#X text 245 2119 4th output.; -#X text 110 2139 5\.; -#X text 245 2139 5th output.; -#X text 110 2159 6\.; -#X text 245 2159 6th output.; -#X text 110 2179 7\.; -#X text 245 2179 7th output.; -#X text 110 2199 8\.; -#X text 245 2199 8th output.; +#X text 110 2046 1\.; +#X text 245 2046 1st output.; +#X text 110 2066 2\.; +#X text 245 2066 2dn output.; +#X text 110 2086 3\.; +#X text 245 2086 3rd output.; +#X text 110 2106 4\.; +#X text 245 2106 4th output.; +#X text 110 2126 5\.; +#X text 245 2126 5th output.; +#X text 110 2146 6\.; +#X text 245 2146 6th output.; +#X text 110 2166 7\.; +#X text 245 2166 7th output.; +#X text 110 2186 8\.; +#X text 245 2186 8th output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 2249 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2252 library: ceammc v0.9.4; -#N canvas 10 2271 400 290 info 0; +#X obj 1 2236 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2239 library: ceammc v0.9.6; +#N canvas 10 2258 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 spat.zita6x8~; #X text 10 76 category:; @@ -195,7 +195,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2271 pd info; +#X restore 10 2258 pd info; #X connect 4 0 6 0; #X connect 6 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/spat.zita6x8~.pddoc b/ceammc/ext/doc/spat.zita6x8~.pddoc index 3f5a677d2d..c9dd79e755 100644 --- a/ceammc/ext/doc/spat.zita6x8~.pddoc +++ b/ceammc/ext/doc/spat.zita6x8~.pddoc @@ -83,8 +83,7 @@ units="decibel">5th source reverb sound level 6th source reverb sound level - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/spat.zita8~-help.pd b/ceammc/ext/doc/spat.zita8~-help.pd index 99ed7d342d..89c5efd10d 100644 --- a/ceammc/ext/doc/spat.zita8~-help.pd +++ b/ceammc/ext/doc/spat.zita8~-help.pd @@ -24,83 +24,83 @@ #X text 110 438 1\.; #X text 150 438 float; #X obj 246 439 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 438 RADIUS: @radius property. Type: float.; +#X text 245 438 RADIUS: @radius property. Type: float. Range: 0\...1; #X text 110 458 2\.; #X text 150 458 float; #X obj 246 459 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 458 ANGLE: @angle property. Type: float.; +#X text 245 458 ANGLE: @angle property. Type: float. Range: 0\...1; #X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 493 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 528 @active; -#X text 245 528 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 570 @angle; -#X text 245 570 Get/Set source panning position. Type: float. Default +#X text 245 528 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 557 @angle; +#X text 245 557 Get/Set source panning position. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 612 @decay_low; -#X text 245 612 Get/Set time (in seconds) to decay 60dB in low-frequency +#X msg 110 599 @decay_low; +#X text 245 599 Get/Set time (in seconds) to decay 60dB in low-frequency band. Type: float. Units: sec. Default value: 3\. Range: 1\...60\.; -#X msg 110 669 @decay_mid; -#X text 245 669 Get/Set time (in seconds) to decay 60dB in mid-frequency +#X msg 110 656 @decay_mid; +#X text 245 656 Get/Set time (in seconds) to decay 60dB in mid-frequency band. Type: float. Units: sec. Default value: 2\. Range: 1\...60\.; -#X msg 110 726 @delay; -#X text 245 726 Get/Set a delay of 20 to 100 ms operating on the 'wet' +#X msg 110 713 @delay; +#X text 245 713 Get/Set a delay of 20 to 100 ms operating on the 'wet' signal. Large values will provide the impression of a larger room. Type: float. Units: ms. Default value: 60\. Range: 20\...100\.; -#X msg 110 798 @dump_hf; -#X text 245 798 Get/Set Frequency (Hz) at which the high-frequency +#X msg 110 785 @dump_hf; +#X text 245 785 Get/Set Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60\. Type: float. Units: Hz. Default value: 6000\. Range: 1500\...47040\.; -#X msg 110 855 @freq_low; -#X text 245 855 Get/Set Crossover frequency (Hz) separating low and +#X msg 110 842 @freq_low; +#X text 245 842 Get/Set Crossover frequency (Hz) separating low and middle frequencies. Type: float. Units: Hz. Default value: 200\. Range: 50\...1000\.; -#X msg 110 912 @radius; -#X text 245 912 Get/Set source distance from circle center. Type: float. +#X msg 110 899 @radius; +#X text 245 899 Get/Set source distance from circle center. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 964 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 969 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 951 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 956 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1004 reset; -#X text 245 1004 reset spat and reverb.; -#X obj 20 1041 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1046 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 991 reset; +#X text 245 991 reset spat and reverb.; +#X obj 20 1028 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1033 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1047 1\.; -#X text 245 1047 input.; -#X obj 20 1077 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1082 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1034 1\.; +#X text 245 1034 input.; +#X obj 20 1064 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1069 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1083 1\.; -#X text 245 1083 1st output.; -#X text 110 1103 2\.; -#X text 245 1103 2dn output.; -#X text 110 1123 3\.; -#X text 245 1123 3rd output.; -#X text 110 1143 4\.; -#X text 245 1143 4th output.; -#X text 110 1163 5\.; -#X text 245 1163 5th output.; -#X text 110 1183 6\.; -#X text 245 1183 6th output.; -#X text 110 1203 7\.; -#X text 245 1203 7th output.; -#X text 110 1223 8\.; -#X text 245 1223 8th output.; +#X text 110 1070 1\.; +#X text 245 1070 1st output.; +#X text 110 1090 2\.; +#X text 245 1090 2dn output.; +#X text 110 1110 3\.; +#X text 245 1110 3rd output.; +#X text 110 1130 4\.; +#X text 245 1130 4th output.; +#X text 110 1150 5\.; +#X text 245 1150 5th output.; +#X text 110 1170 6\.; +#X text 245 1170 6th output.; +#X text 110 1190 7\.; +#X text 245 1190 7th output.; +#X text 110 1210 8\.; +#X text 245 1210 8th output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title spat @url ceammc.spat-help.pd; -#X obj 1 1273 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1276 library: ceammc v0.9.4; -#N canvas 10 1295 400 290 info 0; +#X obj 1 1260 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1263 library: ceammc v0.9.6; +#N canvas 10 1282 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 spat.zita8~; #X text 10 76 category:; @@ -119,7 +119,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1295 pd info; +#X restore 10 1282 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/spat.zita8~.pddoc b/ceammc/ext/doc/spat.zita8~.pddoc index ae5182dd76..3813b73e85 100644 --- a/ceammc/ext/doc/spat.zita8~.pddoc +++ b/ceammc/ext/doc/spat.zita8~.pddoc @@ -14,8 +14,10 @@ 0.9.4 - @radius property - @angle property + @radius + property + @angle + property reset spat and reverb @@ -33,12 +35,11 @@ units="millisecond">a delay of 20 to 100 ms operating on the 'wet' signal. Large values will provide the impression of a larger room Crossover frequency (Hz) separating low and middle frequencies + units="hertz">Crossover frequency (Hz) separating low and middle frequencies Frequency (Hz) at which the high-frequency T60 is half the middle-band's + units="hertz">Frequency (Hz) at which the high-frequency T60 is half the middle-band's T60 - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/speech.flite-help.pd b/ceammc/ext/doc/speech.flite-help.pd index 55adbeb84e..a7e2bcdfad 100644 --- a/ceammc/ext/doc/speech.flite-help.pd +++ b/ceammc/ext/doc/speech.flite-help.pd @@ -76,13 +76,13 @@ kal16\. Allowed values: kal16 \, slt \, rms \, awb.; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 976 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 979 library: ceammc v0.9.4; +#X text 10 979 library: ceammc v0.9.6; #N canvas 10 998 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 speech.flite; #X text 10 76 category:; diff --git a/ceammc/ext/doc/speech.flite~-help.pd b/ceammc/ext/doc/speech.flite~-help.pd index e5e28a5c2b..cea7a7dded 100644 --- a/ceammc/ext/doc/speech.flite~-help.pd +++ b/ceammc/ext/doc/speech.flite~-help.pd @@ -62,7 +62,7 @@ kal16\. Allowed values: kal16 \, slt \, rms \, awb.; #X text 115 45 ::; #X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; #X obj 1 814 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 817 library: ceammc v0.9.4; +#X text 10 817 library: ceammc v0.9.6; #X text 579 829 see also:; #X obj 653 829 speech.flite; #N canvas 10 836 400 290 info 0; @@ -70,7 +70,7 @@ kal16\. Allowed values: kal16 \, slt \, rms \, awb.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 speech.flite~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/speech.rhvoice~-help.pd b/ceammc/ext/doc/speech.rhvoice~-help.pd new file mode 100644 index 0000000000..fdedf3b894 --- /dev/null +++ b/ceammc/ext/doc/speech.rhvoice~-help.pd @@ -0,0 +1,118 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 515 50 cnv 1 250 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 515 50 RHVoice text to speech synthesis; +#X obj 1 1 cnv 5 765 40 empty empty speech.rhvoice~ 20 20 0 20 -104026 +-4096 0; +#X obj 414 11 ceammc/rhvoice~; +#X obj 548 11 rhvoice~; +#X obj 631 11 speech.rhvoice~; +#X obj 210 80 cnv 1 555 136 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Note: no voices data in distributed with PureData-ceammc +\, you have to install voices manually; +#X text 215 120 Download language and voice datafiles and put them +into ~/Documents/Pd/rhvoice directory; +#X obj 215 160 ui.link @background_color 0.98039 0.98039 0.98039 +@title https://github.com/RHVoice/Russian @url +https://github.com/RHVoice/Russian; +#X obj 215 183 ui.link @background_color 0.98039 0.98039 0.98039 +@title https://github.com/RHVoice/anna-rus @url +https://github.com/RHVoice/anna-rus; +#X obj 50 244 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 174 244 speech.rhvoice~.voices; +#X text 414 244 <-- see here; +#X obj 50 273 metro 1000; +#X obj 50 302 flow.count; +#X obj 174 302 ui.hsl -1 1 @show_value 1; +#X obj 328 302 ui.hsl -1 1 @show_value 1; +#X msg 174 331 @pitch \$1; +#X msg 328 331 @rate \$1; +#X obj 50 360 speech.rhvoice~; +#X obj 155 388 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 417 ui.gain~ @size 120 16; +#X obj 299 417 ui.dsp~; +#X obj 50 446 dac~; +#X obj 20 495 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 500 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 535 @pitch; +#X text 245 535 Get/Set voice pitch. Type: float. Default value: 0\. +Range: -1\...1\.; +#X msg 110 577 @rate; +#X text 245 577 Get/Set speaking rate. Type: float. Default value: +0\. Range: -1\...1\.; +#X msg 110 619 @voice; +#X text 245 619 Get/Set voice. Type: symbol. Default value: Anna.; +#X msg 110 648 @volume; +#X text 245 648 Get/Set voice volume. Type: float. Default value: 1\. +Range: 0\...1\.; +#X obj 20 700 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 705 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 740 clear; +#X text 245 740 clear TTS queue.; +#X msg 110 767 stop; +#X text 245 767 stops speech and clear TTS queue.; +#X obj 20 804 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 809 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 810 1\.; +#X text 150 810 *float*; +#X text 245 810 speak number.; +#X text 150 830 *symbol*; +#X text 245 830 speak symbol.; +#X text 150 850 *list*; +#X text 245 850 speak list of symbols.; +#X obj 20 880 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 885 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 886 1\.; +#X text 245 886 TTS output.; +#X text 110 906 2\.; +#X text 245 906 bang on done.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title misc @url ceammc.misc-help.pd; +#X obj 1 956 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 959 library: ceammc v0.9.6; +#X text 571 971 see also:; +#X obj 645 971 speech.flite~; +#N canvas 10 978 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 speech.rhvoice~; +#X text 10 76 category:; +#X text 120 76 misc; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 speak \, speech \, flite; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 978 pd info; +#X connect 11 0 14 0; +#X connect 14 0 15 0; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 15 0 20 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; +#X connect 20 1 21 0; +#X connect 20 0 22 0; +#X connect 22 0 24 0; +#X connect 22 0 24 1; \ No newline at end of file diff --git a/ceammc/ext/doc/speech.rhvoice~.pddoc b/ceammc/ext/doc/speech.rhvoice~.pddoc new file mode 100644 index 0000000000..7ae9b4652a --- /dev/null +++ b/ceammc/ext/doc/speech.rhvoice~.pddoc @@ -0,0 +1,94 @@ + + + + speech.rhvoice~ + + + Serge Poltavsky + + RHVoice text to speech synthesis + GPL3 or later + ceammc + misc + speak speech flite + 0.9.5 + + ceammc/rhvoice~ + rhvoice~ + + + speech.flite~ + + + + Note: no voices data in distributed with PureData-ceammc, you have to install + voices manually + Download language and voice datafiles and put them into ~/Documents/Pd/rhvoice + directory + https://github.com/RHVoice/Russian + https://github.com/RHVoice/anna-rus + + + stops speech and clear TTS queue + clear TTS queue + + + voice + speaking + rate + voice + pitch + voice + volume + + + + speak number + speak symbol + speak list of symbols + + + + TTS output + bang on done + + + + + + + + + + + diff --git a/ceammc/ext/doc/speech.rhvoice~.voices.pd b/ceammc/ext/doc/speech.rhvoice~.voices.pd new file mode 100644 index 0000000000..598f1a41b9 --- /dev/null +++ b/ceammc/ext/doc/speech.rhvoice~.voices.pd @@ -0,0 +1,11 @@ +#N canvas 0 0 544 299 12; +#X text 20 48 Pd Documents directory structure for RHVoice; +#X text 20 77 rhvoice/; +#X text 58 92 |; +#X text 58 106 languages/; +#X text 58 120 | |; +#X text 58 135 | English... etc.; +#X text 58 149 |; +#X text 58 164 voices/; +#X text 96 178 |; +#X text 96 192 voice1...; diff --git a/ceammc/ext/doc/spring-help.pd b/ceammc/ext/doc/spring-help.pd index d52f726295..502773088d 100644 --- a/ceammc/ext/doc/spring-help.pd +++ b/ceammc/ext/doc/spring-help.pd @@ -17,65 +17,66 @@ -49933 0; #X text 110 294 1\.; #X text 150 294 float; -#X obj 246 295 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 294 VAL: target value. Type: float.; +#X obj 246 295 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 VALUE: target value. Type: float.; #X text 110 314 2\.; #X text 150 314 float; -#X obj 246 315 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 314 TIME: time to reach the target value. Type: float.; -#X obj 20 344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 349 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 246 315 cnv 1 70 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 314 TIME(ms): time to reach the target value. Type: float. +Range: 50\...5000; +#X obj 20 359 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 364 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 384 @accel; -#X text 245 384 Get/Set acceleration factor \, 0: means linear motion +#X msg 110 399 @accel; +#X text 245 399 Get/Set acceleration factor \, 0: means linear motion (no acceleration) \, >0: begin fast \, then slow down \, <0: begin slow \, then speed up. Type: float. Default value: 0\. Range: -5\...5\.; -#X msg 110 456 @mouse_down; -#X text 245 456 Get/Set internal state. Type: int. Default value: 0\. +#X msg 110 471 @mouse_down; +#X text 245 471 Get/Set internal state. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 498 @mouse_drag; -#X text 245 498 Get/Set internal state. Type: int. Default value: 0\. +#X msg 110 513 @mouse_drag; +#X text 245 513 Get/Set internal state. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 540 @mouse_move; -#X text 245 540 Get/Set internal state. Type: int. Default value: 0\. +#X msg 110 555 @mouse_move; +#X text 245 555 Get/Set internal state. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 582 @mouse_up; -#X text 245 582 Get/Set internal state. Type: int. Default value: 0\. +#X msg 110 597 @mouse_up; +#X text 245 597 Get/Set internal state. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 624 @time; -#X text 245 624 Get/Set time to reach target value. Type: float. Units: +#X msg 110 639 @time; +#X text 245 639 Get/Set time to reach target value. Type: float. Units: ms. Default value: 500\. Range: 50\...5000\.; -#X msg 110 666 @value; -#X text 245 666 Get/Set target value. Type: float. Default value: 0\.; -#X obj 20 705 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 710 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 681 @value; +#X text 245 681 Get/Set target value. Type: float. Default value: 0\.; +#X obj 20 720 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 725 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 711 1\.; -#X text 150 711 *float*; -#X text 245 711 set current value.; -#X text 110 731 2\.; -#X text 150 731 *float*; -#X text 245 731 set @value.; -#X obj 20 761 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 766 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 726 1\.; +#X text 150 726 *float*; +#X text 245 726 set current value.; +#X text 110 746 2\.; +#X text 150 746 *float*; +#X text 245 746 set @value.; +#X obj 20 776 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 781 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 767 1\.; -#X text 245 767 float: value.; -#X text 110 787 2\.; -#X text 245 787 bang: when target value is reached.; +#X text 110 782 1\.; +#X text 245 782 float: value.; +#X text 110 802 2\.; +#X text 245 802 bang: when target value is reached.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 837 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 840 library: ceammc v0.9.4; -#N canvas 10 859 400 290 info 0; +#X obj 1 852 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 855 library: ceammc v0.9.6; +#N canvas 10 874 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 spring; #X text 10 76 category:; @@ -94,7 +95,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 859 pd info; +#X restore 10 874 pd info; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 8 1 10 0; diff --git a/ceammc/ext/doc/spring.pddoc b/ceammc/ext/doc/spring.pddoc index 14de3846e0..55fbf79e8c 100644 --- a/ceammc/ext/doc/spring.pddoc +++ b/ceammc/ext/doc/spring.pddoc @@ -17,8 +17,9 @@ - target value - time to reach the target value + target value + + time to reach the target value target value diff --git a/ceammc/ext/doc/string-help.pd b/ceammc/ext/doc/string-help.pd index ffb1c4be08..eea6ca6ea3 100644 --- a/ceammc/ext/doc/string-help.pd +++ b/ceammc/ext/doc/string-help.pd @@ -24,8 +24,8 @@ -49933 0; #X text 110 337 1\.; #X text 150 337 symbol; -#X obj 246 338 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 337 STR: initial string. Type: symbol.; +#X obj 246 338 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 337 VALUE: initial string. Type: symbol.; #X obj 20 367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 372 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -64,13 +64,13 @@ outputs value.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 744 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 747 library: ceammc v0.9.4; +#X text 10 747 library: ceammc v0.9.6; #N canvas 10 766 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.contains-help.pd b/ceammc/ext/doc/string.contains-help.pd index b1c2f2a331..a622b090e2 100644 --- a/ceammc/ext/doc/string.contains-help.pd +++ b/ceammc/ext/doc/string.contains-help.pd @@ -18,8 +18,8 @@ -49933 0; #X text 110 321 1\.; #X text 150 321 symbol; -#X obj 246 322 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 321 SUBSTR: searched substring. Type: symbol.; +#X obj 246 322 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 321 SUBJ: searched substring. Type: symbol.; #X obj 20 351 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 356 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -44,7 +44,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 557 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 560 library: ceammc v0.9.4; +#X text 10 560 library: ceammc v0.9.6; #X text 572 572 see also:; #X obj 646 572 str.ends_with; #N canvas 10 579 400 290 info 0; @@ -52,7 +52,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.contains; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.contains.pddoc b/ceammc/ext/doc/string.contains.pddoc index eea4ccd187..0d4a77999d 100644 --- a/ceammc/ext/doc/string.contains.pddoc +++ b/ceammc/ext/doc/string.contains.pddoc @@ -20,7 +20,7 @@ - searched substring + searched substring searched substring diff --git a/ceammc/ext/doc/string.ends_with-help.pd b/ceammc/ext/doc/string.ends_with-help.pd index f1f2788804..38fc83a242 100644 --- a/ceammc/ext/doc/string.ends_with-help.pd +++ b/ceammc/ext/doc/string.ends_with-help.pd @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 542 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 545 library: ceammc v0.9.4; +#X text 10 545 library: ceammc v0.9.6; #X text 558 557 see also:; #X obj 632 557 str.starts_with; #N canvas 10 564 400 290 info 0; @@ -51,7 +51,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.ends_with; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.equal-help.pd b/ceammc/ext/doc/string.equal-help.pd index 73001f16fd..1474b004a2 100644 --- a/ceammc/ext/doc/string.equal-help.pd +++ b/ceammc/ext/doc/string.equal-help.pd @@ -17,8 +17,8 @@ -49933 0; #X text 110 292 1\.; #X text 150 292 symbol; -#X obj 246 293 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 292 STR: second string initial value. Type: symbol.; +#X obj 246 293 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 292 SUBJ: second string initial value. Type: symbol.; #X obj 20 322 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 327 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -48,7 +48,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 553 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 556 library: ceammc v0.9.4; +#X text 10 556 library: ceammc v0.9.6; #X text 623 568 see also:; #X obj 697 568 string; #N canvas 10 575 400 290 info 0; @@ -56,7 +56,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.equal; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.equal.pddoc b/ceammc/ext/doc/string.equal.pddoc index c492cc3b18..030b70ff47 100644 --- a/ceammc/ext/doc/string.equal.pddoc +++ b/ceammc/ext/doc/string.equal.pddoc @@ -20,7 +20,7 @@ - second string initial value + second string initial value string to compare diff --git a/ceammc/ext/doc/string.format-help.pd b/ceammc/ext/doc/string.format-help.pd index 7f436ab277..7968280d06 100644 --- a/ceammc/ext/doc/string.format-help.pd +++ b/ceammc/ext/doc/string.format-help.pd @@ -17,9 +17,9 @@ #X obj 20 284 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 319 1\.; -#X text 150 319 symbol; -#X obj 246 320 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 319 FMT: format string. Type: symbol.; +#X text 150 319 list; +#X obj 246 320 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 319 FORMAT: format string. Type: list.; #X obj 20 349 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 354 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -50,13 +50,13 @@ value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 617 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 620 library: ceammc v0.9.4; +#X text 10 620 library: ceammc v0.9.6; #N canvas 10 639 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.format; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.format.pddoc b/ceammc/ext/doc/string.format.pddoc index 29c86ca1e6..194e34439c 100644 --- a/ceammc/ext/doc/string.format.pddoc +++ b/ceammc/ext/doc/string.format.pddoc @@ -20,12 +20,13 @@ This format modifiers are supported: %d, %u, %i, %o, %x, %X, %s, %e, %E. - format string + format string - format string - flag for integer mode. If specified all - floats are converted to integers. This usefull for hex and octal formatting + format string + flag for integer mode. + If specified all floats are converted to integers. This usefull for hex and octal + formatting diff --git a/ceammc/ext/doc/string.join-help.pd b/ceammc/ext/doc/string.join-help.pd index 1d208cfec0..1875a385ec 100644 --- a/ceammc/ext/doc/string.join-help.pd +++ b/ceammc/ext/doc/string.join-help.pd @@ -1,62 +1,61 @@ #N canvas 0 0 785 555 12; #X declare -lib ceammc; -#X obj 430 50 cnv 1 335 23 empty empty empty 17 7 0 10 -245760 -1 0; -#X text 430 50 joins (concatenates) strings with separator; +#X obj 376 50 cnv 1 389 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 376 50 joins (concatenates) list to string with separator; #X obj 1 1 cnv 5 765 40 empty empty string.join 20 20 0 20 -104026 -4096 0; #X obj 579 11 str.join; #X obj 661 11 string.join; -#X msg 50 118 bang; -#X obj 50 147 string TEST; -#X obj 50 176 string.split; -#X msg 203 176 symbol .; -#X obj 50 205 string.join " "; -#X obj 50 234 ui.dt; -#X obj 20 283 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 288 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X msg 50 118 list A B C 1 2 3; +#X msg 203 147 symbol ":::"; +#X msg 347 147 symbol ""; +#X obj 50 176 string.join _; +#X obj 50 205 ui.dt; +#X obj 20 254 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 259 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 323 1\.; -#X text 150 323 list; -#X obj 246 324 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 323 SEP: separator. For space use quotes.. Type: list.; -#X obj 20 353 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 358 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 294 1\.; +#X text 150 294 list; +#X obj 246 295 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 294 SEP: separator. For space use quotes.. Type: list.; +#X obj 20 324 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 329 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 393 @sep; -#X text 245 393 Get/Set separator. Type: symbol.; -#X obj 20 432 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 437 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 364 @sep; +#X text 245 364 Get/Set separator. Type: list.; +#X obj 20 403 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 408 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 438 1\.; -#X text 150 438 *symbol*; -#X text 245 438 symbol passed untouched.; -#X text 150 458 *list*; -#X text 245 458 list to join.; -#X text 150 478 *data:mlist*; -#X text 245 478 list to join.; -#X text 110 498 2\.; -#X text 150 498 *list*; -#X text 245 498 change separator to new.; -#X obj 20 528 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 533 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 409 1\.; +#X text 150 409 *symbol*; +#X text 245 409 symbol passed untouched.; +#X text 150 429 *list*; +#X text 245 429 list to join.; +#X text 150 449 *data:mlist*; +#X text 245 449 list to join.; +#X text 110 469 2\.; +#X text 150 469 *list*; +#X text 245 469 change separator to new.; +#X obj 20 499 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 504 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 534 1\.; -#X text 245 534 result String.; +#X text 110 505 1\.; +#X text 245 505 result String.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; -#X obj 1 584 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 587 library: ceammc v0.9.4; -#X text 580 599 see also:; -#X obj 654 599 string.split; -#N canvas 10 606 400 290 info 0; +#X obj 1 555 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 558 library: ceammc v0.9.6; +#X text 580 570 see also:; +#X obj 654 570 string.split; +#N canvas 10 577 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.join; #X text 10 76 category:; @@ -75,9 +74,8 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 606 pd info; -#X connect 5 0 6 0; -#X connect 6 0 7 0; -#X connect 7 0 9 0; -#X connect 8 0 9 1; -#X connect 9 0 10 0; \ No newline at end of file +#X restore 10 577 pd info; +#X connect 5 0 8 0; +#X connect 6 0 8 1; +#X connect 7 0 8 1; +#X connect 8 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/string.join.pddoc b/ceammc/ext/doc/string.join.pddoc index ca4b0d04c8..e50cfc45cf 100644 --- a/ceammc/ext/doc/string.join.pddoc +++ b/ceammc/ext/doc/string.join.pddoc @@ -7,7 +7,7 @@ Alex Nadzharov Serge Poltavsky - joins (concatenates) strings with separator + joins (concatenates) list to string with separator GPL3 or later ceammc string @@ -24,7 +24,7 @@ separator. For space use quotes. - separator + separator @@ -42,13 +42,11 @@ diff --git a/ceammc/ext/doc/string.length-help.pd b/ceammc/ext/doc/string.length-help.pd index 360bd878be..e5ab2b08eb 100644 --- a/ceammc/ext/doc/string.length-help.pd +++ b/ceammc/ext/doc/string.length-help.pd @@ -27,13 +27,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.length; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.match-help.pd b/ceammc/ext/doc/string.match-help.pd index 65e3a40e78..75a8c02d9d 100644 --- a/ceammc/ext/doc/string.match-help.pd +++ b/ceammc/ext/doc/string.match-help.pd @@ -28,9 +28,9 @@ also note that in quoted string ` symbol should be escaped like ``.; #X obj 20 423 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 458 1\.; -#X text 150 458 symbol; +#X text 150 458 list; #X obj 246 459 cnv 1 24 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 458 RE: regular expression. Type: symbol.; +#X text 245 458 RE: regular expression. Type: list.; #X obj 20 488 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 493 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -54,13 +54,13 @@ also note that in quoted string ` symbol should be escaped like ``.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 679 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 682 library: ceammc v0.9.4; +#X text 10 682 library: ceammc v0.9.6; #N canvas 10 701 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.match; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.match.pddoc b/ceammc/ext/doc/string.match.pddoc index 7cb7b4a908..ef4307167f 100644 --- a/ceammc/ext/doc/string.match.pddoc +++ b/ceammc/ext/doc/string.match.pddoc @@ -25,7 +25,7 @@ For example, all digits: `d+, two or three chars: [a-z]((2..3)) etc. - regular expression + regular expression regular expression diff --git a/ceammc/ext/doc/string.pddoc b/ceammc/ext/doc/string.pddoc index 0c8aa750b6..5e3c1d11f2 100644 --- a/ceammc/ext/doc/string.pddoc +++ b/ceammc/ext/doc/string.pddoc @@ -18,14 +18,14 @@ str - - initial string - clear string without output set string content without output append values to the end of string + + initial string + string value diff --git a/ceammc/ext/doc/string.remove-help.pd b/ceammc/ext/doc/string.remove-help.pd index 234cfc7e04..00ae8b3c69 100644 --- a/ceammc/ext/doc/string.remove-help.pd +++ b/ceammc/ext/doc/string.remove-help.pd @@ -61,13 +61,13 @@ Allowed values: all \, first \, last.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 686 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 689 library: ceammc v0.9.4; +#X text 10 689 library: ceammc v0.9.6; #N canvas 10 708 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.remove; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.replace-help.pd b/ceammc/ext/doc/string.replace-help.pd index 96620d4869..78d375e1ea 100644 --- a/ceammc/ext/doc/string.replace-help.pd +++ b/ceammc/ext/doc/string.replace-help.pd @@ -61,7 +61,7 @@ all. Allowed values: all \, first \, last.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 726 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 729 library: ceammc v0.9.4; +#X text 10 729 library: ceammc v0.9.6; #X text 594 741 see also:; #X obj 668 741 str.remove; #N canvas 10 748 400 290 info 0; @@ -69,7 +69,7 @@ all. Allowed values: all \, first \, last.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.replace; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.split-help.pd b/ceammc/ext/doc/string.split-help.pd index a9c0f5a0e9..a38fe3e404 100644 --- a/ceammc/ext/doc/string.split-help.pd +++ b/ceammc/ext/doc/string.split-help.pd @@ -37,10 +37,10 @@ data:String \, to get list of Pd symbols use @sym flag or use alias #X obj 20 501 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; #X text 110 536 1\.; -#X text 150 536 atom; +#X text 150 536 symbol; #X obj 246 537 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 536 SEP: separator. If nonspecified - separate by every -char. To separate by space - use " " argument. Type: atom.; +char. To separate by space - use " " argument. Type: symbol.; #X obj 20 581 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 586 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -56,26 +56,29 @@ char. To separate by space - use " " argument. Type: atom.; #X text 245 695 input symbol.; #X text 150 715 *data:string*; #X text 245 715 input symbol.; -#X obj 20 745 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 750 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 735 2\.; +#X text 150 735 *symbol*; +#X text 245 735 set split symbol.; +#X obj 20 765 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 770 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 751 1\.; -#X text 245 751 list of data:Strings or symbols.; +#X text 110 771 1\.; +#X text 245 771 list of data:Strings or symbols.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; -#X obj 1 801 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 804 library: ceammc v0.9.4; -#X text 587 816 see also:; -#X obj 661 816 string.join; -#N canvas 10 823 400 290 info 0; +#X obj 1 821 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 824 library: ceammc v0.9.6; +#X text 587 836 see also:; +#X obj 661 836 string.join; +#N canvas 10 843 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.split; #X text 10 76 category:; @@ -94,7 +97,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 823 pd info; +#X restore 10 843 pd info; #X connect 8 0 11 0; #X connect 9 0 12 0; #X connect 10 0 13 0; diff --git a/ceammc/ext/doc/string.split.pddoc b/ceammc/ext/doc/string.split.pddoc index 0fd495c146..eec137de76 100644 --- a/ceammc/ext/doc/string.split.pddoc +++ b/ceammc/ext/doc/string.split.pddoc @@ -26,18 +26,22 @@ Pd symbols use @sym flag or use alias [symbol.split] - separator. If nonspecified - separate by every char. + separator. If nonspecified - separate by every char. To separate by space - use " " argument separator - flag to output as list of Pd symbols + flag to output as list of Pd + symbols input symbol input symbol + + set split symbol + list of data:Strings or symbols diff --git a/ceammc/ext/doc/string.starts_with-help.pd b/ceammc/ext/doc/string.starts_with-help.pd index 4df067de40..f6dfd005b5 100644 --- a/ceammc/ext/doc/string.starts_with-help.pd +++ b/ceammc/ext/doc/string.starts_with-help.pd @@ -43,7 +43,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 542 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 545 library: ceammc v0.9.4; +#X text 10 545 library: ceammc v0.9.6; #X text 572 557 see also:; #X obj 646 557 str.ends_with; #N canvas 10 564 400 290 info 0; @@ -51,7 +51,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.starts_with; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.substr-help.pd b/ceammc/ext/doc/string.substr-help.pd index c93abc04ec..15d0d9346e 100644 --- a/ceammc/ext/doc/string.substr-help.pd +++ b/ceammc/ext/doc/string.substr-help.pd @@ -19,9 +19,9 @@ one character from the end of stirng. Type: int.; #X text 110 300 2\.; #X text 150 300 int; -#X obj 246 301 cnv 1 54 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 300 LENGTH: substring length. If -1 given (by default) -\, means 'till string end'.. Type: int. Min value: 0; +#X obj 246 301 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 300 LEN: substring length. If -1 given (by default) \, +means 'till string end'.. Type: int. Min value: 0; #X obj 20 345 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 350 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -51,7 +51,7 @@ to the end of string. Type: int. Default value: -1\. Min value: 0\.; #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 611 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 614 library: ceammc v0.9.4; +#X text 10 614 library: ceammc v0.9.6; #X text 580 626 see also:; #X obj 654 626 string.split; #N canvas 10 633 400 290 info 0; @@ -59,7 +59,7 @@ to the end of string. Type: int. Default value: -1\. Min value: 0\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string.substr; #X text 10 76 category:; diff --git a/ceammc/ext/doc/string.substr.pddoc b/ceammc/ext/doc/string.substr.pddoc index 153451e2f7..ceac58d839 100644 --- a/ceammc/ext/doc/string.substr.pddoc +++ b/ceammc/ext/doc/string.substr.pddoc @@ -23,7 +23,7 @@ substring position. May be relative: -1 means one character from the end of stirng - substring length. If -1 given (by + substring length. If -1 given (by default), means 'till string end'. diff --git a/ceammc/ext/doc/string2symbol-help.pd b/ceammc/ext/doc/string2symbol-help.pd index 4df803c0a0..973e5476af 100644 --- a/ceammc/ext/doc/string2symbol-help.pd +++ b/ceammc/ext/doc/string2symbol-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title string @url ceammc.string-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 string2symbol; #X text 10 76 category:; diff --git a/ceammc/ext/doc/symbol.equal-help.pd b/ceammc/ext/doc/symbol.equal-help.pd index 8f87fb2a31..b49e8fd76f 100644 --- a/ceammc/ext/doc/symbol.equal-help.pd +++ b/ceammc/ext/doc/symbol.equal-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 symbol.equal; #X text 10 76 category:; diff --git a/ceammc/ext/doc/symbol.length-help.pd b/ceammc/ext/doc/symbol.length-help.pd index 8ffbf6747f..c854458744 100644 --- a/ceammc/ext/doc/symbol.length-help.pd +++ b/ceammc/ext/doc/symbol.length-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 symbol.length; #X text 10 76 category:; diff --git a/ceammc/ext/doc/symbol.num_compare-help.pd b/ceammc/ext/doc/symbol.num_compare-help.pd index e542b29df0..c3804c9940 100644 --- a/ceammc/ext/doc/symbol.num_compare-help.pd +++ b/ceammc/ext/doc/symbol.num_compare-help.pd @@ -48,13 +48,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 650 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 653 library: ceammc v0.9.4; +#X text 10 653 library: ceammc v0.9.6; #N canvas 10 672 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 symbol.num_compare; #X text 10 76 category:; diff --git a/ceammc/ext/doc/symbol2any-help.pd b/ceammc/ext/doc/symbol2any-help.pd index e37d9e6a24..d1422c43e4 100644 --- a/ceammc/ext/doc/symbol2any-help.pd +++ b/ceammc/ext/doc/symbol2any-help.pd @@ -37,13 +37,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 symbol2any; #X text 10 76 category:; diff --git a/ceammc/ext/doc/symbol2intlist-help.pd b/ceammc/ext/doc/symbol2intlist-help.pd index 526e3a98c7..8db78ce28e 100644 --- a/ceammc/ext/doc/symbol2intlist-help.pd +++ b/ceammc/ext/doc/symbol2intlist-help.pd @@ -31,13 +31,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title symbol @url ceammc.symbol-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 symbol2intlist; #X text 10 76 category:; diff --git a/ceammc/ext/doc/sync-help.pd b/ceammc/ext/doc/sync-help.pd index 94d5784c2c..07146ea6db 100644 --- a/ceammc/ext/doc/sync-help.pd +++ b/ceammc/ext/doc/sync-help.pd @@ -46,13 +46,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 525 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 528 library: ceammc v0.9.4; +#X text 10 528 library: ceammc v0.9.6; #N canvas 10 547 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 sync; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.bee3~-help.pd b/ceammc/ext/doc/synth.bee3~-help.pd index 495f0891cd..4a10d076a9 100644 --- a/ceammc/ext/doc/synth.bee3~-help.pd +++ b/ceammc/ext/doc/synth.bee3~-help.pd @@ -74,13 +74,13 @@ Range: 36\...84\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1036 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1039 library: ceammc v0.9.4; +#X text 10 1039 library: ceammc v0.9.6; #N canvas 10 1058 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.bee3~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.bee3~.pddoc b/ceammc/ext/doc/synth.bee3~.pddoc index bc58923db5..4f11e16ed1 100644 --- a/ceammc/ext/doc/synth.bee3~.pddoc +++ b/ceammc/ext/doc/synth.bee3~.pddoc @@ -19,7 +19,7 @@ maximum speed of whistles + units="hertz">maximum speed of whistles midi pitch synth gate diff --git a/ceammc/ext/doc/synth.birds~-help.pd b/ceammc/ext/doc/synth.birds~-help.pd index e473c3fd2d..7d1b9fc680 100644 --- a/ceammc/ext/doc/synth.birds~-help.pd +++ b/ceammc/ext/doc/synth.birds~-help.pd @@ -11,49 +11,62 @@ #X obj 50 291 ui.hgain2~; #X obj 50 320 dac~; #X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 374 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 409 @active; -#X text 245 409 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 451 @auto; -#X text 245 451 Get/Set auto playing mode. Type: int. Default value: -0\. Range: 0\...1\.; -#X msg 110 493 @gate; -#X text 245 493 Get/Set play trigger. Starts playing on release. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 535 @probability; -#X text 245 535 Get/Set whistles probability if @auto enabled. Type: +#X text 110 409 1\.; +#X text 150 409 float; +#X obj 246 410 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 409 SPEED: maximum speed of whistles if @auto enabled. +Type: float. Range: 120\...480; +#X text 110 444 2\.; +#X text 150 444 float; +#X obj 246 445 cnv 1 92 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 444 PROBABILITY: whistles probability if @auto enabled. +Type: float. Range: 25\...100; +#X obj 20 489 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 494 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 529 @active; +#X text 245 529 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 558 @auto; +#X text 245 558 Get/Set auto playing mode. Type: bool. Default value: +0\.; +#X msg 110 587 @gate; +#X text 245 587 Get/Set play trigger. Starts playing on release. Type: +bool. Default value: 0\.; +#X msg 110 629 @probability; +#X text 245 629 Get/Set whistles probability if @auto enabled. Type: float. Default value: 50\. Range: 25\...100\.; -#X msg 110 577 @speed; -#X text 245 577 Get/Set maximum speed of whistles if @auto enabled. +#X msg 110 671 @speed; +#X text 245 671 Get/Set maximum speed of whistles if @auto enabled. Type: float. Default value: 240\. Range: 120\...480\.; -#X obj 20 629 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 634 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 723 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 728 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 635 1\.; -#X text 150 635 *bang*; -#X text 245 635 play.; -#X obj 20 665 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 670 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 729 1\.; +#X text 150 729 *bang*; +#X text 245 729 play.; +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 671 1\.; -#X text 245 671 synth left channel.; -#X text 110 691 2\.; -#X text 245 691 synth right channel.; +#X text 110 765 1\.; +#X text 245 765 synth left channel.; +#X text 110 785 2\.; +#X text 245 785 synth right channel.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 741 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 744 library: ceammc v0.9.4; -#N canvas 10 763 400 290 info 0; +#X obj 1 835 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 838 library: ceammc v0.9.6; +#N canvas 10 857 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.birds~; #X text 10 76 category:; @@ -72,7 +85,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 763 pd info; +#X restore 10 857 pd info; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 5 0 7 0; diff --git a/ceammc/ext/doc/synth.birds~.pddoc b/ceammc/ext/doc/synth.birds~.pddoc index 902731842e..205d7596e0 100644 --- a/ceammc/ext/doc/synth.birds~.pddoc +++ b/ceammc/ext/doc/synth.birds~.pddoc @@ -14,17 +14,21 @@ birds 0.6 + + maximum speed of + whistles if @auto enabled + whistles + probability if @auto enabled + maximum speed of whistles if @auto enabled whistles probability if @auto enabled - play trigger. Starts playing - on release - auto playing - mode - on/off dsp - processing + play trigger. Starts playing on + release + auto playing mode + on/off dsp processing diff --git a/ceammc/ext/doc/synth.church_bell~-help.pd b/ceammc/ext/doc/synth.church_bell~-help.pd index 84a8ca8828..0551ed439e 100644 --- a/ceammc/ext/doc/synth.church_bell~-help.pd +++ b/ceammc/ext/doc/synth.church_bell~-help.pd @@ -24,61 +24,61 @@ from the bottom to the top of the bell; #X obj 20 724 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 759 @active; -#X text 245 759 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 801 @cutoff; -#X text 245 801 Get/Set cutoff coefficent. Type: float. Units: Hz. +#X text 245 759 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 788 @cutoff; +#X text 245 788 Get/Set cutoff coefficent. Type: float. Units: Hz. Default value: 6500\. Range: 20\...20000\.; -#X msg 110 843 @decay_ratio; -#X text 245 843 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 830 @decay_ratio; +#X text 245 830 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 885 @decay_slope; -#X text 245 885 Get/Set decay slope. Type: float. Default value: 2.5\. +#X msg 110 872 @decay_slope; +#X text 245 872 Get/Set decay slope. Type: float. Default value: 2.5\. Range: 0\...10\.; -#X msg 110 927 @gain; -#X text 245 927 Get/Set pluck gain. Type: float. Default value: 1\. +#X msg 110 914 @gain; +#X text 245 914 Get/Set pluck gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 969 @gate; -#X text 245 969 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 956 @gate; +#X text 245 956 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1011 @pos; -#X text 245 1011 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 998 @pos; +#X text 245 998 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1053 @sharp; -#X text 245 1053 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1040 @sharp; +#X text 245 1040 Get/Set strike sharpness. Type: float. Default value: 0.5\. Range: 0.01\...5\.; -#X msg 110 1095 @t60; -#X text 245 1095 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1082 @t60; +#X text 245 1082 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1147 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1152 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1134 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1139 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1187 reset; -#X text 245 1187 reset synth.; -#X obj 20 1224 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1229 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1174 reset; +#X text 245 1174 reset synth.; +#X obj 20 1211 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1216 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1230 1\.; -#X text 150 1230 *bang*; -#X text 245 1230 play.; -#X obj 20 1260 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1265 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1217 1\.; +#X text 150 1217 *bang*; +#X text 245 1217 play.; +#X obj 20 1247 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1252 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1266 1\.; -#X text 245 1266 synth output.; +#X text 110 1253 1\.; +#X text 245 1253 synth output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1316 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1319 library: ceammc v0.9.4; -#N canvas 10 1338 400 290 info 0; +#X obj 1 1303 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1306 library: ceammc v0.9.6; +#N canvas 10 1325 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.church_bell~; #X text 10 76 category:; @@ -97,7 +97,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1338 pd info; +#X restore 10 1325 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.church_bell~.pddoc b/ceammc/ext/doc/synth.church_bell~.pddoc index e418c46ac9..bf2de2b8a1 100644 --- a/ceammc/ext/doc/synth.church_bell~.pddoc +++ b/ceammc/ext/doc/synth.church_bell~.pddoc @@ -31,7 +31,7 @@ strike sharpness cutoff coefficent + units="hertz">cutoff coefficent time to decay to -60db level decay @@ -40,8 +40,7 @@ decay slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.clap~-help.pd b/ceammc/ext/doc/synth.clap~-help.pd new file mode 100644 index 0000000000..188b34ffc2 --- /dev/null +++ b/ceammc/ext/doc/synth.clap~-help.pd @@ -0,0 +1,118 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 515 50 cnv 1 250 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 515 50 clap synth from faust librariest; +#X obj 1 1 cnv 5 765 40 empty empty synth.clap~ 20 20 0 20 -104026 +-4096 0; +#X obj 660 11 synth.clap~; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 117 118 5 0 0 0 - - -; +#X obj 174 118 ui.k 0 100 @show_value 1; +#X obj 299 118 ui.k 0 100 @show_value 1; +#X obj 434 118 ui.k 400 3500 @show_value 1; +#X obj 50 147 metro 150; +#X obj 50 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 174 176 @attack \$1; +#X msg 299 176 @release \$1; +#X msg 434 176 @tone \$1; +#X msg 50 205 @gate \$1; +#X obj 50 234 synth.clap~; +#X obj 203 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 291 ui.hgain~; +#X obj 203 291 ui.dsp~; +#X obj 50 320 dac~; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 409 @active; +#X text 245 409 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 438 @attack; +#X text 245 438 Get/Set attack time. Type: float. Units: ms. Default +value: 0\. Range: 0\...400\.; +#X msg 110 480 @envwait; +#X text 245 480 Get/Set ignore new notes until previous note is not +finished release time. Type: bool. Default value: 0\.; +#X msg 110 522 @gate; +#X text 245 522 Get/Set play trigger >0: on \, 0: off. To set output +gain to 0.5 you can 0.5 as trigger value. Type: float. Default value: +0\. Range: 0\...1\.; +#X msg 110 579 @release; +#X text 245 579 Get/Set release time. Type: float. Units: ms. Default +value: 0\. Range: 0\...4000\.; +#X msg 110 621 @tone; +#X text 245 621 Get/Set bandpass filter cutoff frequency. Type: float. +Units: Hz. Default value: 3500\. Range: 400\...3500\.; +#X obj 20 673 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 678 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 713 reset; +#X text 245 713 reset synth.; +#X obj 20 750 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 755 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 756 1\.; +#X text 150 756 *bang*; +#X text 245 756 play with default duration and full gain.; +#X text 150 776 *float*; +#X text 245 776 play with default duration and specified gain.; +#X text 150 796 *list*; +#X text 245 796 GAIN(0\..1) DUR(ms) pair expected.; +#X obj 20 826 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 831 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 832 1\.; +#X text 245 832 synth output.; +#X text 110 852 2\.; +#X text 245 852 bang after release finished.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; +#X obj 1 902 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 905 library: ceammc v0.9.6; +#X text 491 917 see also:; +#X obj 565 917 synth.kick2~; +#X obj 667 917 synth.hat~; +#N canvas 10 924 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 synth.clap~; +#X text 10 76 category:; +#X text 120 76 synth; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 synth \, kick; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 924 pd info; +#X connect 4 0 9 0; +#X connect 5 0 9 1; +#X connect 9 0 10 0; +#X connect 6 0 11 0; +#X connect 7 0 12 0; +#X connect 8 0 13 0; +#X connect 10 0 14 0; +#X connect 14 0 15 0; +#X connect 11 0 15 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 15 1 16 0; +#X connect 15 0 17 0; +#X connect 17 0 19 0; +#X connect 17 0 19 1; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.clap~.pddoc b/ceammc/ext/doc/synth.clap~.pddoc new file mode 100644 index 0000000000..1b928ab18f --- /dev/null +++ b/ceammc/ext/doc/synth.clap~.pddoc @@ -0,0 +1,73 @@ + + + + synth.clap~ + + + Serge Poltavsky + + clap synth from faust librariest + GPL3 or later + ceammc + synth + synth kick + 0.9.5 + + synth.kick2~ + synth.hat~ + + + + play trigger + >0: on, 0: off. To set output gain to 0.5 you can 0.5 as trigger value + on/off dsp processing + attack time + release time + ignore new notes until previous note + is not finished release time + bandpass filter cutoff frequency + + + reset synth + + + + play with default duration and full gain + play with default duration and specified gain + GAIN(0..1) DUR(ms) pair expected + + + + synth output + bang after release finished + + + + + + + + diff --git a/ceammc/ext/doc/synth.dubdub~-help.pd b/ceammc/ext/doc/synth.dubdub~-help.pd index 66e99a0be4..e2bbbc891d 100644 --- a/ceammc/ext/doc/synth.dubdub~-help.pd +++ b/ceammc/ext/doc/synth.dubdub~-help.pd @@ -28,57 +28,57 @@ resonant lowpass; #X obj 20 561 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 596 @active; -#X text 245 596 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 638 @cutoff; -#X text 245 638 Get/Set cutoff frequency. Type: float. Default value: +#X text 245 596 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 625 @cutoff; +#X text 245 625 Get/Set cutoff frequency. Type: float. Default value: 3000\. Range: 20\...20000\.; -#X msg 110 680 @freq; -#X text 245 680 Get/Set frequency. Type: float. Units: Hz. Default +#X msg 110 667 @freq; +#X text 245 667 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 722 @gate; -#X text 245 722 Get/Set play trigger >0: on \, 0: off. Values greater +#X msg 110 709 @gate; +#X text 245 709 Get/Set play trigger >0: on \, 0: off. Values greater then zero set output amplitude. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 779 @pitch; -#X text 245 779 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 766 @pitch; +#X text 245 766 Get/Set midi pitch. Type: float. Default value: 48\. Range: 24\...84\.; -#X msg 110 821 @q; -#X text 245 821 Get/Set quality factor. Type: float. Default value: +#X msg 110 808 @q; +#X text 245 808 Get/Set quality factor. Type: float. Default value: 0.1\. Range: 0.01\...100\.; -#X obj 20 873 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 878 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 860 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 865 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 913 note; -#X text 245 913 note on/off message. Arguments are:; -#X obj 255 936 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 936 NOTE: midi note. Type: float.; -#X obj 255 959 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 959 VEL: velocity. Type: float. Range: 0\...127\.; -#X obj 20 994 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 999 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 900 note; +#X text 245 900 note on/off message. Arguments are:; +#X obj 255 923 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 923 NOTE: midi note. Type: float.; +#X obj 255 946 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 946 VEL: velocity. Type: float. Range: 0\...127\.; +#X obj 20 981 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 986 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1000 1\.; -#X text 150 1000 *list*; -#X text 245 1000 NOTE VEL.; -#X obj 20 1030 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1035 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 987 1\.; +#X text 150 987 *list*; +#X text 245 987 NOTE VEL.; +#X obj 20 1017 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1022 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1036 1\.; -#X text 245 1036; +#X text 110 1023 1\.; +#X text 245 1023; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1086 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1089 library: ceammc v0.9.4; -#N canvas 10 1108 400 290 info 0; +#X obj 1 1073 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1076 library: ceammc v0.9.6; +#N canvas 10 1095 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.dubdub~; #X text 10 76 category:; @@ -97,7 +97,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1108 pd info; +#X restore 10 1095 pd info; #X connect 4 0 5 0; #X connect 6 0 9 0; #X connect 7 0 10 0; diff --git a/ceammc/ext/doc/synth.dubdub~.pddoc b/ceammc/ext/doc/synth.dubdub~.pddoc index 4747fe0d03..68325b9073 100644 --- a/ceammc/ext/doc/synth.dubdub~.pddoc +++ b/ceammc/ext/doc/synth.dubdub~.pddoc @@ -23,15 +23,15 @@ midi pitch - frequency + + frequency cutoff frequency play trigger >0: on, 0: off. Values greater then zero set output amplitude. quality factor - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.dx7~-help.pd b/ceammc/ext/doc/synth.dx7~-help.pd index 205b45dad7..478b1acb0c 100644 --- a/ceammc/ext/doc/synth.dx7~-help.pd +++ b/ceammc/ext/doc/synth.dx7~-help.pd @@ -50,13 +50,13 @@ Range: 24\...84\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 715 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 718 library: ceammc v0.9.4; +#X text 10 718 library: ceammc v0.9.6; #N canvas 10 737 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.dx7~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.dx7~.pddoc b/ceammc/ext/doc/synth.dx7~.pddoc index d156bcc860..29d11eec5e 100644 --- a/ceammc/ext/doc/synth.dx7~.pddoc +++ b/ceammc/ext/doc/synth.dx7~.pddoc @@ -15,7 +15,7 @@ maximum speed of whistles + units="hertz">maximum speed of whistles midi pitch synth gate diff --git a/ceammc/ext/doc/synth.eguitar~-help.pd b/ceammc/ext/doc/synth.eguitar~-help.pd index 965c2246bd..5bb1dff37a 100644 --- a/ceammc/ext/doc/synth.eguitar~-help.pd +++ b/ceammc/ext/doc/synth.eguitar~-help.pd @@ -25,59 +25,59 @@ #X obj 20 460 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 495 @active; -#X text 245 495 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 537 @freq; -#X text 245 537 Get/Set frequency. Type: float. Units: Hz. Default +#X text 245 495 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 524 @freq; +#X text 245 524 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 579 @gain; -#X text 245 579 Get/Set pluck gain. Type: float. Default value: 1\. +#X msg 110 566 @gain; +#X text 245 566 Get/Set pluck gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 621 @gate; -#X text 245 621 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 608 @gate; +#X text 245 608 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 663 @mute; -#X text 245 663 Get/Set mute coefficient (0 for no mute and 1 for instant +#X msg 110 650 @mute; +#X text 245 650 Get/Set mute coefficient (0 for no mute and 1 for instant mute). Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 705 @pitch; -#X text 245 705 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 692 @pitch; +#X text 245 692 Get/Set midi pitch. Type: float. Default value: 48\. Range: 36\...84\.; -#X msg 110 747 @pos; -#X text 245 747 Get/Set pluck position (1 is on the bridge). Type: +#X msg 110 734 @pos; +#X text 245 734 Get/Set pluck position (1 is on the bridge). Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 799 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 804 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 786 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 791 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 839 note; -#X text 245 839 note on/off message. Arguments are:; -#X obj 255 862 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 862 NOTE: midi note. Type: float.; -#X obj 255 885 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 885 VEL: velocity. Type: float. Range: 0\...127\.; -#X obj 20 920 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 925 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 826 note; +#X text 245 826 note on/off message. Arguments are:; +#X obj 255 849 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 849 NOTE: midi note. Type: float.; +#X obj 255 872 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 872 VEL: velocity. Type: float. Range: 0\...127\.; +#X obj 20 907 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 912 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 926 1\.; -#X text 150 926 *list*; -#X text 245 926 NOTE VEL.; -#X obj 20 956 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 961 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 913 1\.; +#X text 150 913 *list*; +#X text 245 913 NOTE VEL.; +#X obj 20 943 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 948 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 962 1\.; -#X text 245 962; +#X text 110 949 1\.; +#X text 245 949; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1012 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1015 library: ceammc v0.9.4; -#N canvas 10 1034 400 290 info 0; +#X obj 1 999 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1002 library: ceammc v0.9.6; +#N canvas 10 1021 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.eguitar~; #X text 10 76 category:; @@ -96,7 +96,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1034 pd info; +#X restore 10 1021 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/synth.eguitar~.pddoc b/ceammc/ext/doc/synth.eguitar~.pddoc index 182f07cdc1..ab2a76ead8 100644 --- a/ceammc/ext/doc/synth.eguitar~.pddoc +++ b/ceammc/ext/doc/synth.eguitar~.pddoc @@ -22,7 +22,8 @@ midi pitch - frequency + + frequency pluck position (1 is on the bridge) mute @@ -31,8 +32,7 @@ gain play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.english_bell~-help.pd b/ceammc/ext/doc/synth.english_bell~-help.pd index c7a48207a5..8dc2ea2c70 100644 --- a/ceammc/ext/doc/synth.english_bell~-help.pd +++ b/ceammc/ext/doc/synth.english_bell~-help.pd @@ -25,61 +25,61 @@ from the bottom to the top of the bell; #X obj 20 739 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 774 @active; -#X text 245 774 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 816 @cutoff; -#X text 245 816 Get/Set strike cutoff frequency. Type: float. Units: +#X text 245 774 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 803 @cutoff; +#X text 245 803 Get/Set strike cutoff frequency. Type: float. Units: Hz. Default value: 6500\. Range: 20\...20000\.; -#X msg 110 858 @decay_ratio; -#X text 245 858 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 845 @decay_ratio; +#X text 245 845 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 900 @decay_slope; -#X text 245 900 Get/Set decay slope. Type: float. Default value: 2.5\. +#X msg 110 887 @decay_slope; +#X text 245 887 Get/Set decay slope. Type: float. Default value: 2.5\. Range: 0\...10\.; -#X msg 110 942 @gain; -#X text 245 942 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 929 @gain; +#X text 245 929 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 984 @gate; -#X text 245 984 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 971 @gate; +#X text 245 971 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1026 @pos; -#X text 245 1026 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 1013 @pos; +#X text 245 1013 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1068 @sharp; -#X text 245 1068 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1055 @sharp; +#X text 245 1055 Get/Set strike sharpness. Type: float. Default value: 0.5\. Range: 0.01\...5\.; -#X msg 110 1110 @t60; -#X text 245 1110 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1097 @t60; +#X text 245 1097 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1202 reset; -#X text 245 1202 reset synth.; -#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1244 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset synth.; +#X obj 20 1226 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1231 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1245 1\.; -#X text 150 1245 *bang*; -#X text 245 1245 play.; -#X obj 20 1275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1280 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1232 1\.; +#X text 150 1232 *bang*; +#X text 245 1232 play.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1281 1\.; -#X text 245 1281 output signal.; +#X text 110 1268 1\.; +#X text 245 1268 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1331 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1334 library: ceammc v0.9.4; -#N canvas 10 1353 400 290 info 0; +#X obj 1 1318 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1321 library: ceammc v0.9.6; +#N canvas 10 1340 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.english_bell~; #X text 10 76 category:; @@ -98,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1353 pd info; +#X restore 10 1340 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.english_bell~.pddoc b/ceammc/ext/doc/synth.english_bell~.pddoc index 8e3b4facb6..70908e92ec 100644 --- a/ceammc/ext/doc/synth.english_bell~.pddoc +++ b/ceammc/ext/doc/synth.english_bell~.pddoc @@ -32,7 +32,7 @@ strike sharpness strike cutoff frequency + units="hertz">strike cutoff frequency time to decay to -60db level decay @@ -41,8 +41,7 @@ decay slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.fgrain~-help.pd b/ceammc/ext/doc/synth.fgrain~-help.pd index b0cf796781..1c60576250 100644 --- a/ceammc/ext/doc/synth.fgrain~-help.pd +++ b/ceammc/ext/doc/synth.fgrain~-help.pd @@ -92,13 +92,13 @@ the file start.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1311 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1314 library: ceammc v0.9.4; +#X text 10 1314 library: ceammc v0.9.6; #N canvas 10 1333 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.fgrain~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.french_bell~-help.pd b/ceammc/ext/doc/synth.french_bell~-help.pd index ec2c184d9f..6eaba460b8 100644 --- a/ceammc/ext/doc/synth.french_bell~-help.pd +++ b/ceammc/ext/doc/synth.french_bell~-help.pd @@ -25,61 +25,61 @@ from the bottom to the top of the bell; #X obj 20 739 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 774 @active; -#X text 245 774 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 816 @cutoff; -#X text 245 816 Get/Set strike cutoff frequency. Type: float. Units: +#X text 245 774 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 803 @cutoff; +#X text 245 803 Get/Set strike cutoff frequency. Type: float. Units: Hz. Default value: 4000\. Range: 20\...20000\.; -#X msg 110 858 @decay_ratio; -#X text 245 858 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 845 @decay_ratio; +#X text 245 845 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 900 @decay_slope; -#X text 245 900 Get/Set decay slope. Type: float. Default value: 3\. +#X msg 110 887 @decay_slope; +#X text 245 887 Get/Set decay slope. Type: float. Default value: 3\. Range: 0\...10\.; -#X msg 110 942 @gain; -#X text 245 942 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 929 @gain; +#X text 245 929 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 984 @gate; -#X text 245 984 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 971 @gate; +#X text 245 971 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1026 @pos; -#X text 245 1026 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 1013 @pos; +#X text 245 1013 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1068 @sharp; -#X text 245 1068 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1055 @sharp; +#X text 245 1055 Get/Set strike sharpness. Type: float. Default value: 0.25\. Range: 0.01\...5\.; -#X msg 110 1110 @t60; -#X text 245 1110 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1097 @t60; +#X text 245 1097 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1202 reset; -#X text 245 1202 reset synth.; -#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1244 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset synth.; +#X obj 20 1226 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1231 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1245 1\.; -#X text 150 1245 *bang*; -#X text 245 1245 play.; -#X obj 20 1275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1280 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1232 1\.; +#X text 150 1232 *bang*; +#X text 245 1232 play.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1281 1\.; -#X text 245 1281 output signal.; +#X text 110 1268 1\.; +#X text 245 1268 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1331 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1334 library: ceammc v0.9.4; -#N canvas 10 1353 400 290 info 0; +#X obj 1 1318 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1321 library: ceammc v0.9.6; +#N canvas 10 1340 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.french_bell~; #X text 10 76 category:; @@ -98,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1353 pd info; +#X restore 10 1340 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.french_bell~.pddoc b/ceammc/ext/doc/synth.french_bell~.pddoc index e3f31bf1c8..272b910571 100644 --- a/ceammc/ext/doc/synth.french_bell~.pddoc +++ b/ceammc/ext/doc/synth.french_bell~.pddoc @@ -32,7 +32,7 @@ strike sharpness strike cutoff frequency + units="hertz">strike cutoff frequency time to decay to -60db level decay @@ -41,8 +41,7 @@ slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.german_bell~-help.pd b/ceammc/ext/doc/synth.german_bell~-help.pd index d08572e550..485e7773dc 100644 --- a/ceammc/ext/doc/synth.german_bell~-help.pd +++ b/ceammc/ext/doc/synth.german_bell~-help.pd @@ -25,61 +25,61 @@ from the bottom to the top of the bell; #X obj 20 739 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 774 @active; -#X text 245 774 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 816 @cutoff; -#X text 245 816 Get/Set strike cutoff frequency. Type: float. Units: +#X text 245 774 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 803 @cutoff; +#X text 245 803 Get/Set strike cutoff frequency. Type: float. Units: Hz. Default value: 4000\. Range: 20\...20000\.; -#X msg 110 858 @decay_ratio; -#X text 245 858 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 845 @decay_ratio; +#X text 245 845 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 900 @decay_slope; -#X text 245 900 Get/Set decay slope. Type: float. Default value: 3\. +#X msg 110 887 @decay_slope; +#X text 245 887 Get/Set decay slope. Type: float. Default value: 3\. Range: 0\...10\.; -#X msg 110 942 @gain; -#X text 245 942 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 929 @gain; +#X text 245 929 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 984 @gate; -#X text 245 984 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 971 @gate; +#X text 245 971 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1026 @pos; -#X text 245 1026 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 1013 @pos; +#X text 245 1013 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1068 @sharp; -#X text 245 1068 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1055 @sharp; +#X text 245 1055 Get/Set strike sharpness. Type: float. Default value: 0.25\. Range: 0.01\...5\.; -#X msg 110 1110 @t60; -#X text 245 1110 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1097 @t60; +#X text 245 1097 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1202 reset; -#X text 245 1202 reset synth.; -#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1244 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset synth.; +#X obj 20 1226 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1231 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1245 1\.; -#X text 150 1245 *bang*; -#X text 245 1245 play.; -#X obj 20 1275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1280 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1232 1\.; +#X text 150 1232 *bang*; +#X text 245 1232 play.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1281 1\.; -#X text 245 1281 output signal.; +#X text 110 1268 1\.; +#X text 245 1268 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1331 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1334 library: ceammc v0.9.4; -#N canvas 10 1353 400 290 info 0; +#X obj 1 1318 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1321 library: ceammc v0.9.6; +#N canvas 10 1340 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.german_bell~; #X text 10 76 category:; @@ -98,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1353 pd info; +#X restore 10 1340 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.german_bell~.pddoc b/ceammc/ext/doc/synth.german_bell~.pddoc index bc3f38fcdd..4cee2077c8 100644 --- a/ceammc/ext/doc/synth.german_bell~.pddoc +++ b/ceammc/ext/doc/synth.german_bell~.pddoc @@ -32,7 +32,7 @@ strike sharpness strike cutoff frequency + units="hertz">strike cutoff frequency time to decay to -60db level decay @@ -41,8 +41,7 @@ slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.glass_harm~-help.pd b/ceammc/ext/doc/synth.glass_harm~-help.pd index d045836e45..3a083286d3 100644 --- a/ceammc/ext/doc/synth.glass_harm~-help.pd +++ b/ceammc/ext/doc/synth.glass_harm~-help.pd @@ -21,91 +21,91 @@ #X obj 20 446 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 481 @active; -#X text 245 481 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 523 @bow_press; -#X text 245 523 Get/Set bow pressure on the instrument. Type: float. +#X text 245 481 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 510 @bow_press; +#X text 245 510 Get/Set bow pressure on the instrument. Type: float. Default value: 0.2\. Range: 0\...1\.; -#X msg 110 565 @freq; -#X text 245 565 Get/Set frequency. Type: float. Units: Hz. Default +#X msg 110 552 @freq; +#X text 245 552 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 607 @gain; -#X text 245 607 Get/Set base gain. Type: float. Default value: 1\. +#X msg 110 594 @gain; +#X text 245 594 Get/Set base gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 649 @gate; -#X text 245 649 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 636 @gate; +#X text 245 636 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 691 @integration; -#X text 245 691 Get/Set integration constant. Type: float. Default +#X msg 110 678 @integration; +#X text 245 678 Get/Set integration constant. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 733 @modfreq; -#X text 245 733 Get/Set frequency of the sine wave for the modulation +#X msg 110 720 @modfreq; +#X text 245 720 Get/Set frequency of the sine wave for the modulation of theta (works if @modetype=3). Type: float. Units: Hz. Default value: 220\. Range: 20\...1000\.; -#X msg 110 790 @modtype; -#X text 245 790 Get/Set modulation type. 0=theta is modulated by the +#X msg 110 777 @modtype; +#X text 245 777 Get/Set modulation type. 0=theta is modulated by the incoming signal. 1=theta is modulated by the averaged incoming signal. 2=theta is modulated by the squared incoming signal. 3=theta is modulated by a sine wave of frequency @modfreq. 4=theta is modulated by a sine wave of frequency @freq. Type: int. Default value: 0\. Range: 0\...4\.; -#X msg 110 892 @nonlin; -#X text 245 892 Get/Set nonlinearity factor. Type: float. Default value: +#X msg 110 879 @nonlin; +#X text 245 879 Get/Set nonlinearity factor. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 934 @pan; -#X text 245 934 Get/Set pan angle. Type: float. Default value: 0.6\. +#X msg 110 921 @pan; +#X text 245 921 Get/Set pan angle. Type: float. Default value: 0.6\. Range: 0\...1\.; -#X msg 110 976 @pitch; -#X text 245 976 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 963 @pitch; +#X text 245 963 Get/Set midi pitch. Type: float. Default value: 48\. Range: 24\...96\.; -#X msg 110 1018 @reverb_gain; -#X text 245 1018 Get/Set reverb gain. Type: float. Default value: 0.137\. +#X msg 110 1005 @reverb_gain; +#X text 245 1005 Get/Set reverb gain. Type: float. Default value: 0.137\. Range: 0\...1\.; -#X msg 110 1060 @room_size; -#X text 245 1060 Get/Set reverb room size. Type: float. Default value: +#X msg 110 1047 @room_size; +#X text 245 1047 Get/Set reverb room size. Type: float. Default value: 0.36\. Range: 0.005\...1\.; -#X msg 110 1102 @strike; -#X text 245 1102 Get/Set strike or bow. Type: int. Default value: 0\. +#X msg 110 1089 @strike; +#X text 245 1089 Get/Set strike or bow. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 1144 @width; -#X text 245 1144 Get/Set spatialization width. Type: float. Default +#X msg 110 1131 @width; +#X text 245 1131 Get/Set spatialization width. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 1196 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1201 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1183 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1188 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1236 note; -#X text 245 1236 note on/off message. Arguments are:; -#X obj 255 1259 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1259 NOTE: midi note. Type: float.; -#X obj 255 1282 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1282 VEL: velocity. Type: float. Range: 0\...127\.; -#X msg 110 1307 reset; -#X text 245 1307 reset synth.; -#X obj 20 1344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1223 note; +#X text 245 1223 note on/off message. Arguments are:; +#X obj 255 1246 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1246 NOTE: midi note. Type: float.; +#X obj 255 1269 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1269 VEL: velocity. Type: float. Range: 0\...127\.; +#X msg 110 1294 reset; +#X text 245 1294 reset synth.; +#X obj 20 1331 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1336 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1350 1\.; -#X text 150 1350 *list*; -#X text 245 1350 NOTE VEL.; -#X obj 20 1380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1385 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1337 1\.; +#X text 150 1337 *list*; +#X text 245 1337 NOTE VEL.; +#X obj 20 1367 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1372 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1386 1\.; -#X text 245 1386 left output.; -#X text 110 1406 2\.; -#X text 245 1406 right output.; +#X text 110 1373 1\.; +#X text 245 1373 left output.; +#X text 110 1393 2\.; +#X text 245 1393 right output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1456 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1459 library: ceammc v0.9.4; -#N canvas 10 1478 400 290 info 0; +#X obj 1 1443 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1446 library: ceammc v0.9.6; +#N canvas 10 1465 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.glass_harm~; #X text 10 76 category:; @@ -124,7 +124,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1478 pd info; +#X restore 10 1465 pd info; #X connect 4 0 5 1; #X connect 5 0 6 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/synth.glass_harm~.pddoc b/ceammc/ext/doc/synth.glass_harm~.pddoc index 54ea5bc140..ea91831ff8 100644 --- a/ceammc/ext/doc/synth.glass_harm~.pddoc +++ b/ceammc/ext/doc/synth.glass_harm~.pddoc @@ -24,7 +24,8 @@ midi pitch - frequency + + frequency reverb room size @@ -43,7 +44,7 @@ modulated by a sine wave of frequency @modfreq. 4=theta is modulated by a sine wave of frequency @freq frequency of the sine wave for the modulation of theta (works if + units="hertz">frequency of the sine wave for the modulation of theta (works if @modetype=3) reverb gain @@ -53,8 +54,7 @@ angle play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.glitch~-help.pd b/ceammc/ext/doc/synth.glitch~-help.pd index 5ee52c068d..e6c299e106 100644 --- a/ceammc/ext/doc/synth.glitch~-help.pd +++ b/ceammc/ext/doc/synth.glitch~-help.pd @@ -40,7 +40,7 @@ https://medium.com/@naive_sound/glitch-a-noisy-fusion-of-math-and-music-6a9b24e7 #X msg 110 657 @clip; #X text 245 657 Get/Set clip output to -1\..+1 range. Use false value only when you are know what are you doing and at your own risk!. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; +bool. Default value: 1\.; #X msg 110 714 @expr; #X text 245 714 Get/Set expression. Type: list.; #X obj 20 753 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; @@ -70,13 +70,13 @@ int. Default value: 1\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 997 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1000 library: ceammc v0.9.4; +#X text 10 1000 library: ceammc v0.9.6; #N canvas 10 1019 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.glitch~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.glitch~.pddoc b/ceammc/ext/doc/synth.glitch~.pddoc index 488aafec52..4a7d794d7d 100644 --- a/ceammc/ext/doc/synth.glitch~.pddoc +++ b/ceammc/ext/doc/synth.glitch~.pddoc @@ -24,10 +24,9 @@ Glitch expression - expression - clip output to -1..+1 range. - Use false value only when you are know what are you doing and at your own - risk! + expression + clip output to -1..+1 range. Use false + value only when you are know what are you doing and at your own risk! set expression wrapper to byte() glitch function diff --git a/ceammc/ext/doc/synth.harpsichord~-help.pd b/ceammc/ext/doc/synth.harpsichord~-help.pd index 92aea104f2..ec67e5751c 100644 --- a/ceammc/ext/doc/synth.harpsichord~-help.pd +++ b/ceammc/ext/doc/synth.harpsichord~-help.pd @@ -17,79 +17,79 @@ #X obj 20 432 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 467 @active; -#X text 245 467 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 509 @freq; -#X text 245 509 Get/Set frequency. Type: float. Units: Hz. Default +#X text 245 467 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 496 @freq; +#X text 245 496 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 551 @gate; -#X text 245 551 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 538 @gate; +#X text 245 538 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 593 @modfreq; -#X text 245 593 Get/Set frequency of the sine wave for the modulation +#X msg 110 580 @modfreq; +#X text 245 580 Get/Set frequency of the sine wave for the modulation of theta (works if @modetype=3). Type: float. Units: Hz. Default value: 220\. Range: 20\...1000\.; -#X msg 110 650 @modtype; -#X text 245 650 Get/Set modulation type. 0=theta is modulated by the +#X msg 110 637 @modtype; +#X text 245 637 Get/Set modulation type. 0=theta is modulated by the incoming signal. 1=theta is modulated by the averaged incoming signal. 2=theta is modulated by the squared incoming signal. 3=theta is modulated by a sine wave of frequency @modfreq. 4=theta is modulated by a sine wave of frequency @freq. Type: int. Default value: 0\. Range: 0\...4\.; -#X msg 110 752 @nonlin; -#X text 245 752 Get/Set nonlinearity factor. Type: float. Default value: +#X msg 110 739 @nonlin; +#X text 245 739 Get/Set nonlinearity factor. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 794 @pan; -#X text 245 794 Get/Set pan angle. Type: float. Default value: 0.6\. +#X msg 110 781 @pan; +#X text 245 781 Get/Set pan angle. Type: float. Default value: 0.6\. Range: 0\...1\.; -#X msg 110 836 @pitch; -#X text 245 836 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 823 @pitch; +#X text 245 823 Get/Set midi pitch. Type: float. Default value: 48\. Range: 12\...96\.; -#X msg 110 878 @reverb_gain; -#X text 245 878 Get/Set reverb gain. Type: float. Default value: 0.137\. +#X msg 110 865 @reverb_gain; +#X text 245 865 Get/Set reverb gain. Type: float. Default value: 0.137\. Range: 0\...1\.; -#X msg 110 920 @room_size; -#X text 245 920 Get/Set reverb room size. Type: float. Default value: +#X msg 110 907 @room_size; +#X text 245 907 Get/Set reverb room size. Type: float. Default value: 0.36\. Range: 0.005\...1\.; -#X msg 110 962 @width; -#X text 245 962 Get/Set spatialization width. Type: float. Default +#X msg 110 949 @width; +#X text 245 949 Get/Set spatialization width. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 1014 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1019 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1001 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1006 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1054 note; -#X text 245 1054 note on/off message. Arguments are:; -#X obj 255 1077 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1077 NOTE: midi note. Type: float.; -#X obj 255 1100 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1100 VEL: velocity. Type: float. Range: 0\...127\.; -#X msg 110 1125 reset; -#X text 245 1125 reset synth.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1041 note; +#X text 245 1041 note on/off message. Arguments are:; +#X obj 255 1064 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1064 NOTE: midi note. Type: float.; +#X obj 255 1087 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1087 VEL: velocity. Type: float. Range: 0\...127\.; +#X msg 110 1112 reset; +#X text 245 1112 reset synth.; +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1168 1\.; -#X text 150 1168 *list*; -#X text 245 1168 NOTE VEL.; -#X obj 20 1198 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1203 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1155 1\.; +#X text 150 1155 *list*; +#X text 245 1155 NOTE VEL.; +#X obj 20 1185 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1190 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1204 1\.; -#X text 245 1204 left output.; -#X text 110 1224 2\.; -#X text 245 1224 right output.; +#X text 110 1191 1\.; +#X text 245 1191 left output.; +#X text 110 1211 2\.; +#X text 245 1211 right output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1274 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1277 library: ceammc v0.9.4; -#N canvas 10 1296 400 290 info 0; +#X obj 1 1261 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1264 library: ceammc v0.9.6; +#N canvas 10 1283 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.harpsichord~; #X text 10 76 category:; @@ -108,7 +108,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1296 pd info; +#X restore 10 1283 pd info; #X connect 4 0 5 1; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/synth.harpsichord~.pddoc b/ceammc/ext/doc/synth.harpsichord~.pddoc index 64f9b54c67..c5986f1062 100644 --- a/ceammc/ext/doc/synth.harpsichord~.pddoc +++ b/ceammc/ext/doc/synth.harpsichord~.pddoc @@ -24,7 +24,8 @@ midi pitch - frequency + + frequency reverb room size @@ -35,7 +36,7 @@ modulated by a sine wave of frequency @modfreq. 4=theta is modulated by a sine wave of frequency @freq frequency of the sine wave for the modulation of theta (works if + units="hertz">frequency of the sine wave for the modulation of theta (works if @modetype=3) reverb gain @@ -45,8 +46,7 @@ angle play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.hat~-help.pd b/ceammc/ext/doc/synth.hat~-help.pd new file mode 100644 index 0000000000..cdc538b8d4 --- /dev/null +++ b/ceammc/ext/doc/synth.hat~-help.pd @@ -0,0 +1,124 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 500 50 cnv 1 265 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 500 50 hi-hat synth from faust librariest; +#X obj 1 1 cnv 5 765 40 empty empty synth.hat~ 20 20 0 20 -104026 +-4096 0; +#X obj 667 11 synth.hat~; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 117 118 5 0 0 0 - - -; +#X obj 174 118 ui.k 300 4000 @show_value 1; +#X obj 280 118 ui.k 5 100 @show_value 1; +#X obj 405 118 ui.k 5 500 @show_value 1; +#X obj 539 118 ui.k 800 18000 @show_value 1; +#X obj 50 147 metro 150; +#X obj 50 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 174 176 @freq \$1; +#X msg 280 176 @attack \$1; +#X msg 405 176 @release \$1; +#X msg 539 176 @tone \$1; +#X msg 50 205 @gate \$1; +#X obj 50 234 synth.hat~; +#X obj 203 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 291 ui.hgain~; +#X obj 203 291 ui.dsp~; +#X obj 50 320 dac~; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 409 @active; +#X text 245 409 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 438 @attack; +#X text 245 438 Get/Set attack time. Type: float. Units: ms. Default +value: 20\. Range: 5\...400\.; +#X msg 110 480 @envwait; +#X text 245 480 Get/Set ignore new notes until previous note is not +finished release time. Type: bool. Default value: 0\.; +#X msg 110 522 @freq; +#X text 245 522 Get/Set base frequency. Type: float. Units: Hz. Default +value: 317\. Range: 300\...4000\.; +#X msg 110 564 @gate; +#X text 245 564 Get/Set play trigger >0: on \, 0: off. To set output +gain to 0.5 you can 0.5 as trigger value. Type: float. Default value: +0\. Range: 0\...1\.; +#X msg 110 621 @release; +#X text 245 621 Get/Set release time. Type: float. Units: ms. Default +value: 100\. Range: 5\...4000\.; +#X msg 110 663 @tone; +#X text 245 663 Get/Set bandpass filter cutoff frequency. Type: float. +Units: Hz. Default value: 6400\. Range: 800\...18000\.; +#X obj 20 715 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 720 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 755 reset; +#X text 245 755 reset synth.; +#X obj 20 792 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 797 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 798 1\.; +#X text 150 798 *bang*; +#X text 245 798 play with default duration and full gain.; +#X text 150 818 *float*; +#X text 245 818 play with default duration and specified gain.; +#X text 150 838 *list*; +#X text 245 838 GAIN(0\..1) DUR(ms) pair expected.; +#X obj 20 868 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 873 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 874 1\.; +#X text 245 874 synth output.; +#X text 110 894 2\.; +#X text 245 894 bang after release finished.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; +#X obj 1 944 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 947 library: ceammc v0.9.6; +#X text 579 959 see also:; +#X obj 653 959 synth.kick2~; +#N canvas 10 966 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 synth.hat~; +#X text 10 76 category:; +#X text 120 76 synth; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 synth \, kick; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 966 pd info; +#X connect 4 0 10 0; +#X connect 5 0 10 1; +#X connect 10 0 11 0; +#X connect 6 0 12 0; +#X connect 7 0 13 0; +#X connect 8 0 14 0; +#X connect 9 0 15 0; +#X connect 11 0 16 0; +#X connect 16 0 17 0; +#X connect 12 0 17 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 17 1 18 0; +#X connect 17 0 19 0; +#X connect 19 0 21 0; +#X connect 19 0 21 1; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.hat~.pddoc b/ceammc/ext/doc/synth.hat~.pddoc new file mode 100644 index 0000000000..0fec056287 --- /dev/null +++ b/ceammc/ext/doc/synth.hat~.pddoc @@ -0,0 +1,75 @@ + + + + synth.hat~ + + + Serge Poltavsky + + hi-hat synth from faust librariest + GPL3 or later + ceammc + synth + synth kick + 0.9.5 + + synth.kick2~ + + + + play trigger + >0: on, 0: off. To set output gain to 0.5 you can 0.5 as trigger value + on/off dsp processing + attack time + release time + ignore new notes until previous note + is not finished release time + base frequency + bandpass filter cutoff frequency + + + reset synth + + + + play with default duration and full gain + play with default duration and specified gain + GAIN(0..1) DUR(ms) pair expected + + + + synth output + bang after release finished + + + + + + + + diff --git a/ceammc/ext/doc/synth.kick2~-help.pd b/ceammc/ext/doc/synth.kick2~-help.pd new file mode 100644 index 0000000000..6130b366eb --- /dev/null +++ b/ceammc/ext/doc/synth.kick2~-help.pd @@ -0,0 +1,127 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 485 50 cnv 1 280 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 485 50 low-kick synth from faust librariest; +#X obj 1 1 cnv 5 765 40 empty empty synth.kick2~ 20 20 0 20 -104026 +-4096 0; +#X obj 653 11 synth.kick2~; +#X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X floatatom 117 118 5 0 0 0 - - -; +#X obj 174 118 ui.k 20 500 @show_value 1; +#X obj 280 118 ui.k 5 100 @show_value 1; +#X obj 405 118 ui.k 5 500 @show_value 1; +#X obj 539 118 ui.k 1 10 @show_value 1; +#X obj 654 118 ui.k 5 100 @show_value 1; +#X obj 50 147 metro 1000; +#X msg 174 176 @freq \$1; +#X msg 280 176 @attack \$1; +#X msg 405 176 @release \$1; +#X msg 539 176 @drive \$1; +#X msg 654 176 @click \$1; +#X obj 50 234 synth.kick2~; +#X obj 203 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 50 291 ui.hgain~; +#X obj 203 291 ui.dsp~; +#X obj 50 320 dac~; +#X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 409 @active; +#X text 245 409 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 438 @attack; +#X text 245 438 Get/Set attack time. Type: float. Units: ms. Default +value: 20\. Range: 5\...400\.; +#X msg 110 480 @click; +#X text 245 480 Get/Set speed of the pitch envelope. Type: float. Units: +ms. Default value: 20\. Range: 5\...1000\.; +#X msg 110 522 @drive; +#X text 245 522 Get/Set gain multiplier going into the saturator. Type: +float. Default value: 2.5\. Range: 1\...10\.; +#X msg 110 564 @envwait; +#X text 245 564 Get/Set ignore new notes until previous note is not +finished release time. Type: bool. Default value: 0\.; +#X msg 110 606 @freq; +#X text 245 606 Get/Set base frequency. Type: float. Units: Hz. Default +value: 44\. Range: 10\...5000\.; +#X msg 110 648 @gate; +#X text 245 648 Get/Set play trigger >0: on \, 0: off. To set output +gain to 0.5 you can 0.5 as trigger value. Type: float. Default value: +0\. Range: 0\...1\.; +#X msg 110 705 @release; +#X text 245 705 Get/Set release time. Type: float. Units: ms. Default +value: 100\. Range: 5\...4000\.; +#X obj 20 757 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 762 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 797 reset; +#X text 245 797 reset synth.; +#X obj 20 834 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 839 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 840 1\.; +#X text 150 840 *bang*; +#X text 245 840 play with default duration and full gain.; +#X text 150 860 *float*; +#X text 245 860 play with default duration and specified gain.; +#X text 150 880 *list*; +#X text 245 880 GAIN(0\..1) DUR(ms) pair expected.; +#X obj 20 910 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 915 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 916 1\.; +#X text 245 916 synth output.; +#X text 110 936 2\.; +#X text 245 936 bang after release finished.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; +#X obj 1 986 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 989 library: ceammc v0.9.6; +#X text 586 1001 see also:; +#X obj 660 1001 synth.kick~; +#N canvas 10 1008 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 synth.kick2~; +#X text 10 76 category:; +#X text 120 76 synth; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 synth \, kick; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1008 pd info; +#X connect 4 0 11 0; +#X connect 5 0 11 1; +#X connect 6 0 12 0; +#X connect 7 0 13 0; +#X connect 8 0 14 0; +#X connect 9 0 15 0; +#X connect 10 0 16 0; +#X connect 11 0 17 0; +#X connect 12 0 17 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 16 0 17 0; +#X connect 17 1 18 0; +#X connect 17 0 19 0; +#X connect 19 0 21 0; +#X connect 19 0 21 1; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.kick2~.pddoc b/ceammc/ext/doc/synth.kick2~.pddoc new file mode 100644 index 0000000000..8bb40b289c --- /dev/null +++ b/ceammc/ext/doc/synth.kick2~.pddoc @@ -0,0 +1,78 @@ + + + + synth.kick2~ + + + Serge Poltavsky + + low-kick synth from faust librariest + GPL3 or later + ceammc + synth + synth kick + 0.9.5 + + synth.kick~ + + + + play trigger + >0: on, 0: off. To set output gain to 0.5 you can 0.5 as trigger value + on/off dsp processing + attack time + release time + ignore new notes until previous note + is not finished release time + base frequency + speed of the pitch envelope + gain + multiplier going into the saturator + + + reset synth + + + + play with default duration and full gain + play with default duration and specified gain + GAIN(0..1) DUR(ms) pair expected + + + + synth output + bang after release finished + + + + + + + + diff --git a/ceammc/ext/doc/synth.kick~-help.pd b/ceammc/ext/doc/synth.kick~-help.pd index 10fdae9733..20250a7485 100644 --- a/ceammc/ext/doc/synth.kick~-help.pd +++ b/ceammc/ext/doc/synth.kick~-help.pd @@ -20,60 +20,59 @@ #X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 351 @active; -#X text 245 351 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 393 @attack; -#X text 245 393 Get/Set attack time. Type: float. Units: ms. Default +#X text 245 351 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 380 @attack; +#X text 245 380 Get/Set attack time. Type: float. Units: ms. Default value: 10\. Range: 1\...50\.; -#X msg 110 435 @envwait; -#X text 245 435 Get/Set ignore new notes until previous note is not -finished release time. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 492 @freq; -#X text 245 492 Get/Set start frequency. Type: float. Default value: -50\. Range: 10\...5000\.; -#X msg 110 534 @gate; -#X text 245 534 Get/Set play trigger >0: on \, 0: off. To set output +#X msg 110 422 @envwait; +#X text 245 422 Get/Set ignore new notes until previous note is not +finished release time. Type: bool. Default value: 0\.; +#X msg 110 464 @freq; +#X text 245 464 Get/Set start frequency. Type: float. Units: Hz. Default +value: 50\. Range: 10\...5000\.; +#X msg 110 506 @gate; +#X text 245 506 Get/Set play trigger >0: on \, 0: off. To set output gain to 0.5 you can 0.5 as trigger value. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 591 @release; -#X text 245 591 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 563 @release; +#X text 245 563 Get/Set release time. Type: float. Units: ms. Default value: 1000\. Range: 10\...8000\.; -#X obj 20 643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 648 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 620 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 683 reset; -#X text 245 683 reset synth.; -#X obj 20 720 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 725 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 655 reset; +#X text 245 655 reset synth.; +#X obj 20 692 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 697 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 726 1\.; -#X text 150 726 *bang*; -#X text 245 726 play with default duration and full gain.; -#X text 150 746 *float*; -#X text 245 746 play with default duration and specified gain.; -#X text 150 766 *list*; -#X text 245 766 GAIN(0\..1) DUR(ms) pair expected.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 698 1\.; +#X text 150 698 *bang*; +#X text 245 698 play with default duration and full gain.; +#X text 150 718 *float*; +#X text 245 718 play with default duration and specified gain.; +#X text 150 738 *list*; +#X text 245 738 GAIN(0\..1) DUR(ms) pair expected.; +#X obj 20 768 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 773 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 802 1\.; -#X text 245 802 synth output.; -#X text 110 822 2\.; -#X text 245 822 bang after release finished.; +#X text 110 774 1\.; +#X text 245 774 synth output.; +#X text 110 794 2\.; +#X text 245 794 bang after release finished.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 872 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 875 library: ceammc v0.9.4; -#N canvas 10 894 400 290 info 0; +#X obj 1 844 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 847 library: ceammc v0.9.6; +#N canvas 10 866 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.kick~; #X text 10 76 category:; @@ -92,7 +91,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 894 pd info; +#X restore 10 866 pd info; #X connect 4 0 7 0; #X connect 7 0 8 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/synth.kick~.pddoc b/ceammc/ext/doc/synth.kick~.pddoc index 458cc0d967..9190936cc8 100644 --- a/ceammc/ext/doc/synth.kick~.pddoc +++ b/ceammc/ext/doc/synth.kick~.pddoc @@ -16,16 +16,15 @@ play trigger >0: on, 0: off. To set output gain to 0.5 you can 0.5 as trigger value - on/off dsp - processing + on/off dsp processing attack time release time - ignore new notes until - previous note is not finished release time - start - frequency + ignore new notes until previous note + is not finished release time + start frequency reset synth diff --git a/ceammc/ext/doc/synth.ks~-help.pd b/ceammc/ext/doc/synth.ks~-help.pd index 98bc8d615a..5d4d95823f 100644 --- a/ceammc/ext/doc/synth.ks~-help.pd +++ b/ceammc/ext/doc/synth.ks~-help.pd @@ -31,68 +31,68 @@ #X obj 20 460 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 495 @active; -#X text 245 495 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 537 @cutoff; -#X text 245 537 Get/Set cutoff coefficent (for low pass filter). Type: +#X text 245 495 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 524 @cutoff; +#X text 245 524 Get/Set cutoff coefficent (for low pass filter). Type: float. Default value: 1\. Range: 0.1\...1\.; -#X msg 110 579 @freq; -#X text 245 579 Get/Set frequency. Type: float. Units: Hz. Default +#X msg 110 566 @freq; +#X text 245 566 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 621 @gain; -#X text 245 621 Get/Set pluck gain. Type: float. Default value: 1\. +#X msg 110 608 @gain; +#X text 245 608 Get/Set pluck gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 663 @gate; -#X text 245 663 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 650 @gate; +#X text 245 650 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 705 @mode; -#X text 245 705 Get/Set excitation mode: 0 - pluck \, 1 - strike. Type: +#X msg 110 692 @mode; +#X text 245 692 Get/Set excitation mode: 0 - pluck \, 1 - strike. Type: int. Default value: 0\. Range: 0\...1\.; -#X msg 110 747 @mute; -#X text 245 747 Get/Set mute coefficient (0 for no mute and 1 for instant +#X msg 110 734 @mute; +#X text 245 734 Get/Set mute coefficient (0 for no mute and 1 for instant mute). Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 789 @pitch; -#X text 245 789 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 776 @pitch; +#X text 245 776 Get/Set midi pitch. Type: float. Default value: 48\. Range: 36\...84\.; -#X msg 110 831 @pos; -#X text 245 831 Get/Set pluck position (1 is on the bridge). Type: +#X msg 110 818 @pos; +#X text 245 818 Get/Set pluck position (1 is on the bridge). Type: float. Default value: 0.7\. Range: 0\...1\.; -#X msg 110 873 @sharp; -#X text 245 873 Get/Set pluck sharpness. Type: float. Default value: +#X msg 110 860 @sharp; +#X text 245 860 Get/Set pluck sharpness. Type: float. Default value: 0.25\. Range: 0.01\...1\.; -#X obj 20 925 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 930 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 912 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 917 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 965 note; -#X text 245 965 note on/off message. Arguments are:; -#X obj 255 988 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 988 NOTE: midi note. Type: float.; -#X obj 255 1011 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1011 VEL: velocity. Type: float. Range: 0\...127\.; -#X obj 20 1046 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1051 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 952 note; +#X text 245 952 note on/off message. Arguments are:; +#X obj 255 975 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 975 NOTE: midi note. Type: float.; +#X obj 255 998 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 998 VEL: velocity. Type: float. Range: 0\...127\.; +#X obj 20 1033 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1038 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1052 1\.; -#X text 150 1052 *list*; -#X text 245 1052 NOTE VEL.; -#X obj 20 1082 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1087 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1039 1\.; +#X text 150 1039 *list*; +#X text 245 1039 NOTE VEL.; +#X obj 20 1069 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1074 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1088 1\.; -#X text 245 1088 synth output.; +#X text 110 1075 1\.; +#X text 245 1075 synth output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1138 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1141 library: ceammc v0.9.4; -#N canvas 10 1160 400 290 info 0; +#X obj 1 1125 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1128 library: ceammc v0.9.6; +#N canvas 10 1147 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.ks~; #X text 10 76 category:; @@ -111,7 +111,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1160 pd info; +#X restore 10 1147 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/synth.ks~.pddoc b/ceammc/ext/doc/synth.ks~.pddoc index 895ba219dc..2a63de8393 100644 --- a/ceammc/ext/doc/synth.ks~.pddoc +++ b/ceammc/ext/doc/synth.ks~.pddoc @@ -22,7 +22,8 @@ midi pitch - frequency + + frequency pluck position (1 is on the bridge) mute @@ -37,8 +38,7 @@ mode: 0 - pluck, 1 - strike play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.marimba~-help.pd b/ceammc/ext/doc/synth.marimba~-help.pd index 88b72f0fa9..0c28a28832 100644 --- a/ceammc/ext/doc/synth.marimba~-help.pd +++ b/ceammc/ext/doc/synth.marimba~-help.pd @@ -27,61 +27,61 @@ tone bar connected to tube; #X obj 20 489 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 524 @active; -#X text 245 524 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 566 @cutoff; -#X text 245 566 Get/Set cuttoff frequency of the strike generator. +#X text 245 524 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 553 @cutoff; +#X text 245 553 Get/Set cuttoff frequency of the strike generator. Type: float. Default value: 7000\. Range: 1000\...10000\.; -#X msg 110 608 @freq; -#X text 245 608 Get/Set frequency. Type: float. Units: Hz. Default +#X msg 110 595 @freq; +#X text 245 595 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 650 @gain; -#X text 245 650 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 637 @gain; +#X text 245 637 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 692 @gate; -#X text 245 692 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 679 @gate; +#X text 245 679 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 734 @pitch; -#X text 245 734 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 721 @pitch; +#X text 245 721 Get/Set midi pitch. Type: float. Default value: 48\. Range: 36\...84\.; -#X msg 110 776 @pos; -#X text 245 776 Get/Set excitation position. Type: float. Default value: +#X msg 110 763 @pos; +#X text 245 763 Get/Set excitation position. Type: float. Default value: 0\. Range: 0\...4\.; -#X msg 110 818 @sharp; -#X text 245 818 Get/Set sharpness of the strike. Type: float. Default +#X msg 110 805 @sharp; +#X text 245 805 Get/Set sharpness of the strike. Type: float. Default value: 0.25\. Range: 0.01\...1\.; -#X obj 20 870 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 875 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 857 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 862 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 910 note; -#X text 245 910 note on/off message. Arguments are:; -#X obj 255 933 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 933 NOTE: midi note. Type: float.; -#X obj 255 956 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 956 VEL: velocity. Type: float. Range: 0\...127\.; -#X obj 20 991 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 996 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 897 note; +#X text 245 897 note on/off message. Arguments are:; +#X obj 255 920 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 920 NOTE: midi note. Type: float.; +#X obj 255 943 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 943 VEL: velocity. Type: float. Range: 0\...127\.; +#X obj 20 978 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 983 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 997 1\.; -#X text 245 997 input signal.; -#X obj 20 1027 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1032 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 984 1\.; +#X text 245 984 input signal.; +#X obj 20 1014 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1019 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1033 1\.; -#X text 245 1033; +#X text 110 1020 1\.; +#X text 245 1020; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1083 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1086 library: ceammc v0.9.4; -#N canvas 10 1105 400 290 info 0; +#X obj 1 1070 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1073 library: ceammc v0.9.6; +#N canvas 10 1092 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.marimba~; #X text 10 76 category:; @@ -100,7 +100,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1105 pd info; +#X restore 10 1092 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/synth.marimba~.pddoc b/ceammc/ext/doc/synth.marimba~.pddoc index 990e399ceb..da8638c815 100644 --- a/ceammc/ext/doc/synth.marimba~.pddoc +++ b/ceammc/ext/doc/synth.marimba~.pddoc @@ -23,7 +23,8 @@ midi pitch - frequency + + frequency excitation position @@ -34,8 +35,7 @@ gain play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.piano~-help.pd b/ceammc/ext/doc/synth.piano~-help.pd index a7194027ca..3123cb6728 100644 --- a/ceammc/ext/doc/synth.piano~-help.pd +++ b/ceammc/ext/doc/synth.piano~-help.pd @@ -17,78 +17,78 @@ #X obj 20 432 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 467 @active; -#X text 245 467 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 509 @brightness; -#X text 245 509 Get/Set brightness. Type: float. Default value: 0\. +#X text 245 467 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 496 @brightness; +#X text 245 496 Get/Set brightness. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 551 @detuning; -#X text 245 551 Get/Set detuning factor. Type: float. Default value: +#X msg 110 538 @detuning; +#X text 245 538 Get/Set detuning factor. Type: float. Default value: 0.1\. Range: 0\...1\.; -#X msg 110 593 @freq; -#X text 245 593 Get/Set frequency. Type: float. Units: Hz. Default +#X msg 110 580 @freq; +#X text 245 580 Get/Set frequency. Type: float. Units: Hz. Default value: 130.813\.; -#X msg 110 635 @gate; -#X text 245 635 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 622 @gate; +#X text 245 622 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 677 @hammer_hardness; -#X text 245 677 Get/Set hammer hardness. Type: float. Default value: +#X msg 110 664 @hammer_hardness; +#X text 245 664 Get/Set hammer hardness. Type: float. Default value: 0.1\. Range: 0\...1\.; -#X msg 110 719 @pan; -#X text 245 719 Get/Set pan angle. Type: float. Default value: 0.6\. +#X msg 110 706 @pan; +#X text 245 706 Get/Set pan angle. Type: float. Default value: 0.6\. Range: 0\...1\.; -#X msg 110 761 @pitch; -#X text 245 761 Get/Set midi pitch. Type: float. Default value: 48\. +#X msg 110 748 @pitch; +#X text 245 748 Get/Set midi pitch. Type: float. Default value: 48\. Range: 21\...108\.; -#X msg 110 803 @reverb_gain; -#X text 245 803 Get/Set reverb gain. Type: float. Default value: 0.137\. +#X msg 110 790 @reverb_gain; +#X text 245 790 Get/Set reverb gain. Type: float. Default value: 0.137\. Range: 0\...1\.; -#X msg 110 845 @room_size; -#X text 245 845 Get/Set reverb room size. Type: float. Default value: +#X msg 110 832 @room_size; +#X text 245 832 Get/Set reverb room size. Type: float. Default value: 0.36\. Range: 0.005\...1\.; -#X msg 110 887 @stiffness; -#X text 245 887 Get/Set stiffness factor. Type: float. Default value: +#X msg 110 874 @stiffness; +#X text 245 874 Get/Set stiffness factor. Type: float. Default value: 0.28\. Range: 0\...1\.; -#X msg 110 929 @width; -#X text 245 929 Get/Set spatialization width. Type: float. Default +#X msg 110 916 @width; +#X text 245 916 Get/Set spatialization width. Type: float. Default value: 0.5\. Range: 0\...1\.; -#X obj 20 981 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 986 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 968 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 973 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1021 note; -#X text 245 1021 note on/off message. Arguments are:; -#X obj 255 1044 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1044 NOTE: midi note. Type: float.; -#X obj 255 1067 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1067 VEL: velocity. Type: float. Range: 0\...127\.; -#X msg 110 1092 reset; -#X text 245 1092 reset synth.; -#X obj 20 1129 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1134 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1008 note; +#X text 245 1008 note on/off message. Arguments are:; +#X obj 255 1031 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1031 NOTE: midi note. Type: float.; +#X obj 255 1054 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1054 VEL: velocity. Type: float. Range: 0\...127\.; +#X msg 110 1079 reset; +#X text 245 1079 reset synth.; +#X obj 20 1116 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1121 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1135 1\.; -#X text 150 1135 *list*; -#X text 245 1135 NOTE VEL.; -#X obj 20 1165 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1170 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1122 1\.; +#X text 150 1122 *list*; +#X text 245 1122 NOTE VEL.; +#X obj 20 1152 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1157 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1171 1\.; -#X text 245 1171 left output.; -#X text 110 1191 2\.; -#X text 245 1191 right output.; +#X text 110 1158 1\.; +#X text 245 1158 left output.; +#X text 110 1178 2\.; +#X text 245 1178 right output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1241 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1244 library: ceammc v0.9.4; -#N canvas 10 1263 400 290 info 0; +#X obj 1 1228 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1231 library: ceammc v0.9.6; +#N canvas 10 1250 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.piano~; #X text 10 76 category:; @@ -107,7 +107,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1263 pd info; +#X restore 10 1250 pd info; #X connect 4 0 5 1; #X connect 5 0 6 0; #X connect 6 0 7 0; diff --git a/ceammc/ext/doc/synth.piano~.pddoc b/ceammc/ext/doc/synth.piano~.pddoc index 1d51180fd9..7fa932cc23 100644 --- a/ceammc/ext/doc/synth.piano~.pddoc +++ b/ceammc/ext/doc/synth.piano~.pddoc @@ -24,7 +24,8 @@ midi pitch - frequency + + frequency stiffness factor @@ -43,8 +44,7 @@ angle play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.rhodey~-help.pd b/ceammc/ext/doc/synth.rhodey~-help.pd index fc9048e0e5..8ce3ed852f 100644 --- a/ceammc/ext/doc/synth.rhodey~-help.pd +++ b/ceammc/ext/doc/synth.rhodey~-help.pd @@ -74,13 +74,13 @@ value: 0\. Range: 0\...127\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1036 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1039 library: ceammc v0.9.4; +#X text 10 1039 library: ceammc v0.9.6; #N canvas 10 1058 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.rhodey~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.rhodey~.pddoc b/ceammc/ext/doc/synth.rhodey~.pddoc index 8209f73f1d..58591463f5 100644 --- a/ceammc/ext/doc/synth.rhodey~.pddoc +++ b/ceammc/ext/doc/synth.rhodey~.pddoc @@ -21,7 +21,7 @@ midi pitch maximum speed of whistles + units="hertz">maximum speed of whistles synth gate (>0 - play) modulator diff --git a/ceammc/ext/doc/synth.risset_arp~-help.pd b/ceammc/ext/doc/synth.risset_arp~-help.pd index 6b91faf191..8f5fd678a1 100644 --- a/ceammc/ext/doc/synth.risset_arp~-help.pd +++ b/ceammc/ext/doc/synth.risset_arp~-help.pd @@ -23,66 +23,66 @@ #X obj 20 345 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 380 @active; -#X text 245 380 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 422 @detune; -#X text 245 422 Get/Set detune percent. Type: float. Default value: +#X text 245 380 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 409 @detune; +#X text 245 409 Get/Set detune percent. Type: float. Default value: 5\. Range: 0\...1000\.; -#X msg 110 464 @freq; -#X text 245 464 Get/Set base frequency. Type: float. Default value: +#X msg 110 451 @freq; +#X text 245 451 Get/Set base frequency. Type: float. Default value: 100\. Range: 40\...500\.; -#X msg 110 506 @harmonic1; -#X text 245 506 Get/Set 1st harmonic amplitude. Type: float. Default +#X msg 110 493 @harmonic1; +#X text 245 493 Get/Set 1st harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 548 @harmonic2; -#X text 245 548 Get/Set 2nd harmonic amplitude. Type: float. Default +#X msg 110 535 @harmonic2; +#X text 245 535 Get/Set 2nd harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 590 @harmonic3; -#X text 245 590 Get/Set 3rd harmonic amplitude. Type: float. Default +#X msg 110 577 @harmonic3; +#X text 245 577 Get/Set 3rd harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 632 @harmonic4; -#X text 245 632 Get/Set 4th harmonic amplitude. Type: float. Default +#X msg 110 619 @harmonic4; +#X text 245 619 Get/Set 4th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 674 @harmonic5; -#X text 245 674 Get/Set 5th harmonic amplitude. Type: float. Default +#X msg 110 661 @harmonic5; +#X text 245 661 Get/Set 5th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 716 @harmonic6; -#X text 245 716 Get/Set 6th harmonic amplitude. Type: float. Default +#X msg 110 703 @harmonic6; +#X text 245 703 Get/Set 6th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 758 @harmonic7; -#X text 245 758 Get/Set 7th harmonic amplitude. Type: float. Default +#X msg 110 745 @harmonic7; +#X text 245 745 Get/Set 7th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 800 @harmonic8; -#X text 245 800 Get/Set 8th harmonic amplitude. Type: float. Default +#X msg 110 787 @harmonic8; +#X text 245 787 Get/Set 8th harmonic amplitude. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 842 @spread; -#X text 245 842 Get/Set stereo spread. Type: float. Default value: +#X msg 110 829 @spread; +#X text 245 829 Get/Set stereo spread. Type: float. Default value: 1\. Range: 0\...1\.; -#X obj 20 894 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 899 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 881 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 886 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 900 1\.; -#X text 245 900 control inlet.; -#X obj 20 930 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 935 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 887 1\.; +#X text 245 887 control inlet.; +#X obj 20 917 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 922 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 936 1\.; -#X text 245 936; -#X text 110 956 2\.; -#X text 245 956; +#X text 110 923 1\.; +#X text 245 923; +#X text 110 943 2\.; +#X text 245 943; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1006 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1009 library: ceammc v0.9.4; -#N canvas 10 1028 400 290 info 0; +#X obj 1 993 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 996 library: ceammc v0.9.6; +#N canvas 10 1015 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.risset_arp~; #X text 10 76 category:; @@ -101,7 +101,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1028 pd info; +#X restore 10 1015 pd info; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 4 0 10 0; @@ -111,6 +111,7 @@ https://github.com/uliss/pure-data; #X connect 10 1 11 1; #X connect 7 0 12 0; #X connect 11 0 13 0; +#X connect 11 1 13 1; #X connect 12 0 14 0; #X connect 14 0 16 0; #X connect 16 0 17 0; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.risset_arp~.pddoc b/ceammc/ext/doc/synth.risset_arp~.pddoc index 402a28ed6c..e2d7f09b57 100644 --- a/ceammc/ext/doc/synth.risset_arp~.pddoc +++ b/ceammc/ext/doc/synth.risset_arp~.pddoc @@ -37,8 +37,7 @@ harmonic amplitude 8th harmonic amplitude - on/off dsp - processing + on/off dsp processing @@ -59,7 +58,7 @@ [synth.risset_arp~ ] | *|* | [ui.hgain2~ @size] [list.enumerate @from 1] -| | +*|* | [dac~ #b] [list.repack 2] | [ui.dsp~] [@harmonic$1 $2( diff --git a/ceammc/ext/doc/synth.risset_bell~-help.pd b/ceammc/ext/doc/synth.risset_bell~-help.pd index 9c2d87a0b6..1eed4d24b5 100644 --- a/ceammc/ext/doc/synth.risset_bell~-help.pd +++ b/ceammc/ext/doc/synth.risset_bell~-help.pd @@ -22,60 +22,60 @@ #X text 110 409 1\.; #X text 150 409 float; #X obj 246 410 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 409 FREQ(Hz): main frequency. Type: float.; +#X text 245 409 FREQ(Hz): main frequency. Type: float. Range: 1\...10000; #X text 110 429 2\.; #X text 150 429 float; #X obj 246 430 cnv 1 62 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 429 DUR(ms): duration. Type: float.; +#X text 245 429 DUR(ms): duration. Type: float. Range: 10\...600000; #X obj 20 459 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 464 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 499 @active; -#X text 245 499 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 541 @dur; -#X text 245 541 Get/Set duration. Type: float. Units: ms. Default value: +#X text 245 499 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 528 @dur; +#X text 245 528 Get/Set duration. Type: float. Units: ms. Default value: 5000\. Range: 10\...600000\.; -#X msg 110 583 @freq; -#X text 245 583 Get/Set base frequency. Type: float. Units: Hz. Default +#X msg 110 570 @freq; +#X text 245 570 Get/Set base frequency. Type: float. Units: Hz. Default value: 440\. Range: 1\...10000\.; -#X msg 110 625 @gate; -#X text 245 625 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 612 @gate; +#X text 245 612 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 667 @pfreq; -#X text 245 667 Get/Set freq multiplication coefficient. Type: float. +#X msg 110 654 @pfreq; +#X text 245 654 Get/Set freq multiplication coefficient. Type: float. Default value: 1\. Range: 0\...10\.; -#X obj 20 719 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 724 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 706 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 711 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 759 reset; -#X text 245 759 reset synth.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 746 reset; +#X text 245 746 reset synth.; +#X obj 20 783 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 788 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 802 1\.; -#X text 150 802 *bang*; -#X text 245 802 play.; -#X text 150 822 *float*; -#X text 245 822 play with specified amp.; -#X obj 20 852 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 857 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 789 1\.; +#X text 150 789 *bang*; +#X text 245 789 play.; +#X text 150 809 *float*; +#X text 245 809 play with specified amp.; +#X obj 20 839 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 844 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 858 1\.; -#X text 245 858 output signal.; +#X text 110 845 1\.; +#X text 245 845 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 908 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 911 library: ceammc v0.9.4; -#N canvas 10 930 400 290 info 0; +#X obj 1 895 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 898 library: ceammc v0.9.6; +#N canvas 10 917 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.risset_bell~; #X text 10 76 category:; @@ -94,7 +94,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 930 pd info; +#X restore 10 917 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/synth.risset_bell~.pddoc b/ceammc/ext/doc/synth.risset_bell~.pddoc index 1902e8962f..791ec8855e 100644 --- a/ceammc/ext/doc/synth.risset_bell~.pddoc +++ b/ceammc/ext/doc/synth.risset_bell~.pddoc @@ -14,20 +14,21 @@ 0.9.4 - main frequency - duration + main + frequency + + duration base frequency + units="hertz">base frequency freq multiplication coefficient duration play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing reset synth diff --git a/ceammc/ext/doc/synth.risset_tone~-help.pd b/ceammc/ext/doc/synth.risset_tone~-help.pd index 64daace5a0..8008d9ff11 100644 --- a/ceammc/ext/doc/synth.risset_tone~-help.pd +++ b/ceammc/ext/doc/synth.risset_tone~-help.pd @@ -30,46 +30,46 @@ #X obj 20 464 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 499 @active; -#X text 245 499 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 541 @centroid; -#X text 245 541 Get/Set main frequency. Units: MIDI note. Type: float. +#X text 245 499 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 528 @centroid; +#X text 245 528 Get/Set main frequency. Units: MIDI note. Type: float. Default value: 60\. Range: 20\...120\.; -#X msg 110 583 @range; -#X text 245 583 Get/Set glissando range in MIDI note units. Type: float. +#X msg 110 570 @range; +#X text 245 570 Get/Set glissando range in MIDI note units. Type: float. Default value: 120\. Range: 1\...120\.; -#X msg 110 625 @rate; -#X text 245 625 Get/Set glissanso speed. Type: float. Default value: +#X msg 110 612 @rate; +#X text 245 612 Get/Set glissanso speed. Type: float. Default value: 0.01\. Range: -2\...2\.; -#X obj 20 677 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 682 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 664 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 669 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 717 reset; -#X text 245 717 reset to start position.; -#X obj 20 754 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 759 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 704 reset; +#X text 245 704 reset to start position.; +#X obj 20 741 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 746 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 760 1\.; -#X text 150 760 *bang*; -#X text 245 760 reset to start position.; -#X obj 20 790 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 795 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 747 1\.; +#X text 150 747 *bang*; +#X text 245 747 reset to start position.; +#X obj 20 777 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 782 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 796 1\.; -#X text 245 796 output signal.; +#X text 110 783 1\.; +#X text 245 783 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 846 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 849 library: ceammc v0.9.4; -#N canvas 10 868 400 290 info 0; +#X obj 1 833 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 836 library: ceammc v0.9.6; +#N canvas 10 855 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.risset_tone~; #X text 10 76 category:; @@ -88,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 868 pd info; +#X restore 10 855 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 8 0 11 0; diff --git a/ceammc/ext/doc/synth.risset_tone~.pddoc b/ceammc/ext/doc/synth.risset_tone~.pddoc index e5cd5041f6..5cf3376e68 100644 --- a/ceammc/ext/doc/synth.risset_tone~.pddoc +++ b/ceammc/ext/doc/synth.risset_tone~.pddoc @@ -25,8 +25,7 @@ frequency. Units: MIDI note glissando range in MIDI note units - on/off dsp - processing + on/off dsp processing reset to start position diff --git a/ceammc/ext/doc/synth.russian_bell~-help.pd b/ceammc/ext/doc/synth.russian_bell~-help.pd index ebf8d83ea1..cd28723c5a 100644 --- a/ceammc/ext/doc/synth.russian_bell~-help.pd +++ b/ceammc/ext/doc/synth.russian_bell~-help.pd @@ -25,61 +25,61 @@ from the bottom to the top of the bell; #X obj 20 739 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 774 @active; -#X text 245 774 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 816 @cutoff; -#X text 245 816 Get/Set strike cutoff frequency. Type: float. Units: +#X text 245 774 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 803 @cutoff; +#X text 245 803 Get/Set strike cutoff frequency. Type: float. Units: Hz. Default value: 4000\. Range: 20\...20000\.; -#X msg 110 858 @decay_ratio; -#X text 245 858 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 845 @decay_ratio; +#X text 245 845 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 900 @decay_slope; -#X text 245 900 Get/Set decay slope. Type: float. Default value: 3\. +#X msg 110 887 @decay_slope; +#X text 245 887 Get/Set decay slope. Type: float. Default value: 3\. Range: 0\...10\.; -#X msg 110 942 @gain; -#X text 245 942 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 929 @gain; +#X text 245 929 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 984 @gate; -#X text 245 984 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 971 @gate; +#X text 245 971 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1026 @pos; -#X text 245 1026 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 1013 @pos; +#X text 245 1013 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1068 @sharp; -#X text 245 1068 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1055 @sharp; +#X text 245 1055 Get/Set strike sharpness. Type: float. Default value: 0.25\. Range: 0.01\...5\.; -#X msg 110 1110 @t60; -#X text 245 1110 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1097 @t60; +#X text 245 1097 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1202 reset; -#X text 245 1202 reset synth.; -#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1244 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset synth.; +#X obj 20 1226 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1231 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1245 1\.; -#X text 150 1245 *bang*; -#X text 245 1245 play.; -#X obj 20 1275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1280 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1232 1\.; +#X text 150 1232 *bang*; +#X text 245 1232 play.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1281 1\.; -#X text 245 1281 output signal.; +#X text 110 1268 1\.; +#X text 245 1268 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1331 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1334 library: ceammc v0.9.4; -#N canvas 10 1353 400 290 info 0; +#X obj 1 1318 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1321 library: ceammc v0.9.6; +#N canvas 10 1340 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.russian_bell~; #X text 10 76 category:; @@ -98,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1353 pd info; +#X restore 10 1340 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.russian_bell~.pddoc b/ceammc/ext/doc/synth.russian_bell~.pddoc index cab4c7645a..7b176fdc90 100644 --- a/ceammc/ext/doc/synth.russian_bell~.pddoc +++ b/ceammc/ext/doc/synth.russian_bell~.pddoc @@ -32,7 +32,7 @@ strike sharpness strike cutoff frequency + units="hertz">strike cutoff frequency time to decay to -60db level decay @@ -41,8 +41,7 @@ slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.shakers~-help.pd b/ceammc/ext/doc/synth.shakers~-help.pd index ce92fa9540..8fb3099a27 100644 --- a/ceammc/ext/doc/synth.shakers~-help.pd +++ b/ceammc/ext/doc/synth.shakers~-help.pd @@ -74,13 +74,13 @@ dime_mug quarter_mug franc_mug peso_mug guiro wrench water_drops tuned_bamboo_ch #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1149 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1152 library: ceammc v0.9.4; +#X text 10 1152 library: ceammc v0.9.6; #N canvas 10 1171 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.shakers~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.shakers~.pddoc b/ceammc/ext/doc/synth.shakers~.pddoc index ba68017074..5058786f87 100644 --- a/ceammc/ext/doc/synth.shakers~.pddoc +++ b/ceammc/ext/doc/synth.shakers~.pddoc @@ -29,7 +29,7 @@ instrument type - all instrument types diff --git a/ceammc/ext/doc/synth.sitar~-help.pd b/ceammc/ext/doc/synth.sitar~-help.pd index edd8474930..f721da6632 100644 --- a/ceammc/ext/doc/synth.sitar~-help.pd +++ b/ceammc/ext/doc/synth.sitar~-help.pd @@ -59,13 +59,13 @@ Range: 36\...84\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 826 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 829 library: ceammc v0.9.4; +#X text 10 829 library: ceammc v0.9.6; #N canvas 10 848 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.sitar~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.sitar~.pddoc b/ceammc/ext/doc/synth.sitar~.pddoc index 962fe35520..5b59de858f 100644 --- a/ceammc/ext/doc/synth.sitar~.pddoc +++ b/ceammc/ext/doc/synth.sitar~.pddoc @@ -21,7 +21,7 @@ midi pitch maximum speed of whistles + units="hertz">maximum speed of whistles synth gate (>0 - play) diff --git a/ceammc/ext/doc/synth.snare~-help.pd b/ceammc/ext/doc/synth.snare~-help.pd index 3a3c6811b6..5f5a0e91a1 100644 --- a/ceammc/ext/doc/synth.snare~-help.pd +++ b/ceammc/ext/doc/synth.snare~-help.pd @@ -20,60 +20,59 @@ #X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 351 @active; -#X text 245 351 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 393 @attack; -#X text 245 393 Get/Set attack time. Type: float. Units: ms. Default +#X text 245 351 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 380 @attack; +#X text 245 380 Get/Set attack time. Type: float. Units: ms. Default value: 0.5\. Range: 0.3\...100\.; -#X msg 110 435 @decay; -#X text 245 435 Get/Set decay time. Type: float. Units: ms. Default +#X msg 110 422 @decay; +#X text 245 422 Get/Set decay time. Type: float. Units: ms. Default value: 1\. Range: 1\...100\.; -#X msg 110 477 @envwait; -#X text 245 477 Get/Set ignore new notes until previous note is not -finished release time. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 534 @gate; -#X text 245 534 Get/Set play trigger >0: on \, 0: off. To set output +#X msg 110 464 @envwait; +#X text 245 464 Get/Set ignore new notes until previous note is not +finished release time. Type: bool. Default value: 0\.; +#X msg 110 506 @gate; +#X text 245 506 Get/Set play trigger >0: on \, 0: off. To set output gain to 0.5 you can 0.5 as trigger value. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 591 @release; -#X text 245 591 Get/Set release time. Type: float. Units: ms. Default +#X msg 110 563 @release; +#X text 245 563 Get/Set release time. Type: float. Units: ms. Default value: 200\. Range: 10\...1000\.; -#X obj 20 643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 648 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 615 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 620 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 683 reset; -#X text 245 683 reset synth.; -#X obj 20 720 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 725 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 655 reset; +#X text 245 655 reset synth.; +#X obj 20 692 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 697 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 726 1\.; -#X text 150 726 *bang*; -#X text 245 726 play with default duration and full gain.; -#X text 150 746 *float*; -#X text 245 746 play with default duration and specified gain.; -#X text 150 766 *list*; -#X text 245 766 GAIN(0\..1) DUR(ms) pair expected.; -#X obj 20 796 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 801 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 698 1\.; +#X text 150 698 *bang*; +#X text 245 698 play with default duration and full gain.; +#X text 150 718 *float*; +#X text 245 718 play with default duration and specified gain.; +#X text 150 738 *list*; +#X text 245 738 GAIN(0\..1) DUR(ms) pair expected.; +#X obj 20 768 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 773 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 802 1\.; -#X text 245 802 synth output.; -#X text 110 822 2\.; -#X text 245 822 bang after release finished.; +#X text 110 774 1\.; +#X text 245 774 synth output.; +#X text 110 794 2\.; +#X text 245 794 bang after release finished.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 872 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 875 library: ceammc v0.9.4; -#N canvas 10 894 400 290 info 0; +#X obj 1 844 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 847 library: ceammc v0.9.6; +#N canvas 10 866 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.snare~; #X text 10 76 category:; @@ -92,7 +91,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 894 pd info; +#X restore 10 866 pd info; #X connect 4 0 7 0; #X connect 7 0 8 0; #X connect 5 0 9 0; diff --git a/ceammc/ext/doc/synth.snare~.pddoc b/ceammc/ext/doc/synth.snare~.pddoc index a2a0f92015..67ef43777b 100644 --- a/ceammc/ext/doc/synth.snare~.pddoc +++ b/ceammc/ext/doc/synth.snare~.pddoc @@ -16,16 +16,15 @@ play trigger >0: on, 0: off. To set output gain to 0.5 you can 0.5 as trigger value - on/off dsp - processing + on/off dsp processing attack time decay time release time - ignore new notes until - previous note is not finished release time + ignore new notes until previous note + is not finished release time reset synth diff --git a/ceammc/ext/doc/synth.standard_bell~-help.pd b/ceammc/ext/doc/synth.standard_bell~-help.pd index e4c3b25651..6088efb5e9 100644 --- a/ceammc/ext/doc/synth.standard_bell~-help.pd +++ b/ceammc/ext/doc/synth.standard_bell~-help.pd @@ -25,61 +25,61 @@ from the bottom to the top of the bell; #X obj 20 739 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 774 @active; -#X text 245 774 Get/Set on/off dsp processing. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 816 @cutoff; -#X text 245 816 Get/Set strike cutoff frequency. Type: float. Units: +#X text 245 774 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 803 @cutoff; +#X text 245 803 Get/Set strike cutoff frequency. Type: float. Units: Hz. Default value: 4000\. Range: 20\...20000\.; -#X msg 110 858 @decay_ratio; -#X text 245 858 Get/Set decay ratio. Type: float. Default value: 1\. +#X msg 110 845 @decay_ratio; +#X text 245 845 Get/Set decay ratio. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 900 @decay_slope; -#X text 245 900 Get/Set decay slope. Type: float. Default value: 3\. +#X msg 110 887 @decay_slope; +#X text 245 887 Get/Set decay slope. Type: float. Default value: 3\. Range: 0\...10\.; -#X msg 110 942 @gain; -#X text 245 942 Get/Set strike gain. Type: float. Default value: 1\. +#X msg 110 929 @gain; +#X text 245 929 Get/Set strike gain. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 984 @gate; -#X text 245 984 Get/Set play trigger - 1: on \, 0: off. Type: float. +#X msg 110 971 @gate; +#X text 245 971 Get/Set play trigger - 1: on \, 0: off. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1026 @pos; -#X text 245 1026 Get/Set strike position (0 is on the bottom). Type: +#X msg 110 1013 @pos; +#X text 245 1013 Get/Set strike position (0 is on the bottom). Type: int. Default value: 0\. Range: 0\...6\.; -#X msg 110 1068 @sharp; -#X text 245 1068 Get/Set strike sharpness. Type: float. Default value: +#X msg 110 1055 @sharp; +#X text 245 1055 Get/Set strike sharpness. Type: float. Default value: 0.25\. Range: 0.01\...5\.; -#X msg 110 1110 @t60; -#X text 245 1110 Get/Set time to decay to -60db level. Type: float. +#X msg 110 1097 @t60; +#X text 245 1097 Get/Set time to decay to -60db level. Type: float. Units: sec. Default value: 20\. Range: 0.1\...30\.; -#X obj 20 1162 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1167 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1154 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1202 reset; -#X text 245 1202 reset synth.; -#X obj 20 1239 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1244 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1189 reset; +#X text 245 1189 reset synth.; +#X obj 20 1226 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1231 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1245 1\.; -#X text 150 1245 *bang*; -#X text 245 1245 play.; -#X obj 20 1275 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1280 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1232 1\.; +#X text 150 1232 *bang*; +#X text 245 1232 play.; +#X obj 20 1262 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1267 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1281 1\.; -#X text 245 1281 output signal.; +#X text 110 1268 1\.; +#X text 245 1268 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; -#X obj 1 1331 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1334 library: ceammc v0.9.4; -#N canvas 10 1353 400 290 info 0; +#X obj 1 1318 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1321 library: ceammc v0.9.6; +#N canvas 10 1340 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.standard_bell~; #X text 10 76 category:; @@ -98,7 +98,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1353 pd info; +#X restore 10 1340 pd info; #X connect 8 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; diff --git a/ceammc/ext/doc/synth.standard_bell~.pddoc b/ceammc/ext/doc/synth.standard_bell~.pddoc index 322d300fe7..37f2e5a392 100644 --- a/ceammc/ext/doc/synth.standard_bell~.pddoc +++ b/ceammc/ext/doc/synth.standard_bell~.pddoc @@ -32,7 +32,7 @@ strike sharpness strike cutoff frequency + units="hertz">strike cutoff frequency time to decay to -60db level decay @@ -41,8 +41,7 @@ slope play trigger - 1: on, 0: off - on/off dsp - processing + on/off dsp processing diff --git a/ceammc/ext/doc/synth.tube_bell~-help.pd b/ceammc/ext/doc/synth.tube_bell~-help.pd index 5ca35f318b..f119542c52 100644 --- a/ceammc/ext/doc/synth.tube_bell~-help.pd +++ b/ceammc/ext/doc/synth.tube_bell~-help.pd @@ -26,7 +26,7 @@ #X text 110 507 1\.; #X text 150 507 float; #X obj 246 508 cnv 1 69 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 507 FREQ(Hz): main frequency. Type: float.; +#X text 245 507 FREQ(Hz): main frequency. Type: float. Min value: 0; #X obj 20 537 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 542 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -86,13 +86,13 @@ Range: 36\...84\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1207 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1210 library: ceammc v0.9.4; +#X text 10 1210 library: ceammc v0.9.6; #N canvas 10 1229 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.tube_bell~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.tube_bell~.pddoc b/ceammc/ext/doc/synth.tube_bell~.pddoc index eeb0ac41d5..5aa70d1a4c 100644 --- a/ceammc/ext/doc/synth.tube_bell~.pddoc +++ b/ceammc/ext/doc/synth.tube_bell~.pddoc @@ -18,11 +18,11 @@ algorithm 5 of the TX81Z - main frequency + main frequency frequency + units="hertz">frequency midi pitch play trigger diff --git a/ceammc/ext/doc/synth.voice_fofc~-help.pd b/ceammc/ext/doc/synth.voice_fofc~-help.pd new file mode 100644 index 0000000000..737d80106d --- /dev/null +++ b/ceammc/ext/doc/synth.voice_fofc~-help.pd @@ -0,0 +1,148 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 310 50 cnv 1 455 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 310 50 Simple formant/vocal synthesizer with FOF-cycle filterbank.; +#X obj 1 1 cnv 5 765 40 empty empty synth.voice_fofc~ 20 20 0 20 +-104026 -4096 0; +#X obj 617 11 synth.voice_fofc~; +#X obj 210 80 cnv 1 555 215 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Simple formant/vocal synthesizer based on a source/filter +model. The source is just a periodic impulse and the "filter" is a +bank of FOF filters.; +#X text 215 135 Formant parameters are linearly interpolated allowing +to go smoothly from one vowel to another. Voice type can be selected +but must correspond to the frequency range of the synthesized voice +to be realistic.; +#X text 215 205 A cycle of 12 FOF filters with sample-and-hold is used +so that the fof filter parameters can be varied in realtime.; +#X text 215 245 This technique is more robust but more computationally +expensive than FofSmooth; +#X obj 50 323 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 352 @gate \$1; +#X obj 69 381 ui.tab alto bass countertenor soprano tenor @size 360 +17; +#X msg 69 410 @voice \$1; +#X msg 194 410 random move; +#X floatatom 88 439 5 0 0 0 - - -; +#X obj 194 439 ui.tab a e i o u; +#X obj 386 439 ui.hsl 0 40 @show_value 1; +#X msg 88 467 @freq \$1; +#X msg 194 467 @vowel \$1; +#X msg 386 467 @wsmooth \$1; +#X obj 50 496 synth.voice_fofc~ bass @freq 120; +#X obj 50 525 flt.lpf24~ 4500; +#X obj 50 554 ui.gain~ @size 120 16; +#X obj 290 554 ui.dsp~; +#X obj 50 583 dac~; +#X obj 20 632 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 637 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 672 1\.; +#X text 150 672 symbol; +#X obj 246 673 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 672 VOICE: voice type. Type: symbol.; +#X text 110 692 2\.; +#X text 150 692 symbol; +#X obj 246 693 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 692 VOWEL: vowel. Type: symbol.; +#X obj 20 722 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 727 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 762 @active; +#X text 245 762 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 791 @attack; +#X text 245 791 Get/Set attack time. Type: float. Units: ms. Default +value: 30\. Range: 0\...1000\.; +#X msg 110 833 @freq; +#X text 245 833 Get/Set frequency. Type: float. Units: Hz. Default +value: 440\. Range: 20\...20000.0\.; +#X msg 110 875 @fvowel; +#X text 245 875 Get/Set vowel index: 0=a \, 1=e \, 2=i \, 3=o \, 4=u. +Float values can be interpoltaed. Type: float. Default value: 0\. Range: +0\...4\.; +#X msg 110 932 @gate; +#X text 245 932 Get/Set synth gate (>0 - play). Type: bool. Default +value: 0\.; +#X msg 110 974 @portamento; +#X text 245 974 Get/Set portamento time. Type: float. Units: ms. Default +value: 0\. Range: 0\...4000\.; +#X msg 110 1016 @release; +#X text 245 1016 Get/Set release time. Type: float. Units: ms. Default +value: 50\. Range: 0\...1000\.; +#X msg 110 1058 @vibr_freq; +#X text 245 1058 Get/Set vibrato frequency. Type: float. Units: Hz. +Default value: 6\. Range: 1\...10\.; +#X msg 110 1100 @vibr_gain; +#X text 245 1100 Get/Set vibrato frequency. Type: float. Default value: +0.5\. Range: 0\...1\.; +#X msg 110 1142 @voice; +#X text 245 1142 Get/Set voice type. Note: can be set by corresponding +index. Type: symbol. Default value: alto. Allowed values: alto \, bass +\, countertenor \, soprano \, tenor.; +#X msg 110 1199 @vowel; +#X text 245 1199 Get/Set vowel type. Note: can be set by corresponding +index. Type: symbol. Default value: a. Allowed values: a \, e \, i +\, o \, u.; +#X msg 110 1256 @wsmooth; +#X text 245 1256 Get/Set vowel smoothing time. Type: float. Units: +ms. Default value: 10\. Range: 0\...1000\.; +#X obj 20 1308 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1313 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1314 1\.; +#X text 245 1314 control input.; +#X obj 20 1344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1349 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1350 1\.; +#X text 245 1350 synth output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; +#X obj 1 1400 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1403 library: ceammc v0.9.6; +#X text 543 1415 see also:; +#X obj 617 1415 synth.voice_fofs~; +#N canvas 10 1422 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 synth.voice_fofc~; +#X text 10 76 category:; +#X text 120 76 synth; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 voice \, fof \, voice \, cycle; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1422 pd info; +#X connect 9 0 10 0; +#X connect 11 0 12 0; +#X connect 13 0 15 0; +#X connect 14 0 17 0; +#X connect 15 0 18 0; +#X connect 16 0 19 0; +#X connect 10 0 20 0; +#X connect 12 0 20 0; +#X connect 17 0 20 0; +#X connect 18 0 20 0; +#X connect 19 0 20 0; +#X connect 20 0 21 0; +#X connect 21 0 22 0; +#X connect 22 0 24 0; +#X connect 22 0 24 1; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.voice_fofc~.pddoc b/ceammc/ext/doc/synth.voice_fofc~.pddoc new file mode 100644 index 0000000000..4909d96305 --- /dev/null +++ b/ceammc/ext/doc/synth.voice_fofc~.pddoc @@ -0,0 +1,96 @@ + + + + synth.voice_fofc~ + + + Serge Poltavsky + + Simple formant/vocal synthesizer with FOF-cycle filterbank. + GPL3 or later + ceammc + synth + voice fof voice cycle + 0.9.6 + + synth.voice_fofs~ + + + + Simple formant/vocal synthesizer based on a source/filter model. The source is + just a periodic impulse and the "filter" is a bank of FOF filters. + Formant parameters are linearly interpolated allowing to go smoothly from one + vowel to another. Voice type can be selected but must correspond to the frequency range + of the synthesized voice to be realistic. + A cycle of 12 FOF filters with sample-and-hold is used so that the fof filter + parameters can be varied in realtime. + This technique is more robust but more computationally expensive than + FofSmooth + + + voice type + vowel + + + frequency + synth gate (>0 - play) + vibrato frequency + + vibrato frequency + voice type. Note: can be set by + corresponding index. + vowel type. Note: + can be set by corresponding index. + attack time + release time + on/off dsp processing + portamento time + vowel smoothing time + vowel + index: 0=a, 1=e, 2=i, 3=o, 4=u. Float values can be interpoltaed. + + + + control input + + + + synth output + + + + + + + + diff --git a/ceammc/ext/doc/synth.voice_fofs~-help.pd b/ceammc/ext/doc/synth.voice_fofs~-help.pd new file mode 100644 index 0000000000..0fb502f59c --- /dev/null +++ b/ceammc/ext/doc/synth.voice_fofs~-help.pd @@ -0,0 +1,144 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 302 50 cnv 1 463 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 302 50 Simple formant/vocal synthesizer with FOF-smooth filterbank.; +#X obj 1 1 cnv 5 765 40 empty empty synth.voice_fofs~ 20 20 0 20 +-104026 -4096 0; +#X obj 617 11 synth.voice_fofs~; +#X obj 210 80 cnv 1 555 135 empty empty empty 17 7 0 10 -257983 -1 0; +#X text 215 80 Simple formant/vocal synthesizer based on a source/filter +model. The source is just a periodic impulse and the "filter" is a +bank of FOF filters.; +#X text 215 135 Formant parameters are linearly interpolated allowing +to go smoothly from one vowel to another. Voice type can be selected +but must correspond to the frequency range of the synthesized voice +to be realistic.; +#X obj 50 243 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 272 @gate \$1; +#X obj 69 301 ui.tab alto bass countertenor soprano tenor @size 360 +17; +#X msg 69 330 @voice \$1; +#X msg 194 330 random move; +#X floatatom 88 359 5 0 0 0 - - -; +#X obj 194 359 ui.tab a e i o u; +#X obj 386 359 ui.hsl 0 40 @show_value 1; +#X msg 88 387 @freq \$1; +#X msg 194 387 @vowel \$1; +#X msg 386 387 @wsmooth \$1; +#X obj 50 416 synth.voice_fofs~ bass @freq 120; +#X obj 50 445 flt.lpf24~ 4500; +#X obj 50 474 ui.gain~ @size 120 16; +#X obj 290 474 ui.dsp~; +#X obj 50 503 dac~; +#X obj 20 552 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 557 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 592 1\.; +#X text 150 592 symbol; +#X obj 246 593 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 592 VOICE: voice type. Type: symbol.; +#X text 110 612 2\.; +#X text 150 612 symbol; +#X obj 246 613 cnv 1 47 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 612 VOWEL: vowel. Type: symbol.; +#X obj 20 642 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 647 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 682 @active; +#X text 245 682 Get/Set on/off dsp processing. Type: bool. Default +value: 1\.; +#X msg 110 711 @attack; +#X text 245 711 Get/Set attack time. Type: float. Units: ms. Default +value: 30\. Range: 0\...1000\.; +#X msg 110 753 @freq; +#X text 245 753 Get/Set frequency. Type: float. Units: Hz. Default +value: 440\. Range: 20\...20000.0\.; +#X msg 110 795 @fvowel; +#X text 245 795 Get/Set vowel index: 0=a \, 1=e \, 2=i \, 3=o \, 4=u. +Float values can be interpoltaed. Type: float. Default value: 0\. Range: +0\...4\.; +#X msg 110 852 @gate; +#X text 245 852 Get/Set synth gate (>0 - play). Type: bool. Default +value: 0\.; +#X msg 110 894 @portamento; +#X text 245 894 Get/Set portamento time. Type: float. Units: ms. Default +value: 0\. Range: 0\...4000\.; +#X msg 110 936 @release; +#X text 245 936 Get/Set release time. Type: float. Units: ms. Default +value: 50\. Range: 0\...1000\.; +#X msg 110 978 @vibr_freq; +#X text 245 978 Get/Set vibrato frequency. Type: float. Units: Hz. +Default value: 6\. Range: 1\...10\.; +#X msg 110 1020 @vibr_gain; +#X text 245 1020 Get/Set vibrato frequency. Type: float. Default value: +0.5\. Range: 0\...1\.; +#X msg 110 1062 @voice; +#X text 245 1062 Get/Set voice type. Note: can be set by corresponding +index. Type: symbol. Default value: alto. Allowed values: alto \, bass +\, countertenor \, soprano \, tenor.; +#X msg 110 1119 @vowel; +#X text 245 1119 Get/Set vowel type. Note: can be set by corresponding +index. Type: symbol. Default value: a. Allowed values: a \, e \, i +\, o \, u.; +#X msg 110 1176 @wsmooth; +#X text 245 1176 Get/Set vowel smoothing time. Type: float. Units: +ms. Default value: 10\. Range: 0\...1000\.; +#X obj 20 1228 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1233 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1234 1\.; +#X text 245 1234 control input.; +#X obj 20 1264 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1269 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 1270 1\.; +#X text 245 1270 synth output.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; +#X obj 1 1320 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1323 library: ceammc v0.9.6; +#X text 543 1335 see also:; +#X obj 617 1335 synth.voice_fofc~; +#N canvas 10 1342 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 synth.voice_fofs~; +#X text 10 76 category:; +#X text 120 76 synth; +#X text 10 98 since:; +#X text 120 98 0.9.6; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 voice \, fof \, voice \, cycle; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 1342 pd info; +#X connect 7 0 8 0; +#X connect 9 0 10 0; +#X connect 11 0 13 0; +#X connect 12 0 15 0; +#X connect 13 0 16 0; +#X connect 14 0 17 0; +#X connect 8 0 18 0; +#X connect 10 0 18 0; +#X connect 15 0 18 0; +#X connect 16 0 18 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 20 0 22 0; +#X connect 20 0 22 1; \ No newline at end of file diff --git a/ceammc/ext/doc/synth.voice_fofs~.pddoc b/ceammc/ext/doc/synth.voice_fofs~.pddoc new file mode 100644 index 0000000000..b7b09334de --- /dev/null +++ b/ceammc/ext/doc/synth.voice_fofs~.pddoc @@ -0,0 +1,92 @@ + + + + synth.voice_fofs~ + + + Serge Poltavsky + + Simple formant/vocal synthesizer with FOF-smooth filterbank. + GPL3 or later + ceammc + synth + voice fof voice cycle + 0.9.6 + + synth.voice_fofc~ + + + + Simple formant/vocal synthesizer based on a source/filter model. The source is + just a periodic impulse and the "filter" is a bank of FOF filters. + Formant parameters are linearly interpolated allowing to go smoothly from one + vowel to another. Voice type can be selected but must correspond to the frequency range + of the synthesized voice to be realistic. + + + voice type + vowel + + + frequency + synth gate (>0 - play) + vibrato frequency + + vibrato frequency + voice type. Note: can be set by + corresponding index. + vowel type. Note: + can be set by corresponding index. + attack time + release time + on/off dsp processing + portamento time + vowel smoothing time + vowel + index: 0=a, 1=e, 2=i, 3=o, 4=u. Float values can be interpoltaed. + + + + control input + + + + synth output + + + + + + + + diff --git a/ceammc/ext/doc/synth.wurley~-help.pd b/ceammc/ext/doc/synth.wurley~-help.pd index 9dc1b0974a..e115607ad5 100644 --- a/ceammc/ext/doc/synth.wurley~-help.pd +++ b/ceammc/ext/doc/synth.wurley~-help.pd @@ -73,13 +73,13 @@ value: 0\. Range: 0\...127\.; #X text 115 45 ::; #X obj 131 48 ui.link @title synth @url ceammc.synth-help.pd; #X obj 1 1036 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1039 library: ceammc v0.9.4; +#X text 10 1039 library: ceammc v0.9.6; #N canvas 10 1058 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 synth.wurley~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/synth.wurley~.pddoc b/ceammc/ext/doc/synth.wurley~.pddoc index 2e002b81ed..c99d19110d 100644 --- a/ceammc/ext/doc/synth.wurley~.pddoc +++ b/ceammc/ext/doc/synth.wurley~.pddoc @@ -19,7 +19,7 @@ maximum speed of whistles + units="hertz">maximum speed of whistles midi pitch synth gate diff --git a/ceammc/ext/doc/system.colorpanel-help.pd b/ceammc/ext/doc/system.colorpanel-help.pd index 7dfca0194b..ab9ab08096 100644 --- a/ceammc/ext/doc/system.colorpanel-help.pd +++ b/ceammc/ext/doc/system.colorpanel-help.pd @@ -58,13 +58,13 @@ color triplet in float (0-1) or int (0-255) range depending from @mode.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 792 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 795 library: ceammc v0.9.4; +#X text 10 795 library: ceammc v0.9.6; #N canvas 10 814 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.colorpanel; #X text 10 76 category:; @@ -72,7 +72,7 @@ color triplet in float (0-1) or int (0-255) range depending from @mode.; #X text 10 98 since:; #X text 120 98 0.1; #X text 10 120 authors:; -#X text 120 120 Hans-Christoph Steiner \, Serge Poltavski; +#X text 120 120 Hans-Christoph Steiner \, Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; diff --git a/ceammc/ext/doc/system.colorpanel.pddoc b/ceammc/ext/doc/system.colorpanel.pddoc index 75700661fe..42a32f3834 100644 --- a/ceammc/ext/doc/system.colorpanel.pddoc +++ b/ceammc/ext/doc/system.colorpanel.pddoc @@ -5,7 +5,7 @@ Hans-Christoph Steiner - Serge Poltavski + Serge Poltavsky System color panel dialog popup GPL3 or later diff --git a/ceammc/ext/doc/system.cursor-help.pd b/ceammc/ext/doc/system.cursor-help.pd index 12cbe5c8de..299a4caec9 100644 --- a/ceammc/ext/doc/system.cursor-help.pd +++ b/ceammc/ext/doc/system.cursor-help.pd @@ -6,11 +6,15 @@ -4096 0; #X obj 646 11 system.cursor; #X obj 50 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 174 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 318 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 146 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 290 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 395 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 510 118 system.cursor.abs; #X msg 78 147 bang; -#X msg 174 147 @relative \$1; -#X msg 318 147 @norm \$1; +#X msg 146 147 @relative \$1; +#X msg 290 147 @norm \$1; +#X msg 395 147 @clip \$1; +#X obj 510 147 system.cursor.osc~; #X obj 50 205 system.cursor; #X obj 50 234 route motion mousewheel button; #X floatatom 136 262 5 0 0 0 - - -; @@ -22,42 +26,54 @@ #X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 374 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 409 @norm; -#X text 245 409 Get/Set cursor x/y coordinates normalization by screen -(or window) width/height. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 466 @relative; -#X text 245 466 Get/Set relative output mode: if on output coords relative -to window \, otherwise output screen coordinates. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 538 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 409 @clip; +#X text 245 409 Get/Set clip mode. If true clip a cursor XY values +to the [0\..1] range in normalized mode \, to the window width/height +relative mode \, otherwise to the screen width/height. Type: bool. +Default value: 0\.; +#X msg 110 481 @norm; +#X text 245 481 Get/Set cursor x/y coordinates normalization by screen +(or window) width/height. Type: bool. Default value: 0\.; +#X msg 110 523 @relative; +#X text 245 523 Get/Set relative output mode: if on output coords relative +to the root window \, otherwise output screen coordinates. Type: bool. +Default value: 0\.; +#X obj 20 590 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 595 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 630 polltime; +#X text 245 630 sets global cursor polling time. Arguments are:; +#X obj 255 653 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 653 T: polling time. Type: float. Range: 10\...1000\. Units: +ms.; +#X obj 20 688 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 693 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 539 1\.; -#X text 150 539 *bang*; -#X text 245 539 output cursor position.; -#X text 150 559 *float*; -#X text 245 559 when 1 is received - turns on cursor polling (position +#X text 110 694 1\.; +#X text 150 694 *bang*; +#X text 245 694 output cursor position.; +#X text 150 714 *float*; +#X text 245 714 when 1 is received - turns on cursor polling (position and buttons) \, when 0 is received - turns it off.; -#X obj 20 604 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 609 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 759 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 764 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 610 1\.; -#X text 245 610 messages: motion X Y \, mousewheel DELTA \, button +#X text 110 765 1\.; +#X text 245 765 messages: motion X Y \, mousewheel DELTA \, button IDX STATE.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; -#X obj 1 660 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 663 library: ceammc v0.9.4; -#N canvas 10 682 400 290 info 0; +#X obj 1 815 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 818 library: ceammc v0.9.6; +#N canvas 10 837 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.cursor; #X text 10 76 category:; @@ -65,7 +81,7 @@ IDX STATE.; #X text 10 98 since:; #X text 120 98 0.1; #X text 10 120 authors:; -#X text 120 120 Hans-Christoph Steiner \, Serge Poltavski; +#X text 120 120 Hans-Christoph Steiner \, Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; @@ -76,17 +92,19 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 682 pd info; -#X connect 5 0 8 0; -#X connect 6 0 9 0; -#X connect 4 0 10 0; -#X connect 7 0 10 0; -#X connect 8 0 10 0; -#X connect 9 0 10 0; -#X connect 10 0 11 0; -#X connect 11 1 12 0; -#X connect 11 2 13 0; -#X connect 13 0 14 0; -#X connect 13 1 15 0; -#X connect 13 2 16 0; -#X connect 11 0 17 0; \ No newline at end of file +#X restore 10 837 pd info; +#X connect 5 0 10 0; +#X connect 6 0 11 0; +#X connect 7 0 12 0; +#X connect 4 0 14 0; +#X connect 9 0 14 0; +#X connect 10 0 14 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 14 0 15 0; +#X connect 15 1 16 0; +#X connect 15 2 17 0; +#X connect 17 0 18 0; +#X connect 17 1 19 0; +#X connect 17 2 20 0; +#X connect 15 0 21 0; \ No newline at end of file diff --git a/ceammc/ext/doc/system.cursor.1.pd b/ceammc/ext/doc/system.cursor.1.pd new file mode 100644 index 0000000000..321322d8f1 --- /dev/null +++ b/ceammc/ext/doc/system.cursor.1.pd @@ -0,0 +1,6 @@ +#N canvas 0 0 676 299 12; +#X obj 20 48 inlet; +#X obj 20 77 system.cursor; +#X obj 20 106 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/ceammc/ext/doc/system.cursor.abs.pd b/ceammc/ext/doc/system.cursor.abs.pd new file mode 100644 index 0000000000..d195c4c0ba --- /dev/null +++ b/ceammc/ext/doc/system.cursor.abs.pd @@ -0,0 +1,32 @@ +#N canvas 0 0 676 299 12; +#X obj 20 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 116 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 260 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 365 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 48 77 bang; +#X msg 116 77 @relative \$1; +#X msg 260 77 @norm \$1; +#X msg 365 77 @clip \$1; +#X obj 20 135 system.cursor.1; +#X obj 20 164 route motion mousewheel button; +#X floatatom 106 192 5 0 0 0 - - -; +#X obj 164 192 route 1 2 3; +#X obj 164 221 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 202 221 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 250 221 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 250 ui.dt; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 7 0; +#X connect 0 0 8 0; +#X connect 4 0 8 0; +#X connect 5 0 8 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 1 10 0; +#X connect 9 2 11 0; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 11 2 14 0; +#X connect 9 0 15 0; diff --git a/ceammc/ext/doc/system.cursor.osc~.pd b/ceammc/ext/doc/system.cursor.osc~.pd new file mode 100644 index 0000000000..d1158529a9 --- /dev/null +++ b/ceammc/ext/doc/system.cursor.osc~.pd @@ -0,0 +1,21 @@ +#N canvas 0 0 676 299 12; +#X obj 20 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 77 system.cursor @norm 1 @clip 1; +#X obj 20 106 route motion; +#X obj 20 135 lin->lin 0 1 100 5000; +#X obj 20 164 unpack f f; +#X obj 20 192 osc~; +#X obj 96 192 osc~; +#X obj 20 221 ui.hgain~; +#X obj 192 221 ui.dsp~; +#X obj 20 250 dac~; +#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 4 0 5 0; +#X connect 4 1 6 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 7 0 9 1; diff --git a/ceammc/ext/doc/system.cursor.pddoc b/ceammc/ext/doc/system.cursor.pddoc index 837c80b9ed..1a1eaed172 100644 --- a/ceammc/ext/doc/system.cursor.pddoc +++ b/ceammc/ext/doc/system.cursor.pddoc @@ -5,7 +5,7 @@ Hans-Christoph Steiner - Serge Poltavski + Serge Poltavsky Output cursor motion, mousewheel and button clicks GPL3 or later @@ -15,11 +15,19 @@ 0.1 - relative output mode: if - on output coords relative to window, otherwise output screen coordinates - cursor x/y coordinates - normalization by screen (or window) width/height + relative output mode: if on output + coords relative to the root window, otherwise output screen coordinates + cursor x/y coordinates normalization by + screen (or window) width/height + clip mode. If true clip a cursor XY + values to the [0..1] range in normalized mode, to the window width/height relative + mode, otherwise to the screen width/height + + sets global cursor polling time + polling time + output cursor position @@ -33,13 +41,13 @@ + + + + + + + + +lin 0 1 100 5000] +| +[unpack f f] +| ^| +[osc~] [osc~] +| | +[ui.hgain~] [ui.dsp~] +|\ +[dac~] ]]> diff --git a/ceammc/ext/doc/system.exec-help.pd b/ceammc/ext/doc/system.exec-help.pd index a913b3a678..f1263dd83b 100644 --- a/ceammc/ext/doc/system.exec-help.pd +++ b/ceammc/ext/doc/system.exec-help.pd @@ -19,47 +19,57 @@ #X obj 20 288 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 323 @is_running; -#X text 245 323 (readonly) Get is process is running. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 375 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 380 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 323 (readonly) Get is process is running. Type: bool. Default +value: 0\.; +#X msg 110 365 @low; +#X text 245 365 alias to @priority low.; +#X msg 110 394 @priority; +#X text 245 394 Get/Set subprocess priority (not all platforms are +supported). Type: symbol. Default value: normal. Allowed values: normal +\, low.; +#X msg 110 451 @state; +#X text 245 451 (readonly) Get running process state: -1 (no process) +\, 0 (not started) \, 1 (running) \, 2 (finished). Type: int. Default +value: -1\.; +#X obj 20 518 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 523 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 415 eof; -#X text 245 415 send EOF to running processes.; -#X msg 110 442 stop; -#X text 245 442 stop running process.; -#X msg 110 469 terminate; -#X text 245 469 terminate running process.; -#X msg 110 496 write; -#X text 245 496 write data to process stdin.; -#X obj 20 533 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 538 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 558 eof; +#X text 245 558 send EOF to running processes.; +#X msg 110 585 stop; +#X text 245 585 stop running process.; +#X msg 110 612 terminate; +#X text 245 612 terminate running process.; +#X msg 110 639 write; +#X text 245 639 write data to process stdin.; +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 539 1\.; -#X text 150 539 *symbol*; -#X text 245 539 run specified program.; -#X text 150 559 *any*; -#X text 245 559 run specified program with arguments.; -#X obj 20 589 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 594 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 682 1\.; +#X text 150 682 *symbol*; +#X text 245 682 run specified program.; +#X text 150 702 *any*; +#X text 245 702 run specified program with arguments.; +#X obj 20 732 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 737 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 595 1\.; -#X text 245 595 output process exit code.; -#X text 110 615 2\.; -#X text 245 615 output list of strings.; +#X text 110 738 1\.; +#X text 245 738 output process exit code.; +#X text 110 758 2\.; +#X text 245 758 output list of strings.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; -#X obj 1 665 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 668 library: ceammc v0.9.4; -#N canvas 10 687 400 290 info 0; +#X obj 1 808 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 811 library: ceammc v0.9.6; +#N canvas 10 830 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.exec; #X text 10 76 category:; @@ -78,7 +88,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 687 pd info; +#X restore 10 830 pd info; #X connect 4 0 9 0; #X connect 5 0 9 0; #X connect 7 0 9 0; diff --git a/ceammc/ext/doc/system.exec.pddoc b/ceammc/ext/doc/system.exec.pddoc index 8d98acad2c..43aad14288 100644 --- a/ceammc/ext/doc/system.exec.pddoc +++ b/ceammc/ext/doc/system.exec.pddoc @@ -14,8 +14,13 @@ 0.7 - is - process is running + is process is + running + alias to @priority low + subprocess + priority (not all platforms are supported) + running process + state: -1 (no process), 0 (not started), 1 (running), 2 (finished) send EOF to running processes diff --git a/ceammc/ext/doc/system.exit-help.pd b/ceammc/ext/doc/system.exit-help.pd index 05c61d215d..ecddf366e2 100644 --- a/ceammc/ext/doc/system.exit-help.pd +++ b/ceammc/ext/doc/system.exit-help.pd @@ -9,45 +9,53 @@ #X text 136 118 WARNING: this will close PureData in 1000ms!; #X obj 50 162 system.exit @delay 1000; #X obj 20 211 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 216 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 216 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 251 @auto; -#X text 245 251 Get/Set close automatically \, without incoming call. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 293 @delay; -#X text 245 293 Get/Set exit PureData after specified delay time. Type: +#X text 110 251 1\.; +#X text 150 251 float; +#X obj 246 252 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 251 DELAY(ms): exit delay time. Type: float. Min value: +0; +#X obj 20 281 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 286 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 321 @auto; +#X text 245 321 Get/Set close automatically \, without incoming call. +Type: bool. Default value: 0\.; +#X msg 110 363 @delay; +#X text 245 363 Get/Set exit PureData after specified delay time. Type: float. Units: ms. Default value: 0\. Min value: 0\.; -#X msg 110 335 @rc; -#X text 245 335 Get/Set exit code. Type: int. Default value: 0\.; -#X obj 20 374 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 379 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 405 @rc; +#X text 245 405 Get/Set exit code. Type: int. Default value: 0\.; +#X obj 20 444 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 449 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 414 exit; -#X text 245 414 exit PureData. Arguments are:; -#X obj 255 437 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 437 [RC]: exit code \, if not specified @rc property used. +#X msg 110 484 exit; +#X text 245 484 exit PureData. Arguments are:; +#X obj 255 507 cnv 1 31 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 507 [RC]: exit code \, if not specified @rc property used. Type: int.; -#X obj 20 487 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 492 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 557 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 562 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 493 1\.; -#X text 245 493 control input.; -#X obj 20 523 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 528 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 563 1\.; +#X text 245 563 control input.; +#X obj 20 593 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 598 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; -#X obj 1 569 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 572 library: ceammc v0.9.4; -#N canvas 10 591 400 290 info 0; +#X obj 1 639 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 642 library: ceammc v0.9.6; +#N canvas 10 661 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.exit; #X text 10 76 category:; @@ -55,7 +63,7 @@ Type: int.; #X text 10 98 since:; #X text 120 98 0.9.2; #X text 10 120 authors:; -#X text 120 120 Serge Poltavski; +#X text 120 120 Serge Poltavsky; #X text 10 142 license:; #X text 120 142 GPL3 or later; #X text 10 164 keywords:; @@ -66,5 +74,5 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 591 pd info; +#X restore 10 661 pd info; #X connect 4 0 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/system.exit.pddoc b/ceammc/ext/doc/system.exit.pddoc index a4c256198f..e992e22e8c 100644 --- a/ceammc/ext/doc/system.exit.pddoc +++ b/ceammc/ext/doc/system.exit.pddoc @@ -4,7 +4,7 @@ system.exit - Serge Poltavski + Serge Poltavsky quit PureData GPL3 or later @@ -13,12 +13,16 @@ quit exit 0.9.2 + + exit delay + time + exit PureData after specified delay time exit code - close automatically, without - incoming call + close automatically, without incoming + call exit PureData diff --git a/ceammc/ext/doc/system.getenv-help.pd b/ceammc/ext/doc/system.getenv-help.pd index e785140fa1..f9e88bfd94 100644 --- a/ceammc/ext/doc/system.getenv-help.pd +++ b/ceammc/ext/doc/system.getenv-help.pd @@ -19,36 +19,41 @@ -49933 0; #X text 110 308 1\.; #X text 150 308 symbol; -#X obj 246 309 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 308 VAR: environment variable name. Type: symbol.; +#X obj 246 309 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 308 NAME: environment variable name. Type: symbol.; #X obj 20 338 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 343 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 343 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 378 @name; +#X text 245 378 Get/Set environment variable name. Type: symbol.; +#X obj 20 417 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 422 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 344 1\.; -#X text 150 344 *bang*; -#X text 245 344 outputs variable value.; -#X text 150 364 *symbol*; -#X text 245 364 sets name of environment variable and outputs it value.; -#X obj 20 394 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 399 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 423 1\.; +#X text 150 423 *bang*; +#X text 245 423 outputs variable value.; +#X text 150 443 *symbol*; +#X text 245 443 sets name of environment variable and outputs it value.; +#X obj 20 473 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 478 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 400 1\.; -#X text 245 400 symbol: env-variable value.; +#X text 110 479 1\.; +#X text 245 479 symbol: env-variable value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#X text 558 520 see also:; -#X obj 632 520 system.hostname; -#N canvas 10 527 400 290 info 0; +#X obj 1 529 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 532 library: ceammc v0.9.6; +#X text 558 544 see also:; +#X obj 632 544 system.hostname; +#N canvas 10 551 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.getenv; #X text 10 76 category:; @@ -67,7 +72,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; +#X restore 10 551 pd info; #X connect 4 0 10 0; #X connect 9 0 10 0; #X connect 5 0 10 0; diff --git a/ceammc/ext/doc/system.getenv.pddoc b/ceammc/ext/doc/system.getenv.pddoc index d11134cccf..98732f1b3a 100644 --- a/ceammc/ext/doc/system.getenv.pddoc +++ b/ceammc/ext/doc/system.getenv.pddoc @@ -18,8 +18,11 @@ - environment variable name + environment variable name + + environment variable name + outputs variable value diff --git a/ceammc/ext/doc/system.hostname-help.pd b/ceammc/ext/doc/system.hostname-help.pd index 1c2fe9a803..5cac530121 100644 --- a/ceammc/ext/doc/system.hostname-help.pd +++ b/ceammc/ext/doc/system.hostname-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.hostname; #X text 10 76 category:; diff --git a/ceammc/ext/doc/system.memsize-help.pd b/ceammc/ext/doc/system.memsize-help.pd index b5da0973ee..5fae3d2662 100644 --- a/ceammc/ext/doc/system.memsize-help.pd +++ b/ceammc/ext/doc/system.memsize-help.pd @@ -30,7 +30,7 @@ to float data type.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 system.memused; #N canvas 10 527 400 290 info 0; @@ -38,7 +38,7 @@ to float data type.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.memsize; #X text 10 76 category:; diff --git a/ceammc/ext/doc/system.memused-help.pd b/ceammc/ext/doc/system.memused-help.pd index d47a4aede0..b65270008a 100644 --- a/ceammc/ext/doc/system.memused-help.pd +++ b/ceammc/ext/doc/system.memused-help.pd @@ -34,7 +34,7 @@ in bytes \, or zero if the value cannot be determined on this OS.; #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 565 520 see also:; #X obj 639 520 system.memsize; #N canvas 10 527 400 290 info 0; @@ -42,7 +42,7 @@ in bytes \, or zero if the value cannot be determined on this OS.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.memused; #X text 10 76 category:; diff --git a/ceammc/ext/doc/system.screen_size-help.pd b/ceammc/ext/doc/system.screen_size-help.pd index 477d298358..60a093fdaa 100644 --- a/ceammc/ext/doc/system.screen_size-help.pd +++ b/ceammc/ext/doc/system.screen_size-help.pd @@ -26,13 +26,13 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title system @url ceammc.system-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #N canvas 10 527 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 system.screen_size; #X text 10 76 category:; diff --git a/ceammc/ext/doc/tl.bang-help.pd b/ceammc/ext/doc/tl.bang-help.pd index 5e3aa068ff..1d0921103f 100644 --- a/ceammc/ext/doc/tl.bang-help.pd +++ b/ceammc/ext/doc/tl.bang-help.pd @@ -23,40 +23,48 @@ it canceled; -1; #X obj 50 260 tl.transport; #X obj 20 309 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 314 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 20 314 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X msg 110 349 @cue; -#X text 245 349 (readonly) Get related cue. Type: symbol.; -#X msg 110 378 @delay; -#X text 245 378 Get/Set bang delay after cue activation. Type: float. +#X text 110 349 1\.; +#X text 150 349 float; +#X obj 246 350 cnv 1 77 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 349 DELAY(ms): timeline length. Type: float. Min value: +0; +#X obj 20 379 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 384 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 419 @cue; +#X text 245 419 (readonly) Get related cue. Type: symbol.; +#X msg 110 448 @delay; +#X text 245 448 Get/Set bang delay after cue activation. Type: float. Units: ms. Default value: 0\. Min value: 0\.; -#X obj 20 430 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 435 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 500 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 505 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 436 1\.; -#X text 245 436 control inlet.; -#X obj 20 466 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 471 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 506 1\.; +#X text 245 506 control inlet.; +#X obj 20 536 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 541 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 472 1\.; -#X text 245 472 bang output.; +#X text 110 542 1\.; +#X text 245 542 bang output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; -#X obj 1 522 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 525 library: ceammc v0.9.4; -#X text 539 537 see also:; -#X obj 613 537 tl.toggle; -#X obj 694 540 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 592 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 595 library: ceammc v0.9.6; +#X text 539 607 see also:; +#X obj 613 607 tl.toggle; +#X obj 694 610 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.cue] @url tl.cue-help.pd; -#N canvas 10 544 400 290 info 0; +#N canvas 10 614 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 tl.bang; #X text 10 76 category:; @@ -75,7 +83,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 544 pd info; +#X restore 10 614 pd info; #X connect 9 0 12 0; #X connect 10 0 13 0; #X connect 11 0 14 0; diff --git a/ceammc/ext/doc/tl.bang.pddoc b/ceammc/ext/doc/tl.bang.pddoc index f84635bc34..7330a43ab1 100644 --- a/ceammc/ext/doc/tl.bang.pddoc +++ b/ceammc/ext/doc/tl.bang.pddoc @@ -25,10 +25,14 @@ Bang only when nearest left tl.cue was activated. If other cue is activated and bang was scheduled by @delay property - it canceled + + timeline + length + bang delay after cue activation - related cue + related cue diff --git a/ceammc/ext/doc/tl.cue-help.pd b/ceammc/ext/doc/tl.cue-help.pd index 3d6fc27847..a57826e4c7 100644 --- a/ceammc/ext/doc/tl.cue-help.pd +++ b/ceammc/ext/doc/tl.cue-help.pd @@ -31,55 +31,47 @@ #X text 245 351 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; #X msg 110 393 @fontname; -#X text 245 393 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 422 @fontsize; -#X text 245 422 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 464 @fontslant; -#X text 245 464 Get/Set font slant. Type: symbol. Default value: roman. -Allowed values: roman \, italic.; -#X msg 110 506 @fontweight; -#X text 245 506 Get/Set font weight. Type: symbol. Default value: normal. -Allowed values: normal \, bold.; -#X msg 110 548 @pinned; -#X text 245 548 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 590 @size; -#X text 245 590 Get/Set element size (width \, height pair). Type: -list. Default value: 45 15\.; -#X obj 20 642 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 647 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X text 245 393 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 435 @fontsize; +#X text 245 435 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 477 @pinned; +#X text 245 477 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X obj 20 529 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 534 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 682 pos; -#X text 245 682 set UI element position. Arguments are:; -#X obj 255 705 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 705 X: top left x-coord. Type: float.; -#X obj 255 728 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 728 Y: top right y-coord. Type: float.; -#X obj 20 763 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 768 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 569 pos; +#X text 245 569 set UI element position. Arguments are:; +#X obj 255 592 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 592 X: top left x-coord. Type: float.; +#X obj 255 615 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 615 Y: top right y-coord. Type: float.; +#X obj 20 650 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 655 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X obj 20 789 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 794 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 676 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 681 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; -#X obj 1 835 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 838 library: ceammc v0.9.4; -#X text 530 850 see also:; -#X obj 604 853 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 722 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 725 library: ceammc v0.9.6; +#X text 530 737 see also:; +#X obj 604 740 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.bang] @url tl.bang-help.pd; -#X obj 672 853 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 672 740 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.toggle] @url tl.toggle-help.pd; -#N canvas 10 857 400 290 info 0; +#N canvas 10 744 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 tl.cue; #X text 10 76 category:; @@ -98,7 +90,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 857 pd info; +#X restore 10 744 pd info; #X connect 7 0 9 0; #X connect 8 0 10 0; #X connect 9 0 13 0; diff --git a/ceammc/ext/doc/tl.cue.pddoc b/ceammc/ext/doc/tl.cue.pddoc index 3b13c5d78e..011348860b 100644 --- a/ceammc/ext/doc/tl.cue.pddoc +++ b/ceammc/ext/doc/tl.cue.pddoc @@ -26,21 +26,16 @@ top right y-coord - element size (width, height - pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + fontsize - fontname - font - weight - font - slant + fontname diff --git a/ceammc/ext/doc/tl.timeline-help.pd b/ceammc/ext/doc/tl.timeline-help.pd index 080d8a489a..5b4f3c2b9d 100644 --- a/ceammc/ext/doc/tl.timeline-help.pd +++ b/ceammc/ext/doc/tl.timeline-help.pd @@ -61,99 +61,98 @@ Default value: 0\.; #X text 245 772 (readonly) Get list of event names in chronological order. Type: list. Default value: end.; #X msg 110 814 @is_running; -#X text 245 814 (readonly) Get if timeline is running. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 814 (readonly) Get if timeline is running. Type: bool. +Default value: 0\.; #X msg 110 856 @length; #X text 245 856 (readonly) Get timeline length. Type: float. Units: sec. Default value: 60\.; #X msg 110 898 @loop; -#X text 245 898 Get/Set loop mode. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 940 @mode; -#X text 245 940 Get/Set timeline mode. If timeline is fixed \, when +#X text 245 898 Get/Set loop mode. Type: bool. Default value: 0\.; +#X msg 110 927 @mode; +#X text 245 927 Get/Set timeline mode. If timeline is fixed \, when reached \, it outputs *end* event and stops after that. Infinite timeline never stops by itself. Fixed timeline can have @loop property for repeats. Type: symbol. Default value: fixed. Allowed values: fixed \, inf.; -#X msg 110 1027 @phase; -#X text 245 1027 (readonly) Get current phase in [0-1) range. Type: +#X msg 110 1014 @phase; +#X text 245 1014 (readonly) Get current phase in [0-1) range. Type: float. Default value: 0\. Range: 0\...1\.; -#X msg 110 1069 @size; -#X text 245 1069 (readonly) Get number of events in timeline. Type: +#X msg 110 1056 @size; +#X text 245 1056 (readonly) Get number of events in timeline. Type: int. Default value: 1\. Min value: 0\.; -#X obj 20 1121 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1126 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1108 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1113 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1161 add; -#X text 245 1161 add event to timeline. You can use simple syntax like +#X msg 110 1148 add; +#X text 245 1148 add event to timeline. You can use simple syntax like [add 10.1 sec( to create event with default name \, or use advanced: [add myEvent 510ms before end(. Arguments are:; -#X obj 255 1214 cnv 1 100 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1214 [NAME=eventN]: event name (if ommitted \, autogenerated +#X obj 255 1201 cnv 1 100 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1201 [NAME=eventN]: event name (if ommitted \, autogenerated name is used: event1 \, event2 etc.). Type: symbol.; -#X obj 255 1252 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1252 [TIME]: event time: see *info* section. Type: list.; -#X obj 255 1275 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1275 [relative]: create relative event before or after +#X obj 255 1239 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1239 [TIME]: event time: see *info* section. Type: list.; +#X obj 255 1262 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1262 [relative]: create relative event before or after target event. Type: symbol. Allowed values: before \, after.; -#X obj 255 1313 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1313 [REL_EVENT]: relative event name. Type: symbol.; -#X msg 110 1338 clear; -#X text 245 1338 remove all timeline events.; -#X msg 110 1365 pause; -#X text 245 1365 stops timeline at current position.; -#X msg 110 1392 remove; -#X text 245 1392 remove event by given index or name. [remove event1( +#X obj 255 1300 cnv 1 85 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1300 [REL_EVENT]: relative event name. Type: symbol.; +#X msg 110 1325 clear; +#X text 245 1325 remove all timeline events.; +#X msg 110 1352 pause; +#X text 245 1352 stops timeline at current position.; +#X msg 110 1379 remove; +#X text 245 1379 remove event by given index or name. [remove event1( or [remove 3(. Arguments are:; -#X obj 255 1430 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1430 [NAME|IDX]: event name or index. Type: atom.; -#X msg 110 1455 remove_at; -#X text 245 1455 remove event at specified time. Arguments are:; -#X obj 255 1478 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1478 [TIME]: time in supported format. See *info* section. +#X obj 255 1417 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1417 [NAME|IDX]: event name or index. Type: atom.; +#X msg 110 1442 remove_at; +#X text 245 1442 remove event at specified time. Arguments are:; +#X obj 255 1465 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1465 [TIME]: time in supported format. See *info* section. Type: list.; -#X msg 110 1518 reset; -#X text 245 1518 reset timeline (call only when stopped).; -#X msg 110 1545 start; -#X text 245 1545 start timeline from current position.; -#X msg 110 1572 stop; -#X text 245 1572 stops timeline and reset current position to the beginning.; -#X msg 110 1599 to_event; -#X text 245 1599 move time to specified event. Arguments are:; -#X obj 255 1622 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1622 [NAME|IDX]: event or index. Type: atom.; -#X msg 110 1647 to_time; -#X text 245 1647 move time to time. Arguments are:; -#X obj 255 1670 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1670 [TIME]: time in supported format. See *info* section. +#X msg 110 1505 reset; +#X text 245 1505 reset timeline (call only when stopped).; +#X msg 110 1532 start; +#X text 245 1532 start timeline from current position.; +#X msg 110 1559 stop; +#X text 245 1559 stops timeline and reset current position to the beginning.; +#X msg 110 1586 to_event; +#X text 245 1586 move time to specified event. Arguments are:; +#X obj 255 1609 cnv 1 77 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1609 [NAME|IDX]: event or index. Type: atom.; +#X msg 110 1634 to_time; +#X text 245 1634 move time to time. Arguments are:; +#X obj 255 1657 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1657 [TIME]: time in supported format. See *info* section. Type: list.; -#X obj 20 1720 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1725 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1707 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1712 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1726 1\.; -#X text 150 1726 *float*; -#X text 245 1726 control inlet. Non-zero value starts timeline \, zero +#X text 110 1713 1\.; +#X text 150 1713 *float*; +#X text 245 1713 control inlet. Non-zero value starts timeline \, zero - stops.; -#X obj 20 1756 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1761 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1743 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1748 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1762 1\.; -#X text 245 1762 outputs pair: event index and event name.; +#X text 110 1749 1\.; +#X text 245 1749 outputs pair: event index and event name.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; -#X obj 1 1812 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1815 library: ceammc v0.9.4; -#X text 620 1827 see also:; -#X obj 694 1830 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1799 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1802 library: ceammc v0.9.6; +#X text 620 1814 see also:; +#X obj 694 1817 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.cue] @url tl.cue-help.pd; -#N canvas 10 1834 400 290 info 0; +#N canvas 10 1821 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 tl.timeline; #X text 10 76 category:; @@ -172,7 +171,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1834 pd info; +#X restore 10 1821 pd info; #X connect 13 0 14 0; #X connect 14 0 15 0; #X connect 19 0 20 0; diff --git a/ceammc/ext/doc/tl.timeline.pddoc b/ceammc/ext/doc/tl.timeline.pddoc index 2b9908be3a..1d9b1578d2 100644 --- a/ceammc/ext/doc/tl.timeline.pddoc +++ b/ceammc/ext/doc/tl.timeline.pddoc @@ -32,19 +32,19 @@ timeline length - if - timeline is running - + if timeline is + running + timeline length - number of + number of events in timeline - - current time - current time + current phase in [0-1) range - list of event names - in chronological order - loop mode + list of event + names in chronological order + loop mode timeline mode. If timeline is fixed, when reached, it outputs *end* event and stops after that. Infinite timeline never stops by itself. Fixed timeline can have @loop property for diff --git a/ceammc/ext/doc/tl.toggle-help.pd b/ceammc/ext/doc/tl.toggle-help.pd index 186ea3718c..6e4251a532 100644 --- a/ceammc/ext/doc/tl.toggle-help.pd +++ b/ceammc/ext/doc/tl.toggle-help.pd @@ -40,7 +40,7 @@ to other cue section; #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 554 520 see also:; #X obj 628 520 tl.bang; #X obj 694 523 ui.link @background_color 0.78431 0.78431 0.78431 @@ -50,7 +50,7 @@ to other cue section; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 tl.toggle; #X text 10 76 category:; diff --git a/ceammc/ext/doc/tl.toggle.pddoc b/ceammc/ext/doc/tl.toggle.pddoc index 77247dfbc4..1c2c75c622 100644 --- a/ceammc/ext/doc/tl.toggle.pddoc +++ b/ceammc/ext/doc/tl.toggle.pddoc @@ -25,7 +25,7 @@ Output 1 when cue section activated, 0 when switched to other cue section - related cue + related cue diff --git a/ceammc/ext/doc/tl.transport-help.pd b/ceammc/ext/doc/tl.transport-help.pd index 1bccd486ab..f7a5a694ec 100644 --- a/ceammc/ext/doc/tl.transport-help.pd +++ b/ceammc/ext/doc/tl.transport-help.pd @@ -38,7 +38,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title tl @url ceammc.tl-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 620 520 see also:; #X obj 694 523 ui.link @background_color 0.78431 0.78431 0.78431 @title [tl.cue] @url tl.cue-help.pd; @@ -47,7 +47,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 tl.transport; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.aview-help.pd b/ceammc/ext/doc/ui.aview-help.pd index dad075fc7b..3d711e2319 100644 --- a/ceammc/ext/doc/ui.aview-help.pd +++ b/ceammc/ext/doc/ui.aview-help.pd @@ -66,8 +66,7 @@ samp. Default value: 0\.; sec. Default value: 0\.; #X msg 110 1113 @mouse_events; #X text 245 1113 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 1\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 1\.; #X msg 110 1170 @receive; #X text 245 1170 Get/Set receive source. Type: symbol. Default value: (null).; @@ -87,106 +86,107 @@ begin \, end. Type: list. Units: sec.; #X text 245 1367 Get/Set send destination. Type: symbol. Default value: (null).; #X msg 110 1409 @show_rms; -#X text 245 1409 Get/Set show RMS graph. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 1451 @size_ms; -#X text 245 1451 (readonly) Get array size in milliseconds. Type: float. +#X text 245 1409 Get/Set show RMS graph. Type: bool. Default value: +0\.; +#X msg 110 1438 @size_ms; +#X text 245 1438 (readonly) Get array size in milliseconds. Type: float. Units: ms. Default value: 0\. Min value: 0\.; -#X msg 110 1493 @size_samp; -#X text 245 1493 (readonly) Get array size in samples. Type: int. Units: +#X msg 110 1480 @size_samp; +#X text 245 1480 (readonly) Get array size in samples. Type: int. Units: samp. Default value: 0\. Min value: 0\.; -#X msg 110 1535 @size_sec; -#X text 245 1535 (readonly) Get array size in seconds. Type: float. +#X msg 110 1522 @size_sec; +#X text 245 1522 (readonly) Get array size in seconds. Type: float. Units: sec. Default value: 0\. Min value: 0\.; -#X msg 110 1577 @background_color; -#X text 245 1577 Get/Set element background color (list of red \, green +#X msg 110 1564 @background_color; +#X text 245 1564 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1634 @border_color; -#X text 245 1634 Get/Set border color (list of red \, green \, blue +#X msg 110 1621 @border_color; +#X text 245 1621 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1676 @cursor_color; -#X text 245 1676 Get/Set cursor color (list of red \, green \, blue +#X msg 110 1663 @cursor_color; +#X text 245 1663 Get/Set cursor color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1718 @selection_color; -#X text 245 1718 Get/Set selection color (list of red \, green \, blue +#X msg 110 1705 @selection_color; +#X text 245 1705 Get/Set selection color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1760 @wave_color; -#X text 245 1760 Get/Set wave color (list of red \, green \, blue values +#X msg 110 1747 @wave_color; +#X text 245 1747 Get/Set wave color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.3 0.3 0.3 1\.; -#X msg 110 1802 @label_bottom; -#X text 245 1802 Get/Set bottom right label if @show_labels is on. +#X msg 110 1789 @label_bottom; +#X text 245 1789 Get/Set bottom right label if @show_labels is on. Type: symbol.; -#X msg 110 1844 @label_top; -#X text 245 1844 Get/Set top right label if @show_labels is on. Type: +#X msg 110 1831 @label_top; +#X text 245 1831 Get/Set top right label if @show_labels is on. Type: symbol.; -#X msg 110 1873 @show_labels; -#X text 245 1873 Get/Set if show corner labels. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1915 @fontname; -#X text 245 1915 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1944 @fontsize; -#X text 245 1944 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1986 @fontslant; -#X text 245 1986 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1860 @show_labels; +#X text 245 1860 Get/Set if show corner labels. Type: bool. Default +value: 0\.; +#X msg 110 1889 @fontname; +#X text 245 1889 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1931 @fontsize; +#X text 245 1931 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1973 @fontslant; +#X text 245 1973 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 2028 @fontweight; -#X text 245 2028 Get/Set font weight. Type: symbol. Default value: +#X msg 110 2015 @fontweight; +#X text 245 2015 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 2070 @pinned; -#X text 245 2070 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 2112 @size; -#X text 245 2112 Get/Set element size (width \, height pair). Type: +#X msg 110 2057 @pinned; +#X text 245 2057 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 2099 @size; +#X text 245 2099 Get/Set element size (width \, height pair). Type: list. Default value: 300 100\.; -#X obj 20 2164 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2169 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 2151 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2156 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 2204 pos; -#X text 245 2204 set UI element position. Arguments are:; -#X obj 255 2227 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2227 X: top left x-coord. Type: float.; -#X obj 255 2250 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2250 Y: top right y-coord. Type: float.; -#X msg 110 2275 select; -#X text 245 2275 set selection. Arguments are:; -#X obj 255 2298 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2298 BEGIN: selection start in samples. Type: int.; -#X obj 255 2321 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2321 END: selection end in samples. Type: int.; -#X msg 110 2346 update; -#X text 245 2346 redraws view.; -#X msg 110 2373 dump; -#X text 245 2373 dumps all object info to Pd console window.; -#X obj 20 2410 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2415 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 2191 pos; +#X text 245 2191 set UI element position. Arguments are:; +#X obj 255 2214 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2214 X: top left x-coord. Type: float.; +#X obj 255 2237 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2237 Y: top right y-coord. Type: float.; +#X msg 110 2262 select; +#X text 245 2262 set selection. Arguments are:; +#X obj 255 2285 cnv 1 44 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2285 BEGIN: selection start in samples. Type: int.; +#X obj 255 2308 cnv 1 28 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2308 END: selection end in samples. Type: int.; +#X msg 110 2333 update; +#X text 245 2333 redraws view.; +#X msg 110 2360 dump; +#X text 245 2360 dumps all object info to Pd console window.; +#X obj 20 2397 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2402 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2416 1\.; -#X text 150 2416 *bang*; -#X text 245 2416 output current cursor positions: @cursor_samp \, @cursor_phase +#X text 110 2403 1\.; +#X text 150 2403 *bang*; +#X text 245 2403 output current cursor positions: @cursor_samp \, @cursor_phase \, @cursor_ms \, @cursor_sec and selection (if selected): @select_samp \, @select_phase \, @select_ms \, @select_sec \, @begin \, @end.; -#X text 150 2481 *float*; -#X text 245 2481 move cursor to specified sample position.; -#X obj 20 2511 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2516 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 150 2468 *float*; +#X text 245 2468 move cursor to specified sample position.; +#X obj 20 2498 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2503 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2517 1\.; -#X text 245 2517 output.; +#X text 110 2504 1\.; +#X text 245 2504 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2567 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2570 library: ceammc v0.9.4; -#N canvas 10 2589 400 290 info 0; +#X obj 1 2554 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2557 library: ceammc v0.9.6; +#N canvas 10 2576 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.aview; #X text 10 76 category:; @@ -205,7 +205,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2589 pd info; +#X restore 10 2576 pd info; #X connect 4 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/ui.aview.pddoc b/ceammc/ext/doc/ui.aview.pddoc index 5cb46ae82f..c6fe8a968f 100644 --- a/ceammc/ext/doc/ui.aview.pddoc +++ b/ceammc/ext/doc/ui.aview.pddoc @@ -24,9 +24,9 @@ move selection - array name - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + array name + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events cursor position in samples @@ -46,27 +46,26 @@ selection range noramlized to 0-1 range, pair of values: begin, end - show RMS graph - if show corner - labels + show RMS graph + if show corner labels top right label if @show_labels is on bottom right label if @show_labels is on - array size in samples - array size in seconds - array size in milliseconds + array size in milliseconds send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level selection color (list of red, green, blue values in 0-1 range) cursor color (list of @@ -77,9 +76,10 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.bang-help.pd b/ceammc/ext/doc/ui.bang-help.pd index ee30942c60..ee65b7bf4d 100644 --- a/ceammc/ext/doc/ui.bang-help.pd +++ b/ceammc/ext/doc/ui.bang-help.pd @@ -46,7 +46,7 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; value: left. Allowed values: left \, center \, right.; #X msg 110 644 @label_inner; #X text 245 644 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 686 @label_margins; #X text 245 686 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; @@ -57,60 +57,67 @@ top. Allowed values: left \, top \, right \, bottom.; #X text 245 770 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; #X msg 110 812 @fontname; -#X text 245 812 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 841 @fontsize; -#X text 245 841 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 883 @pinned; -#X text 245 883 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 925 @size; -#X text 245 925 Get/Set element size (width \, height pair). Type: +#X text 245 812 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 854 @fontsize; +#X text 245 854 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 896 @fontslant; +#X text 245 896 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 938 @fontweight; +#X text 245 938 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 980 @pinned; +#X text 245 980 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1022 @size; +#X text 245 1022 Get/Set element size (width \, height pair). Type: list. Default value: 15 15\.; -#X obj 20 977 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 982 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1074 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1079 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1017 pos; -#X text 245 1017 set UI element position. Arguments are:; -#X obj 255 1040 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1040 X: top left x-coord. Type: float.; -#X obj 255 1063 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1063 Y: top right y-coord. Type: float.; -#X msg 110 1088 dump; -#X text 245 1088 dumps all object info to Pd console window.; -#X obj 20 1125 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1130 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1114 pos; +#X text 245 1114 set UI element position. Arguments are:; +#X obj 255 1137 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1137 X: top left x-coord. Type: float.; +#X obj 255 1160 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1160 Y: top right y-coord. Type: float.; +#X msg 110 1185 dump; +#X text 245 1185 dumps all object info to Pd console window.; +#X obj 20 1222 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1227 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1131 1\.; -#X text 150 1131 *bang*; -#X text 245 1131 outputs bang.; -#X text 150 1151 *float*; -#X text 245 1151 outputs bang.; -#X text 150 1171 *symbol*; -#X text 245 1171 outputs bang.; -#X text 150 1191 *list*; -#X text 245 1191 outputs bang.; -#X obj 20 1221 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1226 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1228 1\.; +#X text 150 1228 *bang*; +#X text 245 1228 outputs bang.; +#X text 150 1248 *float*; +#X text 245 1248 outputs bang.; +#X text 150 1268 *symbol*; +#X text 245 1268 outputs bang.; +#X text 150 1288 *list*; +#X text 245 1288 outputs bang.; +#X obj 20 1318 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1323 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1227 1\.; -#X text 245 1227 bang output.; +#X text 110 1324 1\.; +#X text 245 1324 bang output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1277 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1280 library: ceammc v0.9.4; -#X text 598 1292 see also:; -#X obj 672 1295 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1374 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1377 library: ceammc v0.9.6; +#X text 598 1389 see also:; +#X obj 672 1392 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.toggle] @url ui.toggle-help.pd; -#N canvas 10 1299 400 290 info 0; +#N canvas 10 1396 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.bang; #X text 10 76 category:; @@ -129,7 +136,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1299 pd info; +#X restore 10 1396 pd info; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 11 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.bang.pddoc b/ceammc/ext/doc/ui.bang.pddoc index cb6d38f665..6576addf9b 100644 --- a/ceammc/ext/doc/ui.bang.pddoc +++ b/ceammc/ext/doc/ui.bang.pddoc @@ -33,23 +33,29 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname + font + weight + font + slant label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.button-help.pd b/ceammc/ext/doc/ui.button-help.pd index e4d48ea231..047728fdb3 100644 --- a/ceammc/ext/doc/ui.button-help.pd +++ b/ceammc/ext/doc/ui.button-help.pd @@ -34,56 +34,63 @@ values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; #X text 245 493 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 535 @fontname; -#X text 245 535 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 564 @fontsize; -#X text 245 564 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 606 @pinned; -#X text 245 606 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 648 @size; -#X text 245 648 Get/Set element size (width \, height pair). Type: +#X text 245 535 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 577 @fontsize; +#X text 245 577 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 619 @fontslant; +#X text 245 619 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 661 @fontweight; +#X text 245 661 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 703 @pinned; +#X text 245 703 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 745 @size; +#X text 245 745 Get/Set element size (width \, height pair). Type: list. Default value: 15 15\.; -#X obj 20 700 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 705 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 797 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 802 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 740 pos; -#X text 245 740 set UI element position. Arguments are:; -#X obj 255 763 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 763 X: top left x-coord. Type: float.; -#X obj 255 786 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 786 Y: top right y-coord. Type: float.; -#X msg 110 811 dump; -#X text 245 811 dumps all object info to Pd console window.; -#X obj 20 848 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 853 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 837 pos; +#X text 245 837 set UI element position. Arguments are:; +#X obj 255 860 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 860 X: top left x-coord. Type: float.; +#X obj 255 883 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 883 Y: top right y-coord. Type: float.; +#X msg 110 908 dump; +#X text 245 908 dumps all object info to Pd console window.; +#X obj 20 945 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 950 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 854 1\.; -#X text 150 854 *float*; -#X text 245 854 if *0* given \, sets state to unchecked and outputs +#X text 110 951 1\.; +#X text 150 951 *float*; +#X text 245 951 if *0* given \, sets state to unchecked and outputs @off_value. On any other number sets to checked state and outputs @on_value.; -#X obj 20 914 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 919 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1011 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1016 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 920 1\.; -#X text 245 920 outputs @on_value on mouse down and @off_value on mouse -up (default 1 and 0).; +#X text 110 1017 1\.; +#X text 245 1017 outputs @on_value on mouse down and @off_value on +mouse up (default 1 and 0).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 985 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 988 library: ceammc v0.9.4; -#X text 598 1000 see also:; -#X obj 672 1003 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1082 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1085 library: ceammc v0.9.6; +#X text 598 1097 see also:; +#X obj 672 1100 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.toggle] @url ui.toggle-help.pd; -#N canvas 10 1007 400 290 info 0; +#N canvas 10 1104 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.button; #X text 10 76 category:; @@ -102,5 +109,5 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1007 pd info; +#X restore 10 1104 pd info; #X connect 5 0 6 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.button.pddoc b/ceammc/ext/doc/ui.button.pddoc index 3e8090f5c7..1feea4f0ff 100644 --- a/ceammc/ext/doc/ui.button.pddoc +++ b/ceammc/ext/doc/ui.button.pddoc @@ -27,17 +27,23 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname + font + weight + font + slant dumps all object info to Pd console window diff --git a/ceammc/ext/doc/ui.colorpanel-help.pd b/ceammc/ext/doc/ui.colorpanel-help.pd index 662c27be88..e5e0006531 100644 --- a/ceammc/ext/doc/ui.colorpanel-help.pd +++ b/ceammc/ext/doc/ui.colorpanel-help.pd @@ -40,29 +40,30 @@ Range: 0\...1\.; #X text 245 621 Get/Set receive source. Type: symbol. Default value: (null).; #X msg 110 650 @reverse; -#X text 245 650 Get/Set matrix reversed. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 692 @rgb; -#X text 245 692 (readonly) Get RGB value triplet on 0-1 range. Type: +#X text 245 650 Get/Set matrix reversed. Type: bool. Default value: +0\.; +#X msg 110 679 @rgb; +#X text 245 679 (readonly) Get RGB value triplet on 0-1 range. Type: list.; -#X msg 110 721 @saturation; -#X text 245 721 Get/Set saturation. Type: float. Default value: 1\. +#X msg 110 708 @saturation; +#X text 245 708 Get/Set saturation. Type: float. Default value: 1\. Range: 0\...1\.; -#X msg 110 763 @send; -#X text 245 763 Get/Set send destination. Type: symbol. Default value: +#X msg 110 750 @send; +#X text 245 750 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 805 @background_color; -#X text 245 805 Get/Set element background color (list of red \, green +#X msg 110 792 @background_color; +#X text 245 792 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 862 @border_color; -#X text 245 862 Get/Set border color (list of red \, green \, blue +#X msg 110 849 @border_color; +#X text 245 849 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 904 @fontname; -#X text 245 904 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 891 @fontname; +#X text 245 891 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 933 @fontsize; #X text 245 933 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 975 @fontslant; #X text 245 975 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -71,7 +72,7 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 1059 @pinned; #X text 245 1059 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 1101 @presetname; #X text 245 1101 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; @@ -126,7 +127,7 @@ performed.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 1665 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1668 library: ceammc v0.9.4; +#X text 10 1668 library: ceammc v0.9.6; #X text 598 1680 see also:; #X obj 672 1683 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; @@ -135,7 +136,7 @@ performed.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.colorpanel; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.colorpanel.pddoc b/ceammc/ext/doc/ui.colorpanel.pddoc index 1e70356a7f..5fb70a51bf 100644 --- a/ceammc/ext/doc/ui.colorpanel.pddoc +++ b/ceammc/ext/doc/ui.colorpanel.pddoc @@ -20,19 +20,19 @@ matrix size color position in panel - matrix reversed + matrix reversed saturation first hue first lightness - pd color value - RGB value triplet on 0-1 + pd color value + RGB value triplet on 0-1 range - HSL value triplet on 0-1 + HSL value triplet on 0-1 range - HEX value in format + HEX value in format #RRGGBB preset name for using with @@ -41,15 +41,17 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.display-help.pd b/ceammc/ext/doc/ui.display-help.pd index afe489163f..7f845f95da 100644 --- a/ceammc/ext/doc/ui.display-help.pd +++ b/ceammc/ext/doc/ui.display-help.pd @@ -45,89 +45,86 @@ -49933 0; #X msg 110 569 @auto_size; #X text 245 569 Get/Set flag if automatically resize contents to feet -incoming message. Type: int. Default value: 1\. Allowed values: 0 \, -1\.; -#X msg 110 626 @display_events; -#X text 245 626 Get/Set flag for blinking on incoming messages. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 668 @display_type; -#X text 245 668 Get/Set flag for displaying incoming message type. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 710 @float_width; -#X text 245 710 Get/Set number of digits after floating point. If -1: +incoming message. Type: bool. Default value: 1\.; +#X msg 110 611 @display_events; +#X text 245 611 Get/Set flag for blinking on incoming messages. Type: +bool. Default value: 1\.; +#X msg 110 653 @display_type; +#X text 245 653 Get/Set flag for displaying incoming message type. +Type: bool. Default value: 0\.; +#X msg 110 695 @float_width; +#X text 245 695 Get/Set number of digits after floating point. If -1: skip trailing zeroes \, if 0 - output as integers. Type: int. Default value: -1\. Range: -1\...17\.; -#X msg 110 767 @hex; -#X text 245 767 Get/Set output integers in hex format. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 809 @hex_width; -#X text 245 809 Get/Set hex output format width. Type: int. Default +#X msg 110 752 @hex; +#X text 245 752 Get/Set output integers in hex format. Type: bool. +Default value: 0\.; +#X msg 110 794 @hex_width; +#X text 245 794 Get/Set hex output format width. Type: int. Default value: 2\. Range: 0\...16\.; -#X msg 110 851 @receive; -#X text 245 851 Get/Set receive source. Type: symbol. Default value: +#X msg 110 836 @receive; +#X text 245 836 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 880 @send; -#X text 245 880 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 922 @active_color; -#X text 245 922 Get/Set element active color (list of red \, green +#X msg 110 865 @active_color; +#X text 245 865 Get/Set element active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 964 @background_color; -#X text 245 964 Get/Set element background color (list of red \, green +#X msg 110 907 @background_color; +#X text 245 907 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1021 @border_color; -#X text 245 1021 Get/Set border color (list of red \, green \, blue +#X msg 110 964 @border_color; +#X text 245 964 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1063 @text_color; -#X text 245 1063 Get/Set text color (list of red \, green \, blue values +#X msg 110 1006 @text_color; +#X text 245 1006 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 1105 @fontname; -#X text 245 1105 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1134 @fontsize; -#X text 245 1134 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1176 @fontslant; -#X text 245 1176 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1048 @fontname; +#X text 245 1048 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1090 @fontsize; +#X text 245 1090 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1132 @fontslant; +#X text 245 1132 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1218 @fontweight; -#X text 245 1218 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1174 @fontweight; +#X text 245 1174 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1260 @pinned; -#X text 245 1260 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1302 @size; -#X text 245 1302 Get/Set element size (width \, height pair). Type: +#X msg 110 1216 @pinned; +#X text 245 1216 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1258 @size; +#X text 245 1258 Get/Set element size (width \, height pair). Type: list. Default value: 80 18\.; -#X obj 20 1354 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1359 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1310 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1315 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1394 pos; -#X text 245 1394 set UI element position. Arguments are:; -#X obj 255 1417 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1417 X: top left x-coord. Type: float.; -#X obj 255 1440 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1440 Y: top right y-coord. Type: float.; -#X obj 20 1475 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1480 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1350 pos; +#X text 245 1350 set UI element position. Arguments are:; +#X obj 255 1373 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1373 X: top left x-coord. Type: float.; +#X obj 255 1396 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1396 Y: top right y-coord. Type: float.; +#X obj 20 1431 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1436 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1481 1\.; -#X text 245 1481 accepts any messages and displays it.; +#X text 110 1437 1\.; +#X text 245 1437 accepts any messages and displays it.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1531 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1534 library: ceammc v0.9.4; -#X text 644 1546 see also:; -#X obj 718 1546 msg; -#N canvas 10 1553 400 290 info 0; +#X obj 1 1487 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1490 library: ceammc v0.9.6; +#X text 644 1502 see also:; +#X obj 718 1502 msg; +#N canvas 10 1509 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.display; #X text 10 76 category:; @@ -146,7 +143,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1553 pd info; +#X restore 10 1509 pd info; #X connect 8 0 13 0; #X connect 9 0 13 0; #X connect 10 0 13 0; diff --git a/ceammc/ext/doc/ui.display.pddoc b/ceammc/ext/doc/ui.display.pddoc index 3db90ffc84..3a8c9d998f 100644 --- a/ceammc/ext/doc/ui.display.pddoc +++ b/ceammc/ext/doc/ui.display.pddoc @@ -42,25 +42,23 @@ top right y-coord - flag if automatically - resize contents to feet incoming message - flag for displaying - incoming message type - flag for blinking on - incoming messages + flag if automatically resize + contents to feet incoming message + flag for displaying incoming + message type + flag for blinking on incoming + messages number of digits after floating point. If -1: skip trailing zeroes, if 0 - output as integers hex output format width - output integers in hex - format - send destination + output integers in hex format receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -69,9 +67,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.dsp~-help.pd b/ceammc/ext/doc/ui.dsp~-help.pd index a7333352f7..4a794d4570 100644 --- a/ceammc/ext/doc/ui.dsp~-help.pd +++ b/ceammc/ext/doc/ui.dsp~-help.pd @@ -47,48 +47,55 @@ #X text 245 591 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 633 @fontname; -#X text 245 633 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 662 @fontsize; -#X text 245 662 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 704 @pinned; -#X text 245 704 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 746 @size; -#X text 245 746 Get/Set element size (width \, height pair). Type: +#X text 245 633 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 675 @fontsize; +#X text 245 675 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 717 @fontslant; +#X text 245 717 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 759 @fontweight; +#X text 245 759 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 801 @pinned; +#X text 245 801 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 843 @size; +#X text 245 843 Get/Set element size (width \, height pair). Type: list. Default value: 30 30\.; -#X obj 20 798 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 803 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 895 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 900 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 838 pos; -#X text 245 838 set UI element position. Arguments are:; -#X obj 255 861 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 861 X: top left x-coord. Type: float.; -#X obj 255 884 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 884 Y: top right y-coord. Type: float.; -#X msg 110 909 settings; -#X text 245 909 opens audio settings dialog.; -#X msg 110 936 start; -#X text 245 936 starts audio processing.; -#X msg 110 963 stop; -#X text 245 963 stops audio processing.; -#X obj 20 1000 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1005 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 935 pos; +#X text 245 935 set UI element position. Arguments are:; +#X obj 255 958 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 958 X: top left x-coord. Type: float.; +#X obj 255 981 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 981 Y: top right y-coord. Type: float.; +#X msg 110 1006 settings; +#X text 245 1006 opens audio settings dialog.; +#X msg 110 1033 start; +#X text 245 1033 starts audio processing.; +#X msg 110 1060 stop; +#X text 245 1060 stops audio processing.; +#X obj 20 1097 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1102 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1006 1\.; +#X text 110 1103 1\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1036 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1039 library: ceammc v0.9.4; -#N canvas 10 1058 400 290 info 0; +#X obj 1 1133 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1136 library: ceammc v0.9.6; +#N canvas 10 1155 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.dsp~; #X text 10 76 category:; @@ -107,7 +114,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1058 pd info; +#X restore 10 1155 pd info; #X connect 4 0 7 0; #X connect 5 0 7 0; #X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.dsp~.pddoc b/ceammc/ext/doc/ui.dsp~.pddoc index 3b1247b78b..0216775243 100644 --- a/ceammc/ext/doc/ui.dsp~.pddoc +++ b/ceammc/ext/doc/ui.dsp~.pddoc @@ -36,17 +36,23 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level element active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname + font + weight + font + slant diff --git a/ceammc/ext/doc/ui.env-help.pd b/ceammc/ext/doc/ui.env-help.pd index cdc8ff4981..623d3cc195 100644 --- a/ceammc/ext/doc/ui.env-help.pd +++ b/ceammc/ext/doc/ui.env-help.pd @@ -64,270 +64,273 @@ curve. on selected node: move node up/down.; Default value: 400\. Min value: 10\.; #X msg 110 940 @mouse_events; #X text 245 940 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 997 @output_mode; -#X text 245 997 Get/Set output envelope mode. If set to "mouse_up" +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; +#X msg 110 997 @norm; +#X text 245 997 Get/Set normalize input values. Type: bool. Default +value: 1\.; +#X msg 110 1039 @output_mode; +#X text 245 1039 Get/Set output envelope mode. If set to "mouse_up" - output envelope on mouse up if Ctrl/Cmd key not pressed. If set to "drag" - output envelope on every change. Note: in any mode you can output evenlope with Ctrl/Cmd + mouse down. Type: symbol. Default value: mouse_up. Allowed values: mouse_up \, drag.; -#X msg 110 1099 @receive; -#X text 245 1099 Get/Set receive source. Type: symbol. Default value: +#X msg 110 1141 @receive; +#X text 245 1141 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 1128 @send; -#X text 245 1128 Get/Set send destination. Type: symbol. Default value: +#X msg 110 1170 @send; +#X text 245 1170 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 1170 @active_color; -#X text 245 1170 Get/Set element active color (list of red \, green +#X msg 110 1212 @active_color; +#X text 245 1212 Get/Set element active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1212 @background_color; -#X text 245 1212 Get/Set element background color (list of red \, green +#X msg 110 1254 @background_color; +#X text 245 1254 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1269 @border_color; -#X text 245 1269 Get/Set border color (list of red \, green \, blue +#X msg 110 1311 @border_color; +#X text 245 1311 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1311 @line_color; -#X text 245 1311 Get/Set line color (list of red \, green \, blue values +#X msg 110 1353 @line_color; +#X text 245 1353 Get/Set line color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.1 0.1 0.1 1\.; -#X msg 110 1353 @fontname; -#X text 245 1353 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1382 @fontsize; -#X text 245 1382 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1424 @fontslant; -#X text 245 1424 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1395 @fontname; +#X text 245 1395 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1437 @fontsize; +#X text 245 1437 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1479 @fontslant; +#X text 245 1479 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1466 @fontweight; -#X text 245 1466 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1521 @fontweight; +#X text 245 1521 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1508 @pinned; -#X text 245 1508 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1550 @presetname; -#X text 245 1550 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1563 @pinned; +#X text 245 1563 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1605 @presetname; +#X text 245 1605 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1592 @size; -#X text 245 1592 Get/Set element size (width \, height pair). Type: +#X msg 110 1647 @size; +#X text 245 1647 Get/Set element size (width \, height pair). Type: list. Default value: 200 150\.; -#X obj 20 1644 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1649 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1699 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1704 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1684 adsr; -#X text 245 1684 creates ADSR envelope with one stop point. Arguments +#X msg 110 1739 adsr; +#X text 245 1739 creates ADSR envelope with one stop point. Arguments are:; -#X obj 255 1707 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1707 ATTACK: attack time. Type: float. Min value: 0\. Units: +#X obj 255 1762 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1762 ATTACK: attack time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 1730 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1730 DECAY: decay time. Type: float. Min value: 0\. Units: +#X obj 255 1785 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1785 DECAY: decay time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 1753 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1753 SUSTAIN: sustain level. Type: float. Range: 0\...100\. +#X obj 255 1808 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1808 SUSTAIN: sustain level. Type: float. Range: 0\...100\. Units: %.; -#X obj 255 1791 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1791 RELEASE: release time. Type: float. Min value: 0\. +#X obj 255 1846 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1846 RELEASE: release time. Type: float. Min value: 0\. Units: ms.; -#X msg 110 1816 ar; -#X text 245 1816 creates AR envelope without stop points. Arguments +#X msg 110 1871 ar; +#X text 245 1871 creates AR envelope without stop points. Arguments are:; -#X obj 255 1839 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1839 ATTACK: attack time. Type: float. Min value: 0\. Units: +#X obj 255 1894 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1894 ATTACK: attack time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 1862 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1862 RELEASE: release time. Type: float. Min value: 0\. +#X obj 255 1917 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1917 RELEASE: release time. Type: float. Min value: 0\. Units: ms.; -#X msg 110 1887 asr; -#X text 245 1887 creates ASR envelope with one stop point. Arguments +#X msg 110 1942 asr; +#X text 245 1942 creates ASR envelope with one stop point. Arguments are:; -#X obj 255 1910 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1910 ATTACK: attack time. Type: float. Min value: 0\. Units: +#X obj 255 1965 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1965 ATTACK: attack time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 1933 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1933 RELEASE: release time. Type: float. Min value: 0\. +#X obj 255 1988 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1988 RELEASE: release time. Type: float. Min value: 0\. Units: ms.; -#X msg 110 1958 at; -#X text 245 1958 output envelope value at specified position to second +#X msg 110 2013 at; +#X text 245 2013 output envelope value at specified position to second outlet. Arguments are:; -#X obj 255 1996 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1996 VAL: position (in milliseconds if unit arg is ommited +#X obj 255 2051 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2051 VAL: position (in milliseconds if unit arg is ommited ). Type: float.; -#X obj 255 2034 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2034 [UNIT]: position unit: ms \, % or *(phase). Type: +#X obj 255 2089 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2089 [UNIT]: position unit: ms \, % or *(phase). Type: symbol. Allowed values: ms \, % \, *.; -#X msg 110 2074 clear; -#X text 245 2074 clear specified preset. Arguments are:; -#X obj 255 2097 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2097 IDX: preset index. Type: int. Min value: 0\.; -#X msg 110 2122 eadsr; -#X text 245 2122 creates exponential ADSR envelope with one stop point. +#X msg 110 2129 clear; +#X text 245 2129 clear specified preset. Arguments are:; +#X obj 255 2152 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2152 IDX: preset index. Type: int. Min value: 0\.; +#X msg 110 2177 eadsr; +#X text 245 2177 creates exponential ADSR envelope with one stop point. Arguments are:; -#X obj 255 2160 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2160 ATTACK: attack time. Type: float. Min value: 0\. Units: +#X obj 255 2215 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2215 ATTACK: attack time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 2183 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2183 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 2206 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2206 DECAY: decay time. Type: float. Min value: 0\. Units: +#X obj 255 2238 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2238 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2261 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2261 DECAY: decay time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 2229 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2229 DECAY_CURVE: decay segment curve. Type: float.; -#X obj 255 2252 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2252 SUSTAIN: sustain level. Type: float. Range: 0\...100\. +#X obj 255 2284 cnv 1 90 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2284 DECAY_CURVE: decay segment curve. Type: float.; +#X obj 255 2307 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2307 SUSTAIN: sustain level. Type: float. Range: 0\...100\. Units: %.; -#X obj 255 2290 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2290 RELEASE: release time. Type: float. Min value: 0\. +#X obj 255 2345 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2345 RELEASE: release time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 2313 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2313 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 2338 ear; -#X text 245 2338 creates exponential AR envelope without stop points. +#X obj 255 2368 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2368 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2393 ear; +#X text 245 2393 creates exponential AR envelope without stop points. Arguments are:; -#X obj 255 2376 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2376 ATTACK: attack time. Type: float. Units: ms.; -#X obj 255 2399 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2399 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 2422 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2422 RELEASE: release time. Type: float. Units: ms.; -#X obj 255 2445 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2445 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 2470 easr; -#X text 245 2470 creates exponential AR envelope with one stop point. +#X obj 255 2431 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2431 ATTACK: attack time. Type: float. Units: ms.; +#X obj 255 2454 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2454 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2477 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2477 RELEASE: release time. Type: float. Units: ms.; +#X obj 255 2500 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2500 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2525 easr; +#X text 245 2525 creates exponential AR envelope with one stop point. Arguments are:; -#X obj 255 2508 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2508 ATTACK: attack time. Type: float. Min value: 0\. Units: +#X obj 255 2563 cnv 1 53 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2563 ATTACK: attack time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 2531 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2531 ATTACK_CURVE: attack segment curve. Type: float.; -#X obj 255 2554 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2554 RELEASE: release time. Type: float. Min value: 0\. +#X obj 255 2586 cnv 1 98 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2586 ATTACK_CURVE: attack segment curve. Type: float.; +#X obj 255 2609 cnv 1 59 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2609 RELEASE: release time. Type: float. Min value: 0\. Units: ms.; -#X obj 255 2577 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2577 RELEASE_CURVE: release segment curve. Type: float.; -#X msg 110 2602 exp; -#X text 245 2602 creates exponential-segmented envelope with arbitrary +#X obj 255 2632 cnv 1 105 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2632 RELEASE_CURVE: release segment curve. Type: float.; +#X msg 110 2657 exp; +#X text 245 2657 creates exponential-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2640 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2640 VAL0: begin value. Type: float.; -#X obj 255 2663 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2663 LEN0: line length. Type: float. Min value: 1\. Units: +#X obj 255 2695 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2695 VAL0: begin value. Type: float.; +#X obj 255 2718 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2718 LEN0: line length. Type: float. Min value: 1\. Units: ms.; -#X obj 255 2686 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2686 CURVE0: segment curve. Type: float.; -#X obj 255 2709 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2709 VAL1: value. Type: float.; -#X obj 255 2732 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2732 [LEN1]: segment length. Type: float.; -#X obj 255 2755 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2755 [CURVE1]: segment curve. Type: float.; -#X obj 255 2778 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2778 [VAL2]: value. Type: float.; -#X msg 110 2803 interp; -#X text 245 2803 for this object acts as *load* \, no interpolation +#X obj 255 2741 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2741 CURVE0: segment curve. Type: float.; +#X obj 255 2764 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2764 VAL1: value. Type: float.; +#X obj 255 2787 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2787 [LEN1]: segment length. Type: float.; +#X obj 255 2810 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2810 [CURVE1]: segment curve. Type: float.; +#X obj 255 2833 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2833 [VAL2]: value. Type: float.; +#X msg 110 2858 interp; +#X text 245 2858 for this object acts as *load* \, no interpolation performed.; -#X msg 110 2830 line; -#X text 245 2830 creates line-segmented envelope with arbitrary number +#X msg 110 2885 line; +#X text 245 2885 creates line-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 2868 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2868 VAL0: begin value. Type: float.; -#X obj 255 2891 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2891 LEN0: line length. Type: float. Min value: 1\. Units: +#X obj 255 2923 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2923 VAL0: begin value. Type: float.; +#X obj 255 2946 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2946 LEN0: line length. Type: float. Min value: 1\. Units: ms.; -#X obj 255 2914 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2914 VAL1: value. Type: float.; -#X obj 255 2937 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2937 [LEN1]: segment length. Type: float.; -#X obj 255 2960 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2960 [VAL2]: value. Type: float.; -#X msg 110 2985 load; -#X text 245 2985 loads specified preset. Arguments are:; -#X obj 255 3008 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3008 IDX: preset index. Type: int.; -#X msg 110 3033 pos; -#X text 245 3033 set UI element position. Arguments are:; -#X obj 255 3056 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3056 X: top left x-coord. Type: float.; -#X obj 255 3079 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3079 Y: top right y-coord. Type: float.; -#X msg 110 3104 sigmoid; -#X text 245 3104 creates sigmoid-segmented envelope with arbitrary +#X obj 255 2969 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2969 VAL1: value. Type: float.; +#X obj 255 2992 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2992 [LEN1]: segment length. Type: float.; +#X obj 255 3015 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3015 [VAL2]: value. Type: float.; +#X msg 110 3040 load; +#X text 245 3040 loads specified preset. Arguments are:; +#X obj 255 3063 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3063 IDX: preset index. Type: int.; +#X msg 110 3088 pos; +#X text 245 3088 set UI element position. Arguments are:; +#X obj 255 3111 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3111 X: top left x-coord. Type: float.; +#X obj 255 3134 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3134 Y: top right y-coord. Type: float.; +#X msg 110 3159 sigmoid; +#X text 245 3159 creates sigmoid-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3142 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3142 VAL0: begin value. Type: float.; -#X obj 255 3165 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3165 LEN0: line length. Type: float. Min value: 1\. Units: +#X obj 255 3197 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3197 VAL0: begin value. Type: float.; +#X obj 255 3220 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3220 LEN0: line length. Type: float. Min value: 1\. Units: ms.; -#X obj 255 3188 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3188 CURVE0: segment curve. Type: float.; -#X obj 255 3211 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3211 VAL1: value. Type: float.; -#X obj 255 3234 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3234 [LEN1]: segment length. Type: float.; -#X obj 255 3257 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3257 [CURVE1]: segment curve. Type: float.; -#X obj 255 3280 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3280 [VAL2]: value. Type: float.; -#X msg 110 3305 sin2; -#X text 245 3305 creates quadratic sine-segmented envelope with arbitrary +#X obj 255 3243 cnv 1 52 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3243 CURVE0: segment curve. Type: float.; +#X obj 255 3266 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3266 VAL1: value. Type: float.; +#X obj 255 3289 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3289 [LEN1]: segment length. Type: float.; +#X obj 255 3312 cnv 1 62 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3312 [CURVE1]: segment curve. Type: float.; +#X obj 255 3335 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3335 [VAL2]: value. Type: float.; +#X msg 110 3360 sin2; +#X text 245 3360 creates quadratic sine-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3343 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3343 VAL0: begin value. Type: float.; -#X obj 255 3366 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3366 LEN0: line length. Type: float. Min value: 1\. Units: +#X obj 255 3398 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3398 VAL0: begin value. Type: float.; +#X obj 255 3421 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3421 LEN0: line length. Type: float. Min value: 1\. Units: ms.; -#X obj 255 3389 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3389 VAL1: value. Type: float.; -#X obj 255 3412 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3412 [LEN1]: segment length. Type: float.; -#X obj 255 3435 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3435 [VAL2]: value. Type: float.; -#X msg 110 3460 step; -#X text 245 3460 creates step-segmented envelope with arbitrary number +#X obj 255 3444 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3444 VAL1: value. Type: float.; +#X obj 255 3467 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3467 [LEN1]: segment length. Type: float.; +#X obj 255 3490 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3490 [VAL2]: value. Type: float.; +#X msg 110 3515 step; +#X text 245 3515 creates step-segmented envelope with arbitrary number of segments. Arguments are:; -#X obj 255 3498 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3498 VAL0: begin value. Type: float.; -#X obj 255 3521 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3521 LEN0: step length. Type: float. Min value: 1\. Units: +#X obj 255 3553 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3553 VAL0: begin value. Type: float.; +#X obj 255 3576 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3576 LEN0: step length. Type: float. Min value: 1\. Units: ms.; -#X obj 255 3544 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3544 VAL1: value. Type: float.; -#X obj 255 3567 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3567 [LEN1]: segment length. Type: float.; -#X obj 255 3590 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3590 [VAL2]: value. Type: float.; -#X msg 110 3615 store; -#X text 245 3615 stores specified preset. Arguments are:; -#X obj 255 3638 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 3638 IDX: preset index. Type: int.; -#X obj 20 3673 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3678 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 3599 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3599 VAL1: value. Type: float.; +#X obj 255 3622 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3622 [LEN1]: segment length. Type: float.; +#X obj 255 3645 cnv 1 47 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3645 [VAL2]: value. Type: float.; +#X msg 110 3670 store; +#X text 245 3670 stores specified preset. Arguments are:; +#X obj 255 3693 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 3693 IDX: preset index. Type: int.; +#X obj 20 3728 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3733 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3679 1\.; -#X text 150 3679 *data*; -#X text 245 3679 set new envelope and output it.; -#X text 150 3699 *bang*; -#X text 245 3699 output current envelope.; -#X obj 20 3729 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 3734 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 3734 1\.; +#X text 150 3734 *data*; +#X text 245 3734 set new envelope and output it.; +#X text 150 3754 *bang*; +#X text 245 3754 output current envelope.; +#X obj 20 3784 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 3789 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 3735 1\.; -#X text 245 3735 envelope.; -#X text 110 3755 2\.; -#X text 245 3755 float: envelope value at time moment.; +#X text 110 3790 1\.; +#X text 245 3790 envelope.; +#X text 110 3810 2\.; +#X text 245 3810 float: envelope value at time moment.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 3805 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3808 library: ceammc v0.9.4; -#N canvas 10 3827 400 290 info 0; +#X obj 1 3860 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 3863 library: ceammc v0.9.6; +#N canvas 10 3882 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.env; #X text 10 76 category:; @@ -346,7 +349,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 3827 pd info; +#X restore 10 3882 pd info; #X connect 6 0 7 0; #X connect 7 0 14 0; #X connect 8 0 14 0; diff --git a/ceammc/ext/doc/ui.env.pddoc b/ceammc/ext/doc/ui.env.pddoc index 3f1bfa5fa3..133996cb7a 100644 --- a/ceammc/ext/doc/ui.env.pddoc +++ b/ceammc/ext/doc/ui.env.pddoc @@ -46,8 +46,9 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level + normalize input values element active color (list of red, green, blue values in 0-1 range) line color (list of @@ -56,15 +57,17 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font slant - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events output envelope mode. If set to "mouse_up" - output envelope on mouse up if Ctrl/Cmd key not pressed. If set to "drag" - output envelope on every change. Note: in any mode diff --git a/ceammc/ext/doc/ui.faust~-help.pd b/ceammc/ext/doc/ui.faust~-help.pd index 7dccd24548..87b6566b8e 100644 --- a/ceammc/ext/doc/ui.faust~-help.pd +++ b/ceammc/ext/doc/ui.faust~-help.pd @@ -17,78 +17,87 @@ https://faust.grame.fr/ @url https://faust.grame.fr/; #X obj 50 300 ui.hgain~; #X obj 222 300 ui.dsp~; #X obj 50 328 dac~; -#X obj 20 377 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 382 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +#X obj 50 357 ui.faust~.extra; +#X obj 20 406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 411 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 417 Left-click + ⌥; -#X text 285 417 open faust dsp file in external editor.; -#X text 110 437 Right-click; -#X text 285 437 open popup menu.; -#X text 110 457 Right-click + ⇧; -#X text 285 457 open object help.; -#X text 110 477 Right-click + ⇧; -#X text 285 477 open object help.; -#X text 61 477 [Edit]; -#X obj 20 507 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 512 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 110 446 Left-click + ⌥; +#X text 285 446 open faust dsp file in external editor.; +#X text 110 466 Right-click; +#X text 285 466 open popup menu.; +#X text 110 486 Right-click + ⇧; +#X text 285 486 open object help.; +#X text 110 506 Right-click + ⇧; +#X text 285 506 open object help.; +#X text 61 506 [Edit]; +#X obj 20 536 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 541 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 547 1\.; -#X text 150 547 symbol; -#X obj 246 548 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 547 FNAME: path to faust dsp file. Type: symbol.; -#X obj 20 577 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 582 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 576 1\.; +#X text 150 576 symbol; +#X obj 246 577 cnv 1 46 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 576 FNAME: path to faust dsp file. Type: symbol.; +#X obj 20 606 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 611 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 617 @auto; -#X text 245 617 Get/Set auto update mode. If on - recompiles faust -dsp file on change. Type: int. Default value: 1\. Allowed values: 0 -\, 1\.; -#X msg 110 674 @fname; -#X text 245 674 Get/Set path to faust dsp file. Type: symbol.; -#X msg 110 703 @include; -#X text 245 703 Get/Set list of faust include directories. Type: list.; -#X obj 20 742 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 747 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 646 @auto; +#X text 245 646 Get/Set auto update mode. If on - recompiles faust +dsp file on change. Type: bool. Default value: 0\.; +#X msg 110 688 @fname; +#X text 245 688 Get/Set path to faust dsp file. Type: symbol.; +#X msg 110 717 @include; +#X text 245 717 Get/Set list of faust include directories. Type: list.; +#X msg 110 746 @size; +#X text 245 746 Get/Set object size. Type: list. Default value: 10 +10\.; +#X obj 20 785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 790 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 782 open; -#X text 245 782 open faust dsp file in external editor.; -#X msg 110 809 reset; -#X text 245 809 reset object state.; -#X msg 110 836 update; -#X text 245 836 update faust object \, recompile if needed.; -#X obj 20 873 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 878 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 825 open; +#X text 245 825 open faust dsp file in external editor.; +#X msg 110 852 reset; +#X text 245 852 reset object state.; +#X msg 110 879 size; +#X text 245 879 resize object. Arguments are:; +#X obj 255 902 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 902 W: new width. Type: int.; +#X obj 255 925 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 925 H: new height. Type: int.; +#X msg 110 950 update; +#X text 245 950 update faust object \, recompile if needed.; +#X obj 20 987 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 992 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 879 1\.; -#X text 245 879 control input.; -#X text 110 899 2\.; -#X text 245 899 first faust input.; -#X text 110 919 ....; -#X text 245 919 ... faust input.; -#X text 110 939 n+1\.; -#X text 245 939 n-th faust input.; -#X obj 20 969 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 974 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 993 1\.; +#X text 245 993 control input.; +#X text 110 1013 2\.; +#X text 245 1013 first faust input.; +#X text 110 1033 ....; +#X text 245 1033 ... faust input.; +#X text 110 1053 n+1\.; +#X text 245 1053 n-th faust input.; +#X obj 20 1083 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1088 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 975 1\.; -#X text 245 975 first faust output.; -#X text 110 995 ....; -#X text 245 995 ... faust output.; -#X text 110 1015 n.; -#X text 245 1015 n-th faust output.; +#X text 110 1089 1\.; +#X text 245 1089 first faust output.; +#X text 110 1109 ....; +#X text 245 1109 ... faust output.; +#X text 110 1129 n.; +#X text 245 1129 n-th faust output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title lang @url ceammc.lang-help.pd; -#X obj 1 1065 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1068 library: ceammc v0.9.4; -#N canvas 10 1087 400 290 info 0; +#X obj 1 1179 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1182 library: ceammc v0.9.6; +#N canvas 10 1201 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.faust~; #X text 10 76 category:; @@ -107,7 +116,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1087 pd info; +#X restore 10 1201 pd info; #X connect 7 0 9 0; #X connect 6 0 10 0; #X connect 9 0 10 0; diff --git a/ceammc/ext/doc/ui.faust~.extra.pd b/ceammc/ext/doc/ui.faust~.extra.pd new file mode 100644 index 0000000000..a1355b85e3 --- /dev/null +++ b/ceammc/ext/doc/ui.faust~.extra.pd @@ -0,0 +1,14 @@ +#N canvas 0 0 402 414 12; +#X msg 20 48 @fname faust/ks.dsp; +#X msg 20 77 @fname faust/blow.dsp; +#X msg 20 106 @fname faust/xfm.dsp; +#X obj 20 135 ui.faust~ faust/ex0.dsp; +#X obj 20 336 ui.hgain~; +#X obj 192 336 ui.dsp~; +#X obj 20 365 dac~; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 4 0 6 1; +#X connect 0 0 3 0; +#X connect 1 0 3 0; +#X connect 2 0 3 0; diff --git a/ceammc/ext/doc/ui.faust~.pddoc b/ceammc/ext/doc/ui.faust~.pddoc index 6f847d4a1b..dd4c699233 100644 --- a/ceammc/ext/doc/ui.faust~.pddoc +++ b/ceammc/ext/doc/ui.faust~.pddoc @@ -30,12 +30,17 @@ open faust dsp file in external editor reset object state update faust object, recompile if needed + resize object + new width + new height - path to faust dsp file - list of faust include directories - auto update mode. If on - - recompiles faust dsp file on change + path to faust dsp file + list of faust include + directories + auto update mode. If on - recompiles + faust dsp file on change + object size @@ -73,6 +78,39 @@ [ui.hgain~] [ui.dsp~] |\ [dac~] + +[ui.faust~.extra] +]]> + + +x] +[X b->x] +[X c->x] ]]> diff --git a/ceammc/ext/doc/ui.filter-help.pd b/ceammc/ext/doc/ui.filter-help.pd index 7a2b291655..32687452b8 100644 --- a/ceammc/ext/doc/ui.filter-help.pd +++ b/ceammc/ext/doc/ui.filter-help.pd @@ -34,11 +34,10 @@ float. Units: db. Default value: 0\. Range: -24\...24\.; #X msg 110 594 @mouse_events; #X text 245 594 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 651 @q; #X text 245 651 Get/Set quality factor. Type: float. Default value: -0.707107\. Range: 0.015625\...64\.; +0.7071\. Range: 0.0156\...64\.; #X msg 110 693 @receive; #X text 245 693 Get/Set receive source. Type: symbol. Default value: (null).; @@ -77,95 +76,93 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 1148 @label_align; #X text 245 1148 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1190 @label_inner; -#X text 245 1190 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1232 @label_margins; -#X text 245 1232 Get/Set label offset in pixels. Type: list. Default +#X msg 110 1190 @label_margins; +#X text 245 1190 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1274 @label_side; -#X text 245 1274 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1232 @label_side; +#X text 245 1232 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1316 @label_valign; -#X text 245 1316 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1274 @label_valign; +#X text 245 1274 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1358 @fontname; -#X text 245 1358 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1387 @fontsize; -#X text 245 1387 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1429 @fontslant; -#X text 245 1429 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1316 @fontname; +#X text 245 1316 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1358 @fontsize; +#X text 245 1358 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1400 @fontslant; +#X text 245 1400 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1471 @fontweight; -#X text 245 1471 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1442 @fontweight; +#X text 245 1442 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1513 @pinned; -#X text 245 1513 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1555 @presetname; -#X text 245 1555 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1484 @pinned; +#X text 245 1484 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1526 @presetname; +#X text 245 1526 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1597 @size; -#X text 245 1597 Get/Set element size (width \, height pair). Type: +#X msg 110 1568 @size; +#X text 245 1568 Get/Set element size (width \, height pair). Type: list. Default value: 300 100\.; -#X obj 20 1649 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1654 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1620 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1625 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1689 biquad; -#X text 245 1689 set biquad coefficients (but not changes current filter +#X msg 110 1660 biquad; +#X text 245 1660 set biquad coefficients (but not changes current filter properties). Arguments are:; -#X obj 255 1727 cnv 1 112 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1727 b0 b1 b2 a1 a2: coefficients. Type: list.; -#X msg 110 1752 clear; -#X text 245 1752 clears specified preset. Arguments are:; -#X obj 255 1775 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1775 IDX: preset index. Type: int.; -#X msg 110 1800 interp; -#X text 245 1800 for this object acts as *load* \, no interpolation +#X obj 255 1698 cnv 1 112 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1698 b0 b1 b2 a1 a2: coefficients. Type: list.; +#X msg 110 1723 clear; +#X text 245 1723 clears specified preset. Arguments are:; +#X obj 255 1746 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1746 IDX: preset index. Type: int.; +#X msg 110 1771 interp; +#X text 245 1771 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1827 load; -#X text 245 1827 loads specified preset. Arguments are:; -#X obj 255 1850 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1850 IDX: preset index. Type: int.; -#X msg 110 1875 pos; -#X text 245 1875 set UI element position. Arguments are:; -#X obj 255 1898 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1898 X: top left x-coord. Type: float.; -#X obj 255 1921 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1921 Y: top right y-coord. Type: float.; -#X msg 110 1946 store; -#X text 245 1946 stores specified preset. Arguments are:; -#X obj 255 1969 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1969 IDX: preset index. Type: int.; -#X msg 110 1994 dump; -#X text 245 1994 dumps all object info to Pd console window.; -#X obj 20 2031 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2036 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1798 load; +#X text 245 1798 loads specified preset. Arguments are:; +#X obj 255 1821 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1821 IDX: preset index. Type: int.; +#X msg 110 1846 pos; +#X text 245 1846 set UI element position. Arguments are:; +#X obj 255 1869 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1869 X: top left x-coord. Type: float.; +#X obj 255 1892 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1892 Y: top right y-coord. Type: float.; +#X msg 110 1917 store; +#X text 245 1917 stores specified preset. Arguments are:; +#X obj 255 1940 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1940 IDX: preset index. Type: int.; +#X msg 110 1965 dump; +#X text 245 1965 dumps all object info to Pd console window.; +#X obj 20 2002 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2007 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2037 1\.; -#X text 245 2037 control input.; -#X obj 20 2067 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2072 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2008 1\.; +#X text 245 2008 control input.; +#X obj 20 2038 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2043 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2073 1\.; -#X text 245 2073 list: b0 b1 b2 a1 a2\.; +#X text 110 2044 1\.; +#X text 245 2044 list: b0 b1 b2 a1 a2\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2123 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2126 library: ceammc v0.9.4; -#X text 591 2138 see also:; -#X obj 665 2141 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2094 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2097 library: ceammc v0.9.6; +#X text 591 2109 see also:; +#X obj 665 2112 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.filter~] @url ui.filter~-help.pd; -#N canvas 10 2145 400 290 info 0; +#N canvas 10 2116 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.filter; #X text 10 76 category:; @@ -184,7 +181,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2145 pd info; +#X restore 10 2116 pd info; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 8 0; diff --git a/ceammc/ext/doc/ui.filter.pddoc b/ceammc/ext/doc/ui.filter.pddoc index d92159faf9..62efbf06c3 100644 --- a/ceammc/ext/doc/ui.filter.pddoc +++ b/ceammc/ext/doc/ui.filter.pddoc @@ -51,7 +51,7 @@ enum="lpf hpf bpf bpfq lowshelf highshelf peak notch">frequency scale gain (for low/highshelf/peak filters) - + quality factor preset name for using with @@ -60,10 +60,10 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events element background color (list of red, green, blue values in 0-1 range) border color (list @@ -71,9 +71,11 @@ knob color knob color knob color - + + fontsize - fontname + fontname font weight font @@ -82,8 +84,6 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). label horizontal align diff --git a/ceammc/ext/doc/ui.filter~-help.pd b/ceammc/ext/doc/ui.filter~-help.pd index 1805f6230c..abc0e12d08 100644 --- a/ceammc/ext/doc/ui.filter~-help.pd +++ b/ceammc/ext/doc/ui.filter~-help.pd @@ -13,7 +13,8 @@ #X msg 338 147 @type \$2; #X obj 50 176 ui.filter~; #X obj 50 291 ui.hgain~; -#X obj 222 291 ui.dsp~; +#X obj 203 291 ui.dsp~; +#X obj 328 291 ui.dt; #X obj 50 320 dac~; #X obj 20 369 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 374 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 @@ -37,11 +38,10 @@ float. Units: db. Default value: 0\. Range: -24\...24\.; #X msg 110 623 @mouse_events; #X text 245 623 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 680 @q; #X text 245 680 Get/Set quality factor. Type: float. Default value: -0.707107\. Range: 0.015625\...64\.; +0.7071\. Range: 0.0156\...64\.; #X msg 110 722 @receive; #X text 245 722 Get/Set receive source. Type: symbol. Default value: (null).; @@ -80,95 +80,95 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 1177 @label_align; #X text 245 1177 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1219 @label_inner; -#X text 245 1219 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1261 @label_margins; -#X text 245 1261 Get/Set label offset in pixels. Type: list. Default +#X msg 110 1219 @label_margins; +#X text 245 1219 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1303 @label_side; -#X text 245 1303 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1261 @label_side; +#X text 245 1261 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1345 @label_valign; -#X text 245 1345 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1303 @label_valign; +#X text 245 1303 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1387 @fontname; -#X text 245 1387 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1416 @fontsize; -#X text 245 1416 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1458 @fontslant; -#X text 245 1458 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1345 @fontname; +#X text 245 1345 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1387 @fontsize; +#X text 245 1387 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1429 @fontslant; +#X text 245 1429 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1500 @fontweight; -#X text 245 1500 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1471 @fontweight; +#X text 245 1471 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1542 @pinned; -#X text 245 1542 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1584 @presetname; -#X text 245 1584 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1513 @pinned; +#X text 245 1513 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1555 @presetname; +#X text 245 1555 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1626 @size; -#X text 245 1626 Get/Set element size (width \, height pair). Type: +#X msg 110 1597 @size; +#X text 245 1597 Get/Set element size (width \, height pair). Type: list. Default value: 300 100\.; -#X obj 20 1678 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1683 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1649 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1654 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1718 biquad; -#X text 245 1718 set biquad coefficients (but not changes current filter +#X msg 110 1689 biquad; +#X text 245 1689 set biquad coefficients (but not changes current filter properties). Arguments are:; -#X obj 255 1756 cnv 1 112 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1756 b0 b1 b2 a1 a2: coefficients. Type: list.; -#X msg 110 1781 clear; -#X text 245 1781 clears specified preset. Arguments are:; -#X obj 255 1804 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1804 IDX: preset index. Type: int.; -#X msg 110 1829 interp; -#X text 245 1829 for this object acts as *load* \, no interpolation +#X obj 255 1727 cnv 1 112 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1727 b0 b1 b2 a1 a2: coefficients. Type: list.; +#X msg 110 1752 clear; +#X text 245 1752 clears specified preset. Arguments are:; +#X obj 255 1775 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1775 IDX: preset index. Type: int.; +#X msg 110 1800 interp; +#X text 245 1800 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1856 load; -#X text 245 1856 loads specified preset. Arguments are:; -#X obj 255 1879 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1879 IDX: preset index. Type: int.; -#X msg 110 1904 pos; -#X text 245 1904 set UI element position. Arguments are:; -#X obj 255 1927 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1927 X: top left x-coord. Type: float.; -#X obj 255 1950 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1950 Y: top right y-coord. Type: float.; -#X msg 110 1975 store; -#X text 245 1975 stores specified preset. Arguments are:; -#X obj 255 1998 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1998 IDX: preset index. Type: int.; -#X msg 110 2023 dump; -#X text 245 2023 dumps all object info to Pd console window.; -#X obj 20 2060 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2065 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1827 load; +#X text 245 1827 loads specified preset. Arguments are:; +#X obj 255 1850 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1850 IDX: preset index. Type: int.; +#X msg 110 1875 pos; +#X text 245 1875 set UI element position. Arguments are:; +#X obj 255 1898 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1898 X: top left x-coord. Type: float.; +#X obj 255 1921 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1921 Y: top right y-coord. Type: float.; +#X msg 110 1946 store; +#X text 245 1946 stores specified preset. Arguments are:; +#X obj 255 1969 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1969 IDX: preset index. Type: int.; +#X msg 110 1994 dump; +#X text 245 1994 dumps all object info to Pd console window.; +#X obj 20 2031 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2036 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2066 1\.; -#X text 245 2066 input signal.; -#X obj 20 2096 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2101 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2037 1\.; +#X text 245 2037 input signal.; +#X obj 20 2067 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2072 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2102 1\.; -#X text 245 2102 filtered signal.; +#X text 110 2073 1\.; +#X text 245 2073 filtered signal.; +#X text 110 2093 2\.; +#X text 245 2093 list: filter biquad coefficient.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2152 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2155 library: ceammc v0.9.4; -#X text 598 2167 see also:; -#X obj 672 2170 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2143 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2146 library: ceammc v0.9.6; +#X text 598 2158 see also:; +#X obj 672 2161 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.filter] @url ui.filter-help.pd; -#N canvas 10 2174 400 290 info 0; +#N canvas 10 2165 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.filter~; #X text 10 76 category:; @@ -187,12 +187,13 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2174 pd info; +#X restore 10 2165 pd info; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 4 0 9 0; #X connect 7 0 9 0; #X connect 8 0 9 0; #X connect 9 0 10 0; -#X connect 10 0 12 0; -#X connect 10 0 12 1; \ No newline at end of file +#X connect 9 1 12 0; +#X connect 10 0 13 0; +#X connect 10 0 13 1; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.filter~.pddoc b/ceammc/ext/doc/ui.filter~.pddoc index f39bd39aaf..be44efb114 100644 --- a/ceammc/ext/doc/ui.filter~.pddoc +++ b/ceammc/ext/doc/ui.filter~.pddoc @@ -51,7 +51,7 @@ enum="lpf hpf bpf bpfq lowshelf highshelf peak notch">frequency scale gain (for low/highshelf/peak filters) - + quality factor preset name for using with @@ -60,10 +60,10 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events element background color (list of red, green, blue values in 0-1 range) border color (list @@ -71,9 +71,11 @@ knob color knob color knob color - + + fontsize - fontname + fontname font weight font @@ -82,8 +84,6 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). label horizontal align @@ -100,6 +100,7 @@ filtered signal + list: filter biquad coefficient @@ -109,14 +110,14 @@ | [@scale $2( [@type $2( | | | [ui.filter~ ] -| -| -| -| -| -| -| -[ui.hgain~] [ui.dsp~] +| ^| +| | +| | +| | +| | +| | +| | +[ui.hgain~] [ui.dsp~] [ui.dt] |\ [dac~] ]]> diff --git a/ceammc/ext/doc/ui.gain2~-help.pd b/ceammc/ext/doc/ui.gain2~-help.pd index 145a9bbcd8..f9853ada22 100644 --- a/ceammc/ext/doc/ui.gain2~-help.pd +++ b/ceammc/ext/doc/ui.gain2~-help.pd @@ -68,50 +68,49 @@ value: 0\. Range: -12\...12\.; value: -60\. Range: -90\...-15\.; #X msg 110 844 @mouse_events; #X text 245 844 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 901 @output_value; #X text 245 901 Get/Set flag to output @db property after each knob -move. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +move. Type: bool. Default value: 0\.; #X msg 110 943 @receive; #X text 245 943 Get/Set receive source. Type: symbol. Default value: (null).; #X msg 110 972 @relative; #X text 245 972 Get/Set relative input mode. When set do not jump to -value on click. Type: int. Default value: 1\. Allowed values: 0 \, -1\.; +value on click. Type: bool. Default value: 1\.; #X msg 110 1014 @send; #X text 245 1014 Get/Set send destination. Type: symbol. Default value: (null).; #X msg 110 1056 @show_range; -#X text 245 1056 Get/Set if show slider range. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 1098 @midi_channel; -#X text 245 1098 Get/Set binded MIDI channel. 0 means listen to all +#X text 245 1056 Get/Set if show slider range. Type: bool. Default +value: 1\.; +#X msg 110 1085 @midi_channel; +#X text 245 1085 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; -#X msg 110 1140 @midi_control; -#X text 245 1140 Get/Set binded MIDI controller number. 0 means not -binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; -#X msg 110 1197 @midi_pickup; -#X text 245 1197 Get/Set pickup current value. If slider is binded +#X msg 110 1127 @midi_control; +#X text 245 1127 Get/Set binded MIDI controller number. -1 means not +binded to any controller. Type: int. Default value: -1\. Range: -1\...127\.; +#X msg 110 1184 @midi_pickup; +#X text 245 1184 Get/Set pickup current value. If slider is binded to value \, first time you should pass over this value to make binding. It prevents from sudden value change on first control change. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1269 @background_color; -#X text 245 1269 Get/Set element background color (list of red \, green +bool. Default value: 1\.; +#X msg 110 1256 @background_color; +#X text 245 1256 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1326 @border_color; -#X text 245 1326 Get/Set border color (list of red \, green \, blue +#X msg 110 1313 @border_color; +#X text 245 1313 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1368 @knob_color; -#X text 245 1368 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1355 @knob_color; +#X text 245 1355 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1410 @fontname; -#X text 245 1410 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 1397 @fontname; +#X text 245 1397 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 1439 @fontsize; #X text 245 1439 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 1481 @fontslant; #X text 245 1481 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -120,7 +119,7 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 1565 @pinned; #X text 245 1565 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 1607 @presetname; #X text 245 1607 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; @@ -184,13 +183,13 @@ list. Default value: 15 120\.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 2301 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2304 library: ceammc v0.9.4; +#X text 10 2304 library: ceammc v0.9.6; #N canvas 10 2323 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.gain2~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.gain2~.pddoc b/ceammc/ext/doc/ui.gain2~.pddoc index 8bd97abab3..1a804a793d 100644 --- a/ceammc/ext/doc/ui.gain2~.pddoc +++ b/ceammc/ext/doc/ui.gain2~.pddoc @@ -45,31 +45,32 @@ gain in dbfs scale gain as amplitude ratio - flag to output @db - property after each knob move - relative input mode. When - set do not jump to value on click. - if show slider - range + flag to output @db property + after each knob move + relative input mode. When set do not + jump to value on click. + if show slider range preset name for using with [ui.preset] - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level knob color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -77,11 +78,11 @@ binded MIDI channel. 0 means listen to all channels - - binded MIDI controller number. 0 means not binded to any controller. - pickup current value. - If slider is binded to value, first time you should pass over this value to make - binding. It prevents from sudden value change on first control change + + binded MIDI controller number. -1 means not binded to any controller. + pickup current value. If slider + is binded to value, first time you should pass over this value to make binding. It + prevents from sudden value change on first control change increase current gain by N db diff --git a/ceammc/ext/doc/ui.gain~-help.pd b/ceammc/ext/doc/ui.gain~-help.pd index 0573f2cc3d..c6f3f93dcb 100644 --- a/ceammc/ext/doc/ui.gain~-help.pd +++ b/ceammc/ext/doc/ui.gain~-help.pd @@ -76,50 +76,49 @@ value: 0\. Range: -12\...12\.; value: -60\. Range: -90\...-15\.; #X msg 110 1003 @mouse_events; #X text 245 1003 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 1060 @output_value; #X text 245 1060 Get/Set flag to output @db property after each knob -move. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +move. Type: bool. Default value: 0\.; #X msg 110 1102 @receive; #X text 245 1102 Get/Set receive source. Type: symbol. Default value: (null).; #X msg 110 1131 @relative; #X text 245 1131 Get/Set relative input mode. When set do not jump -to value on click. Type: int. Default value: 1\. Allowed values: 0 -\, 1\.; +to value on click. Type: bool. Default value: 1\.; #X msg 110 1173 @send; #X text 245 1173 Get/Set send destination. Type: symbol. Default value: (null).; #X msg 110 1215 @show_range; -#X text 245 1215 Get/Set if show slider range. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 1257 @midi_channel; -#X text 245 1257 Get/Set binded MIDI channel. 0 means listen to all +#X text 245 1215 Get/Set if show slider range. Type: bool. Default +value: 1\.; +#X msg 110 1244 @midi_channel; +#X text 245 1244 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; -#X msg 110 1299 @midi_control; -#X text 245 1299 Get/Set binded MIDI controller number. 0 means not -binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; -#X msg 110 1356 @midi_pickup; -#X text 245 1356 Get/Set pickup current value. If slider is binded +#X msg 110 1286 @midi_control; +#X text 245 1286 Get/Set binded MIDI controller number. -1 means not +binded to any controller. Type: int. Default value: -1\. Range: -1\...127\.; +#X msg 110 1343 @midi_pickup; +#X text 245 1343 Get/Set pickup current value. If slider is binded to value \, first time you should pass over this value to make binding. It prevents from sudden value change on first control change. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1428 @background_color; -#X text 245 1428 Get/Set element background color (list of red \, green +bool. Default value: 1\.; +#X msg 110 1415 @background_color; +#X text 245 1415 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1485 @border_color; -#X text 245 1485 Get/Set border color (list of red \, green \, blue +#X msg 110 1472 @border_color; +#X text 245 1472 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1527 @knob_color; -#X text 245 1527 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1514 @knob_color; +#X text 245 1514 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1569 @fontname; -#X text 245 1569 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 1556 @fontname; +#X text 245 1556 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 1598 @fontsize; #X text 245 1598 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 1640 @fontslant; #X text 245 1640 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -128,7 +127,7 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 1724 @pinned; #X text 245 1724 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 1766 @presetname; #X text 245 1766 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; @@ -188,13 +187,13 @@ list. Default value: 15 120\.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 2420 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2423 library: ceammc v0.9.4; +#X text 10 2423 library: ceammc v0.9.6; #N canvas 10 2442 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.gain~; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.gain~.pddoc b/ceammc/ext/doc/ui.gain~.pddoc index da8dca9d55..8cb6c114cd 100644 --- a/ceammc/ext/doc/ui.gain~.pddoc +++ b/ceammc/ext/doc/ui.gain~.pddoc @@ -45,32 +45,33 @@ gain in dbfs scale gain as amplitude ratio - flag to output @db - property after each knob move - relative input mode. When - set do not jump to value on click + flag to output @db property + after each knob move + relative input mode. When set do not + jump to value on click preset name for using with [ui.preset] - if show slider - range - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + if show slider range + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level knob color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -78,11 +79,11 @@ binded MIDI channel. 0 means listen to all channels - - binded MIDI controller number. 0 means not binded to any controller. - pickup current value. - If slider is binded to value, first time you should pass over this value to make - binding. It prevents from sudden value change on first control change + + binded MIDI controller number. -1 means not binded to any controller. + pickup current value. If slider + is binded to value, first time you should pass over this value to make binding. It + prevents from sudden value change on first control change increase current gain by N db diff --git a/ceammc/ext/doc/ui.icon-help.pd b/ceammc/ext/doc/ui.icon-help.pd index e8e5d170b0..f1b7bc35c9 100644 --- a/ceammc/ext/doc/ui.icon-help.pd +++ b/ceammc/ext/doc/ui.icon-help.pd @@ -287,10 +287,10 @@ information.; #X obj 20 3984 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 4019 @enabled; -#X text 245 4019 Get/Set enabled property. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 4061 @icon; -#X text 245 4061 Get/Set icon name. Type: symbol. Default value: help. +#X text 245 4019 Get/Set enabled property. Type: bool. Default value: +1\.; +#X msg 110 4048 @icon; +#X text 245 4048 Get/Set icon name. Type: symbol. Default value: help. Allowed values: add \, add_circle \, add_circle_outline \, add_to_queue \, alarm \, alarm_off \, alarm_on \, album \, arrow_down \, arrow_left \, arrow_right \, arrow_up \, audio \, backspace \, block \, bluetooth @@ -313,35 +313,36 @@ notifications \, open_with \, pause \, pause_circle_filled \, pause_circle_outli \, stars \, stop \, tape \, timeline \, touch_app \, trending_flat \, undo \, videocam \, visibility \, visibility_off \, volume_down \, volume_mute \, volume_off \, volume_up \, zoom_in \, zoom_out.; -#X msg 110 4450 @icon_size; -#X text 245 4450 Get/Set icons size. Type: int. Default value: 24\. +#X msg 110 4437 @icon_size; +#X text 245 4437 Get/Set icons size. Type: int. Default value: 24\. Allowed values: 18 \, 24 \, 36 \, 48\.; -#X msg 110 4492 @mode; -#X text 245 4492 Get/Set output mode. In bang mode - outputs bang on +#X msg 110 4479 @mode; +#X text 245 4479 Get/Set output mode. In bang mode - outputs bang on mouse down. In button mode outputs 1 on mouse down and 0 on mouse up. In toggle mode outputs 1/0 on mouse down \, like vanilla toggle object. -Type: symbol. Default value: button. Allowed values: bang \, button -\, toggle.; -#X msg 110 4579 @receive; -#X text 245 4579 Get/Set receive source. Type: symbol. Default value: +Type: symbol. Default value: button. Allowed values: toggle \, button +\, bang.; +#X msg 110 4566 @receive; +#X text 245 4566 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 4608 @send; -#X text 245 4608 Get/Set send destination. Type: symbol. Default value: +#X msg 110 4595 @send; +#X text 245 4595 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 4650 @active_color; -#X text 245 4650 Get/Set active color (list of red \, green \, blue +#X msg 110 4637 @active_color; +#X text 245 4637 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 4692 @background_color; -#X text 245 4692 Get/Set element background color (list of red \, green +#X msg 110 4679 @background_color; +#X text 245 4679 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 1 1 1 1\.; -#X msg 110 4734 @border_color; -#X text 245 4734 Get/Set border color (list of red \, green \, blue +#X msg 110 4721 @border_color; +#X text 245 4721 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 1 1 1 1\.; -#X msg 110 4776 @fontname; -#X text 245 4776 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 4763 @fontname; +#X text 245 4763 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Helvetica \, Monaco \, Courier \, Times \, DejaVu.; #X msg 110 4805 @fontsize; #X text 245 4805 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 4847 @fontslant; #X text 245 4847 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -350,65 +351,62 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 4931 @pinned; #X text 245 4931 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 4973 @presetname; #X text 245 4973 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 5015 @size; -#X text 245 5015 Get/Set element size (width \, height pair). Type: -list. Default value: 24 24\.; -#X obj 20 5067 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 5072 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 5025 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 5030 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 5107 clear; -#X text 245 5107 clears specified preset. Arguments are:; -#X obj 255 5130 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 5130 IDX: preset index. Type: int.; -#X msg 110 5155 interp; -#X text 245 5155 for this object acts as *load* \, no interpolation +#X msg 110 5065 clear; +#X text 245 5065 clears specified preset. Arguments are:; +#X obj 255 5088 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 5088 IDX: preset index. Type: int.; +#X msg 110 5113 interp; +#X text 245 5113 for this object acts as *load* \, no interpolation performed.; -#X msg 110 5182 load; -#X text 245 5182 loads specified preset. Arguments are:; -#X obj 255 5205 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 5205 IDX: preset index. Type: int.; -#X msg 110 5230 pos; -#X text 245 5230 set UI element position. Arguments are:; -#X obj 255 5253 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 5253 X: top left x-coord. Type: float.; -#X obj 255 5276 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 5276 Y: top right y-coord. Type: float.; -#X msg 110 5301 set; -#X text 245 5301 sets icon name.; -#X msg 110 5328 store; -#X text 245 5328 stores specified preset. Arguments are:; -#X obj 255 5351 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 5351 IDX: preset index. Type: int.; -#X obj 20 5386 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 5391 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 5140 load; +#X text 245 5140 loads specified preset. Arguments are:; +#X obj 255 5163 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 5163 IDX: preset index. Type: int.; +#X msg 110 5188 pos; +#X text 245 5188 set UI element position. Arguments are:; +#X obj 255 5211 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 5211 X: top left x-coord. Type: float.; +#X obj 255 5234 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 5234 Y: top right y-coord. Type: float.; +#X msg 110 5259 set; +#X text 245 5259 sets icon name.; +#X msg 110 5286 store; +#X text 245 5286 stores specified preset. Arguments are:; +#X obj 255 5309 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 5309 IDX: preset index. Type: int.; +#X obj 20 5344 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 5349 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 5392 1\.; -#X text 245 5392 (hidden inlet!) see @mode property.; -#X obj 20 5422 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 5427 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 5350 1\.; +#X text 245 5350 (hidden inlet!) see @mode property.; +#X obj 20 5380 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 5385 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 5428 1\.; -#X text 245 5428 (hidden outlet!) see @mode property.; +#X text 110 5386 1\.; +#X text 245 5386 (hidden outlet!) see @mode property.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 5478 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 5481 library: ceammc v0.9.4; -#X text 613 5493 see also:; -#X obj 687 5496 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 5436 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 5439 library: ceammc v0.9.6; +#X text 613 5451 see also:; +#X obj 687 5454 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.bang] @url ui.bang-help.pd; -#N canvas 10 5500 400 290 info 0; +#N canvas 10 5458 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.icon; #X text 10 76 category:; @@ -427,7 +425,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 5500 pd info; +#X restore 10 5458 pd info; #X connect 9 0 14 0; #X connect 10 0 14 0; #X connect 11 0 15 0; diff --git a/ceammc/ext/doc/ui.icon.pddoc b/ceammc/ext/doc/ui.icon.pddoc index 527ab3daee..1d24dd4f87 100644 --- a/ceammc/ext/doc/ui.icon.pddoc +++ b/ceammc/ext/doc/ui.icon.pddoc @@ -25,11 +25,11 @@ icon name from list - output + output mode. In bang mode - outputs bang on mouse down. In button mode outputs 1 on mouse down and 0 on mouse up. In toggle mode outputs 1/0 on mouse down, like vanilla toggle object. - enabled property + enabled property icons size send destination receive source - element size (width, height - pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.incdec-help.pd b/ceammc/ext/doc/ui.incdec-help.pd index 594882f321..7d46946b86 100644 --- a/ceammc/ext/doc/ui.incdec-help.pd +++ b/ceammc/ext/doc/ui.incdec-help.pd @@ -45,86 +45,87 @@ in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X text 245 592 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 634 @fontname; -#X text 245 634 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 663 @fontsize; -#X text 245 663 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 705 @fontslant; -#X text 245 705 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 634 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 676 @fontsize; +#X text 245 676 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 718 @fontslant; +#X text 245 718 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 747 @fontweight; -#X text 245 747 Get/Set font weight. Type: symbol. Default value: normal. +#X msg 110 760 @fontweight; +#X text 245 760 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 789 @pinned; -#X text 245 789 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 831 @presetname; -#X text 245 831 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 802 @pinned; +#X text 245 802 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 844 @presetname; +#X text 245 844 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 873 @size; -#X text 245 873 Get/Set element size (width \, height pair). Type: +#X msg 110 886 @size; +#X text 245 886 Get/Set element size (width \, height pair). Type: list. Default value: 15 20\.; -#X obj 20 925 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 930 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 938 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 943 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 965 clear; -#X text 245 965 clears specified preset. Arguments are:; -#X obj 255 988 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 988 IDX: preset index. Type: int.; -#X msg 110 1013 dec; -#X text 245 1013 decrements widget with output.; -#X msg 110 1040 inc; -#X text 245 1040 increments widget with output.; -#X msg 110 1067 interp; -#X text 245 1067 for this object acts as *load* \, no interpolation +#X msg 110 978 clear; +#X text 245 978 clears specified preset. Arguments are:; +#X obj 255 1001 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1001 IDX: preset index. Type: int.; +#X msg 110 1026 dec; +#X text 245 1026 decrements widget with output.; +#X msg 110 1053 inc; +#X text 245 1053 increments widget with output.; +#X msg 110 1080 interp; +#X text 245 1080 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1094 load; -#X text 245 1094 loads specified preset. Arguments are:; -#X obj 255 1117 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1117 IDX: preset index. Type: int.; -#X msg 110 1142 pos; -#X text 245 1142 set UI element position. Arguments are:; -#X obj 255 1165 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1165 X: top left x-coord. Type: float.; -#X obj 255 1188 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1188 Y: top right y-coord. Type: float.; -#X msg 110 1213 set; -#X text 245 1213 set widget value with no output. Arguments are:; -#X obj 255 1236 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1236 VAL: value. Type: float.; -#X msg 110 1261 store; -#X text 245 1261 stores specified preset. Arguments are:; -#X obj 255 1284 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1284 IDX: preset index. Type: int.; -#X obj 20 1319 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1324 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1107 load; +#X text 245 1107 loads specified preset. Arguments are:; +#X obj 255 1130 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1130 IDX: preset index. Type: int.; +#X msg 110 1155 pos; +#X text 245 1155 set UI element position. Arguments are:; +#X obj 255 1178 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1178 X: top left x-coord. Type: float.; +#X obj 255 1201 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1201 Y: top right y-coord. Type: float.; +#X msg 110 1226 set; +#X text 245 1226 set widget value with no output. Arguments are:; +#X obj 255 1249 cnv 1 30 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1249 VAL: value. Type: float.; +#X msg 110 1274 store; +#X text 245 1274 stores specified preset. Arguments are:; +#X obj 255 1297 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1297 IDX: preset index. Type: int.; +#X obj 20 1332 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1337 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1325 1\.; -#X text 150 1325 *bang*; -#X text 245 1325 outputs current widget value.; -#X text 150 1345 *float*; -#X text 245 1345 change widget value and output it.; -#X obj 20 1375 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1380 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1338 1\.; +#X text 150 1338 *bang*; +#X text 245 1338 outputs current widget value.; +#X text 150 1358 *float*; +#X text 245 1358 change widget value and output it.; +#X obj 20 1388 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1393 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1381 1\.; -#X text 245 1381 output value.; +#X text 110 1394 1\.; +#X text 245 1394 output value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1431 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1434 library: ceammc v0.9.4; -#X text 598 1446 see also:; -#X obj 672 1449 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1444 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1447 library: ceammc v0.9.6; +#X text 598 1459 see also:; +#X obj 672 1462 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; -#N canvas 10 1453 400 290 info 0; +#N canvas 10 1466 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.incdec; #X text 10 76 category:; @@ -143,7 +144,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1453 pd info; +#X restore 10 1466 pd info; #X connect 7 0 10 0; #X connect 4 0 12 0; #X connect 5 0 12 0; diff --git a/ceammc/ext/doc/ui.incdec.pddoc b/ceammc/ext/doc/ui.incdec.pddoc index 4ad8868c98..f6ab389afa 100644 --- a/ceammc/ext/doc/ui.incdec.pddoc +++ b/ceammc/ext/doc/ui.incdec.pddoc @@ -26,17 +26,19 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level arrow color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.keyboard-help.pd b/ceammc/ext/doc/ui.keyboard-help.pd index d0f709f3c7..142b0451bb 100644 --- a/ceammc/ext/doc/ui.keyboard-help.pd +++ b/ceammc/ext/doc/ui.keyboard-help.pd @@ -83,68 +83,65 @@ value: 36\. Range: 6\...88\.; #X msg 110 1022 @active_color; #X text 245 1022 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1064 @background_color; -#X text 245 1064 Get/Set element background color (list of red \, green -\, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 -0.93 1\.; -#X msg 110 1121 @border_color; -#X text 245 1121 Get/Set border color (list of red \, green \, blue +#X msg 110 1064 @border_color; +#X text 245 1064 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1163 @fontname; -#X text 245 1163 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1192 @fontsize; -#X text 245 1192 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1234 @fontslant; -#X text 245 1234 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1106 @fontname; +#X text 245 1106 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1148 @fontsize; +#X text 245 1148 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1190 @fontslant; +#X text 245 1190 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1276 @fontweight; -#X text 245 1276 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1232 @fontweight; +#X text 245 1232 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1318 @pinned; -#X text 245 1318 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1360 @size; -#X text 245 1360 Get/Set element size (width \, height pair). Type: +#X msg 110 1274 @pinned; +#X text 245 1274 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1316 @size; +#X text 245 1316 Get/Set element size (width \, height pair). Type: list. Default value: 433 60\.; -#X obj 20 1412 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1417 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1368 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1373 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1452 pos; -#X text 245 1452 set UI element position. Arguments are:; -#X obj 255 1475 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1475 X: top left x-coord. Type: float.; -#X obj 255 1498 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1498 Y: top right y-coord. Type: float.; -#X msg 110 1523 dump; -#X text 245 1523 dumps all object info to Pd console window.; -#X obj 20 1560 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1565 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1408 pos; +#X text 245 1408 set UI element position. Arguments are:; +#X obj 255 1431 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1431 X: top left x-coord. Type: float.; +#X obj 255 1454 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1454 Y: top right y-coord. Type: float.; +#X msg 110 1479 dump; +#X text 245 1479 dumps all object info to Pd console window.; +#X obj 20 1516 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1521 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1566 1\.; -#X text 245 1566 control inlet.; -#X obj 20 1596 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1601 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1522 1\.; +#X text 245 1522 control inlet.; +#X obj 20 1552 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1557 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1602 1\.; -#X text 245 1602 list from two elements: MIDI pitch \, MIDI velocity. +#X text 110 1558 1\.; +#X text 245 1558 list from two elements: MIDI pitch \, MIDI velocity. Velocity depends from key press position.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1667 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1670 library: ceammc v0.9.4; -#X text 598 1682 see also:; -#X obj 672 1685 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1623 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1626 library: ceammc v0.9.6; +#X text 598 1638 see also:; +#X obj 672 1641 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.preset] @url ui.preset-help.pd; -#N canvas 10 1689 400 290 info 0; +#N canvas 10 1645 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.keyboard; #X text 10 76 category:; @@ -163,7 +160,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1689 pd info; +#X restore 10 1645 pd info; #X connect 10 0 11 0; #X connect 11 0 13 0; #X connect 13 0 14 0; diff --git a/ceammc/ext/doc/ui.keyboard.pddoc b/ceammc/ext/doc/ui.keyboard.pddoc index a3c35db880..8c8ba31906 100644 --- a/ceammc/ext/doc/ui.keyboard.pddoc +++ b/ceammc/ext/doc/ui.keyboard.pddoc @@ -56,17 +56,17 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) - element - background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.knob-help.pd b/ceammc/ext/doc/ui.knob-help.pd index 687d0e7dac..ff465adc77 100644 --- a/ceammc/ext/doc/ui.knob-help.pd +++ b/ceammc/ext/doc/ui.knob-help.pd @@ -55,18 +55,18 @@ -49933 0; #X text 110 661 1\.; #X text 150 661 float; -#X obj 246 662 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 661 min: min value. Type: float.; +#X obj 246 662 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 661 MIN: min value. Type: float.; #X text 110 681 2\.; #X text 150 681 float; -#X obj 246 682 cnv 1 31 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 681 max: max value. Type: float.; +#X obj 246 682 cnv 1 32 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 681 MAX: max value. Type: float.; #X obj 20 711 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 716 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 751 @active_scale; -#X text 245 751 Get/Set if should draw active scale. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 751 Get/Set if should draw active scale. Type: bool. Default +value: 0\.; #X msg 110 793 @max; #X text 245 793 Get/Set maximum knob value. Type: float. Default value: 1\.; @@ -75,173 +75,172 @@ value: 0\. Allowed values: 0 \, 1\.; 0\.; #X msg 110 851 @mouse_events; #X text 245 851 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 908 @scale; #X text 245 908 Get/Set scale mode. Linear or logarithmic. Type: symbol. Default value: linear. Allowed values: linear \, log.; #X msg 110 950 @show_range; -#X text 245 950 Get/Set show knob range. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 992 @show_value; -#X text 245 992 Get/Set show value. Type: int. Default value: 0\. Allowed -values: 0 \, 1\.; -#X msg 110 1034 @value; -#X text 245 1034 Get/Set current value. Type: float. Default value: +#X text 245 950 Get/Set show knob range. Type: bool. Default value: 0\.; -#X msg 110 1063 @midi_channel; -#X text 245 1063 Get/Set binded MIDI channel. 0 means listen to all +#X msg 110 979 @show_value; +#X text 245 979 Get/Set show value. Type: bool. Default value: 0\.; +#X msg 110 1008 @value; +#X text 245 1008 Get/Set current value. Type: float. Default value: +0\.; +#X msg 110 1037 @midi_channel; +#X text 245 1037 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; -#X msg 110 1105 @midi_control; -#X text 245 1105 Get/Set binded MIDI controller number. 0 means not -binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; -#X msg 110 1162 @midi_pickup; -#X text 245 1162 Get/Set pickup current value. If slider is binded +#X msg 110 1079 @midi_control; +#X text 245 1079 Get/Set binded MIDI controller number. -1 means not +binded to any controller. Type: int. Default value: -1\. Range: -1\...127\.; +#X msg 110 1136 @midi_pickup; +#X text 245 1136 Get/Set pickup current value. If slider is binded to value \, first time you should pass over this value to make binding. It prevents from sudden value change on first control change. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1234 @background_color; -#X text 245 1234 Get/Set element background color (list of red \, green +bool. Default value: 1\.; +#X msg 110 1208 @background_color; +#X text 245 1208 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1291 @border_color; -#X text 245 1291 Get/Set border color (list of red \, green \, blue +#X msg 110 1265 @border_color; +#X text 245 1265 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1333 @knob_color; -#X text 245 1333 Get/Set knob color (list of red \, green \, blue values +#X msg 110 1307 @knob_color; +#X text 245 1307 Get/Set knob color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1375 @label_color; -#X text 245 1375 Get/Set label color in RGB format within 0-1 range +#X msg 110 1349 @label_color; +#X text 245 1349 Get/Set label color in RGB format within 0-1 range \, for example: 0.2 0.4 0.1\. Type: list. Default value: 0 0 0 1\.; -#X msg 110 1417 @scale_color; -#X text 245 1417 Get/Set scale color (list of red \, green \, blue +#X msg 110 1391 @scale_color; +#X text 245 1391 Get/Set scale color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1459 @label; -#X text 245 1459 Get/Set label text. Type: symbol. Default value: (null).; -#X msg 110 1488 @label_align; -#X text 245 1488 Get/Set label horizontal align. Type: symbol. Default +#X msg 110 1433 @label; +#X text 245 1433 Get/Set label text. Type: symbol. Default value: (null).; +#X msg 110 1462 @label_align; +#X text 245 1462 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1530 @label_inner; -#X text 245 1530 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1572 @label_margins; -#X text 245 1572 Get/Set label offset in pixels. Type: list. Default +#X msg 110 1504 @label_inner; +#X text 245 1504 Get/Set label position (1 - inner \, 0 - outer). Type: +bool. Default value: 0\.; +#X msg 110 1546 @label_margins; +#X text 245 1546 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1614 @label_side; -#X text 245 1614 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1588 @label_side; +#X text 245 1588 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1656 @label_valign; -#X text 245 1656 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1630 @label_valign; +#X text 245 1630 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1698 @fontname; -#X text 245 1698 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1727 @fontsize; -#X text 245 1727 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1769 @fontslant; -#X text 245 1769 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1672 @fontname; +#X text 245 1672 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1714 @fontsize; +#X text 245 1714 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1756 @fontslant; +#X text 245 1756 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1811 @fontweight; -#X text 245 1811 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1798 @fontweight; +#X text 245 1798 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1853 @pinned; -#X text 245 1853 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1895 @presetname; -#X text 245 1895 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1840 @pinned; +#X text 245 1840 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1882 @presetname; +#X text 245 1882 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1937 @receive; -#X text 245 1937 Get/Set receive source. Type: symbol. Default value: +#X msg 110 1924 @receive; +#X text 245 1924 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 1966 @send; -#X text 245 1966 Get/Set send destination. Type: symbol. Default value: +#X msg 110 1953 @send; +#X text 245 1953 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 2008 @size; -#X text 245 2008 Get/Set element size (width \, height pair). Type: +#X msg 110 1995 @size; +#X text 245 1995 Get/Set element size (width \, height pair). Type: list. Default value: 40 40\.; -#X obj 20 2060 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2065 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 2047 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2052 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 2100 interp; -#X text 245 2100 interplolates between presets. Arguments are:; -#X obj 255 2123 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2123 IDX: preset fraction index. Type: float.; -#X msg 110 2148 random; -#X text 245 2148 set knob to random value and output.; -#X msg 110 2175 set; -#X text 245 2175 sets knob value without output. Arguments are:; -#X obj 255 2198 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2198 V: new float value or 'random'. Type: atom.; -#X msg 110 2223 *; -#X text 245 2223 multiply knob value without output. Arguments are:; -#X obj 255 2246 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2246 V: multiplied value. Type: float.; -#X msg 110 2271 +; -#X text 245 2271 add value to knob without output. Arguments are:; -#X obj 255 2294 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2294 V: added value. Type: float.; -#X msg 110 2319 ++; -#X text 245 2319 increment knob value without output.; -#X msg 110 2346 -; -#X text 245 2346 subtract value from knob without output. Arguments +#X msg 110 2087 interp; +#X text 245 2087 interplolates between presets. Arguments are:; +#X obj 255 2110 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2110 IDX: preset fraction index. Type: float.; +#X msg 110 2135 random; +#X text 245 2135 set knob to random value and output.; +#X msg 110 2162 set; +#X text 245 2162 sets knob value without output. Arguments are:; +#X obj 255 2185 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2185 V: new float value or 'random'. Type: atom.; +#X msg 110 2210 *; +#X text 245 2210 multiply knob value without output. Arguments are:; +#X obj 255 2233 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2233 V: multiplied value. Type: float.; +#X msg 110 2258 +; +#X text 245 2258 add value to knob without output. Arguments are:; +#X obj 255 2281 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2281 V: added value. Type: float.; +#X msg 110 2306 ++; +#X text 245 2306 increment knob value without output.; +#X msg 110 2333 -; +#X text 245 2333 subtract value from knob without output. Arguments are:; -#X obj 255 2369 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2369 V: subtracted value. Type: float.; -#X msg 110 2394 --; -#X text 245 2394 decrement knob value without output.; -#X msg 110 2421 /; -#X text 245 2421 divide knob value without output. Arguments are:; -#X obj 255 2444 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2444 V: denominator value. Type: float.; -#X msg 110 2469 clear; -#X text 245 2469 clears specified preset. Arguments are:; -#X obj 255 2492 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2492 IDX: preset index. Type: int.; -#X msg 110 2517 load; -#X text 245 2517 loads specified preset. Arguments are:; -#X obj 255 2540 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2540 IDX: preset index. Type: int.; -#X msg 110 2565 store; -#X text 245 2565 stores specified preset. Arguments are:; -#X obj 255 2588 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2588 IDX: preset index. Type: int.; -#X msg 110 2613 pos; -#X text 245 2613 set UI element position. Arguments are:; -#X obj 255 2636 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2636 X: top left x-coord. Type: float.; -#X obj 255 2659 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2659 Y: top right y-coord. Type: float.; -#X msg 110 2684 dump; -#X text 245 2684 dumps all object info to Pd console window.; -#X obj 20 2721 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2726 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2356 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2356 V: subtracted value. Type: float.; +#X msg 110 2381 --; +#X text 245 2381 decrement knob value without output.; +#X msg 110 2408 /; +#X text 245 2408 divide knob value without output. Arguments are:; +#X obj 255 2431 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2431 V: denominator value. Type: float.; +#X msg 110 2456 clear; +#X text 245 2456 clears specified preset. Arguments are:; +#X obj 255 2479 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2479 IDX: preset index. Type: int.; +#X msg 110 2504 load; +#X text 245 2504 loads specified preset. Arguments are:; +#X obj 255 2527 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2527 IDX: preset index. Type: int.; +#X msg 110 2552 store; +#X text 245 2552 stores specified preset. Arguments are:; +#X obj 255 2575 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2575 IDX: preset index. Type: int.; +#X msg 110 2600 pos; +#X text 245 2600 set UI element position. Arguments are:; +#X obj 255 2623 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2623 X: top left x-coord. Type: float.; +#X obj 255 2646 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2646 Y: top right y-coord. Type: float.; +#X msg 110 2671 dump; +#X text 245 2671 dumps all object info to Pd console window.; +#X obj 20 2708 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2713 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2727 1\.; -#X text 150 2727 *bang*; -#X text 245 2727 outputs knob value.; -#X text 150 2747 *float*; -#X text 245 2747 sets knob value and output it.; -#X obj 20 2777 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2782 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2714 1\.; +#X text 150 2714 *bang*; +#X text 245 2714 outputs knob value.; +#X text 150 2734 *float*; +#X text 245 2734 sets knob value and output it.; +#X obj 20 2764 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2769 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2783 1\.; -#X text 245 2783 knob output.; +#X text 110 2770 1\.; +#X text 245 2770 knob output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2833 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2836 library: ceammc v0.9.4; -#X text 598 2848 see also:; -#X obj 672 2851 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2820 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2823 library: ceammc v0.9.6; +#X text 598 2835 see also:; +#X obj 672 2838 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#N canvas 10 2855 400 290 info 0; +#N canvas 10 2842 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.knob; #X text 10 76 category:; @@ -260,7 +259,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2855 pd info; +#X restore 10 2842 pd info; #X connect 7 0 8 0; #X connect 8 0 15 0; #X connect 9 0 15 0; diff --git a/ceammc/ext/doc/ui.knob.pddoc b/ceammc/ext/doc/ui.knob.pddoc index f2783c09b6..05f8613917 100644 --- a/ceammc/ext/doc/ui.knob.pddoc +++ b/ceammc/ext/doc/ui.knob.pddoc @@ -24,8 +24,8 @@ Simple knob widget with default range 0-1. - min value - max value + min value + max value change the knob value (with ⇧ change @@ -50,17 +50,16 @@ maximum knob value binded MIDI channel. 0 means listen to all channels - - binded MIDI controller number. 0 means not binded to any controller. - pickup current value. - If slider is binded to value, first time you should pass over this value to make - binding. It prevents from sudden value change on first control change - if should draw active + + binded MIDI controller number. -1 means not binded to any controller. + pickup current value. If slider + is binded to value, first time you should pass over this value to make binding. It + prevents from sudden value change on first control change + if should draw active scale current value - show knob - range - show value + show knob range + show value scale mode. Linear or logarithmic. @@ -72,10 +71,10 @@ source element size (width, height pair) - pin mode. - if 1 - put element to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put + element to the lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) @@ -85,9 +84,11 @@ 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -96,8 +97,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.label-help.pd b/ceammc/ext/doc/ui.label-help.pd index 30957bc3fe..9eb578341a 100644 --- a/ceammc/ext/doc/ui.label-help.pd +++ b/ceammc/ext/doc/ui.label-help.pd @@ -52,71 +52,72 @@ Allowed values: left \, center \, right.; #X text 245 750 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; #X msg 110 792 @fontname; -#X text 245 792 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 821 @fontsize; -#X text 245 821 Get/Set fontsize. Type: int. Default value: 32\. Min -value: 4\.; -#X msg 110 863 @fontslant; -#X text 245 863 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 792 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 834 @fontsize; +#X text 245 834 Get/Set fontsize. Type: int. Default value: 32\. Range: +4\...100\.; +#X msg 110 876 @fontslant; +#X text 245 876 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 905 @fontweight; -#X text 245 905 Get/Set font weight. Type: symbol. Default value: normal. +#X msg 110 918 @fontweight; +#X text 245 918 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 947 @pinned; -#X text 245 947 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 989 @size; -#X text 245 989 Get/Set element size (width \, height pair). Type: +#X msg 110 960 @pinned; +#X text 245 960 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 1\.; +#X msg 110 1002 @size; +#X text 245 1002 Get/Set element size (width \, height pair). Type: list. Default value: 300 47\.; -#X obj 20 1041 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1046 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1054 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1059 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1081 any; -#X text 245 1081 set label text to given message separated by spaces +#X msg 110 1094 any; +#X text 245 1094 set label text to given message separated by spaces \, but do not change @text property.; -#X msg 110 1121 append; -#X text 245 1121 appends to @text end.; -#X msg 110 1148 clear; -#X text 245 1148 clear label text and clear @text property.; -#X msg 110 1175 float; -#X text 245 1175 set label text to given float \, but do not change +#X msg 110 1134 append; +#X text 245 1134 appends to @text end.; +#X msg 110 1161 clear; +#X text 245 1161 clear label text and clear @text property.; +#X msg 110 1188 float; +#X text 245 1188 set label text to given float \, but do not change @text property.; -#X msg 110 1215 list; -#X text 245 1215 set label text to given list separated by spaces \, +#X msg 110 1228 list; +#X text 245 1228 set label text to given list separated by spaces \, but do not change @text property.; -#X msg 110 1255 pos; -#X text 245 1255 set UI element position. Arguments are:; -#X obj 255 1278 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1278 X: top left x-coord. Type: float.; -#X obj 255 1301 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1301 Y: top right y-coord. Type: float.; -#X msg 110 1326 prepend; -#X text 245 1326 insert into beginning of @text.; -#X msg 110 1353 set; -#X text 245 1353 set label text and update @text property \, so it +#X msg 110 1268 pos; +#X text 245 1268 set UI element position. Arguments are:; +#X obj 255 1291 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1291 X: top left x-coord. Type: float.; +#X obj 255 1314 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1314 Y: top right y-coord. Type: float.; +#X msg 110 1339 prepend; +#X text 245 1339 insert into beginning of @text.; +#X msg 110 1366 set; +#X text 245 1366 set label text and update @text property \, so it would be saved in patch.; -#X msg 110 1393 symbol; -#X text 245 1393 set label text to given symbol \, but do not change +#X msg 110 1406 symbol; +#X text 245 1406 set label text to given symbol \, but do not change @text property.; -#X obj 20 1443 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1448 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1456 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1461 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X obj 20 1469 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1474 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1482 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1487 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1515 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1518 library: ceammc v0.9.4; -#N canvas 10 1537 400 290 info 0; +#X obj 1 1528 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1531 library: ceammc v0.9.6; +#N canvas 10 1550 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.label; #X text 10 76 category:; @@ -135,7 +136,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1537 pd info; +#X restore 10 1550 pd info; #X connect 10 0 16 0; #X connect 11 0 16 0; #X connect 12 0 16 0; diff --git a/ceammc/ext/doc/ui.label.pddoc b/ceammc/ext/doc/ui.label.pddoc index 46d455f5a7..90542a363d 100644 --- a/ceammc/ext/doc/ui.label.pddoc +++ b/ceammc/ext/doc/ui.label.pddoc @@ -28,14 +28,16 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level text color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) - fontsize - fontname + + fontsize + fontname font weight font diff --git a/ceammc/ext/doc/ui.link-help.pd b/ceammc/ext/doc/ui.link-help.pd index f19b254ed3..952415cf53 100644 --- a/ceammc/ext/doc/ui.link-help.pd +++ b/ceammc/ext/doc/ui.link-help.pd @@ -42,31 +42,43 @@ of red \, green \, blue values in 0-1 range). Type: list. Default value: #X msg 110 589 @link_color; #X text 245 589 Get/Set link color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.625 0.75 1\.; -#X msg 110 631 @pinned; -#X text 245 631 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X obj 20 683 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 688 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X msg 110 631 @fontname; +#X text 245 631 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 673 @fontsize; +#X text 245 673 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 715 @fontslant; +#X text 245 715 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 757 @fontweight; +#X text 245 757 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 799 @pinned; +#X text 245 799 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X obj 20 851 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 856 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 723 pos; -#X text 245 723 set UI element position. Arguments are:; -#X obj 255 746 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 746 X: top left x-coord. Type: float.; -#X obj 255 769 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 769 Y: top right y-coord. Type: float.; +#X msg 110 891 pos; +#X text 245 891 set UI element position. Arguments are:; +#X obj 255 914 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 914 X: top left x-coord. Type: float.; +#X obj 255 937 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 937 Y: top right y-coord. Type: float.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 824 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 827 library: ceammc v0.9.4; -#N canvas 10 846 400 290 info 0; +#X obj 1 992 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 995 library: ceammc v0.9.6; +#N canvas 10 1014 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.link; #X text 10 76 category:; @@ -85,4 +97,4 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 846 pd info; \ No newline at end of file +#X restore 10 1014 pd info; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.link.pddoc b/ceammc/ext/doc/ui.link.pddoc index 862f4cc181..973969935a 100644 --- a/ceammc/ext/doc/ui.link.pddoc +++ b/ceammc/ext/doc/ui.link.pddoc @@ -32,12 +32,21 @@ destination url link title - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level color when mouse pointer is over element (list of red, green, blue values in 0-1 range) link color (list of red, green, blue values in 0-1 range) + + + fontsize + fontname + font + weight + font + slant diff --git a/ceammc/ext/doc/ui.matrix-help.pd b/ceammc/ext/doc/ui.matrix-help.pd index 10dfb67004..1294425167 100644 --- a/ceammc/ext/doc/ui.matrix-help.pd +++ b/ceammc/ext/doc/ui.matrix-help.pd @@ -46,11 +46,11 @@ value: 8\. Range: 1\...64\.; #X msg 110 692 @current_col; #X text 245 692 Get/Set current column index. -1 if not specified. This property is not saved in patch. Type: int. Default value: -1\. -Min value: 0\.; +Min value: -1\.; #X msg 110 749 @current_row; #X text 245 749 Get/Set current row index. -1 if not specified. This property is not saved in patch. Type: int. Default value: -1\. Min -value: 0\.; +value: -1\.; #X msg 110 806 @receive; #X text 245 806 Get/Set receive source. Type: symbol. Default value: (null).; @@ -74,161 +74,162 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X text 245 1060 Get/Set current col/row color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 1 0.75 0 1\.; #X msg 110 1102 @fontname; -#X text 245 1102 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1131 @fontsize; -#X text 245 1131 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1173 @fontslant; -#X text 245 1173 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 1102 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1144 @fontsize; +#X text 245 1144 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1186 @fontslant; +#X text 245 1186 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1215 @fontweight; -#X text 245 1215 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1228 @fontweight; +#X text 245 1228 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1257 @pinned; -#X text 245 1257 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1299 @presetname; -#X text 245 1299 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1270 @pinned; +#X text 245 1270 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1312 @presetname; +#X text 245 1312 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1341 @size; -#X text 245 1341 Get/Set element size (width \, height pair). Type: +#X msg 110 1354 @size; +#X text 245 1354 Get/Set element size (width \, height pair). Type: list. Default value: 105 53\.; -#X obj 20 1393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1398 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1406 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1411 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1433 clear; -#X text 245 1433 clears specified preset. Arguments are:; -#X obj 255 1456 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1456 IDX: preset index. Type: int.; -#X msg 110 1481 flip; -#X text 245 1481 flips all matrix cells.; -#X msg 110 1508 flip R C; -#X text 245 1508 flips single cell. Arguments are:; -#X obj 255 1531 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1531 R: row index. Type: int. Min value: 0\.; -#X obj 255 1554 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1554 C: column index. Type: int. Min value: 0\.; -#X msg 110 1579 flip col N; -#X text 245 1579 flips cells in specified column. Arguments are:; -#X obj 255 1602 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1602 N: column index. Type: int. Min value: 0\.; -#X msg 110 1627 flip row N; -#X text 245 1627 flips cells in specified row. Arguments are:; -#X obj 255 1650 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1650 N: row index. Type: int. Min value: 0\.; -#X msg 110 1675 get cell R C; -#X text 245 1675 outputs single cell value as message [cell ROW COL +#X msg 110 1446 clear; +#X text 245 1446 clears specified preset. Arguments are:; +#X obj 255 1469 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1469 IDX: preset index. Type: int.; +#X msg 110 1494 flip; +#X text 245 1494 flips all matrix cells.; +#X msg 110 1521 flip R C; +#X text 245 1521 flips single cell. Arguments are:; +#X obj 255 1544 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1544 R: row index. Type: int. Min value: 0\.; +#X obj 255 1567 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1567 C: column index. Type: int. Min value: 0\.; +#X msg 110 1592 flip col N; +#X text 245 1592 flips cells in specified column. Arguments are:; +#X obj 255 1615 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1615 N: column index. Type: int. Min value: 0\.; +#X msg 110 1640 flip row N; +#X text 245 1640 flips cells in specified row. Arguments are:; +#X obj 255 1663 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1663 N: row index. Type: int. Min value: 0\.; +#X msg 110 1688 get cell R C; +#X text 245 1688 outputs single cell value as message [cell ROW COL VALUE(. Arguments are:; -#X obj 255 1713 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1713 R: row index. Type: int. Min value: 0\.; -#X obj 255 1736 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1736 C: column index. Type: int. Min value: 0\.; -#X msg 110 1761 get cells; -#X text 245 1761 output all cells as separate messages [cell R C VALUE(.; -#X msg 110 1788 get col N; -#X text 245 1788 outputs column cells as message [col N V0 V1\...(. +#X obj 255 1726 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1726 R: row index. Type: int. Min value: 0\.; +#X obj 255 1749 cnv 1 13 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1749 C: column index. Type: int. Min value: 0\.; +#X msg 110 1774 get cells; +#X text 245 1774 output all cells as separate messages [cell R C VALUE(.; +#X msg 110 1801 get col N; +#X text 245 1801 outputs column cells as message [col N V0 V1\...(. Arguments are:; -#X obj 255 1826 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1826 N: column index. Type: int. Min value: 0\.; -#X msg 110 1851 get cols; -#X text 245 1851 output all columns as separate messages [col N V0 +#X obj 255 1839 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1839 N: column index. Type: int. Min value: 0\.; +#X msg 110 1864 get cols; +#X text 245 1864 output all columns as separate messages [col N V0 V1\...(.; -#X msg 110 1878 get list; -#X text 245 1878 output all cell values as list \, row by raw. [0 1 +#X msg 110 1891 get list; +#X text 245 1891 output all cell values as list \, row by raw. [0 1 1 1 0\...(.; -#X msg 110 1905 get row N; -#X text 245 1905 outputs row cells as message [row N V0 V1\...(. Arguments +#X msg 110 1918 get row N; +#X text 245 1918 outputs row cells as message [row N V0 V1\...(. Arguments are:; -#X obj 255 1943 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1943 N: row index. Type: int. Min value: 0\.; -#X msg 110 1968 get rows; -#X text 245 1968 output all rows as separate messages [row N V0 V1\...(.; -#X msg 110 1995 interp; -#X text 245 1995 for this object acts as *load* \, no interpolation +#X obj 255 1956 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1956 N: row index. Type: int. Min value: 0\.; +#X msg 110 1981 get rows; +#X text 245 1981 output all rows as separate messages [row N V0 V1\...(.; +#X msg 110 2008 interp; +#X text 245 2008 for this object acts as *load* \, no interpolation performed.; -#X msg 110 2022 load; -#X text 245 2022 loads specified preset. Arguments are:; -#X obj 255 2045 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2045 IDX: preset index. Type: int.; -#X msg 110 2070 pos; -#X text 245 2070 set UI element position. Arguments are:; -#X obj 255 2093 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2093 X: top left x-coord. Type: float.; -#X obj 255 2116 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2116 Y: top right y-coord. Type: float.; -#X msg 110 2141 random; -#X text 245 2141 fill matrix random and output.; -#X msg 110 2168 read; -#X text 245 2168 Arguments are:; -#X obj 255 2191 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2191 [FNAME]: read matrix values from text file (space +#X msg 110 2035 load; +#X text 245 2035 loads specified preset. Arguments are:; +#X obj 255 2058 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2058 IDX: preset index. Type: int.; +#X msg 110 2083 pos; +#X text 245 2083 set UI element position. Arguments are:; +#X obj 255 2106 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2106 X: top left x-coord. Type: float.; +#X obj 255 2129 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2129 Y: top right y-coord. Type: float.; +#X msg 110 2154 random; +#X text 245 2154 fill matrix random and output.; +#X msg 110 2181 read; +#X text 245 2181 Arguments are:; +#X obj 255 2204 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2204 [FNAME]: read matrix values from text file (space separated). If fname argument is not specified opens file chooser dialog. Type: symbol.; -#X msg 110 2246 reset; -#X text 245 2246 uncheck all matrix cells. No output.; -#X msg 110 2273 set col N ...; -#X text 245 2273 set specified column without output. Arguments are:; -#X obj 255 2296 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2296 N: column index. Type: int. Min value: 0\.; -#X obj 255 2319 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2319 ...: cell values (1 - checked \, 0 - unchecked). Type: +#X msg 110 2259 reset; +#X text 245 2259 uncheck all matrix cells. No output.; +#X msg 110 2286 set col N ...; +#X text 245 2286 set specified column without output. Arguments are:; +#X obj 255 2309 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2309 N: column index. Type: int. Min value: 0\.; +#X obj 255 2332 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2332 ...: cell values (1 - checked \, 0 - unchecked). Type: list.; -#X msg 110 2344 set list ...; -#X text 245 2344 set matrix without output. Arguments are:; -#X obj 255 2367 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2367 ...: cell values (1 - checked \, 0 - unchecked) \, +#X msg 110 2357 set list ...; +#X text 245 2357 set matrix without output. Arguments are:; +#X obj 255 2380 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2380 ...: cell values (1 - checked \, 0 - unchecked) \, row by row. Type: list.; -#X msg 110 2407 set row N ...; -#X text 245 2407 set specified row without output. Arguments are:; -#X obj 255 2430 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2430 N: row index. Type: int. Min value: 0\.; -#X obj 255 2453 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2453 ...: cell values (1 - checked \, 0 - unchecked). Type: +#X msg 110 2420 set row N ...; +#X text 245 2420 set specified row without output. Arguments are:; +#X obj 255 2443 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2443 N: row index. Type: int. Min value: 0\.; +#X obj 255 2466 cnv 1 25 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2466 ...: cell values (1 - checked \, 0 - unchecked). Type: list.; -#X msg 110 2478 store; -#X text 245 2478 stores specified preset. Arguments are:; -#X obj 255 2501 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2501 IDX: preset index. Type: int.; -#X msg 110 2526 write; -#X text 245 2526 Arguments are:; -#X obj 255 2549 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2549 [FNAME]: write matrix values to text file (space separated). +#X msg 110 2491 store; +#X text 245 2491 stores specified preset. Arguments are:; +#X obj 255 2514 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2514 IDX: preset index. Type: int.; +#X msg 110 2539 write; +#X text 245 2539 Arguments are:; +#X obj 255 2562 cnv 1 54 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2562 [FNAME]: write matrix values to text file (space separated). If fname argument is not specified opens file chooser dialog. Type: symbol.; -#X msg 110 2604 dump; -#X text 245 2604 dumps all object info to Pd console window.; -#X obj 20 2641 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2646 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 2617 dump; +#X text 245 2617 dumps all object info to Pd console window.; +#X obj 20 2654 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2659 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2647 1\.; -#X text 150 2647 *bang*; -#X text 245 2647 output all cells. Same as [get cells(.; -#X text 150 2667 *list*; -#X text 245 2667 sets matrix state. Input format: 0 and 1 \, row by +#X text 110 2660 1\.; +#X text 150 2660 *bang*; +#X text 245 2660 output all cells. Same as [get cells(.; +#X text 150 2680 *list*; +#X text 245 2680 sets matrix state. Input format: 0 and 1 \, row by row.; -#X obj 20 2697 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2702 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 2710 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2715 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2703 1\.; -#X text 245 2703 output.; +#X text 110 2716 1\.; +#X text 245 2716 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2753 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2756 library: ceammc v0.9.4; -#X text 523 2768 see also:; -#X obj 597 2771 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2766 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2769 library: ceammc v0.9.6; +#X text 523 2781 see also:; +#X obj 597 2784 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.radio] @url ui.radio-help.pd; -#X obj 672 2771 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 672 2784 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.toggle] @url ui.toggle-help.pd; -#N canvas 10 2775 400 290 info 0; +#N canvas 10 2788 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.matrix; #X text 10 76 category:; @@ -247,7 +248,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2775 pd info; +#X restore 10 2788 pd info; #X connect 7 0 10 0; #X connect 8 0 11 0; #X connect 9 0 16 0; diff --git a/ceammc/ext/doc/ui.matrix.pddoc b/ceammc/ext/doc/ui.matrix.pddoc index 4ee581e03c..67a67ec9d7 100644 --- a/ceammc/ext/doc/ui.matrix.pddoc +++ b/ceammc/ext/doc/ui.matrix.pddoc @@ -32,9 +32,9 @@ matrix rows number of matrix columns - current row index. + current row index. -1 if not specified. This property is not saved in patch - current column + current column index. -1 if not specified. This property is not saved in patch preset name for using with @@ -43,8 +43,8 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) current col/row color @@ -53,9 +53,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.menu-help.pd b/ceammc/ext/doc/ui.menu-help.pd index 2947b7d8b7..06de6dd957 100644 --- a/ceammc/ext/doc/ui.menu-help.pd +++ b/ceammc/ext/doc/ui.menu-help.pd @@ -28,43 +28,43 @@ value: 0\.; #X msg 110 537 @index; #X text 245 537 Get/Set current menu item index. Type: int. Default -value: 0\.; +value: -1\.; #X msg 110 579 @items; #X text 245 579 Get/Set list of menu items. Type: list.; #X msg 110 608 @max_length; #X text 245 608 Get/Set maximum displayed item character length. Type: int. Default value: 100\. Range: 10\...1024\.; #X msg 110 650 @open; -#X text 245 650 Get/Set opened state. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 692 @receive; -#X text 245 692 Get/Set receive source. Type: symbol. Default value: +#X text 245 650 Get/Set opened state. Type: bool. Default value: 0\.; +#X msg 110 679 @receive; +#X text 245 679 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 721 @send; -#X text 245 721 Get/Set send destination. Type: symbol. Default value: +#X msg 110 708 @send; +#X text 245 708 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 763 @title; -#X text 245 763 (readonly) Get current element text. Type: symbol.; -#X msg 110 792 @value; -#X text 245 792 Get/Set current menu item value. Type: atom.; -#X msg 110 821 @active_color; -#X text 245 821 Get/Set active color (list of red \, green \, blue +#X msg 110 750 @title; +#X text 245 750 (readonly) Get current element text. Type: symbol.; +#X msg 110 779 @value; +#X text 245 779 Get/Set current menu item value. Type: atom.; +#X msg 110 808 @active_color; +#X text 245 808 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 863 @background_color; -#X text 245 863 Get/Set element background color (list of red \, green +#X msg 110 850 @background_color; +#X text 245 850 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 920 @border_color; -#X text 245 920 Get/Set border color (list of red \, green \, blue +#X msg 110 907 @border_color; +#X text 245 907 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 962 @text_color; -#X text 245 962 Get/Set text color (list of red \, green \, blue values +#X msg 110 949 @text_color; +#X text 245 949 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 1004 @fontname; -#X text 245 1004 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 991 @fontname; +#X text 245 991 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 1033 @fontsize; #X text 245 1033 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 1075 @fontslant; #X text 245 1075 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -73,7 +73,7 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 1159 @pinned; #X text 245 1159 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 1201 @presetname; #X text 245 1201 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; @@ -158,7 +158,7 @@ ITEM_NAME.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 2115 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2118 library: ceammc v0.9.4; +#X text 10 2118 library: ceammc v0.9.6; #X text 606 2130 see also:; #X obj 680 2133 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.radio] @url ui.radio-help.pd; @@ -167,7 +167,7 @@ ITEM_NAME.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.menu; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.menu.pddoc b/ceammc/ext/doc/ui.menu.pddoc index 8d09f60b7b..58f04869eb 100644 --- a/ceammc/ext/doc/ui.menu.pddoc +++ b/ceammc/ext/doc/ui.menu.pddoc @@ -19,14 +19,14 @@ list of menu items - current menu item index + current menu item index current menu item value - number of menu + number of menu items maximum displayed item character length - opened state - current element text + opened state + current element text preset name for using with [ui.preset] @@ -34,8 +34,8 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -44,9 +44,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.meter~-help.pd b/ceammc/ext/doc/ui.meter~-help.pd index 4e2af9374a..11611f973a 100644 --- a/ceammc/ext/doc/ui.meter~-help.pd +++ b/ceammc/ext/doc/ui.meter~-help.pd @@ -65,48 +65,55 @@ red \, green \, blue values in 0-1 range). Type: list. Default value: \, green \, blue values in 0-1 range). Type: list. Default value: 0.85 0.85 0 1\.; #X msg 110 1010 @fontname; -#X text 245 1010 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1039 @fontsize; -#X text 245 1039 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1081 @pinned; -#X text 245 1081 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1123 @size; -#X text 245 1123 Get/Set element size (width \, height pair). Type: +#X text 245 1010 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1052 @fontsize; +#X text 245 1052 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1094 @fontslant; +#X text 245 1094 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 1136 @fontweight; +#X text 245 1136 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1178 @pinned; +#X text 245 1178 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1220 @size; +#X text 245 1220 Get/Set element size (width \, height pair). Type: list. Default value: 15 120\.; -#X obj 20 1175 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1180 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1272 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1277 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1215 pos; -#X text 245 1215 set UI element position. Arguments are:; -#X obj 255 1238 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1238 X: top left x-coord. Type: float.; -#X obj 255 1261 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1261 Y: top right y-coord. Type: float.; -#X obj 20 1296 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1301 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1312 pos; +#X text 245 1312 set UI element position. Arguments are:; +#X obj 255 1335 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1335 X: top left x-coord. Type: float.; +#X obj 255 1358 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1358 Y: top right y-coord. Type: float.; +#X obj 20 1393 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1398 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1302 1\.; -#X text 245 1302 input signal.; -#X obj 20 1332 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1337 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1399 1\.; +#X text 245 1399 input signal.; +#X obj 20 1429 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1434 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1338 1\.; -#X text 245 1338 output pair of values: rms and peak in decibels (dbfs).; +#X text 110 1435 1\.; +#X text 245 1435 output pair of values: rms and peak in decibels (dbfs).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1388 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1391 library: ceammc v0.9.4; -#N canvas 10 1410 400 290 info 0; +#X obj 1 1485 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1488 library: ceammc v0.9.6; +#N canvas 10 1507 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.meter~; #X text 10 76 category:; @@ -125,7 +132,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1410 pd info; +#X restore 10 1507 pd info; #X connect 12 0 13 0; #X connect 13 0 14 0; #X connect 11 0 15 0; diff --git a/ceammc/ext/doc/ui.meter~.pddoc b/ceammc/ext/doc/ui.meter~.pddoc index 7b59ee2095..9182b5e73c 100644 --- a/ceammc/ext/doc/ui.meter~.pddoc +++ b/ceammc/ext/doc/ui.meter~.pddoc @@ -39,8 +39,8 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level extra low-level signal color <-31db (list of red, green, blue values in 0-1 range) low-level signal color @@ -55,9 +55,15 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname + font + weight + font + slant diff --git a/ceammc/ext/doc/ui.midi-help.pd b/ceammc/ext/doc/ui.midi-help.pd index 1a3cbfdc93..238fe65cbf 100644 --- a/ceammc/ext/doc/ui.midi-help.pd +++ b/ceammc/ext/doc/ui.midi-help.pd @@ -27,83 +27,95 @@ #X obj 20 351 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 386 @cc; -#X text 245 386 Get/Set if show control change events. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 386 Get/Set if show control change events. Type: bool. +Default value: 1\.; #X msg 110 428 @hex; -#X text 245 428 Get/Set if show values in hex. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 470 @notes; -#X text 245 470 Get/Set if show note on/off events. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 512 @pitchwheel; -#X text 245 512 Get/Set if show pitch wheel events. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 554 @program; -#X text 245 554 Get/Set if show program change events. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 596 @receive; -#X text 245 596 Get/Set receive source. Type: symbol. Default value: +#X text 245 428 Get/Set if show values in hex. Type: bool. Default +value: 0\.; +#X msg 110 457 @notes; +#X text 245 457 Get/Set if show note on/off events. Type: bool. Default +value: 1\.; +#X msg 110 499 @pitchwheel; +#X text 245 499 Get/Set if show pitch wheel events. Type: bool. Default +value: 1\.; +#X msg 110 541 @program; +#X text 245 541 Get/Set if show program change events. Type: bool. +Default value: 1\.; +#X msg 110 583 @receive; +#X text 245 583 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 625 @send; -#X text 245 625 Get/Set send destination. Type: symbol. Default value: +#X msg 110 612 @send; +#X text 245 612 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 667 @sysex; -#X text 245 667 Get/Set if show sysex events. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 709 @touch; -#X text 245 709 Get/Set if show aftertouch (poly) events. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 751 @active_color; -#X text 245 751 Get/Set active color (list of red \, green \, blue +#X msg 110 654 @sysex; +#X text 245 654 Get/Set if show sysex events. Type: bool. Default value: +1\.; +#X msg 110 683 @touch; +#X text 245 683 Get/Set if show aftertouch (poly) events. Type: bool. +Default value: 1\.; +#X msg 110 725 @active_color; +#X text 245 725 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.63 0.88 0 1\.; -#X msg 110 793 @background_color; -#X text 245 793 Get/Set element background color (list of red \, green +#X msg 110 767 @background_color; +#X text 245 767 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 850 @border_color; -#X text 245 850 Get/Set border color (list of red \, green \, blue +#X msg 110 824 @border_color; +#X text 245 824 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 892 @text_color; -#X text 245 892 Get/Set text color (list of red \, green \, blue values +#X msg 110 866 @text_color; +#X text 245 866 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 934 @pinned; -#X text 245 934 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 976 @size; -#X text 245 976 Get/Set element size (width \, height pair). Type: +#X msg 110 908 @fontname; +#X text 245 908 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 950 @fontsize; +#X text 245 950 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 992 @fontslant; +#X text 245 992 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 1034 @fontweight; +#X text 245 1034 Get/Set font weight. Type: symbol. Default value: +normal. Allowed values: normal \, bold.; +#X msg 110 1076 @pinned; +#X text 245 1076 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1118 @size; +#X text 245 1118 Get/Set element size (width \, height pair). Type: list. Default value: 180 15\.; -#X obj 20 1028 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1033 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1170 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1175 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1068 pos; -#X text 245 1068 set UI element position. Arguments are:; -#X obj 255 1091 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1091 X: top left x-coord. Type: float.; -#X obj 255 1114 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1114 Y: top right y-coord. Type: float.; -#X obj 20 1149 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1154 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1210 pos; +#X text 245 1210 set UI element position. Arguments are:; +#X obj 255 1233 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1233 X: top left x-coord. Type: float.; +#X obj 255 1256 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1256 Y: top right y-coord. Type: float.; +#X obj 20 1291 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1296 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1155 1\.; -#X text 245 1155 control input.; -#X obj 20 1185 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1190 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1297 1\.; +#X text 245 1297 control input.; +#X obj 20 1327 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1332 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1191 1\.; -#X text 245 1191 MIDI output.; +#X text 110 1333 1\.; +#X text 245 1333 MIDI output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1241 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1244 library: ceammc v0.9.4; -#N canvas 10 1263 400 290 info 0; +#X obj 1 1383 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1386 library: ceammc v0.9.6; +#N canvas 10 1405 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.midi; #X text 10 76 category:; @@ -122,5 +134,5 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1263 pd info; +#X restore 10 1405 pd info; #X connect 4 0 5 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.midi.pddoc b/ceammc/ext/doc/ui.midi.pddoc index b1f5a6547d..cf465a8227 100644 --- a/ceammc/ext/doc/ui.midi.pddoc +++ b/ceammc/ext/doc/ui.midi.pddoc @@ -23,27 +23,23 @@ open properties dialog - if show values in - hex - if show note on/off + if show values in hex + if show note on/off events + if show control change events + if show program change events - if show control change + if show aftertouch (poly) events - if show program change - events - if show aftertouch (poly) - events - if show pitch wheel - events - if show sysex + if show pitch wheel events + if show sysex events send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -52,6 +48,15 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) + + + fontsize + fontname + font + weight + font + slant diff --git a/ceammc/ext/doc/ui.mouse_filter-help.pd b/ceammc/ext/doc/ui.mouse_filter-help.pd index 0a37a8bd37..2ba7b6fca3 100644 --- a/ceammc/ext/doc/ui.mouse_filter-help.pd +++ b/ceammc/ext/doc/ui.mouse_filter-help.pd @@ -29,23 +29,23 @@ #X msg 110 463 @leave; #X text 245 463 alias to @mouse_leave 1 property. Default value: 0\.; #X msg 110 492 @mouse_down; -#X text 245 492 Get/Set passing a @mouse_down events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 492 Get/Set passing a @mouse_down events. Type: bool. Default +value: 0\.; #X msg 110 534 @mouse_drag; -#X text 245 534 Get/Set passing a @mouse_drag events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 534 Get/Set passing a @mouse_drag events. Type: bool. Default +value: 0\.; #X msg 110 576 @mouse_enter; -#X text 245 576 Get/Set passing a @mouse_enter events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 576 Get/Set passing a @mouse_enter events. Type: bool. +Default value: 0\.; #X msg 110 618 @mouse_leave; -#X text 245 618 Get/Set passing a @mouse_leave events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 618 Get/Set passing a @mouse_leave events. Type: bool. +Default value: 0\.; #X msg 110 660 @mouse_move; -#X text 245 660 Get/Set passing a @mouse_move events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 660 Get/Set passing a @mouse_move events. Type: bool. Default +value: 0\.; #X msg 110 702 @mouse_up; -#X text 245 702 Get/Set passing a @mouse_up events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 702 Get/Set passing a @mouse_up events. Type: bool. Default +value: 0\.; #X msg 110 744 @move; #X text 245 744 alias to @mouse_move 1 property. Default value: 0\.; #X msg 110 773 @up; @@ -66,7 +66,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 904 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 907 library: ceammc v0.9.4; +#X text 10 907 library: ceammc v0.9.6; #X text 475 919 see also:; #X obj 549 919 ui.mouse_route; #X obj 665 922 ui.link @background_color 0.78431 0.78431 0.78431 @@ -76,7 +76,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.mouse_filter; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.mouse_filter.pddoc b/ceammc/ext/doc/ui.mouse_filter.pddoc index cde06c1d4f..30b0ea2f5b 100644 --- a/ceammc/ext/doc/ui.mouse_filter.pddoc +++ b/ceammc/ext/doc/ui.mouse_filter.pddoc @@ -24,17 +24,17 @@ pass only specified mouse events from ui.* objects - passing a @mouse_up + passing a @mouse_up events - passing a @mouse_down + passing a @mouse_down events - passing a @mouse_leave + passing a @mouse_leave events - passing a @mouse_enter + passing a @mouse_enter events - passing a @mouse_move + passing a @mouse_move events - passing a @mouse_drag + passing a @mouse_drag events alias to @mouse_up 1 property alias to @mouse_down 1 diff --git a/ceammc/ext/doc/ui.mouse_route-help.pd b/ceammc/ext/doc/ui.mouse_route-help.pd index 4ee329b723..d7e408d5a5 100644 --- a/ceammc/ext/doc/ui.mouse_route-help.pd +++ b/ceammc/ext/doc/ui.mouse_route-help.pd @@ -25,23 +25,23 @@ #X msg 110 377 @leave; #X text 245 377 alias to @mouse_leave 1 property. Default value: 0\.; #X msg 110 406 @mouse_down; -#X text 245 406 Get/Set passing a @mouse_down events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 406 Get/Set passing a @mouse_down events. Type: bool. Default +value: 0\.; #X msg 110 448 @mouse_drag; -#X text 245 448 Get/Set passing a @mouse_drag events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 448 Get/Set passing a @mouse_drag events. Type: bool. Default +value: 0\.; #X msg 110 490 @mouse_enter; -#X text 245 490 Get/Set passing a @mouse_enter events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 490 Get/Set passing a @mouse_enter events. Type: bool. +Default value: 0\.; #X msg 110 532 @mouse_leave; -#X text 245 532 Get/Set passing a @mouse_leave events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 532 Get/Set passing a @mouse_leave events. Type: bool. +Default value: 0\.; #X msg 110 574 @mouse_move; -#X text 245 574 Get/Set passing a @mouse_move events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 574 Get/Set passing a @mouse_move events. Type: bool. Default +value: 0\.; #X msg 110 616 @mouse_up; -#X text 245 616 Get/Set passing a @mouse_up events. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 616 Get/Set passing a @mouse_up events. Type: bool. Default +value: 0\.; #X msg 110 658 @move; #X text 245 658 alias to @mouse_move 1 property. Default value: 0\.; #X msg 110 687 @up; @@ -66,7 +66,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 858 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 861 library: ceammc v0.9.4; +#X text 10 861 library: ceammc v0.9.6; #X text 467 873 see also:; #X obj 541 873 ui.mouse_filter; #X obj 665 876 ui.link @background_color 0.78431 0.78431 0.78431 @@ -76,7 +76,7 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.mouse_route; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.mouse_route.pddoc b/ceammc/ext/doc/ui.mouse_route.pddoc index c2223fcd9c..564fe6b252 100644 --- a/ceammc/ext/doc/ui.mouse_route.pddoc +++ b/ceammc/ext/doc/ui.mouse_route.pddoc @@ -24,17 +24,17 @@ routes only specified mouse events from ui.* objects - passing a @mouse_up + passing a @mouse_up events - passing a @mouse_down + passing a @mouse_down events - passing a @mouse_leave + passing a @mouse_leave events - passing a @mouse_enter + passing a @mouse_enter events - passing a @mouse_move + passing a @mouse_move events - passing a @mouse_drag + passing a @mouse_drag events alias to @mouse_up 1 property alias to @mouse_down 1 diff --git a/ceammc/ext/doc/ui.number-help.pd b/ceammc/ext/doc/ui.number-help.pd index da13233914..7073ad03cb 100644 --- a/ceammc/ext/doc/ui.number-help.pd +++ b/ceammc/ext/doc/ui.number-help.pd @@ -62,106 +62,107 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X text 245 845 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; #X msg 110 887 @fontname; -#X text 245 887 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 916 @fontsize; -#X text 245 916 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 958 @fontslant; -#X text 245 958 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 887 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 929 @fontsize; +#X text 245 929 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 971 @fontslant; +#X text 245 971 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1000 @fontweight; -#X text 245 1000 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1013 @fontweight; +#X text 245 1013 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1042 @pinned; -#X text 245 1042 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1084 @presetname; -#X text 245 1084 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1055 @pinned; +#X text 245 1055 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1097 @presetname; +#X text 245 1097 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1126 @size; -#X text 245 1126 Get/Set element size (width \, height pair). Type: +#X msg 110 1139 @size; +#X text 245 1139 Get/Set element size (width \, height pair). Type: list. Default value: 53 15\.; -#X obj 20 1178 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1183 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1191 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1196 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1218 clear; -#X text 245 1218 clears specified preset. Arguments are:; -#X obj 255 1241 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1241 IDX: preset index. Type: int.; -#X msg 110 1266 interp; -#X text 245 1266 interplolates between presets. Arguments are:; -#X obj 255 1289 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1289 IDX: preset fraction index. Type: float.; -#X msg 110 1314 load; -#X text 245 1314 loads specified preset. Arguments are:; -#X obj 255 1337 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1337 IDX: preset index. Type: int.; -#X msg 110 1362 pos; -#X text 245 1362 set UI element position. Arguments are:; -#X obj 255 1385 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1385 X: top left x-coord. Type: float.; -#X obj 255 1408 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1408 Y: top right y-coord. Type: float.; -#X msg 110 1433 set; -#X text 245 1433 sets slider value without output. Arguments are:; -#X obj 255 1456 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1456 V: new value. Type: float.; -#X msg 110 1481 store; -#X text 245 1481 stores specified preset. Arguments are:; -#X obj 255 1504 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1504 IDX: preset index. Type: int.; -#X msg 110 1529 *; -#X text 245 1529 multiply slider value without output. Arguments are:; -#X obj 255 1552 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1552 V: multiplied value. Type: float.; -#X msg 110 1577 +; -#X text 245 1577 add value to slider without output. Arguments are:; -#X obj 255 1600 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1600 V: added value. Type: float.; -#X msg 110 1625 ++; -#X text 245 1625 increment slider value without output.; -#X msg 110 1652 -; -#X text 245 1652 subtract value from slider without output. Arguments +#X msg 110 1231 clear; +#X text 245 1231 clears specified preset. Arguments are:; +#X obj 255 1254 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1254 IDX: preset index. Type: int.; +#X msg 110 1279 interp; +#X text 245 1279 interplolates between presets. Arguments are:; +#X obj 255 1302 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1302 IDX: preset fraction index. Type: float.; +#X msg 110 1327 load; +#X text 245 1327 loads specified preset. Arguments are:; +#X obj 255 1350 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1350 IDX: preset index. Type: int.; +#X msg 110 1375 pos; +#X text 245 1375 set UI element position. Arguments are:; +#X obj 255 1398 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1398 X: top left x-coord. Type: float.; +#X obj 255 1421 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1421 Y: top right y-coord. Type: float.; +#X msg 110 1446 set; +#X text 245 1446 sets slider value without output. Arguments are:; +#X obj 255 1469 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1469 V: new value. Type: float.; +#X msg 110 1494 store; +#X text 245 1494 stores specified preset. Arguments are:; +#X obj 255 1517 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1517 IDX: preset index. Type: int.; +#X msg 110 1542 *; +#X text 245 1542 multiply slider value without output. Arguments are:; +#X obj 255 1565 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1565 V: multiplied value. Type: float.; +#X msg 110 1590 +; +#X text 245 1590 add value to slider without output. Arguments are:; +#X obj 255 1613 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1613 V: added value. Type: float.; +#X msg 110 1638 ++; +#X text 245 1638 increment slider value without output.; +#X msg 110 1665 -; +#X text 245 1665 subtract value from slider without output. Arguments are:; -#X obj 255 1675 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1675 V: subtracted value. Type: float.; -#X msg 110 1700 --; -#X text 245 1700 decrement slider value without output.; -#X msg 110 1727 /; -#X text 245 1727 divide slider value without output. Arguments are:; -#X obj 255 1750 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1750 V: denominator value. Type: float.; -#X obj 20 1785 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1790 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1688 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1688 V: subtracted value. Type: float.; +#X msg 110 1713 --; +#X text 245 1713 decrement slider value without output.; +#X msg 110 1740 /; +#X text 245 1740 divide slider value without output. Arguments are:; +#X obj 255 1763 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1763 V: denominator value. Type: float.; +#X obj 20 1798 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1803 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1791 1\.; -#X text 150 1791 *bang*; -#X text 245 1791 outputs current value.; -#X text 150 1811 *float*; -#X text 245 1811 input value.; -#X text 150 1831 *list*; -#X text 245 1831 first element converted to float.; -#X obj 20 1861 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1866 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1804 1\.; +#X text 150 1804 *bang*; +#X text 245 1804 outputs current value.; +#X text 150 1824 *float*; +#X text 245 1824 input value.; +#X text 150 1844 *list*; +#X text 245 1844 first element converted to float.; +#X obj 20 1874 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1879 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1867 1\.; -#X text 245 1867 number value.; +#X text 110 1880 1\.; +#X text 245 1880 number value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1917 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1920 library: ceammc v0.9.4; -#X text 591 1932 see also:; -#X obj 665 1935 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1930 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1933 library: ceammc v0.9.6; +#X text 591 1945 see also:; +#X obj 665 1948 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number~] @url ui.number~-help.pd; -#N canvas 10 1939 400 290 info 0; +#N canvas 10 1952 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.number; #X text 10 76 category:; @@ -180,7 +181,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1939 pd info; +#X restore 10 1952 pd info; #X connect 8 0 17 0; #X connect 9 0 17 0; #X connect 13 0 17 0; diff --git a/ceammc/ext/doc/ui.number.pddoc b/ceammc/ext/doc/ui.number.pddoc index 533d32e92c..c7350c0a97 100644 --- a/ceammc/ext/doc/ui.number.pddoc +++ b/ceammc/ext/doc/ui.number.pddoc @@ -40,8 +40,8 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -50,9 +50,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.number~-help.pd b/ceammc/ext/doc/ui.number~-help.pd index 7b7324ba76..f30b532b1c 100644 --- a/ceammc/ext/doc/ui.number~-help.pd +++ b/ceammc/ext/doc/ui.number~-help.pd @@ -22,77 +22,72 @@ value: 50\. Range: 20\...1000\.; #X msg 110 318 @precision; #X text 245 318 Get/Set float precision. Type: int. Default value: 6\. Range: 0\...16\.; -#X msg 110 360 @receive; -#X text 245 360 Get/Set receive source. Type: symbol. Default value: -(null).; -#X msg 110 389 @send; -#X text 245 389 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 431 @active_color; -#X text 245 431 Get/Set active color (list of red \, green \, blue +#X msg 110 360 @active_color; +#X text 245 360 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 473 @background_color; -#X text 245 473 Get/Set element background color (list of red \, green +#X msg 110 402 @background_color; +#X text 245 402 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.3 0.3 0.3 1\.; -#X msg 110 530 @border_color; -#X text 245 530 Get/Set border color (list of red \, green \, blue +#X msg 110 459 @border_color; +#X text 245 459 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 572 @text_color; -#X text 245 572 Get/Set text color (list of red \, green \, blue values +#X msg 110 501 @text_color; +#X text 245 501 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.9 0.9 0.9 1\.; -#X msg 110 614 @fontname; -#X text 245 614 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 643 @fontsize; -#X text 245 643 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 685 @fontslant; -#X text 245 685 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 543 @fontname; +#X text 245 543 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 585 @fontsize; +#X text 245 585 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 627 @fontslant; +#X text 245 627 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 727 @fontweight; -#X text 245 727 Get/Set font weight. Type: symbol. Default value: normal. +#X msg 110 669 @fontweight; +#X text 245 669 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 769 @pinned; -#X text 245 769 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 811 @size; -#X text 245 811 Get/Set element size (width \, height pair). Type: +#X msg 110 711 @pinned; +#X text 245 711 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 753 @size; +#X text 245 753 Get/Set element size (width \, height pair). Type: list. Default value: 80 15\.; -#X obj 20 863 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 868 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 805 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 810 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 903 pos; -#X text 245 903 set UI element position. Arguments are:; -#X obj 255 926 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 926 X: top left x-coord. Type: float.; -#X obj 255 949 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 949 Y: top right y-coord. Type: float.; -#X obj 20 984 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 989 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 845 pos; +#X text 245 845 set UI element position. Arguments are:; +#X obj 255 868 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 868 X: top left x-coord. Type: float.; +#X obj 255 891 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 891 Y: top right y-coord. Type: float.; +#X obj 20 926 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 931 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 990 1\.; -#X text 245 990 input audio signal.; -#X obj 20 1020 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1025 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 932 1\.; +#X text 245 932 input audio signal.; +#X obj 20 962 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 967 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1026 1\.; -#X text 245 1026 signal pass thru.; +#X text 110 968 1\.; +#X text 245 968 signal pass thru.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1076 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1079 library: ceammc v0.9.4; -#X text 598 1091 see also:; -#X obj 672 1094 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1018 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1021 library: ceammc v0.9.6; +#X text 598 1033 see also:; +#X obj 672 1036 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.number] @url ui.number-help.pd; -#N canvas 10 1098 400 290 info 0; +#N canvas 10 1040 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.number~; #X text 10 76 category:; @@ -111,5 +106,5 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1098 pd info; +#X restore 10 1040 pd info; #X connect 7 0 9 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.number~.pddoc b/ceammc/ext/doc/ui.number~.pddoc index 720306e5b3..905912c235 100644 --- a/ceammc/ext/doc/ui.number~.pddoc +++ b/ceammc/ext/doc/ui.number~.pddoc @@ -29,12 +29,10 @@ float precision - send destination - receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of @@ -43,9 +41,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.plot~-help.pd b/ceammc/ext/doc/ui.plot~-help.pd index ebfc6eaa51..1641842260 100644 --- a/ceammc/ext/doc/ui.plot~-help.pd +++ b/ceammc/ext/doc/ui.plot~-help.pd @@ -46,129 +46,127 @@ Allowed values: lines \, bars.; #X msg 110 781 @receive; #X text 245 781 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 810 @send; -#X text 245 810 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 852 @xmaj_grid; -#X text 245 852 Get/Set draw major grid lines on x-axis. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 894 @xmaj_ticks; -#X text 245 894 Get/Set draw minor ticks on x-axis. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 936 @xmin_grid; -#X text 245 936 Get/Set draw minor grid lines on x-axis. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 978 @xmin_ticks; -#X text 245 978 Get/Set draw minor ticks on x-axis. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1020 @yauto; -#X text 245 1020 Get/Set calculate y-axis range automatically. Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1062 @ymaj_grid; -#X text 245 1062 Get/Set draw major grid lines on y-axis. Type: int. -Default value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1104 @ymaj_ticks; -#X text 245 1104 Get/Set draw minor ticks on y-axis. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1146 @ymax; -#X text 245 1146 Get/Set minimal y-axis value. Type: float. Default +#X msg 110 810 @xmaj_grid; +#X text 245 810 Get/Set draw major grid lines on x-axis. Type: bool. +Default value: 1\.; +#X msg 110 852 @xmaj_ticks; +#X text 245 852 Get/Set draw minor ticks on x-axis. Type: bool. Default +value: 1\.; +#X msg 110 894 @xmin_grid; +#X text 245 894 Get/Set draw minor grid lines on x-axis. Type: bool. +Default value: 0\.; +#X msg 110 936 @xmin_ticks; +#X text 245 936 Get/Set draw minor ticks on x-axis. Type: bool. Default +value: 1\.; +#X msg 110 978 @yauto; +#X text 245 978 Get/Set calculate y-axis range automatically. Type: +bool. Default value: 0\.; +#X msg 110 1020 @ymaj_grid; +#X text 245 1020 Get/Set draw major grid lines on y-axis. Type: bool. +Default value: 1\.; +#X msg 110 1062 @ymaj_ticks; +#X text 245 1062 Get/Set draw minor ticks on y-axis. Type: bool. Default +value: 1\.; +#X msg 110 1104 @ymax; +#X text 245 1104 Get/Set minimal y-axis value. Type: float. Default value: 1\. Range: -1024\...1024\.; -#X msg 110 1188 @ymin; -#X text 245 1188 Get/Set minimal y-axis value. Type: float. Default +#X msg 110 1146 @ymin; +#X text 245 1146 Get/Set minimal y-axis value. Type: float. Default value: -1\. Range: -1024\...1024\.; -#X msg 110 1230 @ymin_grid; -#X text 245 1230 Get/Set draw minor grid lines on y-axis. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1272 @ymin_ticks; -#X text 245 1272 Get/Set draw minor ticks on y-axis. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; -#X msg 110 1314 @background_color; -#X text 245 1314 Get/Set element background color (list of red \, green +#X msg 110 1188 @ymin_grid; +#X text 245 1188 Get/Set draw minor grid lines on y-axis. Type: bool. +Default value: 0\.; +#X msg 110 1230 @ymin_ticks; +#X text 245 1230 Get/Set draw minor ticks on y-axis. Type: bool. Default +value: 1\.; +#X msg 110 1272 @background_color; +#X text 245 1272 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1371 @border_color; -#X text 245 1371 Get/Set border color (list of red \, green \, blue +#X msg 110 1329 @border_color; +#X text 245 1329 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1413 @plot_color0; -#X text 245 1413 Get/Set first plot color (list of red \, green \, +#X msg 110 1371 @plot_color0; +#X text 245 1371 Get/Set first plot color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1455 @plot_color1; -#X text 245 1455 Get/Set second color (list of red \, green \, blue +#X msg 110 1413 @plot_color1; +#X text 245 1413 Get/Set second color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.75 0 1 1\.; -#X msg 110 1497 @plot_color2; -#X text 245 1497 Get/Set third color (list of red \, green \, blue +#X msg 110 1455 @plot_color2; +#X text 245 1455 Get/Set third color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 1 0 0.75 1\.; -#X msg 110 1539 @plot_color3; -#X text 245 1539 Get/Set fourth color (list of red \, green \, blue +#X msg 110 1497 @plot_color3; +#X text 245 1497 Get/Set fourth color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 1 0.75 0 1\.; -#X msg 110 1581 @xlabels; -#X text 245 1581 Get/Set draw labels on x-axis. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1623 @xlabels; -#X text 245 1623 Get/Set draw labels on x-axis. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1665 @xlabels; -#X text 245 1665 Get/Set draw labels on x-axis. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1707 @ylabels; -#X text 245 1707 Get/Set draw labels on y-axis. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1749 @fontname; -#X text 245 1749 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1778 @fontsize; -#X text 245 1778 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1820 @fontslant; -#X text 245 1820 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1539 @xlabels; +#X text 245 1539 Get/Set draw labels on x-axis. Type: bool. Default +value: 0\.; +#X msg 110 1568 @xlabels; +#X text 245 1568 Get/Set draw labels on x-axis. Type: bool. Default +value: 0\.; +#X msg 110 1597 @xlabels; +#X text 245 1597 Get/Set draw labels on x-axis. Type: bool. Default +value: 0\.; +#X msg 110 1626 @ylabels; +#X text 245 1626 Get/Set draw labels on y-axis. Type: bool. Default +value: 0\.; +#X msg 110 1655 @fontname; +#X text 245 1655 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1697 @fontsize; +#X text 245 1697 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1739 @fontslant; +#X text 245 1739 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1862 @fontweight; -#X text 245 1862 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1781 @fontweight; +#X text 245 1781 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1904 @pinned; -#X text 245 1904 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1946 @size; -#X text 245 1946 Get/Set element size (width \, height pair). Type: +#X msg 110 1823 @pinned; +#X text 245 1823 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1865 @size; +#X text 245 1865 Get/Set element size (width \, height pair). Type: list. Default value: 200 200\.; -#X obj 20 1998 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2003 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1917 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1922 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 2038 plot; -#X text 245 2038 Same as bang: plot default number of samples.; -#X msg 110 2065 pos; -#X text 245 2065 set UI element position. Arguments are:; -#X obj 255 2088 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2088 X: top left x-coord. Type: float.; -#X obj 255 2111 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2111 Y: top right y-coord. Type: float.; -#X obj 20 2146 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2151 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1957 plot; +#X text 245 1957 Same as bang: plot default number of samples.; +#X msg 110 1984 pos; +#X text 245 1984 set UI element position. Arguments are:; +#X obj 255 2007 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2007 X: top left x-coord. Type: float.; +#X obj 255 2030 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2030 Y: top right y-coord. Type: float.; +#X obj 20 2065 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2070 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2152 1\.; -#X text 245 2152 input signal.; -#X text 110 2172 2\.; -#X text 150 2172 *bang*; -#X text 245 2172 plot default number of samples.; -#X text 150 2192 *float*; -#X text 245 2192 plot specified number of samples.; -#X obj 20 2222 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2227 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2071 1\.; +#X text 245 2071 input signal.; +#X text 110 2091 2\.; +#X text 150 2091 *bang*; +#X text 245 2091 plot default number of samples.; +#X text 150 2111 *float*; +#X text 245 2111 plot specified number of samples.; +#X obj 20 2141 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2146 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2268 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2271 library: ceammc v0.9.4; -#X text 585 2283 see also:; -#X obj 659 2283 array.plot~; -#N canvas 10 2290 400 290 info 0; +#X obj 1 2187 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2190 library: ceammc v0.9.6; +#X text 585 2202 see also:; +#X obj 659 2202 array.plot~; +#N canvas 10 2209 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.plot~; #X text 10 76 category:; @@ -187,7 +185,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2290 pd info; +#X restore 10 2209 pd info; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 5 0 7 0; diff --git a/ceammc/ext/doc/ui.plot~.pddoc b/ceammc/ext/doc/ui.plot~.pddoc index 80b19df824..e937d25707 100644 --- a/ceammc/ext/doc/ui.plot~.pddoc +++ b/ceammc/ext/doc/ui.plot~.pddoc @@ -36,41 +36,36 @@ minimal y-axis value minimal y-axis value - calculate y-axis range + calculate y-axis range automatically - draw labels on + draw labels on x-axis + draw labels on y-axis + draw major grid lines on x-axis - draw labels on - y-axis - draw major grid lines on - x-axis - draw minor grid lines on + draw minor grid lines on x-axis - draw minor ticks on + draw minor ticks on x-axis - draw minor ticks on + draw minor ticks on x-axis - draw major grid lines on + draw major grid lines on y-axis - draw minor grid lines on + draw minor grid lines on y-axis - draw minor ticks on + draw minor ticks on y-axis - draw minor ticks on + draw minor ticks on y-axis - draw labels on - x-axis - draw labels on - x-axis + draw labels on x-axis + draw labels on x-axis draw mode - send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level first plot color (list of red, green, blue values in 0-1 range) second color (list of @@ -83,9 +78,10 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.polar-help.pd b/ceammc/ext/doc/ui.polar-help.pd index d9d67f2822..7f5d49bfed 100644 --- a/ceammc/ext/doc/ui.polar-help.pd +++ b/ceammc/ext/doc/ui.polar-help.pd @@ -32,22 +32,21 @@ #X msg 110 536 @angle; #X text 245 536 Get/Set angle. Type: float. Default value: 0\.; #X msg 110 565 @clockwise; -#X text 245 565 Get/Set clockwise positive direction. Type: int. Default -value: 1\. Allowed values: 0 \, 1\.; +#X text 245 565 Get/Set clockwise positive direction. Type: bool. Default +value: 1\.; #X msg 110 607 @direction; #X text 245 607 Get/Set zero-angle direction. Type: symbol. Default -value: N. Allowed values: N \, E \, S \, W.; +value: N. Allowed values: N \, W \, S \, E.; #X msg 110 649 @mouse_events; #X text 245 649 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 706 @positive; #X text 245 706 Get/Set use positive output angle range. For example: [0\..360) when using degrees \, otherwise using [-180\..180) range. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +Type: bool. Default value: 0\.; #X msg 110 763 @radians; -#X text 245 763 Get/Set using radians instead of degrees. Type: int. -Default value: 0\. Allowed values: 0 \, 1\.; +#X text 245 763 Get/Set using radians instead of degrees. Type: bool. +Default value: 0\.; #X msg 110 805 @radius; #X text 245 805 Get/Set radius. Type: float. Default value: 0\. Range: 0\...1\.; @@ -74,7 +73,7 @@ values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; value: left. Allowed values: left \, center \, right.; #X msg 110 1130 @label_inner; #X text 245 1130 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 1172 @label_margins; #X text 245 1172 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; @@ -85,110 +84,111 @@ top. Allowed values: left \, top \, right \, bottom.; #X text 245 1256 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; #X msg 110 1298 @fontname; -#X text 245 1298 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1327 @fontsize; -#X text 245 1327 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1369 @fontslant; -#X text 245 1369 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 1298 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Helvetica \, Monaco \, Courier \, Times \, DejaVu.; +#X msg 110 1340 @fontsize; +#X text 245 1340 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1382 @fontslant; +#X text 245 1382 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1411 @fontweight; -#X text 245 1411 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1424 @fontweight; +#X text 245 1424 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1453 @pinned; -#X text 245 1453 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1495 @presetname; -#X text 245 1495 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1466 @pinned; +#X text 245 1466 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1508 @presetname; +#X text 245 1508 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1537 @size; -#X text 245 1537 Get/Set element size (width \, height pair). Type: +#X msg 110 1550 @size; +#X text 245 1550 Get/Set element size (width \, height pair). Type: list. Default value: 100 100\.; -#X obj 20 1589 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1594 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1602 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1607 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1629 cartesian; -#X text 245 1629 sets slider position in cartesian coords and output. +#X msg 110 1642 cartesian; +#X text 245 1642 sets slider position in cartesian coords and output. Arguments are:; -#X obj 255 1667 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1667 X: x-coord. Type: float. Range: -1\...1\.; -#X obj 255 1690 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1690 Y: y-coord. Type: float. Range: -1\...1\.; -#X msg 110 1715 clear; -#X text 245 1715 clears specified preset. Arguments are:; -#X obj 255 1738 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1738 IDX: preset index. Type: int.; -#X msg 110 1763 interp; -#X text 245 1763 interplolates between presets. Arguments are:; -#X obj 255 1786 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1786 IDX: preset fraction index. Type: float.; -#X msg 110 1811 load; -#X text 245 1811 loads specified preset. Arguments are:; -#X obj 255 1834 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1834 IDX: preset index. Type: int.; -#X msg 110 1859 polar; -#X text 245 1859 sets slider position in polar coords and output. Arguments +#X obj 255 1680 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1680 X: x-coord. Type: float. Range: -1\...1\.; +#X obj 255 1703 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1703 Y: y-coord. Type: float. Range: -1\...1\.; +#X msg 110 1728 clear; +#X text 245 1728 clears specified preset. Arguments are:; +#X obj 255 1751 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1751 IDX: preset index. Type: int.; +#X msg 110 1776 interp; +#X text 245 1776 interplolates between presets. Arguments are:; +#X obj 255 1799 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1799 IDX: preset fraction index. Type: float.; +#X msg 110 1824 load; +#X text 245 1824 loads specified preset. Arguments are:; +#X obj 255 1847 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1847 IDX: preset index. Type: int.; +#X msg 110 1872 polar; +#X text 245 1872 sets slider position in polar coords and output. Arguments are:; -#X obj 255 1897 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1897 RAD: radius. Type: float. Range: 0\...1\.; -#X obj 255 1920 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1920 ANG: angle in degrees or radians (depends on @use_degrees +#X obj 255 1910 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1910 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 1933 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1933 ANG: angle in degrees or radians (depends on @use_degrees property). Type: float.; -#X msg 110 1960 pos; -#X text 245 1960 set UI element position. Arguments are:; -#X obj 255 1983 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1983 X: top left x-coord. Type: float.; -#X obj 255 2006 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2006 Y: top right y-coord. Type: float.; -#X msg 110 2031 random; -#X text 245 2031 set to random value and output.; -#X msg 110 2058 rotate; -#X text 245 2058 rotate slider by specified angle. Arguments are:; -#X obj 255 2081 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2081 A: angle in degrees or radians (depends on @use_degrees +#X msg 110 1973 pos; +#X text 245 1973 set UI element position. Arguments are:; +#X obj 255 1996 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1996 X: top left x-coord. Type: float.; +#X obj 255 2019 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2019 Y: top right y-coord. Type: float.; +#X msg 110 2044 random; +#X text 245 2044 set to random value and output.; +#X msg 110 2071 rotate; +#X text 245 2071 rotate slider by specified angle. Arguments are:; +#X obj 255 2094 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2094 A: angle in degrees or radians (depends on @use_degrees property). Type: float.; -#X msg 110 2121 set; -#X text 245 2121 sets slider position without output. Arguments are:; -#X obj 255 2144 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2144 RAD: radius. Type: float. Range: 0\...1\.; -#X obj 255 2167 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2167 ANG: angle in degrees or radians (depends on @use_degrees +#X msg 110 2134 set; +#X text 245 2134 sets slider position without output. Arguments are:; +#X obj 255 2157 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2157 RAD: radius. Type: float. Range: 0\...1\.; +#X obj 255 2180 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2180 ANG: angle in degrees or radians (depends on @use_degrees property). Type: float.; -#X msg 110 2207 store; -#X text 245 2207 stores specified preset. Arguments are:; -#X obj 255 2230 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2230 IDX: preset index. Type: int.; -#X msg 110 2255 dump; -#X text 245 2255 dumps all object info to Pd console window.; -#X obj 20 2292 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2297 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 2220 store; +#X text 245 2220 stores specified preset. Arguments are:; +#X obj 255 2243 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2243 IDX: preset index. Type: int.; +#X msg 110 2268 dump; +#X text 245 2268 dumps all object info to Pd console window.; +#X obj 20 2305 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2310 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2298 1\.; -#X text 150 2298 *bang*; -#X text 245 2298 outputs slider position.; -#X text 150 2318 *list*; -#X text 245 2318 sets slider position and outputs it.; -#X obj 20 2348 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2353 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2311 1\.; +#X text 150 2311 *bang*; +#X text 245 2311 outputs slider position.; +#X text 150 2331 *list*; +#X text 245 2331 sets slider position and outputs it.; +#X obj 20 2361 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2366 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2354 1\.; -#X text 245 2354 list output of two values: RADIUS and ANGLE.; +#X text 110 2367 1\.; +#X text 245 2367 list output of two values: RADIUS and ANGLE.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2404 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2407 library: ceammc v0.9.4; -#X text 584 2419 see also:; -#X obj 658 2422 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2417 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2420 library: ceammc v0.9.6; +#X text 584 2432 see also:; +#X obj 658 2435 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider2d] @url ui.slider2d-help.pd; -#N canvas 10 2426 400 290 info 0; +#N canvas 10 2439 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.polar; #X text 10 76 category:; @@ -207,7 +207,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2426 pd info; +#X restore 10 2439 pd info; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 7 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.polar.pddoc b/ceammc/ext/doc/ui.polar.pddoc index 6192da4ad1..6a18d40848 100644 --- a/ceammc/ext/doc/ui.polar.pddoc +++ b/ceammc/ext/doc/ui.polar.pddoc @@ -26,14 +26,13 @@ change precisely radius coord - clockwise positive + clockwise positive direction - zero-angle + zero-angle direction - use positive output angle - range. For example: [0..360) when using degrees, otherwise using [-180..180) - range. - using radians instead of + use positive output angle range. For + example: [0..360) when using degrees, otherwise using [-180..180) range. + using radians instead of degrees angle @@ -45,17 +44,19 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -64,8 +65,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.preset-help.pd b/ceammc/ext/doc/ui.preset-help.pd index b3328e9b69..da308f0179 100644 --- a/ceammc/ext/doc/ui.preset-help.pd +++ b/ceammc/ext/doc/ui.preset-help.pd @@ -43,108 +43,106 @@ gray; -49933 0; #X msg 110 713 @current; #X text 245 713 (readonly) Get current preset index. Type: int. Default -value: 0\.; +value: -1\.; #X msg 110 755 @receive; #X text 245 755 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 784 @send; -#X text 245 784 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 826 @active_color; -#X text 245 826 Get/Set active color (list of red \, green \, blue +#X msg 110 784 @active_color; +#X text 245 784 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 868 @background_color; -#X text 245 868 Get/Set element background color (list of red \, green +#X msg 110 826 @background_color; +#X text 245 826 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 925 @border_color; -#X text 245 925 Get/Set border color (list of red \, green \, blue +#X msg 110 883 @border_color; +#X text 245 883 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 967 @empty_color; -#X text 245 967 Get/Set empty cell color (list of red \, green \, blue +#X msg 110 925 @empty_color; +#X text 245 925 Get/Set empty cell color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.86 0.86 0.86 1\.; -#X msg 110 1009 @stored_color; -#X text 245 1009 Get/Set stored cell color (list of red \, green \, +#X msg 110 967 @stored_color; +#X text 245 967 Get/Set stored cell color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.5 0.5 0.5 1\.; -#X msg 110 1051 @text_color; -#X text 245 1051 Get/Set text color (list of red \, green \, blue values +#X msg 110 1009 @text_color; +#X text 245 1009 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 1093 @fontname; -#X text 245 1093 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1122 @fontsize; -#X text 245 1122 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1164 @fontslant; -#X text 245 1164 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1051 @fontname; +#X text 245 1051 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1093 @fontsize; +#X text 245 1093 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1135 @fontslant; +#X text 245 1135 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1206 @fontweight; -#X text 245 1206 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1177 @fontweight; +#X text 245 1177 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1248 @pinned; -#X text 245 1248 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1290 @size; -#X text 245 1290 Get/Set element size (width \, height pair). Type: +#X msg 110 1219 @pinned; +#X text 245 1219 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1261 @size; +#X text 245 1261 Get/Set element size (width \, height pair). Type: list. Default value: 102 42\.; -#X obj 20 1342 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1347 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1313 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1318 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1382 clear; -#X text 245 1382 clear specified preset. Arguments are:; -#X obj 255 1405 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1405 IDX: preset index. Type: int. Min value: 0\.; -#X msg 110 1430 clearall; -#X text 245 1430 clear all existing presets.; -#X msg 110 1457 duplicate; -#X text 245 1457 fill empty presets by coping exiting values.; -#X msg 110 1484 interp; -#X text 245 1484 loads linearry interpolated value between preset \, +#X msg 110 1353 clear; +#X text 245 1353 clear specified preset. Arguments are:; +#X obj 255 1376 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1376 IDX: preset index. Type: int. Min value: 0\.; +#X msg 110 1401 clearall; +#X text 245 1401 clear all existing presets.; +#X msg 110 1428 duplicate; +#X text 245 1428 fill empty presets by coping exiting values.; +#X msg 110 1455 interp; +#X text 245 1455 loads linearry interpolated value between preset \, for example: 1.5 means load interpolated value between preset 1 and 2\. Arguments are:; -#X obj 255 1537 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1537 IDX: preset interpolation index. Type: float.; -#X msg 110 1562 load; -#X text 245 1562 loads specified preset. Arguments are:; -#X obj 255 1585 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1585 IDX: preset index. Type: int.; -#X msg 110 1610 pos; -#X text 245 1610 set UI element position. Arguments are:; -#X obj 255 1633 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1633 X: top left x-coord. Type: float.; -#X obj 255 1656 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1656 Y: top right y-coord. Type: float.; -#X msg 110 1681 read; -#X text 245 1681 read presets from file. Arguments are:; -#X obj 255 1704 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1704 PATH: path to preset file. Type: symbol.; -#X msg 110 1729 store; -#X text 245 1729 stores specified preset. Arguments are:; -#X obj 255 1752 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1752 IDX: preset index. Type: int.; -#X msg 110 1777 write; -#X text 245 1777 read presets from file. Arguments are:; -#X obj 255 1800 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1800 PATH: path to preset file. Type: symbol.; -#X obj 20 1835 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1840 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 1508 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1508 IDX: preset interpolation index. Type: float.; +#X msg 110 1533 load; +#X text 245 1533 loads specified preset. Arguments are:; +#X obj 255 1556 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1556 IDX: preset index. Type: int.; +#X msg 110 1581 pos; +#X text 245 1581 set UI element position. Arguments are:; +#X obj 255 1604 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1604 X: top left x-coord. Type: float.; +#X obj 255 1627 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1627 Y: top right y-coord. Type: float.; +#X msg 110 1652 read; +#X text 245 1652 read presets from file. Arguments are:; +#X obj 255 1675 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1675 PATH: path to preset file. Type: symbol.; +#X msg 110 1700 store; +#X text 245 1700 stores specified preset. Arguments are:; +#X obj 255 1723 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1723 IDX: preset index. Type: int.; +#X msg 110 1748 write; +#X text 245 1748 read presets from file. Arguments are:; +#X obj 255 1771 cnv 1 36 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1771 PATH: path to preset file. Type: symbol.; +#X obj 20 1806 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1811 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1841 1\.; +#X text 110 1812 1\.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1871 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1874 library: ceammc v0.9.4; -#X text 464 1886 see also:; -#X obj 538 1886 preset.float; -#X obj 639 1886 preset.storage; -#N canvas 10 1893 400 290 info 0; +#X obj 1 1842 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1845 library: ceammc v0.9.6; +#X text 464 1857 see also:; +#X obj 538 1857 preset.float; +#X obj 639 1857 preset.storage; +#N canvas 10 1864 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.preset; #X text 10 76 category:; @@ -163,7 +161,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1893 pd info; +#X restore 10 1864 pd info; #X connect 12 0 13 0; #X connect 14 0 17 0; #X connect 13 0 20 0; diff --git a/ceammc/ext/doc/ui.preset.pddoc b/ceammc/ext/doc/ui.preset.pddoc index 45deed921f..cbe0e52940 100644 --- a/ceammc/ext/doc/ui.preset.pddoc +++ b/ceammc/ext/doc/ui.preset.pddoc @@ -35,15 +35,14 @@ actions - current preset + current preset index - send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -56,9 +55,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/ui.radio-help.pd b/ceammc/ext/doc/ui.radio-help.pd index 98e7a370eb..d2311e65d6 100644 --- a/ceammc/ext/doc/ui.radio-help.pd +++ b/ceammc/ext/doc/ui.radio-help.pd @@ -29,158 +29,162 @@ for vertical radio \, [ui.hrd*] alias for horizontal radio checklist.; #X obj 50 217 ui.radio; #X obj 251 217 ui.radio @mode 1; #X floatatom 50 245 5 0 0 0 - - -; -#X obj 251 245 ui.display @display_type 1; +#X obj 251 245 ui.dt; #X msg 50 274 + 3; #X msg 107 274 - 1; #X msg 165 274 prev; #X msg 232 274 next; -#X obj 50 317 ui.radio; -#X obj 20 366 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 371 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +#X msg 299 274 random; +#X msg 386 274 random move; +#X obj 50 317 ui.radio 4; +#X obj 50 346 ui.dt; +#X obj 20 395 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 400 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 406 Left-click; -#X text 285 406 select cell in radio mode \, toggle cell in check list +#X text 110 435 Left-click; +#X text 285 435 select cell in radio mode \, toggle cell in check list mode.; -#X text 110 426 Right-click; -#X text 285 426 show context menu.; -#X text 110 446 Double-click + ⌘; -#X text 285 446 changes slider orientation.; -#X text 61 446 [Edit]; -#X obj 20 476 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 481 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 110 455 Right-click; +#X text 285 455 show context menu.; +#X text 110 475 Double-click + ⌘; +#X text 285 475 changes slider orientation.; +#X text 61 475 [Edit]; +#X obj 20 505 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 510 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 516 1\.; -#X text 150 516 float; -#X obj 246 517 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 516 NCELLS: number of cells. Type: float. Range: 2\...128; -#X obj 20 546 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 551 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 545 1\.; +#X text 150 545 float; +#X obj 246 546 cnv 1 55 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 545 NCELLS: number of cells. Type: float. Range: 2\...128; +#X obj 20 575 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 580 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 586 @mode; -#X text 245 586 Get/Set check list mode. If true acts as checklist. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 628 @mouse_events; -#X text 245 628 Get/Set mouse events output mode. If on outputs @mouse_down -and @mouse_drag events. Type: int. Default value: 0\. Allowed values: -0 \, 1\.; -#X msg 110 685 @nitems; -#X text 245 685 Get/Set number of items. Type: int. Default value: +#X msg 110 615 @mode; +#X text 245 615 Get/Set check list mode. If true acts as checklist. +Type: bool. Default value: 0\.; +#X msg 110 657 @mouse_events; +#X text 245 657 Get/Set mouse events output mode. If on outputs @mouse_down +and @mouse_drag events. Type: bool. Default value: 0\.; +#X msg 110 699 @nitems; +#X text 245 699 Get/Set number of items. Type: int. Default value: 8\. Range: 2\...128\.; -#X msg 110 727 @receive; -#X text 245 727 Get/Set receive source. Type: symbol. Default value: +#X msg 110 741 @receive; +#X text 245 741 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 756 @send; -#X text 245 756 Get/Set send destination. Type: symbol. Default value: +#X msg 110 770 @send; +#X text 245 770 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 798 @value; -#X text 245 798 Get/Set widget value (float or list). Type: list.; -#X msg 110 827 @active_color; -#X text 245 827 Get/Set active color (list of red \, green \, blue +#X msg 110 812 @value; +#X text 245 812 Get/Set widget value (float or list). Type: list.; +#X msg 110 841 @active_color; +#X text 245 841 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 869 @background_color; -#X text 245 869 Get/Set element background color (list of red \, green +#X msg 110 883 @background_color; +#X text 245 883 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 926 @border_color; -#X text 245 926 Get/Set border color (list of red \, green \, blue +#X msg 110 940 @border_color; +#X text 245 940 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 968 @fontname; -#X text 245 968 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 997 @fontsize; -#X text 245 997 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1039 @fontslant; -#X text 245 1039 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 982 @fontname; +#X text 245 982 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1024 @fontsize; +#X text 245 1024 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1066 @fontslant; +#X text 245 1066 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1081 @fontweight; -#X text 245 1081 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1108 @fontweight; +#X text 245 1108 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1123 @pinned; -#X text 245 1123 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1165 @presetname; -#X text 245 1165 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1150 @pinned; +#X text 245 1150 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1192 @presetname; +#X text 245 1192 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1207 @size; -#X text 245 1207 Get/Set element size (width \, height pair). Type: +#X msg 110 1234 @size; +#X text 245 1234 Get/Set element size (width \, height pair). Type: list. Default value: 120 15\.; -#X obj 20 1259 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1264 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1286 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1291 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1299 clear; -#X text 245 1299 clears specified preset. Arguments are:; -#X obj 255 1322 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1322 IDX: preset index. Type: int.; -#X msg 110 1347 flip; -#X text 245 1347 flips radio (only in checklist mode).; -#X msg 110 1374 interp; -#X text 245 1374 for this object acts as *load* \, no interpolation +#X msg 110 1326 clear; +#X text 245 1326 clears specified preset. Arguments are:; +#X obj 255 1349 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1349 IDX: preset index. Type: int.; +#X msg 110 1374 flip; +#X text 245 1374 flips radio (only in checklist mode).; +#X msg 110 1401 interp; +#X text 245 1401 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1401 load; -#X text 245 1401 loads specified preset. Arguments are:; -#X obj 255 1424 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1424 IDX: preset index. Type: int.; -#X msg 110 1449 next; -#X text 245 1449 moves to next position until last cell is reached +#X msg 110 1428 load; +#X text 245 1428 loads specified preset. Arguments are:; +#X obj 255 1451 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1451 IDX: preset index. Type: int.; +#X msg 110 1476 next; +#X text 245 1476 moves to next position until last cell is reached (single mode only).; -#X msg 110 1489 pos; -#X text 245 1489 set UI element position. Arguments are:; -#X obj 255 1512 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1512 X: top left x-coord. Type: float.; -#X obj 255 1535 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1535 Y: top right y-coord. Type: float.; -#X msg 110 1560 prev; -#X text 245 1560 moves to previous position until first cell is reached +#X msg 110 1516 pos; +#X text 245 1516 set UI element position. Arguments are:; +#X obj 255 1539 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1539 X: top left x-coord. Type: float.; +#X obj 255 1562 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1562 Y: top right y-coord. Type: float.; +#X msg 110 1587 prev; +#X text 245 1587 moves to previous position until first cell is reached (single mode only).; -#X msg 110 1600 random; -#X text 245 1600 check random cells.; -#X msg 110 1627 reset; -#X text 245 1627 reset radio (only in checklist mode).; -#X msg 110 1654 set; -#X text 245 1654 sets radio without output. Arguments are:; -#X obj 255 1677 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1677 V: new value. Type: float.; -#X msg 110 1702 store; -#X text 245 1702 stores specified preset. Arguments are:; -#X obj 255 1725 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1725 IDX: preset index. Type: int.; -#X msg 110 1750 + STEP; -#X text 245 1750 moves several steps forward on a loop (single mode +#X msg 110 1627 random; +#X text 245 1627 select random cells. If called as [random move( moves +to another random cell (excluding the current one).; +#X msg 110 1667 reset; +#X text 245 1667 reset radio (only in checklist mode).; +#X msg 110 1694 set; +#X text 245 1694 sets radio without output. Arguments are:; +#X obj 255 1717 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1717 V: new value. Type: float.; +#X msg 110 1742 store; +#X text 245 1742 stores specified preset. Arguments are:; +#X obj 255 1765 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1765 IDX: preset index. Type: int.; +#X msg 110 1790 + STEP; +#X text 245 1790 moves several steps forward on a loop (single mode only).; -#X msg 110 1777 - STEP; -#X text 245 1777 moves several step backwards on a loop (single mode +#X msg 110 1817 - STEP; +#X text 245 1817 moves several step backwards on a loop (single mode only).; -#X obj 20 1814 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1819 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1854 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1859 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1820 1\.; -#X text 150 1820 *bang*; -#X text 245 1820 outputs current radio state.; -#X text 150 1840 *float*; -#X text 245 1840 set radio and output.; -#X text 150 1860 *list*; -#X text 245 1860 set radio and output (only in checklist mode).; -#X obj 20 1890 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1895 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 1860 1\.; +#X text 150 1860 *bang*; +#X text 245 1860 outputs current radio state.; +#X text 150 1880 *float*; +#X text 245 1880 set radio and output.; +#X text 150 1900 *list*; +#X text 245 1900 set radio and output (only in checklist mode).; +#X obj 20 1930 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1935 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1896 1\.; -#X text 245 1896 output value.; +#X text 110 1936 1\.; +#X text 245 1936 output value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1946 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1949 library: ceammc v0.9.4; -#X text 598 1961 see also:; -#X obj 672 1964 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1986 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1989 library: ceammc v0.9.6; +#X text 598 2001 see also:; +#X obj 672 2004 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.matrix] @url ui.matrix-help.pd; -#N canvas 10 1968 400 290 info 0; +#N canvas 10 2008 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.radio; #X text 10 76 category:; @@ -199,7 +203,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1968 pd info; +#X restore 10 2008 pd info; #X connect 7 0 12 0; #X connect 8 0 12 0; #X connect 9 0 13 0; @@ -207,7 +211,10 @@ https://github.com/uliss/pure-data; #X connect 11 0 13 0; #X connect 12 0 14 0; #X connect 13 0 15 0; -#X connect 16 0 20 0; -#X connect 17 0 20 0; -#X connect 18 0 20 0; -#X connect 19 0 20 0; \ No newline at end of file +#X connect 16 0 22 0; +#X connect 17 0 22 0; +#X connect 18 0 22 0; +#X connect 19 0 22 0; +#X connect 20 0 22 0; +#X connect 21 0 22 0; +#X connect 22 0 23 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.radio.pddoc b/ceammc/ext/doc/ui.radio.pddoc index 438c296afb..86a2680d11 100644 --- a/ceammc/ext/doc/ui.radio.pddoc +++ b/ceammc/ext/doc/ui.radio.pddoc @@ -41,8 +41,8 @@ number of items - check list mode. If true acts - as checklist + check list mode. If true acts as + checklist widget value (float or list) preset name for using with @@ -51,29 +51,32 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font slant - mouse events output - mode. If on outputs @mouse_down and @mouse_drag events + mouse events output mode. If on + outputs @mouse_down and @mouse_drag events sets radio without output new value reset radio (only in checklist mode) - check random cells + select random cells. If called as [random move( moves to another + random cell (excluding the current one) flips radio (only in checklist mode) moves to next position until last cell is reached (single mode only) @@ -114,12 +117,14 @@ | | | | | [ui.radio ] [ui.radio @mode 1] | | -[F] [ui.display @display_type 1] +[F] [ui.dt] -[+ 3( [- 1( [prev( [next( -| | | | -| | | | -[ui.radio ] +[+ 3( [- 1( [prev( [next( [random( [random move( +| | | | | | +| | | | | | +[ui.radio 4 ] +| +[ui.dt] ]]> diff --git a/ceammc/ext/doc/ui.rslider-help.pd b/ceammc/ext/doc/ui.rslider-help.pd index 32dadd093a..aae5f7a9cd 100644 --- a/ceammc/ext/doc/ui.rslider-help.pd +++ b/ceammc/ext/doc/ui.rslider-help.pd @@ -50,10 +50,10 @@ and [ui.mouse_filter]; -49933 0; #X msg 110 653 @high; #X text 245 653 Get/Set max (right) selection value. Type: float. Default -value: 0\.; +value: 0.6\.; #X msg 110 695 @low; #X text 245 695 Get/Set low (left) selection value. Type: float. Default -value: 0\.; +value: 0.4\.; #X msg 110 737 @max; #X text 245 737 Get/Set maximum allowed slider value. Type: float. Default value: 1\.; @@ -62,11 +62,10 @@ Default value: 1\.; Default value: 0\.; #X msg 110 821 @mouse_events; #X text 245 821 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 878 @range; #X text 245 878 (readonly) Get selected slider value. Type: float. -Default value: 0\. Min value: 0\.; +Default value: 0.2\. Min value: 0\.; #X msg 110 920 @receive; #X text 245 920 Get/Set receive source. Type: symbol. Default value: (null).; @@ -95,7 +94,7 @@ in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; value: left. Allowed values: left \, center \, right.; #X msg 110 1274 @label_inner; #X text 245 1274 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 1316 @label_margins; #X text 245 1316 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; @@ -106,85 +105,86 @@ top. Allowed values: left \, top \, right \, bottom.; #X text 245 1400 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; #X msg 110 1442 @fontname; -#X text 245 1442 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1471 @fontsize; -#X text 245 1471 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1513 @fontslant; -#X text 245 1513 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 1442 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1484 @fontsize; +#X text 245 1484 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1526 @fontslant; +#X text 245 1526 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1555 @fontweight; -#X text 245 1555 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1568 @fontweight; +#X text 245 1568 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1597 @pinned; -#X text 245 1597 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1639 @presetname; -#X text 245 1639 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1610 @pinned; +#X text 245 1610 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1652 @presetname; +#X text 245 1652 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1681 @size; -#X text 245 1681 Get/Set element size (width \, height pair). Type: +#X msg 110 1694 @size; +#X text 245 1694 Get/Set element size (width \, height pair). Type: list. Default value: 120 15\.; -#X obj 20 1733 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1738 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1746 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1751 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1773 clear; -#X text 245 1773 clears specified preset. Arguments are:; -#X obj 255 1796 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1796 IDX: preset index. Type: int.; -#X msg 110 1821 interp; -#X text 245 1821 interplolates between presets. Arguments are:; -#X obj 255 1844 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1844 IDX: preset fraction index. Type: float.; -#X msg 110 1869 load; -#X text 245 1869 loads specified preset. Arguments are:; -#X obj 255 1892 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1892 IDX: preset index. Type: int.; -#X msg 110 1917 pos; -#X text 245 1917 set UI element position. Arguments are:; -#X obj 255 1940 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1940 X: top left x-coord. Type: float.; -#X obj 255 1963 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1963 Y: top right y-coord. Type: float.; -#X msg 110 1988 set; -#X text 245 1988 sets slider value without output. Arguments are:; -#X obj 255 2011 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2011 V: new value. Type: float.; -#X msg 110 2036 store; -#X text 245 2036 stores specified preset. Arguments are:; -#X obj 255 2059 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2059 IDX: preset index. Type: int.; -#X obj 20 2094 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2099 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1786 clear; +#X text 245 1786 clears specified preset. Arguments are:; +#X obj 255 1809 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1809 IDX: preset index. Type: int.; +#X msg 110 1834 interp; +#X text 245 1834 interplolates between presets. Arguments are:; +#X obj 255 1857 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1857 IDX: preset fraction index. Type: float.; +#X msg 110 1882 load; +#X text 245 1882 loads specified preset. Arguments are:; +#X obj 255 1905 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1905 IDX: preset index. Type: int.; +#X msg 110 1930 pos; +#X text 245 1930 set UI element position. Arguments are:; +#X obj 255 1953 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1953 X: top left x-coord. Type: float.; +#X obj 255 1976 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1976 Y: top right y-coord. Type: float.; +#X msg 110 2001 set; +#X text 245 2001 sets slider value without output. Arguments are:; +#X obj 255 2024 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2024 V: new value. Type: float.; +#X msg 110 2049 store; +#X text 245 2049 stores specified preset. Arguments are:; +#X obj 255 2072 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2072 IDX: preset index. Type: int.; +#X obj 20 2107 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2112 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2100 1\.; -#X text 150 2100 *bang*; -#X text 245 2100 outputs current slider state.; -#X text 150 2120 *list*; -#X text 245 2120 set range value without output.; -#X obj 20 2150 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2155 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2113 1\.; +#X text 150 2113 *bang*; +#X text 245 2113 outputs current slider state.; +#X text 150 2133 *list*; +#X text 245 2133 set range value without output.; +#X obj 20 2163 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2168 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2156 1\.; -#X text 245 2156 output slider range as pair of values.; +#X text 110 2169 1\.; +#X text 245 2169 output slider range as pair of values.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2206 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2209 library: ceammc v0.9.4; -#X text 508 2221 see also:; -#X obj 582 2224 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2219 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2222 library: ceammc v0.9.6; +#X text 508 2234 see also:; +#X obj 582 2237 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#X obj 665 2224 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 665 2237 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.sliders] @url ui.sliders-help.pd; -#N canvas 10 2228 400 290 info 0; +#N canvas 10 2241 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.rslider; #X text 10 76 category:; @@ -203,7 +203,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2228 pd info; +#X restore 10 2241 pd info; #X connect 8 0 13 0; #X connect 10 0 13 0; #X connect 9 0 13 0; diff --git a/ceammc/ext/doc/ui.rslider.pddoc b/ceammc/ext/doc/ui.rslider.pddoc index cc8b490705..44925077c1 100644 --- a/ceammc/ext/doc/ui.rslider.pddoc +++ b/ceammc/ext/doc/ui.rslider.pddoc @@ -45,10 +45,11 @@ minimum allowed slider value maximum allowed slider value current slider value - low (left) selection value - max (right) selection value - selected - slider value + low (left) selection value + max (right) selection + value + + selected slider value preset name for using with [ui.preset] @@ -56,19 +57,21 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -77,8 +80,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.scope~-help.pd b/ceammc/ext/doc/ui.scope~-help.pd index f991ef0ed1..d6b91049e3 100644 --- a/ceammc/ext/doc/ui.scope~-help.pd +++ b/ceammc/ext/doc/ui.scope~-help.pd @@ -55,79 +55,77 @@ Default value: -1\.; #X msg 110 883 @refresh; #X text 245 883 Get/Set approximate refresh rate. Type: int. Units: ms. Default value: 40\. Range: 10\...1000\.; -#X msg 110 925 @send; -#X text 245 925 Get/Set send destination. Type: symbol. Default value: -(null).; -#X msg 110 967 @window; -#X text 245 967 Get/Set window size. Type: int. Default value: 2048\. +#X msg 110 925 @window; +#X text 245 925 Get/Set window size. Type: int. Default value: 2048\. Range: 512\...4096\.; -#X msg 110 1009 @active_color; -#X text 245 1009 Get/Set active color (list of red \, green \, blue +#X msg 110 967 @active_color; +#X text 245 967 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1051 @background_color; -#X text 245 1051 Get/Set element background color (list of red \, green +#X msg 110 1009 @background_color; +#X text 245 1009 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1108 @border_color; -#X text 245 1108 Get/Set border color (list of red \, green \, blue +#X msg 110 1066 @border_color; +#X text 245 1066 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1150 @fontname; -#X text 245 1150 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1179 @fontsize; -#X text 245 1179 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1221 @fontslant; -#X text 245 1221 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1108 @fontname; +#X text 245 1108 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1150 @fontsize; +#X text 245 1150 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1192 @fontslant; +#X text 245 1192 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1263 @fontweight; -#X text 245 1263 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1234 @fontweight; +#X text 245 1234 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1305 @pinned; -#X text 245 1305 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1347 @size; -#X text 245 1347 Get/Set element size (width \, height pair). Type: +#X msg 110 1276 @pinned; +#X text 245 1276 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1318 @size; +#X text 245 1318 Get/Set element size (width \, height pair). Type: list. Default value: 150 100\.; -#X obj 20 1399 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1404 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1370 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1375 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1439 freeze; -#X text 245 1439 stop/start processing. Arguments are:; -#X obj 255 1462 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1462 [V]: 1 - freeze \, 0 - unfreeze. Type: int. Allowed +#X msg 110 1410 freeze; +#X text 245 1410 stop/start processing. Arguments are:; +#X obj 255 1433 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1433 [V]: 1 - freeze \, 0 - unfreeze. Type: int. Allowed values: 0 \, 1\.; -#X msg 110 1502 pos; -#X text 245 1502 set UI element position. Arguments are:; -#X obj 255 1525 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1525 X: top left x-coord. Type: float.; -#X obj 255 1548 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1548 Y: top right y-coord. Type: float.; -#X msg 110 1573 scale; -#X text 245 1573 sets widget scale. Arguments are:; -#X obj 255 1596 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1596 [N]: 1 - normal scale \, 2 - range from -2\..2 (zoomout) +#X msg 110 1473 pos; +#X text 245 1473 set UI element position. Arguments are:; +#X obj 255 1496 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1496 X: top left x-coord. Type: float.; +#X obj 255 1519 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1519 Y: top right y-coord. Type: float.; +#X msg 110 1544 scale; +#X text 245 1544 sets widget scale. Arguments are:; +#X obj 255 1567 cnv 1 24 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1567 [N]: 1 - normal scale \, 2 - range from -2\..2 (zoomout) \, 0.1 - range from -0.1\..0.1 (zoomin). Type: float. Min value: 0\.; -#X obj 20 1646 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1651 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 20 1617 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1622 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1652 1\.; -#X text 245 1652 signal input.; +#X text 110 1623 1\.; +#X text 245 1623 signal input.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1702 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1705 library: ceammc v0.9.4; -#X text 548 1717 see also:; -#X obj 622 1720 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1673 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1676 library: ceammc v0.9.6; +#X text 548 1688 see also:; +#X obj 622 1691 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.spectroscope~] @url ui.spectroscope~-help.pd; -#N canvas 10 1724 400 290 info 0; +#N canvas 10 1695 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.scope~; #X text 10 76 category:; @@ -146,7 +144,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1724 pd info; +#X restore 10 1695 pd info; #X connect 5 0 8 0; #X connect 6 0 8 0; #X connect 7 0 8 0; diff --git a/ceammc/ext/doc/ui.scope~.pddoc b/ceammc/ext/doc/ui.scope~.pddoc index 7173d3988a..a58136f0f2 100644 --- a/ceammc/ext/doc/ui.scope~.pddoc +++ b/ceammc/ext/doc/ui.scope~.pddoc @@ -38,21 +38,22 @@ approximate refresh rate - send destination receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -70,7 +71,7 @@ top right y-coord - + signal input diff --git a/ceammc/ext/doc/ui.slider-help.pd b/ceammc/ext/doc/ui.slider-help.pd index cda29dfde5..200d0b67df 100644 --- a/ceammc/ext/doc/ui.slider-help.pd +++ b/ceammc/ext/doc/ui.slider-help.pd @@ -61,8 +61,8 @@ #X obj 20 737 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 772 @active_scale; -#X text 245 772 Get/Set if should draw active scale. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 772 Get/Set if should draw active scale. Type: bool. Default +value: 0\.; #X msg 110 814 @max; #X text 245 814 Get/Set maximum slider value. Type: float. Default value: 1\.; @@ -71,11 +71,10 @@ value: 1\.; value: 0\.; #X msg 110 872 @mode; #X text 245 872 Get/Set relative mode. Do not jump on click to value. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +Type: bool. Default value: 0\.; #X msg 110 914 @mouse_events; #X text 245 914 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 971 @receive; #X text 245 971 Get/Set receive source. Type: symbol. Default value: (null).; @@ -87,7 +86,7 @@ Default value: linear. Allowed values: linear \, log.; (null).; #X msg 110 1084 @show_value; #X text 245 1084 Get/Set show value (in horizontal mode only). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 1126 @value; #X text 245 1126 Get/Set current value. Type: float. Default value: 0\.; @@ -101,13 +100,13 @@ Type: int. Default value: 2\. Range: 0\...7\.; #X text 245 1239 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; #X msg 110 1281 @midi_control; -#X text 245 1281 Get/Set binded MIDI controller number. 0 means not -binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; +#X text 245 1281 Get/Set binded MIDI controller number. -1 means not +binded to any controller. Type: int. Default value: -1\. Range: -1\...127\.; #X msg 110 1338 @midi_pickup; #X text 245 1338 Get/Set pickup current value. If slider is binded to value \, first time you should pass over this value to make binding. It prevents from sudden value change on first control change. Type: -int. Default value: 1\. Allowed values: 0 \, 1\.; +bool. Default value: 1\.; #X msg 110 1410 @background_color; #X text 245 1410 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 @@ -131,7 +130,7 @@ blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; value: left. Allowed values: left \, center \, right.; #X msg 110 1706 @label_inner; #X text 245 1706 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; +bool. Default value: 0\.; #X msg 110 1748 @label_margins; #X text 245 1748 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; @@ -142,110 +141,111 @@ top. Allowed values: left \, top \, right \, bottom.; #X text 245 1832 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; #X msg 110 1874 @fontname; -#X text 245 1874 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1903 @fontsize; -#X text 245 1903 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1945 @fontslant; -#X text 245 1945 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 1874 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1916 @fontsize; +#X text 245 1916 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1958 @fontslant; +#X text 245 1958 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1987 @fontweight; -#X text 245 1987 Get/Set font weight. Type: symbol. Default value: +#X msg 110 2000 @fontweight; +#X text 245 2000 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 2029 @pinned; -#X text 245 2029 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 2071 @presetname; -#X text 245 2071 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 2042 @pinned; +#X text 245 2042 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 2084 @presetname; +#X text 245 2084 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 2113 @size; -#X text 245 2113 Get/Set element size (width \, height pair). Type: +#X msg 110 2126 @size; +#X text 245 2126 Get/Set element size (width \, height pair). Type: list. Default value: 15 120\.; -#X obj 20 2165 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2170 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 2178 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2183 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 2205 clear; -#X text 245 2205 clears specified preset. Arguments are:; -#X obj 255 2228 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2228 IDX: preset index. Type: int.; -#X msg 110 2253 interp; -#X text 245 2253 interplolates between presets. Arguments are:; -#X obj 255 2276 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2276 IDX: preset fraction index. Type: float.; -#X msg 110 2301 load; -#X text 245 2301 loads specified preset. Arguments are:; -#X obj 255 2324 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2324 IDX: preset index. Type: int.; -#X msg 110 2349 pos; -#X text 245 2349 set UI element position. Arguments are:; -#X obj 255 2372 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2372 X: top left x-coord. Type: float.; -#X obj 255 2395 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2395 Y: top right y-coord. Type: float.; -#X msg 110 2420 random; -#X text 245 2420 set slider to random value and output.; -#X msg 110 2447 set; -#X text 245 2447 sets slider value without output. Arguments are:; -#X obj 255 2470 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2470 V: new float value or 'random'. Type: atom.; -#X msg 110 2495 store; -#X text 245 2495 stores specified preset. Arguments are:; -#X obj 255 2518 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2518 IDX: preset index. Type: int.; -#X msg 110 2543 *; -#X text 245 2543 multiply slider value without output. Arguments are:; -#X obj 255 2566 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2566 V: multiplied value. Type: float.; -#X msg 110 2591 +; -#X text 245 2591 add value to slider without output. Arguments are:; -#X obj 255 2614 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2614 V: added value. Type: float.; -#X msg 110 2639 ++; -#X text 245 2639 increment slider value without output.; -#X msg 110 2666 -; -#X text 245 2666 subtract value from slider without output. Arguments +#X msg 110 2218 clear; +#X text 245 2218 clears specified preset. Arguments are:; +#X obj 255 2241 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2241 IDX: preset index. Type: int.; +#X msg 110 2266 interp; +#X text 245 2266 interplolates between presets. Arguments are:; +#X obj 255 2289 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2289 IDX: preset fraction index. Type: float.; +#X msg 110 2314 load; +#X text 245 2314 loads specified preset. Arguments are:; +#X obj 255 2337 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2337 IDX: preset index. Type: int.; +#X msg 110 2362 pos; +#X text 245 2362 set UI element position. Arguments are:; +#X obj 255 2385 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2385 X: top left x-coord. Type: float.; +#X obj 255 2408 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2408 Y: top right y-coord. Type: float.; +#X msg 110 2433 random; +#X text 245 2433 set slider to random value and output.; +#X msg 110 2460 set; +#X text 245 2460 sets slider value without output. Arguments are:; +#X obj 255 2483 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2483 V: new float value or 'random'. Type: atom.; +#X msg 110 2508 store; +#X text 245 2508 stores specified preset. Arguments are:; +#X obj 255 2531 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2531 IDX: preset index. Type: int.; +#X msg 110 2556 *; +#X text 245 2556 multiply slider value without output. Arguments are:; +#X obj 255 2579 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2579 V: multiplied value. Type: float.; +#X msg 110 2604 +; +#X text 245 2604 add value to slider without output. Arguments are:; +#X obj 255 2627 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2627 V: added value. Type: float.; +#X msg 110 2652 ++; +#X text 245 2652 increment slider value without output.; +#X msg 110 2679 -; +#X text 245 2679 subtract value from slider without output. Arguments are:; -#X obj 255 2689 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2689 V: subtracted value. Type: float.; -#X msg 110 2714 --; -#X text 245 2714 decrement slider value without output.; -#X msg 110 2741 /; -#X text 245 2741 divide slider value without output. Arguments are:; -#X obj 255 2764 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2764 V: denominator value. Type: float.; -#X obj 20 2799 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2804 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X obj 255 2702 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2702 V: subtracted value. Type: float.; +#X msg 110 2727 --; +#X text 245 2727 decrement slider value without output.; +#X msg 110 2754 /; +#X text 245 2754 divide slider value without output. Arguments are:; +#X obj 255 2777 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2777 V: denominator value. Type: float.; +#X obj 20 2812 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2817 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2805 1\.; -#X text 150 2805 *bang*; -#X text 245 2805 outputs current slider state.; -#X text 150 2825 *float*; -#X text 245 2825 set slider value and output.; -#X obj 20 2855 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2860 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2818 1\.; +#X text 150 2818 *bang*; +#X text 245 2818 outputs current slider state.; +#X text 150 2838 *float*; +#X text 245 2838 set slider value and output.; +#X obj 20 2868 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2873 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2861 1\.; -#X text 245 2861 output value.; +#X text 110 2874 1\.; +#X text 245 2874 output value.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2911 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2914 library: ceammc v0.9.4; -#X text 426 2926 see also:; -#X obj 500 2929 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2924 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2927 library: ceammc v0.9.6; +#X text 426 2939 see also:; +#X obj 500 2942 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider2d] @url ui.slider2d-help.pd; -#X obj 597 2929 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 597 2942 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.sliders] @url ui.sliders-help.pd; -#X obj 687 2929 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 687 2942 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.knob] @url ui.knob-help.pd; -#N canvas 10 2933 400 290 info 0; +#N canvas 10 2946 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.slider; #X text 10 76 category:; @@ -264,7 +264,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2933 pd info; +#X restore 10 2946 pd info; #X connect 8 0 19 0; #X connect 9 0 19 0; #X connect 10 0 19 0; diff --git a/ceammc/ext/doc/ui.slider.pddoc b/ceammc/ext/doc/ui.slider.pddoc index 3efc61b098..7d457a242c 100644 --- a/ceammc/ext/doc/ui.slider.pddoc +++ b/ceammc/ext/doc/ui.slider.pddoc @@ -45,20 +45,20 @@ minimum slider value maximum slider value - relative mode. Do not jump on - click to value + relative mode. Do not jump on click to + value binded MIDI channel. 0 means listen to all channels - - binded MIDI controller number. 0 means not binded to any controller. - pickup current value. - If slider is binded to value, first time you should pass over this value to make - binding. It prevents from sudden value change on first control change - if should draw active + + binded MIDI controller number. -1 means not binded to any controller. + pickup current value. If slider + is binded to value, first time you should pass over this value to make binding. It + prevents from sudden value change on first control change + if should draw active scale current value - show value (in - horizontal mode only) + show value (in horizontal mode + only) value position @@ -72,10 +72,10 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events knob color (list of red, green, blue values in 0-1 range) element @@ -84,9 +84,11 @@ of red, green, blue values in 0-1 range) value text color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -95,8 +97,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.slider2d-help.pd b/ceammc/ext/doc/ui.slider2d-help.pd index fb6ca02013..1965338ba4 100644 --- a/ceammc/ext/doc/ui.slider2d-help.pd +++ b/ceammc/ext/doc/ui.slider2d-help.pd @@ -4,178 +4,191 @@ #X text 637 50 2D slider widget; #X obj 1 1 cnv 5 765 40 empty empty ui.slider2d 20 20 0 20 -104026 -4096 0; +#X obj 587 13 ui.link @background_color 0.39216 0.39216 0.39216 @title +[ui.s2d] @url ui.slider2d-help.pd; #X obj 658 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.slider2d] @url ui.slider2d-help.pd; -#X obj 210 80 cnv 1 555 35 empty empty empty 17 7 0 10 -257983 -1 0; -#X text 215 80 2D sliders widget; -#X obj 309 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X msg 50 172 set 0 0; -#X msg 155 172 move 0.1 -0.1; -#X msg 309 172 @show_grid \$1; -#X obj 50 201 ui.slider2d @presetname s2d-help @size 100 100; -#X obj 50 316 ui.display @display_type 1; -#X text 50 345 [Shift+click] to save \, [Alt+click] to remove \, [click] -to activate; -#X obj 50 388 ui.preset @size 102 42; -#X obj 20 462 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 467 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X obj 309 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 50 147 set 0 0; +#X msg 155 147 move 0.1 -0.1; +#X msg 309 147 @show_grid \$1; +#X obj 50 176 ui.slider2d @size 100 100; +#X obj 50 291 ui.dt; +#X obj 20 340 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 345 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X msg 110 502 @mouse_events; -#X text 245 502 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 559 @receive; -#X text 245 559 Get/Set receive source. Type: symbol. Default value: +#X text 110 380 Left-click; +#X text 285 380 jump to coord under mouse pointer.; +#X text 110 400 Right-click; +#X text 285 400 opens popup menu for quick settings of position.; +#X text 110 420 Mouse-drag; +#X text 285 420 change slider coords.; +#X text 110 440 Mouse-wheel; +#X text 285 440 change Y coord.; +#X text 110 460 Mouse-wheel + ⇧; +#X text 285 460 change precisely Y coord.; +#X text 110 480 Mouse-wheel + ⌥; +#X text 285 480 change X coord.; +#X text 110 500 Mouse-wheel + ⌥+⇧; +#X text 285 500 change precisely X coord.; +#X obj 20 530 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 535 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 570 @mouse_events; +#X text 245 570 Get/Set mouse events output mode. If on outputs @mouse_down +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; +#X msg 110 627 @receive; +#X text 245 627 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 588 @send; -#X text 245 588 Get/Set send destination. Type: symbol. Default value: +#X msg 110 656 @send; +#X text 245 656 Get/Set send destination. Type: symbol. Default value: (null).; -#X msg 110 630 @show_grid; -#X text 245 630 Get/Set if show grid. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; -#X msg 110 672 @show_range; -#X text 245 672 Get/Set if show slider range. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 714 @x_left; -#X text 245 714 Get/Set leftmost x-value. Type: float. Default value: +#X msg 110 698 @show_grid; +#X text 245 698 Get/Set if show grid. Type: bool. Default value: 0\.; +#X msg 110 727 @show_range; +#X text 245 727 Get/Set if show slider range. Type: bool. Default value: +1\.; +#X msg 110 756 @x_left; +#X text 245 756 Get/Set leftmost x-value. Type: float. Default value: -1\.; -#X msg 110 743 @x_range; -#X text 245 743 (readonly) Get abs x-value range. Type: float. Default +#X msg 110 785 @x_range; +#X text 245 785 (readonly) Get abs x-value range. Type: float. Default value: 2\.; -#X msg 110 785 @x_right; -#X text 245 785 Get/Set rightmost x-value. Type: float. Default value: +#X msg 110 827 @x_right; +#X text 245 827 Get/Set rightmost x-value. Type: float. Default value: 1\.; -#X msg 110 814 @x_value; -#X text 245 814 Get/Set slider x-value. Type: float. Default value: +#X msg 110 856 @x_value; +#X text 245 856 Get/Set slider x-value. Type: float. Default value: 0\.; -#X msg 110 843 @y_bottom; -#X text 245 843 Get/Set bottom y-value. Type: float. Default value: +#X msg 110 885 @y_bottom; +#X text 245 885 Get/Set bottom y-value. Type: float. Default value: -1\.; -#X msg 110 872 @y_range; -#X text 245 872 (readonly) Get abs y-value range. Type: float. Default +#X msg 110 914 @y_range; +#X text 245 914 (readonly) Get abs y-value range. Type: float. Default value: 2\.; -#X msg 110 914 @y_top; -#X text 245 914 Get/Set top y-value. Type: float. Default value: 1\.; -#X msg 110 943 @y_value; -#X text 245 943 Get/Set slider y-value. Type: float. Default value: +#X msg 110 956 @y_top; +#X text 245 956 Get/Set top y-value. Type: float. Default value: 1\.; +#X msg 110 985 @y_value; +#X text 245 985 Get/Set slider y-value. Type: float. Default value: 0\.; -#X msg 110 972 @background_color; -#X text 245 972 Get/Set element background color (list of red \, green +#X msg 110 1014 @background_color; +#X text 245 1014 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1029 @border_color; -#X text 245 1029 Get/Set border color (list of red \, green \, blue +#X msg 110 1071 @border_color; +#X text 245 1071 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1071 @label_color; -#X text 245 1071 Get/Set label color in RGB format within 0-1 range +#X msg 110 1113 @label_color; +#X text 245 1113 Get/Set label color in RGB format within 0-1 range \, for example: 0.2 0.4 0.1\. Type: list. Default value: 0 0 0 1\.; -#X msg 110 1113 @label; -#X text 245 1113 Get/Set label text. Type: symbol. Default value: (null).; -#X msg 110 1142 @label_align; -#X text 245 1142 Get/Set label horizontal align. Type: symbol. Default +#X msg 110 1155 @label; +#X text 245 1155 Get/Set label text. Type: symbol. Default value: (null).; +#X msg 110 1184 @label_align; +#X text 245 1184 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1184 @label_inner; -#X text 245 1184 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1226 @label_margins; -#X text 245 1226 Get/Set label offset in pixels. Type: list. Default +#X msg 110 1226 @label_inner; +#X text 245 1226 Get/Set label position (1 - inner \, 0 - outer). Type: +bool. Default value: 0\.; +#X msg 110 1268 @label_margins; +#X text 245 1268 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1268 @label_side; -#X text 245 1268 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1310 @label_side; +#X text 245 1310 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1310 @label_valign; -#X text 245 1310 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1352 @label_valign; +#X text 245 1352 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1352 @fontname; -#X text 245 1352 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 1381 @fontsize; -#X text 245 1381 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 1423 @fontslant; -#X text 245 1423 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 1394 @fontname; +#X text 245 1394 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 1436 @fontsize; +#X text 245 1436 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 1478 @fontslant; +#X text 245 1478 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1465 @fontweight; -#X text 245 1465 Get/Set font weight. Type: symbol. Default value: +#X msg 110 1520 @fontweight; +#X text 245 1520 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1507 @pinned; -#X text 245 1507 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1549 @presetname; -#X text 245 1549 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1562 @pinned; +#X text 245 1562 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1604 @presetname; +#X text 245 1604 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1591 @size; -#X text 245 1591 Get/Set element size (width \, height pair). Type: +#X msg 110 1646 @size; +#X text 245 1646 Get/Set element size (width \, height pair). Type: list. Default value: 100 100\.; -#X obj 20 1643 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1648 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1698 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1703 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1683 clear; -#X text 245 1683 clears specified preset. Arguments are:; -#X obj 255 1706 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1706 IDX: preset index. Type: int.; -#X msg 110 1731 interp; -#X text 245 1731 interplolates between presets. Arguments are:; -#X obj 255 1754 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1754 IDX: preset fraction index. Type: float.; -#X msg 110 1779 load; -#X text 245 1779 loads specified preset. Arguments are:; -#X obj 255 1802 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1802 IDX: preset index. Type: int.; -#X msg 110 1827 move; -#X text 245 1827 move slider by given offset. Arguments are:; -#X obj 255 1850 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1850 X: x-offset. Type: float.; -#X obj 255 1873 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1873 Y: y-offset. Type: float.; -#X msg 110 1898 pos; -#X text 245 1898 set UI element position. Arguments are:; -#X obj 255 1921 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1921 X: top left x-coord. Type: float.; -#X obj 255 1944 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1944 Y: top right y-coord. Type: float.; -#X msg 110 1969 set; -#X text 245 1969 sets slider position without output. Arguments are:; -#X obj 255 1992 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1992 X: x-position. Type: float.; -#X obj 255 2015 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2015 Y: y-position. Type: float.; -#X msg 110 2040 store; -#X text 245 2040 stores specified preset. Arguments are:; -#X obj 255 2063 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 2063 IDX: preset index. Type: int.; -#X msg 110 2088 dump; -#X text 245 2088 dumps all object info to Pd console window.; -#X obj 20 2125 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2130 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1738 clear; +#X text 245 1738 clears specified preset. Arguments are:; +#X obj 255 1761 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1761 IDX: preset index. Type: int.; +#X msg 110 1786 interp; +#X text 245 1786 interplolates between presets. Arguments are:; +#X obj 255 1809 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1809 IDX: preset fraction index. Type: float.; +#X msg 110 1834 load; +#X text 245 1834 loads specified preset. Arguments are:; +#X obj 255 1857 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1857 IDX: preset index. Type: int.; +#X msg 110 1882 move; +#X text 245 1882 move slider by given offset. Arguments are:; +#X obj 255 1905 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1905 X: x-offset. Type: float.; +#X obj 255 1928 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1928 Y: y-offset. Type: float.; +#X msg 110 1953 pos; +#X text 245 1953 set UI element position. Arguments are:; +#X obj 255 1976 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1976 X: top left x-coord. Type: float.; +#X obj 255 1999 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1999 Y: top right y-coord. Type: float.; +#X msg 110 2024 set; +#X text 245 2024 sets slider position without output. Arguments are:; +#X obj 255 2047 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2047 X: x-position. Type: float.; +#X obj 255 2070 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2070 Y: y-position. Type: float.; +#X msg 110 2095 store; +#X text 245 2095 stores specified preset. Arguments are:; +#X obj 255 2118 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 2118 IDX: preset index. Type: int.; +#X msg 110 2143 dump; +#X text 245 2143 dumps all object info to Pd console window.; +#X obj 20 2180 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2185 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2131 1\.; -#X text 150 2131 *bang*; -#X text 245 2131 outputs slider position.; -#X text 150 2151 *list*; -#X text 245 2151 sets slider position and outputs it.; -#X obj 20 2181 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 2186 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 2186 1\.; +#X text 150 2186 *bang*; +#X text 245 2186 outputs slider position.; +#X text 150 2206 *list*; +#X text 245 2206 sets slider position and outputs it.; +#X obj 20 2236 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2241 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 2187 1\.; -#X text 245 2187 list output of two values: X and Y.; +#X text 110 2242 1\.; +#X text 245 2242 list output of two values: X and Y.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2237 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2240 library: ceammc v0.9.4; -#X text 523 2252 see also:; -#X obj 597 2255 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2292 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2295 library: ceammc v0.9.6; +#X text 523 2307 see also:; +#X obj 597 2310 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; -#X obj 680 2255 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 680 2310 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.polar] @url ui.polar-help.pd; -#N canvas 10 2259 400 290 info 0; +#N canvas 10 2314 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.slider2d; #X text 10 76 category:; @@ -194,9 +207,9 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2259 pd info; +#X restore 10 2314 pd info; +#X connect 5 0 8 0; #X connect 6 0 9 0; -#X connect 7 0 10 0; -#X connect 8 0 10 0; -#X connect 9 0 10 0; -#X connect 10 0 11 0; \ No newline at end of file +#X connect 7 0 9 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.slider2d.pddoc b/ceammc/ext/doc/ui.slider2d.pddoc index 80875cd17c..6dfe5696aa 100644 --- a/ceammc/ext/doc/ui.slider2d.pddoc +++ b/ceammc/ext/doc/ui.slider2d.pddoc @@ -12,29 +12,38 @@ ceammc ui ui slider + + ui.s2d + 0.1 ui.slider ui.polar - - 2D sliders widget - + + jump to coord under mouse pointer + opens popup menu for quick settings of + position + change slider coords + change Y coord + change precisely Y coord + change X coord + change precisely X coord + leftmost x-value rightmost x-value top y-value bottom y-value - abs x-value + abs x-value range - abs y-value + abs y-value range slider x-value slider y-value - if show slider - range - if show grid + if show slider range + if show grid preset name for using with [ui.preset] @@ -42,17 +51,19 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -61,8 +72,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align @@ -110,7 +121,7 @@ | [set 0 0( [move 0.1 -0.1( [@show_grid $1( | | | -[ui.slider2d @presetname=s2d-help ] +[ui.slider2d ] | | | @@ -118,12 +129,7 @@ | | | -[ui.display @display_type 1] - -/*[Shift+click] to save, [Alt+click] to remove, [click] to activate*/ - - -[ui.preset] +[ui.dt] ]]> diff --git a/ceammc/ext/doc/ui.sliders-help.pd b/ceammc/ext/doc/ui.sliders-help.pd index 4c9d192c20..697eb232c0 100644 --- a/ceammc/ext/doc/ui.sliders-help.pd +++ b/ceammc/ext/doc/ui.sliders-help.pd @@ -53,7 +53,7 @@ -49933 0; #X msg 110 716 @auto_count; #X text 245 716 Get/Set if set numbers of sliders equal to input list -length. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +length. Type: bool. Default value: 0\.; #X msg 110 758 @auto_range_mode; #X text 245 758 Get/Set if calculate @min/@max values automatically. Type: symbol. Default value: none. Allowed values: none \, both \, @@ -69,11 +69,10 @@ min \, max.; 0\.; #X msg 110 915 @mouse_events; #X text 245 915 Get/Set mouse events output mode. If on outputs @mouse_down -\, @mouse_up and @mouse_drag events. Type: int. Default value: 0\. -Allowed values: 0 \, 1\.; +\, @mouse_up and @mouse_drag events. Type: bool. Default value: 0\.; #X msg 110 972 @range; #X text 245 972 (readonly) Get value range. Type: float. Default value: -0\.; +1\.; #X msg 110 1001 @receive; #X text 245 1001 Get/Set receive source. Type: symbol. Default value: (null).; @@ -81,51 +80,52 @@ Allowed values: 0 \, 1\.; #X text 245 1030 Get/Set send destination. Type: symbol. Default value: (null).; #X msg 110 1072 @show_lines; -#X text 245 1072 Get/Set if show slider ruler lines. Type: int. Default -value: 0\. Allowed values: 0 \, 1\.; +#X text 245 1072 Get/Set if show slider ruler lines. Type: bool. Default +value: 0\.; #X msg 110 1114 @show_range; -#X text 245 1114 Get/Set if show slider range. Type: int. Default value: -1\. Allowed values: 0 \, 1\.; -#X msg 110 1156 @value; -#X text 245 1156 (readonly) Get sliders value. Type: list.; -#X msg 110 1185 @background_color; -#X text 245 1185 Get/Set element background color (list of red \, green +#X text 245 1114 Get/Set if show slider range. Type: bool. Default +value: 1\.; +#X msg 110 1143 @value; +#X text 245 1143 (readonly) Get sliders value. Type: list.; +#X msg 110 1172 @background_color; +#X text 245 1172 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 1242 @border_color; -#X text 245 1242 Get/Set border color (list of red \, green \, blue +#X msg 110 1229 @border_color; +#X text 245 1229 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 1284 @label_color; -#X text 245 1284 Get/Set label color in RGB format within 0-1 range +#X msg 110 1271 @label_color; +#X text 245 1271 Get/Set label color in RGB format within 0-1 range \, for example: 0.2 0.4 0.1\. Type: list. Default value: 0 0 0 1\.; -#X msg 110 1326 @select_color; -#X text 245 1326 Get/Set selection color (list of red \, green \, blue +#X msg 110 1313 @select_color; +#X text 245 1313 Get/Set selection color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 1368 @slider_color; -#X text 245 1368 Get/Set slider color (list of red \, green \, blue +#X msg 110 1355 @slider_color; +#X text 245 1355 Get/Set slider color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.75 0.75 0.75 1\.; -#X msg 110 1410 @label; -#X text 245 1410 Get/Set label text. Type: symbol. Default value: (null).; -#X msg 110 1439 @label_align; -#X text 245 1439 Get/Set label horizontal align. Type: symbol. Default +#X msg 110 1397 @label; +#X text 245 1397 Get/Set label text. Type: symbol. Default value: (null).; +#X msg 110 1426 @label_align; +#X text 245 1426 Get/Set label horizontal align. Type: symbol. Default value: left. Allowed values: left \, center \, right.; -#X msg 110 1481 @label_inner; -#X text 245 1481 Get/Set label position (1 - inner \, 0 - outer). Type: -int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1523 @label_margins; -#X text 245 1523 Get/Set label offset in pixels. Type: list. Default +#X msg 110 1468 @label_inner; +#X text 245 1468 Get/Set label position (1 - inner \, 0 - outer). Type: +bool. Default value: 0\.; +#X msg 110 1510 @label_margins; +#X text 245 1510 Get/Set label offset in pixels. Type: list. Default value: 0 0\.; -#X msg 110 1565 @label_side; -#X text 245 1565 Get/Set label snap side. Type: symbol. Default value: +#X msg 110 1552 @label_side; +#X text 245 1552 Get/Set label snap side. Type: symbol. Default value: top. Allowed values: left \, top \, right \, bottom.; -#X msg 110 1607 @label_valign; -#X text 245 1607 Get/Set label vertical align. Type: symbol. Default +#X msg 110 1594 @label_valign; +#X text 245 1594 Get/Set label vertical align. Type: symbol. Default value: top. Allowed values: top \, center \, bottom.; -#X msg 110 1649 @fontname; -#X text 245 1649 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 1636 @fontname; +#X text 245 1636 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 1678 @fontsize; #X text 245 1678 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; +4\...100\.; #X msg 110 1720 @fontslant; #X text 245 1720 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; @@ -134,7 +134,7 @@ Allowed values: roman \, italic.; normal. Allowed values: normal \, bold.; #X msg 110 1804 @pinned; #X text 245 1804 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +level. Type: bool. Default value: 0\.; #X msg 110 1846 @presetname; #X text 245 1846 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; @@ -239,7 +239,7 @@ are:; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; #X obj 1 3006 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 3009 library: ceammc v0.9.4; +#X text 10 3009 library: ceammc v0.9.6; #X text 515 3021 see also:; #X obj 589 3024 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.slider] @url ui.slider-help.pd; @@ -250,7 +250,7 @@ are:; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.sliders; #X text 10 76 category:; diff --git a/ceammc/ext/doc/ui.sliders.pddoc b/ceammc/ext/doc/ui.sliders.pddoc index 8f05861192..dbd9851b80 100644 --- a/ceammc/ext/doc/ui.sliders.pddoc +++ b/ceammc/ext/doc/ui.sliders.pddoc @@ -39,15 +39,15 @@ sliders minimal value maximum value - value range - sliders value - if set numbers of - sliders equal to input list length + value + range + sliders value + if set numbers of sliders equal to + input list length if calculate @min/@max values automatically - if show slider - range - if show slider ruler + if show slider range + if show slider ruler lines preset name for using with @@ -56,10 +56,10 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level - mouse events output - mode. If on outputs @mouse_down, @mouse_up and @mouse_drag events + pin mode. if 1 - put element to the + lowest level + mouse events output mode. If on + outputs @mouse_down, @mouse_up and @mouse_drag events slider color (list of red, green, blue values in 0-1 range) selection color (list @@ -68,9 +68,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -79,8 +81,8 @@ label text label color in RGB format within 0-1 range, for example: 0.2 0.4 0.1 - label position (1 - - inner, 0 - outer). + label position (1 - inner, 0 - + outer). label horizontal align diff --git a/ceammc/ext/doc/ui.spectroscope~-help.pd b/ceammc/ext/doc/ui.spectroscope~-help.pd index 70a6b76fb8..af495143fa 100644 --- a/ceammc/ext/doc/ui.spectroscope~-help.pd +++ b/ceammc/ext/doc/ui.spectroscope~-help.pd @@ -27,71 +27,78 @@ #X obj 20 449 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; #X msg 110 484 @log_scale; -#X text 245 484 Get/Set display in log scale. Type: int. Default value: -0\. Allowed values: 0 \, 1\.; -#X msg 110 526 @receive; -#X text 245 526 Get/Set receive source. Type: symbol. Default value: +#X text 245 484 Get/Set display in log scale. Type: bool. Default value: +0\.; +#X msg 110 513 @receive; +#X text 245 513 Get/Set receive source. Type: symbol. Default value: (null).; -#X msg 110 555 @refresh; -#X text 245 555 Get/Set approximate refresh rate. Type: int. Units: +#X msg 110 542 @refresh; +#X text 245 542 Get/Set approximate refresh rate. Type: int. Units: ms. Default value: 100\. Range: 20\...1000\.; -#X msg 110 597 @active_color; -#X text 245 597 Get/Set active color (list of red \, green \, blue +#X msg 110 584 @active_color; +#X text 245 584 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 639 @background_color; -#X text 245 639 Get/Set element background color (list of red \, green +#X msg 110 626 @background_color; +#X text 245 626 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 696 @border_color; -#X text 245 696 Get/Set border color (list of red \, green \, blue +#X msg 110 683 @border_color; +#X text 245 683 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 738 @label_color; -#X text 245 738 Get/Set label color (list of red \, green \, blue values +#X msg 110 725 @label_color; +#X text 245 725 Get/Set label color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 780 @scale_color; -#X text 245 780 Get/Set scale color (list of red \, green \, blue values +#X msg 110 767 @scale_color; +#X text 245 767 Get/Set scale color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 822 @fontname; -#X text 245 822 Get/Set fontname. Type: symbol. Default value: Helvetica.; +#X msg 110 809 @fontname; +#X text 245 809 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; #X msg 110 851 @fontsize; #X text 245 851 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 893 @pinned; -#X text 245 893 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 935 @size; -#X text 245 935 Get/Set element size (width \, height pair). Type: +4\...100\.; +#X msg 110 893 @fontslant; +#X text 245 893 Get/Set font slant. Type: symbol. Default value: roman. +Allowed values: roman \, italic.; +#X msg 110 935 @fontweight; +#X text 245 935 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 977 @pinned; +#X text 245 977 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1019 @size; +#X text 245 1019 Get/Set element size (width \, height pair). Type: list. Default value: 150 100\.; -#X obj 20 987 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 992 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1071 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1076 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1027 pos; -#X text 245 1027 set UI element position. Arguments are:; -#X obj 255 1050 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1050 X: top left x-coord. Type: float.; -#X obj 255 1073 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1073 Y: top right y-coord. Type: float.; -#X obj 20 1108 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1113 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1111 pos; +#X text 245 1111 set UI element position. Arguments are:; +#X obj 255 1134 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1134 X: top left x-coord. Type: float.; +#X obj 255 1157 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1157 Y: top right y-coord. Type: float.; +#X obj 20 1192 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1197 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1114 1\.; -#X text 245 1114 signal input.; +#X text 110 1198 1\.; +#X text 245 1198 signal input.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1164 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1167 library: ceammc v0.9.4; -#X text 598 1179 see also:; -#X obj 672 1182 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1248 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1251 library: ceammc v0.9.6; +#X text 598 1263 see also:; +#X obj 672 1266 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.scope~] @url ui.scope~-help.pd; -#N canvas 10 1186 400 290 info 0; +#N canvas 10 1270 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.spectroscope~; #X text 10 76 category:; @@ -110,7 +117,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1186 pd info; +#X restore 10 1270 pd info; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 8 0 15 0; diff --git a/ceammc/ext/doc/ui.spectroscope~.pddoc b/ceammc/ext/doc/ui.spectroscope~.pddoc index 25dfcfbda0..7e309e9cc8 100644 --- a/ceammc/ext/doc/ui.spectroscope~.pddoc +++ b/ceammc/ext/doc/ui.spectroscope~.pddoc @@ -29,14 +29,13 @@ approximate refresh rate - display in log - scale + display in log scale receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) label color (list of red, @@ -47,9 +46,15 @@ of red, green, blue values in 0-1 range) scale color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname + font + weight + font + slant diff --git a/ceammc/ext/doc/ui.tab-help.pd b/ceammc/ext/doc/ui.tab-help.pd index 751a9acb4e..9eb50cc8f8 100644 --- a/ceammc/ext/doc/ui.tab-help.pd +++ b/ceammc/ext/doc/ui.tab-help.pd @@ -6,18 +6,24 @@ #X obj 694 13 ui.link @background_color 0.39216 0.39216 0.39216 @title [ui.tab] @url ui.tab-help.pd; #X msg 50 118 append sqrt; -#X msg 213 118 set_item 0 white_noise; +#X msg 184 118 set_item 0 white_noise; +#X msg 472 118 next; #X msg 69 147 insert 0 saw; -#X msg 242 147 delete 1; +#X msg 232 147 delete 1; +#X msg 347 147 + 1; +#X msg 472 147 random move; #X msg 88 176 clear; #X floatatom 165 176 5 0 0 0 - - -; -#X obj 261 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +#X obj 251 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X msg 309 176 tri; -#X obj 395 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X msg 395 205 @toggle \$1; +#X msg 290 176 tri; +#X obj 347 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X msg 472 176 random; +#X msg 347 205 @toggle \$1; +#X msg 472 205 flip; #X obj 50 234 ui.tab @items sin tri @size 350 15; -#X obj 50 262 ui.d; +#X obj 50 262 print; +#X obj 126 262 ui.dt; #X obj 20 311 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 316 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -31,7 +37,7 @@ Type: int. Default value: 0\.; #X text 245 422 Get/Set list of tab names. Type: list.; #X msg 110 451 @orientation; #X text 245 451 Get/Set tab orientation. 1 is vertical \, 0 is horizontal. -Type: int. Default value: 0\. Allowed values: 0 \, 1\.; +Type: bool. Default value: 0\.; #X msg 110 493 @receive; #X text 245 493 Get/Set receive source. Type: symbol. Default value: (null).; @@ -43,133 +49,151 @@ Type: list.; (null).; #X msg 110 606 @toggle; #X text 245 606 Get/Set toggle mode. In toggle moe multiple selection -is possible. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 663 @active_color; -#X text 245 663 Get/Set active color (list of red \, green \, blue +is possible. Type: bool. Default value: 0\.; +#X msg 110 648 @active_color; +#X text 245 648 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; -#X msg 110 705 @background_color; -#X text 245 705 Get/Set element background color (list of red \, green +#X msg 110 690 @background_color; +#X text 245 690 Get/Set element background color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.93 0.93 0.93 1\.; -#X msg 110 762 @border_color; -#X text 245 762 Get/Set border color (list of red \, green \, blue +#X msg 110 747 @border_color; +#X text 245 747 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; -#X msg 110 804 @hover_color; -#X text 245 804 Get/Set hover color (list of red \, green \, blue values +#X msg 110 789 @hover_color; +#X text 245 789 Get/Set hover color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.5 0.5 0.5 1\.; -#X msg 110 846 @text_color; -#X text 245 846 Get/Set text color (list of red \, green \, blue values +#X msg 110 831 @text_color; +#X text 245 831 Get/Set text color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0 0 1\.; -#X msg 110 888 @fontname; -#X text 245 888 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 917 @fontsize; -#X text 245 917 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 959 @fontslant; -#X text 245 959 Get/Set font slant. Type: symbol. Default value: roman. +#X msg 110 873 @fontname; +#X text 245 873 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 915 @fontsize; +#X text 245 915 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 957 @fontslant; +#X text 245 957 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 1001 @fontweight; -#X text 245 1001 Get/Set font weight. Type: symbol. Default value: -normal. Allowed values: normal \, bold.; -#X msg 110 1043 @pinned; -#X text 245 1043 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1085 @presetname; -#X text 245 1085 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 999 @fontweight; +#X text 245 999 Get/Set font weight. Type: symbol. Default value: normal. +Allowed values: normal \, bold.; +#X msg 110 1041 @pinned; +#X text 245 1041 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1083 @presetname; +#X text 245 1083 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1127 @size; -#X text 245 1127 Get/Set element size (width \, height pair). Type: +#X msg 110 1125 @size; +#X text 245 1125 Get/Set element size (width \, height pair). Type: list. Default value: 100 15\.; -#X obj 20 1179 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1184 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1177 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1182 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1219 append; -#X text 245 1219 appends new tab item. Arguments are:; -#X obj 255 1242 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1242 ATOMS: item name. Type: list.; -#X msg 110 1267 clear; -#X text 245 1267 clears all tab menu.; -#X msg 110 1294 clear; -#X text 245 1294 clears specified preset. Arguments are:; -#X obj 255 1317 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1317 IDX: preset index. Type: int.; -#X msg 110 1342 delete; -#X text 245 1342 removes item from tab. Arguments are:; -#X obj 255 1365 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1365 IDX: removed item index. Type: int. Min value: 0\.; -#X msg 110 1390 insert; -#X text 245 1390 inserts new tab item before specified position. Arguments +#X msg 110 1217 append; +#X text 245 1217 appends new tab item. Arguments are:; +#X obj 255 1240 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1240 ATOMS: item name. Type: list.; +#X msg 110 1265 clear; +#X text 245 1265 clears all tab menu.; +#X msg 110 1292 clear; +#X text 245 1292 clears specified preset. Arguments are:; +#X obj 255 1315 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1315 IDX: preset index. Type: int.; +#X msg 110 1340 delete; +#X text 245 1340 removes item from tab. Arguments are:; +#X obj 255 1363 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1363 IDX: removed item index. Type: int. Min value: 0\.; +#X msg 110 1388 flip; +#X text 245 1388 flips radio (only in checklist mode).; +#X msg 110 1415 insert; +#X text 245 1415 inserts new tab item before specified position. Arguments are:; -#X obj 255 1428 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1428 IDX: item position. Type: int. Min value: 0\.; -#X obj 255 1451 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1451 ATOM: item name. Type: atom.; -#X msg 110 1476 interp; -#X text 245 1476 for this object acts as *load* \, no interpolation +#X obj 255 1453 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1453 IDX: item position. Type: int. Min value: 0\.; +#X obj 255 1476 cnv 1 37 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1476 ATOM: item name. Type: atom.; +#X msg 110 1501 interp; +#X text 245 1501 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1503 load; -#X text 245 1503 loads specified preset. Arguments are:; -#X obj 255 1526 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1526 IDX: preset index. Type: int.; -#X msg 110 1551 pos; -#X text 245 1551 set UI element position. Arguments are:; -#X obj 255 1574 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1574 X: top left x-coord. Type: float.; -#X obj 255 1597 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1597 Y: top right y-coord. Type: float.; -#X msg 110 1622 select; -#X text 245 1622 selects specified item in tab. Arguments are:; -#X obj 255 1645 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1645 IDX: item index. Type: int. Min value: 0\.; -#X msg 110 1670 set; -#X text 245 1670 silently sets tab state. Arguments are:; -#X obj 255 1693 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1693 IDX: item index. Type: int. Min value: 0\.; -#X msg 110 1718 set_item; -#X text 245 1718 renames tab item. Arguments are:; -#X obj 255 1741 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1741 IDX: item index. Type: int. Min value: 0\.; -#X obj 255 1764 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1764 ATOMS: item name. Type: list.; -#X msg 110 1789 store; -#X text 245 1789 stores specified preset. Arguments are:; -#X obj 255 1812 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1812 IDX: preset index. Type: int.; -#X obj 20 1847 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1852 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1528 load; +#X text 245 1528 loads specified preset. Arguments are:; +#X obj 255 1551 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1551 IDX: preset index. Type: int.; +#X msg 110 1576 next; +#X text 245 1576 moves to next item until last item is reached (single +mode only). Output new item.; +#X msg 110 1616 pos; +#X text 245 1616 set UI element position. Arguments are:; +#X obj 255 1639 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1639 X: top left x-coord. Type: float.; +#X obj 255 1662 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1662 Y: top right y-coord. Type: float.; +#X msg 110 1687 prev; +#X text 245 1687 moves to previous item until first item is reached +(single mode only). Output new item.; +#X msg 110 1727 random; +#X text 245 1727 select random item. If called [random move( moves +to random item (excluding the current one).; +#X msg 110 1767 select; +#X text 245 1767 selects specified item in tab. Arguments are:; +#X obj 255 1790 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1790 IDX: item index. Type: int. Min value: 0\.; +#X msg 110 1815 set; +#X text 245 1815 silently sets tab state. Arguments are:; +#X obj 255 1838 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1838 IDX: item index. Type: int. Min value: 0\.; +#X msg 110 1863 set_item; +#X text 245 1863 renames tab item. Arguments are:; +#X obj 255 1886 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1886 IDX: item index. Type: int. Min value: 0\.; +#X obj 255 1909 cnv 1 45 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1909 ATOMS: item name. Type: list.; +#X msg 110 1934 store; +#X text 245 1934 stores specified preset. Arguments are:; +#X obj 255 1957 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1957 IDX: preset index. Type: int.; +#X msg 110 1982 + STEP; +#X text 245 1982 moves several steps forward on a loop (single mode +only) \, output newly selected item.; +#X msg 110 2022 - STEP; +#X text 245 2022 moves several step backwards on a loop (single mode +only) \, output newly selected item.; +#X obj 20 2072 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2077 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1853 1\.; -#X text 150 1853 *bang*; -#X text 245 1853 in single mode outputs tab state as list: INDEX TAB_NAME. +#X text 110 2078 1\.; +#X text 150 2078 *bang*; +#X text 245 2078 in single mode outputs tab state as list: INDEX TAB_NAME. In toggle mode outputs current state like: @selected 0 1 0 1 0 etc. and list of two values: [CHANGED_IDX CHANGED_VALUE].; -#X text 150 1903 *float*; -#X text 245 1903 only in single mode: change tab by index and output +#X text 150 2128 *float*; +#X text 245 2128 only in single mode: change tab by index and output list: INDEX TAB_NAME.; -#X text 150 1938 *any*; -#X text 245 1938 selects item equal to given and output list: INDEX +#X text 150 2163 *any*; +#X text 245 2163 selects item equal to given and output list: INDEX TAB_NAME.; -#X obj 20 1968 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1973 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 2193 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 2198 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1974 1\.; -#X text 245 1974 output.; +#X text 110 2199 1\.; +#X text 245 2199 output.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 2024 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 2027 library: ceammc v0.9.4; -#X text 613 2039 see also:; -#X obj 687 2042 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 2249 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 2252 library: ceammc v0.9.6; +#X text 613 2264 see also:; +#X obj 687 2267 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.menu] @url ui.menu-help.pd; -#N canvas 10 2046 400 290 info 0; +#N canvas 10 2271 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.tab; #X text 10 76 category:; @@ -188,15 +212,21 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 2046 pd info; -#X connect 12 0 13 0; -#X connect 4 0 14 0; -#X connect 6 0 14 0; -#X connect 8 0 14 0; -#X connect 9 0 14 0; -#X connect 5 0 14 0; -#X connect 7 0 14 0; -#X connect 10 0 14 0; -#X connect 11 0 14 0; -#X connect 13 0 14 0; -#X connect 14 0 15 0; \ No newline at end of file +#X restore 10 2271 pd info; +#X connect 15 0 17 0; +#X connect 4 0 19 0; +#X connect 7 0 19 0; +#X connect 11 0 19 0; +#X connect 12 0 19 0; +#X connect 5 0 19 0; +#X connect 8 0 19 0; +#X connect 13 0 19 0; +#X connect 14 0 19 0; +#X connect 17 0 19 0; +#X connect 19 0 20 0; +#X connect 19 0 21 0; +#X connect 16 0 19 0; +#X connect 18 0 19 0; +#X connect 9 0 19 0; +#X connect 6 0 19 0; +#X connect 10 0 19 0; \ No newline at end of file diff --git a/ceammc/ext/doc/ui.tab.pddoc b/ceammc/ext/doc/ui.tab.pddoc index 9c9562a0dc..2462f66daf 100644 --- a/ceammc/ext/doc/ui.tab.pddoc +++ b/ceammc/ext/doc/ui.tab.pddoc @@ -19,15 +19,15 @@ list of tab names - toggle mode. In toggle moe - multiple selection is possible - tab orientation. 1 is - vertical, 0 is horizontal - list of selected items (in - toggle mode) - current selected index - (in switch mode) - number of + toggle mode. In toggle moe multiple + selection is possible + tab orientation. 1 is vertical, 0 + is horizontal + list of selected + items (in toggle mode) + current selected + index (in switch mode) + number of tabs preset name for using with @@ -36,8 +36,8 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) text color (list of red, @@ -48,9 +48,11 @@ background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font @@ -73,6 +75,17 @@ item index selects specified item in tab item index + select random item. If called [random move( moves to random item + (excluding the current one) + flips radio (only in checklist mode) + moves to next item until last item is reached (single mode only). + Output new item + moves to previous item until first item is reached (single mode + only). Output new item + moves several steps forward on a loop (single mode only), output + newly selected item + moves several step backwards on a loop (single mode only), output + newly selected item loads specified preset preset index @@ -103,17 +116,22 @@ x] +[X b->x] +[X c->x] +[X d->x] +[X e->x] ]]> diff --git a/ceammc/ext/doc/ui.toggle-help.pd b/ceammc/ext/doc/ui.toggle-help.pd index 040de1279c..d30755454e 100644 --- a/ceammc/ext/doc/ui.toggle-help.pd +++ b/ceammc/ext/doc/ui.toggle-help.pd @@ -51,8 +51,8 @@ value: 0\. Allowed values: 0 \, 1\.; #X text 245 623 Get/Set binded MIDI channel. 0 means listen to all channels. Type: int. Default value: 0\. Range: 0\...16\.; #X msg 110 665 @midi_control; -#X text 245 665 Get/Set binded MIDI controller number. 0 means not -binded to any controller. Type: int. Default value: 0\. Range: 0\...128\.; +#X text 245 665 Get/Set binded MIDI controller number. -1 means not +binded to any controller. Type: int. Default value: -1\. Range: -1\...127\.; #X msg 110 722 @active_color; #X text 245 722 Get/Set active color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; @@ -64,83 +64,84 @@ values in 0-1 range). Type: list. Default value: 0 0.75 1 1\.; #X text 245 821 Get/Set border color (list of red \, green \, blue values in 0-1 range). Type: list. Default value: 0.6 0.6 0.6 1\.; #X msg 110 863 @fontname; -#X text 245 863 Get/Set fontname. Type: symbol. Default value: Helvetica.; -#X msg 110 892 @fontsize; -#X text 245 892 Get/Set fontsize. Type: int. Default value: 11\. Range: -4\...11\.; -#X msg 110 934 @fontslant; -#X text 245 934 Get/Set font slant. Type: symbol. Default value: roman. +#X text 245 863 Get/Set fontname. Type: symbol. Default value: Helvetica. +Allowed values: Courier \, DejaVu \, Helvetica \, Monaco \, Times.; +#X msg 110 905 @fontsize; +#X text 245 905 Get/Set fontsize. Type: int. Default value: 11\. Range: +4\...100\.; +#X msg 110 947 @fontslant; +#X text 245 947 Get/Set font slant. Type: symbol. Default value: roman. Allowed values: roman \, italic.; -#X msg 110 976 @fontweight; -#X text 245 976 Get/Set font weight. Type: symbol. Default value: normal. +#X msg 110 989 @fontweight; +#X text 245 989 Get/Set font weight. Type: symbol. Default value: normal. Allowed values: normal \, bold.; -#X msg 110 1018 @pinned; -#X text 245 1018 Get/Set pin mode. if 1 - put element to the lowest -level. Type: int. Default value: 0\. Allowed values: 0 \, 1\.; -#X msg 110 1060 @presetname; -#X text 245 1060 Get/Set preset name for using with [ui.preset]. Type: +#X msg 110 1031 @pinned; +#X text 245 1031 Get/Set pin mode. if 1 - put element to the lowest +level. Type: bool. Default value: 0\.; +#X msg 110 1073 @presetname; +#X text 245 1073 Get/Set preset name for using with [ui.preset]. Type: symbol. Default value: (null).; -#X msg 110 1102 @size; -#X text 245 1102 Get/Set element size (width \, height pair). Type: +#X msg 110 1115 @size; +#X text 245 1115 Get/Set element size (width \, height pair). Type: list. Default value: 15 15\.; -#X obj 20 1154 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1159 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +#X obj 20 1167 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1172 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 -49933 0; -#X msg 110 1194 clear; -#X text 245 1194 clears specified preset. Arguments are:; -#X obj 255 1217 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1217 IDX: preset index. Type: int.; -#X msg 110 1242 interp; -#X text 245 1242 for this object acts as *load* \, no interpolation +#X msg 110 1207 clear; +#X text 245 1207 clears specified preset. Arguments are:; +#X obj 255 1230 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1230 IDX: preset index. Type: int.; +#X msg 110 1255 interp; +#X text 245 1255 for this object acts as *load* \, no interpolation performed.; -#X msg 110 1269 load; -#X text 245 1269 loads specified preset. Arguments are:; -#X obj 255 1292 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1292 IDX: preset index. Type: int.; -#X msg 110 1317 pos; -#X text 245 1317 set UI element position. Arguments are:; -#X obj 255 1340 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1340 X: top left x-coord. Type: float.; -#X obj 255 1363 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1363 Y: top right y-coord. Type: float.; -#X msg 110 1388 set; -#X text 245 1388 sets toggle state without output.; -#X msg 110 1415 store; -#X text 245 1415 stores specified preset. Arguments are:; -#X obj 255 1438 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 255 1438 IDX: preset index. Type: int.; -#X msg 110 1463 dump; -#X text 245 1463 dumps all object info to Pd console window.; -#X obj 20 1500 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1505 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 +#X msg 110 1282 load; +#X text 245 1282 loads specified preset. Arguments are:; +#X obj 255 1305 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1305 IDX: preset index. Type: int.; +#X msg 110 1330 pos; +#X text 245 1330 set UI element position. Arguments are:; +#X obj 255 1353 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1353 X: top left x-coord. Type: float.; +#X obj 255 1376 cnv 1 15 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1376 Y: top right y-coord. Type: float.; +#X msg 110 1401 set; +#X text 245 1401 sets toggle state without output.; +#X msg 110 1428 store; +#X text 245 1428 stores specified preset. Arguments are:; +#X obj 255 1451 cnv 1 29 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 1451 IDX: preset index. Type: int.; +#X msg 110 1476 dump; +#X text 245 1476 dumps all object info to Pd console window.; +#X obj 20 1513 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1518 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1506 1\.; -#X text 150 1506 *bang*; -#X text 245 1506 change toggle state.; -#X text 150 1526 *float*; -#X text 245 1526 if *0* given \, sets state to unchecked and outputs +#X text 110 1519 1\.; +#X text 150 1519 *bang*; +#X text 245 1519 change toggle state.; +#X text 150 1539 *float*; +#X text 245 1539 if *0* given \, sets state to unchecked and outputs @off_value. On any other number sets to checked state and outputs @on_value.; -#X obj 20 1586 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 1591 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X obj 20 1599 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 1604 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 1592 1\.; -#X text 245 1592 outputs @on_value or @off_value (by default 0 or 1).; +#X text 110 1605 1\.; +#X text 245 1605 outputs @on_value or @off_value (by default 0 or 1).; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title ui @url ceammc.ui-help.pd; -#X obj 1 1642 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1645 library: ceammc v0.9.4; -#X text 613 1657 see also:; -#X obj 687 1660 ui.link @background_color 0.78431 0.78431 0.78431 +#X obj 1 1655 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 1658 library: ceammc v0.9.6; +#X text 613 1670 see also:; +#X obj 687 1673 ui.link @background_color 0.78431 0.78431 0.78431 @title [ui.bang] @url ui.bang-help.pd; -#N canvas 10 1664 400 290 info 0; +#N canvas 10 1677 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 ui.toggle; #X text 10 76 category:; @@ -159,7 +160,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 1664 pd info; +#X restore 10 1677 pd info; #X connect 7 0 12 0; #X connect 8 0 13 0; #X connect 9 0 13 0; diff --git a/ceammc/ext/doc/ui.toggle.pddoc b/ceammc/ext/doc/ui.toggle.pddoc index 03642d468d..4d29377371 100644 --- a/ceammc/ext/doc/ui.toggle.pddoc +++ b/ceammc/ext/doc/ui.toggle.pddoc @@ -36,8 +36,8 @@ binded MIDI channel. 0 means listen to all channels - - binded MIDI controller number. 0 means not binded to any controller. + + binded MIDI controller number. -1 means not binded to any controller. preset name for using with [ui.preset] @@ -45,17 +45,19 @@ receive source element size (width, height pair) - pin mode. if 1 - put element - to the lowest level + pin mode. if 1 - put element to the + lowest level active color (list of red, green, blue values in 0-1 range) element background color (list of red, green, blue values in 0-1 range) border color (list of red, green, blue values in 0-1 range) - + + fontsize - fontname + fontname font weight font diff --git a/ceammc/ext/doc/vline2env-help.pd b/ceammc/ext/doc/vline2env-help.pd index ab01589296..3d47de4bb1 100644 --- a/ceammc/ext/doc/vline2env-help.pd +++ b/ceammc/ext/doc/vline2env-help.pd @@ -33,7 +33,7 @@ #X text 115 45 ::; #X obj 131 48 ui.link @title env @url ceammc.env-help.pd; #X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; +#X text 10 508 library: ceammc v0.9.6; #X text 505 520 see also:; #X obj 579 520 env->vline; #X obj 667 520 env->array; @@ -42,7 +42,7 @@ #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 vline2env; #X text 10 76 category:; diff --git a/ceammc/ext/doc/window-help.pd b/ceammc/ext/doc/window-help.pd index cb57fd7756..23e9349e80 100644 --- a/ceammc/ext/doc/window-help.pd +++ b/ceammc/ext/doc/window-help.pd @@ -46,14 +46,14 @@ -49933 0; #X text 110 477 1\.; #X text 150 477 symbol; -#X obj 246 478 cnv 1 40 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 477 NAME: window name: blackman \, blackman-harris \, flattop +#X obj 246 478 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 477 TYPE: window name: blackman \, blackman-harris \, flattop \, gauss \, hamming \, hann \, nuttall \, rect \, sine \, tri \, welch. Type: symbol.; #X text 110 512 2\.; #X text 150 512 int; -#X obj 246 513 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 512 SIZE: window size. Type: int. Min value: 16; +#X obj 246 513 cnv 1 85 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 512 SIZE(samp): window size. Type: int. Min value: 16; #X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; #X obj 20 547 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; @@ -111,13 +111,13 @@ Output window value at given index.; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; #X obj 1 1185 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 1188 library: ceammc v0.9.4; +#X text 10 1188 library: ceammc v0.9.6; #N canvas 10 1207 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 window; #X text 10 76 category:; diff --git a/ceammc/ext/doc/window.pddoc b/ceammc/ext/doc/window.pddoc index 1bac4674e2..3467846755 100644 --- a/ceammc/ext/doc/window.pddoc +++ b/ceammc/ext/doc/window.pddoc @@ -19,9 +19,9 @@ - window name: blackman, blackman-harris, flattop, + window name: blackman, blackman-harris, flattop, gauss, hamming, hann, nuttall, rect, sine, tri, welch - window size + window size Sets Blackman window type diff --git a/ceammc/ext/doc/xdac~-help.pd b/ceammc/ext/doc/xdac~-help.pd index 77d51f45f0..88f6ba286e 100644 --- a/ceammc/ext/doc/xdac~-help.pd +++ b/ceammc/ext/doc/xdac~-help.pd @@ -8,45 +8,67 @@ #X obj 50 118 xdac~; #X obj 126 118 xdac~ 1:6; #X obj 242 118 xdac~ 1:3 5 7:12; -#X obj 20 167 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 172 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 +#X obj 50 147 xdac~.map; +#X obj 20 196 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 201 cnv 5 115 26 empty empty mouse_events: 4 10 0 14 -262144 -49933 0; -#X text 110 207 Left-click; -#X text 285 207 opens audio properties dialog.; -#X obj 20 237 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 242 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +#X text 110 236 Left-click; +#X text 285 236 opens audio properties dialog.; +#X obj 20 266 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 271 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 -49933 0; -#X text 110 277 1\.; -#X text 150 277 list; -#X obj 246 278 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 277 OUTS: list of output channels: single channel number +#X text 110 306 1\.; +#X text 150 306 list; +#X obj 246 307 cnv 1 39 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 306 OUTS: list of output channels: single channel number or X:Y range \, that means from X channel to Y (including last one). If not specified - using 1 and 2 out channels. Type: list.; -#X obj 20 337 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 342 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X obj 20 366 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 371 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 406 @channels; +#X text 245 406 Get/Set list of mapped channels. Type: list. Default +value: 1 2\.; +#X obj 20 458 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 463 cnv 5 73 26 empty empty methods: 4 10 0 14 -262144 +-49933 0; +#X msg 110 498 reverse; +#X text 245 498 reverse output channels order.; +#X msg 110 525 rotate; +#X text 245 525 rotate output channels counter clockwise. Arguments +are:; +#X obj 255 548 cnv 1 14 23 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 255 548 N: number of rotation steps \, can be negative. Type: +int.; +#X msg 110 573 shuffle; +#X text 245 573 shuffle output channels order.; +#X msg 110 600 side2circle; +#X text 245 600 map left/right side pairs to counter clockwise layout.; +#X obj 20 637 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 642 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 343 1\.; -#X text 245 343 first specified channel.; -#X text 110 363 ....; -#X text 245 363 ... specified channel.; -#X text 110 383 n.; -#X text 245 383 n-th specified channel.; -#X obj 20 413 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 418 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 643 1\.; +#X text 245 643 first specified channel.; +#X text 110 663 ....; +#X text 245 663 ... specified channel.; +#X text 110 683 n.; +#X text 245 683 n-th specified channel.; +#X obj 20 713 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 718 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 505 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 508 library: ceammc v0.9.4; -#N canvas 10 527 400 290 info 0; +#X obj 1 759 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 762 library: ceammc v0.9.6; +#N canvas 10 781 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 xdac~; #X text 10 76 category:; @@ -65,4 +87,4 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 527 pd info; \ No newline at end of file +#X restore 10 781 pd info; \ No newline at end of file diff --git a/ceammc/ext/doc/xdac~.map.pd b/ceammc/ext/doc/xdac~.map.pd new file mode 100644 index 0000000000..acde1b7c77 --- /dev/null +++ b/ceammc/ext/doc/xdac~.map.pd @@ -0,0 +1,24 @@ +#N canvas 0 0 393 342 12; +#X obj 20 48 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 77 metro 500; +#X obj 20 106 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; +#X obj 20 135 sel 0 1; +#X obj 20 164 click~; +#X obj 154 164 click~; +#X obj 20 192 flt.resonbp~ 1000 40; +#X obj 154 221 flt.resonbp~ 4000 40; +#X obj 20 250 ui.hgain2~; +#X msg 192 250 @channels 2 1; +#X obj 20 293 xdac~ 1 2; +#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 3 1 5 0; +#X connect 4 0 6 0; +#X connect 6 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 10 0; +#X connect 8 1 10 1; +#X connect 9 0 10 0; +#X connect 5 0 7 0; diff --git a/ceammc/ext/doc/xdac~.pddoc b/ceammc/ext/doc/xdac~.pddoc index 0207ac098b..5b061e2f7a 100644 --- a/ceammc/ext/doc/xdac~.pddoc +++ b/ceammc/ext/doc/xdac~.pddoc @@ -24,6 +24,18 @@ range, that means from X channel to Y (including last one). If not specified - using 1 and 2 out channels + + list of mapped channels + + + reverse output channels order + shuffle output channels order + map left/right side pairs to counter clockwise + layout + rotate output channels counter clockwise + number of rotation steps, can be + negative + first specified channel @@ -40,6 +52,32 @@ + + +c] ]]> diff --git a/ceammc/ext/doc/xfade2~-help.pd b/ceammc/ext/doc/xfade2~-help.pd index 68266029b1..6b4de47c20 100644 --- a/ceammc/ext/doc/xfade2~-help.pd +++ b/ceammc/ext/doc/xfade2~-help.pd @@ -27,59 +27,67 @@ first and second signals \, [1-2) between second and third etc.; #X obj 246 421 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; #X text 245 420 N: number of signal inputs (multiplied 2). Type: int. Range: 1\...8; -#X obj 20 465 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 470 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 110 455 2\.; +#X text 150 455 float; +#X obj 246 456 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 455 X: crossfade init value. Valid value in [0\..N-1] range. +See @x property. Type: float. Range: 0\...1; +#X obj 20 500 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 505 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 505 @lin; -#X text 245 505 alias to @type lin.; -#X msg 110 534 @pow; -#X text 245 534 alias to @type pow.; -#X msg 110 563 @smooth; -#X text 245 563 Get/Set signal change smooth time. Type: float. Units: +#X msg 110 540 @lin; +#X text 245 540 alias to @type lin.; +#X msg 110 569 @pow; +#X text 245 569 alias to @type pow.; +#X msg 110 598 @smooth; +#X text 245 598 Get/Set signal change smooth time. Type: float. Units: ms. Default value: 20\. Min value: 1\.; -#X msg 110 605 @type; -#X text 245 605 Get/Set fade curve type: linear or power. Type: symbol. +#X msg 110 640 @type; +#X text 245 640 Get/Set fade curve type: linear or power. Type: symbol. Default value: pow. Allowed values: lin \, pow.; -#X obj 20 657 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 662 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 682 @x; +#X text 245 682 Get/Set crossfade property. Valid value in [0\..N-1] +range. Type: float. Default value: 0\. Range: 0\...1\.; +#X obj 20 734 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 739 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 663 1\.; -#X text 245 663 left input signal.; -#X text 110 683 2\.; -#X text 245 683 right input signal.; -#X text 110 703 ....; -#X text 245 703 left input signal.; -#X text 110 723 ....; -#X text 245 723 right input signal.; -#X text 110 743 n-1\.; -#X text 245 743 left input signal.; -#X text 110 763 n.; -#X text 245 763 right input signal.; -#X text 110 783 n+1\.; -#X text 150 783 *float*; -#X text 245 783 set crossfade value.; -#X obj 20 813 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 818 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 740 1\.; +#X text 245 740 left input signal.; +#X text 110 760 2\.; +#X text 245 760 right input signal.; +#X text 110 780 ....; +#X text 245 780 left input signal.; +#X text 110 800 ....; +#X text 245 800 right input signal.; +#X text 110 820 n-1\.; +#X text 245 820 left input signal.; +#X text 110 840 n.; +#X text 245 840 right input signal.; +#X text 110 860 n+1\.; +#X text 150 860 *float*; +#X text 245 860 set crossfade value.; +#X obj 20 890 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 895 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 819 1\.; -#X text 245 819 left output signal.; -#X text 110 839 2\.; -#X text 245 839 right output signal.; +#X text 110 896 1\.; +#X text 245 896 left output signal.; +#X text 110 916 2\.; +#X text 245 916 right output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 889 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 892 library: ceammc v0.9.4; -#X text 621 904 see also:; -#X obj 695 904 xfade~; -#N canvas 10 911 400 290 info 0; +#X obj 1 966 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 969 library: ceammc v0.9.6; +#X text 621 981 see also:; +#X obj 695 981 xfade~; +#N canvas 10 988 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 xfade2~; #X text 10 76 category:; @@ -98,7 +106,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 911 pd info; +#X restore 10 988 pd info; #X connect 9 0 12 0; #X connect 7 0 13 0; #X connect 10 0 13 1; diff --git a/ceammc/ext/doc/xfade2~.pddoc b/ceammc/ext/doc/xfade2~.pddoc index 50620cbf2b..cf2f462c1c 100644 --- a/ceammc/ext/doc/xfade2~.pddoc +++ b/ceammc/ext/doc/xfade2~.pddoc @@ -26,6 +26,8 @@ number of signal inputs (multiplied 2) + crossfade init value. Valid + value in [0..N-1] range. See @x property @@ -34,6 +36,8 @@ linear or power alias to @type lin alias to @type pow + crossfade + property. Valid value in [0..N-1] range. diff --git a/ceammc/ext/doc/xfade~-help.pd b/ceammc/ext/doc/xfade~-help.pd index 4d78a5d898..20a55c85dc 100644 --- a/ceammc/ext/doc/xfade~-help.pd +++ b/ceammc/ext/doc/xfade~-help.pd @@ -31,50 +31,58 @@ first and second signals \, [1-2) between second and third etc.; #X text 110 420 1\.; #X text 150 420 int; #X obj 246 421 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; -#X text 245 420 N: number of inputs. Type: int. Range: 1\...16; -#X obj 20 450 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 455 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +#X text 245 420 N: number of inputs. Type: int. Range: 2\...16; +#X text 110 440 2\.; +#X text 150 440 float; +#X obj 246 441 cnv 1 17 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 440 X: crossfade init value. Valid value in [0\..N-1] range. +See @x property. Type: float. Range: 0\...1; +#X obj 20 485 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 490 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 -49933 0; -#X msg 110 490 @lin; -#X text 245 490 alias to @type lin.; -#X msg 110 519 @pow; -#X text 245 519 alias to @type pow.; -#X msg 110 548 @smooth; -#X text 245 548 Get/Set signal change smooth time. Type: float. Units: +#X msg 110 525 @lin; +#X text 245 525 alias to @type lin.; +#X msg 110 554 @pow; +#X text 245 554 alias to @type pow.; +#X msg 110 583 @smooth; +#X text 245 583 Get/Set signal change smooth time. Type: float. Units: ms. Default value: 20\. Min value: 1\.; -#X msg 110 590 @type; -#X text 245 590 Get/Set fade curve type: linear or power. Type: symbol. +#X msg 110 625 @type; +#X text 245 625 Get/Set fade curve type: linear or power. Type: symbol. Default value: pow. Allowed values: lin \, pow.; -#X obj 20 642 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 647 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +#X msg 110 667 @x; +#X text 245 667 Get/Set crossfade property. Valid value in [0\..N-1] +range. Type: float. Default value: 0\. Range: 0\...1\.; +#X obj 20 719 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 724 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 0; -#X text 110 648 1\.; -#X text 245 648 input signal.; -#X text 110 668 ....; -#X text 245 668 input signal.; -#X text 110 688 n.; -#X text 245 688 input signal.; -#X text 110 708 4\.; -#X text 150 708 *float*; -#X text 245 708 set crossfade value.; -#X obj 20 738 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; -#X obj 20 743 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +#X text 110 725 1\.; +#X text 245 725 input signal.; +#X text 110 745 ....; +#X text 245 745 input signal.; +#X text 110 765 n.; +#X text 245 765 input signal.; +#X text 110 785 4\.; +#X text 150 785 *float*; +#X text 245 785 set crossfade value.; +#X obj 20 815 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 820 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 -49933 0; -#X text 110 744 1\.; -#X text 245 744 output signal.; +#X text 110 821 1\.; +#X text 245 821 output signal.; #X obj 10 48 ui.link @title index @url ../index-help.pd; #X text 51 45 ::; #X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; #X text 115 45 ::; #X obj 131 48 ui.link @title base @url ceammc.base-help.pd; -#X obj 1 794 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; -#X text 10 797 library: ceammc v0.9.4; -#N canvas 10 816 400 290 info 0; +#X obj 1 871 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 874 library: ceammc v0.9.6; +#N canvas 10 893 400 290 info 0; #X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; #X text 10 10 library:; #X text 120 10 ceammc; #X text 10 32 version:; -#X text 120 32 0.9.4; +#X text 120 32 0.9.6; #X text 10 54 object:; #X text 120 54 xfade~; #X text 10 76 category:; @@ -93,7 +101,7 @@ https://github.com/uliss/pure-data; #X obj 120 208 declare -lib ceammc; #X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; #X text 120 268 generated by pddoc; -#X restore 10 816 pd info; +#X restore 10 893 pd info; #X connect 8 0 12 0; #X connect 10 0 15 0; #X connect 12 0 17 0; diff --git a/ceammc/ext/doc/xfade~.pddoc b/ceammc/ext/doc/xfade~.pddoc index 1376a54420..de2b9f66ea 100644 --- a/ceammc/ext/doc/xfade~.pddoc +++ b/ceammc/ext/doc/xfade~.pddoc @@ -21,7 +21,9 @@ signals, [1-2) between second and third etc. - number of inputs + number of inputs + crossfade init value. Valid + value in [0..N-1] range. See @x property @@ -30,6 +32,8 @@ linear or power alias to @type lin alias to @type pow + crossfade + property. Valid value in [0..N-1] range. diff --git a/ceammc/ext/doc/z~-help.pd b/ceammc/ext/doc/z~-help.pd new file mode 100644 index 0000000000..b16adc6540 --- /dev/null +++ b/ceammc/ext/doc/z~-help.pd @@ -0,0 +1,84 @@ +#N canvas 0 0 785 555 12; +#X declare -lib ceammc; +#X obj 667 50 cnv 1 98 23 empty empty empty 17 7 0 10 -245760 -1 0; +#X text 667 50 sample delay; +#X obj 1 1 cnv 5 765 40 empty empty z~ 20 20 0 20 -104026 -4096 0; +#X obj 632 11 ceammc/z~; +#X obj 723 11 z~; +#X msg 50 118 bang; +#X obj 50 147 click~; +#X obj 146 176 z~ 1; +#X obj 50 205 *~ 0.5; +#X obj 146 205 *~ 0.5; +#X obj 50 234 plot.response~ 64; +#X obj 50 277 ui.plot~ @size 400 200 @xlabels 1 @ylabels 1 @xmin_grid +1 @ymin_ticks 0 @ymaj_ticks 0 @xmin_ticks 0 @ymin -2 @ymax 2 @n 2; +#X obj 50 493 ui.dsp~; +#X obj 20 542 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 547 cnv 5 90 26 empty empty arguments: 4 10 0 14 -262144 +-49933 0; +#X text 110 582 1\.; +#X text 150 582 int; +#X obj 246 583 cnv 1 62 20 empty empty empty 17 7 0 10 -245695 -1 0; +#X text 245 582 Z(samp): delay length. Type: int. Range: 0\...512; +#X obj 20 612 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 617 cnv 5 98 26 empty empty properties: 4 10 0 14 -262144 +-49933 0; +#X msg 110 652 @z; +#X text 245 652 Get/Set delay length. Type: int. Units: samp. Default +value: 1\. Range: 0\...512\.; +#X obj 20 704 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 709 cnv 5 64 26 empty empty inlets: 4 10 0 14 -262144 -49933 +0; +#X text 110 710 1\.; +#X text 245 710 input signal.; +#X text 110 730 2\.; +#X text 150 730 *int*; +#X text 245 730 set delay length.; +#X obj 20 760 cnv 1 745 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X obj 20 765 cnv 5 73 26 empty empty outlets: 4 10 0 14 -262144 +-49933 0; +#X text 110 766 1\.; +#X text 245 766 output signal.; +#X obj 10 48 ui.link @title index @url ../index-help.pd; +#X text 51 45 ::; +#X obj 67 48 ui.link @title ceammc @url ceammc-help.pd; +#X text 115 45 ::; +#X obj 131 48 ui.link @title base @url ceammc.base-help.pd; +#X obj 1 816 cnv 5 765 48 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 10 819 library: ceammc v0.9.6; +#N canvas 10 838 400 290 info 0; +#X obj 1 1 cnv 1 107 287 empty empty empty 17 7 0 10 -183085 -1 0; +#X text 10 10 library:; +#X text 120 10 ceammc; +#X text 10 32 version:; +#X text 120 32 0.9.6; +#X text 10 54 object:; +#X text 120 54 z~; +#X text 10 76 category:; +#X text 120 76 base; +#X text 10 98 since:; +#X text 120 98 0.9.5; +#X text 10 120 authors:; +#X text 120 120 Serge Poltavsky; +#X text 10 142 license:; +#X text 120 142 GPL3 or later; +#X text 10 164 keywords:; +#X text 120 164 delay \, z; +#X text 10 186 website:; +#X obj 120 189 ui.link @title https://github.com/uliss/pure-data @url +https://github.com/uliss/pure-data; +#X obj 120 208 declare -lib ceammc; +#X obj 120 268 cnv 1 270 1 empty empty empty 17 7 0 10 -203890 -1 0; +#X text 120 268 generated by pddoc; +#X restore 10 838 pd info; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 6 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 10 1 11 1; +#X connect 10 2 11 2; +#X connect 5 0 10 1; \ No newline at end of file diff --git a/ceammc/ext/doc/z~.pddoc b/ceammc/ext/doc/z~.pddoc new file mode 100644 index 0000000000..759b6ee06e --- /dev/null +++ b/ceammc/ext/doc/z~.pddoc @@ -0,0 +1,74 @@ + + + + z~ + + + Serge Poltavsky + + sample delay + GPL3 or later + ceammc + base + delay z + 0.9.5 + + ceammc/z~ + + + + delay + length + + + + delay length + + + + input signal + + + set delay length + + + + output signal + + + +b:1] +#z @size 400 200 @xlabels 1 @ylabels 1 @xmin_grid 1 @ymin_ticks 0 @ymaj_ticks 0 @xmin_ticks 0 @ymin -2 @ymax 2 @n 2 +]]> + + + + diff --git a/ceammc/ext/extra_objects.txt b/ceammc/ext/extra_objects.txt index f374880ef2..3036d4d777 100644 --- a/ceammc/ext/extra_objects.txt +++ b/ceammc/ext/extra_objects.txt @@ -200,7 +200,9 @@ gflt.bpf24~ gflt.eq10~ gflt.eq_peak_cq~ gflt.eq_peak~ +gflt.fb_comb~ gflt.fbank5x1~ +gflt.ff_comb~ gflt.highshelf~ gflt.hpf12~ gflt.hpf24~ @@ -210,10 +212,13 @@ gflt.lpf24~ gflt.moog_vcf~ gflt.notch~ gflt.resonbp~ +gflt.resonhp~ +gflt.resonlp~ gflt_fb_comb~ gflt_ff_comb~ gfx.bitdown~ gfx.chorus~ +gfx.dattorro~ gfx.distortion1~ gfx.distortion2~ gfx.distortion3~ @@ -227,17 +232,20 @@ gfx.freeverb2~ gfx.freeverb~ gfx.granulator~ gfx.greyhole~ +gfx.jcrev~ gfx.pitchshift~ gfx.recho~ +gfx.satrev~ gfx.sdelay~ gfx.secho~ gfx.tapiir~ gfx.vocoder~ gfx.wahwah~ gfx.zita_rev1~ -gfx_reverb_duck~ gfx_room~ gfx_shimmer~ +gnoise.chua~ +gnoise.colored~ gnoise.crackle~ gnoise.lfreq0~ gnoise.lfreq~ @@ -246,6 +254,7 @@ gspat.pan8~ gspat.zita8~ gsynth.birds~ gsynth.church_bell~ +gsynth.clap~ gsynth.dubdub~ gsynth.dx7~ gsynth.eguitar~ @@ -254,6 +263,8 @@ gsynth.french_bell~ gsynth.german_bell~ gsynth.glass_harm~ gsynth.harpsichord~ +gsynth.hat~ +gsynth.kick2~ gsynth.kick~ gsynth.ks~ gsynth.marimba~ @@ -264,3 +275,5 @@ gsynth.risset_tone~ gsynth.russian_bell~ gsynth.snare~ gsynth.standard_bell~ +gsynth.voice_fofc~ +gsynth.voice_fofs~ diff --git a/ceammc/ext/src/CMakeLists.txt b/ceammc/ext/src/CMakeLists.txt index 59cc335a01..c4d7810fc5 100644 --- a/ceammc/ext/src/CMakeLists.txt +++ b/ceammc/ext/src/CMakeLists.txt @@ -81,7 +81,6 @@ add_subdirectory(path) add_subdirectory(preset) add_subdirectory(proto) add_subdirectory(random) -add_subdirectory(rtmidi) add_subdirectory(samp) add_subdirectory(spat) add_subdirectory(string) diff --git a/ceammc/ext/src/an/CMakeLists.txt b/ceammc/ext/src/an/CMakeLists.txt index a26aceedf4..eb943bf9c3 100644 --- a/ceammc/ext/src/an/CMakeLists.txt +++ b/ceammc/ext/src/an/CMakeLists.txt @@ -11,6 +11,7 @@ ceammc_an_external(aubio_onset) ceammc_an_external(aubio_onset_tilde) ceammc_an_external(aubio_tempo_tilde) ceammc_an_external(pitchtrack) +ceammc_an_external(zero_tilde) add_library(ceammc_analyze STATIC ${ANALYZE_SOURCES}) target_include_directories(ceammc_analyze diff --git a/ceammc/ext/src/an/an_aubio_onset.cpp b/ceammc/ext/src/an/an_aubio_onset.cpp index ce321b3d6f..ba39cb24ce 100644 --- a/ceammc/ext/src/an/an_aubio_onset.cpp +++ b/ceammc/ext/src/an/an_aubio_onset.cpp @@ -231,16 +231,6 @@ AtomList AubioOnset::propArray() const return AtomList(array_name_); } -void AubioOnset::propSetArray(const AtomList& l) -{ - if (l.empty() || !l[0].isSymbol()) { - OBJ_ERR << "array name required"; - return; - } - - setArray(l[0].asSymbol()); -} - void AubioOnset::saveSteadyProperties() { threshold_->save(); diff --git a/ceammc/ext/src/an/an_aubio_onset.h b/ceammc/ext/src/an/an_aubio_onset.h index d042f6a3c3..c23e6f0c9f 100644 --- a/ceammc/ext/src/an/an_aubio_onset.h +++ b/ceammc/ext/src/an/an_aubio_onset.h @@ -33,7 +33,6 @@ class AubioOnset : public BaseObject { private: AtomList propArray() const; - void propSetArray(const AtomList& l); void resetAubioOnset(uint_t sr); void saveSteadyProperties(); void restoreSteadyProperties(); diff --git a/ceammc/ext/src/an/an_aubio_onset_tilde.cpp b/ceammc/ext/src/an/an_aubio_onset_tilde.cpp index 0100ee6c36..7220cafb7f 100644 --- a/ceammc/ext/src/an/an_aubio_onset_tilde.cpp +++ b/ceammc/ext/src/an/an_aubio_onset_tilde.cpp @@ -152,12 +152,11 @@ void AubioOnsetTilde::initDone() }); in_.reset(new_fvec(hop_size_->value())); - out_.reset(new_fvec(1)); } void AubioOnsetTilde::processBlock(const t_sample** in, t_sample** /*out*/) { - if (!in_ || !out_ || !onset_ || !active_) + if (!in_ || !onset_ || !active_) return; const auto BS = blockSize(); @@ -169,8 +168,8 @@ void AubioOnsetTilde::processBlock(const t_sample** in, t_sample** /*out*/) dsp_pos_++; } else { /* block loop */ - aubio_onset_do(onset_.get(), in_.get(), out_.get()); - if (fvec_get_sample(out_.get(), 0) > 0) { + aubio_onset_do(onset_.get(), in_.get(), &out_.vec()); + if (out_.value() > 0) { last_ms_ = aubio_onset_get_last_ms(onset_.get()); tick_.delay(0); } diff --git a/ceammc/ext/src/an/an_aubio_onset_tilde.h b/ceammc/ext/src/an/an_aubio_onset_tilde.h index d1e20ba711..c407a1cf55 100644 --- a/ceammc/ext/src/an/an_aubio_onset_tilde.h +++ b/ceammc/ext/src/an/an_aubio_onset_tilde.h @@ -15,8 +15,8 @@ #define AN_AUBIO_ONSET_TILDE_H #include "aubio_base.h" -#include "ceammc_property_callback.h" #include "ceammc_clock.h" +#include "ceammc_property_callback.h" #include "ceammc_property_enum.h" #include "ceammc_sound_external.h" @@ -34,7 +34,8 @@ class AubioOnsetTilde : public SoundExternal { int dsp_pos_; t_float last_ms_; - FVecPtr in_, out_; + FVecPtr in_; + FVec1 out_; OnsetPtr onset_; ClockMemberFunction tick_; diff --git a/ceammc/ext/src/an/an_pitchtrack.cpp b/ceammc/ext/src/an/an_pitchtrack.cpp index d993a160a1..4ae42470c4 100644 --- a/ceammc/ext/src/an/an_pitchtrack.cpp +++ b/ceammc/ext/src/an/an_pitchtrack.cpp @@ -86,4 +86,6 @@ void setup_an_pitchtrack() { SoundExternalFactory obj("an.pitchtrack~"); obj.addAlias("helmholtz~"); + + obj.setXletsInfo({ "input signal" }, { "output signal", "float: freq in hz", "float: fidelity" }); } diff --git a/ceammc/ext/src/an/an_rms.cpp b/ceammc/ext/src/an/an_rms.cpp index da74359616..d9f20a227e 100644 --- a/ceammc/ext/src/an/an_rms.cpp +++ b/ceammc/ext/src/an/an_rms.cpp @@ -21,7 +21,7 @@ class AnRms : public faust_an_rms_tilde { AnRms(const PdArgs& args) : faust_an_rms_tilde(args) { - static t_symbol* SYM_PROP_PERIOD = gensym("@period"); + auto SYM_PROP_PERIOD = gensym("@period"); bindPositionalArgsToProps({ SYM_PROP_PERIOD }); } diff --git a/ceammc/ext/src/an/an_rms.h b/ceammc/ext/src/an/an_rms.h index 501f0e0679..45d824a155 100644 --- a/ceammc/ext/src/an/an_rms.h +++ b/ceammc/ext/src/an/an_rms.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "an_rms" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn an_rms -scn an_rms_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __an_rms_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN an_rms_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN an_rms_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class an_rms_dsp { +class FAUST_API an_rms_dsp { public: @@ -162,7 +247,7 @@ class an_rms_dsp { * Generic DSP decorator. */ -class decorator_dsp : public an_rms_dsp { +class FAUST_API decorator_dsp : public an_rms_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public an_rms_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END an_rms_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in an_rms_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct an_rms : public an_rms_dsp { #include #include -static float an_rms_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS an_rms #endif @@ -562,6 +636,16 @@ static float an_rms_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float an_rms_faustpower2_f(float value) { + return value * value; +} + class an_rms : public an_rms_dsp { private: @@ -569,7 +653,7 @@ class an_rms : public an_rms_dsp { int fSampleRate; float fConst0; FAUSTFLOAT fHslider0; - int IOTA; + int IOTA0; float fRec0[262144]; public: @@ -582,12 +666,12 @@ class an_rms : public an_rms_dsp { m->declare("analyzers.lib/rms_envelope_rect:author", "Dario Sanfilippo and Julius O. Smith III"); m->declare("analyzers.lib/rms_envelope_rect:copyright", "Copyright (C) 2020 Dario Sanfilippo and 2003-2020 by Julius O. Smith III "); m->declare("analyzers.lib/rms_envelope_rect:license", "MIT-style STK-4.3 license"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn an_rms -scn an_rms_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "an_rms.dsp"); m->declare("filters.lib/avg_rect:author", "Dario Sanfilippo and Julius O. Smith III"); m->declare("filters.lib/avg_rect:copyright", "Copyright (C) 2020 Dario Sanfilippo and 2003-2020 by Julius O. Smith III "); @@ -620,16 +704,16 @@ class an_rms : public an_rms_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (0.00100000005f * std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 0.001f * std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(200.0f); + fHslider0 = FAUSTFLOAT(2e+02f); } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 262144); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 262144; l0 = l0 + 1) { fRec0[l0] = 0.0f; } } @@ -654,21 +738,21 @@ class an_rms : public an_rms_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("an_rms"); - ui_interface->declare(&fHslider0, "units", "ms"); - ui_interface->addHorizontalSlider("period", &fHslider0, FAUSTFLOAT(200.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->declare(&fHslider0, "unit", "ms"); + ui_interface->addHorizontalSlider("period", &fHslider0, FAUSTFLOAT(2e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = std::rint((fConst0 * float(fHslider0))); - float fSlow1 = (1.0f / fSlow0); + float fSlow0 = std::rint(fConst0 * float(fHslider0)); + float fSlow1 = 1.0f / fSlow0; int iSlow2 = int(std::max(0.0f, fSlow0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[(IOTA & 262143)] = (fRec0[((IOTA - 1) & 262143)] + an_rms_faustpower2_f(float(input0[i0]))); - output0[i0] = FAUSTFLOAT(std::sqrt((fSlow1 * (fRec0[((IOTA - 0) & 262143)] - fRec0[((IOTA - iSlow2) & 262143)])))); - IOTA = (IOTA + 1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[IOTA0 & 262143] = fRec0[(IOTA0 - 1) & 262143] + an_rms_faustpower2_f(float(input0[i0])); + output0[i0] = FAUSTFLOAT(std::sqrt(fSlow1 * (fRec0[IOTA0 & 262143] - fRec0[(IOTA0 - iSlow2) & 262143]))); + IOTA0 = IOTA0 + 1; } } diff --git a/ceammc/ext/src/an/an_zero_tilde.cpp b/ceammc/ext/src/an/an_zero_tilde.cpp new file mode 100644 index 0000000000..839cba895d --- /dev/null +++ b/ceammc/ext/src/an/an_zero_tilde.cpp @@ -0,0 +1,154 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "an_zero_tilde.h" +#include "ceammc_crc32.h" +#include "ceammc_factory.h" + +#include + +CEAMMC_DEFINE_SYM_HASH(count) +CEAMMC_DEFINE_HASH(rate) +CEAMMC_DEFINE_HASH(freq) + +ZeroCrossingTilde::ZeroCrossingTilde(const PdArgs& args) + : SoundExternal(args) + , buffer_size_(nullptr) + , mode_(nullptr) + , out_(0) + , t_(0) +{ + buffer_size_ = new IntProperty("@bs", 1024); + buffer_size_->setInitOnly(); + buffer_size_->checkClosedRange(1, 1024 * 64); + buffer_size_->setUnitsSamp(); + addProperty(buffer_size_); + + mode_ = new SymbolEnumProperty("@mode", { str_count, str_rate, str_freq }); + addProperty(mode_); + + createCbListProperty( + "@clock", + [this]() -> AtomList { + return AtomList(crc32_hash(mode_->value()) == hash_count && buffer_size_->value() == 1 ? 1.0 : 0.0); + }, + [this](const AtomListView&) -> bool { + mode_->setValue(sym_count()); + buffer_size_->setValue(1); + return true; } // + ) + ->setInitOnly(); + + createSignalOutlet(); +} + +void ZeroCrossingTilde::initDone() +{ + buf_.reserve(buffer_size_->value() + 1); + buf_.push_back(0); +} + +void ZeroCrossingTilde::setupDSP(t_signal** s) +{ + SoundExternal::setupDSP(s); +} + +void ZeroCrossingTilde::processBlock(const t_sample** in, t_sample** out) +{ + const size_t bs = blockSize(); + const size_t bufSize = buffer_size_->value() + 1; + const t_sample nyqfreq = samplerate() / 2; + + switch (crc32_hash(mode_->value())) { + case hash_count: // output zero crossing count on block borders + + for (size_t i = 0; i < bs; i++) { + auto v = in[0][i]; + + if (buf_.size() < bufSize) + buf_.push_back(v); + + // not else(!) + if (buf_.size() == bufSize) { + auto b = buf_.back(); + out_ = zeroCrossingCount(); + buf_.clear(); + buf_.push_back(b); + } + + out[0][i] = out_; + } + + break; + + case hash_rate: + + for (size_t i = 0; i < bs; i++) { + auto v = in[0][i]; + + if (buf_.size() < bufSize) + buf_.push_back(v); + + // not else(!) + if (buf_.size() == bufSize) { + auto b = buf_.back(); + out_ = zeroCrossingCount() / (buf_.size() - 1); + buf_.clear(); + buf_.push_back(b); + } + + out[0][i] = out_; + } + break; + + case hash_freq: + + for (size_t i = 0; i < bs; i++) { + auto v = in[0][i]; + + if (buf_.size() < bufSize) + buf_.push_back(v); + + // not else(!) + if (buf_.size() == bufSize) { + auto b = buf_.back(); + out_ = (zeroCrossingCount() / (buf_.size() - 1)) * nyqfreq; + buf_.clear(); + buf_.push_back(b); + } + + out[0][i] = out_; + } + break; + default: + break; + } +} + +double ZeroCrossingTilde::zeroCrossingCount() const +{ + uint32_t zcn = 0; + + for (size_t i = 1; i < buf_.size(); i++) { + if (zero_crossing(buf_[i - 1], buf_[i])) + zcn++; + } + + return zcn; +} + +void setup_an_zero_tilde() +{ + SoundExternalFactory obj("an.zero~"); + obj.setXletsInfo({ "signal: input" }, { "signal: zero crossing count/rate/freq" }); +} diff --git a/ceammc/ext/src/an/an_zero_tilde.h b/ceammc/ext/src/an/an_zero_tilde.h new file mode 100644 index 0000000000..1fd3b9171b --- /dev/null +++ b/ceammc/ext/src/an/an_zero_tilde.h @@ -0,0 +1,48 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef AN_ZERO_TILDE_H +#define AN_ZERO_TILDE_H + +#include "ceammc_property_enum.h" +#include "ceammc_sound_external.h" +using namespace ceammc; + +class ZeroCrossingTilde : public SoundExternal { + IntProperty* buffer_size_; + SymbolEnumProperty* mode_; + std::vector buf_; + t_sample out_; + size_t t_; + +public: + ZeroCrossingTilde(const PdArgs& args); + + void initDone() override; + + void setupDSP(t_signal** s) override; + void processBlock(const t_sample** in, t_sample** out) override; + +private: + double zeroCrossingCount() const; + +private: + static bool zero_crossing(t_sample a, t_sample b) + { + return (a < 0) ^ (b < 0); + } +}; + +void setup_an_zero_tilde(); + +#endif // AN_ZERO_TILDE_H diff --git a/ceammc/ext/src/an/aubio_base.h b/ceammc/ext/src/an/aubio_base.h index 9ac54e06cf..1a5f7e424b 100644 --- a/ceammc/ext/src/an/aubio_base.h +++ b/ceammc/ext/src/an/aubio_base.h @@ -19,8 +19,8 @@ #include #include "aubio.h" -#include "ceammc_property_callback.h" #include "ceammc_property.h" +#include "ceammc_property_callback.h" #include "ceammc_property_enum.h" using namespace ceammc; @@ -29,9 +29,26 @@ struct FVecDeleter { void operator()(fvec_t* v) { del_fvec(v); } }; +// vector of size=1 (for onset output) +class FVec1 { + smpl_t v_; + fvec_t vec_; + +public: + FVec1(smpl_t v = 0) + : v_(v) + , vec_ { 1, &v_ } + { + } + + smpl_t& value() { return v_; } + const smpl_t& value() const { return v_; } + fvec_t& vec() { return vec_; } +}; + using FVecPtr = std::unique_ptr; using OnsetPtr = std::shared_ptr; -using TempoPtr = std::unique_ptr; +using TempoPtr = std::unique_ptr; class HopSizeProperty : public IntProperty { IntProperty* bs_; diff --git a/ceammc/ext/src/an/mod_analyze.cpp b/ceammc/ext/src/an/mod_analyze.cpp index c632f99a83..8bc82d56fa 100644 --- a/ceammc/ext/src/an/mod_analyze.cpp +++ b/ceammc/ext/src/an/mod_analyze.cpp @@ -1,5 +1,6 @@ #include "mod_analyze.h" #include "an_pitchtrack.h" +#include "an_zero_tilde.h" extern void setup_an_onset(); extern void setup_an_onset_tilde(); @@ -10,7 +11,8 @@ void ceammc_analyze_setup() { setup_an_onset(); setup_an_onset_tilde(); - setup_an_tempo_tilde(); setup_an_pitchtrack(); setup_an_rms_tilde(); + setup_an_tempo_tilde(); + setup_an_zero_tilde(); } diff --git a/ceammc/ext/src/array/CMakeLists.txt b/ceammc/ext/src/array/CMakeLists.txt index 941236247c..8b9e436e6d 100644 --- a/ceammc/ext/src/array/CMakeLists.txt +++ b/ceammc/ext/src/array/CMakeLists.txt @@ -19,6 +19,7 @@ macro(ceammc_array_external name) endmacro() ceammc_array_external(bpm) +ceammc_array_external(circular) ceammc_array_external(circular_tilde) ceammc_array_external(convolve) ceammc_array_external(copy) @@ -34,6 +35,7 @@ ceammc_array_external(play_tilde) ceammc_array_external(plot) ceammc_array_external(plot_tilde) ceammc_array_external(resample) +ceammc_array_external(risset_rythm_tilde) ceammc_array_external(rms) ceammc_array_external(s2p) ceammc_array_external(set) @@ -60,7 +62,9 @@ if(RAGEL_FOUND) add_custom_target(lemon_grain_parser COMMAND lemon -s ${CMAKE_CURRENT_SOURCE_DIR}/grain_expr.y COMMAND mv ${CMAKE_CURRENT_SOURCE_DIR}/grain_expr.c ${CMAKE_CURRENT_SOURCE_DIR}/grain_expr_lemon.h - COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/grain_expr.out) + COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/grain_expr.out + SOURCES grain_expr.rl grain_expr.y + ) endif() # ragel generated sources diff --git a/ceammc/ext/src/array/array_base.cpp b/ceammc/ext/src/array/array_base.cpp index 2b92fc65d8..addc55f95e 100644 --- a/ceammc/ext/src/array/array_base.cpp +++ b/ceammc/ext/src/array/array_base.cpp @@ -254,7 +254,7 @@ t_sample ArrayPositionProperty::phase() const bool ArrayPositionProperty::setSamples(t_float pos, bool check) { if (check) { - if (!array_ || !array_->isValid()) + if (!array_ || !array_->update()) return false; const auto N = static_cast(array_->size()); diff --git a/ceammc/ext/src/array/array_base.h b/ceammc/ext/src/array/array_base.h index 75c43556a2..f167ff9a31 100644 --- a/ceammc/ext/src/array/array_base.h +++ b/ceammc/ext/src/array/array_base.h @@ -131,6 +131,15 @@ class ArraySoundBase : public ArrayReadIFace { public: ArraySoundBase(const PdArgs& args); bool setArray(t_symbol* aname) override; + + void setupDSP(t_signal** sp) override + { + if (!checkArray(true)) + return dsp_add_zero(sp[0]->s_vec, sp[0]->s_n); + + array_.useInDSP(); + SoundExternal::setupDSP(sp); + } }; class ArrayMod : public ArrayBase { @@ -157,9 +166,8 @@ template bool ArrayReadIFace::checkArray(bool log) { if (array_name_ == &s_ || !array_.open(array_name_)) { - if (log && array_name_ != &s_ && !Base::isPatchLoading()) { - OBJ_ERR << "invalid array: " << array_.name(); - } + if (log && array_name_ != &s_ && !Base::isPatchLoading()) + OBJ_ERR << "invalid array: '" << array_name_->s_name << '\''; return false; } @@ -173,7 +181,7 @@ bool ArrayReadIFace::setArray(t_symbol* s) array_name_ = s; if (!array_.open(array_name_)) { if (!Base::isPatchLoading()) - OBJ_ERR << "array not found: " << s->s_name; + OBJ_ERR << "array not found: '" << s->s_name << '\''; return false; } diff --git a/ceammc/ext/src/array/array_circular.cpp b/ceammc/ext/src/array/array_circular.cpp new file mode 100644 index 0000000000..1c8a8dd3f6 --- /dev/null +++ b/ceammc/ext/src/array/array_circular.cpp @@ -0,0 +1,41 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavski. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "array_circular.h" +#include "ceammc_factory.h" + +ArrayCircular::ArrayCircular(const PdArgs& args) + : ArrayMod(args) +{ + createOutlet(); +} + +void ArrayCircular::onFloat(t_float f) +{ + if (!checkArray(true)) + return; + + try { + floatTo(0, array_.ringPushBack(f)); + + if (shouldRedraw()) + array_.redraw(); + } catch (std::exception& e) { + OBJ_ERR << "can't push value: " << e.what(); + } +} + +void setup_array_circular() +{ + ObjectFactory obj("array.circular"); +} diff --git a/ceammc/ext/src/array/array_circular.h b/ceammc/ext/src/array/array_circular.h new file mode 100644 index 0000000000..bed59605ba --- /dev/null +++ b/ceammc/ext/src/array/array_circular.h @@ -0,0 +1,27 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavski. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ARRAY_CIRCULAR_H +#define ARRAY_CIRCULAR_H + +#include "array_base.h" + +class ArrayCircular : public ArrayMod { +public: + ArrayCircular(const PdArgs& args); + void onFloat(t_float f) final; +}; + +void setup_array_circular(); + +#endif // ARRAY_CIRCULAR_H diff --git a/ceammc/ext/src/array/array_circular_tilde.cpp b/ceammc/ext/src/array/array_circular_tilde.cpp index f5b5d99bd5..a7f8db4403 100644 --- a/ceammc/ext/src/array/array_circular_tilde.cpp +++ b/ceammc/ext/src/array/array_circular_tilde.cpp @@ -39,14 +39,8 @@ ArrayCircularTilde::ArrayCircularTilde(const PdArgs& args) void ArrayCircularTilde::setupDSP(t_signal** sp) { - if (!checkArray()) { - array_size_ = 0; - return; - } - - array_size_ = array_.size(); - array_.useInDSP(); ArraySoundBase::setupDSP(sp); + array_size_ = array_.isValid() ? array_.size() : 0; } void ArrayCircularTilde::processBlock(const t_sample** in, t_sample** out) diff --git a/ceammc/ext/src/array/array_convolve.cpp b/ceammc/ext/src/array/array_convolve.cpp index 2d78407938..a4b016eb3d 100644 --- a/ceammc/ext/src/array/array_convolve.cpp +++ b/ceammc/ext/src/array/array_convolve.cpp @@ -26,6 +26,7 @@ ArrayConvolve::ArrayConvolve(const PdArgs& args) : ArrayBase(args) , conv_(new fftconvolver::FFTConvolver()) , ir_name_(nullptr) + , norm_(nullptr) , ir_data_(MAX_IR_SIZE) { createInlet(); @@ -34,12 +35,13 @@ ArrayConvolve::ArrayConvolve(const PdArgs& args) ir_name_ = new SymbolProperty("@ir", &s_); ir_name_->setArgIndex(1); addProperty(ir_name_); -} -ArrayConvolve::~ArrayConvolve() -{ + norm_ = new BoolProperty("@norm", false); + addProperty(norm_); } +ArrayConvolve::~ArrayConvolve() = default; + void ArrayConvolve::onBang() { const auto t0 = std::chrono::steady_clock::now(); @@ -95,6 +97,9 @@ void ArrayConvolve::onBang() array_.redraw(); + if (norm_->value()) + array_.normalize(); + const auto t1 = std::chrono::steady_clock::now(); const auto time_ms = std::chrono::duration_cast(t1 - t0).count(); OBJ_DBG << "convolution time: " << time_ms << " ms"; diff --git a/ceammc/ext/src/array/array_convolve.h b/ceammc/ext/src/array/array_convolve.h index 4667b83370..2150a865fd 100644 --- a/ceammc/ext/src/array/array_convolve.h +++ b/ceammc/ext/src/array/array_convolve.h @@ -28,6 +28,7 @@ using ConvImpl = std::unique_ptr; class ArrayConvolve : public ArrayBase { ConvImpl conv_; SymbolProperty* ir_name_; + BoolProperty* norm_; std::vector ir_data_; public: diff --git a/ceammc/ext/src/array/array_copy.cpp b/ceammc/ext/src/array/array_copy.cpp index 43524c0395..d4b55e3f16 100644 --- a/ceammc/ext/src/array/array_copy.cpp +++ b/ceammc/ext/src/array/array_copy.cpp @@ -29,50 +29,50 @@ ArrayCopy::ArrayCopy(const PdArgs& a) addProperty(resize_); } -void ArrayCopy::onList(const AtomList& l) +void ArrayCopy::onList(const AtomListView& lv) { - if (!checkArgs(l, ARG_SYMBOL, ARG_SYMBOL, gensym("copy"))) + if (!checkArgs(lv, ARG_SYMBOL, ARG_SYMBOL, gensym("copy"))) return; - copy(l[0].asSymbol(), l[1].asSymbol()); + copy(lv[0].asSymbol(), lv[1].asSymbol()); } -void ArrayCopy::m_copy(t_symbol*, const AtomListView& lst) +void ArrayCopy::m_copy(t_symbol*, const AtomListView& lv) { /// copy array1 array2 - if (lst.size() == 2 && lst.allOf(isSymbol)) - return copy(lst[0].asSymbol(), lst[1].asSymbol()); + if (lv.size() == 2 && lv.allOf(isSymbol)) + return copy(lv[0].asSymbol(), lv[1].asSymbol()); /// copy array1 0 100 array2 - if (lst.size() == 4 - && lst[0].isSymbol() - && lst[1].isFloat() - && lst[2].isFloat() - && lst[3].isSymbol()) { - Range in_range(lst[1].asInt(), lst[2].asInt()); - return copyRange(lst[0].asSymbol(), in_range, lst[3].asSymbol(), 0); + if (lv.size() == 4 + && lv[0].isSymbol() + && lv[1].isFloat() + && lv[2].isFloat() + && lv[3].isSymbol()) { + Range in_range(lv[1].asInt(), lv[2].asInt()); + return copyRange(lv[0].asSymbol(), in_range, lv[3].asSymbol(), 0); } /// copy array1 0 array2 - if (lst.size() == 3 - && lst[0].isSymbol() - && lst[1].isFloat() - && lst[2].isSymbol()) { - Range in_range(lst[1].asInt(), std::numeric_limits::max()); - return copyRange(lst[0].asSymbol(), in_range, lst[2].asSymbol(), 0); + if (lv.size() == 3 + && lv[0].isSymbol() + && lv[1].isFloat() + && lv[2].isSymbol()) { + Range in_range(lv[1].asInt(), std::numeric_limits::max()); + return copyRange(lv[0].asSymbol(), in_range, lv[2].asSymbol(), 0); } - if (lst.size() == 5 - && lst[0].isSymbol() - && lst[1].isFloat() - && lst[2].isFloat() - && lst[3].isSymbol() - && lst[4].isFloat()) { - Range in_range(lst[1].asInt(), lst[2].asInt()); - return copyRange(lst[0].asSymbol(), in_range, lst[3].asSymbol(), lst[4].asInt()); + if (lv.size() == 5 + && lv[0].isSymbol() + && lv[1].isFloat() + && lv[2].isFloat() + && lv[3].isSymbol() + && lv[4].isFloat()) { + Range in_range(lv[1].asInt(), lv[2].asInt()); + return copyRange(lv[0].asSymbol(), in_range, lv[3].asSymbol(), lv[4].asInt()); } - OBJ_ERR << "invalid arguments are given: " << lst; + OBJ_ERR << "invalid arguments are given: " << lv; } void ArrayCopy::copy(t_symbol* src, t_symbol* dest) diff --git a/ceammc/ext/src/array/array_copy.h b/ceammc/ext/src/array/array_copy.h index 53d9b82956..95672a49bb 100644 --- a/ceammc/ext/src/array/array_copy.h +++ b/ceammc/ext/src/array/array_copy.h @@ -40,8 +40,8 @@ class ArrayCopy : public BaseObject { public: ArrayCopy(const PdArgs& a); - void onList(const AtomList& l) override; - void m_copy(t_symbol*, const AtomListView& lst); + void onList(const AtomListView& lv) override; + void m_copy(t_symbol*, const AtomListView& lv); private: void copy(t_symbol* src, t_symbol* dest); diff --git a/ceammc/ext/src/array/array_fill.cpp b/ceammc/ext/src/array/array_fill.cpp index 5945f54df7..0f1860c6c3 100644 --- a/ceammc/ext/src/array/array_fill.cpp +++ b/ceammc/ext/src/array/array_fill.cpp @@ -42,18 +42,18 @@ void ArrayFill::onFloat(t_float f) finish(); } -void ArrayFill::onList(const AtomList& l) +void ArrayFill::onList(const AtomListView& lv) { - m_fill(gensym("fill"), l); + m_fill(gensym("fill"), lv); } -void ArrayFill::m_gauss(t_symbol* m, const AtomListView& l) +void ArrayFill::m_gauss(t_symbol* m, const AtomListView& lv) { if (!checkArray()) return; - const t_float mean = l.floatAt(0, 0); - const t_float stddev = l.floatAt(1, 1); + const t_float mean = lv.floatAt(0, 0); + const t_float stddev = lv.floatAt(1, 1); if (stddev <= 0) { METHOD_ERR(m) << "standart deviation (sigma) should be > 0"; @@ -71,13 +71,13 @@ void ArrayFill::m_gauss(t_symbol* m, const AtomListView& l) finish(); } -void ArrayFill::m_uniform(t_symbol* m, const AtomListView& l) +void ArrayFill::m_uniform(t_symbol* m, const AtomListView& lv) { if (!checkArray()) return; - const t_float a = l.floatAt(0, 0); - const t_float b = l.floatAt(1, 1); + const t_float a = lv.floatAt(0, 0); + const t_float b = lv.floatAt(1, 1); if (!(a < b)) { METHOD_ERR(m) << "a should be less then b"; @@ -228,11 +228,11 @@ void ArrayFill::m_tri(t_symbol* m, const AtomListView& l) finish(); } -void ArrayFill::fillRange(size_t from, size_t to, const AtomList& l) +void ArrayFill::fillRange(size_t from, size_t to, const AtomListView& lv) { - size_t step = l.size(); + size_t step = lv.size(); for (size_t i = from; i < to; i++) - array_[i] = l[i % step].asFloat(); + array_[i] = lv[i % step].asFloat(); finish(); } diff --git a/ceammc/ext/src/array/array_fill.h b/ceammc/ext/src/array/array_fill.h index 727e35d21a..7ac3ca77ba 100644 --- a/ceammc/ext/src/array/array_fill.h +++ b/ceammc/ext/src/array/array_fill.h @@ -19,24 +19,23 @@ using namespace ceammc; class ArrayFill : public ArrayMod { - public: ArrayFill(const PdArgs& a); void onSymbol(t_symbol* s) override; void onFloat(t_float f) override; - void onList(const AtomList& l) override; - - void m_gauss(t_symbol* m, const AtomListView& l); - void m_uniform(t_symbol* m, const AtomListView& l); - void m_fill(t_symbol* m, const AtomListView& l); - void m_sin(t_symbol* m, const AtomListView& l); - void m_pulse(t_symbol* m, const AtomListView& l); - void m_saw(t_symbol* m, const AtomListView& l); - void m_tri(t_symbol* m, const AtomListView& l); + void onList(const AtomListView& lv) override; + + void m_gauss(t_symbol* m, const AtomListView& lv); + void m_uniform(t_symbol* m, const AtomListView& lv); + void m_fill(t_symbol* m, const AtomListView& lv); + void m_sin(t_symbol* m, const AtomListView& lv); + void m_pulse(t_symbol* m, const AtomListView& lv); + void m_saw(t_symbol* m, const AtomListView& lv); + void m_tri(t_symbol* m, const AtomListView& lv); AtomListView parseRange(const AtomListView& args, size_t* from, size_t* to) const; private: - void fillRange(size_t from, size_t to, const AtomList& l); + void fillRange(size_t from, size_t to, const AtomListView& lv); void fillRange(size_t from, size_t to, t_float v); void finish(); }; diff --git a/ceammc/ext/src/array/array_grainer.cpp b/ceammc/ext/src/array/array_grainer.cpp index 4b4f3cba98..dc58f0a8f8 100644 --- a/ceammc/ext/src/array/array_grainer.cpp +++ b/ceammc/ext/src/array/array_grainer.cpp @@ -12,9 +12,13 @@ * this file belongs to. *****************************************************************************/ #include "array_grainer.h" +#include "args/argcheck2.h" #include "aubio.h" #include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" +#include "ceammc_units.h" +#include "fmt/core.h" #include "grain_expr_parser.h" #include @@ -26,6 +30,11 @@ constexpr const char* CHAR_FINISHED = "."; using namespace ceammc; +using Factory = SoundExternalFactory; +using Proxy = Factory::ObjectProxy; + +namespace { + struct FVecDeleter { void operator()(fvec_t* v) { del_fvec(v); } }; @@ -41,20 +50,41 @@ struct OnsetDeleter { using FVecPtr = std::unique_ptr; using OnsetPtr = std::unique_ptr; +uint64_t parseTimeUnit(const AtomListView& lv, double sr, uint64_t def) +{ + units::TimeValue tm(0, units::TimeValue::SAMPLE, sr); + auto res = units::TimeValue::parse(lv); + if (res.matchValue(tm)) + return tm.value() <= 0 ? def : tm.toSamples(); + else + return def; +} + +} + ArrayGrainer::ArrayGrainer(const PdArgs& args) - : SoundExternal(args) - , array_name_(nullptr) + : ArraySoundBase(args) , sync_(nullptr) , sync_interval_(nullptr) , sync_prob_(nullptr) + , defer_([this]() { + for (auto& m : defer_msg_) { + if (m.count > 0) + m.count--; + + if (m.count == 0) { + auto sel = m.msg[0].asSymbol(); + dispatchMethod(sel, m.msg.view().subView(1)); + } + } + + auto end = std::remove_if(defer_msg_.begin(), defer_msg_.end(), [](const DeferMessage& m) { return m.count == 0; }); + defer_msg_.erase(end, defer_msg_.end()); + }) { createSignalOutlet(); createSignalOutlet(); - array_name_ = new SymbolProperty("@array", &s_); - array_name_->setArgIndex(0); - addProperty(array_name_); - sync_ = new SymbolEnumProperty("@sync", { "none", "int", "ext" }); sync_->setSuccessFn([this](Property*) { const auto v = sync_->value(); @@ -77,25 +107,23 @@ ArrayGrainer::ArrayGrainer(const PdArgs& args) sync_prob_->checkClosedRange(0, 1); sync_prob_->setSuccessFn([this](Property*) { cloud_.setSyncProbability(sync_prob_->value()); }); addProperty(sync_prob_); + + defer_msg_.reserve(4); } void ArrayGrainer::setupDSP(t_signal** sp) { - if (!array_.open(array_name_->value())) { - OBJ_ERR << "can't open array: " << array_name_->value(); - dsp_add_zero(sp[0]->s_vec, sp[0]->s_n); - return; - } + ArraySoundBase::setupDSP(sp); - array_.useInDSP(); - cloud_.setArrayData(array_.begin(), array_.size()); - - SoundExternal::setupDSP(sp); + if (array_.isValid()) + cloud_.setArrayData(array_.begin(), array_.size()); } void ArrayGrainer::processBlock(const t_sample** /*in*/, t_sample** out) { - cloud_.playBuffer(out, blockSize(), samplerate()); + int done = cloud_.playBuffer(out, blockSize(), samplerate()); + if (done > 0 && defer_msg_.size() > 0) + defer_.delay(0); } void ArrayGrainer::onBang() @@ -147,10 +175,8 @@ void ArrayGrainer::m_align(t_symbol* s, const AtomListView& lv) void ArrayGrainer::m_append(t_symbol* s, const AtomListView& lv) { - if (!array_.open(array_name_->value())) { - METHOD_ERR(s) << "can't open array: " << array_name_->value(); + if (!checkArray(true)) return; - } if (lv.size() < 1) { METHOD_ERR(s) << "NUM_GRAINS PROPS... expected"; @@ -162,10 +188,8 @@ void ArrayGrainer::m_append(t_symbol* s, const AtomListView& lv) void ArrayGrainer::m_grain(t_symbol* s, const AtomListView& lv) { - if (!array_.open(array_name_->value())) { - METHOD_ERR(s) << "can't open array: " << array_name_->value(); + if (!checkArray(true)) return; - } auto id = cloud_.size(); auto grain = cloud_.appendGrain(); @@ -187,10 +211,8 @@ void ArrayGrainer::m_grain(t_symbol* s, const AtomListView& lv) void ArrayGrainer::m_set(t_symbol* s, const AtomListView& lv) { - if (!array_.open(array_name_->value())) { - METHOD_ERR(s) << "can't open array: " << array_name_->value(); + if (!checkArray(true)) return; - } const bool ok = lv.size() > 1; if (!ok) { @@ -248,6 +270,24 @@ void ArrayGrainer::m_set(t_symbol* s, const AtomListView& lv) METHOD_ERR(s) << "ID or tag expected"; } +void ArrayGrainer::m_pause(t_symbol* s, const AtomListView& lv) +{ + if (lv.size() >= 1 && lv[0] == gensym(CHAR_ALL)) { /// pause all + cloud_.pauseAll(lv.boolAt(1, true)); + } else if (lv.size() >= 1 && lv[0].isFloat()) { /// pause by #ID + auto id = lv[0].asInt(); + if (id < 0) { + METHOD_ERR(s) << "non-negative grain id expected, got: " << id; + return; + } + + cloud_.pauseById(id, lv.boolAt(1, true)); + } else if (lv.size() >= 1 && lv[0].isSymbol()) { /// pause by tag + auto tag = lv[0].asT(); + cloud_.pauseByTag(tag, lv.boolAt(1, true)); + } +} + void ArrayGrainer::appendGrains(int n, const AtomListView& args) { if (n < 1) { @@ -282,10 +322,8 @@ void ArrayGrainer::appendGrains(int n, const AtomListView& args) void ArrayGrainer::m_fill(t_symbol* s, const AtomListView& lv) { - if (!array_.open(array_name_->value())) { - METHOD_ERR(s) << "can't open array: " << array_name_->value(); + if (!checkArray(true)) return; - } if (lv.size() < 1) { METHOD_ERR(s) << "NUM_GRAINS PROPS... expected"; @@ -321,10 +359,8 @@ void ArrayGrainer::m_onsets(t_symbol* s, const AtomListView& lv) constexpr const char* DEFAULT_METHOD = "default"; constexpr int DEFAULT_BUFFER_SIZE = 1024; - if (!array_.open(array_name_->value())) { - METHOD_ERR(s) << "can't open array: " << array_name_->value(); + if (!checkArray(true)) return; - } const size_t BS = DEFAULT_BUFFER_SIZE; // buffer size const size_t HS = BS / 2; // hop size @@ -369,15 +405,167 @@ void ArrayGrainer::m_onsets(t_symbol* s, const AtomListView& lv) } } +void ArrayGrainer::m_slice(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("N:i[1,64] " + "LEN:t? " + "GRAIN:a*"); + + args::ArgMatchList m; + if (!chk.check(lv, this, &m)) { + chk.usage(this, s); + return; + } + + if (!checkArray(true)) + return; + + const auto N = m[0].asInt(); + const int64_t alen = parseTimeUnit(m[1], samplerate(), array_.size()); + const auto grain_props = m[2]; + const double glen = alen / double(N); + const int64_t ilen = std::round(glen); + + GrainExprParser parser(nullptr); + + for (int i = 0; i < N; i++) { + auto id = cloud_.size(); + auto grain = cloud_.appendGrain(); + if (!grain) { + OBJ_ERR << "memory error, can't add grain"; + break; + } + + grain->setId(id); + grain->setArraySizeInSamples(alen); + parser.setGrain(grain); + + if (grain_props.size() > 0 && !parser.parse(grain_props)) { + OBJ_ERR << "invalid grain props: " << grain_props; + cloud_.popGrain(); + return; + } + + const int64_t pos = std::round(i * glen); + grain->setLengthInSamples(ilen); + grain->setArrayPosInSamples(pos); + grain->setTimeBefore(pos); + grain->setTimeAfter(clip_min(alen - grain->durationInSamples())); + } +} + +void ArrayGrainer::m_shuffle(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("TAG:s?"); + + if (!chk.check(lv, this)) { + chk.usage(this, s); + return; + } + + if (!checkArray(true)) + return; + + cloud_.shuffle(lv.symbolAt(0, &s_)); +} + +void ArrayGrainer::m_reverse(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("TAG:s?"); + + if (!chk.check(lv, this)) { + chk.usage(this, s); + return; + } + + if (!checkArray(true)) + return; + + cloud_.reverse(lv.symbolAt(0, &s_)); +} + +void ArrayGrainer::m_spread(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("DUR:t? " + "TAG:s?"); + + args::ArgMatchList m; + if (!chk.check(lv, this, &m)) { + chk.usage(this, s); + return; + } + + if (!checkArray(true)) + return; + + const int64_t gdur = parseTimeUnit(m[0], samplerate(), array_.size()); + auto tag = m[1].symbolAt(0, &s_); + + cloud_.spread(gdur, tag); +} + +void ArrayGrainer::m_permutate(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("N:i[-16,16]? " + "TAG:s?"); + + args::ArgMatchList m; + if (!chk.check(lv, this, &m)) { + chk.usage(this, s); + return; + } + + if (!checkArray(true)) + return; + + const int n = m[0].intAt(0, 1); + auto tag = m[1].symbolAt(0, &s_); + + cloud_.permutate(n, tag); +} + +void ArrayGrainer::m_defer(t_symbol* s, const AtomListView& lv) +{ + static args::ArgChecker chk("COUNT:i[1,255]? " + "MSG:s " + "ARG:a*"); + + args::ArgMatchList m; + if (!chk.check(lv, this, &m)) { + chk.usage(this, s); + return; + } + + DeferMessage def; + def.msg.reserve(m[1].size() + m[2].size()); + def.msg.insert_back(m[1]); + def.msg.insert_back(m[2]); + def.count = m[0].intAt(0, 1); + defer_msg_.push_back(std::move(def)); +} + +void ArrayGrainer::dispatchMethod(t_symbol* m, const AtomListView& args) +{ + auto p = (Proxy*)owner(); + Factory::defaultListMethod(p, m, args.size(), args.toPdData()); +} + void setup_array_grainer() { - SoundExternalFactory obj("array.grainer~", OBJECT_FACTORY_DEFAULT); + Factory obj("array.grainer~", OBJECT_FACTORY_DEFAULT); + obj.addMethod("align", &ArrayGrainer::m_align); obj.addMethod("append", &ArrayGrainer::m_append); obj.addMethod("clear", &ArrayGrainer::m_clear); obj.addMethod("fill", &ArrayGrainer::m_fill); obj.addMethod("grain", &ArrayGrainer::m_grain); - obj.addMethod("set", &ArrayGrainer::m_set); obj.addMethod("onsets", &ArrayGrainer::m_onsets); - obj.addMethod("align", &ArrayGrainer::m_align); + obj.addMethod("pause", &ArrayGrainer::m_pause); + obj.addMethod("set", &ArrayGrainer::m_set); + obj.addMethod("slice", &ArrayGrainer::m_slice); + obj.addMethod("spread", &ArrayGrainer::m_spread); + obj.addMethod("shuffle", &ArrayGrainer::m_shuffle); + obj.addMethod("defer", &ArrayGrainer::m_defer); + obj.addMethod("reverse", &ArrayGrainer::m_reverse); + obj.addMethod("permutate", &ArrayGrainer::m_permutate); } diff --git a/ceammc/ext/src/array/array_grainer.h b/ceammc/ext/src/array/array_grainer.h index 46884ecf2a..256169c697 100644 --- a/ceammc/ext/src/array/array_grainer.h +++ b/ceammc/ext/src/array/array_grainer.h @@ -14,7 +14,10 @@ #ifndef ARRAY_GRAINER_H #define ARRAY_GRAINER_H +#include "array_base.h" #include "ceammc_array.h" +#include "ceammc_clock.h" +#include "ceammc_containers.h" #include "ceammc_property_enum.h" #include "ceammc_sound_external.h" #include "grain.h" @@ -22,14 +25,21 @@ using namespace ceammc; -class ArrayGrainer : public SoundExternal { - SymbolProperty* array_name_; +struct DeferMessage { + SmallAtomListN<8> msg; + std::uint8_t count; +}; + +class ArrayGrainer : public ArraySoundBase { SymbolEnumProperty* sync_; FloatProperty* sync_interval_; FloatProperty* sync_prob_; - Array array_; GrainCloud cloud_; std::vector onsets_; + ClockLambdaFunction defer_; + + using MsgList = std::vector; + MsgList defer_msg_; public: ArrayGrainer(const PdArgs& args); @@ -47,14 +57,21 @@ class ArrayGrainer : public SoundExternal { void m_fill(t_symbol* s, const AtomListView& lv); void m_grain(t_symbol* s, const AtomListView& lv); void m_onsets(t_symbol* s, const AtomListView& lv); + void m_pause(t_symbol* s, const AtomListView& lv); void m_set(t_symbol* s, const AtomListView& lv); + void m_slice(t_symbol* s, const AtomListView& lv); + void m_spread(t_symbol* s, const AtomListView& lv); + void m_shuffle(t_symbol* s, const AtomListView& lv); + void m_defer(t_symbol* s, const AtomListView& lv); + void m_reverse(t_symbol* s, const AtomListView& lv); + void m_permutate(t_symbol* s, const AtomListView& lv); const GrainCloud& cloud() const { return cloud_; } private: void updateGrains(); - void appendGrains(int n, const AtomListView& args); + void dispatchMethod(t_symbol* m, const AtomListView& args); }; void setup_array_grainer(); diff --git a/ceammc/ext/src/array/array_hist.cpp b/ceammc/ext/src/array/array_hist.cpp index 20dbef12b6..242cc1818d 100644 --- a/ceammc/ext/src/array/array_hist.cpp +++ b/ceammc/ext/src/array/array_hist.cpp @@ -12,15 +12,16 @@ * this file belongs to. *****************************************************************************/ #include "array_hist.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include #include -static const size_t HIST_MIN_SIZE = 2; -static const size_t HIST_DEFAULT_SIZE = 100; -static const size_t HIST_MAX_SIZE = 1000; +constexpr const size_t HIST_MIN_SIZE = 2; +constexpr const size_t HIST_DEFAULT_SIZE = 100; +constexpr const size_t HIST_MAX_SIZE = 1000; ArrayHist::ArrayHist(const PdArgs& args) : ArrayBase(args) @@ -81,11 +82,13 @@ void ArrayHist::onBang() hist[idx]++; } - Atom res[NBINS]; + StaticAtomList<256> res; + res.reserve(NBINS); + for (size_t i = 0; i < NBINS; i++) - res[i] = hist[i]; + res.push_back(hist[i]); - listTo(0, AtomListView(res, NBINS)); + listTo(0, res.view()); } void setup_array_hist() diff --git a/ceammc/ext/src/array/array_p2s.cpp b/ceammc/ext/src/array/array_p2s.cpp index eb48b92e82..bef06a2ac0 100644 --- a/ceammc/ext/src/array/array_p2s.cpp +++ b/ceammc/ext/src/array/array_p2s.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "array_p2s.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" @@ -27,10 +28,15 @@ void ArrayPhaseToSample::onFloat(t_float phase) floatTo(0, clip01(phase) * array_.size()); } -void ArrayPhaseToSample::onList(const AtomList& lst) +void ArrayPhaseToSample::onList(const AtomListView& lv) { array_.update(); - listTo(0, lst.mapFloat([this](t_float v) { return clip01(v) * array_.size(); }, AtomListMapType::FILTER)); + SmallAtomList res; + lv.mapFloat( + [this](t_float v) { return clip01(v) * array_.size(); }, + res, + AtomListMapType::FILTER); + listTo(0, res.view()); } void setup_array_p2s() diff --git a/ceammc/ext/src/array/array_p2s.h b/ceammc/ext/src/array/array_p2s.h index e20df8d387..894da26045 100644 --- a/ceammc/ext/src/array/array_p2s.h +++ b/ceammc/ext/src/array/array_p2s.h @@ -26,7 +26,7 @@ class ArrayPhaseToSample : public ArrayBase { */ void onFloat(t_float phase) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; void setup_array_p2s(); diff --git a/ceammc/ext/src/array/array_play_tilde.cpp b/ceammc/ext/src/array/array_play_tilde.cpp index 21127037e1..282be24aae 100644 --- a/ceammc/ext/src/array/array_play_tilde.cpp +++ b/ceammc/ext/src/array/array_play_tilde.cpp @@ -12,15 +12,16 @@ * this file belongs to. *****************************************************************************/ #include "array_play_tilde.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" -#include "fmt/format.h" +#include "fmt/core.h" -static t_symbol* SYM_MS; -static t_symbol* SYM_SEC; -static t_symbol* SYM_SAMP; -static t_symbol* SYM_PHASE; +CEAMMC_DEFINE_HASH(ms); +CEAMMC_DEFINE_HASH(sec); +CEAMMC_DEFINE_HASH(samp); +CEAMMC_DEFINE_HASH(phase); -FSM ArrayPlayTilde::fsm_ = { +const FSM ArrayPlayTilde::fsm_ = { StateTransitions { // STATE_STOPPED [](ArrayPlayTilde* ap) -> PlayState { // stop->stop @@ -93,16 +94,22 @@ ArrayPlayTilde::ArrayPlayTilde(const PdArgs& args) }) , cursor_tick_([this]() { auto* s = clock_format_->value(); - if (s == SYM_SEC) + switch (crc32_hash(s)) { + case hash_sec: floatTo(1, cursor_->seconds(sys_getsr())); - else if (s == SYM_MS) + break; + case hash_ms: floatTo(1, cursor_->seconds(sys_getsr())); - else if (s == SYM_SAMP) + break; + case hash_samp: floatTo(1, cursor_->samples()); - else if (s == SYM_PHASE) + break; + case hash_phase: floatTo(1, cursor_->phase()); - else - ; // none + break; + default: + break; + } }) { speed_ = new FloatProperty("@speed", 1); @@ -130,7 +137,7 @@ ArrayPlayTilde::ArrayPlayTilde(const PdArgs& args) clock_interval_->setUnits(PropValueUnits::SEC); addProperty(clock_interval_); - clock_format_ = new SymbolEnumProperty("@cfmt", { "sec", "ms", "samp", "phase" }); + clock_format_ = new SymbolEnumProperty("@cfmt", { str_sec, str_ms, str_samp, str_phase }); addProperty(clock_format_); cursor_ = new ArrayPositionProperty(&array_, "@cursor_samp", 0); @@ -167,20 +174,20 @@ ArrayPlayTilde::ArrayPlayTilde(const PdArgs& args) createCbListProperty( "@select_phase", [this]() -> AtomList { return { begin_->phase(), end_->phase() }; }, - [this](const AtomList& pos) -> bool { + [this](const AtomListView& pos) -> bool { return begin_->setPhase(pos.floatAt(0, 0)) && end_->setPhase(pos.floatAt(1, -1)); }) - ->setListCheckFn([](const AtomList& l) -> bool { return l.size() == 2 && l[0].isFloat() && l[1].isFloat(); }); + ->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() == 2 && lv[0].isFloat() && lv[1].isFloat(); }); { auto p = createCbListProperty( "@select_sec", [this]() -> AtomList { return { begin_->seconds(sys_getsr()), end_->seconds(sys_getsr()) }; }, - [this](const AtomList& pos) -> bool { return begin_->setSeconds(pos.floatAt(0, 0), sys_getsr()) - && end_->setSeconds(pos.floatAt(1, -1), sys_getsr()); }); + [this](const AtomListView& pos) -> bool { return begin_->setSeconds(pos.floatAt(0, 0), sys_getsr()) + && end_->setSeconds(pos.floatAt(1, -1), sys_getsr()); }); - p->setListCheckFn([](const AtomList& l) -> bool { return l.size() == 2 && l[0].isFloat() && l[1].isFloat(); }); + p->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() == 2 && lv[0].isFloat() && lv[1].isFloat(); }); p->setUnits(PropValueUnits::SEC); } @@ -188,10 +195,10 @@ ArrayPlayTilde::ArrayPlayTilde(const PdArgs& args) auto p = createCbListProperty( "@select_ms", [this]() -> AtomList { return { begin_->ms(sys_getsr()), end_->seconds(sys_getsr()) }; }, - [this](const AtomList& pos) -> bool { return begin_->setMs(pos.floatAt(0, 0), sys_getsr()) - && end_->setMs(pos.floatAt(1, -1), sys_getsr()); }); + [this](const AtomListView& pos) -> bool { return begin_->setMs(pos.floatAt(0, 0), sys_getsr()) + && end_->setMs(pos.floatAt(1, -1), sys_getsr()); }); - p->setListCheckFn([](const AtomList& l) -> bool { return l.size() == 2 && l[0].isFloat() && l[1].isFloat(); }); + p->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() == 2 && lv[0].isFloat() && lv[1].isFloat(); }); p->setUnits(PropValueUnits::MSEC); } @@ -199,10 +206,10 @@ ArrayPlayTilde::ArrayPlayTilde(const PdArgs& args) auto p = createCbListProperty( "@select_samp", [this]() -> AtomList { return { begin_->samples(), end_->samples() }; }, - [this](const AtomList& pos) -> bool { return begin_->setSamples(pos.floatAt(0, 0)) - && end_->setSamples(pos.floatAt(1, -1)); }); + [this](const AtomListView& pos) -> bool { return begin_->setSamples(pos.floatAt(0, 0)) + && end_->setSamples(pos.floatAt(1, -1)); }); - p->setListCheckFn([](const AtomList& l) -> bool { return l.size() == 2 && l[0].isFloat() && l[1].isFloat(); }); + p->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() == 2 && lv[0].isFloat() && lv[1].isFloat(); }); p->setUnits(PropValueUnits::SAMP); } @@ -248,7 +255,7 @@ void ArrayPlayTilde::onFloat(t_float pos) void ArrayPlayTilde::setupDSP(t_signal** sig) { ArraySoundBase::setupDSP(sig); - if (checkArray() && cursor_->value() >= array_.size()) + if (array_.isValid() && cursor_->value() >= array_.size()) resetPlayPosition(); } @@ -442,11 +449,6 @@ void ArrayPlayTilde::blockDone() void setup_array_play_tilde() { - SYM_MS = gensym("ms"); - SYM_SEC = gensym("sec"); - SYM_PHASE = gensym("phase"); - SYM_SAMP = gensym("samp"); - SoundExternalFactory obj("array.play~", OBJECT_FACTORY_DEFAULT); obj.addAlias("array.p~"); diff --git a/ceammc/ext/src/array/array_play_tilde.h b/ceammc/ext/src/array/array_play_tilde.h index 8ac728058b..519db11535 100644 --- a/ceammc/ext/src/array/array_play_tilde.h +++ b/ceammc/ext/src/array/array_play_tilde.h @@ -87,7 +87,7 @@ class ArrayPlayTilde : public ArraySoundBase { void blockLast(size_t i, size_t bs, t_sample* out); void blockDone(); - static FSM fsm_; + static const FSM fsm_; }; void setup_array_play_tilde(); diff --git a/ceammc/ext/src/array/array_plot.cpp b/ceammc/ext/src/array/array_plot.cpp index b6a1887e8b..6db668fc73 100644 --- a/ceammc/ext/src/array/array_plot.cpp +++ b/ceammc/ext/src/array/array_plot.cpp @@ -127,15 +127,15 @@ void ArrayPlot::onFloat(t_float sample) done(); } -void ArrayPlot::onList(const AtomList& lst) +void ArrayPlot::onList(const AtomListView& lv) { - if (lst.empty()) + if (lv.empty()) return; if (!checkArray(true)) return; - const size_t N = lst.size(); + const size_t N = lv.size(); if (!resizeArray(N)) return; @@ -143,7 +143,7 @@ void ArrayPlot::onList(const AtomList& lst) const auto ymin = ymin_->value(); const auto ymax = ymax_->value(); - for (auto& a : lst) { + for (auto& a : lv) { auto s = processSample(a.asFloat(), ymin, ymax, yauto); plotSample(s); } diff --git a/ceammc/ext/src/array/array_plot.h b/ceammc/ext/src/array/array_plot.h index ad5439e389..3dfb741fc1 100644 --- a/ceammc/ext/src/array/array_plot.h +++ b/ceammc/ext/src/array/array_plot.h @@ -35,7 +35,7 @@ class ArrayPlot : public BaseObject { ArrayPlot(const PdArgs& a); void onFloat(t_float sample) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& l) override; bool setArray(t_symbol* s); diff --git a/ceammc/ext/src/array/array_risset_rythm_tilde.cpp b/ceammc/ext/src/array/array_risset_rythm_tilde.cpp new file mode 100644 index 0000000000..b845eb70af --- /dev/null +++ b/ceammc/ext/src/array/array_risset_rythm_tilde.cpp @@ -0,0 +1,124 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "array_risset_rythm_tilde.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" + +ArrayRissetRythmTilde::ArrayRissetRythmTilde(const PdArgs& args) + : ArraySoundBase(args) + , T_(0) + , te_(0) + , run_(true) +{ + bandwidth_ = new IntProperty("@b", 3); + bandwidth_->checkClosedRange(1, 5); + addProperty(bandwidth_); + + length_ = new IntProperty("@l", 2); + length_->checkClosedRange(1, 8); + addProperty(length_); + + createSignalOutlet(); +} + +void ArrayRissetRythmTilde::onFloat(t_float f) +{ + run_ = (f > 0); +} + +void ArrayRissetRythmTilde::setupDSP(t_signal** sp) +{ + ArraySoundBase::setupDSP(sp); + + if (array_.isValid()) { + T_ = array_.size(); + te_ = 0; + tl0_ = 0; + tl1_ = 0; + tl2_ = 0; + tl3_ = 0; + tl4_ = 0; + } else { + T_ = 0; + te_ = 0; + } +} + +void ArrayRissetRythmTilde::processBlock(const t_sample** in, t_sample** out) +{ + const auto bs = blockSize(); + + if (T_ == 0 || !run_) { + for (size_t i = 0; i < bs; i++) + out[0][i] = 0; + + return; + } + + auto calc_rv_te = [](t_sample v, t_sample te, t_sample T, t_sample tau) { return ((T * std::log(2)) / tau) * std::exp2(te / tau + v); }; + auto calc_pr = [](t_sample b, t_sample r) { return 0.5 * (clip(std::cos((M_PI * b / 2) * std::log2(r)), -M_PI, M_PI) + 1); }; + + const auto tau = T_ * length_->value(); + if (te_ >= tau) + te_ = 0; + + const t_sample b = bandwidth_->value(); + + for (size_t i = 0; i < bs; i++) { + auto& x = out[0][i]; + x = 0; + + const auto r0 = calc_rv_te(0, te_ + i, T_, tau); + x += array_.readSafe1(tl0_) * calc_pr(b, r0); + tl0_ += r0; + if (tl0_ >= T_) { + tl0_ = 0; + } + + const auto r1 = calc_rv_te(1, te_ + i, T_, tau); + x += array_.readSafe1(tl1_) * calc_pr(b, r1); + tl1_ += r1; + if (tl1_ >= T_) { + tl1_ = 0; + } + + const auto r2 = calc_rv_te(2, te_ + i, T_, tau); + x += array_.readSafe1(tl2_) * calc_pr(b, r2); + tl2_ += r2; + if (tl2_ >= T_) { + tl2_ = 0; + } + + const auto r3 = calc_rv_te(3, te_ + i, T_, tau); + x += array_.readSafe1(tl3_) * calc_pr(b, r3); + tl3_ += r3; + if (tl3_ >= T_) { + tl3_ = 0; + } + + const auto r4 = calc_rv_te(4, te_ + i, T_, tau); + x += array_.readSafe1(tl4_) * calc_pr(b, r4); + tl4_ += r4; + if (tl4_ >= T_) { + tl4_ = 0; + } + } + + te_ += bs; +} + +void setup_array_risset_rythm_tilde() +{ + SoundExternalFactory obj("array.risset_rythm~", OBJECT_FACTORY_DEFAULT); +} diff --git a/ceammc/ext/src/array/array_risset_rythm_tilde.h b/ceammc/ext/src/array/array_risset_rythm_tilde.h new file mode 100644 index 0000000000..c4cbe0e384 --- /dev/null +++ b/ceammc/ext/src/array/array_risset_rythm_tilde.h @@ -0,0 +1,37 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ARRAY_RISSET_RYTHM_TILDE_H +#define ARRAY_RISSET_RYTHM_TILDE_H + +#include "array_base.h" +using namespace ceammc; + +class ArrayRissetRythmTilde : public ArraySoundBase { + size_t T_; + t_sample tl0_, tl1_, tl2_, tl3_, tl4_, te_; + IntProperty* bandwidth_; + IntProperty* length_; + bool run_; + +public: + ArrayRissetRythmTilde(const PdArgs& args); + + void onFloat(t_float f) override; + void setupDSP(t_signal** sp) override; + void processBlock(const t_sample** in, t_sample** out) override; +}; + +void setup_array_risset_rythm_tilde(); + +#endif // ARRAY_RISSET_RYTHM_TILDE_H diff --git a/ceammc/ext/src/array/array_s2p.cpp b/ceammc/ext/src/array/array_s2p.cpp index 8947ad3881..a15a09ca5b 100644 --- a/ceammc/ext/src/array/array_s2p.cpp +++ b/ceammc/ext/src/array/array_s2p.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "array_s2p.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" ArraySampleToPhase::ArraySampleToPhase(const PdArgs& a) @@ -28,12 +29,14 @@ void ArraySampleToPhase::onFloat(t_float sample) floatTo(0, sample / array_.size()); } -void ArraySampleToPhase::onList(const AtomList& lst) +void ArraySampleToPhase::onList(const AtomListView& lv) { if (!array_.update() || array_.size() == 0) return; - listTo(0, lst.filtered(isFloat) / array_.size()); + SmallAtomList val; + lv.mapFloat([this](t_float f) { return f / array_.size(); }, val, AtomListMapType::FILTER); + listTo(0, val.view()); } void setup_array_s2p() diff --git a/ceammc/ext/src/array/array_s2p.h b/ceammc/ext/src/array/array_s2p.h index 1ad4028ca8..238ac76ad7 100644 --- a/ceammc/ext/src/array/array_s2p.h +++ b/ceammc/ext/src/array/array_s2p.h @@ -25,7 +25,7 @@ class ArraySampleToPhase : public ArrayBase { * @param sample position */ void onFloat(t_float sample) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; void setup_array_s2p(); diff --git a/ceammc/ext/src/array/array_set.cpp b/ceammc/ext/src/array/array_set.cpp index 23a9e830e7..d500b27284 100644 --- a/ceammc/ext/src/array/array_set.cpp +++ b/ceammc/ext/src/array/array_set.cpp @@ -15,42 +15,42 @@ void ArraySet::onSymbol(t_symbol* s) setArray(s); } -void ArraySet::onList(const AtomList& values) +void ArraySet::onList(const AtomListView& lv) { - if (values.empty()) { + if (lv.empty()) { OBJ_ERR << "empty list is given"; return; } if (normalize_->value()) { AtomList norm; - if (!list::normalizeByRange(values, norm)) { + if (!list::normalizeByRange(lv, norm)) { OBJ_ERR << "normalization error"; return; } - set(norm); + set(norm.view()); } else - set(values); + set(lv); } -void ArraySet::set(const AtomList& v) +void ArraySet::set(const AtomListView& lv) { if (!checkArray()) return; - if (!array_.resize(v.size())) { + if (!array_.resize(lv.size())) { OBJ_ERR << "can't resize array: " << array_.name(); return; } - for (size_t i = 0; i < v.size(); i++) - array_[i] = v[i].asFloat(); + for (size_t i = 0; i < lv.size(); i++) + array_[i] = lv[i].asFloat(); array_.redraw(); } -extern "C" void setup_array0x2eset() +void setup_array_set() { ObjectFactory obj("array.set"); obj.addAlias("list->array"); diff --git a/ceammc/ext/src/array/array_set.h b/ceammc/ext/src/array/array_set.h index f275f97a5e..00af7d52ae 100644 --- a/ceammc/ext/src/array/array_set.h +++ b/ceammc/ext/src/array/array_set.h @@ -9,10 +9,10 @@ class ArraySet : public ArrayMod { public: ArraySet(const PdArgs& a); void onSymbol(t_symbol* s) override; - void onList(const AtomList& values) override; - void set(const AtomList& v); + void onList(const AtomListView& lv) override; + void set(const AtomListView& lv); }; -extern "C" void setup_array0x2eset(); +void setup_array_set(); #endif // ARRAY_SET_H diff --git a/ceammc/ext/src/array/array_vline_play.h b/ceammc/ext/src/array/array_vline_play.h index f22291108c..902c9525ce 100644 --- a/ceammc/ext/src/array/array_vline_play.h +++ b/ceammc/ext/src/array/array_vline_play.h @@ -45,9 +45,9 @@ class ArrayVlinePlay : public ArrayBase { void initDone() override; public: - void m_play(t_symbol* s, const AtomListView& lst); - void m_stop(t_symbol* s, const AtomListView& lst); - void m_range(t_symbol* s, const AtomListView& lst); + void m_play(t_symbol* s, const AtomListView& lv); + void m_stop(t_symbol* s, const AtomListView& lv); + void m_range(t_symbol* s, const AtomListView& lv); private: size_t secToAbsPosition(t_float t); diff --git a/ceammc/ext/src/array/grain.cpp b/ceammc/ext/src/array/grain.cpp index 65228b5bef..c6e501af38 100644 --- a/ceammc/ext/src/array/grain.cpp +++ b/ceammc/ext/src/array/grain.cpp @@ -17,6 +17,7 @@ #include "ceammc_sound.h" #include "ceammc_window.h" +#include "fmt/core.h" #include "grain_expr_parser.h" #include "grain_random.h" @@ -57,6 +58,11 @@ static const char* interp2str(GrainInterp i) return txt[i]; } +static std::string tag2str(t_symbol* tag) +{ + return tag ? (std::string(1, '.') + tag->s_name) : std::string {}; +} + Grain::Grain() : pan_(0.5) , state_(GRAIN_FINISHED) @@ -64,10 +70,11 @@ Grain::Grain() , pan_mode_(GRAIN_PAN_LINEAR) , play_interp_(GRAIN_INTERP_NONE) , win_type_(GRAIN_WIN_RECT) + , pre_delay_done_(false) { } -Grain::Grain(size_t array_pos, size_t length, size_t time_before) +Grain::Grain(size_t array_pos, size_t length, size_t pre_delay) : pan_(0.5) , state_(GRAIN_FINISHED) , pan_overflow_(GRAIN_PROP_OVERFLOW_CLIP) @@ -77,7 +84,7 @@ Grain::Grain(size_t array_pos, size_t length, size_t time_before) { src_pos_ = array_pos; length_ = length; - time_before_ = time_before; + pre_delay_ = pre_delay; } bool Grain::matchTag(const std::regex& rx) const @@ -148,7 +155,7 @@ GrainState Grain::done() if (ondone_->evalPropAction(*this, GRAIN_PROP_PAN, res)) setPan(res); - res = time_before_; + res = pre_delay_; if (ondone_->evalPropAction(*this, GRAIN_PROP_TIME_BEFORE, res)) setTimeBefore(std::max(0, res)); @@ -170,39 +177,53 @@ GrainState Grain::done() } play_pos_ = 0; + pre_delay_done_ = true; return state_; } std::ostream& operator<<(std::ostream& os, const Grain& g) { - os << "grain(#" << g.id(); - - if (g.tag()) - os << '.' << g.tag()->s_name; - - os << ",@at=" << g.arrayPosInSamples() - << ",@l=" << g.lengthInSamples() - << ",@d=" << g.durationInSamples() - << ",@tb=" << g.timeBefore() - << ",@ta=" << g.timeAfter() - << ",@amp=" << g.amplitude() - << ",@s=" << g.speed() - << ",@p=" << g.pan() - << ",panmode=" << panMode2str(g.panMode()) - << ",interp=" << interp2str(g.playInterpolation()) - << ')'; + + os << fmt::format("grain(#{}{}," + "@at={},@l={},@dur={},@tb={},@ta={}," + "@amp={},@s={},@p={},@r={},@cnt={}," + "panmode={}," + "interp={})", + g.id(), + tag2str(g.tag()), + g.arrayPosInSamples(), + g.lengthInSamples(), + g.durationInSamples(), + g.timeBefore(), + g.timeAfter(), + g.amplitude(), + g.speed(), + g.pan(), + g.repeats(), + g.doneCounter(), + panMode2str(g.panMode()), + interp2str(g.playInterpolation())); + return os; } -GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint32_t bs, uint32_t sr) +GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint32_t bs, uint32_t sr, uint32_t buf_offset, uint32_t* done_samp) { constexpr float SLOW_LIMIT = 0.001; constexpr float QUIT_LIMIT = 0.00001; + if (done_samp) + *done_samp = 0; + // invalid - if (state_ == GRAIN_FINISHED) + if (state_ == GRAIN_FINISHED || state_ == GRAIN_PAUSE) return state_; + if (buf_offset < bs) + bs -= buf_offset; + else + buf_offset = 0; + // optimization: silence before grain const double next_block = play_pos_ + bs; if (next_block < grainStartInSamples()) { @@ -210,14 +231,12 @@ GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint return state_; } - const size_t WHOLE_GRAIN_END = time_before_ + length_ + time_after_; - // optim: silence after grain - if (play_pos_ >= grainEndInSamples()) { + if (afterGrain()) { play_pos_ += bs; // should finish - if (play_pos_ >= WHOLE_GRAIN_END) + if (shouldDone()) return done(); return state_; @@ -232,24 +251,24 @@ GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint const auto pan_coeffs = panSample(1); const double step_incr = std::abs(play_speed_); - // before grain + // silence before grain in current block size_t i = 0; - if (play_pos_ < time_before_) { - i = time_before_ - play_pos_; - play_pos_ += i; + if (beforeGrain()) { + i = pre_delay_ - play_pos_; + play_pos_ = pre_delay_; + if (done_samp) + (*done_samp) += i; } for (; i < bs && play_pos_ < grainEndInSamples(); i++) { // only grain itself expected here, without silence before/after - assert(play_pos_ >= grainStartInSamples() && play_pos_ < grainEndInSamples()); + assert(!beforeGrain() && !afterGrain()); // array play position const double arr_idx = currentArrayPlayPos(); - if (arr_idx < 0 || arr_idx >= in_size) + if (!validArrayPos(arr_idx, in_size)) return done(); - assert(arr_idx >= 0 && arr_idx < in_size); - t_sample value = 0; const auto idx = static_cast(arr_idx); @@ -328,7 +347,7 @@ GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint } if (mods_) { - const double t = play_pos_ - time_before_; + const double t = play_pos_ - pre_delay_; if (mods_->modAmp()) amp_ = mods_->mod(GRAIN_PROP_AMP, sr, t); @@ -343,19 +362,31 @@ GrainState Grain::process(ArrayIterator in, size_t in_size, t_sample** buf, uint const auto vamp = value * amp_; // apply pan - buf[0][i] += pan_coeffs.first * vamp; - buf[1][i] += pan_coeffs.second * vamp; + buf[0][i + buf_offset] += pan_coeffs.first * vamp; + buf[1][i + buf_offset] += pan_coeffs.second * vamp; play_pos_ += step_incr; - if (play_pos_ >= WHOLE_GRAIN_END) + // increment done samples + if (done_samp) + (*done_samp)++; + + if (shouldDone()) return done(); } - if (play_pos_ >= WHOLE_GRAIN_END) + if (shouldDone()) return done(); - else if (play_pos_ >= grainEndInSamples()) - play_pos_ += (bs - i); + else if (afterGrain()) { + auto left_samp = (bs - 1) - i; + play_pos_ += left_samp; + if (done_samp && time_after_ <= left_samp) + (*done_samp) += time_after_; + + // need to check again + if (shouldDone()) + return done(); + } return GRAIN_PLAYING; } @@ -375,7 +406,7 @@ void Grain::initByteCodeConst(ByteCode& bc) const bc.setConst(2, length_); bc.setConst(3, pan_); bc.setConst(4, play_speed_); - bc.setConst(5, time_before_); + bc.setConst(5, pre_delay_); bc.setConst(6, sys_getsr()); bc.setConst(7, 64); bc.setConst(8, array_size_); diff --git a/ceammc/ext/src/array/grain.h b/ceammc/ext/src/array/grain.h index 8df91a00e1..86701ee847 100644 --- a/ceammc/ext/src/array/grain.h +++ b/ceammc/ext/src/array/grain.h @@ -64,6 +64,7 @@ enum GrainWindowType : uint8_t { enum GrainState : uint8_t { GRAIN_FINISHED, + GRAIN_PAUSE, GRAIN_PLAYING, }; @@ -146,6 +147,15 @@ class GrainPropModulator { GrainModulation type() const { return mtype_; } }; +template +std::unique_ptr unique_clone(const std::unique_ptr& up) +{ + if (up) + return std::unique_ptr(new T(*up)); + else + return {}; +} + class GrainPropMods { GrainPropModulator speed_; GrainPropModulator amp_; @@ -174,7 +184,7 @@ class Grain { uint32_t length_ = { 0 }; ///< grain length in samples int32_t repeats_ = { -1 }; ///< max number of grain repeats - uint32_t time_before_ = { 0 }; ///< silence before grain in samples + uint32_t pre_delay_ = { 0 }; ///< silence before first grain playing in samples uint32_t time_after_ = { 0 }; ///< silence after grain in samples double play_pos_ = { 0 }; ///< current grain play position in samples @@ -197,32 +207,57 @@ class Grain { ///< pan float pan_ = { 0.5 }; // 0: left, 0.5: center, 1: right - ///< win param + ///< window parameters float win_param_ = { 0 }; ///< grain id uint16_t id_ = { 0 }; ///< flags - GrainState state_ : 1; + GrainState state_ : 2; GrainPropOverflow pan_overflow_ : 2; GrainPan pan_mode_ : 2; GrainInterp play_interp_ : 2; GrainWindowType win_type_ : 3; + bool pre_delay_done_ : 1; // used to play 'upbeat' before normal grain playing - Grain(const Grain&) = delete; Grain& operator=(const Grain&) = delete; public: Grain(); + explicit Grain(const Grain& g) + : array_size_(g.array_size_) + , src_pos_(g.src_pos_) + , length_(g.length_) + , repeats_(g.repeats_) + , pre_delay_(g.pre_delay_) + , time_after_(g.time_after_) + , play_pos_(g.play_pos_) + , tag_(g.tag_) + , ondone_(unique_clone(g.ondone_)) + , mods_(unique_clone(g.mods_)) + , amp_(g.amp_) + , play_speed_(g.play_speed_) + , cnt_repeats_(g.cnt_repeats_) + , pan_(g.pan_) + , id_(g.id_) + , state_(g.state_) + , pan_overflow_(g.pan_overflow_) + , pan_mode_(g.pan_mode_) + , play_interp_(g.play_interp_) + , win_type_(g.win_type_) + , pre_delay_done_(g.pre_delay_done_) + { + } + /** * Grain ctor - * @param array_pos - grain position in the array - * @param length - grain length - * @param time_before - pause before grain + * @param array_pos - grain position in the array (in samples) + * @param length - grain length (in samples) + * @param pre_delay - 'upbeat' before the grain will be played first time (in samples) */ - Grain(size_t array_pos, size_t length, size_t time_before = 0); + Grain(size_t array_pos, size_t length, size_t pre_delay = 0); /// get grain id uint16_t id() const { return id_; } @@ -249,11 +284,12 @@ class Grain { /// set grain length void setLengthInSamples(size_t l) { length_ = l; } - size_t grainStartInSamples() const { return time_before_; } - size_t grainEndInSamples() const { return time_before_ + length_; } - double currentLogicPlayPos() const { return play_pos_ - time_before_; } + inline size_t grainStartInSamples() const { return pre_delay_done_ ? 0 : pre_delay_; } + inline size_t grainEndInSamples() const { return grainStartInSamples() + length_; } + inline size_t grainDonePos() const { return grainEndInSamples() + time_after_; } + double currentLogicPlayPos() const { return play_pos_ - grainStartInSamples(); } - double currentAbsPlayPos() const + [[deprecated]] double currentAbsPlayPos() const { if (play_speed_ >= 0) return currentLogicPlayPos(); @@ -261,7 +297,13 @@ class Grain { return double(length_) - (currentLogicPlayPos() + 1); } - double currentArrayPlayPos() const { return src_pos_ + currentAbsPlayPos(); } + double currentArrayPlayPos() const + { + if (play_speed_ >= 0) + return src_pos_ + currentLogicPlayPos(); + else + return src_pos_ + (double(length_) - 1) - currentLogicPlayPos(); + } /// grain play duration according to playing speed size_t durationInSamples() const @@ -281,8 +323,8 @@ class Grain { size_t endInSamples() const { return timeBefore() + durationInSamples(); } /// grain playing time on the global timeline - size_t timeBefore() const { return time_before_; } - void setTimeBefore(uint32_t samp) { time_before_ = samp; } + size_t timeBefore() const { return pre_delay_; } + void setTimeBefore(uint32_t samp) { pre_delay_ = samp; } /// silence after grain in samples size_t timeAfter() const { return time_after_; } @@ -331,11 +373,27 @@ class Grain { } } + /** + * @brief start grain playing at position + */ void start(size_t playPosSamp); + void resetFirstTime() { pre_delay_done_ = false; } + void resetPlayPos() { play_pos_ = 0; } + GrainState done(); - GrainState process(ArrayIterator in, size_t in_size, t_sample** buf, uint32_t bs, uint32_t sr); + /** + * @brief process grain: add grain output to specified buffers + * @param in - input source array iterator + * @param in_size - array size in samples + * @param buf - point to input buffers (left and right channels) + * @param bs - buffer block size + * @param sr - samplerate + * @param done_samp - pointer to write number of processed samples in current block + * @return + */ + GrainState process(ArrayIterator in, size_t in_size, t_sample** buf, uint32_t bs, uint32_t sr, uint32_t buf_offset = 0, uint32_t* done_samp = nullptr); // grain playing status GrainState playStatus() const { return state_; } @@ -346,14 +404,18 @@ class Grain { void initByteCodeConst(ByteCode& bc) const; - bool canBePlayed() const { return (repeats_ == -1) || (cnt_repeats_ < repeats_); } + inline bool canBePlayed() const { return (repeats_ == -1) || (cnt_repeats_ < repeats_); } void setModulation(GrainPropId id, const GrainPropModulator& mod); bool hasModulation(GrainPropId id) const; private: - bool beforeGrain() const { return play_pos_ < time_before_; } - bool afterGrain() const { return play_pos_ >= double(time_before_ + length_); } + inline bool beforeGrain() const { return play_pos_ < grainStartInSamples(); } + inline bool afterGrain() const { return play_pos_ >= grainEndInSamples(); } + inline bool validArrayPos(double pos, size_t size) const { return 0 <= pos && pos < size; } + + /// checks if the whole grain playing should be stopped + inline bool shouldDone() const { return play_pos_ >= grainDonePos(); } public: static bool initWinTables(); diff --git a/ceammc/ext/src/array/grain_cloud.cpp b/ceammc/ext/src/array/grain_cloud.cpp index 958baf1181..6d47bfea95 100644 --- a/ceammc/ext/src/array/grain_cloud.cpp +++ b/ceammc/ext/src/array/grain_cloud.cpp @@ -12,12 +12,40 @@ * this file belongs to. *****************************************************************************/ #include "grain_cloud.h" +#include "array_play_tilde.h" +#include "ceammc_convert.h" +#include "fmt/core.h" #include "grain_random.h" #include +#include + +using GrainPreVec = boost::container::small_vector; namespace ceammc { +namespace { + inline bool tagEqual(const char* tag, char ch) + { + return tag[0] == ch && tag[1] == '\0'; + } + + inline bool tagAll(t_symbol* tag) + { + return !tag || tag == &s_ || tagEqual(tag->s_name, '*'); + } + + inline bool tagMatch(const Grain* g, t_symbol* tag) + { + if (tagAll(tag)) + return true; + else if (tagEqual(tag->s_name, '.') && g->playStatus() == GRAIN_FINISHED) + return true; + else + return g->tag() == tag; + } +} + GrainCloud::GrainCloud(size_t n) : pool_(n) { @@ -73,6 +101,35 @@ void GrainCloud::removeByTag(t_symbol* tag) grains_.erase(from, grains_.end()); } +void GrainCloud::pauseAll(bool value) +{ + const auto st = value ? GRAIN_PAUSE : GRAIN_PLAYING; + for (auto* g : grains_) + g->setPlayStatus(st); +} + +void GrainCloud::pauseById(int id, bool value) +{ + const auto st = value ? GRAIN_PAUSE : GRAIN_PLAYING; + + for (auto* g : grains_) { + if (g->id() == id) { + g->setPlayStatus(st); + break; + } + } +} + +void GrainCloud::pauseByTag(t_symbol* tag, bool value) +{ + const auto st = value ? GRAIN_PAUSE : GRAIN_PLAYING; + + for (auto* g : grains_) { + if (g->tag() == tag) + g->setPlayStatus(st); + } +} + void GrainCloud::alignAll(const std::vector& onsets) { for (auto* g : grains_) @@ -105,6 +162,144 @@ void GrainCloud::alignFinished(const std::vector& onsets) } } +bool GrainCloud::shuffle(t_symbol* tag) +{ + // count target grains + const auto N = tagAll(tag) + ? grains_.size() + : std::count_if(grains_.begin(), grains_.end(), [tag](const Grain* g) { return tagMatch(g, tag); }); + + if (N < 1) + return false; + + // store grain pre-delay times + GrainPreVec gpos; + gpos.reserve(N); + size_t maxlen = 0; + for (auto g : grains_) { + if (tagMatch(g, tag)) { + gpos.push_back(g->timeBefore()); + maxlen = std::max(maxlen, g->durationInSamples() + g->timeAfter()); + } + } + + // shuffle grain pre-delay times + std::shuffle(gpos.begin(), gpos.end(), GrainRandom::instance().gen()); + + // spread bounds + const double tlen = maxlen; + + // update grains + for (size_t i = 0, gi = 0; i < grains_.size(); i++) { + auto g = grains_[i]; + + if (tagMatch(g, tag) && gi < N) { + const double glen = g->durationInSamples(); + g->resetFirstTime(); + g->resetPlayPos(); + g->setTimeBefore(gpos[gi++]); + g->setTimeAfter(clip_min(tlen - glen)); + } + } + + return true; +} + +bool GrainCloud::reverse(t_symbol* tag) +{ + // count matched grains + // and store pre-delay times + GrainPreVec gpos; + size_t maxlen = 0; + for (auto g : grains_) { + if (tagMatch(g, tag)) { + gpos.push_back(g->timeBefore()); + maxlen = std::max(maxlen, g->durationInSamples() + g->timeAfter()); + } + } + + for (size_t i = 0, gi = 0; i < grains_.size(); i++) { + auto g = grains_[i]; + + if (tagMatch(g, tag) && gi < gpos.size()) { + const double glen = g->durationInSamples(); + const double tlen = maxlen; + const double pos = gpos[(gpos.size() - 1) - gi++]; + + g->resetFirstTime(); + g->resetPlayPos(); + g->setTimeBefore(pos); + g->setTimeAfter(clip_min(tlen - glen)); + } + } + + return true; +} + +bool GrainCloud::permutate(int n, t_symbol* tag) +{ + // count matched grains + // and store pre-delay times + GrainPreVec gpos; + size_t maxlen = 0; + for (auto g : grains_) { + if (tagMatch(g, tag)) { + gpos.push_back(g->timeBefore()); + maxlen = std::max(maxlen, g->durationInSamples() + g->timeAfter()); + } + } + + if (n > 0) { + while (n-- > 0) + std::next_permutation(gpos.begin(), gpos.end()); + } else if (n < 0) { + while (n++ < 0) + std::prev_permutation(gpos.begin(), gpos.end()); + } + + for (size_t i = 0, gi = 0; i < grains_.size(); i++) { + auto g = grains_[i]; + + if (tagMatch(g, tag) && gi < gpos.size()) { + const double glen = g->durationInSamples(); + const double tlen = maxlen; + const double pos = gpos[gi++]; + + g->resetFirstTime(); + g->resetPlayPos(); + g->setTimeBefore(pos); + g->setTimeAfter(clip_min(tlen - glen)); + } + } + + return true; +} + +bool GrainCloud::spread(uint32_t len_samp, t_symbol* tag) +{ + // count target grains + const auto N = tagAll(tag) + ? grains_.size() + : std::count_if(grains_.begin(), grains_.end(), [tag](const Grain* g) { return tagMatch(g, tag); }); + + for (size_t i = 0, gi = 0; i < grains_.size(); i++) { + auto g = grains_[i]; + + if (tagMatch(g, tag) && gi < N) { + const double glen = g->durationInSamples(); + const double tlen = len_samp; + const double gpos = (gi++ / double(N)) * tlen; + + g->resetFirstTime(); + g->resetPlayPos(); + g->setTimeBefore(gpos); + g->setTimeAfter(clip_min(tlen - glen)); + } + } + + return true; +} + void GrainCloud::popGrain() { if (grains_.empty()) @@ -115,20 +310,22 @@ void GrainCloud::popGrain() grains_.pop_back(); } -void GrainCloud::playBuffer(t_sample** buf, uint32_t bs, uint32_t sr) +int GrainCloud::playBuffer(t_sample** buf, uint32_t bs, uint32_t sr) { + int ndone = 0; + std::fill(&buf[0][0], &buf[0][0] + bs, 0); std::fill(&buf[1][0], &buf[1][0] + bs, 0); if (grains_.empty()) - return; + return ndone; for (auto* g : grains_) { if (!g) continue; if (g->canBePlayed()) { - if (g->playStatus() == GRAIN_FINISHED) { + if (g->playStatus() == GRAIN_FINISHED) { // grain retriggering switch (sync_) { case SYNC_INTERNAL: sync_counter_ += bs; @@ -140,8 +337,11 @@ void GrainCloud::playBuffer(t_sample** buf, uint32_t bs, uint32_t sr) if (sync_prob_ < 1) start = GrainRandom::instance().urandf(0, 1) < sync_prob_; - if (start) + if (start) { g->start(0); + g->process(array_it_, array_size_, buf, bs, sr); + ++ndone; + } } break; @@ -153,20 +353,58 @@ void GrainCloud::playBuffer(t_sample** buf, uint32_t bs, uint32_t sr) if (sync_prob_ < 1) start = GrainRandom::instance().urandf(0, 1) < sync_prob_; - if (start) + if (start) { g->start(0); + g->process(array_it_, array_size_, buf, bs, sr); + ++ndone; + } } break; case SYNC_NONE: default: g->start(0); + ++ndone; + + uint32_t done_samp = 0; + uint32_t offset = 0; + auto state = g->process(array_it_, array_size_, buf, bs, sr, offset, &done_samp); + + while (state == GRAIN_FINISHED && g->canBePlayed() && done_samp > 0 && offset < bs) { + offset += done_samp; + done_samp = 0; + g->start(0); + state = g->process(array_it_, array_size_, buf, bs, sr, offset, &done_samp); + ++ndone; + } + break; + } + } else { // process without retriggering + switch (sync_) { + case SYNC_INTERNAL: + case SYNC_EXTERNAL: + // simple process + g->process(array_it_, array_size_, buf, bs, sr); + break; + case SYNC_NONE: + default: + uint32_t done_samp = 0; + uint32_t offset = 0; + auto state = g->process(array_it_, array_size_, buf, bs, sr, offset, &done_samp); + + while (state == GRAIN_FINISHED && g->canBePlayed() && done_samp > 0 && offset < bs) { + offset += done_samp; + done_samp = 0; + g->start(0); + state = g->process(array_it_, array_size_, buf, bs, sr, offset, &done_samp); + ++ndone; + } break; } } - - g->process(array_it_, array_size_, buf, bs, sr); } } + + return ndone; } void GrainCloud::alignGrain(Grain* g, const std::vector& onsets) diff --git a/ceammc/ext/src/array/grain_cloud.h b/ceammc/ext/src/array/grain_cloud.h index f7b6721bc9..e75b6a9306 100644 --- a/ceammc/ext/src/array/grain_cloud.h +++ b/ceammc/ext/src/array/grain_cloud.h @@ -75,12 +75,27 @@ class GrainCloud { void removeById(int id); void removeByTag(t_symbol* tag); + void pauseAll(bool value); + void pauseById(int id, bool value); + void pauseByTag(t_symbol* tag, bool value); + void alignGrain(Grain* g, const std::vector& onsets); void alignAll(const std::vector& onsets); void alignById(int id, const std::vector& onsets); void alignByTag(t_symbol* tag, const std::vector& onsets); void alignFinished(const std::vector& onsets); + /** + * uniformly spread grains + */ + bool spread(uint32_t len_samp, t_symbol* tag = &s_); + + bool shuffle(t_symbol* tag = &s_); + + bool reverse(t_symbol* tag = &s_); + + bool permutate(int n, t_symbol* tag = &s_); + void setArrayData(ArrayIterator data, size_t sz) { array_it_ = data; @@ -99,7 +114,14 @@ class GrainCloud { void popGrain(); - void playBuffer(t_sample** buf, uint32_t bs, uint32_t sr); + /** + * play active grains and add their values to given stereo buffer + * @param buf - output buffer + * @param bs - buffer size + * @param sr - samplerate + * @return number of done grains while playing this buffer + */ + int playBuffer(t_sample** buf, uint32_t bs, uint32_t sr); }; } diff --git a/ceammc/ext/src/array/grain_expr.y b/ceammc/ext/src/array/grain_expr.y index 0045810422..a9abc58d0b 100644 --- a/ceammc/ext/src/array/grain_expr.y +++ b/ceammc/ext/src/array/grain_expr.y @@ -171,6 +171,9 @@ expr ::= FN_URAND OPENP CLOSEP. { p->bcPushCode(ceammc::OP_URAND0); } expr ::= FN_URAND OPENP expr CLOSEP. { p->bcPushCode(ceammc::OP_URAND1); } expr ::= FN_URAND OPENP expr COMMA expr CLOSEP. { p->bcPushCode(ceammc::OP_URAND2); } +expr ::= FN_URAND OPENP expr DOTS expr CLOSEP. + { p->bcPushCode(ceammc::OP_URAND2); } + number(A) ::= DOUBLE(B). { A = B; p->bcPushValue(B.val); } number(A) ::= MINUS DOUBLE(B). { A.val = -B.val; p->bcPushValue(-B.val); } diff --git a/ceammc/ext/src/array/grain_expr_lemon.h b/ceammc/ext/src/array/grain_expr_lemon.h index 8c59387aae..543dc875af 100644 --- a/ceammc/ext/src/array/grain_expr_lemon.h +++ b/ceammc/ext/src/array/grain_expr_lemon.h @@ -199,18 +199,18 @@ typedef union { #define parse_grain_exprCTX_PARAM #define parse_grain_exprCTX_FETCH #define parse_grain_exprCTX_STORE -#define YYNSTATE 118 -#define YYNRULE 109 -#define YYNRULE_WITH_ACTION 95 +#define YYNSTATE 120 +#define YYNRULE 110 +#define YYNRULE_WITH_ACTION 96 #define YYNTOKEN 81 -#define YY_MAX_SHIFT 117 -#define YY_MIN_SHIFTREDUCE 212 -#define YY_MAX_SHIFTREDUCE 320 -#define YY_ERROR_ACTION 321 -#define YY_ACCEPT_ACTION 322 -#define YY_NO_ACTION 323 -#define YY_MIN_REDUCE 324 -#define YY_MAX_REDUCE 432 +#define YY_MAX_SHIFT 119 +#define YY_MIN_SHIFTREDUCE 215 +#define YY_MAX_SHIFTREDUCE 324 +#define YY_ERROR_ACTION 325 +#define YY_ACCEPT_ACTION 326 +#define YY_NO_ACTION 327 +#define YY_MIN_REDUCE 328 +#define YY_MAX_REDUCE 437 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -277,66 +277,66 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (571) +#define YY_ACTTAB_COUNT (577) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 52, 48, 426, 51, 52, 48, 40, 51, 36, 30, - /* 10 */ 32, 28, 26, 34, 36, 30, 32, 28, 26, 34, - /* 20 */ 6, 77, 36, 30, 32, 28, 26, 34, 431, 247, - /* 30 */ 90, 96, 97, 101, 248, 320, 403, 80, 115, 114, - /* 40 */ 233, 234, 235, 295, 249, 250, 251, 252, 253, 254, - /* 50 */ 255, 256, 257, 258, 259, 260, 261, 262, 236, 237, - /* 60 */ 238, 344, 116, 113, 112, 111, 110, 109, 108, 107, - /* 70 */ 106, 105, 104, 103, 102, 40, 100, 99, 212, 213, - /* 80 */ 214, 215, 216, 217, 39, 219, 421, 422, 37, 6, - /* 90 */ 77, 285, 263, 264, 265, 266, 117, 98, 44, 42, - /* 100 */ 96, 97, 101, 46, 79, 425, 427, 115, 114, 427, - /* 110 */ 427, 78, 288, 249, 250, 251, 252, 253, 254, 255, - /* 120 */ 256, 257, 258, 259, 260, 261, 262, 304, 305, 306, - /* 130 */ 402, 116, 113, 112, 111, 110, 109, 108, 107, 106, - /* 140 */ 105, 104, 103, 102, 40, 100, 99, 36, 30, 32, - /* 150 */ 28, 26, 34, 30, 32, 28, 26, 34, 6, 77, - /* 160 */ 36, 30, 32, 28, 26, 34, 43, 82, 294, 96, - /* 170 */ 97, 101, 229, 81, 239, 240, 115, 114, 241, 227, - /* 180 */ 85, 287, 249, 250, 251, 252, 253, 254, 255, 256, - /* 190 */ 257, 258, 259, 260, 261, 262, 84, 87, 303, 88, - /* 200 */ 116, 113, 112, 111, 110, 109, 108, 107, 106, 105, - /* 210 */ 104, 103, 102, 41, 100, 99, 53, 41, 225, 4, - /* 220 */ 53, 249, 250, 251, 252, 253, 254, 255, 256, 257, - /* 230 */ 258, 259, 260, 261, 262, 419, 54, 55, 34, 9, - /* 240 */ 54, 55, 212, 213, 214, 215, 216, 217, 39, 219, - /* 250 */ 36, 30, 32, 28, 26, 34, 11, 56, 38, 292, - /* 260 */ 117, 56, 44, 42, 57, 289, 3, 243, 57, 36, - /* 270 */ 30, 32, 28, 26, 34, 36, 30, 32, 28, 26, - /* 280 */ 34, 36, 30, 32, 28, 26, 34, 15, 242, 244, - /* 290 */ 245, 246, 36, 30, 32, 28, 26, 34, 36, 30, - /* 300 */ 32, 28, 26, 34, 36, 30, 32, 28, 26, 34, - /* 310 */ 47, 5, 45, 293, 47, 322, 1, 46, 58, 286, - /* 320 */ 1, 323, 58, 1, 1, 283, 16, 36, 30, 32, - /* 330 */ 28, 26, 34, 36, 30, 32, 28, 26, 34, 36, - /* 340 */ 30, 32, 28, 26, 34, 17, 230, 18, 282, 7, - /* 350 */ 221, 222, 223, 89, 284, 8, 323, 86, 83, 323, - /* 360 */ 281, 59, 19, 49, 50, 59, 10, 49, 50, 60, - /* 370 */ 61, 62, 12, 60, 61, 62, 20, 323, 13, 21, - /* 380 */ 36, 30, 32, 28, 26, 34, 63, 64, 65, 22, - /* 390 */ 63, 64, 65, 66, 67, 23, 68, 66, 67, 323, - /* 400 */ 68, 14, 24, 36, 30, 32, 28, 26, 34, 36, - /* 410 */ 30, 32, 28, 26, 34, 36, 30, 32, 28, 26, - /* 420 */ 34, 69, 95, 70, 280, 69, 95, 70, 94, 71, - /* 430 */ 279, 93, 94, 71, 323, 93, 278, 25, 36, 30, - /* 440 */ 32, 28, 26, 34, 36, 30, 32, 28, 26, 34, - /* 450 */ 36, 30, 32, 28, 26, 34, 72, 92, 73, 277, - /* 460 */ 72, 92, 73, 91, 74, 276, 76, 91, 74, 323, - /* 470 */ 76, 275, 27, 36, 30, 32, 28, 26, 34, 36, - /* 480 */ 30, 32, 28, 26, 34, 36, 30, 32, 28, 26, - /* 490 */ 34, 75, 323, 29, 274, 75, 31, 33, 323, 35, - /* 500 */ 273, 323, 323, 323, 323, 323, 272, 323, 36, 30, - /* 510 */ 32, 28, 26, 34, 36, 30, 32, 28, 26, 34, - /* 520 */ 36, 30, 32, 28, 26, 34, 220, 323, 323, 271, - /* 530 */ 323, 323, 323, 323, 323, 270, 323, 323, 323, 323, - /* 540 */ 2, 269, 323, 36, 30, 32, 28, 26, 34, 36, - /* 550 */ 30, 32, 28, 26, 34, 323, 323, 323, 323, 323, - /* 560 */ 323, 323, 323, 323, 268, 323, 323, 323, 323, 323, - /* 570 */ 267, + /* 0 */ 53, 48, 431, 52, 53, 48, 41, 52, 37, 31, + /* 10 */ 33, 29, 27, 35, 37, 31, 33, 29, 27, 35, + /* 20 */ 7, 79, 37, 31, 33, 29, 27, 35, 436, 250, + /* 30 */ 92, 98, 99, 103, 251, 291, 408, 82, 117, 116, + /* 40 */ 236, 237, 238, 324, 252, 253, 254, 255, 256, 257, + /* 50 */ 258, 259, 260, 261, 262, 263, 264, 265, 239, 240, + /* 60 */ 241, 348, 118, 115, 114, 113, 112, 111, 110, 109, + /* 70 */ 108, 107, 106, 105, 104, 41, 102, 101, 215, 216, + /* 80 */ 217, 218, 219, 220, 40, 222, 426, 427, 38, 7, + /* 90 */ 79, 288, 266, 267, 268, 269, 119, 100, 45, 43, + /* 100 */ 98, 99, 103, 47, 81, 430, 432, 117, 116, 432, + /* 110 */ 432, 80, 292, 252, 253, 254, 255, 256, 257, 258, + /* 120 */ 259, 260, 261, 262, 263, 264, 265, 308, 309, 310, + /* 130 */ 407, 118, 115, 114, 113, 112, 111, 110, 109, 108, + /* 140 */ 107, 106, 105, 104, 41, 102, 101, 37, 31, 33, + /* 150 */ 29, 27, 35, 31, 33, 29, 27, 35, 7, 79, + /* 160 */ 37, 31, 33, 29, 27, 35, 44, 84, 299, 98, + /* 170 */ 99, 103, 232, 83, 242, 243, 117, 116, 244, 230, + /* 180 */ 87, 298, 252, 253, 254, 255, 256, 257, 258, 259, + /* 190 */ 260, 261, 262, 263, 264, 265, 86, 89, 307, 90, + /* 200 */ 118, 115, 114, 113, 112, 111, 110, 109, 108, 107, + /* 210 */ 106, 105, 104, 42, 102, 101, 54, 42, 228, 4, + /* 220 */ 54, 252, 253, 254, 255, 256, 257, 258, 259, 260, + /* 230 */ 261, 262, 263, 264, 265, 424, 55, 56, 35, 10, + /* 240 */ 55, 56, 215, 216, 217, 218, 219, 220, 40, 222, + /* 250 */ 37, 31, 33, 29, 27, 35, 12, 57, 39, 296, + /* 260 */ 119, 57, 45, 43, 58, 293, 3, 246, 58, 37, + /* 270 */ 31, 33, 29, 27, 35, 37, 31, 33, 29, 27, + /* 280 */ 35, 37, 31, 33, 29, 27, 35, 16, 245, 247, + /* 290 */ 248, 249, 37, 31, 33, 29, 27, 35, 37, 31, + /* 300 */ 33, 29, 27, 35, 37, 31, 33, 29, 27, 35, + /* 310 */ 59, 5, 46, 289, 59, 326, 1, 47, 49, 297, + /* 320 */ 1, 233, 49, 1, 1, 286, 327, 37, 31, 33, + /* 330 */ 29, 27, 35, 17, 6, 18, 37, 31, 33, 29, + /* 340 */ 27, 35, 37, 31, 33, 29, 27, 35, 285, 8, + /* 350 */ 60, 327, 19, 20, 60, 9, 61, 290, 21, 327, + /* 360 */ 61, 50, 22, 287, 51, 50, 13, 62, 51, 63, + /* 370 */ 23, 62, 11, 63, 224, 225, 226, 91, 14, 24, + /* 380 */ 327, 88, 85, 37, 31, 33, 29, 27, 35, 25, + /* 390 */ 64, 65, 66, 67, 64, 65, 66, 67, 68, 26, + /* 400 */ 28, 15, 68, 37, 31, 33, 29, 27, 35, 37, + /* 410 */ 31, 33, 29, 27, 35, 37, 31, 33, 29, 27, + /* 420 */ 35, 69, 70, 71, 284, 69, 70, 71, 327, 97, + /* 430 */ 283, 72, 30, 97, 327, 72, 282, 32, 37, 31, + /* 440 */ 33, 29, 27, 35, 37, 31, 33, 29, 27, 35, + /* 450 */ 37, 31, 33, 29, 27, 35, 96, 73, 95, 281, + /* 460 */ 96, 73, 95, 327, 74, 280, 94, 34, 74, 327, + /* 470 */ 94, 279, 36, 37, 31, 33, 29, 27, 35, 37, + /* 480 */ 31, 33, 29, 27, 35, 37, 31, 33, 29, 27, + /* 490 */ 35, 75, 327, 327, 278, 75, 327, 93, 76, 78, + /* 500 */ 277, 93, 76, 78, 327, 327, 276, 327, 37, 31, + /* 510 */ 33, 29, 27, 35, 37, 31, 33, 29, 27, 35, + /* 520 */ 37, 31, 33, 29, 27, 35, 77, 327, 327, 275, + /* 530 */ 77, 327, 327, 327, 327, 274, 327, 327, 327, 327, + /* 540 */ 327, 273, 327, 37, 31, 33, 29, 27, 35, 37, + /* 550 */ 31, 33, 29, 27, 35, 37, 31, 33, 29, 27, + /* 560 */ 35, 223, 327, 327, 272, 327, 327, 327, 327, 327, + /* 570 */ 271, 327, 327, 327, 327, 2, 270, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 92, 92, 94, 92, 96, 96, 6, 96, 1, 2, @@ -371,81 +371,81 @@ static const YYCODETYPE yy_lookahead[] = { /* 290 */ 41, 42, 1, 2, 3, 4, 5, 6, 1, 2, /* 300 */ 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, /* 310 */ 92, 43, 75, 22, 96, 81, 82, 83, 92, 22, - /* 320 */ 86, 99, 96, 89, 90, 22, 20, 1, 2, 3, - /* 330 */ 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, - /* 340 */ 2, 3, 4, 5, 6, 20, 26, 20, 22, 75, - /* 350 */ 16, 17, 18, 19, 22, 75, 99, 23, 24, 99, - /* 360 */ 22, 92, 20, 92, 92, 96, 75, 96, 96, 92, - /* 370 */ 92, 92, 75, 96, 96, 96, 20, 99, 75, 20, - /* 380 */ 1, 2, 3, 4, 5, 6, 92, 92, 92, 20, - /* 390 */ 96, 96, 96, 92, 92, 20, 92, 96, 96, 99, - /* 400 */ 96, 75, 20, 1, 2, 3, 4, 5, 6, 1, + /* 320 */ 86, 26, 96, 89, 90, 22, 99, 1, 2, 3, + /* 330 */ 4, 5, 6, 20, 43, 20, 1, 2, 3, 4, + /* 340 */ 5, 6, 1, 2, 3, 4, 5, 6, 22, 75, + /* 350 */ 92, 99, 20, 20, 96, 75, 92, 22, 20, 99, + /* 360 */ 96, 92, 20, 22, 92, 96, 75, 92, 96, 92, + /* 370 */ 20, 96, 75, 96, 16, 17, 18, 19, 75, 20, + /* 380 */ 99, 23, 24, 1, 2, 3, 4, 5, 6, 20, + /* 390 */ 92, 92, 92, 92, 96, 96, 96, 96, 92, 20, + /* 400 */ 20, 75, 96, 1, 2, 3, 4, 5, 6, 1, /* 410 */ 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, - /* 420 */ 6, 92, 92, 92, 22, 96, 96, 96, 92, 92, - /* 430 */ 22, 92, 96, 96, 99, 96, 22, 20, 1, 2, + /* 420 */ 6, 92, 92, 92, 22, 96, 96, 96, 99, 92, + /* 430 */ 22, 92, 20, 96, 99, 96, 22, 20, 1, 2, /* 440 */ 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, /* 450 */ 1, 2, 3, 4, 5, 6, 92, 92, 92, 22, - /* 460 */ 96, 96, 96, 92, 92, 22, 92, 96, 96, 99, + /* 460 */ 96, 96, 96, 99, 92, 22, 92, 20, 96, 99, /* 470 */ 96, 22, 20, 1, 2, 3, 4, 5, 6, 1, /* 480 */ 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, - /* 490 */ 6, 92, 99, 20, 22, 96, 20, 20, 99, 20, - /* 500 */ 22, 99, 99, 99, 99, 99, 22, 99, 1, 2, + /* 490 */ 6, 92, 99, 99, 22, 96, 99, 92, 92, 92, + /* 500 */ 22, 96, 96, 96, 99, 99, 22, 99, 1, 2, /* 510 */ 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, - /* 520 */ 1, 2, 3, 4, 5, 6, 15, 99, 99, 22, - /* 530 */ 99, 99, 99, 99, 99, 22, 99, 99, 99, 99, - /* 540 */ 29, 22, 99, 1, 2, 3, 4, 5, 6, 1, - /* 550 */ 2, 3, 4, 5, 6, 99, 99, 99, 99, 99, - /* 560 */ 99, 99, 99, 99, 22, 99, 99, 99, 99, 99, - /* 570 */ 22, 99, 99, 99, 99, 99, 99, 99, 99, 99, + /* 520 */ 1, 2, 3, 4, 5, 6, 92, 99, 99, 22, + /* 530 */ 96, 99, 99, 99, 99, 22, 99, 99, 99, 99, + /* 540 */ 99, 22, 99, 1, 2, 3, 4, 5, 6, 1, + /* 550 */ 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, + /* 560 */ 6, 15, 99, 99, 22, 99, 99, 99, 99, 99, + /* 570 */ 22, 99, 99, 99, 99, 29, 22, 99, 99, 99, /* 580 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, /* 590 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, /* 600 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, /* 610 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, /* 620 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - /* 630 */ 99, 81, 81, 81, 81, 81, 81, 81, 81, 81, - /* 640 */ 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - /* 650 */ 81, 81, + /* 630 */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + /* 640 */ 99, 99, 99, 81, 81, 81, 81, 81, 81, 81, + /* 650 */ 81, 81, 81, 81, 81, 81, 81, 81, }; -#define YY_SHIFT_COUNT (117) +#define YY_SHIFT_COUNT (119) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (548) +#define YY_SHIFT_MAX (554) static const unsigned short int yy_shift_ofst[] = { /* 0 */ 71, 235, 0, 69, 138, 138, 138, 138, 138, 138, /* 10 */ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, /* 20 */ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - /* 30 */ 138, 138, 138, 138, 138, 138, 138, 138, 91, 74, - /* 40 */ 177, 249, 334, 34, 24, 91, 511, 291, 297, 303, - /* 50 */ 326, 7, 268, 13, 21, 274, 280, 146, 159, 332, - /* 60 */ 338, 402, 408, 414, 437, 443, 449, 472, 478, 484, - /* 70 */ 507, 513, 519, 542, 548, 379, 151, 49, 140, 9, - /* 80 */ 237, 150, 152, 147, 157, 175, 160, 196, 176, 179, - /* 90 */ 199, 232, 232, 232, 232, 232, 219, 236, 244, 238, - /* 100 */ 246, 267, 306, 325, 327, 342, 356, 359, 369, 375, - /* 110 */ 382, 417, 452, 473, 476, 477, 479, 320, + /* 30 */ 138, 138, 138, 138, 138, 138, 138, 138, 138, 91, + /* 40 */ 74, 177, 249, 358, 34, 24, 91, 546, 291, 297, + /* 50 */ 303, 326, 7, 268, 13, 21, 146, 274, 280, 159, + /* 60 */ 335, 341, 402, 408, 414, 437, 443, 449, 472, 478, + /* 70 */ 484, 507, 513, 519, 542, 548, 554, 382, 151, 49, + /* 80 */ 140, 9, 237, 150, 152, 147, 157, 175, 160, 196, + /* 90 */ 176, 179, 199, 232, 232, 232, 232, 232, 219, 236, + /* 100 */ 244, 238, 246, 267, 313, 315, 332, 333, 338, 342, + /* 110 */ 350, 359, 369, 379, 380, 412, 417, 447, 452, 295, }; -#define YY_REDUCE_COUNT (46) +#define YY_REDUCE_COUNT (47) #define YY_REDUCE_MIN (-92) -#define YY_REDUCE_MAX (399) +#define YY_REDUCE_MAX (434) static const short yy_reduce_ofst[] = { /* 0 */ 234, 20, -92, -91, -89, 121, 124, 144, 145, 165, - /* 10 */ 172, 218, 226, 269, 271, 272, 277, 278, 279, 294, - /* 20 */ 295, 296, 301, 302, 304, 329, 330, 331, 336, 337, - /* 30 */ 339, 364, 365, 366, 371, 372, 374, 399, -61, -1, - /* 40 */ -68, -65, -24, -3, 12, 33, 82, + /* 10 */ 172, 218, 226, 258, 264, 269, 272, 275, 277, 298, + /* 20 */ 299, 300, 301, 306, 329, 330, 331, 337, 339, 364, + /* 30 */ 365, 366, 372, 374, 399, 405, 406, 407, 434, -61, + /* 40 */ -1, -68, -65, -24, -3, 12, 33, 82, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 10 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 20 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 30 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 330, - /* 40 */ 321, 321, 321, 429, 321, 321, 420, 321, 321, 321, - /* 50 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 60 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 70 */ 321, 321, 321, 321, 321, 343, 408, 414, 321, 321, - /* 80 */ 321, 321, 321, 340, 321, 321, 338, 321, 321, 336, - /* 90 */ 321, 409, 410, 411, 412, 413, 321, 321, 321, 321, - /* 100 */ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - /* 110 */ 321, 321, 321, 321, 321, 321, 321, 321, + /* 0 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 10 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 20 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 30 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 40 */ 334, 325, 325, 325, 434, 325, 325, 425, 325, 325, + /* 50 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 60 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 70 */ 325, 325, 325, 325, 325, 325, 325, 347, 413, 419, + /* 80 */ 325, 325, 325, 325, 325, 344, 325, 325, 342, 325, + /* 90 */ 325, 340, 325, 414, 415, 416, 417, 418, 325, 325, + /* 100 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + /* 110 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, }; /********** End of lemon-generated parsing tables *****************************/ @@ -735,39 +735,40 @@ static const char *const yyRuleName[] = { /* 73 */ "expr ::= FN_URAND OPENP CLOSEP", /* 74 */ "expr ::= FN_URAND OPENP expr CLOSEP", /* 75 */ "expr ::= FN_URAND OPENP expr COMMA expr CLOSEP", - /* 76 */ "number ::= DOUBLE", - /* 77 */ "number ::= MINUS DOUBLE", - /* 78 */ "num_vargs ::= num_vargs COMMA number", - /* 79 */ "num_vargs ::= number", - /* 80 */ "expr ::= CHOICE OPENP num_vargs CLOSEP", - /* 81 */ "expr ::= FOLD OPENP expr CLOSEP", - /* 82 */ "expr ::= FOLD OPENP expr COMMA expr CLOSEP", - /* 83 */ "expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP", - /* 84 */ "expr ::= expr PLUS expr", - /* 85 */ "expr ::= expr MINUS expr", - /* 86 */ "expr ::= expr TIMES expr", - /* 87 */ "expr ::= expr DIVIDE expr", - /* 88 */ "expr ::= expr POW expr", - /* 89 */ "expr ::= expr MOD expr", - /* 90 */ "expr ::= DOUBLE", - /* 91 */ "expr ::= MINUS DOUBLE", - /* 92 */ "expr ::= DOUBLE SAMP", - /* 93 */ "expr ::= DOUBLE MSEC", - /* 94 */ "expr ::= DOUBLE SEC", - /* 95 */ "program ::= prop_list", - /* 96 */ "ondone ::=", - /* 97 */ "prop_pan ::= PROP_PAN overflow", - /* 98 */ "prop_pan ::= PROP_PAN mode", - /* 99 */ "prop_expr ::= prop_pan", - /* 100 */ "prop_expr ::= prop_tag", - /* 101 */ "prop_expr ::= PROP_INTERP interp", - /* 102 */ "prop_expr ::= prop MODULATE modulate", - /* 103 */ "prop_list ::= prop_list prop_expr", - /* 104 */ "prop_list ::= prop_expr", - /* 105 */ "assign ::=", - /* 106 */ "expr ::= vars", - /* 107 */ "expr ::= MINUS vars", - /* 108 */ "expr ::= OPENP expr CLOSEP", + /* 76 */ "expr ::= FN_URAND OPENP expr DOTS expr CLOSEP", + /* 77 */ "number ::= DOUBLE", + /* 78 */ "number ::= MINUS DOUBLE", + /* 79 */ "num_vargs ::= num_vargs COMMA number", + /* 80 */ "num_vargs ::= number", + /* 81 */ "expr ::= CHOICE OPENP num_vargs CLOSEP", + /* 82 */ "expr ::= FOLD OPENP expr CLOSEP", + /* 83 */ "expr ::= FOLD OPENP expr COMMA expr CLOSEP", + /* 84 */ "expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP", + /* 85 */ "expr ::= expr PLUS expr", + /* 86 */ "expr ::= expr MINUS expr", + /* 87 */ "expr ::= expr TIMES expr", + /* 88 */ "expr ::= expr DIVIDE expr", + /* 89 */ "expr ::= expr POW expr", + /* 90 */ "expr ::= expr MOD expr", + /* 91 */ "expr ::= DOUBLE", + /* 92 */ "expr ::= MINUS DOUBLE", + /* 93 */ "expr ::= DOUBLE SAMP", + /* 94 */ "expr ::= DOUBLE MSEC", + /* 95 */ "expr ::= DOUBLE SEC", + /* 96 */ "program ::= prop_list", + /* 97 */ "ondone ::=", + /* 98 */ "prop_pan ::= PROP_PAN overflow", + /* 99 */ "prop_pan ::= PROP_PAN mode", + /* 100 */ "prop_expr ::= prop_pan", + /* 101 */ "prop_expr ::= prop_tag", + /* 102 */ "prop_expr ::= PROP_INTERP interp", + /* 103 */ "prop_expr ::= prop MODULATE modulate", + /* 104 */ "prop_list ::= prop_list prop_expr", + /* 105 */ "prop_list ::= prop_expr", + /* 106 */ "assign ::=", + /* 107 */ "expr ::= vars", + /* 108 */ "expr ::= MINUS vars", + /* 109 */ "expr ::= OPENP expr CLOSEP", }; #endif /* NDEBUG */ @@ -1111,7 +1112,7 @@ static void yyStackOverflow(yyParser *yypParser){ #line 39 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" p->setErrorMsg("stack overflow"); -#line 1114 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1115 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" /******** End %stack_overflow code ********************************************/ parse_grain_exprARG_STORE /* Suppress warning about unused %extra_argument var */ parse_grain_exprCTX_STORE @@ -1259,39 +1260,40 @@ static const YYCODETYPE yyRuleInfoLhs[] = { 92, /* (73) expr ::= FN_URAND OPENP CLOSEP */ 92, /* (74) expr ::= FN_URAND OPENP expr CLOSEP */ 92, /* (75) expr ::= FN_URAND OPENP expr COMMA expr CLOSEP */ - 97, /* (76) number ::= DOUBLE */ - 97, /* (77) number ::= MINUS DOUBLE */ - 98, /* (78) num_vargs ::= num_vargs COMMA number */ - 98, /* (79) num_vargs ::= number */ - 92, /* (80) expr ::= CHOICE OPENP num_vargs CLOSEP */ - 92, /* (81) expr ::= FOLD OPENP expr CLOSEP */ - 92, /* (82) expr ::= FOLD OPENP expr COMMA expr CLOSEP */ - 92, /* (83) expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ - 92, /* (84) expr ::= expr PLUS expr */ - 92, /* (85) expr ::= expr MINUS expr */ - 92, /* (86) expr ::= expr TIMES expr */ - 92, /* (87) expr ::= expr DIVIDE expr */ - 92, /* (88) expr ::= expr POW expr */ - 92, /* (89) expr ::= expr MOD expr */ - 92, /* (90) expr ::= DOUBLE */ - 92, /* (91) expr ::= MINUS DOUBLE */ - 92, /* (92) expr ::= DOUBLE SAMP */ - 92, /* (93) expr ::= DOUBLE MSEC */ - 92, /* (94) expr ::= DOUBLE SEC */ - 81, /* (95) program ::= prop_list */ - 84, /* (96) ondone ::= */ - 86, /* (97) prop_pan ::= PROP_PAN overflow */ - 86, /* (98) prop_pan ::= PROP_PAN mode */ - 90, /* (99) prop_expr ::= prop_pan */ - 90, /* (100) prop_expr ::= prop_tag */ - 90, /* (101) prop_expr ::= PROP_INTERP interp */ - 90, /* (102) prop_expr ::= prop MODULATE modulate */ - 82, /* (103) prop_list ::= prop_list prop_expr */ - 82, /* (104) prop_list ::= prop_expr */ - 91, /* (105) assign ::= */ - 92, /* (106) expr ::= vars */ - 92, /* (107) expr ::= MINUS vars */ - 92, /* (108) expr ::= OPENP expr CLOSEP */ + 92, /* (76) expr ::= FN_URAND OPENP expr DOTS expr CLOSEP */ + 97, /* (77) number ::= DOUBLE */ + 97, /* (78) number ::= MINUS DOUBLE */ + 98, /* (79) num_vargs ::= num_vargs COMMA number */ + 98, /* (80) num_vargs ::= number */ + 92, /* (81) expr ::= CHOICE OPENP num_vargs CLOSEP */ + 92, /* (82) expr ::= FOLD OPENP expr CLOSEP */ + 92, /* (83) expr ::= FOLD OPENP expr COMMA expr CLOSEP */ + 92, /* (84) expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ + 92, /* (85) expr ::= expr PLUS expr */ + 92, /* (86) expr ::= expr MINUS expr */ + 92, /* (87) expr ::= expr TIMES expr */ + 92, /* (88) expr ::= expr DIVIDE expr */ + 92, /* (89) expr ::= expr POW expr */ + 92, /* (90) expr ::= expr MOD expr */ + 92, /* (91) expr ::= DOUBLE */ + 92, /* (92) expr ::= MINUS DOUBLE */ + 92, /* (93) expr ::= DOUBLE SAMP */ + 92, /* (94) expr ::= DOUBLE MSEC */ + 92, /* (95) expr ::= DOUBLE SEC */ + 81, /* (96) program ::= prop_list */ + 84, /* (97) ondone ::= */ + 86, /* (98) prop_pan ::= PROP_PAN overflow */ + 86, /* (99) prop_pan ::= PROP_PAN mode */ + 90, /* (100) prop_expr ::= prop_pan */ + 90, /* (101) prop_expr ::= prop_tag */ + 90, /* (102) prop_expr ::= PROP_INTERP interp */ + 90, /* (103) prop_expr ::= prop MODULATE modulate */ + 82, /* (104) prop_list ::= prop_list prop_expr */ + 82, /* (105) prop_list ::= prop_expr */ + 91, /* (106) assign ::= */ + 92, /* (107) expr ::= vars */ + 92, /* (108) expr ::= MINUS vars */ + 92, /* (109) expr ::= OPENP expr CLOSEP */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number @@ -1373,39 +1375,40 @@ static const signed char yyRuleInfoNRhs[] = { -3, /* (73) expr ::= FN_URAND OPENP CLOSEP */ -4, /* (74) expr ::= FN_URAND OPENP expr CLOSEP */ -6, /* (75) expr ::= FN_URAND OPENP expr COMMA expr CLOSEP */ - -1, /* (76) number ::= DOUBLE */ - -2, /* (77) number ::= MINUS DOUBLE */ - -3, /* (78) num_vargs ::= num_vargs COMMA number */ - -1, /* (79) num_vargs ::= number */ - -4, /* (80) expr ::= CHOICE OPENP num_vargs CLOSEP */ - -4, /* (81) expr ::= FOLD OPENP expr CLOSEP */ - -6, /* (82) expr ::= FOLD OPENP expr COMMA expr CLOSEP */ - -8, /* (83) expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ - -3, /* (84) expr ::= expr PLUS expr */ - -3, /* (85) expr ::= expr MINUS expr */ - -3, /* (86) expr ::= expr TIMES expr */ - -3, /* (87) expr ::= expr DIVIDE expr */ - -3, /* (88) expr ::= expr POW expr */ - -3, /* (89) expr ::= expr MOD expr */ - -1, /* (90) expr ::= DOUBLE */ - -2, /* (91) expr ::= MINUS DOUBLE */ - -2, /* (92) expr ::= DOUBLE SAMP */ - -2, /* (93) expr ::= DOUBLE MSEC */ - -2, /* (94) expr ::= DOUBLE SEC */ - -1, /* (95) program ::= prop_list */ - 0, /* (96) ondone ::= */ - -2, /* (97) prop_pan ::= PROP_PAN overflow */ - -2, /* (98) prop_pan ::= PROP_PAN mode */ - -1, /* (99) prop_expr ::= prop_pan */ - -1, /* (100) prop_expr ::= prop_tag */ - -2, /* (101) prop_expr ::= PROP_INTERP interp */ - -3, /* (102) prop_expr ::= prop MODULATE modulate */ - -2, /* (103) prop_list ::= prop_list prop_expr */ - -1, /* (104) prop_list ::= prop_expr */ - 0, /* (105) assign ::= */ - -1, /* (106) expr ::= vars */ - -2, /* (107) expr ::= MINUS vars */ - -3, /* (108) expr ::= OPENP expr CLOSEP */ + -6, /* (76) expr ::= FN_URAND OPENP expr DOTS expr CLOSEP */ + -1, /* (77) number ::= DOUBLE */ + -2, /* (78) number ::= MINUS DOUBLE */ + -3, /* (79) num_vargs ::= num_vargs COMMA number */ + -1, /* (80) num_vargs ::= number */ + -4, /* (81) expr ::= CHOICE OPENP num_vargs CLOSEP */ + -4, /* (82) expr ::= FOLD OPENP expr CLOSEP */ + -6, /* (83) expr ::= FOLD OPENP expr COMMA expr CLOSEP */ + -8, /* (84) expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ + -3, /* (85) expr ::= expr PLUS expr */ + -3, /* (86) expr ::= expr MINUS expr */ + -3, /* (87) expr ::= expr TIMES expr */ + -3, /* (88) expr ::= expr DIVIDE expr */ + -3, /* (89) expr ::= expr POW expr */ + -3, /* (90) expr ::= expr MOD expr */ + -1, /* (91) expr ::= DOUBLE */ + -2, /* (92) expr ::= MINUS DOUBLE */ + -2, /* (93) expr ::= DOUBLE SAMP */ + -2, /* (94) expr ::= DOUBLE MSEC */ + -2, /* (95) expr ::= DOUBLE SEC */ + -1, /* (96) program ::= prop_list */ + 0, /* (97) ondone ::= */ + -2, /* (98) prop_pan ::= PROP_PAN overflow */ + -2, /* (99) prop_pan ::= PROP_PAN mode */ + -1, /* (100) prop_expr ::= prop_pan */ + -1, /* (101) prop_expr ::= prop_tag */ + -2, /* (102) prop_expr ::= PROP_INTERP interp */ + -3, /* (103) prop_expr ::= prop MODULATE modulate */ + -2, /* (104) prop_list ::= prop_list prop_expr */ + -1, /* (105) prop_list ::= prop_expr */ + 0, /* (106) assign ::= */ + -1, /* (107) expr ::= vars */ + -2, /* (108) expr ::= MINUS vars */ + -3, /* (109) expr ::= OPENP expr CLOSEP */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1450,97 +1453,97 @@ static YYACTIONTYPE yy_reduce( case 0: /* prop ::= PROP_AMP */ #line 47 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_AMP); } -#line 1453 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1456 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 1: /* prop ::= PROP_AT */ #line 48 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_AT); } -#line 1458 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1461 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 2: /* prop ::= PROP_LEN */ #line 49 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_LENGTH); } -#line 1463 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1466 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 3: /* prop ::= PROP_SPEED */ #line 50 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_SPEED); } -#line 1468 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1471 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 4: /* prop ::= PROP_TIME_BEFORE */ #line 51 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_TIME_BEFORE); } -#line 1473 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1476 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 5: /* prop ::= PROP_TIME_AFTER */ #line 52 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_TIME_AFTER); } -#line 1478 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1481 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 6: /* prop ::= PROP_PAN */ #line 53 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_PAN); } -#line 1483 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1486 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 7: /* prop ::= PROP_REPEATS */ #line 54 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_REPEATS); } -#line 1488 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1491 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 8: /* ondone ::= ONDONE */ #line 56 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setCalcMoment(ceammc::GRAIN_CALC_ONDONE); } -#line 1493 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1496 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 9: /* wintype ::= HANN */ #line 59 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_HANN; p->setWinParam(0); } -#line 1498 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1501 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 10: /* wintype ::= RECT */ #line 60 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_RECT; p->setWinParam(0); } -#line 1503 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1506 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 11: /* wintype ::= TRI */ #line 61 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_TRI; p->setWinParam(0); } -#line 1508 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1511 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 12: /* wintype ::= TRPZ */ #line 62 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_TRPZ; p->setWinParam(0); } -#line 1513 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1516 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 13: /* wintype ::= TRPZ OPENP DOUBLE CLOSEP */ #line 64 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[-3].minor.yy0.val = ceammc::GRAIN_WIN_TRPZ; p->setWinParam(yymsp[-1].minor.yy0.val); } -#line 1518 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1521 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 14: /* wintype ::= LINUP */ #line 65 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_LINUP; p->setWinParam(0); } -#line 1523 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1526 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 15: /* wintype ::= LINUP OPENP DOUBLE CLOSEP */ #line 67 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[-3].minor.yy0.val = ceammc::GRAIN_WIN_LINUP; p->setWinParam(yymsp[-1].minor.yy0.val); } -#line 1528 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1531 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 16: /* wintype ::= LINDOWN */ #line 68 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0.val = ceammc::GRAIN_WIN_LINDOWN; p->setWinParam(0); } -#line 1533 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1536 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 17: /* wintype ::= LINDOWN OPENP DOUBLE CLOSEP */ #line 70 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[-3].minor.yy0.val = ceammc::GRAIN_WIN_LINDOWN; p->setWinParam(yymsp[-1].minor.yy0.val); } -#line 1538 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1541 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 18: /* prop_tag ::= PROP_TAG SYMBOL */ #line 75 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->startProp(ceammc::GRAIN_PROP_TAG); p->saveGrainTag(yymsp[0].minor.yy0.sym); } -#line 1543 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1546 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 19: /* prop_expr ::= prop ondone assign expr */ #line 78 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" @@ -1557,387 +1560,388 @@ static YYACTIONTYPE yy_reduce( break; } } -#line 1560 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1563 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 20: /* prop_expr ::= PROP_WINDOW wintype */ #line 94 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setWinType(static_cast(yymsp[0].minor.yy0.val)); } -#line 1565 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1568 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 21: /* overflow ::= OVERFLOW CLIP */ #line 100 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanOverflow(ceammc::GRAIN_PROP_OVERFLOW_CLIP); } -#line 1570 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1573 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 22: /* overflow ::= OVERFLOW FOLD */ #line 101 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanOverflow(ceammc::GRAIN_PROP_OVERFLOW_FOLD); } -#line 1575 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1578 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 23: /* overflow ::= OVERFLOW WRAP */ #line 102 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanOverflow(ceammc::GRAIN_PROP_OVERFLOW_WRAP); } -#line 1580 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1583 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 24: /* interp ::= NONE */ #line 104 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setInterp(ceammc::GRAIN_INTERP_NONE); } -#line 1585 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1588 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 25: /* interp ::= LINEAR */ #line 105 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setInterp(ceammc::GRAIN_INTERP_LINEAR); } -#line 1590 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1593 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 26: /* interp ::= CUBIC */ #line 106 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setInterp(ceammc::GRAIN_INTERP_CUBIC); } -#line 1595 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1598 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 27: /* mode ::= MODE NONE */ #line 108 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanMode(ceammc::GRAIN_PAN_NONE); } -#line 1600 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1603 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 28: /* mode ::= MODE LINEAR */ #line 109 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanMode(ceammc::GRAIN_PAN_LINEAR); } -#line 1605 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1608 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 29: /* mode ::= MODE FN_SQRT */ #line 110 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setPanMode(ceammc::GRAIN_PAN_SQRT); } -#line 1610 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1613 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 30: /* waveform1 ::= SIN */ #line 112 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0 = ceammc::GRAIN_MOD_SIN; } -#line 1615 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1618 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 31: /* waveform1 ::= TRI */ #line 113 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0 = ceammc::GRAIN_MOD_TRI; } -#line 1620 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1623 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 32: /* waveform1 ::= SQR */ #line 114 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0 = ceammc::GRAIN_MOD_SQR; } -#line 1625 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1628 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 33: /* waveform1 ::= USAW */ #line 115 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0 = ceammc::GRAIN_MOD_SAWUP; } -#line 1630 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1633 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 34: /* waveform1 ::= DSAW */ #line 116 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[0].minor.yy0 = ceammc::GRAIN_MOD_SAWDOWN; } -#line 1635 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1638 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 35: /* modulate ::= expr DOTS expr waveform1 OPENP expr CLOSEP */ #line 119 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setModulation(yymsp[-6].minor.yy0.val, yymsp[-4].minor.yy0.val, (ceammc::GrainModulation)yymsp[-3].minor.yy0.val, yymsp[-1].minor.yy0.val); } -#line 1640 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1643 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 36: /* modulate ::= NONE */ #line 120 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setModulation(0, 0, ceammc::GRAIN_MOD_NONE, 0); } -#line 1645 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1648 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 37: /* vars ::= CONST_AMP */ #line 123 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST0); } -#line 1650 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1653 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 38: /* vars ::= CONST_AT */ #line 124 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST1); } -#line 1655 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1658 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 39: /* vars ::= CONST_LEN */ #line 125 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST2); } -#line 1660 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1663 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 40: /* vars ::= CONST_PAN */ #line 126 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST3); } -#line 1665 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1668 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 41: /* vars ::= CONST_SPEED */ #line 127 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST4); } -#line 1670 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1673 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 42: /* vars ::= CONST_TIME_BEFORE */ #line 128 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST5); } -#line 1675 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1678 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 43: /* vars ::= CONST_TIME_AFTER */ #line 129 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST13); } -#line 1680 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1683 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 44: /* vars ::= CONST_SR */ #line 131 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST6); } -#line 1685 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1688 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 45: /* vars ::= CONST_BS */ #line 132 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST7); } -#line 1690 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1693 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 46: /* vars ::= CONST_ASIZE */ #line 133 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST8); } -#line 1695 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1698 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 47: /* vars ::= CONST_NITER */ #line 134 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST9); } -#line 1700 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1703 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 48: /* vars ::= CONST_NBLOCK */ #line 135 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST10); } -#line 1705 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1708 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 49: /* vars ::= CONST_NSAMP */ #line 136 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST11); } -#line 1710 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1713 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 50: /* vars ::= CONST_GIDX */ #line 137 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CONST12); } -#line 1715 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1718 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 51: /* assign ::= ASSIGN_ADD */ #line 139 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setAssignType(ceammc::BC_ASSIGN_ADD); } -#line 1720 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1723 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 52: /* assign ::= ASSIGN_SUB */ #line 140 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setAssignType(ceammc::BC_ASSIGN_SUB); } -#line 1725 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1728 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 53: /* assign ::= ASSIGN_MUL */ #line 141 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setAssignType(ceammc::BC_ASSIGN_MUL); } -#line 1730 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1733 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 54: /* assign ::= ASSIGN_SET */ #line 142 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->setAssignType(ceammc::BC_ASSIGN_SET); } -#line 1735 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1738 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 55: /* expr ::= FN_ABS OPENP expr CLOSEP */ #line 148 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ABS); } -#line 1740 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1743 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 56: /* expr ::= FN_SQRT OPENP expr CLOSEP */ #line 149 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_SQRT); } -#line 1745 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1748 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 57: /* expr ::= SIN OPENP expr CLOSEP */ #line 150 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_SIN); } -#line 1750 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1753 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 58: /* expr ::= FN_COS OPENP expr CLOSEP */ #line 151 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_COS); } -#line 1755 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1758 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 59: /* expr ::= FN_TAN OPENP expr CLOSEP */ #line 152 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_TAN); } -#line 1760 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1763 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 60: /* expr ::= FN_ACOS OPENP expr CLOSEP */ #line 153 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ACOS); } -#line 1765 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1768 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 61: /* expr ::= FN_ASIN OPENP expr CLOSEP */ #line 154 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ASIN); } -#line 1770 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1773 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 62: /* expr ::= FN_ATAN OPENP expr CLOSEP */ #line 155 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ATAN); } -#line 1775 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1778 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 63: /* expr ::= FN_CEIL OPENP expr CLOSEP */ #line 156 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CEIL); } -#line 1780 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1783 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 64: /* expr ::= FN_FLOOR OPENP expr CLOSEP */ #line 157 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_FLOOR); } -#line 1785 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1788 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 65: /* expr ::= FN_ROUND OPENP expr CLOSEP */ #line 158 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ROUND); } -#line 1790 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1793 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 66: /* expr ::= FN_LOG OPENP expr CLOSEP */ #line 159 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_LOG); } -#line 1795 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1798 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 67: /* expr ::= FN_LOG10 OPENP expr CLOSEP */ #line 160 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_LOG10); } -#line 1800 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1803 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 68: /* expr ::= FN_LOG2 OPENP expr CLOSEP */ #line 161 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_LOG2); } -#line 1805 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1808 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 69: /* expr ::= FN_FRAC OPENP expr CLOSEP */ #line 162 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_FRAC); } -#line 1810 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1813 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 70: /* expr ::= WRAP OPENP expr CLOSEP */ #line 164 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_WRAP0); } -#line 1815 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1818 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 71: /* expr ::= WRAP OPENP expr COMMA expr CLOSEP */ #line 166 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_WRAP1); } -#line 1820 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1823 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 72: /* expr ::= WRAP OPENP expr COMMA expr COMMA expr CLOSEP */ #line 168 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_WRAP2); } -#line 1825 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1828 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 73: /* expr ::= FN_URAND OPENP CLOSEP */ #line 170 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_URAND0); } -#line 1830 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1833 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 74: /* expr ::= FN_URAND OPENP expr CLOSEP */ #line 171 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_URAND1); } -#line 1835 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1838 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; case 75: /* expr ::= FN_URAND OPENP expr COMMA expr CLOSEP */ + case 76: /* expr ::= FN_URAND OPENP expr DOTS expr CLOSEP */ yytestcase(yyruleno==76); #line 173 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_URAND2); } -#line 1840 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1844 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 76: /* number ::= DOUBLE */ - case 90: /* expr ::= DOUBLE */ yytestcase(yyruleno==90); -#line 175 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 77: /* number ::= DOUBLE */ + case 91: /* expr ::= DOUBLE */ yytestcase(yyruleno==91); +#line 178 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yylhsminor.yy0 = yymsp[0].minor.yy0; p->bcPushValue(yymsp[0].minor.yy0.val); } -#line 1846 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1850 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 77: /* number ::= MINUS DOUBLE */ - case 91: /* expr ::= MINUS DOUBLE */ yytestcase(yyruleno==91); -#line 176 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 78: /* number ::= MINUS DOUBLE */ + case 92: /* expr ::= MINUS DOUBLE */ yytestcase(yyruleno==92); +#line 179 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { yymsp[-1].minor.yy0.val = -yymsp[0].minor.yy0.val; p->bcPushValue(-yymsp[0].minor.yy0.val); } -#line 1853 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1857 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 78: /* num_vargs ::= num_vargs COMMA number */ - case 79: /* num_vargs ::= number */ yytestcase(yyruleno==79); -#line 178 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 79: /* num_vargs ::= num_vargs COMMA number */ + case 80: /* num_vargs ::= number */ yytestcase(yyruleno==80); +#line 181 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcVarArg(); } -#line 1859 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1863 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 80: /* expr ::= CHOICE OPENP num_vargs CLOSEP */ -#line 181 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 81: /* expr ::= CHOICE OPENP num_vargs CLOSEP */ +#line 184 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushVarArgs(); p->bcPushCode(ceammc::OP_CHOICE); } -#line 1864 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1868 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 81: /* expr ::= FOLD OPENP expr CLOSEP */ -#line 183 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 82: /* expr ::= FOLD OPENP expr CLOSEP */ +#line 186 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_FOLD0); } -#line 1869 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1873 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 82: /* expr ::= FOLD OPENP expr COMMA expr CLOSEP */ -#line 185 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 83: /* expr ::= FOLD OPENP expr COMMA expr CLOSEP */ +#line 188 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_FOLD1); } -#line 1874 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1878 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 83: /* expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ -#line 189 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 84: /* expr ::= CLIP OPENP expr COMMA expr COMMA expr CLOSEP */ +#line 192 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_CLIP); } -#line 1879 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1883 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 84: /* expr ::= expr PLUS expr */ -#line 192 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 85: /* expr ::= expr PLUS expr */ +#line 195 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_ADD); } -#line 1884 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1888 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 85: /* expr ::= expr MINUS expr */ -#line 193 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 86: /* expr ::= expr MINUS expr */ +#line 196 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_SUB); } -#line 1889 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1893 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 86: /* expr ::= expr TIMES expr */ -#line 194 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 87: /* expr ::= expr TIMES expr */ +#line 197 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_MUL); } -#line 1894 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1898 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 87: /* expr ::= expr DIVIDE expr */ -#line 195 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 88: /* expr ::= expr DIVIDE expr */ +#line 198 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_DIV); } -#line 1899 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1903 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 88: /* expr ::= expr POW expr */ -#line 196 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 89: /* expr ::= expr POW expr */ +#line 199 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_POW); } -#line 1904 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1908 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 89: /* expr ::= expr MOD expr */ -#line 197 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 90: /* expr ::= expr MOD expr */ +#line 200 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushCode(ceammc::OP_MOD); } -#line 1909 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1913 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 92: /* expr ::= DOUBLE SAMP */ -#line 200 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 93: /* expr ::= DOUBLE SAMP */ +#line 203 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushValue(yymsp[-1].minor.yy0.val); } -#line 1914 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1918 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 93: /* expr ::= DOUBLE MSEC */ -#line 201 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 94: /* expr ::= DOUBLE MSEC */ +#line 204 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushValue((sys_getsr() / 1000.0) * yymsp[-1].minor.yy0.val); } -#line 1919 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1923 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; - case 94: /* expr ::= DOUBLE SEC */ -#line 202 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" + case 95: /* expr ::= DOUBLE SEC */ +#line 205 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" { p->bcPushValue(sys_getsr() * yymsp[-1].minor.yy0.val); } -#line 1924 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1928 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" break; default: - /* (95) program ::= prop_list */ yytestcase(yyruleno==95); - /* (96) ondone ::= */ yytestcase(yyruleno==96); - /* (97) prop_pan ::= PROP_PAN overflow */ yytestcase(yyruleno==97); - /* (98) prop_pan ::= PROP_PAN mode */ yytestcase(yyruleno==98); - /* (99) prop_expr ::= prop_pan (OPTIMIZED OUT) */ assert(yyruleno!=99); - /* (100) prop_expr ::= prop_tag (OPTIMIZED OUT) */ assert(yyruleno!=100); - /* (101) prop_expr ::= PROP_INTERP interp */ yytestcase(yyruleno==101); - /* (102) prop_expr ::= prop MODULATE modulate */ yytestcase(yyruleno==102); - /* (103) prop_list ::= prop_list prop_expr */ yytestcase(yyruleno==103); - /* (104) prop_list ::= prop_expr (OPTIMIZED OUT) */ assert(yyruleno!=104); - /* (105) assign ::= */ yytestcase(yyruleno==105); - /* (106) expr ::= vars (OPTIMIZED OUT) */ assert(yyruleno!=106); - /* (107) expr ::= MINUS vars */ yytestcase(yyruleno==107); - /* (108) expr ::= OPENP expr CLOSEP */ yytestcase(yyruleno==108); + /* (96) program ::= prop_list */ yytestcase(yyruleno==96); + /* (97) ondone ::= */ yytestcase(yyruleno==97); + /* (98) prop_pan ::= PROP_PAN overflow */ yytestcase(yyruleno==98); + /* (99) prop_pan ::= PROP_PAN mode */ yytestcase(yyruleno==99); + /* (100) prop_expr ::= prop_pan (OPTIMIZED OUT) */ assert(yyruleno!=100); + /* (101) prop_expr ::= prop_tag (OPTIMIZED OUT) */ assert(yyruleno!=101); + /* (102) prop_expr ::= PROP_INTERP interp */ yytestcase(yyruleno==102); + /* (103) prop_expr ::= prop MODULATE modulate */ yytestcase(yyruleno==103); + /* (104) prop_list ::= prop_list prop_expr */ yytestcase(yyruleno==104); + /* (105) prop_list ::= prop_expr (OPTIMIZED OUT) */ assert(yyruleno!=105); + /* (106) assign ::= */ yytestcase(yyruleno==106); + /* (107) expr ::= vars (OPTIMIZED OUT) */ assert(yyruleno!=107); + /* (108) expr ::= MINUS vars */ yytestcase(yyruleno==108); + /* (109) expr ::= OPENP expr CLOSEP */ yytestcase(yyruleno==109); break; /********** End reduce actions ************************************************/ }; @@ -1982,7 +1986,7 @@ static void yy_parse_failed( #line 35 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" p->setErrorMsg("parse failure"); -#line 1985 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 1989 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" /************ End %parse_failure code *****************************************/ parse_grain_exprARG_STORE /* Suppress warning about unused %extra_argument variable */ parse_grain_exprCTX_STORE @@ -2011,7 +2015,7 @@ static void yy_syntax_error( std::cerr << "possible token: " << yyTokenName[i] << "\n"; } } -#line 2014 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 2018 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" /************ End %syntax_error code ******************************************/ parse_grain_exprARG_STORE /* Suppress warning about unused %extra_argument variable */ parse_grain_exprCTX_STORE @@ -2039,7 +2043,7 @@ static void yy_accept( /*********** Begin %parse_accept code *****************************************/ #line 33 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.y" -#line 2042 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" +#line 2046 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr.c" /*********** End %parse_accept code *******************************************/ parse_grain_exprARG_STORE /* Suppress warning about unused %extra_argument variable */ parse_grain_exprCTX_STORE diff --git a/ceammc/ext/src/array/grain_expr_parser.cpp b/ceammc/ext/src/array/grain_expr_parser.cpp index 0d33ad243d..0439fd56c5 100644 --- a/ceammc/ext/src/array/grain_expr_parser.cpp +++ b/ceammc/ext/src/array/grain_expr_parser.cpp @@ -1,4 +1,3 @@ - #line 1 "grain_expr.rl" # include # include @@ -23,7 +22,7 @@ namespace { -#line 27 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" +#line 26 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" static const int grain_expr_start = 117; static const int grain_expr_first_final = 117; static const int grain_expr_error = 0; @@ -32,2179 +31,5400 @@ static const int grain_expr_en_symbol = 140; static const int grain_expr_en_main = 117; -#line 210 "grain_expr.rl" +#line 209 "grain_expr.rl" + static_assert(ceammc::GrainExprParser::PARSER_SIZE >= sizeof(yyParser), ""); namespace ceammc { - -GrainExprParser::GrainExprParser(Grain* g) - : grain_(g) - , calc_moment_(GRAIN_CALC_ONCE) - , res_(0) -{ - parse_grain_exprInit(parser_data_); -} - -void GrainExprParser::pushToken(int token) -{ - parse_grain_expr(parser(), token, {}, this); -} - -void GrainExprParser::pushDouble(double val) -{ - parse_grain_expr(parser(), TK_DOUBLE, val, this); -} - -void GrainExprParser::pushSymbol(t_symbol* sym) -{ - parse_grain_expr(parser(), TK_SYMBOL, sym, this); -} - -bool GrainExprParser::grainPropGet(double& val) const -{ - switch (current_prop_) { - case GRAIN_PROP_TIME_BEFORE: - val = grainTimeBefore(); - break; - case GRAIN_PROP_TIME_AFTER: - val = grainTimeAfter(); - break; - case GRAIN_PROP_REPEATS: - val = grainRepeats(); - break; - case GRAIN_PROP_PAN: - val = grainPan(); - break; - case GRAIN_PROP_LENGTH: - val = grainLength(); - break; - case GRAIN_PROP_AMP: - val = grainAmp(); - break; - case GRAIN_PROP_AT: - val = grainAt(); - break; - case GRAIN_PROP_SPEED: - val = grainSpeed(); - break; - default: - LIB_ERR << __FUNCTION__ << " unsupported prop: " << current_prop_; - return false; - } - - return true; -} - -bool GrainExprParser::grainPropSet(double val) -{ - if (!grain_) - return true; - - switch (current_prop_) { - case GRAIN_PROP_TIME_BEFORE: - grain_->setTimeBefore(std::max(0, val)); - break; - case GRAIN_PROP_TIME_AFTER: - grain_->setTimeAfter(std::max(0, val)); - break; - case GRAIN_PROP_LENGTH: - if (val <= 0) { - LIB_ERR << "positive value expected for length property, got: " << val; - return false; - } - grain_->setLengthInSamples(val); - break; - case GRAIN_PROP_PAN: - grain_->setPan(res_); - break; - case GRAIN_PROP_AMP: - grain_->setAmplitude(val); - break; - case GRAIN_PROP_REPEATS: - grain_->setRepeats(val); - break; - case GRAIN_PROP_SPEED: - grain_->setSpeed(val); - break; - case GRAIN_PROP_AT: - grain_->setArrayPosInSamples(val); - break; - default: - LIB_ERR << __FUNCTION__ << " unsupported prop: " << current_prop_; - return false; - break; - } - - return true; -} - -bool GrainExprParser::byteCodeEval() -{ - if (!grainPropGet(res_)) - return false; - - if (!bc_.eval(res_)) - return false; - - return grainPropSet(res_); -} - -void GrainExprParser::saveGrainTag(t_symbol* tag) -{ - if (!grain_) - return; - - grain_->setTag(tag); -} - -void GrainExprParser::setOnDone() -{ - auto ok = current_prop_ != GRAIN_PROP_NONE && !bc_.empty(); - if (ok && grain_) - grain_->setOnDone(current_prop_, bc_); -} - -void GrainExprParser::startProp(GrainPropId prop) -{ - bc_.reset(); - if (grain_) - grain_->initByteCodeConst(bc_); - - calc_moment_ = GRAIN_CALC_ONCE; - current_prop_ = prop; -} - -void GrainExprParser::setPanOverflow(GrainPropOverflow of) -{ - if (!grain_) return; - grain_->setPanOverflow(of); -} - -void GrainExprParser::setPanMode(GrainPan m) -{ - if (!grain_) return; - grain_->setPanMode(m); -} - -bool GrainExprParser::parse(const AtomListView& lv) -{ - reset(); - - for (auto& a: lv) { - if (!lexAtom(a)) { - LIB_ERR << "syntax error, unexpected token: " << a; - return false; - } - - if (!parse_ok_) { - LIB_ERR << "invalid token: " << a; - return false; - } - } - - return parseEof(); -} - -void GrainExprParser::reset() -{ - // clean error message - err_buf_[0] = '\0'; - parse_ok_ = true; - bc_err_ = false; - current_prop_ = GRAIN_PROP_NONE; - res_ = 0; - num_vargs_ = 0; -} - -bool GrainExprParser::parse(const char* data) -{ - reset(); - - if (!doParse(data)) { - std::cerr << "parse error: " << data << "\n"; - return false; - } - - return parseEof(); -} - -bool GrainExprParser::parseEof() -{ - pushToken(0); - - // check byte code - if (bc_err_) { - setErrorMsg("byte code error"); - return false; - } - - if (!parse_ok_) - std::cerr << err_buf_ << "\n"; - - return parse_ok_; -} - -bool GrainExprParser::doParse(const char* data) -{ - int cs; - int act; - const char* ts; - const char* te; - const size_t len = strlen(data); - const char* p = data; - const char* pe = data + len; - const char* eof = pe; - int dintp = 0; - int dfracnum = 0; - int dfracden = 1; - double dsign = 1; - double dval = 0; - - -#line 266 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + GrainExprParser::GrainExprParser(Grain* g) + : grain_(g) + , calc_moment_(GRAIN_CALC_ONCE) + , res_(0) { - cs = grain_expr_start; - ts = 0; - te = 0; - act = 0; + parse_grain_exprInit(parser_data_); } - -#line 439 "grain_expr.rl" - -#line 276 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + void GrainExprParser::pushToken(int token) + { + parse_grain_expr(parser(), token, {}, this); + } + + void GrainExprParser::pushDouble(double val) + { + parse_grain_expr(parser(), TK_DOUBLE, val, this); + } + + void GrainExprParser::pushSymbol(t_symbol* sym) + { + parse_grain_expr(parser(), TK_SYMBOL, sym, this); + } + + bool GrainExprParser::grainPropGet(double& val) const + { + switch (current_prop_) { + case GRAIN_PROP_TIME_BEFORE: + val = grainTimeBefore(); + break; + case GRAIN_PROP_TIME_AFTER: + val = grainTimeAfter(); + break; + case GRAIN_PROP_REPEATS: + val = grainRepeats(); + break; + case GRAIN_PROP_PAN: + val = grainPan(); + break; + case GRAIN_PROP_LENGTH: + val = grainLength(); + break; + case GRAIN_PROP_AMP: + val = grainAmp(); + break; + case GRAIN_PROP_AT: + val = grainAt(); + break; + case GRAIN_PROP_SPEED: + val = grainSpeed(); + break; + default: + LIB_ERR << __FUNCTION__ << " unsupported prop: " << current_prop_; + return false; + } + + return true; + } + + bool GrainExprParser::grainPropSet(double val) { - if ( p == pe ) - goto _test_eof; - switch ( cs ) + if (!grain_) + return true; + + switch (current_prop_) { + case GRAIN_PROP_TIME_BEFORE: + grain_->setTimeBefore(std::max(0, val)); + break; + case GRAIN_PROP_TIME_AFTER: + grain_->setTimeAfter(std::max(0, val)); + break; + case GRAIN_PROP_LENGTH: + if (val <= 0) { + LIB_ERR << "positive value expected for length property, got: " << val; + return false; + } + grain_->setLengthInSamples(val); + break; + case GRAIN_PROP_PAN: + grain_->setPan(res_); + break; + case GRAIN_PROP_AMP: + grain_->setAmplitude(val); + break; + case GRAIN_PROP_REPEATS: + grain_->setRepeats(val); + break; + case GRAIN_PROP_SPEED: + grain_->setSpeed(val); + break; + case GRAIN_PROP_AT: + grain_->setArrayPosInSamples(val); + break; + default: + LIB_ERR << __FUNCTION__ << " unsupported prop: " << current_prop_; + return false; + break; + } + + return true; + } + + bool GrainExprParser::byteCodeEval() { -tr0: + if (!grainPropGet(res_)) + return false; + + if (!bc_.eval(res_)) + return false; + + return grainPropSet(res_); + } + + void GrainExprParser::saveGrainTag(t_symbol* tag) + { + if (!grain_) + return; + + grain_->setTag(tag); + } + + void GrainExprParser::setOnDone() + { + auto ok = current_prop_ != GRAIN_PROP_NONE && !bc_.empty(); + if (ok && grain_) + grain_->setOnDone(current_prop_, bc_); + } + + void GrainExprParser::startProp(GrainPropId prop) + { + bc_.reset(); + if (grain_) + grain_->initByteCodeConst(bc_); + + calc_moment_ = GRAIN_CALC_ONCE; + current_prop_ = prop; + } + + void GrainExprParser::setPanOverflow(GrainPropOverflow of) + { + if (!grain_) return; + grain_->setPanOverflow(of); + } + + void GrainExprParser::setPanMode(GrainPan m) + { + if (!grain_) return; + grain_->setPanMode(m); + } + + bool GrainExprParser::parse(const AtomListView& lv) + { + reset(); + + for (auto& a: lv) { + if (!lexAtom(a)) { + LIB_ERR << "syntax error, unexpected token: " << a; + return false; + } + + if (!parse_ok_) { + LIB_ERR << "invalid token: " << a; + return false; + } + } + + return parseEof(); + } + + void GrainExprParser::reset() + { + // clean error message + err_buf_[0] = '\0'; + parse_ok_ = true; + bc_err_ = false; + current_prop_ = GRAIN_PROP_NONE; + res_ = 0; + num_vargs_ = 0; + } + + bool GrainExprParser::parse(const char* data) + { + reset(); + + if (!doParse(data)) { + std::cerr << "parse error: " << data << "\n"; + return false; + } + + return parseEof(); + } + + bool GrainExprParser::parseEof() + { + pushToken(0); + + // check byte code + if (bc_err_) { + setErrorMsg("byte code error"); + return false; + } + + if (!parse_ok_) + std::cerr << err_buf_ << "\n"; + + return parse_ok_; + } + + bool GrainExprParser::doParse(const char* data) + { + int cs; + int act; + const char* ts; + const char* te; + const size_t len = strlen(data); + const char* p = data; + const char* pe = data + len; + const char* eof = pe; + int dintp = 0; + int dfracnum = 0; + int dfracden = 1; + double dsign = 1; + double dval = 0; + + +#line 266 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + { + cs = (int)grain_expr_start; + ts = 0; + te = 0; + } + +#line 438 "grain_expr.rl" + + +#line 276 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) { + case 117: + goto st_case_117; + case 0: + goto st_case_0; + case 118: + goto st_case_118; + case 1: + goto st_case_1; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 119: + goto st_case_119; + case 5: + goto st_case_5; + case 120: + goto st_case_120; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 121: + goto st_case_121; + case 8: + goto st_case_8; + case 122: + goto st_case_122; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 123: + goto st_case_123; + case 124: + goto st_case_124; + case 125: + goto st_case_125; + case 13: + goto st_case_13; + case 126: + goto st_case_126; + case 14: + goto st_case_14; + case 127: + goto st_case_127; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 128: + goto st_case_128; + case 23: + goto st_case_23; + case 129: + goto st_case_129; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 130: + goto st_case_130; + case 26: + goto st_case_26; + case 131: + goto st_case_131; + case 27: + goto st_case_27; + case 28: + goto st_case_28; + case 29: + goto st_case_29; + case 30: + goto st_case_30; + case 132: + goto st_case_132; + case 133: + goto st_case_133; + case 31: + goto st_case_31; + case 134: + goto st_case_134; + case 32: + goto st_case_32; + case 33: + goto st_case_33; + case 34: + goto st_case_34; + case 35: + goto st_case_35; + case 36: + goto st_case_36; + case 37: + goto st_case_37; + case 38: + goto st_case_38; + case 39: + goto st_case_39; + case 40: + goto st_case_40; + case 41: + goto st_case_41; + case 42: + goto st_case_42; + case 43: + goto st_case_43; + case 44: + goto st_case_44; + case 45: + goto st_case_45; + case 46: + goto st_case_46; + case 47: + goto st_case_47; + case 48: + goto st_case_48; + case 49: + goto st_case_49; + case 50: + goto st_case_50; + case 51: + goto st_case_51; + case 52: + goto st_case_52; + case 53: + goto st_case_53; + case 54: + goto st_case_54; + case 55: + goto st_case_55; + case 56: + goto st_case_56; + case 57: + goto st_case_57; + case 58: + goto st_case_58; + case 59: + goto st_case_59; + case 60: + goto st_case_60; + case 61: + goto st_case_61; + case 62: + goto st_case_62; + case 63: + goto st_case_63; + case 64: + goto st_case_64; + case 65: + goto st_case_65; + case 66: + goto st_case_66; + case 67: + goto st_case_67; + case 68: + goto st_case_68; + case 69: + goto st_case_69; + case 70: + goto st_case_70; + case 71: + goto st_case_71; + case 72: + goto st_case_72; + case 73: + goto st_case_73; + case 74: + goto st_case_74; + case 135: + goto st_case_135; + case 75: + goto st_case_75; + case 76: + goto st_case_76; + case 77: + goto st_case_77; + case 78: + goto st_case_78; + case 136: + goto st_case_136; + case 137: + goto st_case_137; + case 79: + goto st_case_79; + case 80: + goto st_case_80; + case 81: + goto st_case_81; + case 82: + goto st_case_82; + case 83: + goto st_case_83; + case 84: + goto st_case_84; + case 85: + goto st_case_85; + case 86: + goto st_case_86; + case 87: + goto st_case_87; + case 88: + goto st_case_88; + case 89: + goto st_case_89; + case 90: + goto st_case_90; + case 91: + goto st_case_91; + case 92: + goto st_case_92; + case 93: + goto st_case_93; + case 94: + goto st_case_94; + case 95: + goto st_case_95; + case 96: + goto st_case_96; + case 97: + goto st_case_97; + case 98: + goto st_case_98; + case 99: + goto st_case_99; + case 100: + goto st_case_100; + case 101: + goto st_case_101; + case 138: + goto st_case_138; + case 102: + goto st_case_102; + case 103: + goto st_case_103; + case 104: + goto st_case_104; + case 105: + goto st_case_105; + case 106: + goto st_case_106; + case 139: + goto st_case_139; + case 107: + goto st_case_107; + case 108: + goto st_case_108; + case 109: + goto st_case_109; + case 110: + goto st_case_110; + case 111: + goto st_case_111; + case 112: + goto st_case_112; + case 113: + goto st_case_113; + case 114: + goto st_case_114; + case 115: + goto st_case_115; + case 116: + goto st_case_116; + case 140: + goto st_case_140; + case 141: + goto st_case_141; + case 142: + goto st_case_142; + } + goto st_out; + _ctr2: + { #line 145 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_ASIZE); }} - goto st117; -tr2: + {te = p+1;{ +#line 145 "grain_expr.rl" + pushToken(TK_CONST_ASIZE); } + }} + +#line 577 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr3: + { +#line 144 "grain_expr.rl" + {te = p+1;{ #line 144 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_NSAMP); }} - goto st117; -tr4: + pushToken(TK_CONST_NSAMP); } + }} + +#line 588 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr5: + { #line 143 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_NBLOCK); }} - goto st117; -tr7: + {te = p+1;{ +#line 143 "grain_expr.rl" + pushToken(TK_CONST_NBLOCK); } + }} + +#line 599 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr8: + { +#line 142 "grain_expr.rl" + {te = p+1;{ #line 142 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_NITER); }} - goto st117; -tr12: + pushToken(TK_CONST_NITER); } + }} + +#line 610 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr13: + { #line 134 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_AT); }} - goto st117; -tr13: + {te = p+1;{ +#line 134 "grain_expr.rl" + pushToken(TK_CONST_AT); } + }} + +#line 621 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr14: + { +#line 133 "grain_expr.rl" + {te = p+1;{ #line 133 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_AMP); }} - goto st117; -tr14: + pushToken(TK_CONST_AMP); } + }} + +#line 632 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr15: + { #line 146 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_GIDX); }} - goto st117; -tr15: + {te = p+1;{ +#line 146 "grain_expr.rl" + pushToken(TK_CONST_GIDX); } + }} + +#line 643 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr16: + { +#line 137 "grain_expr.rl" + {p = ((te))-1; + { #line 137 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_CONST_LEN); }} - goto st117; -tr18: + pushToken(TK_CONST_LEN); } + }} + +#line 655 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr19: + { #line 137 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_LEN); }} - goto st117; -tr19: + {te = p+1;{ +#line 137 "grain_expr.rl" + pushToken(TK_CONST_LEN); } + }} + +#line 666 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr20: + { +#line 135 "grain_expr.rl" + {p = ((te))-1; + { #line 135 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_CONST_PAN); }} - goto st117; -tr20: + pushToken(TK_CONST_PAN); } + }} + +#line 678 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr21: + { #line 135 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_PAN); }} - goto st117; -tr21: + {te = p+1;{ +#line 135 "grain_expr.rl" + pushToken(TK_CONST_PAN); } + }} + +#line 689 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr22: + { +#line 136 "grain_expr.rl" + {p = ((te))-1; + { #line 136 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_CONST_SPEED); }} - goto st117; -tr24: + pushToken(TK_CONST_SPEED); } + }} + +#line 701 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr25: + { #line 136 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_SPEED); }} - goto st117; -tr25: + {te = p+1;{ +#line 136 "grain_expr.rl" + pushToken(TK_CONST_SPEED); } + }} + +#line 712 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr26: + { +#line 139 "grain_expr.rl" + {te = p+1;{ #line 139 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_TIME_AFTER); }} - goto st117; -tr26: + pushToken(TK_CONST_TIME_AFTER); } + }} + +#line 723 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr27: + { #line 138 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_TIME_BEFORE); }} - goto st117; -tr27: + {te = p+1;{ +#line 138 "grain_expr.rl" + pushToken(TK_CONST_TIME_BEFORE); } + }} + +#line 734 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr29: + { +#line 202 "grain_expr.rl" + {te = p+1;{ #line 202 "grain_expr.rl" - {te = p+1;{ pushToken(TK_DOTS); }} - goto st117; -tr28: + pushToken(TK_DOTS); } + }} + +#line 745 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr30: + { #line 23 "grain_expr.rl" - {{p = ((te))-1;}{ - dval = dsign * (double(dintp) + double(dfracnum) / double(dfracden)); - pushDouble(dval); -}} - goto st117; -tr34: + {p = ((te))-1; + { +#line 23 "grain_expr.rl" + + dval = dsign * (double(dintp) + double(dfracnum) / double(dfracden)); + pushDouble(dval); + } + }} + +#line 760 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr37: + { +#line 181 "grain_expr.rl" + {te = p+1;{ #line 181 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_REPEATS); }} - goto st117; -tr39: + pushToken(TK_PROP_REPEATS); } + }} + +#line 771 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr42: + { #line 175 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_AT); }} - goto st117; -tr40: + {te = p+1;{ +#line 175 "grain_expr.rl" + pushToken(TK_PROP_AT); } + }} + +#line 782 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr43: + { +#line 174 "grain_expr.rl" + {te = p+1;{ #line 174 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_AMP); }} - goto st117; -tr45: + pushToken(TK_PROP_AMP); } + }} + +#line 793 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr48: + { #line 182 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_INTERP); }} - goto st117; -tr46: + {te = p+1;{ +#line 182 "grain_expr.rl" + pushToken(TK_PROP_INTERP); } + }} + +#line 804 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr49: + { +#line 176 "grain_expr.rl" + {p = ((te))-1; + { #line 176 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_PROP_LEN); }} - goto st117; -tr49: + pushToken(TK_PROP_LEN); } + }} + +#line 816 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr52: + { #line 176 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_LEN); }} - goto st117; -tr50: + {te = p+1;{ +#line 176 "grain_expr.rl" + pushToken(TK_PROP_LEN); } + }} + +#line 827 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr53: + { +#line 177 "grain_expr.rl" + {p = ((te))-1; + { #line 177 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_PROP_PAN); }} - goto st117; -tr51: + pushToken(TK_PROP_PAN); } + }} + +#line 839 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr54: + { #line 177 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_PAN); }} - goto st117; -tr52: + {te = p+1;{ +#line 177 "grain_expr.rl" + pushToken(TK_PROP_PAN); } + }} + +#line 850 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr55: + { +#line 178 "grain_expr.rl" + {p = ((te))-1; + { #line 178 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_PROP_SPEED); }} - goto st117; -tr55: + pushToken(TK_PROP_SPEED); } + }} + +#line 862 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr58: + { #line 178 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_SPEED); }} - goto st117; -tr57: + {te = p+1;{ +#line 178 "grain_expr.rl" + pushToken(TK_PROP_SPEED); } + }} + +#line 873 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr60: + { +#line 179 "grain_expr.rl" + {te = p+1;{ #line 179 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_TIME_BEFORE); }} - goto st117; -tr58: + pushToken(TK_PROP_TIME_BEFORE); } + }} + +#line 884 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr61: + { +#line 183 "grain_expr.rl" + {p = ((te))-1; + { +#line 183 "grain_expr.rl" + pushToken(TK_PROP_WINDOW); } + }} + +#line 896 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr64: + { #line 183 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_PROP_WINDOW); }} - goto st117; -tr61: + {te = p+1;{ #line 183 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_WINDOW); }} - goto st117; -tr66: + pushToken(TK_PROP_WINDOW); } + }} + +#line 907 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr70: + { #line 29 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_ABS); }} - goto st117; -tr68: + {te = p+1;{ +#line 29 "grain_expr.rl" + pushToken(TK_FN_ABS); } + }} + +#line 918 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr72: + { +#line 34 "grain_expr.rl" + {te = p+1;{ #line 34 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_ACOS); }} - goto st117; -tr70: + pushToken(TK_FN_ACOS); } + }} + +#line 929 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr74: + { #line 35 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_ASIN); }} - goto st117; -tr72: + {te = p+1;{ +#line 35 "grain_expr.rl" + pushToken(TK_FN_ASIN); } + }} + +#line 940 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr76: + { +#line 36 "grain_expr.rl" + {te = p+1;{ #line 36 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_ATAN); }} - goto st117; -tr79: + pushToken(TK_FN_ATAN); } + }} + +#line 951 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr84: + { #line 38 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_CEIL); }} - goto st117; -tr83: + {te = p+1;{ +#line 38 "grain_expr.rl" + pushToken(TK_FN_CEIL); } + }} + +#line 962 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr88: + { +#line 168 "grain_expr.rl" + {te = p+1;{ #line 168 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CHOICE); }} - goto st117; -tr85: + pushToken(TK_CHOICE); } + }} + +#line 973 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr90: + { #line 164 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CLIP); }} - goto st117; -tr86: + {te = p+1;{ +#line 164 "grain_expr.rl" + pushToken(TK_CLIP); } + }} + +#line 984 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr91: + { +#line 32 "grain_expr.rl" + {te = p+1;{ #line 32 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_COS); }} - goto st117; -tr89: + pushToken(TK_FN_COS); } + }} + +#line 995 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr94: + { #line 197 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CUBIC); }} - goto st117; -tr92: + {te = p+1;{ +#line 197 "grain_expr.rl" + pushToken(TK_CUBIC); } + }} + +#line 1006 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr98: + { +#line 200 "grain_expr.rl" + {te = p+1;{ #line 200 "grain_expr.rl" - {te = p+1;{ pushToken(TK_DSAW); }} - goto st117; -tr98: + pushToken(TK_DSAW); } + }} + +#line 1017 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr105: + { +#line 39 "grain_expr.rl" + {te = p+1;{ #line 39 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_FLOOR); }} - goto st117; -tr100: + pushToken(TK_FN_FLOOR); } + }} + +#line 1028 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr107: + { #line 166 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FOLD); }} - goto st117; -tr102: + {te = p+1;{ +#line 166 "grain_expr.rl" + pushToken(TK_FOLD); } + }} + +#line 1039 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr109: + { +#line 46 "grain_expr.rl" + {te = p+1;{ #line 46 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_FRAC); }} - goto st117; -tr105: + pushToken(TK_FN_FRAC); } + }} + +#line 1050 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr113: + { #line 186 "grain_expr.rl" - {te = p+1;{ pushToken(TK_HANN); }} - goto st117; -tr112: + {te = p+1;{ +#line 186 "grain_expr.rl" + pushToken(TK_HANN); } + }} + +#line 1061 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr121: + { +#line 191 "grain_expr.rl" + {te = p+1;{ #line 191 "grain_expr.rl" - {te = p+1;{ pushToken(TK_LINDOWN); }} - goto st117; -tr113: + pushToken(TK_LINDOWN); } + }} + +#line 1072 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr122: + { #line 196 "grain_expr.rl" - {te = p+1;{ pushToken(TK_LINEAR); }} - goto st117; -tr115: + {te = p+1;{ +#line 196 "grain_expr.rl" + pushToken(TK_LINEAR); } + }} + +#line 1083 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr124: + { +#line 42 "grain_expr.rl" + {p = ((te))-1; + { #line 42 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_FN_LOG); }} - goto st117; -tr116: + pushToken(TK_FN_LOG); } + }} + +#line 1095 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr125: + { #line 43 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_LOG10); }} - goto st117; -tr117: + {te = p+1;{ +#line 43 "grain_expr.rl" + pushToken(TK_FN_LOG10); } + }} + +#line 1106 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr126: + { +#line 190 "grain_expr.rl" + {te = p+1;{ #line 190 "grain_expr.rl" - {te = p+1;{ pushToken(TK_LINUP); }} - goto st117; -tr121: + pushToken(TK_LINUP); } + }} + +#line 1117 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr131: + { #line 170 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_MSEC); }} - goto st117; -tr122: + {p = ((te))-1; + { #line 170 "grain_expr.rl" - {te = p+1;{ pushToken(TK_MSEC); }} - goto st117; -tr125: + pushToken(TK_MSEC); } + }} + +#line 1129 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr132: + { +#line 170 "grain_expr.rl" + {te = p+1;{ +#line 170 "grain_expr.rl" + pushToken(TK_MSEC); } + }} + +#line 1140 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr136: + { #line 195 "grain_expr.rl" - {te = p+1;{ pushToken(TK_NONE); }} - goto st117; -tr131: + {te = p+1;{ +#line 195 "grain_expr.rl" + pushToken(TK_NONE); } + }} + +#line 1151 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr143: + { +#line 192 "grain_expr.rl" + {te = p+1;{ #line 192 "grain_expr.rl" - {te = p+1;{ pushToken(TK_ONDONE); }} - goto st117; -tr137: + pushToken(TK_ONDONE); } + }} + +#line 1162 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr149: + { #line 193 "grain_expr.rl" - {te = p+1;{ pushToken(TK_OVERFLOW); }} - goto st117; -tr142: + {te = p+1;{ +#line 193 "grain_expr.rl" + pushToken(TK_OVERFLOW); } + }} + +#line 1173 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr155: + { +#line 167 "grain_expr.rl" + {te = p+1;{ #line 167 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_URAND); }} - goto st117; -tr144: + pushToken(TK_FN_URAND); } + }} + +#line 1184 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr157: + { #line 187 "grain_expr.rl" - {te = p+1;{ pushToken(TK_RECT); }} - goto st117; -tr147: + {te = p+1;{ +#line 187 "grain_expr.rl" + pushToken(TK_RECT); } + }} + +#line 1195 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr160: + { +#line 40 "grain_expr.rl" + {te = p+1;{ #line 40 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_ROUND); }} - goto st117; -tr148: + pushToken(TK_FN_ROUND); } + }} + +#line 1206 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr161: + { #line 171 "grain_expr.rl" - {{p = ((te))-1;}{ pushToken(TK_SEC); }} - goto st117; -tr150: + {p = ((te))-1; + { +#line 171 "grain_expr.rl" + pushToken(TK_SEC); } + }} + +#line 1218 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr163: + { +#line 199 "grain_expr.rl" + {te = p+1;{ #line 199 "grain_expr.rl" - {te = p+1;{ pushToken(TK_USAW); }} - goto st117; -tr151: + pushToken(TK_USAW); } + }} + +#line 1229 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr164: + { #line 172 "grain_expr.rl" - {te = p+1;{ pushToken(TK_SAMP); }} - goto st117; -tr152: + {te = p+1;{ +#line 172 "grain_expr.rl" + pushToken(TK_SAMP); } + }} + +#line 1240 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr165: + { +#line 171 "grain_expr.rl" + {te = p+1;{ #line 171 "grain_expr.rl" - {te = p+1;{ pushToken(TK_SEC); }} - goto st117; -tr153: + pushToken(TK_SEC); } + }} + +#line 1251 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr166: + { #line 152 "grain_expr.rl" - {te = p+1;{ pushToken(TK_SIN); }} - goto st117; -tr157: + {te = p+1;{ +#line 152 "grain_expr.rl" + pushToken(TK_SIN); } + }} + +#line 1262 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr171: + { +#line 33 "grain_expr.rl" + {te = p+1;{ #line 33 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_TAN); }} - goto st117; -tr158: + pushToken(TK_FN_TAN); } + }} + +#line 1273 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr172: + { #line 188 "grain_expr.rl" - {te = p+1;{ pushToken(TK_TRI); }} - goto st117; -tr160: + {te = p+1;{ +#line 188 "grain_expr.rl" + pushToken(TK_TRI); } + }} + +#line 1284 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr174: + { +#line 189 "grain_expr.rl" + {te = p+1;{ #line 189 "grain_expr.rl" - {te = p+1;{ pushToken(TK_TRPZ); }} - goto st117; -tr165: + pushToken(TK_TRPZ); } + }} + +#line 1295 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr181: + { #line 165 "grain_expr.rl" - {te = p+1;{ pushToken(TK_WRAP); }} - goto st117; -tr168: + {te = p+1;{ +#line 165 "grain_expr.rl" + pushToken(TK_WRAP); } + }} + +#line 1306 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr184: + { +#line 123 "grain_expr.rl" + {te = p+1;{ #line 123 "grain_expr.rl" - {te = p+1;{ pushToken(TK_MOD); }} - goto st117; -tr169: + pushToken(TK_MOD); } + }} + +#line 1317 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr185: + { #line 124 "grain_expr.rl" - {te = p+1;{ pushToken(TK_OPENP); }} - goto st117; -tr170: + {te = p+1;{ +#line 124 "grain_expr.rl" + pushToken(TK_OPENP); } + }} + +#line 1328 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr186: + { +#line 125 "grain_expr.rl" + {te = p+1;{ #line 125 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CLOSEP); }} - goto st117; -tr173: + pushToken(TK_CLOSEP); } + }} + +#line 1339 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr189: + { #line 131 "grain_expr.rl" - {te = p+1;{ pushToken(TK_COMMA);}} - goto st117; -tr176: + {te = p+1;{ +#line 131 "grain_expr.rl" + pushToken(TK_COMMA);} + }} + +#line 1350 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr191: + { +#line 121 "grain_expr.rl" + {te = p+1;{ #line 121 "grain_expr.rl" - {te = p+1;{ pushToken(TK_DIVIDE); }} - goto st117; -tr178: + pushToken(TK_DIVIDE); } + }} + +#line 1361 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr193: + { #line 130 "grain_expr.rl" - {te = p+1;{ pushToken(TK_ASSIGN_SET);}} - goto st117; -tr180: + {te = p+1;{ +#line 130 "grain_expr.rl" + pushToken(TK_ASSIGN_SET);} + }} + +#line 1372 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr194: + { +#line 122 "grain_expr.rl" + {te = p+1;{ #line 122 "grain_expr.rl" - {te = p+1;{ pushToken(TK_POW); }} - goto st117; -tr195: + pushToken(TK_POW); } + }} + +#line 1383 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr196: + { #line 204 "grain_expr.rl" - {te = p;p--;} - goto st117; -tr196: + {te = p;p = p - 1;}} + +#line 1391 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr197: + { #line 137 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_CONST_LEN); }} - goto st117; -tr199: + {te = p;p = p - 1;{ +#line 137 "grain_expr.rl" + pushToken(TK_CONST_LEN); } + }} + +#line 1402 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr200: + { +#line 135 "grain_expr.rl" + {te = p;p = p - 1;{ #line 135 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_CONST_PAN); }} - goto st117; -tr201: + pushToken(TK_CONST_PAN); } + }} + +#line 1413 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr202: + { #line 147 "grain_expr.rl" - {te = p+1;{ pushDouble(std::acos(-1)); }} - goto st117; -tr202: + {te = p+1;{ +#line 147 "grain_expr.rl" + pushDouble(std::acos(-1)); } + }} + +#line 1424 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr203: + { +#line 136 "grain_expr.rl" + {te = p;p = p - 1;{ #line 136 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_CONST_SPEED); }} - goto st117; -tr204: + pushToken(TK_CONST_SPEED); } + }} + +#line 1435 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr205: + { #line 141 "grain_expr.rl" - {te = p+1;{ pushToken(TK_CONST_SR); }} - goto st117; -tr205: + {te = p+1;{ +#line 141 "grain_expr.rl" + pushToken(TK_CONST_SR); } + }} + +#line 1446 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr206: + { +#line 120 "grain_expr.rl" + {te = p;p = p - 1;{ #line 120 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_TIMES); }} - goto st117; -tr206: + pushToken(TK_TIMES); } + }} + +#line 1457 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr207: + { #line 129 "grain_expr.rl" - {te = p+1;{ pushToken(TK_ASSIGN_MUL);}} - goto st117; -tr207: + {te = p+1;{ +#line 129 "grain_expr.rl" + pushToken(TK_ASSIGN_MUL);} + }} + +#line 1468 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr208: + { +#line 118 "grain_expr.rl" + {te = p;p = p - 1;{ #line 118 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PLUS); }} - goto st117; -tr208: + pushToken(TK_PLUS); } + }} + +#line 1479 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr209: + { #line 127 "grain_expr.rl" - {te = p+1;{ pushToken(TK_ASSIGN_ADD);}} - goto st117; -tr209: + {te = p+1;{ +#line 127 "grain_expr.rl" + pushToken(TK_ASSIGN_ADD);} + }} + +#line 1490 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr210: + { +#line 119 "grain_expr.rl" + {te = p;p = p - 1;{ #line 119 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_MINUS); }} - goto st117; -tr210: + pushToken(TK_MINUS); } + }} + +#line 1501 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr211: + { #line 128 "grain_expr.rl" - {te = p+1;{ pushToken(TK_ASSIGN_SUB);}} - goto st117; -tr211: + {te = p+1;{ +#line 128 "grain_expr.rl" + pushToken(TK_ASSIGN_SUB);} + }} + +#line 1512 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr212: + { +#line 23 "grain_expr.rl" + {te = p;p = p - 1;{ #line 23 "grain_expr.rl" - {te = p;p--;{ - dval = dsign * (double(dintp) + double(dfracnum) / double(dfracden)); - pushDouble(dval); -}} - goto st117; -tr214: + + dval = dsign * (double(dintp) + double(dfracnum) / double(dfracden)); + pushDouble(dval); + } + }} + +#line 1526 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr215: + { #line 176 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PROP_LEN); }} - goto st117; -tr217: + {te = p;p = p - 1;{ +#line 176 "grain_expr.rl" + pushToken(TK_PROP_LEN); } + }} + +#line 1537 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr218: + { +#line 177 "grain_expr.rl" + {te = p;p = p - 1;{ #line 177 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PROP_PAN); }} - goto st117; -tr219: + pushToken(TK_PROP_PAN); } + }} + +#line 1548 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr220: + { #line 178 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PROP_SPEED); }} - goto st117; -tr221: + {te = p;p = p - 1;{ +#line 178 "grain_expr.rl" + pushToken(TK_PROP_SPEED); } + }} + +#line 1559 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr222: + { +#line 180 "grain_expr.rl" + {te = p;p = p - 1;{ #line 180 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PROP_TIME_AFTER); }} - goto st117; -tr222: + pushToken(TK_PROP_TIME_AFTER); } + }} + +#line 1570 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr223: + { #line 184 "grain_expr.rl" - {te = p+1;{ pushToken(TK_PROP_TAG); curtok_ = TK_PROP_TAG; {goto st140;} }} - goto st117; -tr223: + {te = p+1;{ +#line 184 "grain_expr.rl" + pushToken(TK_PROP_TAG); curtok_ = TK_PROP_TAG; {goto _st140;}} + }} + +#line 1581 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr224: + { +#line 183 "grain_expr.rl" + {te = p;p = p - 1;{ #line 183 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_PROP_WINDOW); }} - goto st117; -tr226: + pushToken(TK_PROP_WINDOW); } + }} + +#line 1592 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr227: + { #line 42 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_FN_LOG); }} - goto st117; -tr228: + {te = p;p = p - 1;{ +#line 42 "grain_expr.rl" + pushToken(TK_FN_LOG); } + }} + +#line 1603 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr229: + { +#line 44 "grain_expr.rl" + {te = p+1;{ #line 44 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_LOG2); }} - goto st117; -tr229: + pushToken(TK_FN_LOG2); } + }} + +#line 1614 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr230: + { #line 198 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_MODULATE); }} - goto st117; -tr230: + {te = p;p = p - 1;{ +#line 198 "grain_expr.rl" + pushToken(TK_MODULATE); } + }} + +#line 1625 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr231: + { +#line 194 "grain_expr.rl" + {te = p+1;{ #line 194 "grain_expr.rl" - {te = p+1;{ pushToken(TK_MODE); }} - goto st117; -tr231: + pushToken(TK_MODE); } + }} + +#line 1636 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr232: + { #line 170 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_MSEC); }} - goto st117; -tr233: + {te = p;p = p - 1;{ +#line 170 "grain_expr.rl" + pushToken(TK_MSEC); } + }} + +#line 1647 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr234: + { +#line 171 "grain_expr.rl" + {te = p;p = p - 1;{ #line 171 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_SEC); }} - goto st117; -tr238: + pushToken(TK_SEC); } + }} + +#line 1658 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr239: + { #line 201 "grain_expr.rl" - {te = p;p--;{ pushToken(TK_SQR); }} - goto st117; -tr239: + {te = p;p = p - 1;{ +#line 201 "grain_expr.rl" + pushToken(TK_SQR); } + }} + +#line 1669 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _ctr240: + { +#line 30 "grain_expr.rl" + {te = p+1;{ #line 30 "grain_expr.rl" - {te = p+1;{ pushToken(TK_FN_SQRT); }} - goto st117; -st117: + pushToken(TK_FN_SQRT); } + }} + +#line 1680 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st117; + _st117: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + { #line 1 "NONE" - {ts = 0;} - if ( ++p == pe ) - goto _test_eof117; -case 117: + {ts = 0;}} + +#line 1694 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + p+= 1; + if ( p == pe ) + goto _test_eof117; + st_case_117: + { #line 1 "NONE" - {ts = p;} -#line 696 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 32: goto st118; - case 36: goto st1; - case 37: goto tr168; - case 40: goto tr169; - case 41: goto tr170; - case 42: goto st123; - case 43: goto st124; - case 44: goto tr173; - case 45: goto st125; - case 46: goto st13; - case 47: goto tr176; - case 61: goto tr178; - case 64: goto st15; - case 94: goto tr180; - case 97: goto st34; - case 99: goto st42; - case 100: goto st55; - case 102: goto st58; - case 104: goto st66; - case 108: goto st69; - case 109: goto st77; - case 110: goto st80; - case 111: goto st83; - case 114: goto st94; - case 115: goto tr191; - case 116: goto st107; - case 117: goto st111; - case 119: goto st114; - } - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr177; - goto st0; -st0: -cs = 0; - goto _out; -st118: - if ( ++p == pe ) - goto _test_eof118; -case 118: - if ( (*p) == 32 ) - goto st118; - goto tr195; -st1: - if ( ++p == pe ) - goto _test_eof1; -case 1: - switch( (*p) ) { - case 65: goto tr0; - case 95: goto tr2; - case 97: goto st2; - case 98: goto tr4; - case 103: goto st4; - case 108: goto tr6; - case 110: goto tr7; - case 112: goto tr8; - case 115: goto tr9; - case 116: goto st12; - } - goto st0; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 109: goto st3; - case 116: goto tr12; - } - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - if ( (*p) == 112 ) - goto tr13; - goto st0; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - if ( (*p) == 105 ) - goto tr14; - goto st0; -tr6: + {ts = p;}} + +#line 1704 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + switch( ( (*( p))) ) { + case 32: { + goto _st118; + } + case 36: { + goto _st1; + } + case 37: { + goto _ctr184; + } + case 40: { + goto _ctr185; + } + case 41: { + goto _ctr186; + } + case 42: { + goto _st123; + } + case 43: { + goto _st124; + } + case 44: { + goto _ctr189; + } + case 45: { + goto _st125; + } + case 46: { + goto _st13; + } + case 47: { + goto _ctr191; + } + case 61: { + goto _ctr193; + } + case 64: { + goto _st15; + } + case 94: { + goto _ctr194; + } + case 97: { + goto _st34; + } + case 99: { + goto _st42; + } + case 100: { + goto _st55; + } + case 102: { + goto _st58; + } + case 104: { + goto _st66; + } + case 108: { + goto _st69; + } + case 109: { + goto _st77; + } + case 110: { + goto _st80; + } + case 111: { + goto _st83; + } + case 114: { + goto _st94; + } + case 115: { + goto _ctr195; + } + case 116: { + goto _st107; + } + case 117: { + goto _st111; + } + case 119: { + goto _st114; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr192; + } + { + goto _st0; + } + st_case_0: + _st0: + cs = 0; + goto _pop; + _st118: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof118; + st_case_118: + if ( ( (*( p))) == 32 ) { + goto _st118; + } + { + goto _ctr196; + } + _st1: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof1; + st_case_1: + switch( ( (*( p))) ) { + case 65: { + goto _ctr2; + } + case 95: { + goto _ctr3; + } + case 97: { + goto _st2; + } + case 98: { + goto _ctr5; + } + case 103: { + goto _st4; + } + case 108: { + goto _ctr7; + } + case 110: { + goto _ctr8; + } + case 112: { + goto _ctr9; + } + case 115: { + goto _ctr10; + } + case 116: { + goto _st12; + } + } + { + goto _st0; + } + _st2: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 109: { + goto _st3; + } + case 116: { + goto _ctr13; + } + } + { + goto _st0; + } + _st3: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + if ( ( (*( p))) == 112 ) { + goto _ctr14; + } + { + goto _st0; + } + _st4: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + if ( ( (*( p))) == 105 ) { + goto _ctr15; + } + { + goto _st0; + } + _ctr7: + { #line 1 "NONE" - {te = p+1;} - goto st119; -st119: - if ( ++p == pe ) - goto _test_eof119; -case 119: -#line 788 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 101 ) - goto st5; - goto tr196; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( (*p) == 110 ) - goto tr16; - goto tr15; -tr16: + {te = p+1;}} + +#line 1926 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st119; + _st119: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof119; + st_case_119: + if ( ( (*( p))) == 101 ) { + goto _st5; + } + { + goto _ctr197; + } + _st5: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( ( (*( p))) == 110 ) { + goto _ctr17; + } + { + goto _ctr16; + } + _ctr17: + { #line 1 "NONE" - {te = p+1;} - goto st120; -st120: - if ( ++p == pe ) - goto _test_eof120; -case 120: -#line 807 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 103 ) - goto st6; - goto tr196; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - if ( (*p) == 116 ) - goto st7; - goto tr15; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - if ( (*p) == 104 ) - goto tr18; - goto tr15; -tr8: + {te = p+1;}} + +#line 1968 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st120; + _st120: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof120; + st_case_120: + if ( ( (*( p))) == 103 ) { + goto _st6; + } + { + goto _ctr197; + } + _st6: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + if ( ( (*( p))) == 116 ) { + goto _st7; + } + { + goto _ctr16; + } + _st7: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + if ( ( (*( p))) == 104 ) { + goto _ctr19; + } + { + goto _ctr16; + } + _ctr9: + { #line 1 "NONE" - {te = p+1;} - goto st121; -st121: - if ( ++p == pe ) - goto _test_eof121; -case 121: -#line 833 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 97: goto st8; - case 105: goto tr201; - } - goto tr199; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - if ( (*p) == 110 ) - goto tr20; - goto tr19; -tr9: + {te = p+1;}} + +#line 2027 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st121; + _st121: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof121; + st_case_121: + switch( ( (*( p))) ) { + case 97: { + goto _st8; + } + case 105: { + goto _ctr202; + } + } + { + goto _ctr200; + } + _st8: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + if ( ( (*( p))) == 110 ) { + goto _ctr21; + } + { + goto _ctr20; + } + _ctr10: + { #line 1 "NONE" - {te = p+1;} - goto st122; -st122: - if ( ++p == pe ) - goto _test_eof122; -case 122: -#line 854 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 112: goto st9; - case 114: goto tr204; - } - goto tr202; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: - if ( (*p) == 101 ) - goto st10; - goto tr21; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - if ( (*p) == 101 ) - goto st11; - goto tr21; -st11: - if ( ++p == pe ) - goto _test_eof11; -case 11: - if ( (*p) == 100 ) - goto tr24; - goto tr21; -st12: - if ( ++p == pe ) - goto _test_eof12; -case 12: - switch( (*p) ) { - case 97: goto tr25; - case 98: goto tr26; - } - goto st0; -st123: - if ( ++p == pe ) - goto _test_eof123; -case 123: - if ( (*p) == 61 ) - goto tr206; - goto tr205; -st124: - if ( ++p == pe ) - goto _test_eof124; -case 124: - if ( (*p) == 61 ) - goto tr208; - goto tr207; -st125: - if ( ++p == pe ) - goto _test_eof125; -case 125: - if ( (*p) == 61 ) - goto tr210; - goto tr209; -st13: - if ( ++p == pe ) - goto _test_eof13; -case 13: - if ( (*p) == 46 ) - goto tr27; - goto st0; -tr177: + {te = p+1;}} + +#line 2074 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st122; + _st122: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof122; + st_case_122: + switch( ( (*( p))) ) { + case 112: { + goto _st9; + } + case 114: { + goto _ctr205; + } + } + { + goto _ctr203; + } + _st9: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + if ( ( (*( p))) == 101 ) { + goto _st10; + } + { + goto _ctr22; + } + _st10: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + if ( ( (*( p))) == 101 ) { + goto _st11; + } + { + goto _ctr22; + } + _st11: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof11; + st_case_11: + if ( ( (*( p))) == 100 ) { + goto _ctr25; + } + { + goto _ctr22; + } + _st12: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof12; + st_case_12: + switch( ( (*( p))) ) { + case 97: { + goto _ctr26; + } + case 98: { + goto _ctr27; + } + } + { + goto _st0; + } + _st123: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof123; + st_case_123: + if ( ( (*( p))) == 61 ) { + goto _ctr207; + } + { + goto _ctr206; + } + _st124: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof124; + st_case_124: + if ( ( (*( p))) == 61 ) { + goto _ctr209; + } + { + goto _ctr208; + } + _st125: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof125; + st_case_125: + if ( ( (*( p))) == 61 ) { + goto _ctr211; + } + { + goto _ctr210; + } + _st13: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof13; + st_case_13: + if ( ( (*( p))) == 46 ) { + goto _ctr29; + } + { + goto _st0; + } + _ctr192: + { #line 1 "NONE" - {te = p+1;} + {te = p+1;}} + +#line 2245 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + { #line 56 "grain_expr.rl" - { dsign = 1; dintp = 0; dfracnum = 0; dfracden = 1; } + dsign = 1; dintp = 0; dfracnum = 0; dfracden = 1; } + +#line 2251 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + { #line 51 "grain_expr.rl" - { (dintp *= 10) += ((*p)-'0'); } - goto st126; -tr213: + (dintp *= 10) += ((( (*( p))))-'0'); } + +#line 2257 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st126; + _ctr214: + { #line 1 "NONE" - {te = p+1;} + {te = p+1;}} + +#line 2265 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + { #line 51 "grain_expr.rl" - { (dintp *= 10) += ((*p)-'0'); } - goto st126; -st126: - if ( ++p == pe ) - goto _test_eof126; -case 126: -#line 936 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 46 ) - goto st14; - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr213; - goto tr211; -st14: - if ( ++p == pe ) - goto _test_eof14; -case 14: - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr29; - goto tr28; -tr29: + (dintp *= 10) += ((( (*( p))))-'0'); } + +#line 2271 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st126; + _st126: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof126; + st_case_126: + if ( ( (*( p))) == 46 ) { + goto _st14; + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr214; + } + { + goto _ctr212; + } + _st14: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof14; + st_case_14: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr31; + } + { + goto _ctr30; + } + _ctr31: + { #line 53 "grain_expr.rl" - { (dfracnum *= 10) += ((*p)-'0'); dfracden*=10; } - goto st127; -st127: - if ( ++p == pe ) - goto _test_eof127; -case 127: -#line 957 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr29; - goto tr211; -st15: - if ( ++p == pe ) - goto _test_eof15; -case 15: - switch( (*p) ) { - case 97: goto st16; - case 105: goto st18; - case 108: goto tr32; - case 112: goto tr33; - case 114: goto tr34; - case 115: goto tr35; - case 116: goto st30; - case 119: goto tr37; - } - goto st0; -st16: - if ( ++p == pe ) - goto _test_eof16; -case 16: - switch( (*p) ) { - case 109: goto st17; - case 116: goto tr39; - } - goto st0; -st17: - if ( ++p == pe ) - goto _test_eof17; -case 17: - if ( (*p) == 112 ) - goto tr40; - goto st0; -st18: - if ( ++p == pe ) - goto _test_eof18; -case 18: - if ( (*p) == 110 ) - goto st19; - goto st0; -st19: - if ( ++p == pe ) - goto _test_eof19; -case 19: - if ( (*p) == 116 ) - goto st20; - goto st0; -st20: - if ( ++p == pe ) - goto _test_eof20; -case 20: - if ( (*p) == 101 ) - goto st21; - goto st0; -st21: - if ( ++p == pe ) - goto _test_eof21; -case 21: - if ( (*p) == 114 ) - goto st22; - goto st0; -st22: - if ( ++p == pe ) - goto _test_eof22; -case 22: - if ( (*p) == 112 ) - goto tr45; - goto st0; -tr32: + (dfracnum *= 10) += ((( (*( p))))-'0'); dfracden*=10; } + +#line 2316 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st127; + _st127: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof127; + st_case_127: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr31; + } + { + goto _ctr212; + } + _st15: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof15; + st_case_15: + switch( ( (*( p))) ) { + case 97: { + goto _st16; + } + case 105: { + goto _st18; + } + case 108: { + goto _ctr35; + } + case 112: { + goto _ctr36; + } + case 114: { + goto _ctr37; + } + case 115: { + goto _ctr38; + } + case 116: { + goto _st30; + } + case 119: { + goto _ctr40; + } + } + { + goto _st0; + } + _st16: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof16; + st_case_16: + switch( ( (*( p))) ) { + case 109: { + goto _st17; + } + case 116: { + goto _ctr42; + } + } + { + goto _st0; + } + _st17: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof17; + st_case_17: + if ( ( (*( p))) == 112 ) { + goto _ctr43; + } + { + goto _st0; + } + _st18: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof18; + st_case_18: + if ( ( (*( p))) == 110 ) { + goto _st19; + } + { + goto _st0; + } + _st19: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof19; + st_case_19: + if ( ( (*( p))) == 116 ) { + goto _st20; + } + { + goto _st0; + } + _st20: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof20; + st_case_20: + if ( ( (*( p))) == 101 ) { + goto _st21; + } + { + goto _st0; + } + _st21: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof21; + st_case_21: + if ( ( (*( p))) == 114 ) { + goto _st22; + } + { + goto _st0; + } + _st22: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof22; + st_case_22: + if ( ( (*( p))) == 112 ) { + goto _ctr48; + } + { + goto _st0; + } + _ctr35: + { #line 1 "NONE" - {te = p+1;} - goto st128; -st128: - if ( ++p == pe ) - goto _test_eof128; -case 128: -#line 1035 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 101 ) - goto st23; - goto tr214; -st23: - if ( ++p == pe ) - goto _test_eof23; -case 23: - if ( (*p) == 110 ) - goto tr47; - goto tr46; -tr47: + {te = p+1;}} + +#line 2505 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st128; + _st128: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof128; + st_case_128: + if ( ( (*( p))) == 101 ) { + goto _st23; + } + { + goto _ctr215; + } + _st23: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof23; + st_case_23: + if ( ( (*( p))) == 110 ) { + goto _ctr50; + } + { + goto _ctr49; + } + _ctr50: + { #line 1 "NONE" - {te = p+1;} - goto st129; -st129: - if ( ++p == pe ) - goto _test_eof129; -case 129: -#line 1054 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 103 ) - goto st24; - goto tr214; -st24: - if ( ++p == pe ) - goto _test_eof24; -case 24: - if ( (*p) == 116 ) - goto st25; - goto tr46; -st25: - if ( ++p == pe ) - goto _test_eof25; -case 25: - if ( (*p) == 104 ) - goto tr49; - goto tr46; -tr33: + {te = p+1;}} + +#line 2547 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st129; + _st129: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof129; + st_case_129: + if ( ( (*( p))) == 103 ) { + goto _st24; + } + { + goto _ctr215; + } + _st24: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof24; + st_case_24: + if ( ( (*( p))) == 116 ) { + goto _st25; + } + { + goto _ctr49; + } + _st25: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof25; + st_case_25: + if ( ( (*( p))) == 104 ) { + goto _ctr52; + } + { + goto _ctr49; + } + _ctr36: + { #line 1 "NONE" - {te = p+1;} - goto st130; -st130: - if ( ++p == pe ) - goto _test_eof130; -case 130: -#line 1080 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 97 ) - goto st26; - goto tr217; -st26: - if ( ++p == pe ) - goto _test_eof26; -case 26: - if ( (*p) == 110 ) - goto tr51; - goto tr50; -tr35: + {te = p+1;}} + +#line 2606 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st130; + _st130: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof130; + st_case_130: + if ( ( (*( p))) == 97 ) { + goto _st26; + } + { + goto _ctr218; + } + _st26: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof26; + st_case_26: + if ( ( (*( p))) == 110 ) { + goto _ctr54; + } + { + goto _ctr53; + } + _ctr38: + { #line 1 "NONE" - {te = p+1;} - goto st131; -st131: - if ( ++p == pe ) - goto _test_eof131; -case 131: -#line 1099 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 112 ) - goto st27; - goto tr219; -st27: - if ( ++p == pe ) - goto _test_eof27; -case 27: - if ( (*p) == 101 ) - goto st28; - goto tr52; -st28: - if ( ++p == pe ) - goto _test_eof28; -case 28: - if ( (*p) == 101 ) - goto st29; - goto tr52; -st29: - if ( ++p == pe ) - goto _test_eof29; -case 29: - if ( (*p) == 100 ) - goto tr55; - goto tr52; -st30: - if ( ++p == pe ) - goto _test_eof30; -case 30: - switch( (*p) ) { - case 97: goto st132; - case 98: goto tr57; - } - goto st0; -st132: - if ( ++p == pe ) - goto _test_eof132; -case 132: - if ( (*p) == 103 ) - goto tr222; - goto tr221; -tr37: + {te = p+1;}} + +#line 2648 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st131; + _st131: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof131; + st_case_131: + if ( ( (*( p))) == 112 ) { + goto _st27; + } + { + goto _ctr220; + } + _st27: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof27; + st_case_27: + if ( ( (*( p))) == 101 ) { + goto _st28; + } + { + goto _ctr55; + } + _st28: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof28; + st_case_28: + if ( ( (*( p))) == 101 ) { + goto _st29; + } + { + goto _ctr55; + } + _st29: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof29; + st_case_29: + if ( ( (*( p))) == 100 ) { + goto _ctr58; + } + { + goto _ctr55; + } + _st30: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof30; + st_case_30: + switch( ( (*( p))) ) { + case 97: { + goto _st132; + } + case 98: { + goto _ctr60; + } + } + { + goto _st0; + } + _st132: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof132; + st_case_132: + if ( ( (*( p))) == 103 ) { + goto _ctr223; + } + { + goto _ctr222; + } + _ctr40: + { #line 1 "NONE" - {te = p+1;} - goto st133; -st133: - if ( ++p == pe ) - goto _test_eof133; -case 133: -#line 1148 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 105 ) - goto st31; - goto tr223; -st31: - if ( ++p == pe ) - goto _test_eof31; -case 31: - if ( (*p) == 110 ) - goto tr59; - goto tr58; -tr59: + {te = p+1;}} + +#line 2763 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st133; + _st133: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof133; + st_case_133: + if ( ( (*( p))) == 105 ) { + goto _st31; + } + { + goto _ctr224; + } + _st31: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof31; + st_case_31: + if ( ( (*( p))) == 110 ) { + goto _ctr62; + } + { + goto _ctr61; + } + _ctr62: + { #line 1 "NONE" - {te = p+1;} - goto st134; -st134: - if ( ++p == pe ) - goto _test_eof134; -case 134: -#line 1167 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 100 ) - goto st32; - goto tr223; -st32: - if ( ++p == pe ) - goto _test_eof32; -case 32: - if ( (*p) == 111 ) - goto st33; - goto tr58; -st33: - if ( ++p == pe ) - goto _test_eof33; -case 33: - if ( (*p) == 119 ) - goto tr61; - goto tr58; -st34: - if ( ++p == pe ) - goto _test_eof34; -case 34: - switch( (*p) ) { - case 98: goto st35; - case 99: goto st36; - case 115: goto st38; - case 116: goto st40; - } - goto st0; -st35: - if ( ++p == pe ) - goto _test_eof35; -case 35: - if ( (*p) == 115 ) - goto tr66; - goto st0; -st36: - if ( ++p == pe ) - goto _test_eof36; -case 36: - if ( (*p) == 111 ) - goto st37; - goto st0; -st37: - if ( ++p == pe ) - goto _test_eof37; -case 37: - if ( (*p) == 115 ) - goto tr68; - goto st0; -st38: - if ( ++p == pe ) - goto _test_eof38; -case 38: - if ( (*p) == 105 ) - goto st39; - goto st0; -st39: - if ( ++p == pe ) - goto _test_eof39; -case 39: - if ( (*p) == 110 ) - goto tr70; - goto st0; -st40: - if ( ++p == pe ) - goto _test_eof40; -case 40: - if ( (*p) == 97 ) - goto st41; - goto st0; -st41: - if ( ++p == pe ) - goto _test_eof41; -case 41: - if ( (*p) == 110 ) - goto tr72; - goto st0; -st42: - if ( ++p == pe ) - goto _test_eof42; -case 42: - switch( (*p) ) { - case 101: goto st43; - case 104: goto st45; - case 108: goto st49; - case 111: goto st51; - case 117: goto st52; - } - goto st0; -st43: - if ( ++p == pe ) - goto _test_eof43; -case 43: - if ( (*p) == 105 ) - goto st44; - goto st0; -st44: - if ( ++p == pe ) - goto _test_eof44; -case 44: - if ( (*p) == 108 ) - goto tr79; - goto st0; -st45: - if ( ++p == pe ) - goto _test_eof45; -case 45: - if ( (*p) == 111 ) - goto st46; - goto st0; -st46: - if ( ++p == pe ) - goto _test_eof46; -case 46: - if ( (*p) == 105 ) - goto st47; - goto st0; -st47: - if ( ++p == pe ) - goto _test_eof47; -case 47: - if ( (*p) == 99 ) - goto st48; - goto st0; -st48: - if ( ++p == pe ) - goto _test_eof48; -case 48: - if ( (*p) == 101 ) - goto tr83; - goto st0; -st49: - if ( ++p == pe ) - goto _test_eof49; -case 49: - if ( (*p) == 105 ) - goto st50; - goto st0; -st50: - if ( ++p == pe ) - goto _test_eof50; -case 50: - if ( (*p) == 112 ) - goto tr85; - goto st0; -st51: - if ( ++p == pe ) - goto _test_eof51; -case 51: - if ( (*p) == 115 ) - goto tr86; - goto st0; -st52: - if ( ++p == pe ) - goto _test_eof52; -case 52: - if ( (*p) == 98 ) - goto st53; - goto st0; -st53: - if ( ++p == pe ) - goto _test_eof53; -case 53: - if ( (*p) == 105 ) - goto st54; - goto st0; -st54: - if ( ++p == pe ) - goto _test_eof54; -case 54: - if ( (*p) == 99 ) - goto tr89; - goto st0; -st55: - if ( ++p == pe ) - goto _test_eof55; -case 55: - if ( (*p) == 115 ) - goto st56; - goto st0; -st56: - if ( ++p == pe ) - goto _test_eof56; -case 56: - if ( (*p) == 97 ) - goto st57; - goto st0; -st57: - if ( ++p == pe ) - goto _test_eof57; -case 57: - if ( (*p) == 119 ) - goto tr92; - goto st0; -st58: - if ( ++p == pe ) - goto _test_eof58; -case 58: - switch( (*p) ) { - case 108: goto st59; - case 111: goto st62; - case 114: goto st64; - } - goto st0; -st59: - if ( ++p == pe ) - goto _test_eof59; -case 59: - if ( (*p) == 111 ) - goto st60; - goto st0; -st60: - if ( ++p == pe ) - goto _test_eof60; -case 60: - if ( (*p) == 111 ) - goto st61; - goto st0; -st61: - if ( ++p == pe ) - goto _test_eof61; -case 61: - if ( (*p) == 114 ) - goto tr98; - goto st0; -st62: - if ( ++p == pe ) - goto _test_eof62; -case 62: - if ( (*p) == 108 ) - goto st63; - goto st0; -st63: - if ( ++p == pe ) - goto _test_eof63; -case 63: - if ( (*p) == 100 ) - goto tr100; - goto st0; -st64: - if ( ++p == pe ) - goto _test_eof64; -case 64: - if ( (*p) == 97 ) - goto st65; - goto st0; -st65: - if ( ++p == pe ) - goto _test_eof65; -case 65: - if ( (*p) == 99 ) - goto tr102; - goto st0; -st66: - if ( ++p == pe ) - goto _test_eof66; -case 66: - if ( (*p) == 97 ) - goto st67; - goto st0; -st67: - if ( ++p == pe ) - goto _test_eof67; -case 67: - if ( (*p) == 110 ) - goto st68; - goto st0; -st68: - if ( ++p == pe ) - goto _test_eof68; -case 68: - if ( (*p) == 110 ) - goto tr105; - goto st0; -st69: - if ( ++p == pe ) - goto _test_eof69; -case 69: - switch( (*p) ) { - case 100: goto st70; - case 105: goto st73; - case 111: goto st74; - case 117: goto st76; - } - goto st0; -st70: - if ( ++p == pe ) - goto _test_eof70; -case 70: - if ( (*p) == 111 ) - goto st71; - goto st0; -st71: - if ( ++p == pe ) - goto _test_eof71; -case 71: - if ( (*p) == 119 ) - goto st72; - goto st0; -st72: - if ( ++p == pe ) - goto _test_eof72; -case 72: - if ( (*p) == 110 ) - goto tr112; - goto st0; -st73: - if ( ++p == pe ) - goto _test_eof73; -case 73: - if ( (*p) == 110 ) - goto tr113; - goto st0; -st74: - if ( ++p == pe ) - goto _test_eof74; -case 74: - if ( (*p) == 103 ) - goto tr114; - goto st0; -tr114: + {te = p+1;}} + +#line 2805 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st134; + _st134: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof134; + st_case_134: + if ( ( (*( p))) == 100 ) { + goto _st32; + } + { + goto _ctr224; + } + _st32: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof32; + st_case_32: + if ( ( (*( p))) == 111 ) { + goto _st33; + } + { + goto _ctr61; + } + _st33: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof33; + st_case_33: + if ( ( (*( p))) == 119 ) { + goto _ctr64; + } + { + goto _ctr61; + } + _st34: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof34; + st_case_34: + switch( ( (*( p))) ) { + case 98: { + goto _st35; + } + case 99: { + goto _st36; + } + case 115: { + goto _st38; + } + case 116: { + goto _st40; + } + } + { + goto _st0; + } + _st35: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof35; + st_case_35: + if ( ( (*( p))) == 115 ) { + goto _ctr70; + } + { + goto _st0; + } + _st36: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof36; + st_case_36: + if ( ( (*( p))) == 111 ) { + goto _st37; + } + { + goto _st0; + } + _st37: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof37; + st_case_37: + if ( ( (*( p))) == 115 ) { + goto _ctr72; + } + { + goto _st0; + } + _st38: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof38; + st_case_38: + if ( ( (*( p))) == 105 ) { + goto _st39; + } + { + goto _st0; + } + _st39: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof39; + st_case_39: + if ( ( (*( p))) == 110 ) { + goto _ctr74; + } + { + goto _st0; + } + _st40: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof40; + st_case_40: + if ( ( (*( p))) == 97 ) { + goto _st41; + } + { + goto _st0; + } + _st41: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof41; + st_case_41: + if ( ( (*( p))) == 110 ) { + goto _ctr76; + } + { + goto _st0; + } + _st42: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof42; + st_case_42: + switch( ( (*( p))) ) { + case 101: { + goto _st43; + } + case 104: { + goto _st45; + } + case 108: { + goto _st49; + } + case 111: { + goto _st51; + } + case 117: { + goto _st52; + } + } + { + goto _st0; + } + _st43: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof43; + st_case_43: + if ( ( (*( p))) == 105 ) { + goto _st44; + } + { + goto _st0; + } + _st44: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof44; + st_case_44: + if ( ( (*( p))) == 108 ) { + goto _ctr84; + } + { + goto _st0; + } + _st45: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof45; + st_case_45: + if ( ( (*( p))) == 111 ) { + goto _st46; + } + { + goto _st0; + } + _st46: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof46; + st_case_46: + if ( ( (*( p))) == 105 ) { + goto _st47; + } + { + goto _st0; + } + _st47: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof47; + st_case_47: + if ( ( (*( p))) == 99 ) { + goto _st48; + } + { + goto _st0; + } + _st48: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof48; + st_case_48: + if ( ( (*( p))) == 101 ) { + goto _ctr88; + } + { + goto _st0; + } + _st49: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof49; + st_case_49: + if ( ( (*( p))) == 105 ) { + goto _st50; + } + { + goto _st0; + } + _st50: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof50; + st_case_50: + if ( ( (*( p))) == 112 ) { + goto _ctr90; + } + { + goto _st0; + } + _st51: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof51; + st_case_51: + if ( ( (*( p))) == 115 ) { + goto _ctr91; + } + { + goto _st0; + } + _st52: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof52; + st_case_52: + if ( ( (*( p))) == 98 ) { + goto _st53; + } + { + goto _st0; + } + _st53: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof53; + st_case_53: + if ( ( (*( p))) == 105 ) { + goto _st54; + } + { + goto _st0; + } + _st54: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof54; + st_case_54: + if ( ( (*( p))) == 99 ) { + goto _ctr94; + } + { + goto _st0; + } + _st55: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof55; + st_case_55: + if ( ( (*( p))) == 115 ) { + goto _st56; + } + { + goto _st0; + } + _st56: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof56; + st_case_56: + if ( ( (*( p))) == 97 ) { + goto _st57; + } + { + goto _st0; + } + _st57: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof57; + st_case_57: + if ( ( (*( p))) == 119 ) { + goto _ctr98; + } + { + goto _st0; + } + _st58: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof58; + st_case_58: + switch( ( (*( p))) ) { + case 108: { + goto _st59; + } + case 111: { + goto _st62; + } + case 114: { + goto _st64; + } + } + { + goto _st0; + } + _st59: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof59; + st_case_59: + if ( ( (*( p))) == 111 ) { + goto _st60; + } + { + goto _st0; + } + _st60: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof60; + st_case_60: + if ( ( (*( p))) == 111 ) { + goto _st61; + } + { + goto _st0; + } + _st61: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof61; + st_case_61: + if ( ( (*( p))) == 114 ) { + goto _ctr105; + } + { + goto _st0; + } + _st62: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof62; + st_case_62: + if ( ( (*( p))) == 108 ) { + goto _st63; + } + { + goto _st0; + } + _st63: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof63; + st_case_63: + if ( ( (*( p))) == 100 ) { + goto _ctr107; + } + { + goto _st0; + } + _st64: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof64; + st_case_64: + if ( ( (*( p))) == 97 ) { + goto _st65; + } + { + goto _st0; + } + _st65: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof65; + st_case_65: + if ( ( (*( p))) == 99 ) { + goto _ctr109; + } + { + goto _st0; + } + _st66: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof66; + st_case_66: + if ( ( (*( p))) == 97 ) { + goto _st67; + } + { + goto _st0; + } + _st67: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof67; + st_case_67: + if ( ( (*( p))) == 110 ) { + goto _st68; + } + { + goto _st0; + } + _st68: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof68; + st_case_68: + if ( ( (*( p))) == 110 ) { + goto _ctr113; + } + { + goto _st0; + } + _st69: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof69; + st_case_69: + switch( ( (*( p))) ) { + case 100: { + goto _st70; + } + case 105: { + goto _st73; + } + case 111: { + goto _st74; + } + case 117: { + goto _st76; + } + } + { + goto _st0; + } + _st70: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof70; + st_case_70: + if ( ( (*( p))) == 111 ) { + goto _st71; + } + { + goto _st0; + } + _st71: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof71; + st_case_71: + if ( ( (*( p))) == 119 ) { + goto _st72; + } + { + goto _st0; + } + _st72: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof72; + st_case_72: + if ( ( (*( p))) == 110 ) { + goto _ctr121; + } + { + goto _st0; + } + _st73: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof73; + st_case_73: + if ( ( (*( p))) == 110 ) { + goto _ctr122; + } + { + goto _st0; + } + _st74: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof74; + st_case_74: + if ( ( (*( p))) == 103 ) { + goto _ctr123; + } + { + goto _st0; + } + _ctr123: + { #line 1 "NONE" - {te = p+1;} - goto st135; -st135: - if ( ++p == pe ) - goto _test_eof135; -case 135: -#line 1496 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 49: goto st75; - case 50: goto tr228; - } - goto tr226; -st75: - if ( ++p == pe ) - goto _test_eof75; -case 75: - if ( (*p) == 48 ) - goto tr116; - goto tr115; -st76: - if ( ++p == pe ) - goto _test_eof76; -case 76: - if ( (*p) == 112 ) - goto tr117; - goto st0; -st77: - if ( ++p == pe ) - goto _test_eof77; -case 77: - switch( (*p) ) { - case 111: goto st78; - case 115: goto tr119; - } - goto st0; -st78: - if ( ++p == pe ) - goto _test_eof78; -case 78: - if ( (*p) == 100 ) - goto st136; - goto st0; -st136: - if ( ++p == pe ) - goto _test_eof136; -case 136: - if ( (*p) == 101 ) - goto tr230; - goto tr229; -tr119: + {te = p+1;}} + +#line 3605 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st135; + _st135: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof135; + st_case_135: + switch( ( (*( p))) ) { + case 49: { + goto _st75; + } + case 50: { + goto _ctr229; + } + } + { + goto _ctr227; + } + _st75: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof75; + st_case_75: + if ( ( (*( p))) == 48 ) { + goto _ctr125; + } + { + goto _ctr124; + } + _st76: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof76; + st_case_76: + if ( ( (*( p))) == 112 ) { + goto _ctr126; + } + { + goto _st0; + } + _st77: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof77; + st_case_77: + switch( ( (*( p))) ) { + case 111: { + goto _st78; + } + case 115: { + goto _ctr129; + } + } + { + goto _st0; + } + _st78: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof78; + st_case_78: + if ( ( (*( p))) == 100 ) { + goto _st136; + } + { + goto _st0; + } + _st136: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof136; + st_case_136: + if ( ( (*( p))) == 101 ) { + goto _ctr231; + } + { + goto _ctr230; + } + _ctr129: + { +#line 1 "NONE" + {te = p+1;}} + +#line 3725 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st137; + _st137: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof137; + st_case_137: + if ( ( (*( p))) == 101 ) { + goto _st79; + } + { + goto _ctr232; + } + _st79: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof79; + st_case_79: + if ( ( (*( p))) == 99 ) { + goto _ctr132; + } + { + goto _ctr131; + } + _st80: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof80; + st_case_80: + if ( ( (*( p))) == 111 ) { + goto _st81; + } + { + goto _st0; + } + _st81: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof81; + st_case_81: + if ( ( (*( p))) == 110 ) { + goto _st82; + } + { + goto _st0; + } + _st82: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof82; + st_case_82: + if ( ( (*( p))) == 101 ) { + goto _ctr136; + } + { + goto _st0; + } + _st83: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof83; + st_case_83: + switch( ( (*( p))) ) { + case 110: { + goto _st84; + } + case 118: { + goto _st88; + } + } + { + goto _st0; + } + _st84: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof84; + st_case_84: + if ( ( (*( p))) == 100 ) { + goto _st85; + } + { + goto _st0; + } + _st85: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof85; + st_case_85: + if ( ( (*( p))) == 111 ) { + goto _st86; + } + { + goto _st0; + } + _st86: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof86; + st_case_86: + if ( ( (*( p))) == 110 ) { + goto _st87; + } + { + goto _st0; + } + _st87: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof87; + st_case_87: + if ( ( (*( p))) == 101 ) { + goto _ctr143; + } + { + goto _st0; + } + _st88: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof88; + st_case_88: + if ( ( (*( p))) == 101 ) { + goto _st89; + } + { + goto _st0; + } + _st89: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof89; + st_case_89: + if ( ( (*( p))) == 114 ) { + goto _st90; + } + { + goto _st0; + } + _st90: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof90; + st_case_90: + if ( ( (*( p))) == 102 ) { + goto _st91; + } + { + goto _st0; + } + _st91: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof91; + st_case_91: + if ( ( (*( p))) == 108 ) { + goto _st92; + } + { + goto _st0; + } + _st92: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof92; + st_case_92: + if ( ( (*( p))) == 111 ) { + goto _st93; + } + { + goto _st0; + } + _st93: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof93; + st_case_93: + if ( ( (*( p))) == 119 ) { + goto _ctr149; + } + { + goto _st0; + } + _st94: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof94; + st_case_94: + switch( ( (*( p))) ) { + case 97: { + goto _st95; + } + case 101: { + goto _st97; + } + case 111: { + goto _st99; + } + } + { + goto _st0; + } + _st95: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof95; + st_case_95: + if ( ( (*( p))) == 110 ) { + goto _st96; + } + { + goto _st0; + } + _st96: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof96; + st_case_96: + if ( ( (*( p))) == 100 ) { + goto _ctr155; + } + { + goto _st0; + } + _st97: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof97; + st_case_97: + if ( ( (*( p))) == 99 ) { + goto _st98; + } + { + goto _st0; + } + _st98: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof98; + st_case_98: + if ( ( (*( p))) == 116 ) { + goto _ctr157; + } + { + goto _st0; + } + _st99: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof99; + st_case_99: + if ( ( (*( p))) == 117 ) { + goto _st100; + } + { + goto _st0; + } + _st100: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof100; + st_case_100: + if ( ( (*( p))) == 110 ) { + goto _st101; + } + { + goto _st0; + } + _st101: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof101; + st_case_101: + if ( ( (*( p))) == 100 ) { + goto _ctr160; + } + { + goto _st0; + } + _ctr195: + { +#line 1 "NONE" + {te = p+1;}} + +#line 4154 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st138; + _st138: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof138; + st_case_138: + switch( ( (*( p))) ) { + case 97: { + goto _st102; + } + case 101: { + goto _st104; + } + case 105: { + goto _st105; + } + case 113: { + goto _st106; + } + } + { + goto _ctr234; + } + _st102: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof102; + st_case_102: + switch( ( (*( p))) ) { + case 109: { + goto _st103; + } + case 119: { + goto _ctr163; + } + } + { + goto _ctr161; + } + _st103: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof103; + st_case_103: + if ( ( (*( p))) == 112 ) { + goto _ctr164; + } + { + goto _ctr161; + } + _st104: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof104; + st_case_104: + if ( ( (*( p))) == 99 ) { + goto _ctr165; + } + { + goto _ctr161; + } + _st105: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof105; + st_case_105: + if ( ( (*( p))) == 110 ) { + goto _ctr166; + } + { + goto _ctr161; + } + _st106: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof106; + st_case_106: + if ( ( (*( p))) == 114 ) { + goto _st139; + } + { + goto _ctr161; + } + _st139: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof139; + st_case_139: + if ( ( (*( p))) == 116 ) { + goto _ctr240; + } + { + goto _ctr239; + } + _st107: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof107; + st_case_107: + switch( ( (*( p))) ) { + case 97: { + goto _st108; + } + case 114: { + goto _st109; + } + } + { + goto _st0; + } + _st108: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof108; + st_case_108: + if ( ( (*( p))) == 110 ) { + goto _ctr171; + } + { + goto _st0; + } + _st109: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof109; + st_case_109: + switch( ( (*( p))) ) { + case 105: { + goto _ctr172; + } + case 112: { + goto _st110; + } + } + { + goto _st0; + } + _st110: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof110; + st_case_110: + if ( ( (*( p))) == 122 ) { + goto _ctr174; + } + { + goto _st0; + } + _st111: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof111; + st_case_111: + if ( ( (*( p))) == 115 ) { + goto _st112; + } + { + goto _st0; + } + _st112: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof112; + st_case_112: + if ( ( (*( p))) == 97 ) { + goto _st113; + } + { + goto _st0; + } + _st113: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof113; + st_case_113: + if ( ( (*( p))) == 119 ) { + goto _ctr163; + } + { + goto _st0; + } + _st114: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof114; + st_case_114: + if ( ( (*( p))) == 114 ) { + goto _st115; + } + { + goto _st0; + } + _st115: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof115; + st_case_115: + if ( ( (*( p))) == 97 ) { + goto _st116; + } + { + goto _st0; + } + _st116: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof116; + st_case_116: + if ( ( (*( p))) == 112 ) { + goto _ctr181; + } + { + goto _st0; + } + _ctr244: + { +#line 102 "grain_expr.rl" + {te = p;p = p - 1;}} + +#line 4477 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st140; + _ctr245: + { +#line 103 "grain_expr.rl" + {te = p;p = p - 1;{ +#line 103 "grain_expr.rl" + + char buf[32]; + char* pbuf = buf; + + int n = 0; + while(ts != te && n < sizeof(buf)-1) { *(pbuf++) = *(ts++); n++; } + *pbuf = '\0'; + pushSymbol(gensym(buf)); + {goto _st117;}} + }} + +#line 4496 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + goto _st140; + _st140: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + { +#line 1 "NONE" + {ts = 0;}} + +#line 4510 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + p+= 1; + if ( p == pe ) + goto _test_eof140; + st_case_140: + { +#line 1 "NONE" + {ts = p;}} + +#line 4520 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + switch( ( (*( p))) ) { + case 32: { + goto _st141; + } + case 95: { + goto _st142; + } + } + if ( ( (*( p))) > 57 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 122 ) { + goto _st142; + } + } else if ( ( (*( p))) >= 48 ) { + goto _st142; + } + { + goto _st0; + } + _st141: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof141; + st_case_141: + if ( ( (*( p))) == 32 ) { + goto _st141; + } + { + goto _ctr244; + } + _st142: + if ( p == eof ) { + if ( cs >= 117 ) + goto _out; + else + goto _pop; + } + p+= 1; + if ( p == pe ) + goto _test_eof142; + st_case_142: + if ( ( (*( p))) == 95 ) { + goto _st142; + } + if ( ( (*( p))) > 57 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 122 ) { + goto _st142; + } + } else if ( ( (*( p))) >= 48 ) { + goto _st142; + } + { + goto _ctr245; + } + st_out: + _test_eof117: cs = 117; goto _test_eof; + _test_eof118: cs = 118; goto _test_eof; + _test_eof1: cs = 1; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof119: cs = 119; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof120: cs = 120; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof121: cs = 121; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof122: cs = 122; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof123: cs = 123; goto _test_eof; + _test_eof124: cs = 124; goto _test_eof; + _test_eof125: cs = 125; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof126: cs = 126; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof127: cs = 127; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof128: cs = 128; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof129: cs = 129; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof130: cs = 130; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof131: cs = 131; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof30: cs = 30; goto _test_eof; + _test_eof132: cs = 132; goto _test_eof; + _test_eof133: cs = 133; goto _test_eof; + _test_eof31: cs = 31; goto _test_eof; + _test_eof134: cs = 134; goto _test_eof; + _test_eof32: cs = 32; goto _test_eof; + _test_eof33: cs = 33; goto _test_eof; + _test_eof34: cs = 34; goto _test_eof; + _test_eof35: cs = 35; goto _test_eof; + _test_eof36: cs = 36; goto _test_eof; + _test_eof37: cs = 37; goto _test_eof; + _test_eof38: cs = 38; goto _test_eof; + _test_eof39: cs = 39; goto _test_eof; + _test_eof40: cs = 40; goto _test_eof; + _test_eof41: cs = 41; goto _test_eof; + _test_eof42: cs = 42; goto _test_eof; + _test_eof43: cs = 43; goto _test_eof; + _test_eof44: cs = 44; goto _test_eof; + _test_eof45: cs = 45; goto _test_eof; + _test_eof46: cs = 46; goto _test_eof; + _test_eof47: cs = 47; goto _test_eof; + _test_eof48: cs = 48; goto _test_eof; + _test_eof49: cs = 49; goto _test_eof; + _test_eof50: cs = 50; goto _test_eof; + _test_eof51: cs = 51; goto _test_eof; + _test_eof52: cs = 52; goto _test_eof; + _test_eof53: cs = 53; goto _test_eof; + _test_eof54: cs = 54; goto _test_eof; + _test_eof55: cs = 55; goto _test_eof; + _test_eof56: cs = 56; goto _test_eof; + _test_eof57: cs = 57; goto _test_eof; + _test_eof58: cs = 58; goto _test_eof; + _test_eof59: cs = 59; goto _test_eof; + _test_eof60: cs = 60; goto _test_eof; + _test_eof61: cs = 61; goto _test_eof; + _test_eof62: cs = 62; goto _test_eof; + _test_eof63: cs = 63; goto _test_eof; + _test_eof64: cs = 64; goto _test_eof; + _test_eof65: cs = 65; goto _test_eof; + _test_eof66: cs = 66; goto _test_eof; + _test_eof67: cs = 67; goto _test_eof; + _test_eof68: cs = 68; goto _test_eof; + _test_eof69: cs = 69; goto _test_eof; + _test_eof70: cs = 70; goto _test_eof; + _test_eof71: cs = 71; goto _test_eof; + _test_eof72: cs = 72; goto _test_eof; + _test_eof73: cs = 73; goto _test_eof; + _test_eof74: cs = 74; goto _test_eof; + _test_eof135: cs = 135; goto _test_eof; + _test_eof75: cs = 75; goto _test_eof; + _test_eof76: cs = 76; goto _test_eof; + _test_eof77: cs = 77; goto _test_eof; + _test_eof78: cs = 78; goto _test_eof; + _test_eof136: cs = 136; goto _test_eof; + _test_eof137: cs = 137; goto _test_eof; + _test_eof79: cs = 79; goto _test_eof; + _test_eof80: cs = 80; goto _test_eof; + _test_eof81: cs = 81; goto _test_eof; + _test_eof82: cs = 82; goto _test_eof; + _test_eof83: cs = 83; goto _test_eof; + _test_eof84: cs = 84; goto _test_eof; + _test_eof85: cs = 85; goto _test_eof; + _test_eof86: cs = 86; goto _test_eof; + _test_eof87: cs = 87; goto _test_eof; + _test_eof88: cs = 88; goto _test_eof; + _test_eof89: cs = 89; goto _test_eof; + _test_eof90: cs = 90; goto _test_eof; + _test_eof91: cs = 91; goto _test_eof; + _test_eof92: cs = 92; goto _test_eof; + _test_eof93: cs = 93; goto _test_eof; + _test_eof94: cs = 94; goto _test_eof; + _test_eof95: cs = 95; goto _test_eof; + _test_eof96: cs = 96; goto _test_eof; + _test_eof97: cs = 97; goto _test_eof; + _test_eof98: cs = 98; goto _test_eof; + _test_eof99: cs = 99; goto _test_eof; + _test_eof100: cs = 100; goto _test_eof; + _test_eof101: cs = 101; goto _test_eof; + _test_eof138: cs = 138; goto _test_eof; + _test_eof102: cs = 102; goto _test_eof; + _test_eof103: cs = 103; goto _test_eof; + _test_eof104: cs = 104; goto _test_eof; + _test_eof105: cs = 105; goto _test_eof; + _test_eof106: cs = 106; goto _test_eof; + _test_eof139: cs = 139; goto _test_eof; + _test_eof107: cs = 107; goto _test_eof; + _test_eof108: cs = 108; goto _test_eof; + _test_eof109: cs = 109; goto _test_eof; + _test_eof110: cs = 110; goto _test_eof; + _test_eof111: cs = 111; goto _test_eof; + _test_eof112: cs = 112; goto _test_eof; + _test_eof113: cs = 113; goto _test_eof; + _test_eof114: cs = 114; goto _test_eof; + _test_eof115: cs = 115; goto _test_eof; + _test_eof116: cs = 116; goto _test_eof; + _test_eof140: cs = 140; goto _test_eof; + _test_eof141: cs = 141; goto _test_eof; + _test_eof142: cs = 142; goto _test_eof; + + _test_eof: {} + if ( p == eof ) { + switch ( cs ) { + case 117: { + { #line 1 "NONE" - {te = p+1;} - goto st137; -st137: - if ( ++p == pe ) - goto _test_eof137; -case 137: -#line 1547 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - if ( (*p) == 101 ) - goto st79; - goto tr231; -st79: - if ( ++p == pe ) - goto _test_eof79; -case 79: - if ( (*p) == 99 ) - goto tr122; - goto tr121; -st80: - if ( ++p == pe ) - goto _test_eof80; -case 80: - if ( (*p) == 111 ) - goto st81; - goto st0; -st81: - if ( ++p == pe ) - goto _test_eof81; -case 81: - if ( (*p) == 110 ) - goto st82; - goto st0; -st82: - if ( ++p == pe ) - goto _test_eof82; -case 82: - if ( (*p) == 101 ) - goto tr125; - goto st0; -st83: - if ( ++p == pe ) - goto _test_eof83; -case 83: - switch( (*p) ) { - case 110: goto st84; - case 118: goto st88; + {ts = p;}} + +#line 4733 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + break; + } + case 0: { + break; + } + case 118: { + break; + } + case 1: { + break; + } + case 2: { + break; + } + case 3: { + break; + } + case 4: { + break; + } + case 119: { + break; + } + case 5: { + break; + } + case 120: { + break; + } + case 6: { + break; + } + case 7: { + break; + } + case 121: { + break; + } + case 8: { + break; + } + case 122: { + break; + } + case 9: { + break; + } + case 10: { + break; + } + case 11: { + break; + } + case 12: { + break; + } + case 123: { + break; + } + case 124: { + break; + } + case 125: { + break; + } + case 13: { + break; + } + case 126: { + break; + } + case 14: { + break; + } + case 127: { + break; + } + case 15: { + break; + } + case 16: { + break; + } + case 17: { + break; + } + case 18: { + break; + } + case 19: { + break; + } + case 20: { + break; + } + case 21: { + break; + } + case 22: { + break; + } + case 128: { + break; + } + case 23: { + break; + } + case 129: { + break; + } + case 24: { + break; + } + case 25: { + break; + } + case 130: { + break; + } + case 26: { + break; + } + case 131: { + break; + } + case 27: { + break; + } + case 28: { + break; + } + case 29: { + break; + } + case 30: { + break; + } + case 132: { + break; + } + case 133: { + break; + } + case 31: { + break; + } + case 134: { + break; + } + case 32: { + break; + } + case 33: { + break; + } + case 34: { + break; + } + case 35: { + break; + } + case 36: { + break; + } + case 37: { + break; + } + case 38: { + break; + } + case 39: { + break; + } + case 40: { + break; + } + case 41: { + break; + } + case 42: { + break; + } + case 43: { + break; + } + case 44: { + break; + } + case 45: { + break; + } + case 46: { + break; + } + case 47: { + break; + } + case 48: { + break; + } + case 49: { + break; + } + case 50: { + break; + } + case 51: { + break; + } + case 52: { + break; + } + case 53: { + break; + } + case 54: { + break; + } + case 55: { + break; + } + case 56: { + break; + } + case 57: { + break; + } + case 58: { + break; + } + case 59: { + break; + } + case 60: { + break; + } + case 61: { + break; + } + case 62: { + break; + } + case 63: { + break; + } + case 64: { + break; + } + case 65: { + break; + } + case 66: { + break; + } + case 67: { + break; + } + case 68: { + break; + } + case 69: { + break; + } + case 70: { + break; + } + case 71: { + break; + } + case 72: { + break; + } + case 73: { + break; + } + case 74: { + break; + } + case 135: { + break; + } + case 75: { + break; + } + case 76: { + break; + } + case 77: { + break; + } + case 78: { + break; + } + case 136: { + break; + } + case 137: { + break; + } + case 79: { + break; + } + case 80: { + break; + } + case 81: { + break; + } + case 82: { + break; + } + case 83: { + break; + } + case 84: { + break; + } + case 85: { + break; + } + case 86: { + break; + } + case 87: { + break; + } + case 88: { + break; + } + case 89: { + break; + } + case 90: { + break; + } + case 91: { + break; + } + case 92: { + break; + } + case 93: { + break; + } + case 94: { + break; + } + case 95: { + break; + } + case 96: { + break; + } + case 97: { + break; + } + case 98: { + break; + } + case 99: { + break; + } + case 100: { + break; + } + case 101: { + break; + } + case 138: { + break; + } + case 102: { + break; + } + case 103: { + break; + } + case 104: { + break; + } + case 105: { + break; + } + case 106: { + break; + } + case 139: { + break; + } + case 107: { + break; + } + case 108: { + break; + } + case 109: { + break; + } + case 110: { + break; + } + case 111: { + break; + } + case 112: { + break; + } + case 113: { + break; + } + case 114: { + break; + } + case 115: { + break; + } + case 116: { + break; + } + case 140: { + { +#line 1 "NONE" + {ts = p;}} + +#line 5159 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + + break; + } + case 141: { + break; + } + case 142: { + break; + } + } + switch ( cs ) { + } + switch ( cs ) { + case 117: + goto _st117;case 0: + goto _st0;case 118: + goto _ctr196;case 1: + goto _st1;case 2: + goto _st2;case 3: + goto _st3;case 4: + goto _st4;case 119: + goto _ctr197;case 5: + goto _ctr16;case 120: + goto _ctr197;case 6: + goto _ctr16;case 7: + goto _ctr16;case 121: + goto _ctr200;case 8: + goto _ctr20;case 122: + goto _ctr203;case 9: + goto _ctr22;case 10: + goto _ctr22;case 11: + goto _ctr22;case 12: + goto _st12;case 123: + goto _ctr206;case 124: + goto _ctr208;case 125: + goto _ctr210;case 13: + goto _st13;case 126: + goto _ctr212;case 14: + goto _ctr30;case 127: + goto _ctr212;case 15: + goto _st15;case 16: + goto _st16;case 17: + goto _st17;case 18: + goto _st18;case 19: + goto _st19;case 20: + goto _st20;case 21: + goto _st21;case 22: + goto _st22;case 128: + goto _ctr215;case 23: + goto _ctr49;case 129: + goto _ctr215;case 24: + goto _ctr49;case 25: + goto _ctr49;case 130: + goto _ctr218;case 26: + goto _ctr53;case 131: + goto _ctr220;case 27: + goto _ctr55;case 28: + goto _ctr55;case 29: + goto _ctr55;case 30: + goto _st30;case 132: + goto _ctr222;case 133: + goto _ctr224;case 31: + goto _ctr61;case 134: + goto _ctr224;case 32: + goto _ctr61;case 33: + goto _ctr61;case 34: + goto _st34;case 35: + goto _st35;case 36: + goto _st36;case 37: + goto _st37;case 38: + goto _st38;case 39: + goto _st39;case 40: + goto _st40;case 41: + goto _st41;case 42: + goto _st42;case 43: + goto _st43;case 44: + goto _st44;case 45: + goto _st45;case 46: + goto _st46;case 47: + goto _st47;case 48: + goto _st48;case 49: + goto _st49;case 50: + goto _st50;case 51: + goto _st51;case 52: + goto _st52;case 53: + goto _st53;case 54: + goto _st54;case 55: + goto _st55;case 56: + goto _st56;case 57: + goto _st57;case 58: + goto _st58;case 59: + goto _st59;case 60: + goto _st60;case 61: + goto _st61;case 62: + goto _st62;case 63: + goto _st63;case 64: + goto _st64;case 65: + goto _st65;case 66: + goto _st66;case 67: + goto _st67;case 68: + goto _st68;case 69: + goto _st69;case 70: + goto _st70;case 71: + goto _st71;case 72: + goto _st72;case 73: + goto _st73;case 74: + goto _st74;case 135: + goto _ctr227;case 75: + goto _ctr124;case 76: + goto _st76;case 77: + goto _st77;case 78: + goto _st78;case 136: + goto _ctr230;case 137: + goto _ctr232;case 79: + goto _ctr131;case 80: + goto _st80;case 81: + goto _st81;case 82: + goto _st82;case 83: + goto _st83;case 84: + goto _st84;case 85: + goto _st85;case 86: + goto _st86;case 87: + goto _st87;case 88: + goto _st88;case 89: + goto _st89;case 90: + goto _st90;case 91: + goto _st91;case 92: + goto _st92;case 93: + goto _st93;case 94: + goto _st94;case 95: + goto _st95;case 96: + goto _st96;case 97: + goto _st97;case 98: + goto _st98;case 99: + goto _st99;case 100: + goto _st100;case 101: + goto _st101;case 138: + goto _ctr234;case 102: + goto _ctr161;case 103: + goto _ctr161;case 104: + goto _ctr161;case 105: + goto _ctr161;case 106: + goto _ctr161;case 139: + goto _ctr239;case 107: + goto _st107;case 108: + goto _st108;case 109: + goto _st109;case 110: + goto _st110;case 111: + goto _st111;case 112: + goto _st112;case 113: + goto _st113;case 114: + goto _st114;case 115: + goto _st115;case 116: + goto _st116;case 140: + goto _st140;case 141: + goto _ctr244;case 142: + goto _ctr245; } + } + + if ( cs >= 117 ) + goto _out; _pop: {} + _out: {} + } + +#line 439 "grain_expr.rl" + + + if (cs < +#line 5328 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" + 117 +#line 441 "grain_expr.rl" + ) { + char buf[32] = ""; + snprintf(buf, sizeof(buf)-1, "unknown token: %s", p); + setErrorMsg(buf); + return false; + } else + return true; } - goto st0; -st84: - if ( ++p == pe ) - goto _test_eof84; -case 84: - if ( (*p) == 100 ) - goto st85; - goto st0; -st85: - if ( ++p == pe ) - goto _test_eof85; -case 85: - if ( (*p) == 111 ) - goto st86; - goto st0; -st86: - if ( ++p == pe ) - goto _test_eof86; -case 86: - if ( (*p) == 110 ) - goto st87; - goto st0; -st87: - if ( ++p == pe ) - goto _test_eof87; -case 87: - if ( (*p) == 101 ) - goto tr131; - goto st0; -st88: - if ( ++p == pe ) - goto _test_eof88; -case 88: - if ( (*p) == 101 ) - goto st89; - goto st0; -st89: - if ( ++p == pe ) - goto _test_eof89; -case 89: - if ( (*p) == 114 ) - goto st90; - goto st0; -st90: - if ( ++p == pe ) - goto _test_eof90; -case 90: - if ( (*p) == 102 ) - goto st91; - goto st0; -st91: - if ( ++p == pe ) - goto _test_eof91; -case 91: - if ( (*p) == 108 ) - goto st92; - goto st0; -st92: - if ( ++p == pe ) - goto _test_eof92; -case 92: - if ( (*p) == 111 ) - goto st93; - goto st0; -st93: - if ( ++p == pe ) - goto _test_eof93; -case 93: - if ( (*p) == 119 ) - goto tr137; - goto st0; -st94: - if ( ++p == pe ) - goto _test_eof94; -case 94: - switch( (*p) ) { - case 97: goto st95; - case 101: goto st97; - case 111: goto st99; + + bool GrainExprParser::lexAtom(const Atom& a) + { + if (curtok_ == TK_PROP_TAG && a.isSymbol()) { + pushSymbol(a.asT()); + curtok_ = -1; + return true; + } else if (a.isFloat()) { + pushDouble(a.asFloat()); + return true; + } else if(a.isSymbol()) { + const char* str = a.asT()->s_name; + return doParse(str); + } else + return false; } - goto st0; -st95: - if ( ++p == pe ) - goto _test_eof95; -case 95: - if ( (*p) == 110 ) - goto st96; - goto st0; -st96: - if ( ++p == pe ) - goto _test_eof96; -case 96: - if ( (*p) == 100 ) - goto tr142; - goto st0; -st97: - if ( ++p == pe ) - goto _test_eof97; -case 97: - if ( (*p) == 99 ) - goto st98; - goto st0; -st98: - if ( ++p == pe ) - goto _test_eof98; -case 98: - if ( (*p) == 116 ) - goto tr144; - goto st0; -st99: - if ( ++p == pe ) - goto _test_eof99; -case 99: - if ( (*p) == 117 ) - goto st100; - goto st0; -st100: - if ( ++p == pe ) - goto _test_eof100; -case 100: - if ( (*p) == 110 ) - goto st101; - goto st0; -st101: - if ( ++p == pe ) - goto _test_eof101; -case 101: - if ( (*p) == 100 ) - goto tr147; - goto st0; -tr191: -#line 1 "NONE" - {te = p+1;} - goto st138; -st138: - if ( ++p == pe ) - goto _test_eof138; -case 138: -#line 1725 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 97: goto st102; - case 101: goto st104; - case 105: goto st105; - case 113: goto st106; + + void GrainExprParser::setErrorMsg(const char* str) + { + const size_t n = sizeof(err_buf_) - 1; + for (size_t i = 0; i < n; i++) { + char c = str[i]; + err_buf_[i] = c; + if (c == '\0') + break; + } + + parse_ok_ = false; } - goto tr233; -st102: - if ( ++p == pe ) - goto _test_eof102; -case 102: - switch( (*p) ) { - case 109: goto st103; - case 119: goto tr150; + + void GrainExprParser::bcPushValue(double v) + { + if (bc_err_) + return; + + if (!bc_.pushByteValue(v)) { + setErrorMsg("push byte code value"); + bc_err_ = true; + } } - goto tr148; -st103: - if ( ++p == pe ) - goto _test_eof103; -case 103: - if ( (*p) == 112 ) - goto tr151; - goto tr148; -st104: - if ( ++p == pe ) - goto _test_eof104; -case 104: - if ( (*p) == 99 ) - goto tr152; - goto tr148; -st105: - if ( ++p == pe ) - goto _test_eof105; -case 105: - if ( (*p) == 110 ) - goto tr153; - goto tr148; -st106: - if ( ++p == pe ) - goto _test_eof106; -case 106: - if ( (*p) == 114 ) - goto st139; - goto tr148; -st139: - if ( ++p == pe ) - goto _test_eof139; -case 139: - if ( (*p) == 116 ) - goto tr239; - goto tr238; -st107: - if ( ++p == pe ) - goto _test_eof107; -case 107: - switch( (*p) ) { - case 97: goto st108; - case 114: goto st109; + + void GrainExprParser::bcPopValue() + { + if (bc_err_) + return; + + if (!bc_.popByteValue()) { + setErrorMsg("pop byte code value"); + bc_err_ = true; + } } - goto st0; -st108: - if ( ++p == pe ) - goto _test_eof108; -case 108: - if ( (*p) == 110 ) - goto tr157; - goto st0; -st109: - if ( ++p == pe ) - goto _test_eof109; -case 109: - switch( (*p) ) { - case 105: goto tr158; - case 112: goto st110; + + void GrainExprParser::bcPushCode(ByteCodeOp op) + { + if (bc_err_) + return; + + if (!bc_.pushByteCode(op)) { + setErrorMsg("push opcode error"); + bc_err_ = true; + } } - goto st0; -st110: - if ( ++p == pe ) - goto _test_eof110; -case 110: - if ( (*p) == 122 ) - goto tr160; - goto st0; -st111: - if ( ++p == pe ) - goto _test_eof111; -case 111: - if ( (*p) == 115 ) - goto st112; - goto st0; -st112: - if ( ++p == pe ) - goto _test_eof112; -case 112: - if ( (*p) == 97 ) - goto st113; - goto st0; -st113: - if ( ++p == pe ) - goto _test_eof113; -case 113: - if ( (*p) == 119 ) - goto tr150; - goto st0; -st114: - if ( ++p == pe ) - goto _test_eof114; -case 114: - if ( (*p) == 114 ) - goto st115; - goto st0; -st115: - if ( ++p == pe ) - goto _test_eof115; -case 115: - if ( (*p) == 97 ) - goto st116; - goto st0; -st116: - if ( ++p == pe ) - goto _test_eof116; -case 116: - if ( (*p) == 112 ) - goto tr165; - goto st0; -tr242: -#line 102 "grain_expr.rl" - {te = p;p--;} - goto st140; -tr243: -#line 103 "grain_expr.rl" - {te = p;p--;{ - char buf[32]; - char* pbuf = buf; - - int n = 0; - while(ts != te && n < sizeof(buf)-1) { *(pbuf++) = *(ts++); n++; } - *pbuf = '\0'; - pushSymbol(gensym(buf)); - {goto st117;} - }} - goto st140; -st140: -#line 1 "NONE" - {ts = 0;} - if ( ++p == pe ) - goto _test_eof140; -case 140: -#line 1 "NONE" - {ts = p;} -#line 1876 "/Users/serge/work/music/pure-data/ceammc/ext/src/array/grain_expr_parser.cpp" - switch( (*p) ) { - case 32: goto st141; - case 95: goto st142; + + void GrainExprParser::setAssignType(ByteCodeAssignType type) + { + bc_.setAssignType(type); } - if ( (*p) > 57 ) { - if ( 97 <= (*p) && (*p) <= 122 ) - goto st142; - } else if ( (*p) >= 48 ) - goto st142; - goto st0; -st141: - if ( ++p == pe ) - goto _test_eof141; -case 141: - if ( (*p) == 32 ) - goto st141; - goto tr242; -st142: - if ( ++p == pe ) - goto _test_eof142; -case 142: - if ( (*p) == 95 ) - goto st142; - if ( (*p) > 57 ) { - if ( 97 <= (*p) && (*p) <= 122 ) - goto st142; - } else if ( (*p) >= 48 ) - goto st142; - goto tr243; + + void GrainExprParser::setWinType(GrainWindowType wt) + { + if (grain_) + grain_->setWinType(wt); } - _test_eof117: cs = 117; goto _test_eof; - _test_eof118: cs = 118; goto _test_eof; - _test_eof1: cs = 1; goto _test_eof; - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof119: cs = 119; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof120: cs = 120; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof121: cs = 121; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof122: cs = 122; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof123: cs = 123; goto _test_eof; - _test_eof124: cs = 124; goto _test_eof; - _test_eof125: cs = 125; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof126: cs = 126; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof127: cs = 127; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof128: cs = 128; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof129: cs = 129; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof130: cs = 130; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - _test_eof131: cs = 131; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof28: cs = 28; goto _test_eof; - _test_eof29: cs = 29; goto _test_eof; - _test_eof30: cs = 30; goto _test_eof; - _test_eof132: cs = 132; goto _test_eof; - _test_eof133: cs = 133; goto _test_eof; - _test_eof31: cs = 31; goto _test_eof; - _test_eof134: cs = 134; goto _test_eof; - _test_eof32: cs = 32; goto _test_eof; - _test_eof33: cs = 33; goto _test_eof; - _test_eof34: cs = 34; goto _test_eof; - _test_eof35: cs = 35; goto _test_eof; - _test_eof36: cs = 36; goto _test_eof; - _test_eof37: cs = 37; goto _test_eof; - _test_eof38: cs = 38; goto _test_eof; - _test_eof39: cs = 39; goto _test_eof; - _test_eof40: cs = 40; goto _test_eof; - _test_eof41: cs = 41; goto _test_eof; - _test_eof42: cs = 42; goto _test_eof; - _test_eof43: cs = 43; goto _test_eof; - _test_eof44: cs = 44; goto _test_eof; - _test_eof45: cs = 45; goto _test_eof; - _test_eof46: cs = 46; goto _test_eof; - _test_eof47: cs = 47; goto _test_eof; - _test_eof48: cs = 48; goto _test_eof; - _test_eof49: cs = 49; goto _test_eof; - _test_eof50: cs = 50; goto _test_eof; - _test_eof51: cs = 51; goto _test_eof; - _test_eof52: cs = 52; goto _test_eof; - _test_eof53: cs = 53; goto _test_eof; - _test_eof54: cs = 54; goto _test_eof; - _test_eof55: cs = 55; goto _test_eof; - _test_eof56: cs = 56; goto _test_eof; - _test_eof57: cs = 57; goto _test_eof; - _test_eof58: cs = 58; goto _test_eof; - _test_eof59: cs = 59; goto _test_eof; - _test_eof60: cs = 60; goto _test_eof; - _test_eof61: cs = 61; goto _test_eof; - _test_eof62: cs = 62; goto _test_eof; - _test_eof63: cs = 63; goto _test_eof; - _test_eof64: cs = 64; goto _test_eof; - _test_eof65: cs = 65; goto _test_eof; - _test_eof66: cs = 66; goto _test_eof; - _test_eof67: cs = 67; goto _test_eof; - _test_eof68: cs = 68; goto _test_eof; - _test_eof69: cs = 69; goto _test_eof; - _test_eof70: cs = 70; goto _test_eof; - _test_eof71: cs = 71; goto _test_eof; - _test_eof72: cs = 72; goto _test_eof; - _test_eof73: cs = 73; goto _test_eof; - _test_eof74: cs = 74; goto _test_eof; - _test_eof135: cs = 135; goto _test_eof; - _test_eof75: cs = 75; goto _test_eof; - _test_eof76: cs = 76; goto _test_eof; - _test_eof77: cs = 77; goto _test_eof; - _test_eof78: cs = 78; goto _test_eof; - _test_eof136: cs = 136; goto _test_eof; - _test_eof137: cs = 137; goto _test_eof; - _test_eof79: cs = 79; goto _test_eof; - _test_eof80: cs = 80; goto _test_eof; - _test_eof81: cs = 81; goto _test_eof; - _test_eof82: cs = 82; goto _test_eof; - _test_eof83: cs = 83; goto _test_eof; - _test_eof84: cs = 84; goto _test_eof; - _test_eof85: cs = 85; goto _test_eof; - _test_eof86: cs = 86; goto _test_eof; - _test_eof87: cs = 87; goto _test_eof; - _test_eof88: cs = 88; goto _test_eof; - _test_eof89: cs = 89; goto _test_eof; - _test_eof90: cs = 90; goto _test_eof; - _test_eof91: cs = 91; goto _test_eof; - _test_eof92: cs = 92; goto _test_eof; - _test_eof93: cs = 93; goto _test_eof; - _test_eof94: cs = 94; goto _test_eof; - _test_eof95: cs = 95; goto _test_eof; - _test_eof96: cs = 96; goto _test_eof; - _test_eof97: cs = 97; goto _test_eof; - _test_eof98: cs = 98; goto _test_eof; - _test_eof99: cs = 99; goto _test_eof; - _test_eof100: cs = 100; goto _test_eof; - _test_eof101: cs = 101; goto _test_eof; - _test_eof138: cs = 138; goto _test_eof; - _test_eof102: cs = 102; goto _test_eof; - _test_eof103: cs = 103; goto _test_eof; - _test_eof104: cs = 104; goto _test_eof; - _test_eof105: cs = 105; goto _test_eof; - _test_eof106: cs = 106; goto _test_eof; - _test_eof139: cs = 139; goto _test_eof; - _test_eof107: cs = 107; goto _test_eof; - _test_eof108: cs = 108; goto _test_eof; - _test_eof109: cs = 109; goto _test_eof; - _test_eof110: cs = 110; goto _test_eof; - _test_eof111: cs = 111; goto _test_eof; - _test_eof112: cs = 112; goto _test_eof; - _test_eof113: cs = 113; goto _test_eof; - _test_eof114: cs = 114; goto _test_eof; - _test_eof115: cs = 115; goto _test_eof; - _test_eof116: cs = 116; goto _test_eof; - _test_eof140: cs = 140; goto _test_eof; - _test_eof141: cs = 141; goto _test_eof; - _test_eof142: cs = 142; goto _test_eof; - - _test_eof: {} - if ( p == eof ) + + void GrainExprParser::setWinParam(double v) { - switch ( cs ) { - case 118: goto tr195; - case 119: goto tr196; - case 5: goto tr15; - case 120: goto tr196; - case 6: goto tr15; - case 7: goto tr15; - case 121: goto tr199; - case 8: goto tr19; - case 122: goto tr202; - case 9: goto tr21; - case 10: goto tr21; - case 11: goto tr21; - case 123: goto tr205; - case 124: goto tr207; - case 125: goto tr209; - case 126: goto tr211; - case 14: goto tr28; - case 127: goto tr211; - case 128: goto tr214; - case 23: goto tr46; - case 129: goto tr214; - case 24: goto tr46; - case 25: goto tr46; - case 130: goto tr217; - case 26: goto tr50; - case 131: goto tr219; - case 27: goto tr52; - case 28: goto tr52; - case 29: goto tr52; - case 132: goto tr221; - case 133: goto tr223; - case 31: goto tr58; - case 134: goto tr223; - case 32: goto tr58; - case 33: goto tr58; - case 135: goto tr226; - case 75: goto tr115; - case 136: goto tr229; - case 137: goto tr231; - case 79: goto tr121; - case 138: goto tr233; - case 102: goto tr148; - case 103: goto tr148; - case 104: goto tr148; - case 105: goto tr148; - case 106: goto tr148; - case 139: goto tr238; - case 141: goto tr242; - case 142: goto tr243; + if (grain_) + grain_->setWinParam(v); } + + void GrainExprParser::setInterp(GrainInterp i) + { + if (grain_) + grain_->setPlayInterpolation(i); } - - _out: {} + + void GrainExprParser::setModulation(double a, double b, GrainModulation m, float freq) + { + if (grain_) + grain_->setModulation(current_prop_, GrainPropModulator(m, freq, a, b)); } - -#line 440 "grain_expr.rl" - - if (cs < 117) { - char buf[32] = ""; - snprintf(buf, sizeof(buf)-1, "unknown token: %s", p); - setErrorMsg(buf); - return false; - } else - return true; -} - -bool GrainExprParser::lexAtom(const Atom& a) -{ - if (curtok_ == TK_PROP_TAG && a.isSymbol()) { - pushSymbol(a.asT()); - curtok_ = -1; - return true; - } else if (a.isFloat()) { - pushDouble(a.asFloat()); - return true; - } else if(a.isSymbol()) { - const char* str = a.asT()->s_name; - return doParse(str); - } else - return false; -} - -void GrainExprParser::setErrorMsg(const char* str) -{ - const size_t n = sizeof(err_buf_) - 1; - for (size_t i = 0; i < n; i++) { - char c = str[i]; - err_buf_[i] = c; - if (c == '\0') - break; - } - - parse_ok_ = false; -} - -void GrainExprParser::bcPushValue(double v) -{ - if (bc_err_) - return; - - if (!bc_.pushByteValue(v)) { - setErrorMsg("push byte code value"); - bc_err_ = true; - } -} - -void GrainExprParser::bcPopValue() -{ - if (bc_err_) - return; - - if (!bc_.popByteValue()) { - setErrorMsg("pop byte code value"); - bc_err_ = true; - } -} - -void GrainExprParser::bcPushCode(ByteCodeOp op) -{ - if (bc_err_) - return; - - if (!bc_.pushByteCode(op)) { - setErrorMsg("push opcode error"); - bc_err_ = true; - } -} - -void GrainExprParser::setAssignType(ByteCodeAssignType type) -{ - bc_.setAssignType(type); -} - -void GrainExprParser::setWinType(GrainWindowType wt) -{ - if (grain_) - grain_->setWinType(wt); -} - -void GrainExprParser::setWinParam(double v) -{ - if (grain_) - grain_->setWinParam(v); -} - -void GrainExprParser::setInterp(GrainInterp i) -{ - if (grain_) - grain_->setPlayInterpolation(i); -} - -void GrainExprParser::setModulation(double a, double b, GrainModulation m, float freq) -{ - if (grain_) - grain_->setModulation(current_prop_, GrainPropModulator(m, freq, a, b)); -} - + } diff --git a/ceammc/ext/src/array/grain_random.h b/ceammc/ext/src/array/grain_random.h index 38350da0b5..8387472018 100644 --- a/ceammc/ext/src/array/grain_random.h +++ b/ceammc/ext/src/array/grain_random.h @@ -30,6 +30,8 @@ class GrainRandom { static GrainRandom& instance(); static void seed(size_t seed) { instance().gen_.seed(seed); } + std::mt19937& gen() { return gen_; } + template static T urand_closed(T a, T b) { diff --git a/ceammc/ext/src/array/mod_array.cpp b/ceammc/ext/src/array/mod_array.cpp index 6dad55380d..65929e3e86 100644 --- a/ceammc/ext/src/array/mod_array.cpp +++ b/ceammc/ext/src/array/mod_array.cpp @@ -14,6 +14,7 @@ #include "array_vline_play.h" #include "array_window.h" +void setup_array_circular(); void setup_array_circular_tilde(); void setup_array_copy(); void setup_array_do(); @@ -25,6 +26,7 @@ void setup_array_play_tilde(); void setup_array_plot(); void setup_array_plot_tilde(); void setup_array_resample(); +void setup_array_risset_rythm_tilde(); void setup_array_s2p(); void setup_plot_geomspace_tilde(); void setup_plot_hist_tilde(); @@ -34,8 +36,8 @@ void setup_plot_response_tilde(); void ceammc_array_setup() { - setup_array0x2eset(); setup_array_bpm(); + setup_array_circular(); setup_array_circular_tilde(); setup_array_convolve(); setup_array_copy(); @@ -52,7 +54,9 @@ void ceammc_array_setup() setup_array_plot_tilde(); setup_array_resample(); setup_array_rms(); + setup_array_risset_rythm_tilde(); setup_array_s2p(); + setup_array_set(); setup_array_stddev(); setup_array_stretch(); setup_array_sum(); diff --git a/ceammc/ext/src/array/plot_geomspace_tilde.cpp b/ceammc/ext/src/array/plot_geomspace_tilde.cpp index 5c8a9210f7..dc640f8c85 100644 --- a/ceammc/ext/src/array/plot_geomspace_tilde.cpp +++ b/ceammc/ext/src/array/plot_geomspace_tilde.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "plot_geomspace_tilde.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" #include "fmt/format.h" @@ -75,7 +76,9 @@ void PlotGeomSpaceTilde::onBang() phase_ = 0; running_ = true; - listTo(1, { (t_float)num_->value(), start_->value(), stop_->value(), base_->value() }); + SmallAtomListN<4> lst { (t_float)num_->value(), start_->value(), stop_->value(), base_->value() }; + + listTo(1, lst.view()); } void PlotGeomSpaceTilde::onFloat(t_float n) diff --git a/ceammc/ext/src/array/plot_linspace_tilde.cpp b/ceammc/ext/src/array/plot_linspace_tilde.cpp index c8e4264c76..3e39c661b6 100644 --- a/ceammc/ext/src/array/plot_linspace_tilde.cpp +++ b/ceammc/ext/src/array/plot_linspace_tilde.cpp @@ -13,7 +13,6 @@ *****************************************************************************/ #include "plot_linspace_tilde.h" #include "ceammc_factory.h" -#include "fmt/format.h" using PropAlias = AliasProperty>; diff --git a/ceammc/ext/src/base/CMakeLists.txt b/ceammc/ext/src/base/CMakeLists.txt index 5433efa1dd..05713008c7 100644 --- a/ceammc/ext/src/base/CMakeLists.txt +++ b/ceammc/ext/src/base/CMakeLists.txt @@ -4,6 +4,7 @@ set(BASE_SOURCES base_log.cpp base_sync.cpp base_spring.cpp + base_clone.cpp canvas_current.cpp canvas_dir.cpp canvas_name.cpp @@ -49,6 +50,7 @@ list(APPEND BASE_SOURCES is_list.cpp is_odd.cpp is_pointer.cpp + is_prop.cpp is_symbol.cpp) # test @@ -60,6 +62,7 @@ list(APPEND BASE_SOURCES list(APPEND BASE_SOURCES base_click.cpp base_dac.cpp + base_z_tilde.cpp gain.cpp matrix.cpp mix.cpp diff --git a/ceammc/ext/src/base/base_clone.cpp b/ceammc/ext/src/base/base_clone.cpp new file mode 100644 index 0000000000..2b43ca1ff7 --- /dev/null +++ b/ceammc/ext/src/base/base_clone.cpp @@ -0,0 +1,1439 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "base_clone.h" +#include "ceammc_canvas.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" +#include "ceammc_format.h" +#include "ceammc_inlet.h" +#include "ceammc_outlet.h" +#include "fmt/format.h" +#include "lex/parser_clone.h" + +#include +#include +#include +#include +#include +#include + +constexpr const char* CONTAINTER_NAME = "/CONTAINER/"; +constexpr const char* PATTERN_NAME = "/PATTERN/"; +constexpr const char* SYM_CANVAS_RESTORE = "#A"; +constexpr int PATTERN_WINDOW_W = 700; +constexpr int PATTERN_WINDOW_H = 500; + +#ifndef NDEBUG +#define CLONE_DEBUG +#endif + +extern "C" { +#include "g_canvas.h" +#include "g_ceammc_draw.h" +#include "m_imp.h" + +void canvas_dodsp(t_canvas* x, int toplevel, t_signal** sp); +t_signal* signal_newfromcontext(int borrowed); +void signal_makereusable(t_signal* sig); +void obj_sendinlet(t_object* x, int n, t_symbol* s, int argc, t_atom* argv); +} + +template +using deleted_unique_ptr = std::unique_ptr>; +using BinBufferPtr = deleted_unique_ptr; + +namespace { + +template +T min3(T a, T b, T c) +{ + return std::min(a, std::min(b, c)); +} + +size_t atom_hash(const t_atom& a) noexcept +{ + std::size_t hash = std::hash {}(a.a_type); + + if (a.a_type == A_SYMBOL) + boost::hash_combine(hash, boost::hash_value(a.a_w.w_symbol)); + else + boost::hash_combine(hash, boost::hash_value(a.a_w.w_float)); + + return hash; +} + +class DspSuspendGuard { + const int dsp_state_; + +public: + DspSuspendGuard() + : dsp_state_(canvas_suspend_dsp()) + { + } + + ~DspSuspendGuard() { canvas_resume_dsp(dsp_state_); } +}; + +void clone_pop_canvas(t_canvas* x, bool show) +{ + if (show) + canvas_vis(x, 1); + + pd_popsym(&x->gl_pd); + canvas_resortinlets(x); + canvas_resortoutlets(x); + x->gl_loading = 0; +} + +t_canvas* clone_create_container(t_canvas* owner, t_symbol* name) +{ + t_atom a[6]; + SETFLOAT(a, 0); + SETFLOAT(a + 1, 22); + SETFLOAT(a + 2, PATTERN_WINDOW_W); + SETFLOAT(a + 3, PATTERN_WINDOW_H); + SETSYMBOL(a + 4, name); + SETFLOAT(a + 5, 1); + + auto* c = canvas_new(0, 0, 6, a); + c->gl_owner = owner; + clone_pop_canvas(c, false); + return c; +} + +t_canvas* clone_create_pattern(t_canvas* owner, bool show) +{ + t_atom a[6]; + + SETFLOAT(a, 0); + SETFLOAT(a + 1, 22); + SETFLOAT(a + 2, PATTERN_WINDOW_W); + SETFLOAT(a + 3, PATTERN_WINDOW_H); + SETSYMBOL(a + 4, gensym(PATTERN_NAME)); + SETFLOAT(a + 5, 0); + + auto c = canvas_new(0, 0, 6, a); + c->gl_owner = owner; + clone_pop_canvas(c, show); + glist_add(owner, &c->gl_obj.te_g); + return c; +} + +void clone_bind_restore(t_object* owner) +{ + auto z = gensym(SYM_CANVAS_RESTORE); + z->s_thing = nullptr; + pd_bind(&owner->te_g.g_pd, z); +} + +/** + * copy canvas content to specified binbuf + */ +void clone_copy_canvas_content(const t_canvas* z, t_binbuf* b) +{ + auto x = (t_canvas*)z; + + for (auto y = x->gl_list; y != nullptr; y = y->g_next) + gobj_save(y, b); + + t_linetraverser t; + linetraverser_start(&t, x); + + auto sym_X = gensym("#X"); + auto sym_connect = gensym("connect"); + + while (linetraverser_next(&t)) { + int srcno = canvas_getindex(x, &t.tr_ob->ob_g); + int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g); + + binbuf_addv(b, "ssiiii;", sym_X, sym_connect, + srcno, t.tr_outno, + sinkno, t.tr_inno); + } +} + +void clone_set_canvas_content(t_canvas* x, const t_binbuf* b, int ninst, int inst) +{ + DspSuspendGuard dsp_guard; + + t_symbol* aSym = gensym("#A"); + /* save and clear bindings to symbols #A, #N, #X; restore when done */ + t_pd *boundX = s__X.s_thing, + *boundN = s__N.s_thing, + *boundA = aSym->s_thing; + + aSym->s_thing = nullptr; + s__X.s_thing = &x->gl_pd; + s__N.s_thing = &pd_canvasmaker; + + auto n = binbuf_getnatom(b); + auto v = binbuf_getvec(b); + // store replaced atoms + std::vector nvec, ivec; + // placeholder: number of instances + auto nsym = gensym("$2"); + // placeholder: instance index + auto isym = gensym("$1"); + + // if ninst < 0 we are in a pattern + if (ninst >= 0 && inst >= 0) { + // replace placeholders + for (int i = 0; i < n; i++) { + auto a = &v[i]; + if (a->a_type == A_SYMBOL) { + auto s = atom_getsymbol(a); + if (s == nsym) { + nvec.push_back(i); + SETFLOAT(a, (t_float)ninst); + } else if (s == isym) { + ivec.push_back(i); + SETFLOAT(a, (t_float)inst + 1); + } + } + } + } + + binbuf_eval(b, 0, 0, 0); + + if (ninst >= 0 && inst >= 0) { + // restore placeholders + for (auto i : nvec) { + SETSYMBOL(v + i, nsym); + } + + for (auto i : ivec) { + SETSYMBOL(v + i, isym); + } + } + + // restore bindings + aSym->s_thing = boundA; + s__X.s_thing = boundX; + s__N.s_thing = boundN; +} + +std::size_t clone_binbuf_calc_hash(const t_binbuf* bb) +{ + size_t hash = 0; + + if (!bb) + return hash; + + const auto n = binbuf_getnatom(bb); + const auto a = binbuf_getvec(bb); + + for (int i = 0; i < n; i++) + boost::hash_combine(hash, atom_hash(a[n])); + + return hash; +} + +class BaseCloneFactory : public SoundExternalFactory { +public: + BaseCloneFactory(const char* name, int flags) + : SoundExternalFactory(name, flags) + { + class_addmethod(this->classPointer(), (t_method)restore_fn, gensym("restore"), A_GIMME, 0); + class_setsavefn(this->classPointer(), (t_savefn)save_fn); + } + + static void save_fn(ObjectProxy* x, t_binbuf* b) + { + x->impl->onSave(b); + + if (x->impl->changed()) + x->impl->updateInstances(); + } + + static void restore_fn(ObjectProxy* x, t_symbol* /*sel*/, int argc, t_atom* argv) + { + x->impl->onRestore(AtomListView(argv, argc)); + } +}; + +using MouseFn = void (*)(t_canvas*, t_floatarg, t_floatarg, t_floatarg, t_floatarg); + +enum : int { + NOMOD = 0, + SHIFTMOD = 1, + CTRLMOD = 2, + ALTMOD = 4, + RIGHTCLICK = 8 +}; + +MouseFn ceammc_old_canvas_mouse_fn = nullptr; + +void canvas_new_mouse_fn(t_canvas* x, t_floatarg xpos, t_floatarg ypos, + t_floatarg which, t_floatarg mod) +{ + if (!x) + return; + + const bool runmode = (((int)mod & CTRLMOD) || (!x->gl_edit)); + const bool rightclick = ((int)mod & RIGHTCLICK); + + if (x->gl_editor && !runmode && !rightclick) { + // find first selected BaseClone object + auto sel = x->gl_editor->e_selection; + while (sel) { + auto clone_obj = sel->sel_what; + sel = sel->sel_next; + if (clone_obj->g_pd == BaseCloneFactory::classPointer()) { + auto x = reinterpret_cast*>(clone_obj); + // store the object content to restore it in a future + x->impl->storeContent(); + break; + } + } + } + + if (ceammc_old_canvas_mouse_fn) + return ceammc_old_canvas_mouse_fn(x, xpos, ypos, which, mod); +} +} + +CloneInstance::CloneInstance(uint16_t idx, t_canvas* owner) + : idx_(idx) + , canvas_(nullptr) +{ + canvas_ = clone_create_container(owner, gensym(fmt::format("instance({})", idx + 1).c_str())); +} + +CloneInstance::CloneInstance(CloneInstance&& ci) + : idx_(ci.idx_) + , canvas_(std::move(ci.canvas_)) +{ +} + +CloneInstance::~CloneInstance() +{ + if (canvas_) { + canvas_free(canvas_); + canvas_ = nullptr; + } +} + +void CloneInstance::fillWithPattern(const t_binbuf* pattern, int num) +{ + if (!canvas_) + return; + + clear(); + clone_set_canvas_content(canvas_, pattern, num, (int)idx_); +} + +void CloneInstance::loadbang() +{ + if (canvas_) + canvas_loadbang(canvas_); +} + +void CloneInstance::clear() +{ + if (!canvas_) + return; + + t_gobj* y = nullptr; + while ((y = canvas_->gl_list)) + glist_delete(canvas_, y); +} + +void CloneInstance::open() +{ + if (canvas_) + canvas_vis(canvas_, 1); +} + +t_binbuf* BaseClone::old_content_ = nullptr; + +BaseClone::BaseClone(const PdArgs& args) + : BaseObject(args) + , num_(nullptr) + , wrapper_(nullptr) + , pattern_(nullptr) + , n_sig_in_(0) + , n_sig_out_(0) + , pattern_hash_(0) + , renaming_(false) +{ + num_ = new IntProperty("@n", 1); + num_->setInitOnly(); + num_->checkMinEq(1); + num_->setArgIndex(0); + addProperty(num_); + + // pattern container + wrapper_ = clone_create_container(canvas(), gensym(CONTAINTER_NAME)); + + if (!isPatchLoading()) { + renaming_ = (old_content_ != nullptr); + pattern_ = clone_create_pattern(wrapper_, !renaming_); + if (renaming_) { + clone_set_canvas_content(pattern_, old_content_, -1, -1); + binbuf_free(old_content_); + old_content_ = nullptr; + } + } else { + clone_bind_restore(owner()); + } +} + +BaseClone::~BaseClone() +{ + if (wrapper_) { + storeContent(); + + canvas_free(wrapper_); + wrapper_ = nullptr; + // clone_pattern_ should be freed automatically + } +} + +void BaseClone::onClick(t_floatarg /*xpos*/, t_floatarg /*ypos*/, t_floatarg /*shift*/, t_floatarg /*ctrl*/, t_floatarg /*alt*/) +{ + if (!wrapper_) { + OBJ_ERR << "NULL canvas pattern wrapper"; + return; + } + + if (!pattern_) { + OBJ_ERR << "NULL canvas pattern"; + return; + } + + canvas_vis(pattern_, 1); +} + +void BaseClone::onAny(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + switch (parse_clone_message_type(s->s_name)) { + case MSG_TYPE_SEND: + return m_send(s, lv); + case MSG_TYPE_SEND_SPREAD: + return m_send_spread(s, lv); + case MSG_TYPE_DSP_SET: + return m_dsp_set(s, lv); + case MSG_TYPE_DSP_TOGGLE: + return m_dsp_toggle(s, lv); + default: { + TargetMessage msg; + if (s->s_name[0] == '#' && parse_clone_target(s->s_name, msg)) + return send(msg, lv); + + } break; + } +} + +void BaseClone::initDone() +{ + try { + if (num_->value() < 1) + throw std::invalid_argument("number of copies required"); + + if (!initInstances()) + throw std::runtime_error("can't init instances"); + + if (renaming_) { + updateInstances(); + renaming_ = false; + } + + } catch (std::exception& e) { + if (!args().empty()) + OBJ_ERR << e.what(); + else + OBJ_LOG << e.what(); // object without args - used in help + } +} + +bool BaseClone::initInstances() +{ + DspSuspendGuard dsp_guard; + + const uint16_t NINSTANCE = num_->value(); + instances_.reserve(NINSTANCE); + + for (uint16_t i = 0; i < NINSTANCE; i++) { + if (!initInstance(i)) + return false; + } + + return true; +} + +bool BaseClone::initInstance(uint16_t idx) +{ + instances_.emplace_back(idx, wrapper_); + return true; +} + +void BaseClone::updateInstances() +{ + if (pattern_) { + const bool visible = isVisible(); + + BinBufferPtr bb(binbuf_new(), binbuf_free); + clone_copy_canvas_content(pattern_, bb.get()); + const auto new_hash = clone_binbuf_calc_hash(bb.get()); + + if (new_hash != pattern_hash_) + pattern_hash_ = new_hash; + else + return; + + DspSuspendGuard dsp_guard; + + if (visible) + gobj_vis(&owner()->te_g, canvas(), 0); + + for (auto& i : instances_) { + i.fillWithPattern(bb.get(), instances_.size()); + i.loadbang(); + } + + updateInlets(); + updateOutlets(); + + if (visible) { + gobj_vis(&owner()->te_g, canvas(), 1); + canvas_fixlinesfor(canvas(), owner()); + } + + updateXletsInfo(); + } +} + +void BaseClone::updateXletsInfo() +{ + inlet_help_.clear(); + for (int i = 0; i < num_->value(); i++) { + for (int k = 0; k < n_instance_in_; k++) { + inlet_help_.push_back(fmt::format("instance\\[{}\\]: inlet {}", i + 1, k)); + } + } + + outlet_help_.clear(); + for (int i = 0; i < num_->value(); i++) { + for (int k = 0; k < n_instance_out_; k++) { + outlet_help_.push_back(fmt::format("instance\\[{}\\]: outlet {}", i + 1, k)); + } + } +} + +void BaseClone::updateInlets() +{ + const size_t NUM_PATTERN_INLETS = pattern_ ? obj_ninlets(&pattern_->gl_obj) : 0; + n_instance_in_ = NUM_PATTERN_INLETS; + + const size_t NUM_ISTANCES = num_->value(); + const auto new_count = NUM_PATTERN_INLETS * NUM_ISTANCES; + const auto prev_count = inlets().size(); + + // add/remove inlets if needed + if (prev_count < new_count) { + // add new + for (size_t i = prev_count; i < new_count; i++) { + auto in = inlet_new(owner(), nullptr, nullptr, nullptr); + appendInlet(in); + } + } else if (prev_count > new_count) { + // remove extra + while (inlets().size() > new_count) { + if (!popInlet()) + break; + } + } + + n_sig_in_ = 0; + + // update inlet destinations + for (size_t n = 0; n < NUM_ISTANCES; n++) { + // instance canvas + auto ci = instances_[n].canvas(); + auto x = &ci->gl_obj; + + // inlet index + size_t idx = n * NUM_PATTERN_INLETS; + + // iterate instance inlets + InletIterator it(x); + while (it) { + auto inl = inlets()[idx++]; + util::inlet_set_dest(inl, it.asObject()); + + const auto is_sig = it.isSignal(); + util::inlet_set_signal(inl, is_sig); + if (is_sig) + n_sig_in_++; + + it.next(); + } + } + + n_sig_in_ = obj_nsiginlets(&pattern_->gl_obj) * NUM_ISTANCES; +} + +void BaseClone::updateOutlets() +{ + const size_t NUM_PATTERN_OUTLETS = pattern_ ? obj_noutlets(&pattern_->gl_obj) : 0; + n_instance_out_ = NUM_PATTERN_OUTLETS; + + const size_t NUM_ISTANCES = num_->value(); + const auto new_count = NUM_PATTERN_OUTLETS * NUM_ISTANCES; + const auto prev_count = outlets().size(); + + // add/remove outlets if needed + if (prev_count < new_count) { + // add new + for (size_t i = prev_count; i < new_count; i++) { + auto out = outlet_new(owner(), &s_list); + appendOutlet(out); + } + } else if (prev_count > new_count) { + // remove extra + while (outlets().size() > new_count) { + if (!popOutlet()) + break; + } + } + + proxy_.clear(); + proxy_.reserve(outlets().size()); + n_sig_out_ = 0; + + // divizion by zero check: in next loop + if (outlets().empty() || NUM_PATTERN_OUTLETS == 0) + return; + + for (size_t i = 0; i < outlets().size(); i++) { + const auto inst_idx = i / NUM_PATTERN_OUTLETS; + const auto src_idx = i % NUM_PATTERN_OUTLETS; + + proxy_.emplace_back(this, (int)i); + + auto ci = instances_[inst_idx].canvas(); + auto x = &ci->gl_obj; + obj_connect(x, src_idx, proxy_.back().object(), 0); + + // count signal outlets + const bool is_sig = obj_issignaloutlet(x, src_idx); + util::outlet_set_signal(outletAt(i), is_sig); + + if (is_sig) + n_sig_out_++; + } +} + +void BaseClone::signalInit(t_signal** sp) +{ + using SignalVector = boost::container::small_vector; + + // no audio input/output + if (n_sig_in_ == 0 && n_sig_out_ == 0) + return; + + auto obj_in = sp; + auto obj_out = sp + n_sig_in_; + + const size_t NINST = instances_.size(); + const size_t INST_IN = n_sig_in_ / NINST; + const size_t INST_OUT = n_sig_out_ / NINST; + + // ref counter update + for (size_t i = 0; i < n_sig_in_; i++) + obj_in[i]->s_refcount += 2; + + // create output signals + SignalVector sig_out(n_sig_out_); + for (auto& s : sig_out) + s = signal_newfromcontext(0); + + // prepare instance in/out signals vector + SignalVector inst_sig(INST_IN + INST_OUT); + + for (size_t i = 0; i < NINST; i++) { + auto& inst = instances_[i]; + + if (!inst.isDspOn()) { + // zero output + for (size_t k = 0; k < INST_OUT; k++) { + auto out = sig_out[i * INST_OUT + k]; + dsp_add_zero(out->s_vec, out->s_n); + } + + continue; + } + + // copy object input signals to instance signals + for (size_t k = 0; k < INST_IN; k++) { + inst_sig[k] = obj_in[i * INST_IN + k]; + } + + // create new instance output signals + for (size_t k = 0; k < INST_OUT; k++) + inst_sig[INST_IN + k] = signal_newfromcontext(1); + + // build instance DSP graph + canvas_dodsp(inst.canvas(), 0, inst_sig.data()); + + // setup DSP functions + for (size_t k = 0; k < INST_OUT; k++) { + auto out = sig_out[i * INST_OUT + k]; + // copy to output signals + dsp_add_copy(inst_sig[INST_IN + k]->s_vec, out->s_vec, out->s_n); + signal_makereusable(inst_sig[INST_IN + k]); + } + } + + /* copy to output signals */ + { + auto x = obj_out; + for (auto& s : sig_out) { + dsp_add_copy(s->s_vec, (*x++)->s_vec, s->s_n); + // free output signals + signal_makereusable(s); + } + } +} + +void BaseClone::send(const parser::TargetMessage& msg, const AtomListView& lv) +{ + using namespace ceammc::parser; + + const auto range = instanceRange(msg); + if (range.valid()) { + if (range.empty()) + return; + + for (auto i = range.a; i < range.b; i += range.step) + sendToInstanceInlets(i, msg.inlet, lv); + + } else if (msg.target == TARGET_TYPE_EXCEPT) { + + for (size_t i = 0; i < numInstances(); i++) { + if (i != msg.first) + sendToInstanceInlets(i, msg.inlet, lv); + } + } else + OBJ_ERR << fmt::format("unsupported target: {:d}", msg.target); +} + +void BaseClone::dspSet(const parser::TargetMessage& msg, const AtomListView& lv) +{ + using namespace ceammc::parser; + + const auto range = instanceRange(msg); + + OBJ_DBG << fmt::format("{} range: {:d}..{:d}", __FUNCTION__, range.a, range.b); + + if (range.valid()) { + if (range.empty()) + return; + + DspSuspendGuard guard; + const auto v = lv.boolAt(0, false); + + for (auto i = range.a; i < range.b; i += range.step) + dspSetInstance(i, v); + + } else if (msg.target == TARGET_TYPE_EXCEPT) { + DspSuspendGuard guard; + const auto v = lv.boolAt(0, false); + + for (size_t i = 0; i < numInstances(); i++) { + if (i != msg.first) + dspSetInstance(i, v); + } + } else + OBJ_ERR << fmt::format("unsupported target: {:d}", msg.target); +} + +void BaseClone::dspSetInstance(int16_t idx, bool value) +{ + if (idx < 0 || idx >= instances_.size()) { + OBJ_ERR << fmt::format("invalid instance: {:d}", idx); + return; + } + + instances_[idx].dspSet(value); + +#ifdef CLONE_DEBUG + OBJ_LOG << fmt::format("dsp set {:d}={:d}", idx, value); +#endif +} + +void BaseClone::dspToggle(const parser::TargetMessage& msg) +{ + using namespace ceammc::parser; + + const auto range = instanceRange(msg); + if (range.valid()) { + if (range.empty()) + return; + + DspSuspendGuard guard; + + for (auto i = range.a; i < range.b; i++) + dspToggleInstance(i); + + } else if (msg.target == TARGET_TYPE_EXCEPT) { + DspSuspendGuard guard; + + for (size_t i = 0; i < numInstances(); i++) { + if (i != msg.first) + dspToggleInstance(i); + } + } else + OBJ_ERR << fmt::format("unsupported target: {:d}", msg.target); +} + +void BaseClone::dspToggleInstance(int16_t idx) +{ + if (idx < 0 || idx >= instances_.size()) { + OBJ_ERR << fmt::format("invalid instance: {:d}", idx); + return; + } + + instances_[idx].dspToggle(); +} + +void BaseClone::dspSpread(const parser::TargetMessage& msg, const AtomListView& lv) +{ + using namespace ceammc::parser; + + const auto range = instanceSpreadRange(msg, lv); + +#ifdef CLONE_DEBUG + OBJ_DBG << fmt::format("{} range: {:d}..{:d}", __FUNCTION__, range.a, range.b); +#endif + + if (range.valid()) { + if (range.empty()) + return; + + DspSuspendGuard guard; + + for (auto i = range.a; i < range.b; i++) + dspSetInstance(i, lv.boolAt(i - range.a, false)); + } else + OBJ_ERR << fmt::format("unsupported target: {:d}", msg.target); +} + +uint16_t BaseClone::genRandomInstanceIndex() const +{ + if (instances_.empty()) + return 0; + + std::mt19937 dev(time(0)); + std::uniform_int_distribution dist(0, instances_.size() - 1); + return dist(dev); +} + +bool BaseClone::isValidInstance(int16_t inst) const +{ + if (inst < 0 || inst >= instances_.size()) { + OBJ_ERR << fmt::format("invalid instance: {:d}, expected value in [0..{:d}) range", inst, instances_.size()); + return false; + } else + return true; +} + +bool BaseClone::isValidInstanceRange(int16_t a, int16_t b) const +{ + if (a < 0 || a >= instances_.size()) { + OBJ_ERR << fmt::format("invalid range start: {:d}, expected value in [0..{:d}) range", a, instances_.size()); + return false; + } else if (b < 0) { + OBJ_ERR << fmt::format("invalid range end: {:d}, expected value > 0", b); + return false; + } else + return true; +} + +bool BaseClone::isValidInlet(int16_t inlet) const +{ + if (inlet >= n_instance_in_) { + OBJ_ERR << fmt::format("invalid inlet: {:d}", inlet); + return false; + } else + return true; +} + +BaseClone::InstanceRange BaseClone::instanceSpreadRange(const parser::TargetMessage& msg, const AtomListView& lv) const +{ + using namespace ceammc::parser; + + switch (msg.target) { + case TARGET_TYPE_ALL: { + const uint16_t b = std::min(numInstances(), lv.size()); + return { 0, b }; + } + case TARGET_TYPE_EQ: + if (msg.first >= 0 && msg.first < numInstances()) { + const uint16_t a = msg.first; + const uint16_t b = a + std::min(1, lv.size()); + return { a, b }; + } else + return { 0, 0, 0 }; + case TARGET_TYPE_RANDOM: { + const auto a = genRandomInstanceIndex(); + const uint16_t b = a + std::min(1, lv.size()); + return { a, b }; + } + case TARGET_TYPE_GE: { + const uint16_t a = clip_min(msg.first); + const uint16_t b = std::min(a + lv.size(), numInstances()); + return { a, b }; + } + case TARGET_TYPE_GT: { + const uint16_t a = clip_min(msg.first) + 1; + const uint16_t b = std::min(a + lv.size(), numInstances()); + return { a, b }; + } + case TARGET_TYPE_LT: { + const uint16_t a = 0; + const uint16_t b = min3(msg.first, lv.size(), numInstances()); + return { a, b }; + } + case TARGET_TYPE_LE: { + const uint16_t a = 0; + const uint16_t b = min3(msg.first + 1, lv.size(), numInstances()); + return { a, b }; + } + case TARGET_TYPE_RANGE: { + const uint16_t a = min3(clip_min(msg.first), lv.size(), numInstances()); + const uint16_t b = min3(clip_min(msg.last), lv.size(), numInstances()); + const uint16_t step = clip_min(msg.step); + const auto mm = std::minmax(a, b); + return { mm.first, mm.second, step }; + } + default: + return { 0, 0, 0 }; + } +} + +BaseClone::InstanceRange BaseClone::instanceRange(const parser::TargetMessage& msg) const +{ + using namespace ceammc::parser; + + switch (msg.target) { + case TARGET_TYPE_ALL: { + const uint16_t a = 0; + const uint16_t b = numInstances(); + return { a, b }; + } + case TARGET_TYPE_EQ: + if (msg.first >= 0 && msg.first < numInstances()) { + const uint16_t a = msg.first; + const uint16_t b = a + 1; + return { a, b }; + } else + return { 0, 0, 0 }; + case TARGET_TYPE_RANDOM: { + const uint16_t a = genRandomInstanceIndex(); + const uint16_t b = a + 1; + return { a, b }; + } + case TARGET_TYPE_GE: { + const uint16_t a = clip_min(msg.first); + const uint16_t b = numInstances(); + return { a, b }; + } + case TARGET_TYPE_GT: { + const uint16_t a = clip_min(msg.first) + 1; + const uint16_t b = numInstances(); + return { a, b }; + } + case TARGET_TYPE_LT: { + const uint16_t a = 0; + const uint16_t b = std::min(msg.first, numInstances()); + return { a, b }; + } + case TARGET_TYPE_LE: { + const uint16_t a = 0; + const uint16_t b = std::min(msg.first + 1, numInstances()); + return { a, b }; + } + case TARGET_TYPE_RANGE: { + const uint16_t a = std::min(clip_min(msg.first), numInstances()); + const uint16_t b = std::min(clip_min(msg.last), numInstances()); + const uint16_t step = clip_min(msg.step); + const auto mm = std::minmax(a, b); + return { mm.first, mm.second, step }; + } + default: + return { 0, 0, 0 }; + } +} + +bool BaseClone::changed() const +{ + return canvas_info_is_dirty(canvas()) && pattern_; +} + +const char* BaseClone::annotateInlet(size_t n) const +{ + if (n == 0) + return "control inlet"; + else if (n <= inlet_help_.size()) + return inlet_help_[n - 1].c_str(); + else + return ""; +} + +const char* BaseClone::annotateOutlet(size_t n) const +{ + if (n < outlet_help_.size()) + return outlet_help_[n].c_str(); + else + return ""; +} + +void BaseClone::sendToInlet(t_inlet* inlet, const AtomListView& lv) +{ + auto x = util::inlet_object(inlet); + + if (lv.empty()) + return pd_bang(x); + else if (lv.isFloat()) + return pd_float(x, lv[0].asT()); + else if (lv.isSymbol()) + return pd_symbol(x, lv[0].asT()); + else if (lv.size() > 1 && lv[0].isFloat()) + return pd_list(x, &s_list, lv.size(), lv.toPdData()); + else if (lv[0].isSymbol()) { + auto lv0 = lv.subView(1); + return pd_typedmess(x, lv[0].asT(), lv.size(), lv.toPdData()); + } else { + OBJ_ERR << "invalid list: " << lv; + } +} + +void BaseClone::sendToInstance(uint16_t inst, uint16_t inlet, const AtomListView& lv) +{ + const auto idx = inst * n_instance_in_ + inlet; + if (idx < inlets().size()) { + sendToInlet(inlets()[idx], lv); + +#ifdef CLONE_DEBUG + OBJ_LOG << fmt::format("send to {}#{} lv", inst, inlet, to_string(lv)); +#endif + } +} + +bool BaseClone::sendToInstanceInlets(int16_t inst, int16_t inlet, const AtomListView& lv) +{ + if (inst < 0 || inst >= (int16_t)instances_.size()) { + OBJ_ERR << fmt::format("invalid instance: {}", inst); + return false; + } + + if (inlet < 0) { // all inlets + for (uint16_t i = 0; i < n_instance_in_; i++) + sendToInstance(inst, i, lv); + } else if (inlet <= n_instance_in_) { // single inlet + sendToInstance(inst, inlet, lv); + } else { + OBJ_ERR << fmt::format("invalid instance inlet: {}", inlet); + return false; + } + + return true; +} + +void BaseClone::sendSpread(const parser::TargetMessage& msg, const AtomListView& lv) +{ + using namespace ceammc::parser; + + switch (msg.target) { + case TARGET_TYPE_ALL: { // spread to all instances + const auto N = std::min(instances_.size(), lv.size()); + + if (msg.inlet >= n_instance_in_) { + OBJ_ERR << fmt::format("invalid inlet: {:d}", msg.inlet); + return; + } + + const auto inlet = clip_min(msg.inlet); + + for (size_t i = 0; i < N; i++) + sendToInstance(i, inlet, lv.subView(i, 1)); + + } break; + case TARGET_TYPE_EQ: { // spread to inlets of specified instance + if (!isValidInstance(msg.first) || !isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(n_instance_in_ - inlet, lv.size()); + + for (size_t i = 0; i < N; i++) + sendToInstance(msg.first, i + inlet, lv.subView(i, 1)); + + } break; + case TARGET_TYPE_RANDOM: { // spread to inlets of random instance + if (!isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(n_instance_in_ - inlet, lv.size()); + + for (size_t i = 0; i < N; i++) + sendToInstance(genRandomInstanceIndex(), i + inlet, lv.subView(i, 1)); + + } break; + case TARGET_TYPE_EXCEPT: { // spread to all instances expect one specified + if (!isValidInstance(msg.first) || !isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(instances_.size(), lv.size()); + + for (size_t i = 0; i < N; i++) { + if (i != msg.first) + sendToInstance(i, i + inlet, lv.subView(i, 1)); + } + + } break; + case TARGET_TYPE_LT: { + if (!isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(instances_.size(), std::min(msg.first, lv.size())); + + for (size_t i = 0; i < N; i++) + sendToInstance(i, inlet, lv.subView(i, 1)); + + } break; + case TARGET_TYPE_LE: { + if (!isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(instances_.size(), std::min(msg.first + 1, lv.size())); + + for (size_t i = 0; i < N; i++) + sendToInstance(i, inlet, lv.subView(i, 1)); + } break; + case TARGET_TYPE_GE: { + if (!isValidInstance(msg.first) || !isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(instances_.size(), lv.size()); + + for (size_t i = msg.first; i < N; i++) + sendToInstance(i, inlet, lv.subView(i, 1)); + + } break; + case TARGET_TYPE_GT: { + if (!isValidInstance(msg.first) || !isValidInlet(msg.inlet)) + return; + + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(instances_.size(), lv.size()); + + for (size_t i = msg.first + 1; i < N; i++) + sendToInstance(i, inlet, lv.subView(i, 1)); + } break; + case TARGET_TYPE_RANGE: { + if (!isValidInstanceRange(msg.first, msg.last) || !isValidInlet(msg.inlet)) + return; + + const auto mm = std::minmax(msg.first, msg.last); + const auto inlet = clip_min(msg.inlet); + const auto N = std::min(mm.second - mm.first, std::min(instances_.size(), lv.size())); + + for (size_t i = 0; i < N; i++) + sendToInstance(i + mm.first, inlet, lv.subView(i, 1)); + } break; + default: + OBJ_ERR << fmt::format("unknown target: {:d}", msg.target); + break; + } +} + +void BaseClone::setupDSP(t_signal** sp) +{ + signalInit(sp); + +#ifdef CLONE_DEBUG + OBJ_DBG << fmt::format("{}:\n" + " - inputs: {}\n" + " - outputs: {}", + __FUNCTION__, n_sig_in_, n_sig_out_); +#endif +} + +void BaseClone::m_open(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_NATURAL, s)) + return; + + int n = lv.intAt(0, 0); + if (n < 0 || n >= instances_.size()) { + OBJ_ERR << fmt::format("invalid index: {}", n); + return; + } + + instances_[n].open(); +} + +void BaseClone::m_menu_open(t_symbol*, const AtomListView& /*lv*/) +{ + canvas_vis(pattern_, 1); +} + +void BaseClone::m_send(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + TargetMessage msg; + + // pattern + // send #... pattern + if (lv.size() >= 1 && lv[0].isSymbol() && parse_clone_target(lv[0].asT()->s_name, msg)) + return send(msg, lv.subView(1)); + + // direct instance index + // send N + if (lv.size() >= 1 && lv[0].isFloat()) { + msg.first = lv[0].asT(); + msg.target = TARGET_TYPE_EQ; + msg.inlet = -1; + return send(msg, lv.subView(1)); + } + + METHOD_ERR(s) << "invalid format: " << lv; +} + +void BaseClone::m_send_spread(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + TargetMessage msg; + + // pattern + // send: #... pattern + if (lv.size() >= 1 && lv[0].isSymbol() && parse_clone_target(lv[0].asT()->s_name, msg)) + return sendSpread(msg, lv.subView(1)); + + // direct instance index + // send: N + if (lv.size() >= 1 && lv[0].isFloat()) { + msg.first = lv[0].asT(); + msg.target = TARGET_TYPE_EQ; + msg.inlet = -1; + return sendSpread(msg, lv.subView(1)); + } + + METHOD_ERR(s) << "invalid format: " << lv; +} + +void BaseClone::m_dsp_set(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + TargetMessage msg; + + // pattern + // dsp= #... + if (lv.size() >= 1 && lv[0].isSymbol() && parse_clone_target(lv[0].asT()->s_name, msg)) + return dspSet(msg, lv.subView(1)); + + // direct instance index + // dsp= N + if (lv.size() >= 1 && lv[0].isFloat()) { + msg.first = lv[0].asT(); + msg.target = TARGET_TYPE_EQ; + return dspSet(msg, lv.subView(1)); + } + + METHOD_ERR(s) << "invalid format: " << lv; +} + +void BaseClone::m_dsp_toggle(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + TargetMessage msg; + + // pattern + // dsp~ #... + if (lv.size() >= 1 && lv[0].isSymbol() && parse_clone_target(lv[0].asT()->s_name, msg)) + return dspToggle(msg); + + // direct instance index + // dsp~ N + if (lv.size() >= 1 && lv[0].isFloat()) { + msg.first = lv[0].asT(); + msg.target = TARGET_TYPE_EQ; + dspToggle(msg); + } else if (lv.empty()) { + for (auto& i : instances_) + i.dspToggle(); + } else + METHOD_ERR(s) << "invalid format: " << lv; +} + +void BaseClone::m_dsp_spread(t_symbol* s, const AtomListView& lv) +{ + using namespace ceammc::parser; + + TargetMessage msg; + + // pattern + // dsp: #... VALUES + if (lv.size() >= 1 && lv[0].isSymbol() && parse_clone_target(lv[0].asT()->s_name, msg)) + return dspSpread(msg, lv.subView(1)); + + // direct instance index + // dsp: N VALUES + if (lv.size() >= 1 && lv[0].isFloat()) { + msg.first = lv[0].asT(); + msg.target = TARGET_TYPE_EQ; + dspSpread(msg, lv.subView(1)); + } else + METHOD_ERR(s) << "invalid format: " << lv; +} + +void BaseClone::storeContent() const +{ + if (!old_content_) + old_content_ = binbuf_new(); + else + binbuf_clear(old_content_); + + if (pattern_) { + clone_copy_canvas_content(pattern_, old_content_); + } +} + +void BaseClone::onRestore(const AtomListView& lv) +{ + auto cnv = gensym("#X"); + if (cnv->s_thing == nullptr) { + OBJ_ERR << "null canvas"; + return; + } + + // current canvas binding + auto z = cnv->s_thing; + if (!z || *z != canvas_class) { + OBJ_ERR << "not a canvas"; + return; + } + + // current canvas pointer + auto x = (t_canvas*)z; + + clone_pop_canvas(x, false); + x->gl_owner = wrapper_; + + auto t = &x->gl_obj; + + t->te_width = 0; /* don't know it yet. */ + t->te_type = T_OBJECT; + t->te_binbuf = binbuf_new(); + t->te_xpix = atom_getfloatarg(0, lv.size(), lv.toPdData()); + t->te_ypix = atom_getfloatarg(1, lv.size(), lv.toPdData()); + + if (lv.size() > 2) + binbuf_restore(t->te_binbuf, lv.size() - 2, lv.toPdData() + 2); + + glist_add(wrapper_, &t->te_g); + + if (pattern_) { + canvas_free(pattern_); + pattern_ = nullptr; + } + + pattern_ = x; + + updateInstances(); +} + +void BaseClone::onSave(t_binbuf* b) const +{ + auto obj = owner(); + + auto sym_X = gensym("#X"); + auto sym_connect = gensym("connect"); + + // save object + binbuf_addv(b, "ssii", sym_X, gensym("obj"), + (int)obj->te_xpix, (int)obj->te_ypix); + binbuf_addbinbuf(b, obj->te_binbuf); + if (obj->te_width) + binbuf_addv(b, ",si", gensym("f"), (int)obj->te_width); + binbuf_addv(b, ";"); + + if (wrapper_ && pattern_) { + auto x = pattern_; + + /* have to go to original binbuf to find out how we were named. */ + binbuf_addv(b, "ssiiiisi;", gensym("#N"), gensym("canvas"), + (int)(x->gl_screenx1), + (int)(x->gl_screeny1), + (int)(x->gl_screenx2 - x->gl_screenx1), + (int)(x->gl_screeny2 - x->gl_screeny1), + gensym(PATTERN_NAME), + 0); + + // save objects + for (auto y = x->gl_list; y != nullptr; y = y->g_next) + gobj_save(y, b); + + // save connections + t_linetraverser t; + linetraverser_start(&t, x); + while (linetraverser_next(&t)) { + int srcno = canvas_getindex(x, &t.tr_ob->ob_g); + int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g); + binbuf_addv(b, "ssiiii;", sym_X, sym_connect, + srcno, t.tr_outno, sinkno, t.tr_inno); + } + + binbuf_addv(b, "ssiis", gensym(SYM_CANVAS_RESTORE), gensym("restore"), + (int)obj->te_xpix, (int)obj->te_ypix, gensym(PATTERN_NAME)); + binbuf_addv(b, ";"); + } +} + +void setup_base_clone() +{ + BaseCloneFactory obj("clone:", OBJECT_FACTORY_DEFAULT); + obj.useClick(); + + using namespace ceammc::parser; + + obj.addMethod("open", &BaseClone::m_open); + obj.addMethod("menu-open", &BaseClone::m_menu_open); + obj.addMethod(clone_message_to_string(MSG_TYPE_SEND), &BaseClone::m_send); + obj.addMethod(clone_message_to_string(MSG_TYPE_SEND_SPREAD), &BaseClone::m_send_spread); + obj.addMethod(clone_message_to_string(MSG_TYPE_DSP_SET), &BaseClone::m_dsp_set); + obj.addMethod(clone_message_to_string(MSG_TYPE_DSP_TOGGLE), &BaseClone::m_dsp_toggle); + obj.addMethod(clone_message_to_string(MSG_TYPE_DSP_SPREAD), &BaseClone::m_dsp_spread); + + // HACK to rename the object without loosing its pattern + auto sym_mouse = gensym("mouse"); + auto mouse_fn = (MouseFn)zgetfn(&canvas_class, sym_mouse); + if (mouse_fn != canvas_new_mouse_fn) { + ceammc_old_canvas_mouse_fn = mouse_fn; + class_addmethod(canvas_class, (t_method)canvas_new_mouse_fn, sym_mouse, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_NULL); + } +} diff --git a/ceammc/ext/src/base/base_clone.h b/ceammc/ext/src/base/base_clone.h new file mode 100644 index 0000000000..a2339a4754 --- /dev/null +++ b/ceammc/ext/src/base/base_clone.h @@ -0,0 +1,191 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef BASE_CLONE_H +#define BASE_CLONE_H + +#include + +#include "ceammc_proxy.h" +#include "ceammc_sound_external.h" +#include "lex/parser_clone.h" +using namespace ceammc; + +class CloneInstance { + t_canvas* canvas_; + uint16_t idx_; + bool dsp_on_ { true }; + + CloneInstance(const CloneInstance&) = delete; + CloneInstance& operator=(const CloneInstance&) = delete; + +public: + /** + * Create new instance + * @param idx - instance index + * @param owner - owner canvas + */ + CloneInstance(uint16_t idx, t_canvas* owner); + CloneInstance(CloneInstance&& ci); + ~CloneInstance(); + + /** + * fill instance with given pattern + * @param pattern - content + * @param num - total number of instances + */ + void fillWithPattern(const t_binbuf* pattern, int num); + void loadbang(); + + bool isDspOn() const { return dsp_on_; } + void dspSet(bool value) { dsp_on_ = value; } + void dspToggle() { dsp_on_ = !dsp_on_; } + + /** + * clear instance content + */ + void clear(); + + /** + * open editor window + */ + void open(); + + /** + * Instance index + */ + uint16_t index() const { return idx_; } + t_canvas* canvas() { return canvas_; } + const t_canvas* canvas() const { return canvas_; } +}; + +class BaseClone : public BaseObject { +public: + enum XletType : uint8_t { + XLET_CONTROL, + XLET_AUDIO + }; + + using Proxy = DataProxy; + +private: + IntProperty* num_; + t_canvas* wrapper_; + t_canvas* pattern_; + std::vector instances_; + std::vector proxy_; + std::uint16_t n_sig_in_; + std::uint16_t n_sig_out_; + std::uint16_t n_instance_in_; + std::uint16_t n_instance_out_; + size_t pattern_hash_; + std::vector inlet_help_, outlet_help_; + bool renaming_; + +public: + BaseClone(const PdArgs& args); + ~BaseClone(); + + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; + void onAny(t_symbol* s, const AtomListView& lv) final; + + void initDone() override; + + void setupDSP(t_signal** sp); + + void m_open(t_symbol*, const AtomListView& lv); + void m_menu_open(t_symbol*, const AtomListView& lv); + void m_send(t_symbol* s, const AtomListView& lv); + void m_send_spread(t_symbol* s, const AtomListView& lv); + void m_dsp_set(t_symbol* s, const AtomListView& lv); + void m_dsp_toggle(t_symbol* s, const AtomListView& lv); + void m_dsp_spread(t_symbol* s, const AtomListView& lv); + + void data_proxy_bang(const int& i) { bangTo(i); } + void data_proxy_float(const int& i, t_float f) { floatTo(i, f); } + void data_proxy_symbol(const int& i, t_symbol* s) { symbolTo(i, s); } + void data_proxy_list(const int& i, const AtomListView& lv) { listTo(i, lv); } + void data_proxy_any(const int& i, t_symbol* s, const AtomListView& lv) { anyTo(i, s, lv); } + + void storeContent() const; + void updateInstances(); + + bool changed() const; + + const char* annotateInlet(size_t n) const final; + const char* annotateOutlet(size_t n) const final; + +public: + virtual void onSave(t_binbuf* b) const; + virtual void onRestore(const AtomListView& lv); + +private: + bool initInstances(); + bool initInstance(uint16_t idx); + + void updateInlets(); + void updateOutlets(); + void updateXletsInfo(); + + void signalInit(t_signal** sp); + + void send(const parser::TargetMessage& msg, const AtomListView& lv); + void sendToInlet(t_inlet* inlet, const AtomListView& lv); + void sendToInstance(uint16_t inst, uint16_t inlet, const AtomListView& lv); + bool sendToInstanceInlets(int16_t inst, int16_t inlet, const AtomListView& lv); + + void sendSpread(const parser::TargetMessage& msg, const AtomListView& lv); + + void dspSet(const parser::TargetMessage& msg, const AtomListView& lv); + void dspSetInstance(int16_t idx, bool value); + + void dspToggle(const parser::TargetMessage& msg); + void dspToggleInstance(int16_t idx); + + void dspSpread(const parser::TargetMessage& msg, const AtomListView& lv); + + uint16_t genRandomInstanceIndex() const; + + /** checks if instance is in [0..NINST) range **/ + bool isValidInstance(int16_t inst) const; + bool isValidInstanceRange(int16_t a, int16_t b) const; + bool isValidInlet(int16_t inlet) const; + + size_t numInstances() const { return instances_.size(); } + + struct InstanceRange { + std::uint16_t a { 0 }, b { 0 }, step { 1 }; + InstanceRange(std::uint16_t a_, std::uint16_t b_, std::uint16_t step_ = 1) + : a(a_) + , b(b_) + , step(step_) + { + } + bool empty() const { return a >= b; } + bool valid() const { return step > 0; } + }; + + InstanceRange instanceSpreadRange(const parser::TargetMessage& msg, const AtomListView& lv) const; + InstanceRange instanceRange(const parser::TargetMessage& msg) const; + +private: + // object renaming in Pd is the delete, then create sequence + // to support object renaming and do not lose the object pattern content + // we have to store the previous content before destroying the object + // into this static buffer, restoring it in the object constructor + static t_binbuf* old_content_; +}; + +void setup_base_clone(); + +#endif // BASE_CLONE_H diff --git a/ceammc/ext/src/base/base_dac.cpp b/ceammc/ext/src/base/base_dac.cpp index 6c956f799f..d1efeed892 100644 --- a/ceammc/ext/src/base/base_dac.cpp +++ b/ceammc/ext/src/base/base_dac.cpp @@ -89,6 +89,32 @@ BaseDac::BaseDac(const PdArgs& args) for (size_t i = 1; i < vec_.size(); i++) createSignalInlet(); + + createCbListProperty( + "@channels", + [this]() -> AtomList { + AtomList res; + res.reserve(vec_.size()); + for (auto v : vec_) + res.append(v); + + return res; + }, + [this](const AtomListView& lv) -> bool { + const bool ok = lv.allOf([](const Atom& a) -> bool { return a.isInteger() && a.asT() > 0; }); + if (!ok) { + OBJ_ERR << "list of positive integer channel numbers is expected, got: " << lv; + return false; + } + + const auto N = std::min(lv.size(), vec_.size()); + for (size_t i = 0; i < N; i++) + vec_[i] = lv[i].asT(); + + updateDsp(); + + return true; + }); } void BaseDac::processBlock(const t_sample** in, t_sample** out) @@ -129,6 +155,58 @@ const char* BaseDac::annotateInlet(size_t n) const : ""; } +void BaseDac::m_shuffle(t_symbol* s, const AtomListView&) +{ + std::random_shuffle(vec_.begin(), vec_.end()); + updateDsp(); + syncAnnotations(); +} + +void BaseDac::m_reverse(t_symbol* s, const AtomListView&) +{ + std::reverse(vec_.begin(), vec_.end()); + std::reverse(vec_str_.begin(), vec_str_.end()); + updateDsp(); +} + +void BaseDac::m_rotate(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, s)) + return; + + const auto n = size_t(int(vec_.size()) + lv[0].asT()) % vec_.size(); + std::rotate(vec_.begin(), vec_.begin() + n, vec_.end()); + std::rotate(vec_str_.begin(), vec_str_.begin() + n, vec_str_.end()); + updateDsp(); +} + +void BaseDac::m_side2circle(t_symbol* s, const AtomListView&) +{ + const auto N = vec_.size() - (vec_.size() & 0x1); + + for (size_t i = 0; i < N; i++) { + if (i < N / 2) + vec_[i] = (i * 2) + 1; + else + vec_[i] = N - (i - (N / 2)) * 2; + } + + updateDsp(); + syncAnnotations(); +} + +void BaseDac::updateDsp() +{ + canvas_update_dsp(); +} + +void BaseDac::syncAnnotations() +{ + const auto N = std::min(vec_.size(), vec_str_.size()); + for (size_t i = 0; i < N; i++) + vec_str_[i] = Descr(vec_[i]); +} + void setup_base_dac() { SoundExternalFactory obj("xdac~"); @@ -137,6 +215,11 @@ void setup_base_dac() obj.parsePosProps(false); obj.parseArgsMode(PdArgs::PARSE_COPY); + obj.addMethod("shuffle", &BaseDac::m_shuffle); + obj.addMethod("reverse", &BaseDac::m_reverse); + obj.addMethod("rotate", &BaseDac::m_rotate); + obj.addMethod("side2circle", &BaseDac::m_side2circle); + obj.setDescription("dac~ with channel ranges"); obj.addAuthor("Serge Poltavsky"); obj.setKeywords({ "base" }); diff --git a/ceammc/ext/src/base/base_dac.h b/ceammc/ext/src/base/base_dac.h index 5510d8096b..09a64e09e7 100644 --- a/ceammc/ext/src/base/base_dac.h +++ b/ceammc/ext/src/base/base_dac.h @@ -39,6 +39,15 @@ class BaseDac : public SoundExternal { void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override; const char* annotateInlet(size_t n) const override; + + void m_shuffle(t_symbol* s, const AtomListView&); + void m_reverse(t_symbol* s, const AtomListView&); + void m_rotate(t_symbol* s, const AtomListView& lv); + void m_side2circle(t_symbol* s, const AtomListView&); + +private: + void updateDsp(); + void syncAnnotations(); }; void setup_base_dac(); diff --git a/ceammc/ext/src/base/base_log.cpp b/ceammc/ext/src/base/base_log.cpp index 31ab4cf1bf..6709b9a6d0 100644 --- a/ceammc/ext/src/base/base_log.cpp +++ b/ceammc/ext/src/base/base_log.cpp @@ -121,12 +121,12 @@ void BaseLog::onSymbol(t_symbol* s) LOG_VALUE("symbol " << v); } -void BaseLog::onList(const AtomList& l) +void BaseLog::onList(const AtomListView& lv) { if (!active_->value()) return; - LOG_VALUE("list " << to_string(l)); + LOG_VALUE("list " << to_string(lv)); } void BaseLog::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/base/base_log.h b/ceammc/ext/src/base/base_log.h index 664f9768e0..67cbe942b9 100644 --- a/ceammc/ext/src/base/base_log.h +++ b/ceammc/ext/src/base/base_log.h @@ -40,7 +40,7 @@ class BaseLog : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& l) override; diff --git a/ceammc/ext/src/base/base_z_tilde.cpp b/ceammc/ext/src/base/base_z_tilde.cpp new file mode 100644 index 0000000000..9db32ea726 --- /dev/null +++ b/ceammc/ext/src/base/base_z_tilde.cpp @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "base_z_tilde.h" +#include "ceammc_factory.h" + +#include + +BaseZTilde::BaseZTilde(const PdArgs& args) + : SoundExternal(args) + , delay_(0) + , z_(nullptr) +{ + z_ = new IntProperty("@z", 1); + z_->checkClosedRange(0, BASE_Z_MAX_SIZE); + z_->setSuccessFn([this](Property*) { + if (!delay_.setDelay(z_->value())) + OBJ_ERR << "delay error"; + }); + z_->setArgIndex(0); + z_->setUnits(PropValueUnits::SAMP); + addProperty(z_); + + createInlet(); + createSignalOutlet(); +} + +void BaseZTilde::onInlet(size_t n, const AtomListView& lv) +{ + z_->set(lv); +} + +void BaseZTilde::processBlock(const t_sample** in, t_sample** out) +{ + const auto bs = blockSize(); + for (size_t i = 0; i < bs; i++) + out[0][i] = delay_.push(in[0][i]); +} + +void setup_base_z_tilde() +{ + SoundExternalFactory obj("z~"); + obj.setXletsInfo({ "signal: input", "int: delay in samples" }, { "signal: output" }); +} diff --git a/ceammc/ext/src/base/base_z_tilde.h b/ceammc/ext/src/base/base_z_tilde.h new file mode 100644 index 0000000000..806f7e5037 --- /dev/null +++ b/ceammc/ext/src/base/base_z_tilde.h @@ -0,0 +1,36 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef BASE_Z_TILDE_H +#define BASE_Z_TILDE_H + +#include "ceammc_dsp.h" +#include "ceammc_sound_external.h" +using namespace ceammc; + +constexpr uint32_t BASE_Z_MAX_SIZE = 512; + +class BaseZTilde : public SoundExternal { + dsp::StaticDelay delay_; + IntProperty* z_; + +public: + BaseZTilde(const PdArgs& args); + + void onInlet(size_t n, const AtomListView& lv) override; + void processBlock(const t_sample** in, t_sample** out) override; +}; + +void setup_base_z_tilde(); + +#endif // BASE_Z_TILDE_H diff --git a/ceammc/ext/src/base/expand_env.cpp b/ceammc/ext/src/base/expand_env.cpp index 725f9aae26..bbd49d3052 100644 --- a/ceammc/ext/src/base/expand_env.cpp +++ b/ceammc/ext/src/base/expand_env.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "expand_env.h" +#include "ceammc_containers.h" #include "ceammc_platform.h" static t_symbol* expandEnv(t_symbol* s) @@ -44,15 +45,21 @@ void ExpandEnv::onSymbol(t_symbol* s) symbolTo(0, expandEnv(s)); } -void ExpandEnv::onList(const AtomList& l) +void ExpandEnv::onList(const AtomListView& lv) { - listTo(0, l.mapSymbol(&expandEnv)); + SmallAtomList res; + res.reserve(lv.size()); + lv.mapSymbol(expandEnv, res); + listTo(0, res.view()); } -void ExpandEnv::onAny(t_symbol* sel, const AtomListView& v) +void ExpandEnv::onAny(t_symbol* sel, const AtomListView& lv) { - AtomList l = v; - anyTo(0, expand_any_->value() ? expandEnv(sel) : sel, l.mapSymbol(&expandEnv)); + SmallAtomList res; + res.reserve(lv.size()); + lv.mapSymbol(expandEnv, res); + + anyTo(0, expand_any_->value() ? expandEnv(sel) : sel, res.view()); } void setup_base_expand_env() @@ -61,7 +68,7 @@ void setup_base_expand_env() obj.setDescription("Substitute environment variables in data stream"); obj.addAuthor("Serge Poltavsky"); - obj.setKeywords({"expand_env", "test"}); + obj.setKeywords({ "expand_env", "test" }); obj.setCategory("flow"); obj.setSinceVersion(0, 1); } diff --git a/ceammc/ext/src/base/expand_env.h b/ceammc/ext/src/base/expand_env.h index 0549851fea..33a59fbfb7 100644 --- a/ceammc/ext/src/base/expand_env.h +++ b/ceammc/ext/src/base/expand_env.h @@ -27,8 +27,8 @@ class ExpandEnv : public BaseObject { void onBang() final; void onFloat(t_float v) final; void onSymbol(t_symbol* s) final; - void onList(const AtomList& l) final; - void onAny(t_symbol* sel, const AtomListView& l) final; + void onList(const AtomListView& lv) final; + void onAny(t_symbol* sel, const AtomListView& lv) final; }; void setup_base_expand_env(); diff --git a/ceammc/ext/src/base/function.cpp b/ceammc/ext/src/base/function.cpp index d3784ab5d7..cb67465634 100644 --- a/ceammc/ext/src/base/function.cpp +++ b/ceammc/ext/src/base/function.cpp @@ -96,10 +96,10 @@ void Function::onFloat(t_float f) floatTo(1, f); } -void Function::onList(const AtomList& l) +void Function::onList(const AtomListView& lv) { result_.clear(); - listTo(1, l); + listTo(1, lv); } void Function::onSymbol(t_symbol* s) @@ -118,7 +118,7 @@ const std::vector& Function::result() const return result_; } -void Function::proxy_any(InletProxy* x, t_symbol* s, const AtomListView& v) +void Function::proxy_any(int, t_symbol* s, const AtomListView& v) { if (s == &s_bang) { result_.push_back(Message::makeBang()); diff --git a/ceammc/ext/src/base/function.h b/ceammc/ext/src/base/function.h index ee581b24fb..287e74ebd8 100644 --- a/ceammc/ext/src/base/function.h +++ b/ceammc/ext/src/base/function.h @@ -30,12 +30,12 @@ class Function : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; std::vector& result(); const std::vector& result() const; - void proxy_any(InletProxy* x, t_symbol* s, const AtomListView& v); + void proxy_any(int, t_symbol* s, const AtomListView& v); public: static bool exists(t_symbol* name); diff --git a/ceammc/ext/src/base/function_call.cpp b/ceammc/ext/src/base/function_call.cpp index e3b0263c5f..f183aa05d9 100644 --- a/ceammc/ext/src/base/function_call.cpp +++ b/ceammc/ext/src/base/function_call.cpp @@ -44,13 +44,13 @@ void FunctionCall::onFloat(t_float f) outputResult(fn); } -void FunctionCall::onList(const AtomList& lst) +void FunctionCall::onList(const AtomListView& lv) { Function* fn = getFunc(); if (!fn) return; - fn->onList(lst); + fn->onList(lv); outputResult(fn); } diff --git a/ceammc/ext/src/base/function_call.h b/ceammc/ext/src/base/function_call.h index b7b33999c4..dbb61d446f 100644 --- a/ceammc/ext/src/base/function_call.h +++ b/ceammc/ext/src/base/function_call.h @@ -28,7 +28,7 @@ class FunctionCall : public BaseObject { void onBang() final; void onFloat(t_float f) final; void onSymbol(t_symbol* s) final; - void onList(const AtomList& lst) final; + void onList(const AtomListView& lv) final; private: Function* getFunc(); diff --git a/ceammc/ext/src/base/gain.cpp b/ceammc/ext/src/base/gain.cpp index 7fd24b882c..3a6cb288f5 100644 --- a/ceammc/ext/src/base/gain.cpp +++ b/ceammc/ext/src/base/gain.cpp @@ -12,10 +12,11 @@ * this file belongs to. *****************************************************************************/ #include "gain.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" -#include "ceammc_property_callback.h" #include "ceammc_signal.h" +#include "fmt/core.h" static t_float toDb(t_float amp) { @@ -41,9 +42,16 @@ Gain::Gain(const PdArgs& args) { const size_t NCHAN(positionalConstant(0)); + info_in_.assign(NCHAN, {}); + info_out_.assign(NCHAN, {}); + info_in_[0] = fmt::format("in\\[{}\\]", 0); + info_out_[0] = fmt::format("out\\[{}\\]", 0); for (size_t i = 1; i < NCHAN; i++) { createSignalInlet(); createSignalOutlet(); + + info_in_[i] = fmt::format("in\\[{}\\]", i); + info_out_[i] = fmt::format("out\\[{}\\]", i); } createInlet(); @@ -61,21 +69,21 @@ Gain::Gain(const PdArgs& args) addProperty(smooth_); } -void Gain::onInlet(size_t n, const AtomListView& lst) +void Gain::onInlet(size_t n, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT)) + if (!checkArgs(lv, ARG_FLOAT)) return; - t_float v = lst[0].asFloat(); + t_float v = lv[0].asFloat(); for (size_t i = 0; i < gain_.size(); i++) gain_[i].setTargetValue(v); } -void Gain::onList(const AtomList& lst) +void Gain::onList(const AtomListView& lv) { - const size_t N = std::min(lst.size(), gain_.size()); + const size_t N = std::min(lv.size(), gain_.size()); for (size_t i = 0; i < N; i++) - gain_[i].setTargetValue(lst[i].asFloat()); + gain_[i].setTargetValue(lv[i].asFloat()); } void Gain::processBlock(const t_sample** in, t_sample** out) @@ -115,7 +123,9 @@ void Gain::setupDSP(t_signal** sp) AtomList Gain::propDb() const { - return propGain().mapFloat(toDb); + AtomList res; + propGain().view().mapFloat(toDb, res); + return res; } AtomList Gain::propGain() const @@ -129,27 +139,29 @@ AtomList Gain::propGain() const return res; } -void Gain::propSetDb(const AtomList& lst) +void Gain::propSetDb(const AtomListView& lv) { - propSetGain(lst.mapFloat(fromDb)); + SmallAtomList res; + lv.mapFloat(fromDb, res); + propSetGain(res.view()); } -void Gain::propSetGain(const AtomList& lst) +void Gain::propSetGain(const AtomListView& lv) { - const size_t N = std::min(lst.size(), gain_.size()); + const size_t N = std::min(lv.size(), gain_.size()); for (size_t i = 0; i < N; i++) { - t_float v = std::max(0, lst[i].asFloat()); + t_float v = std::max(0, lv[i].asFloat()); gain_[i].setTargetValue(v); } } -void Gain::m_plus(t_symbol* s, const AtomListView& lst) +void Gain::m_plus(t_symbol* s, const AtomListView& lv) { - const size_t N = std::min(gain_.size(), lst.size()); + const size_t N = std::min(gain_.size(), lv.size()); for (size_t i = 0; i < N; i++) { - t_float new_gain = gain_[i].target() + lst[i].asFloat(); + t_float new_gain = gain_[i].target() + lv[i].asFloat(); gain_[i].setTargetValue(std::max(0, new_gain)); } } @@ -159,53 +171,56 @@ static Atom negate(const Atom& a) return a.isFloat() ? -a.asFloat() : a; } -void Gain::m_minus(t_symbol* s, const AtomListView& lst) +void Gain::m_minus(t_symbol* s, const AtomListView& lv) { - auto neg = AtomList(lst).map(negate); - m_plus(s, neg.view()); + SmallAtomList res; + lv.map(negate, res); + m_plus(s, res.view()); } -void Gain::m_plusDb(t_symbol* s, const AtomListView& lst) +void Gain::m_plusDb(t_symbol* s, const AtomListView& lv) { - const size_t N = std::min(gain_.size(), lst.size()); + const size_t N = std::min(gain_.size(), lv.size()); for (size_t i = 0; i < N; i++) { - t_float new_gain = gain_[i].target() * fromDb(lst[i].asFloat()); + t_float new_gain = gain_[i].target() * fromDb(lv[i].asFloat()); gain_[i].setTargetValue(std::max(0, new_gain)); } } -void Gain::m_minusDb(t_symbol* s, const AtomListView& lst) +void Gain::m_minusDb(t_symbol* s, const AtomListView& lv) { - auto neg = AtomList(lst).map(negate); - m_plusDb(s, neg.view()); + SmallAtomList res; + lv.map(negate, res); + m_plusDb(s, res.view()); } -void Gain::m_plusAll(t_symbol* s, const AtomListView& lst) +void Gain::m_plusAll(t_symbol* s, const AtomListView& lv) { - t_float v = lst.floatAt(0, 0); + t_float v = lv.floatAt(0, 0); for (size_t i = 0; i < gain_.size(); i++) { t_float new_gain = gain_[i].target() + v; gain_[i].setTargetValue(std::max(0, new_gain)); } } -void Gain::m_minusAll(t_symbol* s, const AtomListView& lst) +void Gain::m_minusAll(t_symbol* s, const AtomListView& lv) { - auto neg = AtomList(lst).map(negate); - m_plusAll(s, neg.view()); + SmallAtomList res; + lv.map(negate, res); + m_plusAll(s, res.view()); } -void Gain::m_set(t_symbol* s, const AtomListView& lst) +void Gain::m_set(t_symbol* s, const AtomListView& lv) { - t_float v = lst.floatAt(0, 0); + t_float v = lv.floatAt(0, 0); for (size_t i = 0; i < gain_.size(); i++) gain_[i].setTargetValue(std::max(0, v)); } -void Gain::m_setDb(t_symbol* s, const AtomListView& lst) +void Gain::m_setDb(t_symbol* s, const AtomListView& lv) { - t_float v = lst.floatAt(0, 0); + t_float v = lv.floatAt(0, 0); for (size_t i = 0; i < gain_.size(); i++) gain_[i].setTargetValue(std::max(0, fromDb(v))); } @@ -216,6 +231,22 @@ void Gain::allocateOutBlocks() outs_.resize(N, 0); } +const char* Gain::annotateInlet(size_t n) const +{ + if (n < info_in_.size()) + return info_in_[n].c_str(); + else + return "float: set amplitue for all sources"; +} + +const char* Gain::annotateOutlet(size_t n) const +{ + if (n < info_out_.size()) + return info_out_[n].c_str(); + else + return "float: set amplitue for all sources"; +} + void setup_gain_tilde() { SoundExternalFactory obj("gain~"); diff --git a/ceammc/ext/src/base/gain.h b/ceammc/ext/src/base/gain.h index 7da873d1e2..c58bb7f2a8 100644 --- a/ceammc/ext/src/base/gain.h +++ b/ceammc/ext/src/base/gain.h @@ -27,30 +27,35 @@ class Gain : public SoundExternal { OutBlocks outs_; size_t prev_bs_; // previous block size FloatProperty* smooth_; + std::vector info_in_; + std::vector info_out_; public: Gain(const PdArgs& args); - void onInlet(size_t n, const AtomListView& lst) override; - void onList(const AtomList& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; + void onList(const AtomListView& lv) override; void processBlock(const t_sample** in, t_sample** out) override; void setupDSP(t_signal** sp) override; AtomList propDb() const; AtomList propGain() const; - void propSetDb(const AtomList& lst); - void propSetGain(const AtomList& lst); - - void m_plus(t_symbol* s, const AtomListView& lst); - void m_minus(t_symbol* s, const AtomListView& lst); - void m_plusDb(t_symbol* s, const AtomListView& lst); - void m_minusDb(t_symbol* s, const AtomListView& lst); - void m_plusAll(t_symbol* s, const AtomListView& lst); - void m_minusAll(t_symbol* s, const AtomListView& lst); - - void m_set(t_symbol* s, const AtomListView& lst); - void m_setDb(t_symbol* s, const AtomListView& lst); + void propSetDb(const AtomListView& lv); + void propSetGain(const AtomListView& lv); + + void m_plus(t_symbol* s, const AtomListView& lv); + void m_minus(t_symbol* s, const AtomListView& lv); + void m_plusDb(t_symbol* s, const AtomListView& lv); + void m_minusDb(t_symbol* s, const AtomListView& lv); + void m_plusAll(t_symbol* s, const AtomListView& lv); + void m_minusAll(t_symbol* s, const AtomListView& lv); + + void m_set(t_symbol* s, const AtomListView& lv); + void m_setDb(t_symbol* s, const AtomListView& lv); + + const char* annotateInlet(size_t n) const override; + const char* annotateOutlet(size_t n) const override; private: void allocateOutBlocks(); diff --git a/ceammc/ext/src/base/is_any.cpp b/ceammc/ext/src/base/is_any.cpp index 266e8fa482..2bf859aa5f 100644 --- a/ceammc/ext/src/base/is_any.cpp +++ b/ceammc/ext/src/base/is_any.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_any_class; struct t_is_any { diff --git a/ceammc/ext/src/base/is_bang.cpp b/ceammc/ext/src/base/is_bang.cpp index 32b4debf14..75e450cee0 100644 --- a/ceammc/ext/src/base/is_bang.cpp +++ b/ceammc/ext/src/base/is_bang.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_bang_class; struct t_is_bang { diff --git a/ceammc/ext/src/base/is_data.cpp b/ceammc/ext/src/base/is_data.cpp index 1774715ce7..664a5a8d79 100644 --- a/ceammc/ext/src/base/is_data.cpp +++ b/ceammc/ext/src/base/is_data.cpp @@ -22,10 +22,10 @@ void IsData::onSymbol(t_symbol* s) boolTo(0, false); } -void IsData::onList(const AtomList& lst) +void IsData::onList(const AtomListView& lv) { - if (in_list_->value() && lst.findPos(isData) >= 0) { - listTo(1, lst); + if (in_list_->value() && lv.anyOf(isData)) { + listTo(1, lv); boolTo(0, true); } else boolTo(0, false); @@ -42,7 +42,7 @@ void IsData::onData(const Atom& d) boolTo(0, true); } -bool IsData::processAnyProps(t_symbol* sel, const AtomListView& lst) +bool IsData::processAnyProps(t_symbol* sel, const AtomListView&) { return false; } diff --git a/ceammc/ext/src/base/is_data.h b/ceammc/ext/src/base/is_data.h index f0269ed076..6a59bee68a 100644 --- a/ceammc/ext/src/base/is_data.h +++ b/ceammc/ext/src/base/is_data.h @@ -26,11 +26,11 @@ class IsData : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView&) override; void onData(const Atom& d) override; - bool processAnyProps(t_symbol* sel, const AtomListView& lst) final; + bool processAnyProps(t_symbol* sel, const AtomListView&) final; }; void setup_is_data(); diff --git a/ceammc/ext/src/base/is_even.cpp b/ceammc/ext/src/base/is_even.cpp index ae9d8f6944..351d5ecfc6 100644 --- a/ceammc/ext/src/base/is_even.cpp +++ b/ceammc/ext/src/base/is_even.cpp @@ -1,4 +1,4 @@ -#include +#include "m_pd.h" t_class* is_even_class; struct t_is_even { diff --git a/ceammc/ext/src/base/is_float.cpp b/ceammc/ext/src/base/is_float.cpp index 4c245b5dba..ed4992fef5 100644 --- a/ceammc/ext/src/base/is_float.cpp +++ b/ceammc/ext/src/base/is_float.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_float_class; struct t_is_float { diff --git a/ceammc/ext/src/base/is_list.cpp b/ceammc/ext/src/base/is_list.cpp index c708f2bee1..86be6092d4 100644 --- a/ceammc/ext/src/base/is_list.cpp +++ b/ceammc/ext/src/base/is_list.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_list_class; struct t_is_list { diff --git a/ceammc/ext/src/base/is_odd.cpp b/ceammc/ext/src/base/is_odd.cpp index de88e184d6..87bae631b0 100644 --- a/ceammc/ext/src/base/is_odd.cpp +++ b/ceammc/ext/src/base/is_odd.cpp @@ -1,6 +1,6 @@ -#include "ceammc.h" -#include -#include +#include "m_pd.h" + +#include t_class* is_odd_class; struct t_is_odd { diff --git a/ceammc/ext/src/base/is_pointer.cpp b/ceammc/ext/src/base/is_pointer.cpp index 5eeca83ab0..5e58673ff7 100644 --- a/ceammc/ext/src/base/is_pointer.cpp +++ b/ceammc/ext/src/base/is_pointer.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_pointer_class; struct t_is_pointer { diff --git a/ceammc/ext/src/base/is_prop.cpp b/ceammc/ext/src/base/is_prop.cpp new file mode 100644 index 0000000000..591ac8586e --- /dev/null +++ b/ceammc/ext/src/base/is_prop.cpp @@ -0,0 +1,69 @@ +#include "m_pd.h" + +static t_class* is_prop_class; +struct t_is_prop { + t_object x_obj; + t_outlet* out_value; +}; + +static void is_prop_anything(t_is_prop* x, t_symbol* s, int argc, t_atom* argv) +{ + auto ok = s->s_name[0] == '@'; + if (ok) + outlet_anything(x->out_value, s, argc, argv); + + outlet_float(x->x_obj.te_outlet, ok); +} + +static void is_prop_bang(t_is_prop* x) +{ + outlet_float(x->x_obj.te_outlet, 0); +} + +static void is_prop_float(t_is_prop* x, t_floatarg /*f*/) +{ + outlet_float(x->x_obj.te_outlet, 0); +} + +static void is_prop_list(t_is_prop* x, t_symbol* /*s*/, int /*argc*/, t_atom* /*argv*/) +{ + outlet_float(x->x_obj.te_outlet, 0); +} + +static void is_prop_pointer(t_is_prop* x, t_gpointer* /*pt*/) +{ + outlet_float(x->x_obj.te_outlet, 0); +} + +static void is_prop_symbol(t_is_prop* x, t_symbol* /*s*/) +{ + outlet_float(x->x_obj.te_outlet, 0); +} + +static void* is_prop_new() +{ + t_is_prop* x = reinterpret_cast(pd_new(is_prop_class)); + outlet_new(&x->x_obj, &s_float); + x->out_value = outlet_new(&x->x_obj, &s_anything); + return static_cast(x); +} + +static void is_prop_free(t_is_prop* x) +{ + outlet_free(x->out_value); +} + +extern "C" void is_prop_setup() +{ + is_prop_class = class_new(gensym("is_prop"), + reinterpret_cast(is_prop_new), + reinterpret_cast(is_prop_free), + sizeof(t_is_prop), CLASS_DEFAULT, A_NULL); + + class_addanything(is_prop_class, reinterpret_cast(is_prop_anything)); + class_addbang(is_prop_class, reinterpret_cast(is_prop_bang)); + class_doaddfloat(is_prop_class, reinterpret_cast(is_prop_float)); + class_addlist(is_prop_class, reinterpret_cast(is_prop_list)); + class_addpointer(is_prop_class, reinterpret_cast(is_prop_pointer)); + class_addsymbol(is_prop_class, reinterpret_cast(is_prop_symbol)); +} diff --git a/ceammc/ext/src/base/is_symbol.cpp b/ceammc/ext/src/base/is_symbol.cpp index a76207b364..e5ed42f83b 100644 --- a/ceammc/ext/src/base/is_symbol.cpp +++ b/ceammc/ext/src/base/is_symbol.cpp @@ -1,5 +1,4 @@ -#include "ceammc.h" -#include +#include "m_pd.h" t_class* is_symbol_class; struct t_is_symbol { diff --git a/ceammc/ext/src/base/matrix.cpp b/ceammc/ext/src/base/matrix.cpp index 588859d9ff..604d9fdf1e 100644 --- a/ceammc/ext/src/base/matrix.cpp +++ b/ceammc/ext/src/base/matrix.cpp @@ -79,27 +79,27 @@ void Matrix::setupDSP(t_signal** in) b.resize(BS, 0); } -void Matrix::m_cell(t_symbol* s, const AtomListView& lst) +void Matrix::m_cell(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_NATURAL, ARG_NATURAL, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_NATURAL, ARG_NATURAL, s)) return; - int cell_row = lst.intAt(0, -1); - int cell_col = lst.intAt(1, -1); - int cell_val = lst.intAt(2, -1); + int cell_row = lv.intAt(0, -1); + int cell_col = lv.intAt(1, -1); + int cell_val = lv.intAt(2, -1); if (cell_row < 0 || cell_row >= nouts_) { - OBJ_ERR << "invalid cell row: " << lst[0]; + OBJ_ERR << "invalid cell row: " << lv[0]; return; } if (cell_col < 0 || cell_col >= nins_) { - OBJ_ERR << "invalid cell column: " << lst[1]; + OBJ_ERR << "invalid cell column: " << lv[1]; return; } if (cell_val < 0) { - OBJ_ERR << "invalid cell value: " << lst[2]; + OBJ_ERR << "invalid cell value: " << lv[2]; return; } diff --git a/ceammc/ext/src/base/matrix.h b/ceammc/ext/src/base/matrix.h index 6f783399f0..8fae0fac69 100644 --- a/ceammc/ext/src/base/matrix.h +++ b/ceammc/ext/src/base/matrix.h @@ -21,9 +21,9 @@ using namespace ceammc; -typedef SmoothLinT SmoothLin; -typedef boost::multi_array SmoothMatrix; -typedef std::vector DSPBlock; +using SmoothLin = SmoothLinT; +using SmoothMatrix = boost::multi_array; +using DSPBlock = std::vector; class Matrix : public SoundExternal { const size_t nouts_; @@ -37,7 +37,7 @@ class Matrix : public SoundExternal { void processBlock(const t_sample** in, t_sample** out) override; void setupDSP(t_signal** in) override; - void m_cell(t_symbol* s, const AtomListView& lst); + void m_cell(t_symbol* s, const AtomListView& lv); }; void setup_base_matrix(); diff --git a/ceammc/ext/src/base/metro_pattern.cpp b/ceammc/ext/src/base/metro_pattern.cpp index 05d88c6118..8032052712 100644 --- a/ceammc/ext/src/base/metro_pattern.cpp +++ b/ceammc/ext/src/base/metro_pattern.cpp @@ -25,7 +25,7 @@ MetroPattern::MetroPattern(const PdArgs& args) createCbListProperty( "@pattern", [this]() -> AtomList { return pattern_; }, - [this](const AtomList& lst) -> bool { return p_set_pattern(lst); }) + [this](const AtomListView& lv) -> bool { return p_set_pattern(lv); }) ->setArgIndex(0); } @@ -38,10 +38,10 @@ void MetroPattern::onFloat(t_float on) clock_.unset(); } -bool MetroPattern::p_set_pattern(const AtomList& l) +bool MetroPattern::p_set_pattern(const AtomListView& lv) { - if (l.empty() || (!l.allOf(validTime))) { - OBJ_ERR << "invalid pattern: " << l; + if (lv.empty() || (!lv.allOf(validTime))) { + OBJ_ERR << "invalid pattern: " << lv; return false; } @@ -49,15 +49,15 @@ bool MetroPattern::p_set_pattern(const AtomList& l) // defer pattern update sync_update_ = true; // save to pattern to temp list - new_pattern_ = l; + new_pattern_ = lv; // only set pattern if empty main pattern list if (pattern_.empty()) - pattern_ = l; + pattern_ = lv; } else { - pattern_ = l; + pattern_ = lv; // keep in sync - to handle @sync property change while running - new_pattern_ = l; + new_pattern_ = lv; } return true; diff --git a/ceammc/ext/src/base/metro_pattern.h b/ceammc/ext/src/base/metro_pattern.h index d517b031aa..dc0b3fd284 100644 --- a/ceammc/ext/src/base/metro_pattern.h +++ b/ceammc/ext/src/base/metro_pattern.h @@ -18,7 +18,7 @@ class MetroPattern : public BaseObject { MetroPattern(const PdArgs& args); void onFloat(t_float on) override; - bool p_set_pattern(const AtomList& l); + bool p_set_pattern(const AtomListView& lv); public: void tick(); diff --git a/ceammc/ext/src/base/metro_random.h b/ceammc/ext/src/base/metro_random.h index 5e2be29d92..0091ecc969 100644 --- a/ceammc/ext/src/base/metro_random.h +++ b/ceammc/ext/src/base/metro_random.h @@ -27,7 +27,7 @@ class MetroRandom : public BaseObject { MetroRandom(const PdArgs& args); void onFloat(t_float f) final; - void onInlet(size_t n, const AtomListView& lst) final; + void onInlet(size_t n, const AtomListView& lv) final; private: void tick(); diff --git a/ceammc/ext/src/base/metro_seq.cpp b/ceammc/ext/src/base/metro_seq.cpp index d7a92ee4b3..3d5db8cbd6 100644 --- a/ceammc/ext/src/base/metro_seq.cpp +++ b/ceammc/ext/src/base/metro_seq.cpp @@ -18,6 +18,7 @@ MetroSeq::MetroSeq(const PdArgs& a) interval_ = new FloatProperty("@interval", 0); interval_->setArgIndex(0); interval_->setUnitsMs(); + interval_->checkMinEq(0); addProperty(interval_); createCbIntProperty( @@ -36,11 +37,12 @@ MetroSeq::MetroSeq(const PdArgs& a) createCbListProperty( "@pattern", [this]() -> AtomList { return pattern_; }, - [this](const AtomList& l) { - if (l.empty()) + [this](const AtomListView& lv) { + if (lv.empty()) return false; else { - pattern_ = l.map(toDigit); + pattern_.clear(); + lv.map(toDigit, pattern_); return true; } }) diff --git a/ceammc/ext/src/base/mix.cpp b/ceammc/ext/src/base/mix.cpp index 226f28dd14..87274e65d6 100644 --- a/ceammc/ext/src/base/mix.cpp +++ b/ceammc/ext/src/base/mix.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "mix.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "ceammc_property_callback.h" @@ -62,23 +63,23 @@ Mix::Mix(const PdArgs& args) createCbListProperty( "@db", [this]() { return propDb(); }, - [this](const AtomList& l) { setPropDb(l); return true; }) + [this](const AtomListView& lv) { setPropDb(lv); return true; }) ->setUnitsDb(); createCbProperty("@value", &Mix::propValue, &Mix::setPropValue); createCbListProperty( "@mute", [this]() { return propMute(); }, - [this](const AtomList& l) { setPropMute(l); return true; }); + [this](const AtomListView& lv) { setPropMute(lv); return true; }); createCbProperty("@solo", &Mix::propSolo, &Mix::setPropSolo); } -void Mix::onList(const AtomList& lst) +void Mix::onList(const AtomListView& lv) { - const size_t N = std::min(lst.size(), gain_.size()); + const size_t N = std::min(lv.size(), gain_.size()); for (size_t i = 0; i < N; i++) - gain_[i].setTargetValue(std::max(0, lst[i].asFloat())); + gain_[i].setTargetValue(std::max(0, lv[i].asFloat())); } void Mix::setupDSP(t_signal** in) @@ -124,19 +125,24 @@ AtomList Mix::propValue() const return res; } -void Mix::setPropValue(const AtomList& lst) +void Mix::setPropValue(const AtomListView& lv) { - onList(lst); + onList(lv); } AtomList Mix::propDb() const { - return propValue().mapFloat(toDb); + AtomList res; + propValue().view().mapFloat(toDb, res); + return res; } -void Mix::setPropDb(const AtomList& lst) +void Mix::setPropDb(const AtomListView& lv) { - setPropValue(lst.mapFloat(fromDb)); + SmallAtomList res; + res.reserve(lv.size()); + lv.mapFloat(fromDb, res); + setPropValue(res.view()); } AtomList Mix::propMute() const @@ -150,10 +156,10 @@ AtomList Mix::propMute() const return res; } -void Mix::setPropMute(const AtomList& lst) +void Mix::setPropMute(const AtomListView& lv) { for (size_t i = 0; i < mute_.size(); i++) { - int v = int(lst.floatAt(i, 0)) != 0 ? 1 : 0; + int v = int(lv.floatAt(i, 0)) != 0 ? 1 : 0; mute_[i].setTargetValue(v); } } @@ -169,12 +175,12 @@ AtomList Mix::propSolo() const return res; } -void Mix::setPropSolo(const AtomList& lst) +void Mix::setPropSolo(const AtomListView& lv) { is_solo_ = false; for (size_t i = 0; i < solo_values_.size(); i++) { - int v = (int(lst.floatAt(i, 0)) == 0) ? 0 : 1; + int v = (int(lv.floatAt(i, 0)) == 0) ? 0 : 1; solo_values_[i] = v; } @@ -191,16 +197,16 @@ void Mix::setPropSolo(const AtomList& lst) } } -void Mix::m_mute(t_symbol* s, const AtomListView& lst) +void Mix::m_mute(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_BOOL, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_BOOL, s)) return; - int idx = lst.intAt(0, -1); - int v = lst.intAt(1, -1); + int idx = lv.intAt(0, -1); + int v = lv.intAt(1, -1); if (idx < 0 || idx >= n_) { - OBJ_ERR << "invalid input index: " << lst[0]; + OBJ_ERR << "invalid input index: " << lv[0]; return; } @@ -209,19 +215,19 @@ void Mix::m_mute(t_symbol* s, const AtomListView& lst) else if (v == 1) mute_[idx].setTargetValue(1); else - OBJ_ERR << "invalid mute value: " << lst[1]; + OBJ_ERR << "invalid mute value: " << lv[1]; } -void Mix::m_solo(t_symbol* s, const AtomListView& lst) +void Mix::m_solo(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_BOOL, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_BOOL, s)) return; - int idx = lst.intAt(0, -1); - int v = lst.intAt(1, -1); + int idx = lv.intAt(0, -1); + int v = lv.intAt(1, -1); if (idx < 0 || idx >= n_ || idx >= solo_.size() || idx >= solo_values_.size()) { - OBJ_ERR << "invalid input index: " << lst[0]; + OBJ_ERR << "invalid input index: " << lv[0]; return; } @@ -232,7 +238,7 @@ void Mix::m_solo(t_symbol* s, const AtomListView& lst) solo_[idx].setTargetValue(1); solo_values_[idx] = 1; } else { - OBJ_ERR << "invalid mute value: " << lst[1]; + OBJ_ERR << "invalid mute value: " << lv[1]; return; } diff --git a/ceammc/ext/src/base/mix.h b/ceammc/ext/src/base/mix.h index 93ae27bfc4..aab3b73c5a 100644 --- a/ceammc/ext/src/base/mix.h +++ b/ceammc/ext/src/base/mix.h @@ -32,21 +32,21 @@ class Mix : public SoundExternal { public: Mix(const PdArgs& args); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void processBlock(const t_sample** in, t_sample** out) override; void setupDSP(t_signal** in) override; AtomList propValue() const; - void setPropValue(const AtomList& lst); + void setPropValue(const AtomListView& lv); AtomList propDb() const; - void setPropDb(const AtomList& lst); + void setPropDb(const AtomListView& lv); AtomList propMute() const; - void setPropMute(const AtomList& lst); + void setPropMute(const AtomListView& lv); AtomList propSolo() const; - void setPropSolo(const AtomList& lst); + void setPropSolo(const AtomListView& lv); - void m_mute(t_symbol* s, const AtomListView& lst); - void m_solo(t_symbol* s, const AtomListView& lst); + void m_mute(t_symbol* s, const AtomListView& lv); + void m_solo(t_symbol* s, const AtomListView& lv); }; void setup_base_mix(); diff --git a/ceammc/ext/src/base/mod_base.cpp b/ceammc/ext/src/base/mod_base.cpp index 01139a08ed..cc2b80622a 100644 --- a/ceammc/ext/src/base/mod_base.cpp +++ b/ceammc/ext/src/base/mod_base.cpp @@ -37,6 +37,7 @@ extern "C" void is_float_setup(); extern "C" void is_list_setup(); extern "C" void is_odd_setup(); extern "C" void is_pointer_setup(); +extern "C" void is_prop_setup(); extern "C" void is_symbol_setup(); extern "C" void setup_test0x2edata(); @@ -45,10 +46,12 @@ extern "C" void setup_test0x2eexpect(); void setup_base_canvas_dir(); void setup_base_canvas_name(); void setup_base_canvas_path(); +void setup_base_clone(); void setup_base_expand_env(); void setup_base_msg(); void setup_base_replace(); void setup_base_sync(); +void setup_base_z_tilde(); void setup_is_data(); void setup_is_file(); void setup_load_expr(); @@ -71,11 +74,13 @@ void ceammc_base_setup() is_list_setup(); is_odd_setup(); is_pointer_setup(); + is_prop_setup(); is_symbol_setup(); setup_base_canvas_dir(); setup_base_canvas_name(); setup_base_canvas_path(); + setup_base_clone(); setup_base_dac(); setup_base_expand_env(); setup_base_function(); @@ -90,6 +95,7 @@ void ceammc_base_setup() setup_base_sync(); setup_base_xfade2_tilde(); setup_base_xfade_tilde(); + setup_base_z_tilde(); setup_canvas_current(); setup_canvas_top(); setup_ceammc_search(); diff --git a/ceammc/ext/src/base/msg.cpp b/ceammc/ext/src/base/msg.cpp index 51a2b90292..7d440f9b53 100644 --- a/ceammc/ext/src/base/msg.cpp +++ b/ceammc/ext/src/base/msg.cpp @@ -29,35 +29,35 @@ void Msg::onSymbol(t_symbol* s) output(); } -void Msg::onList(const AtomList& l) +void Msg::onList(const AtomListView& lv) { data_ = prefix_; - data_.append(l); + data_.append(lv); output(); } -void Msg::onAny(t_symbol* sel, const AtomListView& l) +void Msg::onAny(t_symbol* sel, const AtomListView& lv) { data_ = prefix_; data_.append(sel); - data_.append(l); + data_.append(lv); output(); } -void Msg::onInlet(size_t n, const AtomListView& l) +void Msg::onInlet(size_t n, const AtomListView& lv) { if (n != 1) return; - setMethod(l); + setMethod(lv); } -void Msg::setMethod(const AtomList& l) +void Msg::setMethod(const AtomListView& lv) { - if (l.empty()) + if (lv.empty()) return; - prefix_ = l; + prefix_ = lv; } void Msg::output() diff --git a/ceammc/ext/src/base/msg.h b/ceammc/ext/src/base/msg.h index 14c11e6f30..a1cbdb0dc3 100644 --- a/ceammc/ext/src/base/msg.h +++ b/ceammc/ext/src/base/msg.h @@ -29,12 +29,12 @@ class Msg : public BaseObject { void onBang() final; void onFloat(t_float v) final; void onSymbol(t_symbol* s) final; - void onList(const AtomList& l) final; + void onList(const AtomListView& lv) final; void onAny(t_symbol* sel, const AtomListView& l) final; - void onInlet(size_t n, const AtomListView& l) final; + void onInlet(size_t n, const AtomListView& lv) final; private: - void setMethod(const AtomList& l); + void setMethod(const AtomListView& lv); void output(); }; diff --git a/ceammc/ext/src/base/msg_after.cpp b/ceammc/ext/src/base/msg_after.cpp index f1665b9af5..31aace3da2 100644 --- a/ceammc/ext/src/base/msg_after.cpp +++ b/ceammc/ext/src/base/msg_after.cpp @@ -47,9 +47,9 @@ void MessageAfter::onSymbol(t_symbol* s) run(); } -void MessageAfter::onList(const AtomList& lst) +void MessageAfter::onList(const AtomListView& lv) { - listTo(0, lst); + listTo(0, lv); run(); } @@ -69,7 +69,7 @@ void MessageAfter::parseProperties() { } -bool MessageAfter::processAnyProps(t_symbol* sel, const AtomListView& lst) +bool MessageAfter::processAnyProps(t_symbol* sel, const AtomListView&) { return false; } diff --git a/ceammc/ext/src/base/msg_after.h b/ceammc/ext/src/base/msg_after.h index a310852355..0be720f8de 100644 --- a/ceammc/ext/src/base/msg_after.h +++ b/ceammc/ext/src/base/msg_after.h @@ -30,12 +30,12 @@ class MessageAfter : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void dump() const override; void parseProperties() override; - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override; + bool processAnyProps(t_symbol* sel, const AtomListView&) override; private: void run(); diff --git a/ceammc/ext/src/base/msg_sched.cpp b/ceammc/ext/src/base/msg_sched.cpp index 2735e9c0b4..1934c7316b 100644 --- a/ceammc/ext/src/base/msg_sched.cpp +++ b/ceammc/ext/src/base/msg_sched.cpp @@ -26,12 +26,13 @@ MsgSched::MsgSched(const PdArgs& args) createOutlet(); } -void MsgSched::onList(const AtomList& lst) +void MsgSched::onList(const AtomListView& lv) { - if (lst.size() > 0 && lst[0].isFloat()) { - const auto del_ms = lst[0].asT(); + if (lv.size() > 0 && lv[0].isFloat()) { + const auto del_ms = lv[0].asT(); if (del_ms >= 0) { + AtomList lst(lv); queue_.emplace_back([this, lst]() { output(lst.view(1)); cleanup_.delay(0); // cleanup on next round to prevent self-destruction @@ -39,13 +40,13 @@ void MsgSched::onList(const AtomList& lst) queue_.back().delay(del_ms); } else - output(lst.view(1)); + output(lv.subView(1)); } else - listTo(0, lst); + listTo(0, lv); } -void MsgSched::proxy_bang() +void MsgSched::proxy_bang(int) { queue_.clear(); } diff --git a/ceammc/ext/src/base/msg_sched.h b/ceammc/ext/src/base/msg_sched.h index fd5275c293..af4eaabd63 100644 --- a/ceammc/ext/src/base/msg_sched.h +++ b/ceammc/ext/src/base/msg_sched.h @@ -37,10 +37,10 @@ class MsgSched : public BaseObject { void onBang() override { bangTo(0); } void onSymbol(t_symbol* s) override { symbolTo(0, s); } void onFloat(t_float f) override { floatTo(0, f); } - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override { anyTo(0, s, lv); } - void proxy_bang(); + void proxy_bang(int); void proxy_flush(const AtomListView& lv); void proxy_reset(const AtomListView& lv); diff --git a/ceammc/ext/src/base/nsig_tilde.cpp b/ceammc/ext/src/base/nsig_tilde.cpp index d8ef9d23e8..7344a1c5aa 100644 --- a/ceammc/ext/src/base/nsig_tilde.cpp +++ b/ceammc/ext/src/base/nsig_tilde.cpp @@ -38,14 +38,14 @@ NSigTilde::NSigTilde(const PdArgs& args) res.append(Atom(f)); return res; }, - [this](const AtomList& lst) -> bool { + [this](const AtomListView& lv) -> bool { updateSamples(); - if (lst.size() > samp_.size()) - OBJ_ERR << "extra list values are ignored: " << lst.slice(samp_.size()); + if (lv.size() > samp_.size()) + OBJ_ERR << "extra list values are ignored: " << lv.subView(samp_.size()); - const size_t N = std::min(samp_.size(), lst.size()); + const size_t N = std::min(samp_.size(), lv.size()); for (size_t i = 0; i < N; i++) - samp_[i] = lst[i].asFloat(); + samp_[i] = lv[i].asFloat(); return true; }); @@ -70,15 +70,15 @@ void NSigTilde::onFloat(t_float v) samp_[0] = v; } -void NSigTilde::onInlet(size_t n, const AtomListView& l) +void NSigTilde::onInlet(size_t n, const AtomListView& lv) { updateSamples(); - samp_[n] = l.floatAt(0, 0); + samp_[n] = lv.floatAt(0, 0); } -void NSigTilde::onList(const AtomList& lst) +void NSigTilde::onList(const AtomListView& lv) { - setProperty("@values", lst); + setProperty("@values", lv); } void NSigTilde::processBlock(const t_sample** in, t_sample** out) diff --git a/ceammc/ext/src/base/nsig_tilde.h b/ceammc/ext/src/base/nsig_tilde.h index 15385c94e3..2acc781aa5 100644 --- a/ceammc/ext/src/base/nsig_tilde.h +++ b/ceammc/ext/src/base/nsig_tilde.h @@ -27,7 +27,7 @@ class NSigTilde : public SoundExternal { void initDone() override; void onFloat(t_float v) override; void onInlet(size_t n, const AtomListView& l) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void processBlock(const t_sample** in, t_sample** out) override; diff --git a/ceammc/ext/src/base/patch_props.h b/ceammc/ext/src/base/patch_props.h index 6636fb37f0..ca67957358 100644 --- a/ceammc/ext/src/base/patch_props.h +++ b/ceammc/ext/src/base/patch_props.h @@ -20,7 +20,7 @@ using namespace ceammc; class PatchProps : public BaseObject { public: PatchProps(const PdArgs& args); - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override; + bool processAnyProps(t_symbol* sel, const AtomListView& lv) override; void onBang() override; void onAny(t_symbol* s, const AtomListView& l) override; diff --git a/ceammc/ext/src/base/prop.cpp b/ceammc/ext/src/base/prop.cpp index 45d7c8c1e4..b37bd7e713 100644 --- a/ceammc/ext/src/base/prop.cpp +++ b/ceammc/ext/src/base/prop.cpp @@ -13,23 +13,27 @@ *****************************************************************************/ #include "prop.h" #include "ceammc_canvas.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" +#include "fmt/core.h" extern "C" { #include "g_canvas.h" } -static t_symbol* SYM_TRUE; -static t_symbol* SYM_FALSE; +namespace { -static t_symbol* makePropName(const AtomList& l) -{ - static t_symbol* SYM_INVALID = gensym("@invalid"); +CEAMMC_DEFINE_HASH(false); +CEAMMC_DEFINE_HASH(true); - if (l.isSymbol()) - return l[0].asSymbol(); +inline t_symbol* makePropName(const AtomListView& lv) +{ + if (lv.isSymbol()) + return lv[0].asSymbol(); else - return SYM_INVALID; + return gensym("@invalid"); +} + } BaseProp::BaseProp(const PdArgs& args) @@ -115,15 +119,16 @@ void BaseProp::onSymbol(t_symbol* s) if (!prop->setSymbol(s)) OBJ_ERR << "can't set property to " << s; } else if (prop->isBool()) { - if (!(s == SYM_TRUE || s == SYM_FALSE)) - OBJ_ERR << "only " << SYM_TRUE << " and " << SYM_FALSE << " values are supported"; - else if (!prop->setBool(s == SYM_TRUE)) + auto hash = crc32_hash(s); + if (!(hash == hash_true || hash == hash_false)) + OBJ_ERR << fmt::format("only '{}' and '{}' values are supported, got: {}", str_true, str_false, s->s_name); + else if (!prop->setBool(hash == hash_true)) OBJ_ERR << "can't set property to " << s; } else OBJ_ERR << "not a symbol property"; } -void BaseProp::onList(const AtomList& l) +void BaseProp::onList(const AtomListView& lv) { PropertyPtr prop(full_name_); @@ -132,19 +137,19 @@ void BaseProp::onList(const AtomList& l) return; } - if (l.isFloat() && (prop->isFloat() || prop->isInt() || prop->isBool())) - return onFloat(l[0].asFloat()); + if (lv.isFloat() && (prop->isFloat() || prop->isInt() || prop->isBool())) + return onFloat(lv[0].asFloat()); - if (l.isSymbol() && (prop->isSymbol() || prop->isBool())) - return onSymbol(l[0].asSymbol()); + if (lv.isSymbol() && (prop->isSymbol() || prop->isBool())) + return onSymbol(lv[0].asSymbol()); if (!prop->isList()) { OBJ_ERR << "not a list property"; return; } - if (!prop->setList(l)) - OBJ_ERR << "can't set property to " << l; + if (!prop->setList(lv)) + OBJ_ERR << "can't set property to " << lv; } void BaseProp::m_default(t_symbol*, const AtomListView&) @@ -189,9 +194,6 @@ void BaseProp::dump() const void setup_base_prop() { - SYM_TRUE = gensym("true"); - SYM_FALSE = gensym("false"); - ObjectFactory obj("prop"); obj.addMethod("default", &BaseProp::m_default); diff --git a/ceammc/ext/src/base/prop.h b/ceammc/ext/src/base/prop.h index f3983a4c3b..9d2d7ef1da 100644 --- a/ceammc/ext/src/base/prop.h +++ b/ceammc/ext/src/base/prop.h @@ -30,7 +30,7 @@ class BaseProp : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void m_default(t_symbol*, const AtomListView&); diff --git a/ceammc/ext/src/base/prop_declare.cpp b/ceammc/ext/src/base/prop_declare.cpp index 4d0eedee2d..e3d1eab408 100644 --- a/ceammc/ext/src/base/prop_declare.cpp +++ b/ceammc/ext/src/base/prop_declare.cpp @@ -12,13 +12,12 @@ * this file belongs to. *****************************************************************************/ #include "prop_declare.h" -#include "../string/tinyformat.h" -#include "../string/vformatlist.h" #include "ceammc_canvas.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "ceammc_globaldata.h" #include "datatype_property.h" +#include "fmt/format.h" #include #include @@ -40,7 +39,7 @@ constexpr int IMAX = std::numeric_limits::max(); class CanvasEditCallback { std::unordered_map map_; - CanvasEditCallback() {} + CanvasEditCallback() { } public: static CanvasEditCallback& instance() @@ -83,7 +82,7 @@ PropDeclare::PropDeclare(const PdArgs& args) initName(); if (PropertyStorage::storage().contains(sym_full_name_)) { - auto msg = tfm::format("\"%s\" is already declared", sym_name_->s_name); + auto msg = fmt::format("\"{}\" is already declared", sym_name_->s_name); throw std::runtime_error(msg); } @@ -260,7 +259,7 @@ void setup_prop_declare() obj.setDescription("declare named property for subpatch or abstraction"); obj.addAuthor("Serge Poltavsky"); - obj.setKeywords({"property", "declare"}); + obj.setKeywords({ "property", "declare" }); obj.setCategory("property"); obj.setSinceVersion(0, 7); } diff --git a/ceammc/ext/src/base/prop_get.cpp b/ceammc/ext/src/base/prop_get.cpp index 52e324aabb..f9f1b6a792 100644 --- a/ceammc/ext/src/base/prop_get.cpp +++ b/ceammc/ext/src/base/prop_get.cpp @@ -111,7 +111,7 @@ void PropGet::processObjectProps(t_object* dest, const std::vector& p } const size_t IDX = props.size() - std::distance(props.rbegin(), it); - outletAtomListView(outletAt(IDX), AtomListView(argv, argc), true); + outletAtomList(outletAt(IDX), AtomListView(argv, argc), true); freebytes(argv, argc); } diff --git a/ceammc/ext/src/base/prop_get_tilde.cpp b/ceammc/ext/src/base/prop_get_tilde.cpp index 6ce2f1bf4b..3aa0a5e830 100644 --- a/ceammc/ext/src/base/prop_get_tilde.cpp +++ b/ceammc/ext/src/base/prop_get_tilde.cpp @@ -1,5 +1,6 @@ #include "ceammc_atomlist.h" #include "ceammc_log.h" +#include "ceammc_object_info.h" #include #include @@ -138,8 +139,9 @@ void setup_prop_get_tilde() reinterpret_cast(prop_get_new), reinterpret_cast(prop_get_free), sizeof(t_prop_tilde), 0, A_GIMME, A_NULL); - class_addcreator(reinterpret_cast(prop_get_new), gensym("prop~>"), A_GIMME, A_NULL); - class_addcreator(reinterpret_cast(prop_get_new), gensym("@~>"), A_GIMME, A_NULL); + + ceammc::ObjectInfoStorage::instance().addAlias("prop~>", prop_get_tilde_class, reinterpret_cast(prop_get_new)); + ceammc::ObjectInfoStorage::instance().addAlias("@~>", prop_get_tilde_class, reinterpret_cast(prop_get_new)); class_addanything(prop_get_tilde_class, reinterpret_cast(prop_get_anything)); diff --git a/ceammc/ext/src/base/prop_split.cpp b/ceammc/ext/src/base/prop_split.cpp index 7137c6eaf7..3fa9775019 100644 --- a/ceammc/ext/src/base/prop_split.cpp +++ b/ceammc/ext/src/base/prop_split.cpp @@ -1,6 +1,7 @@ #include "ceammc.h" #include "ceammc_atomlist.h" #include "ceammc_log.h" +#include "ceammc_object_info.h" #include "ceammc_output.h" #include @@ -39,7 +40,7 @@ static inline void prop_split_output(t_prop_split* x, t_symbol* s, const AtomLis if (outlet == x->all_prop) // not matched outlet_anything(outlet, s, (int)args.size(), args.toPdData()); else - outletAtomListView(outlet, args, true); + outletAtomList(outlet, args, true); } static void prop_split_dump(t_prop_split* x) @@ -148,8 +149,9 @@ void setup_prop_split() reinterpret_cast(prop_split_new), reinterpret_cast(prop_split_free), sizeof(t_prop_split), 0, A_GIMME, A_NULL); - class_addcreator(reinterpret_cast(prop_split_new), gensym("prop->"), A_GIMME, A_NULL); - class_addcreator(reinterpret_cast(prop_split_new), gensym("@->"), A_GIMME, A_NULL); + + ceammc::ObjectInfoStorage::instance().addAlias("prop->", prop_split_class, reinterpret_cast(prop_split_new)); + ceammc::ObjectInfoStorage::instance().addAlias("@->", prop_split_class, reinterpret_cast(prop_split_new)); class_addanything(prop_split_class, reinterpret_cast(prop_split_anything)); class_addmethod(prop_split_class, reinterpret_cast(prop_split_dump), gensym("dump"), A_NULL); diff --git a/ceammc/ext/src/base/replace.cpp b/ceammc/ext/src/base/replace.cpp index 50e8efbcb2..2a0803c648 100644 --- a/ceammc/ext/src/base/replace.cpp +++ b/ceammc/ext/src/base/replace.cpp @@ -1,4 +1,5 @@ #include "replace.h" +#include "ceammc_factory.h" using namespace ceammc; @@ -16,19 +17,19 @@ Replace::Replace(const PdArgs& a) ->setArgIndex(1); } -void Replace::onInlet(size_t n, const AtomListView& l) +void Replace::onInlet(size_t n, const AtomListView& lv) { if (n == 1) - from_ = l.empty() ? Atom() : l[0]; + from_ = lv.empty() ? Atom() : lv[0]; else if (n == 2) - to_ = l.empty() ? Atom() : l[0]; + to_ = lv.empty() ? Atom() : lv[0]; } -void Replace::onAny(t_symbol* sel, const AtomListView& l) +void Replace::onAny(t_symbol* sel, const AtomListView& lv) { if (validateArgs()) { AtomList res(sel); - res.append(l); + res.append(lv); if (!to_.isNone()) res.replaceAll(from_, to_); else @@ -39,23 +40,23 @@ void Replace::onAny(t_symbol* sel, const AtomListView& l) anyTo(0, res); } else { - anyTo(0, sel, l); + anyTo(0, sel, lv); } } -void Replace::onList(const AtomList& l) +void Replace::onList(const AtomListView& lv) { if (validateArgs()) { - AtomList res(l); + AtomList res(lv); if (!to_.isNone()) res.replaceAll(from_, to_); else res.removeAll(from_); - listTo(0, res); + listTo(0, res.view()); } else { - listTo(0, l); + listTo(0, lv); } } @@ -88,7 +89,7 @@ void setup_base_replace() obj.setDescription("Replace atoms in data stream"); obj.addAuthor("Serge Poltavsky"); - obj.setKeywords({"replace", "test"}); + obj.setKeywords({ "replace", "test" }); obj.setCategory("flow"); obj.setSinceVersion(0, 1); } diff --git a/ceammc/ext/src/base/replace.h b/ceammc/ext/src/base/replace.h index 2c7439488d..673671d4ac 100644 --- a/ceammc/ext/src/base/replace.h +++ b/ceammc/ext/src/base/replace.h @@ -14,7 +14,6 @@ #ifndef REPLACE_H #define REPLACE_H -#include "ceammc_factory.h" #include "ceammc_object.h" namespace ceammc { @@ -25,9 +24,9 @@ class Replace : public BaseObject { public: Replace(const PdArgs& a); - void onInlet(size_t n, const AtomListView& l) final; - void onAny(t_symbol* sel, const AtomListView& l) final; - void onList(const AtomList& l) final; + void onInlet(size_t n, const AtomListView& lv) final; + void onAny(t_symbol* sel, const AtomListView& lv) final; + void onList(const AtomListView& lv) final; void onFloat(t_float v) final; void onSymbol(t_symbol* s) final; bool validateArgs() const; diff --git a/ceammc/ext/src/base/snd_file.cpp b/ceammc/ext/src/base/snd_file.cpp index f78ebb1a60..c8e0c0a3b8 100644 --- a/ceammc/ext/src/base/snd_file.cpp +++ b/ceammc/ext/src/base/snd_file.cpp @@ -8,6 +8,7 @@ #include "ceammc_string.h" #include "fmt/format.h" #include "lex/array_loader.h" +#include "lex/parser_strings.h" #include "config.h" @@ -52,7 +53,7 @@ SndFile::SndFile(const PdArgs& a) }); } -void SndFile::m_load(t_symbol* s, const AtomListView& lst) +void SndFile::m_load(t_symbol* s, const AtomListView& lv) { std::string fname, array_opts; @@ -61,8 +62,8 @@ void SndFile::m_load(t_symbol* s, const AtomListView& lst) samplerates_.clear(); samplecount_.clear(); - if (!extractLoadArgs(lst, fname, array_opts)) { - METHOD_ERR(s) << "not enough arguments: " << lst; + if (!extractLoadArgs(lv, fname, array_opts)) { + METHOD_ERR(s) << "not enough arguments: " << lv; return postLoadUsage(); } @@ -170,25 +171,27 @@ MaybeString SndFile::fullLoadPath(const std::string& fname) const } } -bool SndFile::extractLoadArgs(const AtomListView& lst, std::string& fname, std::string& array_opts) +bool SndFile::extractLoadArgs(const AtomListView& lv, std::string& fname, std::string& array_opts) { static t_symbol* SYM_TO = gensym("to"); - if (lst.size() < 3) + if (lv.size() < 3) return false; - auto it = std::find_if(lst.begin(), lst.end(), [](const Atom& a) { return a.isProperty() || a == Atom(SYM_TO); }); - if (it == lst.end()) + auto it = std::find_if(lv.begin(), lv.end(), [](const Atom& a) { return a.isProperty() || a == Atom(SYM_TO); }); + if (it == lv.end()) return false; - auto array_opt_pos = std::distance(lst.begin(), it); + auto array_opt_pos = std::distance(lv.begin(), it); - fname = to_string(lst.subView(0, array_opt_pos), " "); + fname = to_string(lv.subView(0, array_opt_pos), " "); // parse end escapes quotes // check for "quoted path with spaces" - string::pd_string_parse(fname, fname); + string::MediumString buf; + if (string::unquote_and_unescape(fname.c_str(), buf)) + fname.assign(buf.data(), buf.size()); - array_opts = to_string(lst.subView(array_opt_pos), " "); + array_opts = to_string(lv.subView(array_opt_pos), " "); return true; } diff --git a/ceammc/ext/src/base/snd_file.h b/ceammc/ext/src/base/snd_file.h index 55c6073d2d..900eb6a5f5 100644 --- a/ceammc/ext/src/base/snd_file.h +++ b/ceammc/ext/src/base/snd_file.h @@ -32,7 +32,7 @@ class SndFile : public ceammc::BaseObject { SndFile(const PdArgs& a); public: - void m_load(t_symbol* s, const AtomListView& lst); + void m_load(t_symbol* s, const AtomListView& lv); private: void postInfoUsage(); @@ -40,7 +40,7 @@ class SndFile : public ceammc::BaseObject { MaybeString fullLoadPath(const std::string& fname) const; - bool extractLoadArgs(const AtomListView& lst, std::string& fname, std::string& array_opts); + bool extractLoadArgs(const AtomListView& lv, std::string& fname, std::string& array_opts); }; void setup_snd_file(); diff --git a/ceammc/ext/src/base/test_data.cpp b/ceammc/ext/src/base/test_data.cpp index d27a8cca59..a471286841 100644 --- a/ceammc/ext/src/base/test_data.cpp +++ b/ceammc/ext/src/base/test_data.cpp @@ -166,7 +166,7 @@ static void test_data_load(t_test_data* x, t_symbol* s) add_single_check(x->data, input, cond, expect); } } catch (std::exception const& e) { - error("test.data: %s", e.what()); + pd_error(0, "test.data: %s", e.what()); } } diff --git a/ceammc/ext/src/base/test_expect.cpp b/ceammc/ext/src/base/test_expect.cpp index 3224ae273b..dd0767bf3f 100644 --- a/ceammc/ext/src/base/test_expect.cpp +++ b/ceammc/ext/src/base/test_expect.cpp @@ -32,7 +32,7 @@ typedef struct test_expect { static void test_expect_equal(t_test_expect* x, t_symbol* s, int argc, t_atom* argv) { if (argc != x->data->argc) { - error("test.expect: expected data length not equal to given: %d != %d", argc, x->data->argc); + pd_error(0, "test.expect: expected data length not equal to given: %d != %d", argc, x->data->argc); outlet_float(x->x_obj.te_outlet, 0.0f); return; @@ -40,7 +40,7 @@ static void test_expect_equal(t_test_expect* x, t_symbol* s, int argc, t_atom* a for (int i = 0; i < argc; i++) { if (argv->a_type != x->data->at(i)->a_type) { - error("test.expect: data type not equal for index %i", i); + pd_error(0, "test.expect: data type not equal for index %i", i); outlet_float(x->x_obj.te_outlet, 0.0f); return; } @@ -49,7 +49,7 @@ static void test_expect_equal(t_test_expect* x, t_symbol* s, int argc, t_atom* a t_float expected = atom_getfloat(&argv[i]); t_float real = atom_getfloat(x->data->at(i)); if (expected != real) { - error("test.expect: expected value is %f, but get %f", expected, real); + pd_error(0, "test.expect: expected value is %f, but get %f", expected, real); outlet_float(x->x_obj.te_outlet, 0.0f); return; } diff --git a/ceammc/ext/src/base/xfade_tilde.cpp b/ceammc/ext/src/base/xfade_tilde.cpp index c5c5fc00d0..138f371a95 100644 --- a/ceammc/ext/src/base/xfade_tilde.cpp +++ b/ceammc/ext/src/base/xfade_tilde.cpp @@ -13,13 +13,14 @@ *****************************************************************************/ #include "xfade_tilde.h" #include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" #include "ceammc_property_callback.h" -#include +CEAMMC_DEFINE_SYM_HASH(lin); +CEAMMC_DEFINE_SYM_HASH(pow) -static t_symbol* SYM_POW; -static t_symbol* SYM_LIN; +#include constexpr t_float DEFAULT_SMOOTH_MS = 20; constexpr size_t DEF_NCHAN = 2; @@ -38,6 +39,7 @@ XFadeTilde::XFadeTilde(const PdArgs& args) : SoundExternal(args) , smooth_ms_(DEFAULT_SMOOTH_MS) , prop_type_(nullptr) + , value_(nullptr) { const size_t N = positionalConstant(0); for (size_t i = 1; i < N * inMultiple(args); i++) @@ -49,11 +51,11 @@ XFadeTilde::XFadeTilde(const PdArgs& args) if (args.flags & XFADE_STEREO) createSignalOutlet(); - prop_type_ = new SymbolEnumProperty("@type", { SYM_POW, SYM_LIN }); + prop_type_ = new SymbolEnumProperty("@type", { sym_pow(), sym_lin() }); addProperty(prop_type_); - addProperty(new SymbolEnumAlias("@pow", prop_type_, SYM_POW)); - addProperty(new SymbolEnumAlias("@lin", prop_type_, SYM_LIN)); + addProperty(new SymbolEnumAlias("@pow", prop_type_, sym_pow())); + addProperty(new SymbolEnumAlias("@lin", prop_type_, sym_lin())); { Property* p = createCbFloatProperty( @@ -65,7 +67,17 @@ XFadeTilde::XFadeTilde(const PdArgs& args) } gain_.assign(N, t_smooth(0)); - gain_[0].setTargetValue(1); + + value_ = new FloatProperty("@x", 0); + value_->setSuccessFn([this](Property* p) { setXFade(value_->value()); }); + value_->setArgIndex(1); + value_->checkClosedRange(0, N - 1); + addProperty(value_); +} + +void XFadeTilde::initDone() +{ + setXFade(value_->value()); } void XFadeTilde::setupDSP(t_signal** in) @@ -74,8 +86,8 @@ void XFadeTilde::setupDSP(t_signal** in) const double SR = samplerate(); - for (size_t i = 0; i < gain_.size(); i++) - gain_[i].setDurationMs(smooth_ms_, SR); + for (auto& g : gain_) + g.setDurationMs(smooth_ms_, SR); } void XFadeTilde::processBlock(const t_sample** in, t_sample** out) @@ -94,36 +106,42 @@ void XFadeTilde::processBlock(const t_sample** in, t_sample** out) } } -void XFadeTilde::onInlet(size_t n, const AtomListView& lst) +void XFadeTilde::onInlet(size_t n, const AtomListView& lv) { - typedef std::function XFadeCurveFunction; - typedef std::pair XFadeCurvePair; - - static XFadeCurvePair xfade_fns[] = { - { SYM_LIN, [](t_float a, t_float b) { return a - b; } }, - { SYM_POW, [](t_float a, t_float b) { return (a - b) * (a - b); } } - }; + value_->set(lv); +} - if (!checkArgs(lst, ARG_FLOAT)) { - OBJ_ERR << "float expected: " << lst; - return; - } +std::vector XFadeTilde::gains() const +{ + std::vector res; - t_float v = lst.floatAt(0, 0); + for (auto& i : gain_) + res.push_back(i.target()); - auto type = prop_type_->value(); - auto fn_it = std::find_if(std::begin(xfade_fns), std::end(xfade_fns), - [type](const XFadeCurvePair& p) { return p.first == type; }); + return res; +} - if (fn_it == std::end(xfade_fns)) { - OBJ_ERR << "unknown xfade type: " << type; +void XFadeTilde::setXFade(t_float v) +{ + using XFadeCurveFunction = t_float (*)(t_float, t_float); + + XFadeCurveFunction curve_fn = nullptr; + switch (crc32_hash(prop_type_->value())) { + case hash_lin: + curve_fn = [](t_float a, t_float b) -> t_float { return a - b; }; + break; + case hash_pow: + curve_fn = [](t_float a, t_float b) -> t_float { return (a - b) * (a - b); }; + break; + default: + OBJ_ERR << "unknown xfade type: " << prop_type_->value(); return; } const size_t N = gain_.size(); for (size_t i = 0; i < N; i++) { if (v >= i && v < (i + 1) && (i + 1) < N) { - t_float k = fn_it->second(v, i); + auto k = curve_fn(v, i); gain_[i].setTargetValue(1 - k); gain_[i + 1].setTargetValue(k); i++; @@ -135,21 +153,8 @@ void XFadeTilde::onInlet(size_t n, const AtomListView& lst) } } -std::vector XFadeTilde::gains() const -{ - std::vector res; - - for (auto& i : gain_) - res.push_back(i.target()); - - return res; -} - void setup_base_xfade_tilde() { - SYM_POW = gensym("pow"); - SYM_LIN = gensym("lin"); - SoundExternalFactory obj("xfade~"); obj.setDescription("multi signal crossfade"); diff --git a/ceammc/ext/src/base/xfade_tilde.h b/ceammc/ext/src/base/xfade_tilde.h index c93413582f..db54cd5e7a 100644 --- a/ceammc/ext/src/base/xfade_tilde.h +++ b/ceammc/ext/src/base/xfade_tilde.h @@ -26,22 +26,27 @@ enum XFadeFlags { class XFadeTilde : public SoundExternal { protected: - typedef SmoothLinT t_smooth; + using t_smooth = SmoothLinT; std::vector gain_; t_float smooth_ms_; SymbolEnumProperty* prop_type_; + FloatProperty* value_; public: XFadeTilde(const PdArgs& args); + void initDone() override; void setupDSP(t_signal** in) override; void processBlock(const t_sample** in, t_sample** out) override; - void onInlet(size_t n, const AtomListView& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; public: // test std::vector gains() const; + +private: + void setXFade(t_float v); }; void setup_base_xfade_tilde(); diff --git a/ceammc/ext/src/ceammc_lib_dumpjson.cpp b/ceammc/ext/src/ceammc_lib_dumpjson.cpp index fef72a2da2..c94246bd1a 100644 --- a/ceammc/ext/src/ceammc_lib_dumpjson.cpp +++ b/ceammc/ext/src/ceammc_lib_dumpjson.cpp @@ -26,6 +26,7 @@ extern "C" { using json = nlohmann::json; #include +#include #include #include #include @@ -47,11 +48,11 @@ extern "C" CEAMMC_EXTERN bool ceammc_dump_json(int argc, char* argv[]) } AtomList args; - if (argc > 2) { + if (argc >= 2) { t_binbuf* b = binbuf_new(); std::string str; - for (int i = 2; i < argc; i++) { + for (int i = 1; i < argc; i++) { str += argv[i]; str += " "; } @@ -107,15 +108,57 @@ extern "C" CEAMMC_EXTERN bool ceammc_dump_json(int argc, char* argv[]) jobj["methods"].push_back(name); } + // arguments + std::vector obj_args; + // add properties for (const PropertyInfo& i : ext.properties()) { - DataTypeDict info; - if (!i.getDict(info)) { + std::string info; + if (!i.getJSON(info)) { std::cerr << "can't get property info: " << i.name()->s_name << std::endl; continue; } - jobj["properties"].push_back(json::parse(info.valueToJsonString())); + try { + jobj["properties"].push_back(json::parse(info)); + + if (i.hasArgIndex()) { + obj_args.insert(std::upper_bound(obj_args.begin(), obj_args.end(), i, + [](const PropertyInfo& a, const PropertyInfo& b) { return a.argIndex() < b.argIndex(); }), + i); + } + } catch (std::exception& e) { + std::cerr << "error: while" << e.what() << std::endl; + } + } + + // output args + if (obj_args.size() > 0) { + for (auto& arg_info : obj_args) { + auto name = boost::to_upper_copy(std::string(arg_info.name()->s_name + 1)); + jobj["args"].push_back({ + { "name", name }, + { "property", arg_info.name()->s_name }, + { "index", arg_info.argIndex() }, + { "type", to_symbol(arg_info.type())->s_name }, + }); + + std::string info; + if (!arg_info.getJSON(info)) { + std::cerr << "can't get argument info: " << arg_info.name()->s_name << std::endl; + continue; + } + + auto jinfo = json::parse(info); + if (jinfo.contains("min")) + jobj["args"].back()["min"] = jinfo["min"]; + + if (jinfo.contains("max")) + jobj["args"].back()["max"] = jinfo["max"]; + + if (jinfo.contains("units")) + jobj["args"].back()["units"] = jinfo["units"]; + } } // add info diff --git a/ceammc/ext/src/ceammc_lib_external.cpp b/ceammc/ext/src/ceammc_lib_external.cpp index 92161d72a2..10cef75f48 100644 --- a/ceammc/ext/src/ceammc_lib_external.cpp +++ b/ceammc/ext/src/ceammc_lib_external.cpp @@ -14,6 +14,7 @@ #include "ceammc.h" #include "ceammc_config.h" +#include "ceammc_impl.h" #include "ceammc_object_info.h" #include "ceammc_pd.h" #include "mod_init.h" @@ -36,7 +37,7 @@ inline int int_version(int maj, int min, int fix) void ceammc_info_message() { post("\nCEAMMC library\n" - " Centre for Electroacoustic Music Moscow Conservatory, © 2016-2021\n" + " Centre for Electroacoustic Music Moscow Conservatory, © 2016-2022\n" " authors: Serge Poltavsky and Alex Nadzharov\n" " arch: %d-bit\n" " precision: %s\n" @@ -44,9 +45,9 @@ void ceammc_info_message() " version: %s\n" " url: %s\n" #ifdef PD_INSTANCE - " pd instance: true\n" + " pd instance: true\n" #else - " pd instance: false\n" + " pd instance: false\n" #endif " license: GPL-3\n" " build date: '%s'\n", @@ -120,6 +121,13 @@ void ceammc_cords(t_object* x, t_symbol* s) if (s == gensym("lower")) sys_vgui("[tkcanvas_name $::focused_window] lower cord\n"); } + +void ceammc_tcl_path_init() +{ + auto extern_dir = class_gethelpdir(ceammc_class); + if (extern_dir) + sys_vgui("lappend ::auto_path {%s/tcl}\n", extern_dir); +} } extern "C" CEAMMC_EXTERN int ceammc_init_done() @@ -156,6 +164,7 @@ extern "C" CEAMMC_EXTERN void ceammc_setup() } ceammc_info_message(); + ceammc_tcl_path_init(); ceammc_new(); ceammc_init(); } @@ -167,7 +176,7 @@ extern "C" CEAMMC_EXTERN void ceammc_list_externals(int vanilla) if (vanilla) { std::set all_ext; - for (auto x : ceammc::pd::currentListOfExternals()) + for (auto& x : ceammc::pd::currentListOfExternals()) all_ext.insert(x); std::set vanilla_ext; diff --git a/ceammc/ext/src/ceammc_lib_listprops.cpp b/ceammc/ext/src/ceammc_lib_listprops.cpp index 5fcc598ea6..a08d763539 100644 --- a/ceammc/ext/src/ceammc_lib_listprops.cpp +++ b/ceammc/ext/src/ceammc_lib_listprops.cpp @@ -14,9 +14,7 @@ #include "ceammc.h" #include "ceammc_atomlist.h" #include "ceammc_format.h" -#include "ceammc_object_info.h" #include "ceammc_pd.h" -#include "datatype_dict.h" #include "stk/stk/include/Stk.h" #include @@ -56,7 +54,7 @@ static std::string pddoc_units(const std::string& u) const static std::map um = { { "samp", "sample" }, { "db", "decibel" }, - { "hz", "herz" }, + { "hz", "hertz" }, { "msec", "millisecond" }, { "sec", "second" }, { "rad", "radian" }, diff --git a/ceammc/ext/src/ceammc_pd.cmake b/ceammc/ext/src/ceammc_pd.cmake index a56499c1e1..9b2bad33d8 100644 --- a/ceammc/ext/src/ceammc_pd.cmake +++ b/ceammc/ext/src/ceammc_pd.cmake @@ -71,4 +71,6 @@ macro(ceammc_faust_gen_obj module name) ${_args} "${CMAKE_SOURCE_DIR}/ceammc/faust/${module}_${name}.dsp" -o ${CMAKE_CURRENT_SOURCE_DIR}/${module}_${name}.h) + + set(CEAMMC_FAUST_TARGETS "${CEAMMC_FAUST_TARGETS};faust_${module}_${name}" CACHE INTERNAL "") endmacro() diff --git a/ceammc/ext/src/conv/CMakeLists.txt b/ceammc/ext/src/conv/CMakeLists.txt index 3306828ad8..1d83700386 100644 --- a/ceammc/ext/src/conv/CMakeLists.txt +++ b/ceammc/ext/src/conv/CMakeLists.txt @@ -27,6 +27,7 @@ ceammc_conv_external(list2props) ceammc_conv_external(midi2freq) ceammc_conv_external(ms2samp) ceammc_conv_external(ms2bpm) +ceammc_conv_external(note2guido) ceammc_conv_external(pitch2midi) ceammc_conv_external(samp2ms) ceammc_conv_external(samp2sec) diff --git a/ceammc/ext/src/conv/conv_amp2dbfs.cpp b/ceammc/ext/src/conv/conv_amp2dbfs.cpp index ed92c485d0..1a186df03b 100644 --- a/ceammc/ext/src/conv/conv_amp2dbfs.cpp +++ b/ceammc/ext/src/conv/conv_amp2dbfs.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_amp2dbfs.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" @@ -39,9 +40,11 @@ void Amp2dbfs::onFloat(t_float v) floatTo(0, a2d(v)); } -void Amp2dbfs::onList(const AtomList& lst) +void Amp2dbfs::onList(const AtomListView& lv) { - listTo(0, lst.mapFloat(a2d)); + SmallAtomList res; + lv.mapFloat(a2d, res); + listTo(0, res.view()); } Amp2dbfsTilde::Amp2dbfsTilde(const PdArgs& args) diff --git a/ceammc/ext/src/conv/conv_amp2dbfs.h b/ceammc/ext/src/conv/conv_amp2dbfs.h index 11fe12cbd8..8d706a2b91 100644 --- a/ceammc/ext/src/conv/conv_amp2dbfs.h +++ b/ceammc/ext/src/conv/conv_amp2dbfs.h @@ -23,7 +23,7 @@ class Amp2dbfs : public BaseObject { public: Amp2dbfs(const PdArgs& args); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; class Amp2dbfsTilde : public SoundExternal { diff --git a/ceammc/ext/src/conv/conv_angles.cpp b/ceammc/ext/src/conv/conv_angles.cpp index f4c59432db..1c0ccd031e 100644 --- a/ceammc/ext/src/conv/conv_angles.cpp +++ b/ceammc/ext/src/conv/conv_angles.cpp @@ -45,22 +45,20 @@ Car2Pol::Car2Pol(const PdArgs& args) createOutlet(); } -void Car2Pol::onList(const AtomList& lst) +void Car2Pol::onList(const AtomListView& lv) { static const t_float m_pi = std::acos(t_float(-1)); - if (!checkArgs(lst, ARG_FLOAT, ARG_FLOAT)) { - OBJ_ERR << "X Y coordinates expected: " << lst; + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "X Y coordinates expected: " << lv; return; } - const auto x = lst[0].asFloat(); - const auto y = lst[1].asFloat(); + const auto x = lv[0].asFloat(); + const auto y = lv[1].asFloat(); - if (true) - listTo(0, { std::hypot(x, y), wrapFloatMinMax(std::atan2(y, x), 0, 2 * m_pi) }); - else - listTo(0, { std::hypot(x, y), std::atan2(y, x) }); + SmallAtomList res { std::hypot(x, y), wrapFloatMinMax(std::atan2(y, x), 0, 2 * m_pi) }; + listTo(0, res.view()); } Pol2Car::Pol2Car(const PdArgs& args) @@ -69,17 +67,18 @@ Pol2Car::Pol2Car(const PdArgs& args) createOutlet(); } -void Pol2Car::onList(const AtomList& lst) +void Pol2Car::onList(const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT, ARG_FLOAT)) { - OBJ_ERR << "R THETA coordinates expected: " << lst; + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "R THETA coordinates expected: " << lv; return; } - const auto r = lst[0].asFloat(); - const auto theta = lst[1].asFloat(); + const auto r = lv[0].asFloat(); + const auto theta = lv[1].asFloat(); - listTo(0, { r * std::cos(theta), r * std::sin(theta) }); + SmallAtomList res { r * std::cos(theta), r * std::sin(theta) }; + listTo(0, res.view()); } void setup_conv_angles() diff --git a/ceammc/ext/src/conv/conv_angles.h b/ceammc/ext/src/conv/conv_angles.h index b982118c49..eea7f7423f 100644 --- a/ceammc/ext/src/conv/conv_angles.h +++ b/ceammc/ext/src/conv/conv_angles.h @@ -31,13 +31,13 @@ class Car2Pol : public BaseObject { public: Car2Pol(const PdArgs& args); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; class Pol2Car : public BaseObject { public: Pol2Car(const PdArgs& args); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; class Phase2RadTilde : public SimpleConverterTilde { diff --git a/ceammc/ext/src/conv/conv_bits2bang.cpp b/ceammc/ext/src/conv/conv_bits2bang.cpp index d6178a764c..3b39834d3b 100644 --- a/ceammc/ext/src/conv/conv_bits2bang.cpp +++ b/ceammc/ext/src/conv/conv_bits2bang.cpp @@ -48,22 +48,22 @@ void ConvBits2Bang::initDone() createOutlet(); } -void ConvBits2Bang::onList(const AtomList& lst) +void ConvBits2Bang::onList(const AtomListView& lv) { const bool reversed = reversed_->value(); const bool poly = poly_->value(); - if (!poly && (int)lst.size() != n_->value()) { - OBJ_ERR << "length of input list should be equal " << n_->value() << ", got: " << lst; + if (!poly && (int)lv.size() != n_->value()) { + OBJ_ERR << "length of input list should be equal " << n_->value() << ", got: " << lv; return; } Atom apair[2] = { 0., &s_bang }; const AtomListView lvpair(apair, 2); - for (size_t i = 0; i < lst.size(); i++) { - const size_t aidx = reversed ? (lst.size() - (i + 1)) : i; - const auto& a = lst[aidx]; + for (size_t i = 0; i < lv.size(); i++) { + const size_t aidx = reversed ? (lv.size() - (i + 1)) : i; + const auto& a = lv[aidx]; if (a.isFloat() && a.asT() != 0) { if (poly) { apair[0] = i; diff --git a/ceammc/ext/src/conv/conv_bits2bang.h b/ceammc/ext/src/conv/conv_bits2bang.h index 44c52fe615..f84cf71594 100644 --- a/ceammc/ext/src/conv/conv_bits2bang.h +++ b/ceammc/ext/src/conv/conv_bits2bang.h @@ -26,7 +26,7 @@ class ConvBits2Bang : public BaseObject { ConvBits2Bang(const PdArgs& args); void initDone() override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; const char* annotateOutlet(size_t n) const final; }; diff --git a/ceammc/ext/src/conv/conv_bits2int.cpp b/ceammc/ext/src/conv/conv_bits2int.cpp index 7308e44d6a..c4e45c572e 100644 --- a/ceammc/ext/src/conv/conv_bits2int.cpp +++ b/ceammc/ext/src/conv/conv_bits2int.cpp @@ -35,22 +35,22 @@ void ConvBits2Int::onFloat(t_float f) OBJ_ERR << "0 or 1 value expected, got: " << f; } -void ConvBits2Int::onList(const AtomList& lst) +void ConvBits2Int::onList(const AtomListView& lv) { uint64_t res = 0; if (reversed_->value()) { - for (size_t i = 0; i < lst.size(); i++) { - const auto v = lst[i].asInt(-1); + for (size_t i = 0; i < lv.size(); i++) { + const auto v = lv[i].asInt(-1); if (v == 1) res |= (0x1 << i); else if (v != 0) - OBJ_ERR << "0 or 1 expected, got: " << lst[i] << ", ignoring"; + OBJ_ERR << "0 or 1 expected, got: " << lv[i] << ", ignoring"; } } else { - const size_t N = lst.size(); - for (size_t i = 0; i < lst.size(); i++) { - const auto& a = lst[N - (i + 1)]; + const size_t N = lv.size(); + for (size_t i = 0; i < lv.size(); i++) { + const auto& a = lv[N - (i + 1)]; const auto v = a.asInt(-1); if (v == 1) res |= (0x1 << i); diff --git a/ceammc/ext/src/conv/conv_bits2int.h b/ceammc/ext/src/conv/conv_bits2int.h index b07dc1232d..b8e2e56e81 100644 --- a/ceammc/ext/src/conv/conv_bits2int.h +++ b/ceammc/ext/src/conv/conv_bits2int.h @@ -23,7 +23,7 @@ class ConvBits2Int : public BaseObject { public: ConvBits2Int(const PdArgs& args); void onFloat(t_float f) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; void setup_conv_bits2int(); diff --git a/ceammc/ext/src/conv/conv_bits2note.cpp b/ceammc/ext/src/conv/conv_bits2note.cpp index 9a28f81e78..b98d51370c 100644 --- a/ceammc/ext/src/conv/conv_bits2note.cpp +++ b/ceammc/ext/src/conv/conv_bits2note.cpp @@ -51,18 +51,18 @@ void ConvBits2Note::initDone() } } -void ConvBits2Note::onList(const AtomList& lst) +void ConvBits2Note::onList(const AtomListView& lv) { const size_t N = keys_->value().size(); - if (lst.size() != N) { - OBJ_ERR << "length of input list should be equal " << N << ", got: " << lst; + if (lv.size() != N) { + OBJ_ERR << "length of input list should be equal " << N << ", got: " << lv; return; } for (size_t i = 0; i < N; i++) { const t_float key = keys_->value()[i].asFloat(0); - const auto& a = lst[i]; + const auto& a = lv[i]; const bool bit_on = a.isFloat() && a.asT() != 0; processNote(i, key, bit_on); diff --git a/ceammc/ext/src/conv/conv_bits2note.h b/ceammc/ext/src/conv/conv_bits2note.h index 6ab9902fcd..fac02a8174 100644 --- a/ceammc/ext/src/conv/conv_bits2note.h +++ b/ceammc/ext/src/conv/conv_bits2note.h @@ -32,7 +32,7 @@ class ConvBits2Note : public BaseObject { ConvBits2Note(const PdArgs& args); void initDone() override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; private: void noteTo(size_t n, t_float note, t_float vel); diff --git a/ceammc/ext/src/conv/conv_bits2pos.cpp b/ceammc/ext/src/conv/conv_bits2pos.cpp index 93358e4b28..5b8dddd1f2 100644 --- a/ceammc/ext/src/conv/conv_bits2pos.cpp +++ b/ceammc/ext/src/conv/conv_bits2pos.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "conv_bits2pos.h" #include "ceammc_factory.h" +#include "ceammc_containers.h" ConvBits2Pos::ConvBits2Pos(const PdArgs& args) : BaseObject(args) @@ -30,27 +31,27 @@ void ConvBits2Pos::onFloat(t_float f) floatTo(0, 0); } -void ConvBits2Pos::onList(const AtomList& lst) +void ConvBits2Pos::onList(const AtomListView& lv) { - Atom res[lst.size()]; - size_t n = 0; + AtomList256 res; + res.reserve(lv.size()); if (reversed_->value()) { - for (size_t i = 0; i < lst.size(); i++) { - const auto& a = lst[i]; + for (size_t i = 0; i < lv.size(); i++) { + const auto& a = lv[i]; if (a.isFloat() && a.asT() != 0) - res[n++] = i; + res.push_back(i); } } else { - const auto N = lst.size(); - for (size_t i = 0; i < lst.size(); i++) { - const auto& a = lst[N - (i + 1)]; + const auto N = lv.size(); + for (size_t i = 0; i < lv.size(); i++) { + const auto& a = lv[N - (i + 1)]; if (a.isFloat() && a.asT() != 0) - res[n++] = i; + res.push_back(i); } } - listTo(0, AtomListView(res, n)); + listTo(0, res.view()); } void setup_conv_bits2pos() diff --git a/ceammc/ext/src/conv/conv_bits2pos.h b/ceammc/ext/src/conv/conv_bits2pos.h index ad0ef9f325..86db0be40f 100644 --- a/ceammc/ext/src/conv/conv_bits2pos.h +++ b/ceammc/ext/src/conv/conv_bits2pos.h @@ -23,7 +23,7 @@ class ConvBits2Pos : public BaseObject { public: ConvBits2Pos(const PdArgs& args); void onFloat(t_float f) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; void setup_conv_bits2pos(); diff --git a/ceammc/ext/src/conv/conv_bpm2hz.cpp b/ceammc/ext/src/conv/conv_bpm2hz.cpp index 3ff2c198ae..8538bc83db 100644 --- a/ceammc/ext/src/conv/conv_bpm2hz.cpp +++ b/ceammc/ext/src/conv/conv_bpm2hz.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_bpm2hz.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" BpmToHz::BpmToHz(const PdArgs& a) @@ -25,9 +26,14 @@ void BpmToHz::onFloat(t_float v) floatTo(0, v / 60); } -void BpmToHz::onList(const AtomList& lst) +void BpmToHz::onList(const AtomListView& lv) { - listTo(0, lst / 60); + SmallAtomList res; + res.reserve(lv.size()); + for (auto& a : lv) + res.push_back(a / 60); + + listTo(0, res.view()); } void setup_conv_bpm2hz() diff --git a/ceammc/ext/src/conv/conv_bpm2hz.h b/ceammc/ext/src/conv/conv_bpm2hz.h index cc2650a09f..947d46835e 100644 --- a/ceammc/ext/src/conv/conv_bpm2hz.h +++ b/ceammc/ext/src/conv/conv_bpm2hz.h @@ -22,6 +22,6 @@ class BpmToHz : public BaseObject { public: BpmToHz(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_BPM2HZ_H diff --git a/ceammc/ext/src/conv/conv_bpm2ms.cpp b/ceammc/ext/src/conv/conv_bpm2ms.cpp index d32109a9f8..aa6e44a209 100644 --- a/ceammc/ext/src/conv/conv_bpm2ms.cpp +++ b/ceammc/ext/src/conv/conv_bpm2ms.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "conv_bpm2ms.h" #include "ceammc_factory.h" +#include "ceammc_containers.h" static t_float bpm2ms(t_float v) { @@ -30,9 +31,11 @@ void BpmToMs::onFloat(t_float v) floatTo(0, bpm2ms(v)); } -void BpmToMs::onList(const AtomList& lst) +void BpmToMs::onList(const AtomListView& lv) { - listTo(0, lst.mapFloat(bpm2ms)); + SmallAtomList res; + lv.mapFloat(bpm2ms, res); + listTo(0, res.view()); } void setup_conv_bpm2ms() diff --git a/ceammc/ext/src/conv/conv_bpm2ms.h b/ceammc/ext/src/conv/conv_bpm2ms.h index 6e76d5b966..5be77a6419 100644 --- a/ceammc/ext/src/conv/conv_bpm2ms.h +++ b/ceammc/ext/src/conv/conv_bpm2ms.h @@ -22,7 +22,7 @@ class BpmToMs : public BaseObject { public: BpmToMs(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_BPM2MS_H diff --git a/ceammc/ext/src/conv/conv_bpm2sec.cpp b/ceammc/ext/src/conv/conv_bpm2sec.cpp index dad06f8202..2c22e7a622 100644 --- a/ceammc/ext/src/conv/conv_bpm2sec.cpp +++ b/ceammc/ext/src/conv/conv_bpm2sec.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_bpm2sec.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" static t_float bpm2sec(t_float v) @@ -30,9 +31,11 @@ void BpmToSec::onFloat(t_float v) floatTo(0, bpm2sec(v)); } -void BpmToSec::onList(const AtomList& lst) +void BpmToSec::onList(const AtomListView& lv) { - listTo(0, lst.mapFloat(bpm2sec)); + SmallAtomList res; + lv.mapFloat(bpm2sec, res); + listTo(0, res.view()); } void setup_conv_bpm2sec() diff --git a/ceammc/ext/src/conv/conv_bpm2sec.h b/ceammc/ext/src/conv/conv_bpm2sec.h index e5dfde901f..7fa1763b3c 100644 --- a/ceammc/ext/src/conv/conv_bpm2sec.h +++ b/ceammc/ext/src/conv/conv_bpm2sec.h @@ -22,7 +22,7 @@ class BpmToSec : public BaseObject { public: BpmToSec(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_BPM2SEC_H diff --git a/ceammc/ext/src/conv/conv_dbfs2amp.cpp b/ceammc/ext/src/conv/conv_dbfs2amp.cpp index c24811cea8..ff6d64a05e 100644 --- a/ceammc/ext/src/conv/conv_dbfs2amp.cpp +++ b/ceammc/ext/src/conv/conv_dbfs2amp.cpp @@ -12,13 +12,15 @@ * this file belongs to. *****************************************************************************/ #include "conv_dbfs2amp.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" +constexpr t_float MIN_DBFS = -144; + static t_float dbfs2amp_(t_float v) { - static const t_float threshold = -144; - if (v <= threshold) + if (v <= MIN_DBFS) return 0; return convert::dbfs2amp(v); @@ -35,9 +37,11 @@ void Dbfs2amp::onFloat(t_float v) floatTo(0, dbfs2amp_(v)); } -void Dbfs2amp::onList(const AtomList& args) +void Dbfs2amp::onList(const AtomListView& args) { - listTo(0, args.mapFloat(dbfs2amp_)); + SmallAtomList res; + args.mapFloat(dbfs2amp_, res); + listTo(0, res.view()); } Dbfs2ampTilde::Dbfs2ampTilde(const PdArgs& args) @@ -59,6 +63,6 @@ void setup_conv_dbfs2amp() ObjectFactory obj1("conv.dbfs2amp"); obj1.addAlias("dbfs->amp"); - ObjectFactory obj2("conv.dbfs2amp~"); + SoundExternalFactory obj2("conv.dbfs2amp~"); obj2.addAlias("dbfs->amp~"); } diff --git a/ceammc/ext/src/conv/conv_dbfs2amp.h b/ceammc/ext/src/conv/conv_dbfs2amp.h index 9f5f101e56..79fe0283e8 100644 --- a/ceammc/ext/src/conv/conv_dbfs2amp.h +++ b/ceammc/ext/src/conv/conv_dbfs2amp.h @@ -21,7 +21,7 @@ class Dbfs2amp : public BaseObject { public: Dbfs2amp(const PdArgs& args); void onFloat(t_float v) override; - void onList(const AtomList& args) override; + void onList(const AtomListView& args) override; }; class Dbfs2ampTilde : public SoundExternal { diff --git a/ceammc/ext/src/conv/conv_degree2key.cpp b/ceammc/ext/src/conv/conv_degree2key.cpp index eae2dcda84..a3ca223de5 100644 --- a/ceammc/ext/src/conv/conv_degree2key.cpp +++ b/ceammc/ext/src/conv/conv_degree2key.cpp @@ -12,18 +12,22 @@ * this file belongs to. *****************************************************************************/ #include "conv_degree2key.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" #include "ceammc_music_scale.h" +#include "ceammc_containers.h" #include #include -constexpr const char* DEFAULT_SCALE = "major"; +CEAMMC_DEFINE_HASH(major) + +constexpr const char* DEFAULT_SCALE = str_major; ConvDegree2Key::ConvDegree2Key(const PdArgs& args) : BaseObject(args) , scale_(nullptr) - , scale_ptr_(music::ScaleLibrary::instance().find(gensym(DEFAULT_SCALE))) + , scale_ptr_(music::ScaleLibrary::instance().findByHash(hash_major)) { createOutlet(); @@ -31,17 +35,16 @@ ConvDegree2Key::ConvDegree2Key(const PdArgs& args) AtomList res; auto& l = music::ScaleLibrary::instance().all(); for (auto s : l) - res.append(s->name()); + res.append(gensym(s->name().c_str())); return res; }); - auto SYM_DEFAULT_SCALE = gensym(DEFAULT_SCALE); - scale_ = new SymbolEnumProperty("@scale", SYM_DEFAULT_SCALE); + scale_ = new SymbolEnumProperty("@scale", gensym(DEFAULT_SCALE)); auto& l = music::ScaleLibrary::instance().all(); for (auto s : l) { - if (s->name() != SYM_DEFAULT_SCALE) - scale_->appendEnum(s->name()); + if (s->name() != DEFAULT_SCALE) + scale_->appendEnum(gensym(s->name().c_str())); } scale_->setArgIndex(0); @@ -58,10 +61,13 @@ void ConvDegree2Key::onFloat(t_float f) floatTo(0, scale_ptr_->degreeToKey(f)); } -void ConvDegree2Key::onList(const AtomList& l) +void ConvDegree2Key::onList(const AtomListView& lv) { - if (scale_ptr_) - listTo(0, l.mapFloat([this](t_float f) { return scale_ptr_->degreeToKey(f); })); + if (scale_ptr_) { + SmallAtomList res; + lv.mapFloat([this](t_float f) { return scale_ptr_->degreeToKey(f); }, res); + listTo(0, res.view()); + } } void ConvDegree2Key::m_random(t_symbol* s, const AtomListView& v) diff --git a/ceammc/ext/src/conv/conv_degree2key.h b/ceammc/ext/src/conv/conv_degree2key.h index 73cb762236..219c256662 100644 --- a/ceammc/ext/src/conv/conv_degree2key.h +++ b/ceammc/ext/src/conv/conv_degree2key.h @@ -27,7 +27,7 @@ class ConvDegree2Key : public BaseObject { public: ConvDegree2Key(const PdArgs& args); void onFloat(t_float f) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void m_random(t_symbol* s, const AtomListView& v); }; diff --git a/ceammc/ext/src/conv/conv_hex2int.cpp b/ceammc/ext/src/conv/conv_hex2int.cpp index f16c3cac29..fed19af848 100644 --- a/ceammc/ext/src/conv/conv_hex2int.cpp +++ b/ceammc/ext/src/conv/conv_hex2int.cpp @@ -38,11 +38,11 @@ void ConvHex2Int::onSymbol(t_symbol* s) floatTo(0, v); } -void ConvHex2Int::onList(const AtomList& l) +void ConvHex2Int::onList(const AtomListView& lv) { AtomList res; - res.reserve(l.size()); - for (auto& a : l) { + res.reserve(lv.size()); + for (auto& a : lv) { t_symbol* s = a.asSymbol(nullptr); if (s) { char* end = nullptr; diff --git a/ceammc/ext/src/conv/conv_hex2int.h b/ceammc/ext/src/conv/conv_hex2int.h index 05858f8ace..102f177d5b 100644 --- a/ceammc/ext/src/conv/conv_hex2int.h +++ b/ceammc/ext/src/conv/conv_hex2int.h @@ -24,7 +24,7 @@ class ConvHex2Int : public BaseObject { ConvHex2Int(const PdArgs& args); void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; }; void setup_conv_hex2int(); diff --git a/ceammc/ext/src/conv/conv_lin2curve.cpp b/ceammc/ext/src/conv/conv_lin2curve.cpp index 8e173501b4..003ca570d5 100644 --- a/ceammc/ext/src/conv/conv_lin2curve.cpp +++ b/ceammc/ext/src/conv/conv_lin2curve.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_lin2curve.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" @@ -47,8 +48,33 @@ void Lin2Curve::onFloat(t_float value) floatTo(0, convert::lin2curve(value, x0, x1, y0, y1, curve)); } +void Lin2Curve::onList(const AtomListView& lv) +{ + const t_float x0 = in_from(); + const t_float x1 = in_to(); + const t_float y0 = out_from(); + const t_float y1 = out_to(); + const t_float curve = curve_->value(); + + auto type = clipType(); + + auto fn = [this, x0, x1, y0, y1, type, curve](t_float value) { + if (doClip(value, type)) + return value; + + return convert::lin2curve(value, x0, x1, y0, y1, curve); + }; + + SmallAtomList res; + res.reserve(lv.size()); + lv.mapFloat(fn, res); + listTo(0, res.view()); +} + void setup_conv_lin2curve() { ObjectFactory obj("conv.lin2curve"); obj.addAlias("lin->curve"); + + obj.setXletsInfo({ "float or list" }, { "list" }); } diff --git a/ceammc/ext/src/conv/conv_lin2curve.h b/ceammc/ext/src/conv/conv_lin2curve.h index 1e3a94a425..25618c8e26 100644 --- a/ceammc/ext/src/conv/conv_lin2curve.h +++ b/ceammc/ext/src/conv/conv_lin2curve.h @@ -24,6 +24,7 @@ class Lin2Curve : public BaseRangeConverter { public: Lin2Curve(const PdArgs& a); void onFloat(t_float value) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_LIN2CURVE_H diff --git a/ceammc/ext/src/conv/conv_lin2exp.cpp b/ceammc/ext/src/conv/conv_lin2exp.cpp index 6e9e68ede6..cc52be7e3d 100644 --- a/ceammc/ext/src/conv/conv_lin2exp.cpp +++ b/ceammc/ext/src/conv/conv_lin2exp.cpp @@ -7,6 +7,7 @@ // #include "conv_lin2exp.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "ceammc_log.h" @@ -40,8 +41,32 @@ void Lin2Exp::onFloat(t_float value) floatTo(0, convert::lin2exp(value, x0, x1, y0, y1)); } +void Lin2Exp::onList(const AtomListView& lv) +{ + const t_float x0 = in_from(); + const t_float x1 = in_to(); + const t_float y0 = out_from(); + const t_float y1 = out_to(); + + auto type = clipType(); + + auto fn = [this, x0, x1, y0, y1, type](t_float value) { + if (doClip(value, type)) + return value; + + return convert::lin2exp(value, x0, x1, y0, y1); + }; + + SmallAtomList res; + res.reserve(lv.size()); + lv.mapFloat(fn, res); + listTo(0, res.view()); +} + void setup_conv_lin2exp() { ObjectFactory obj("conv.lin2exp"); obj.addAlias("lin->exp"); + + obj.setXletsInfo({ "float or list" }, { "list" }); } diff --git a/ceammc/ext/src/conv/conv_lin2exp.h b/ceammc/ext/src/conv/conv_lin2exp.h index 614c3e4aa7..cafe10be22 100644 --- a/ceammc/ext/src/conv/conv_lin2exp.h +++ b/ceammc/ext/src/conv/conv_lin2exp.h @@ -22,6 +22,7 @@ class Lin2Exp : public BaseRangeConverter { public: Lin2Exp(const PdArgs& a); void onFloat(t_float value) override; + void onList(const AtomListView& lv) override; }; void setup_conv_lin2exp(); diff --git a/ceammc/ext/src/conv/conv_lin2lin.cpp b/ceammc/ext/src/conv/conv_lin2lin.cpp index 2c541c6e96..41657955a5 100644 --- a/ceammc/ext/src/conv/conv_lin2lin.cpp +++ b/ceammc/ext/src/conv/conv_lin2lin.cpp @@ -7,6 +7,7 @@ // #include "conv_lin2lin.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "ceammc_log.h" @@ -35,7 +36,7 @@ void Lin2Lin::onFloat(t_float value) floatTo(0, convert::lin2lin(value, x0, x1, y0, y1)); } -void Lin2Lin::onList(const AtomList& l) +void Lin2Lin::onList(const AtomListView& lv) { const t_float x0 = in_from(); const t_float x1 = in_to(); @@ -51,7 +52,10 @@ void Lin2Lin::onList(const AtomList& l) return convert::lin2lin(value, x0, x1, y0, y1); }; - listTo(0, l.mapFloat(fn)); + SmallAtomList res; + res.reserve(lv.size()); + lv.mapFloat(fn, res); + listTo(0, res.view()); } void setup_conv_lin2lin() @@ -59,4 +63,6 @@ void setup_conv_lin2lin() ObjectFactory obj("conv.lin2lin"); obj.addAlias("lin->lin"); obj.addAlias("l->l"); + + obj.setXletsInfo({ "float or list" }, { "list" }); } diff --git a/ceammc/ext/src/conv/conv_lin2lin.h b/ceammc/ext/src/conv/conv_lin2lin.h index 64b91d8eec..f2735cf483 100644 --- a/ceammc/ext/src/conv/conv_lin2lin.h +++ b/ceammc/ext/src/conv/conv_lin2lin.h @@ -22,7 +22,7 @@ class Lin2Lin : public BaseRangeConverter { public: Lin2Lin(const PdArgs& a); void onFloat(t_float value) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; }; void setup_conv_lin2lin(); diff --git a/ceammc/ext/src/conv/conv_list2props.cpp b/ceammc/ext/src/conv/conv_list2props.cpp index 784bde2ba2..7801ed2651 100644 --- a/ceammc/ext/src/conv/conv_list2props.cpp +++ b/ceammc/ext/src/conv/conv_list2props.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_list2props.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" ConvList2Props::ConvList2Props(const PdArgs& args) @@ -21,31 +22,48 @@ ConvList2Props::ConvList2Props(const PdArgs& args) createOutlet(); } -void ConvList2Props::onList(const AtomList& lst) +void ConvList2Props::onList(const AtomListView& lv) { - AtomList non_props; - for (auto& a : lst) { + SmallAtomList non_props; + for (auto& a : lv) { if (a.isProperty()) break; - non_props.append(a); + non_props.push_back(a); } - listTo(1, non_props); + listTo(1, non_props.view()); - auto props = lst.properties(); - for (auto& l : props) - anyTo(0, l); + SmallAtomList props; + bool on_prop = false; + for (auto& a : lv) { + if (a.isProperty()) { + if (on_prop) { + anyTo(0, props.view()); + props.clear(); + props.push_back(a); + } else { + props.push_back(a); + on_prop = true; + } + } else if (on_prop) + props.push_back(a); + } + + // output last property + if (!props.empty()) + anyTo(0, props.view()); } -void ConvList2Props::onAny(t_symbol* s, const AtomListView& lst) +void ConvList2Props::onAny(t_symbol* s, const AtomListView& lv) { - AtomList lprop(s); - lprop.append(lst); - onList(lprop); + SmallAtomList res { s }; + res.reserve(lv.size() + 1); + res.insert(res.end(), lv.begin(), lv.end()); + onList(res.view()); } -bool ConvList2Props::processAnyProps(t_symbol* sel, const AtomListView& lst) +bool ConvList2Props::processAnyProps(t_symbol* sel, const AtomListView&) { return false; } diff --git a/ceammc/ext/src/conv/conv_list2props.h b/ceammc/ext/src/conv/conv_list2props.h index 899dbea089..6f526aa757 100644 --- a/ceammc/ext/src/conv/conv_list2props.h +++ b/ceammc/ext/src/conv/conv_list2props.h @@ -20,9 +20,9 @@ using namespace ceammc; class ConvList2Props : public BaseObject { public: ConvList2Props(const PdArgs& args); - void onList(const AtomList& lst) override; - void onAny(t_symbol* s, const AtomListView& lst) override; - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; + bool processAnyProps(t_symbol* sel, const AtomListView&) override; }; void setup_conv_list2props(); diff --git a/ceammc/ext/src/conv/conv_midi2freq.cpp b/ceammc/ext/src/conv/conv_midi2freq.cpp index db1a7fc4a2..89a409a244 100644 --- a/ceammc/ext/src/conv/conv_midi2freq.cpp +++ b/ceammc/ext/src/conv/conv_midi2freq.cpp @@ -1,4 +1,5 @@ #include "conv_midi2freq.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "ceammc_music_temperament.h" @@ -61,21 +62,12 @@ void Midi2Freq::onFloat(t_float f) floatTo(0, music::to_freq(f, to_temp(prop_temperament_->value()), base_a_->value())); } -void Midi2Freq::onList(const AtomList& lst) +void Midi2Freq::onList(const AtomListView& lv) { - AtomList res(lst); + SmallAtomList res; const auto A_BASE = base_a_->value(); - - for (auto& el : res) { - if (!el.isFloat()) { - el.setFloat(0, true); - continue; - } - - el.setFloat(convert::midi2freq(el.asFloat(), A_BASE)); - } - - listTo(0, res); + lv.mapFloat([A_BASE](t_float f) { return convert::midi2freq(f, A_BASE); }, res); + listTo(0, res.view()); } void setup_conv_midi2freq() diff --git a/ceammc/ext/src/conv/conv_midi2freq.h b/ceammc/ext/src/conv/conv_midi2freq.h index 960e01b7ad..f430d58002 100644 --- a/ceammc/ext/src/conv/conv_midi2freq.h +++ b/ceammc/ext/src/conv/conv_midi2freq.h @@ -13,7 +13,7 @@ class Midi2Freq : public BaseObject { public: Midi2Freq(const PdArgs& args); void onFloat(t_float f) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; void setup_conv_midi2freq(); diff --git a/ceammc/ext/src/conv/conv_ms2samp.cpp b/ceammc/ext/src/conv/conv_ms2samp.cpp index 4f5bc3d5ec..9cb235f1f4 100644 --- a/ceammc/ext/src/conv/conv_ms2samp.cpp +++ b/ceammc/ext/src/conv/conv_ms2samp.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_ms2samp.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" MsToSample::MsToSample(const PdArgs& a) @@ -25,9 +26,14 @@ void MsToSample::onFloat(t_float v) floatTo(0, v * sys_getsr() * 0.001); } -void MsToSample::onList(const AtomList& lst) +void MsToSample::onList(const AtomListView& lv) { - listTo(0, lst * sys_getsr() * 0.001); + SmallAtomList res; + res.reserve(lv.size()); + for (auto& a : lv) + res.push_back(a * sys_getsr() * 0.001); + + listTo(0, res.view()); } MsToSampleTilde::MsToSampleTilde(const PdArgs& a) diff --git a/ceammc/ext/src/conv/conv_ms2samp.h b/ceammc/ext/src/conv/conv_ms2samp.h index 92d7004aa2..452b959212 100644 --- a/ceammc/ext/src/conv/conv_ms2samp.h +++ b/ceammc/ext/src/conv/conv_ms2samp.h @@ -23,7 +23,7 @@ class MsToSample : public BaseObject { public: MsToSample(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; class MsToSampleTilde : public SoundExternal { diff --git a/ceammc/ext/src/conv/conv_note2guido.cpp b/ceammc/ext/src/conv/conv_note2guido.cpp new file mode 100644 index 0000000000..0fae22e88e --- /dev/null +++ b/ceammc/ext/src/conv/conv_note2guido.cpp @@ -0,0 +1,108 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "conv_note2guido.h" +#include "ceammc_containers.h" +#include "ceammc_convert.h" +#include "ceammc_factory.h" +#include "ceammc_music_theory.h" +#include "ceammc_music_theory_pitch_class.h" + +#include + +using namespace ceammc::music; + +ConvNote2Guido::ConvNote2Guido(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); +} + +void ConvNote2Guido::onFloat(t_float f) +{ + auto n = guidoNote(f); + symbolTo(0, gensym(n.c_str())); +} + +void ConvNote2Guido::onList(const AtomListView& lv) +{ + AtomList64 data; + data.insert_back(lv.begin(), lv.end()); + + for (auto& a : data) { + if (a.isFloat()) + a.setSymbol(gensym(guidoNote(a.asT()).c_str()), true); + } + + listTo(0, data.view()); +} + +void ConvNote2Guido::m_note(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "expected: PITCH DURATION, git: " << lv; + return; + } + + auto p = lv[0].asT(); + auto d = lv[1].asT(); + + int dots = 0; + const auto fm = std::fmod(d, 1); + if (fm == 0.5) + dots = 1; + else if (fm == 0.25) + dots = 2; + else if (fm == 0.125) + dots = 3; + + auto n = guidoNote(p, d, dots); + symbolTo(0, gensym(n.c_str())); +} + +ConvNote2Guido::GuidoNote ConvNote2Guido::guidoNote(int midiPitch, int dur, int dots) const +{ + const bool is_note = midiPitch >= 0; + GuidoNote res; + char buf[16]; + + if (is_note) { + Tonality t(PitchClass::C, MAJOR); + auto pc = Tonality::correctAlteration(midiPitch, t, ALTERATE_UP); + auto name = music::to_string(pc, NAMING_SCHEME_GUIDO); + res = name.c_str(); + + const int oct = int(clip(midiPitch) / 12) - 4; + sprintf(buf, "%d", oct); + res += buf; + } else + res += '_'; + + if (dur > 0) { + sprintf(buf, "/%d", dur); + res += buf; + } + + while (dots-- > 0) + res.push_back('.'); + + return res; +} + +void setup_conv_note2guido() +{ + ObjectFactory obj("conv.note2guido"); + obj.addAlias("note->guido"); + + obj.addMethod("note", &ConvNote2Guido::m_note); +} diff --git a/ceammc/ext/src/conv/conv_note2guido.h b/ceammc/ext/src/conv/conv_note2guido.h new file mode 100644 index 0000000000..f57d7a5409 --- /dev/null +++ b/ceammc/ext/src/conv/conv_note2guido.h @@ -0,0 +1,39 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CONV_NOTE2GUIDO_H +#define CONV_NOTE2GUIDO_H + +#include + +#include "ceammc_datatypes.h" +#include "ceammc_object.h" +using namespace ceammc; + +class ConvNote2Guido : public BaseObject { + using GuidoNote = BoostStaticString<15>; + +public: + ConvNote2Guido(const PdArgs& args); + + void onFloat(t_float f) final; + void onList(const AtomListView& lv) override; + + void m_note(t_symbol* s, const AtomListView& lv); +public: + GuidoNote guidoNote(int midiPitch, int dur = -1, int dots = 0) const; +}; + +void setup_conv_note2guido(); + +#endif // CONV_NOTE2GUIDO_H diff --git a/ceammc/ext/src/conv/conv_pitch2midi.cpp b/ceammc/ext/src/conv/conv_pitch2midi.cpp index 8ad29bb9e4..68e0335b02 100644 --- a/ceammc/ext/src/conv/conv_pitch2midi.cpp +++ b/ceammc/ext/src/conv/conv_pitch2midi.cpp @@ -1,4 +1,5 @@ #include "conv_pitch2midi.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_factory.h" #include "datatype_mlist.h" @@ -39,12 +40,12 @@ void PitchToMIDI::onSymbol(t_symbol* p) convert(p->s_name); } -void PitchToMIDI::onList(const AtomList& lst) +void PitchToMIDI::onList(const AtomListView& lv) { - Atom res[lst.size()]; - int n = 0; + AtomList256 res; + res.reserve(lv.size()); - for (auto& a : lst) { + for (auto& a : lv) { if (!a.isSymbol()) continue; @@ -53,12 +54,12 @@ void PitchToMIDI::onList(const AtomList& lst) OBJ_ERR << "invalid pitch: " << a; continue; } else if (note == convert::MIDI_REST) - res[n++] = -1; + res.push_back(-1); else - res[n++] = note; + res.push_back(note); } - listTo(0, AtomListView(res, n)); + listTo(0, res.view()); } void setup_conv_pitch2midi() diff --git a/ceammc/ext/src/conv/conv_pitch2midi.h b/ceammc/ext/src/conv/conv_pitch2midi.h index b789f8df0d..7c38af07ee 100644 --- a/ceammc/ext/src/conv/conv_pitch2midi.h +++ b/ceammc/ext/src/conv/conv_pitch2midi.h @@ -11,7 +11,7 @@ class PitchToMIDI : public BaseObject { PitchToMIDI(const PdArgs& a); void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onDataT(const StringAtom& s); void onDataT(const MListAtom& ml); diff --git a/ceammc/ext/src/conv/conv_samp2ms.cpp b/ceammc/ext/src/conv/conv_samp2ms.cpp index 71efd18b0f..5e66176a7a 100644 --- a/ceammc/ext/src/conv/conv_samp2ms.cpp +++ b/ceammc/ext/src/conv/conv_samp2ms.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_samp2ms.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" SampleToMs::SampleToMs(const PdArgs& a) @@ -25,9 +26,14 @@ void SampleToMs::onFloat(t_float v) floatTo(0, (v * 1000) / sys_getsr()); } -void SampleToMs::onList(const AtomList& lst) +void SampleToMs::onList(const AtomListView& lv) { - listTo(0, (lst * 1000) / sys_getsr()); + SmallAtomList res; + res.reserve(lv.size()); + for (auto& a : lv) + res.push_back((a * 1000) / sys_getsr()); + + listTo(0, res.view()); } SampleToMsTilde::SampleToMsTilde(const PdArgs& a) diff --git a/ceammc/ext/src/conv/conv_samp2ms.h b/ceammc/ext/src/conv/conv_samp2ms.h index 88441d4d20..b062c58c2f 100644 --- a/ceammc/ext/src/conv/conv_samp2ms.h +++ b/ceammc/ext/src/conv/conv_samp2ms.h @@ -23,7 +23,7 @@ class SampleToMs : public BaseObject { public: SampleToMs(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; class SampleToMsTilde : public SoundExternal { diff --git a/ceammc/ext/src/conv/conv_samp2sec.cpp b/ceammc/ext/src/conv/conv_samp2sec.cpp index d3d43eb44f..3e58f1745c 100644 --- a/ceammc/ext/src/conv/conv_samp2sec.cpp +++ b/ceammc/ext/src/conv/conv_samp2sec.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_samp2sec.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" SampleToSec::SampleToSec(const PdArgs& a) @@ -25,9 +26,14 @@ void SampleToSec::onFloat(t_float v) floatTo(0, v / sys_getsr()); } -void SampleToSec::onList(const AtomList& lst) +void SampleToSec::onList(const AtomListView& lv) { - listTo(0, lst / sys_getsr()); + SmallAtomList res; + res.reserve(lv.size()); + for (auto& a : lv) + res.push_back(a / sys_getsr()); + + listTo(0, res.view()); } void setup_conv_samp2sec() diff --git a/ceammc/ext/src/conv/conv_samp2sec.h b/ceammc/ext/src/conv/conv_samp2sec.h index 86c5b476f7..3f83f5fd8b 100644 --- a/ceammc/ext/src/conv/conv_samp2sec.h +++ b/ceammc/ext/src/conv/conv_samp2sec.h @@ -22,7 +22,7 @@ class SampleToSec : public BaseObject { public: SampleToSec(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_SAMP2SEC_H diff --git a/ceammc/ext/src/conv/conv_sec2samp.cpp b/ceammc/ext/src/conv/conv_sec2samp.cpp index 08c235abef..9be1869451 100644 --- a/ceammc/ext/src/conv/conv_sec2samp.cpp +++ b/ceammc/ext/src/conv/conv_sec2samp.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "conv_sec2samp.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" SecondToSample::SecondToSample(const PdArgs& a) @@ -25,9 +26,14 @@ void SecondToSample::onFloat(t_float v) floatTo(0, v * sys_getsr()); } -void SecondToSample::onList(const AtomList& lst) +void SecondToSample::onList(const AtomListView& lv) { - listTo(0, lst * sys_getsr()); + SmallAtomList res; + res.reserve(lv.size()); + for (auto& a : lv) + res.push_back(a * sys_getsr()); + + listTo(0, res.view()); } void setup_conv_sec2samp() diff --git a/ceammc/ext/src/conv/conv_sec2samp.h b/ceammc/ext/src/conv/conv_sec2samp.h index 0c870d123b..7e1127e0c6 100644 --- a/ceammc/ext/src/conv/conv_sec2samp.h +++ b/ceammc/ext/src/conv/conv_sec2samp.h @@ -22,7 +22,7 @@ class SecondToSample : public BaseObject { public: SecondToSample(const PdArgs& a); void onFloat(t_float v) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; }; #endif // CONV_SEC2SAMP_H diff --git a/ceammc/ext/src/conv/mod_conv.cpp b/ceammc/ext/src/conv/mod_conv.cpp index c5faa96457..e06d5e9d10 100644 --- a/ceammc/ext/src/conv/mod_conv.cpp +++ b/ceammc/ext/src/conv/mod_conv.cpp @@ -38,6 +38,8 @@ void setup_conv_bits2int(); void setup_conv_bits2note(); void setup_conv_bits2pos(); +void setup_conv_note2guido(); + void ceammc_conv_setup() { setup_conv_sec2str(); @@ -78,4 +80,6 @@ void ceammc_conv_setup() setup_conv_sig2float(); setup_conv_edge2bang(); + + setup_conv_note2guido(); } diff --git a/ceammc/ext/src/conv/simple_converter.h b/ceammc/ext/src/conv/simple_converter.h index 4f3e8ee9d7..e54ed97adf 100644 --- a/ceammc/ext/src/conv/simple_converter.h +++ b/ceammc/ext/src/conv/simple_converter.h @@ -16,6 +16,7 @@ #include +#include "ceammc_containers.h" #include "ceammc_object.h" #include "ceammc_sound_external.h" using namespace ceammc; @@ -37,16 +38,12 @@ class SimpleConverter : public BaseObject { floatTo(0, fn_(v)); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - AtomList res; - res.reserve(l.size()); - - for (auto& a : l) { - res.append(Atom(fn_(a.asFloat()))); - } - - listTo(0, res); + SmallAtomList res; + res.reserve(lv.size()); + lv.mapFloat(fn_, res); + listTo(0, res.view()); } }; diff --git a/ceammc/ext/src/data/CMakeLists.txt b/ceammc/ext/src/data/CMakeLists.txt index 07eb5540d5..6a32fd603f 100644 --- a/ceammc/ext/src/data/CMakeLists.txt +++ b/ceammc/ext/src/data/CMakeLists.txt @@ -1,8 +1,13 @@ -set(DATA_SOURCES datatype_set.cpp dict_base.cpp) +add_library(ceammc_data STATIC + mod_data.h mod_data.cpp + dict_base.cpp + local_base.cpp + editor_data.cpp +) -macro(ceammc_data_external mod name) - list(APPEND DATA_SOURCES "${mod}_${name}.cpp") -endmacro() +function(ceammc_data_external mod name) + target_sources(ceammc_data PRIVATE "${mod}_${name}.cpp") +endfunction() ceammc_data_external(data copy) ceammc_data_external(data dict) @@ -52,4 +57,5 @@ ceammc_data_external(local set) ceammc_data_external(rtree to_list) -add_library(ceammc_data STATIC mod_data.h mod_data.cpp ${DATA_SOURCES}) +target_include_directories(ceammc_data PRIVATE "$") + diff --git a/ceammc/ext/src/data/data_dict.cpp b/ceammc/ext/src/data/data_dict.cpp index 3c422912f6..193acb6c1d 100644 --- a/ceammc/ext/src/data/data_dict.cpp +++ b/ceammc/ext/src/data/data_dict.cpp @@ -14,10 +14,10 @@ #include "data_dict.h" DataDict::DataDict(const PdArgs& args) - : DictIFace(args) + : DataDictBase(args) { - if (args.args.size() > 0) - dict_->fromString(to_string(args.args)); + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); + dict_->setFromDataList(args.args); createOutlet(); } @@ -30,4 +30,6 @@ void setup_data_dict() obj.setXletsInfo({ "bang: output\n" "methods: add, clear, get_key, set_key, remove, set, read, write" }, { "data: dict" }); + + DataDict::registerMethods(obj); } diff --git a/ceammc/ext/src/data/data_dict.h b/ceammc/ext/src/data/data_dict.h index 9d54e97991..9277f01b4b 100644 --- a/ceammc/ext/src/data/data_dict.h +++ b/ceammc/ext/src/data/data_dict.h @@ -15,16 +15,24 @@ #define DATA_DICT_H #include "dict_iface.h" +#include "editor_data.h" using namespace ceammc; -class DataDict : public DictIFace { +using DataDictBase = EditorDataT, DataTypeDict>; + +class DataDict : public DataDictBase { DictAtom dict_; public: DataDict(const PdArgs& args); - const DictAtom& dict() const override { return dict_; } - DictAtom& dict() override { return dict_; } + const DictAtom& dict() const final { return dict_; } + DictAtom& dict() final { return dict_; } + + const DataTypeDict& editorData() const final { return *dict_; } + DataTypeDict& editorData() final { return *dict_; } + + EditorTitleString editorTitle() const final { return "Dict"; } }; void setup_data_dict(); diff --git a/ceammc/ext/src/data/data_fifo.cpp b/ceammc/ext/src/data/data_fifo.cpp index 54802e9e6e..7ac0619e96 100644 --- a/ceammc/ext/src/data/data_fifo.cpp +++ b/ceammc/ext/src/data/data_fifo.cpp @@ -1,4 +1,6 @@ #include "data_fifo.h" +#include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" #include "ceammc_format.h" #include "ceammc_log.h" @@ -8,7 +10,7 @@ constexpr size_t MIN_SIZE = 1; constexpr size_t MAX_SIZE = 1024; DataFifo::DataFifo(const PdArgs& args) - : BaseObject(args) + : EditorObject(args) , size_(positionalConstant(0)) { createCbBoolProperty("@empty", [this]() -> bool { return fifo_.empty(); }); @@ -22,6 +24,8 @@ DataFifo::DataFifo(const PdArgs& args) ->checkNonNegative(); createOutlet(); + + setHighlightSyntax(EDITOR_SYNTAX_SELECTOR); } void DataFifo::onBang() { flush(); } @@ -30,9 +34,9 @@ void DataFifo::onFloat(t_float v) { add(Atom(v)); } void DataFifo::onSymbol(t_symbol* s) { add(Atom(s)); } -void DataFifo::onList(const AtomList& lst) { add(lst); } +void DataFifo::onList(const AtomListView& lv) { add(lv); } -void DataFifo::onAny(t_symbol* s, const AtomListView& lst) { add(Message(s, lst)); } +void DataFifo::onAny(t_symbol* s, const AtomListView& lv) { add(Message(s, lv)); } void DataFifo::m_flush(t_symbol*, const AtomListView&) { flush(); } @@ -97,6 +101,90 @@ void DataFifo::dump() const } } +void DataFifo::editorAddLine(t_symbol* sel, const AtomListView& lv) +{ + const auto N = lv.size(); + + if (N > 0) { + switch (lv[0].type()) { + case Atom::FLOAT: + if (N == 1) // single float + return add(lv[0].asT()); + else + return add(lv); // list + case Atom::PROPERTY: + case Atom::SYMBOL: { + const auto sel = lv[0].asT(); + const auto sel_hash = crc32_hash(sel); + if (N == 2 && sel_hash == "symbol"_hash && lv[1].isSymbol()) { // symbol FOO + OBJ_ERR << "here"; + return add(lv[1].asT()); + } else if (N == 2 && sel_hash == "float"_hash && lv[1].isFloat()) { // float X + return add(lv[1].asT()); + } else if (sel_hash == "list"_hash) { // list .... + return add(lv.subView(1)); + } else + return add({ sel, lv.subView(1) }); + } + default: + break; + } + } +} + +void DataFifo::editorClear() +{ + clear(); +} + +EditorLineList DataFifo::getContentForEditor() const +{ + EditorLineList res; + res.reserve(fifo_.size()); + + for (auto& m : fifo_) { + switch (m.type()) { + case Message::SYMBOL: { + EditorStringPtr str = EditorStringPool::pool().allocate(); + str->append("symbol "); + str->append(m.atomValue()); + res.push_back(str); + } break; + case Message::FLOAT: { + EditorStringPtr str = EditorStringPool::pool().allocate(); + str->append("float "); + str->append(m.atomValue()); + res.push_back(str); + } break; + case Message::LIST: { + EditorStringPtr str = EditorStringPool::pool().allocate(); + str->append("list "); + str->append(m.listValue().view()); + res.push_back(str); + } break; + default: { + EditorStringPtr str = EditorStringPool::pool().allocate(); + str->append(m.atomValue()); + str->append(" "); + str->append(m.listValue().view()); + res.push_back(str); + } break; + } + } + + return res; +} + +int DataFifo::calcEditorLines() const +{ + return clip(fifo_.size()); +} + +int DataFifo::calcEditorChars() const +{ + return 48; +} + void setup_data_fifo() { ObjectFactory obj("data.fifo"); @@ -104,4 +192,6 @@ void setup_data_fifo() obj.addMethod("clear", &DataFifo::m_clear); obj.addMethod("pop", &DataFifo::m_pop); obj.addMethod("resize", &DataFifo::m_resize); + + DataFifo::registerMethods(obj); } diff --git a/ceammc/ext/src/data/data_fifo.h b/ceammc/ext/src/data/data_fifo.h index 4866debc09..8098ba5b45 100644 --- a/ceammc/ext/src/data/data_fifo.h +++ b/ceammc/ext/src/data/data_fifo.h @@ -14,18 +14,17 @@ #ifndef DATA_FIFO_H #define DATA_FIFO_H +#include "ceammc_editor_object.h" #include "ceammc_message.h" #include "ceammc_object.h" -using namespace ceammc; - #include using namespace ceammc; using MessageFifo = std::list; -class DataFifo : public BaseObject { +class DataFifo : public EditorObject { MessageFifo fifo_; size_t size_; @@ -35,8 +34,8 @@ class DataFifo : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; - void onAny(t_symbol* s, const AtomListView& lst) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; void m_flush(t_symbol*, const AtomListView&); void m_clear(t_symbol*, const AtomListView&); @@ -56,6 +55,14 @@ class DataFifo : public BaseObject { void resize(size_t sz); void dump() const override; + + // editor methods + void editorAddLine(t_symbol* sel, const AtomListView& lv) final; + void editorClear() final; + EditorLineList getContentForEditor() const final; + int calcEditorLines() const final; + int calcEditorChars() const final; + EditorTitleString editorTitle() const final { return "DATA.FIFO"; } }; void setup_data_fifo(); diff --git a/ceammc/ext/src/data/data_list.cpp b/ceammc/ext/src/data/data_list.cpp index 025a37d68e..aafe887dc5 100644 --- a/ceammc/ext/src/data/data_list.cpp +++ b/ceammc/ext/src/data/data_list.cpp @@ -1,9 +1,10 @@ #include "data_list.h" +#include "ceammc_convert.h" #include "ceammc_factory.h" #include "datatype_mlist.h" DataList::DataList(const PdArgs& a) - : DataListIFace(a) + : EditorListT>(a) { createInlet(); createOutlet(); @@ -11,7 +12,7 @@ DataList::DataList(const PdArgs& a) createCbListProperty( "@value", [this]() -> AtomList { return list_; }, - [this](const AtomList& l) -> bool {list_ = l; return true; }) + [this](const AtomListView& lv) -> bool { list_ = lv; return true; }) ->setArgIndex(0); } @@ -19,4 +20,6 @@ void setup_data_list() { ListIFaceFactory obj("data.list"); obj.processData(); + + DataList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/data_list.h b/ceammc/ext/src/data/data_list.h index 6662685a2d..c81f062208 100644 --- a/ceammc/ext/src/data/data_list.h +++ b/ceammc/ext/src/data/data_list.h @@ -15,15 +15,19 @@ #define DATA_LIST_H #include "datatype_mlist.h" +#include "editor_list.h" #include "list_iface.h" -class DataList : public DataListIFace { +class DataList : public EditorListT> { AtomList list_; public: DataList(const PdArgs& a); + AtomList& list() final { return list_; } const AtomList& list() const final { return list_; } + + EditorTitleString editorTitle() const final { return "DATA.LIST"; } }; void setup_data_list(); diff --git a/ceammc/ext/src/data/data_mlist.cpp b/ceammc/ext/src/data/data_mlist.cpp index 8a7db11f55..480593f6c6 100644 --- a/ceammc/ext/src/data/data_mlist.cpp +++ b/ceammc/ext/src/data/data_mlist.cpp @@ -14,12 +14,12 @@ #include "data_mlist.h" #include "ceammc_data.h" #include "ceammc_factory.h" -#include "ceammc_format.h" DataMList::DataMList(const PdArgs& args) : DataMListBase(args) { - mlist()->setParsed(args.args); + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); + mlist_->setFromDataList(args.args); createOutlet(); } @@ -31,4 +31,6 @@ void setup_data_mlist() obj.addAlias("ml"); obj.processData(); obj.noArgsAndPropsParse(); + + DataMList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/data_mlist.h b/ceammc/ext/src/data/data_mlist.h index fb84632392..959e62c23c 100644 --- a/ceammc/ext/src/data/data_mlist.h +++ b/ceammc/ext/src/data/data_mlist.h @@ -15,9 +15,10 @@ #define DATA_MLIST_H #include "ceammc_data.h" +#include "editor_data.h" #include "mlist_iface.h" -using DataMListBase = DataMListIFace; +using DataMListBase = EditorDataT, DataTypeMList>; class DataMList : public DataMListBase { MListAtom mlist_; @@ -25,8 +26,13 @@ class DataMList : public DataMListBase { public: DataMList(const PdArgs& args); - MListAtom& mlist() { return mlist_; } - const MListAtom& mlist() const { return mlist_; } + const DataTypeMList& editorData() const final { return *mlist_; } + DataTypeMList& editorData() final { return *mlist_; } + + MListAtom& mlist() final { return mlist_; } + const MListAtom& mlist() const final { return mlist_; } + + EditorTitleString editorTitle() const final { return "MList"; } }; void setup_data_mlist(); diff --git a/ceammc/ext/src/data/data_protocol.h b/ceammc/ext/src/data/data_protocol.h index eb0f5c7e4c..567790507c 100644 --- a/ceammc/ext/src/data/data_protocol.h +++ b/ceammc/ext/src/data/data_protocol.h @@ -33,9 +33,9 @@ class BaseIFace : public T { static_assert(std::is_base_of::value, "need to be ancestor of BaseObject"); } - void m_set(t_symbol* /*s*/, const AtomListView& lst) + void m_set(t_symbol* /*s*/, const AtomListView& lv) { - proto_set(lst); + proto_set(lv); } virtual void proto_set(const AtomListView&) = 0; @@ -62,24 +62,24 @@ class NumericIFace : public BaseIFace { onBang(); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - if (l.empty()) { + if (lv.empty()) { OBJ_ERR << "empty list"; return; } - if (!l[0].isFloat()) { - OBJ_ERR << "non a number: " << l[0]; + if (!lv[0].isFloat()) { + OBJ_ERR << "non a number: " << lv[0]; return; } - onFloat(l[0].asFloat()); + onFloat(lv[0].asT()); } - void onInlet(size_t /*n*/, const AtomListView& lst) override + void onInlet(size_t /*n*/, const AtomListView& lv) override { - proto_set(lst); + proto_set(lv); } AtomList propValue() const @@ -87,44 +87,44 @@ class NumericIFace : public BaseIFace { return Atom(value()); } - void m_plus(t_symbol* s, const AtomListView& lst) + void m_plus(t_symbol* s, const AtomListView& lv) { - if (!T::checkArgs(lst, T::ARG_FLOAT) || lst.size() != 1) { - METHOD_ERR(s) << "single numeric argument expected: " << lst; + if (!T::checkArgs(lv, T::ARG_FLOAT) || lv.size() != 1) { + METHOD_ERR(s) << "single numeric argument expected: " << lv; return; } - value() += NumType(lst[0].asFloat()); + value() += NumType(lv[0].asT()); } - void m_minus(t_symbol* s, const AtomListView& lst) + void m_minus(t_symbol* s, const AtomListView& lv) { - if (!T::checkArgs(lst, T::ARG_FLOAT) || lst.size() != 1) { - METHOD_ERR(s) << "single numeric argument expected: " << lst; + if (!T::checkArgs(lv, T::ARG_FLOAT) || lv.size() != 1) { + METHOD_ERR(s) << "single numeric argument expected: " << lv; return; } - value() -= NumType(lst[0].asFloat()); + value() -= NumType(lv[0].asFloat()); } - void m_mul(t_symbol* s, const AtomListView& lst) + void m_mul(t_symbol* s, const AtomListView& lv) { - if (!T::checkArgs(lst, T::ARG_FLOAT) || lst.size() != 1) { - METHOD_ERR(s) << "single numeric argument expected: " << lst; + if (!T::checkArgs(lv, T::ARG_FLOAT) || lv.size() != 1) { + METHOD_ERR(s) << "single numeric argument expected: " << lv; return; } - value() *= NumType(lst[0].asFloat()); + value() *= NumType(lv[0].asFloat()); } - void m_div(t_symbol* s, const AtomListView& lst) + void m_div(t_symbol* s, const AtomListView& lv) { - if (!T::checkArgs(lst, T::ARG_FLOAT) || lst.size() != 1) { - METHOD_ERR(s) << "single numeric argument expected: " << lst; + if (!T::checkArgs(lv, T::ARG_FLOAT) || lv.size() != 1) { + METHOD_ERR(s) << "single numeric argument expected: " << lv; return; } - t_float v = lst[0].asFloat(); + t_float v = lv[0].asFloat(); if (std::equal_to()(v, 0)) { METHOD_ERR(s) << "division by zero"; return; @@ -133,24 +133,24 @@ class NumericIFace : public BaseIFace { value() /= NumType(v); } - void m_set(t_symbol* /*s*/, const AtomListView& lst) + void m_set(t_symbol* /*s*/, const AtomListView& lv) { - proto_set(lst); + proto_set(lv); } virtual NumType& value() = 0; virtual const NumType& value() const = 0; - void proto_set(const AtomListView& lst) override + void proto_set(const AtomListView& lv) override { static t_symbol* SYM_SET = gensym("set"); - if (!T::checkArgs(lst, T::ARG_FLOAT)) { - METHOD_ERR(SYM_SET) << "numeric argument expected: " << lst; + if (!T::checkArgs(lv, T::ARG_FLOAT)) { + METHOD_ERR(SYM_SET) << "numeric argument expected: " << lv; return; } - value() = static_cast(lst[0].asFloat()); + value() = static_cast(lv[0].asFloat()); } }; @@ -166,31 +166,39 @@ class CollectionIFace : public BaseIFace { T::createCbBoolProperty("@empty", [this]() { return proto_size() == 0; }); } - virtual void proto_add(const AtomListView& lst) = 0; - virtual bool proto_remove(const AtomListView& lst) = 0; + virtual void proto_add(const AtomListView& lv) = 0; + virtual bool proto_remove(const AtomListView& lv) = 0; virtual void proto_clear() = 0; virtual size_t proto_size() const = 0; + virtual bool proto_choose(Atom& a) const = 0; - void m_add(t_symbol* s, const AtomListView& lst) + void m_add(t_symbol* s, const AtomListView& lv) { - if (lst.empty()) { + if (lv.empty()) { METHOD_ERR(s) << "empty list"; return; } - proto_add(lst); + proto_add(lv); } - void m_remove(t_symbol* s, const AtomListView& lst) + void m_remove(t_symbol* s, const AtomListView& lv) { - if (!proto_remove(lst)) - METHOD_ERR(s) << "can't remove element at: " << lst; + if (!proto_remove(lv)) + METHOD_ERR(s) << "can't remove element at: " << lv; } - void m_clear(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_clear(t_symbol* /*s*/, const AtomListView& /*lv*/) { proto_clear(); } + + void m_choose(t_symbol* /*s*/, const AtomListView& /*lv*/) + { + Atom a; + if (proto_choose(a)) + this->atomTo(0, a); + } }; template @@ -205,9 +213,17 @@ class ListIFace : public BaseIFace { T::createCbBoolProperty("@empty", [this]() { return proto_size() == 0; }); } - virtual void proto_append(const AtomListView& lst) = 0; - virtual void proto_prepend(const AtomListView& lst) = 0; - virtual bool proto_insert(size_t idx, const AtomListView& lst) = 0; + // get methods + virtual bool proto_at(int pos, Atom& a) const = 0; + virtual bool proto_back(Atom& a) const = 0; + virtual bool proto_front(Atom& a) const = 0; + virtual bool proto_choose(Atom& a) const = 0; + virtual size_t proto_size() const = 0; + + // change methods + virtual void proto_append(const AtomListView& lv) = 0; + virtual void proto_prepend(const AtomListView& lv) = 0; + virtual bool proto_insert(size_t idx, const AtomListView& lv) = 0; virtual bool proto_pop() = 0; virtual bool proto_removeAt(size_t idx) = 0; virtual void proto_clear() = 0; @@ -216,41 +232,39 @@ class ListIFace : public BaseIFace { virtual void proto_sort() = 0; virtual void proto_reverse() = 0; virtual void proto_shuffle() = 0; - virtual size_t proto_size() const = 0; - virtual void proto_choose() = 0; - void m_append(t_symbol* /*s*/, const AtomListView& lst) + void m_append(t_symbol* /*s*/, const AtomListView& lv) { - proto_append(lst); + proto_append(lv); } - void m_prepend(t_symbol* /*s*/, const AtomListView& lst) + void m_prepend(t_symbol* /*s*/, const AtomListView& lv) { - proto_prepend(lst); + proto_prepend(lv); } - void m_insert(t_symbol* s, const AtomListView& lst) + void m_insert(t_symbol* s, const AtomListView& lv) { - if (lst.size() < 2) { + if (lv.size() < 2) { METHOD_ERR(s) << "POS ARG expected"; return; } const size_t N = proto_size(); - int idx = lst[0].asInt(); + int idx = lv[0].asInt(); if (idx < 0) idx += N; if (idx > N || idx < 0) { - METHOD_ERR(s) << "invalid position: " << lst[0]; + METHOD_ERR(s) << "invalid position: " << lv[0]; return; } - if (!proto_insert(idx, lst.subView(1))) - METHOD_ERR(s) << "can't insert to " << lst[0]; + if (!proto_insert(idx, lv.subView(1))) + METHOD_ERR(s) << "can't insert to " << lv[0]; } - void m_pop(t_symbol* s, const AtomListView& /*lst*/) + void m_pop(t_symbol* s, const AtomListView& /*lv*/) { if (proto_size() < 1) { METHOD_ERR(s) << "empty collection"; @@ -260,60 +274,95 @@ class ListIFace : public BaseIFace { proto_pop(); } - void m_removeAt(t_symbol* s, const AtomListView& lst) + void m_removeAt(t_symbol* s, const AtomListView& lv) { - if (!T::checkArgs(lst, T::ARG_INT)) { + if (!T::checkArgs(lv, T::ARG_INT)) { METHOD_ERR(s) << "POS expected"; return; } const int N = proto_size(); - int idx = lst[0].asInt(); + int idx = lv[0].asInt(); if (idx < 0) idx += N; if (idx >= N || idx < 0) { - METHOD_ERR(s) << "invalid position: " << lst[0]; + METHOD_ERR(s) << "invalid position: " << lv[0]; return; } if (!proto_removeAt(idx)) - METHOD_ERR(s) << "can't remove element: " << lst[0]; + METHOD_ERR(s) << "can't remove element: " << lv[0]; } - void m_clear(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_clear(t_symbol* /*s*/, const AtomListView& /*lv*/) { proto_clear(); } - void m_fill(t_symbol* s, const AtomListView& lst) + void m_fill(t_symbol* s, const AtomListView& lv) { - if (lst.empty()) { + if (lv.empty()) { METHOD_ERR(s) << "fill value is required"; return; } - proto_fill(lst[0]); + proto_fill(lv[0]); } - void m_sort(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_sort(t_symbol* /*s*/, const AtomListView& /*lv*/) { proto_sort(); } - void m_reverse(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_reverse(t_symbol* /*s*/, const AtomListView& /*lv*/) { proto_reverse(); } - void m_shuffle(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_shuffle(t_symbol* /*s*/, const AtomListView& /*lv*/) { proto_shuffle(); } - void m_choose(t_symbol* /*s*/, const AtomListView& /*lst*/) + void m_choose(t_symbol* /*s*/, const AtomListView& /*lv*/) + { + Atom a; + if (proto_choose(a)) + this->atomTo(0, a); + } + + void m_front(t_symbol* s, const AtomListView& /*lv*/) + { + Atom a; + if (proto_front(a)) + this->atomTo(0, a); + else + METHOD_ERR(s) << "empty list"; + } + + void m_back(t_symbol* s, const AtomListView& /*lv*/) { - proto_choose(); + Atom a; + if (proto_back(a)) + this->atomTo(0, a); + else + METHOD_ERR(s) << "empty list"; + } + + void m_at(t_symbol* s, const AtomListView& lv) + { + const auto N = static_cast(proto_size()); + const bool ok = lv.isFloat() && lv[0].isInteger() && (lv[0].asT() >= (-N) && lv[0].asT() < N); + + if (!ok) { + METHOD_ERR(s) << "abs/relative index expected in [-" << N << "..+" << N << ") range"; + return; + } + + Atom a; + if (proto_at(lv[0].asT(), a)) + this->atomTo(0, a); } }; @@ -430,6 +479,9 @@ namespace protocol { // void proto_clear() obj.addMethod("clear", &T::m_clear); + + // void proto_choose(Atom&) + obj.addMethod("choose", &T::m_choose); } }; @@ -439,13 +491,13 @@ namespace protocol { SeqCollection(Factory& obj) : Base(obj) { - // void proto_append(const AtomList& lst) + // void proto_append(const AtomList& lv) obj.addMethod("append", &T::m_append); - // void proto_append(const AtomList& lst) + // void proto_append(const AtomList& lv) obj.addMethod("prepend", &T::m_prepend); - // bool proto_insert(int idx, const AtomList& lst) + // bool proto_insert(int idx, const AtomList& lv) obj.addMethod("insert", &T::m_insert); // bool proto_pop() @@ -471,6 +523,15 @@ namespace protocol { // void proto_choose() obj.addMethod("choose", &T::m_choose); + + // bool proto_front(Atom&) + obj.addMethod("front", &T::m_front); + + // bool proto_back(Atom&) + obj.addMethod("back", &T::m_back); + + // bool proto_at(int pos, Atom&) + obj.addMethod("at", &T::m_at); } }; diff --git a/ceammc/ext/src/data/data_set.cpp b/ceammc/ext/src/data/data_set.cpp index 13e2438316..1c0ff43a94 100644 --- a/ceammc/ext/src/data/data_set.cpp +++ b/ceammc/ext/src/data/data_set.cpp @@ -17,13 +17,12 @@ DataSet::DataSet(const PdArgs& a) : DataSetBase(a) { - auto p = createCbListProperty( - "@value", - [this]() -> AtomList { return set_.toList(); }, - [this](const AtomList& l) -> bool { set_ = DataTypeSet(l); return true; }); + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); - p->setArgIndex(0); - p->setInitOnly(); + if (set_.looksLikeCtor(a.args)) + set_.setFromDataList(a.args); + else + set_ = DataTypeSet(a.args); createOutlet(); } @@ -32,4 +31,6 @@ void setup_data_set() { ColectionIFaceFactory obj("data.set"); obj.processData(); + + DataSet::registerMethods(obj); } diff --git a/ceammc/ext/src/data/data_set.h b/ceammc/ext/src/data/data_set.h index af0d0dee3e..c66a531b72 100644 --- a/ceammc/ext/src/data/data_set.h +++ b/ceammc/ext/src/data/data_set.h @@ -16,10 +16,10 @@ #include "dataset_iface.h" #include "datatype_set.h" +#include "editor_data.h" using namespace ceammc; - -using DataSetBase = DataSetIface; +using DataSetBase = EditorDataT, DataTypeSet>; class DataSet : public DataSetBase { DataTypeSet set_; @@ -29,6 +29,11 @@ class DataSet : public DataSetBase { DataTypeSet& data() final { return set_; } const DataTypeSet& data() const final { return set_; } + + EditorTitleString editorTitle() const final { return "data::Set"; } + + DataTypeSet& editorData() final { return set_; } + const DataTypeSet& editorData() const final { return set_; } }; void setup_data_set(); diff --git a/ceammc/ext/src/data/dataset_iface.h b/ceammc/ext/src/data/dataset_iface.h index 6636da542c..c83028eba9 100644 --- a/ceammc/ext/src/data/dataset_iface.h +++ b/ceammc/ext/src/data/dataset_iface.h @@ -18,6 +18,9 @@ #include "data_protocol.h" #include "datatype_set.h" +#include +#include + using namespace ceammc; template @@ -49,9 +52,9 @@ class DataSetIface : public CollectionIFace { data().add(Atom(s)); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - data().add(l); + data().add(lv); } void onDataT(const SetAtom& s) @@ -60,9 +63,9 @@ class DataSetIface : public CollectionIFace { onBang(); } - void proto_add(const AtomListView& l) override + void proto_add(const AtomListView& lv) override { - data().add(l); + data().add(lv); } void proto_clear() override @@ -75,15 +78,20 @@ class DataSetIface : public CollectionIFace { return data().size(); } - bool proto_remove(const AtomListView& lst) override + bool proto_remove(const AtomListView& lv) override { - data().remove(lst); + data().remove(lv); return true; } - void proto_set(const AtomListView& lst) override + void proto_set(const AtomListView& lv) override + { + data() = DataTypeSet(lv); + } + + bool proto_choose(Atom& res) const override { - data() = DataTypeSet(lst); + return data().choose(res); } public: diff --git a/ceammc/ext/src/data/dict_base.cpp b/ceammc/ext/src/data/dict_base.cpp index 4304061aad..3f53455a06 100644 --- a/ceammc/ext/src/data/dict_base.cpp +++ b/ceammc/ext/src/data/dict_base.cpp @@ -32,7 +32,7 @@ void DictBase::onAny(t_symbol* s, const AtomListView& lst) } DictAtom dict; - if (dict->fromString(str)) + if (dict->setFromDataString(str)) onDataT(dict); else LIB_ERR << "not a dict: " << str; diff --git a/ceammc/ext/src/data/dict_contains.cpp b/ceammc/ext/src/data/dict_contains.cpp index 514637a449..ee6bd3c770 100644 --- a/ceammc/ext/src/data/dict_contains.cpp +++ b/ceammc/ext/src/data/dict_contains.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "dict_contains.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" #include "datatype_dict.h" @@ -27,9 +28,9 @@ DictContains::DictContains(const PdArgs& args) createOutlet(); } -void DictContains::onInlet(size_t n, const AtomListView& lst) +void DictContains::onInlet(size_t n, const AtomListView& lv) { - keys_->set(lst); + keys_->set(lv); } void DictContains::onDataT(const DictAtom& dict) @@ -39,12 +40,17 @@ void DictContains::onDataT(const DictAtom& dict) return; } - listTo(0, keys_->value().map([&dict](const Atom& a) -> Atom { - if (!a.isSymbol()) - return Atom(0.0); + SmallAtomList val; + keys_->value().view().map( + [&dict](const Atom& a) -> Atom { + if (!a.isSymbol()) + return Atom(0.0); - return Atom(dict->contains(a.asSymbol()) ? 1 : 0); - })); + return Atom(dict->contains(a.asSymbol()) ? 1 : 0); + }, + val); + + listTo(0, val.view()); } void setup_dict_contains() diff --git a/ceammc/ext/src/data/dict_contains.h b/ceammc/ext/src/data/dict_contains.h index 9f1966b30a..5a6957ce89 100644 --- a/ceammc/ext/src/data/dict_contains.h +++ b/ceammc/ext/src/data/dict_contains.h @@ -25,7 +25,7 @@ class DictContains : public DictBase { public: DictContains(const PdArgs& args); - void onInlet(size_t n, const AtomListView& lst) final; + void onInlet(size_t n, const AtomListView& lv) final; void onDataT(const DictAtom& dict) final; }; diff --git a/ceammc/ext/src/data/dict_each.h b/ceammc/ext/src/data/dict_each.h index ec41358da9..f9e870a2dc 100644 --- a/ceammc/ext/src/data/dict_each.h +++ b/ceammc/ext/src/data/dict_each.h @@ -27,7 +27,7 @@ class DictEach : public DictBase { public: DictEach(const PdArgs& args); - void onInlet(size_t n, const AtomListView& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; void onDataT(const DictAtom& dict) override; }; diff --git a/ceammc/ext/src/data/dict_from_list.cpp b/ceammc/ext/src/data/dict_from_list.cpp index e3f4d279f1..0905c1f5ec 100644 --- a/ceammc/ext/src/data/dict_from_list.cpp +++ b/ceammc/ext/src/data/dict_from_list.cpp @@ -31,10 +31,10 @@ DictFromList::DictFromList(const PdArgs& args) createOutlet(); } -void DictFromList::onList(const AtomList& l) +void DictFromList::onList(const AtomListView& lv) { DictAtom dict; - *dict = DataTypeDict::fromList(l, n_->value()); + *dict = DataTypeDict::fromList(lv, n_->value()); atomTo(0, dict); } diff --git a/ceammc/ext/src/data/dict_from_list.h b/ceammc/ext/src/data/dict_from_list.h index df8a3c0865..170c908af0 100644 --- a/ceammc/ext/src/data/dict_from_list.h +++ b/ceammc/ext/src/data/dict_from_list.h @@ -24,7 +24,7 @@ class DictFromList : public BaseObject { public: DictFromList(const PdArgs& args); - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onDataT(const MListAtom& ml); }; diff --git a/ceammc/ext/src/data/dict_get.cpp b/ceammc/ext/src/data/dict_get.cpp index 688e9613e5..c61819e0ec 100644 --- a/ceammc/ext/src/data/dict_get.cpp +++ b/ceammc/ext/src/data/dict_get.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "dict_get.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" static const size_t MAX_KEYS = 32; @@ -30,8 +31,8 @@ DictGet::DictGet(const PdArgs& args) return res; }, - [this](const AtomList& l) -> bool { - for (auto it = l.begin_atom_filter(isSymbol); it != l.end_atom_filter(); ++it) + [this](const AtomListView& lv) -> bool { + for (auto it = atom_filter_it_begin(lv, isSymbol); it != atom_filter_it_end(lv); ++it) keys_.push_back(it->asSymbol()); return true; @@ -40,14 +41,14 @@ DictGet::DictGet(const PdArgs& args) p->setInitOnly(); p->setArgIndex(0); - p->setListCheckFn([this](const AtomList& l) { - if (!l.anyOf(isSymbol)) { - OBJ_ERR << "only symbols are allowed as key, got: " << l; + p->setListCheckFn([this](const AtomListView& lv) { + if (!lv.anyOf(isSymbol)) { + OBJ_ERR << "only symbols are allowed as key, got: " << lv; return false; } - if (l.size() > MAX_KEYS) { - OBJ_ERR << "only " << MAX_KEYS << " max keys are allowed, got: " << l.size(); + if (lv.size() > MAX_KEYS) { + OBJ_ERR << "only " << MAX_KEYS << " max keys are allowed, got: " << lv.size(); return false; } diff --git a/ceammc/ext/src/data/dict_iface.h b/ceammc/ext/src/data/dict_iface.h index f4650beb2e..7efcd69a03 100644 --- a/ceammc/ext/src/data/dict_iface.h +++ b/ceammc/ext/src/data/dict_iface.h @@ -42,7 +42,7 @@ class DictIFace : public FilesystemIFace> { this->atomTo(0, dict()); } - void onList(const AtomList& args) override + void onList(const AtomListView& args) override { if (args.size() % 2 != 0) { OBJ_ERR << "list of key-value pairs expected: " << args; @@ -53,16 +53,16 @@ class DictIFace : public FilesystemIFace> { *dict() = DataTypeDict::fromList(args, 2); } - void onAny(t_symbol* s, const AtomListView& args) override + void onAny(t_symbol* s, const AtomListView& lv) override { std::string str(s->s_name); str += ' '; - str += to_string(args, " "); + str += to_string(lv, " "); dict().detachData(); - if (!dict()->fromString(str)) { - OBJ_ERR << "parse error: " << s << args; + if (!dict()->setFromDataString(str)) { + OBJ_ERR << "parse error: " << s << lv; return; } } @@ -87,39 +87,39 @@ class DictIFace : public FilesystemIFace> { this->listTo(0, dict()->at(k)); } - void m_set_key(t_symbol* s, const AtomListView& lst) + void m_set_key(t_symbol* s, const AtomListView& lv) { - if (lst.empty() || !lst[0].isSymbol()) { + if (lv.empty() || !lv[0].isSymbol()) { METHOD_ERR(s) << "key expected"; METHOD_ERR(s) << "usage: " << s << " KEY [VALUES...]"; return; } - auto key = lst[0].asSymbol(); + auto key = lv[0].asSymbol(); if (!dict()->contains(key)) { - METHOD_ERR(s) << "key not found: " << lst[0]; + METHOD_ERR(s) << "key not found: " << lv[0]; return; } dict().detachData(); - dict()->at(key) = lst.subView(1); + dict()->at(key) = lv.subView(1); } - void proto_add(const AtomListView& lst) override + void proto_add(const AtomListView& lv) override { - if (lst.empty() || !lst[0].isSymbol()) { + if (lv.empty() || !lv[0].isSymbol()) { OBJ_ERR << "Usage: add KEY [VALUES...]"; return; } dict().detachData(); - auto key = lst[0].asSymbol(); + auto key = lv[0].asSymbol(); - if (lst.size() == 2) - dict()->insert(key, lst[1]); + if (lv.size() == 2) + dict()->insert(key, lv[1]); else - dict()->insert(key, lst.subView(1)); + dict()->insert(key, lv.subView(1)); } void proto_clear() override @@ -128,23 +128,23 @@ class DictIFace : public FilesystemIFace> { dict()->clear(); } - void proto_set(const AtomListView& lst) override + void proto_set(const AtomListView& lv) override { dict().detachData(); - dict()->fromString(to_string(lst, " ")); + dict()->setFromDataList(lv); } - bool proto_remove(const AtomListView& lst) override + bool proto_remove(const AtomListView& lv) override { - if (lst.empty() || !lst.anyOf(isSymbol)) { - OBJ_ERR << "key list expected, got: " << lst; + if (lv.empty() || !lv.anyOf(isSymbol)) { + OBJ_ERR << "key list expected, got: " << lv; return false; } bool res = true; dict().detachData(); - for (auto& el : lst) { + for (auto& el : lv) { if (!dict()->remove(el.asSymbol())) { res = false; OBJ_ERR << "key not found: " << el; @@ -164,6 +164,11 @@ class DictIFace : public FilesystemIFace> { return dict()->write(path); } + bool proto_choose(Atom& key) const override + { + return dict()->choose(key); + } + bool proto_read(const std::string& path) override { dict().detachData(); diff --git a/ceammc/ext/src/data/dict_is.cpp b/ceammc/ext/src/data/dict_is.cpp index b484e4eca2..c1a5d8a42b 100644 --- a/ceammc/ext/src/data/dict_is.cpp +++ b/ceammc/ext/src/data/dict_is.cpp @@ -33,7 +33,7 @@ void IsDict::onSymbol(t_symbol*) boolTo(0, false); } -void IsDict::onList(const AtomList&) +void IsDict::onList(const AtomListView&) { boolTo(0, false); } diff --git a/ceammc/ext/src/data/dict_is.h b/ceammc/ext/src/data/dict_is.h index 297b4509c7..893a4f5cba 100644 --- a/ceammc/ext/src/data/dict_is.h +++ b/ceammc/ext/src/data/dict_is.h @@ -24,7 +24,7 @@ class IsDict : public BaseObject { IsDict(const PdArgs& args); void onFloat(t_float) override; void onSymbol(t_symbol*) override; - void onList(const AtomList&) override; + void onList(const AtomListView &) override; void onAny(t_symbol*, const AtomListView&) override; void onData(const Atom& ptr) override; }; diff --git a/ceammc/ext/src/data/dict_reject.h b/ceammc/ext/src/data/dict_reject.h index 9f0719ce3d..a671061e20 100644 --- a/ceammc/ext/src/data/dict_reject.h +++ b/ceammc/ext/src/data/dict_reject.h @@ -25,7 +25,7 @@ class DictReject : public DictBase { public: DictReject(const PdArgs& args); - void onInlet(size_t, const AtomListView& lst) override; + void onInlet(size_t, const AtomListView& lv) override; void onDataT(const DictAtom& dict) final; }; diff --git a/ceammc/ext/src/data/editor_data.cpp b/ceammc/ext/src/data/editor_data.cpp new file mode 100644 index 0000000000..a7751e1704 --- /dev/null +++ b/ceammc/ext/src/data/editor_data.cpp @@ -0,0 +1,185 @@ +#include "editor_data.h" +#include "ceammc_object.h" +#include "ceammc_string.h" +#include "datatype_dict.h" +#include "datatype_mlist.h" +#include "datatype_set.h" +#include "datatype_string.h" + +namespace ceammc { + +namespace { + void editorAppend(EditorLineList& res, const DataTypeMList& ml, int indentLevel); + void editorAppend(EditorLineList& res, const DataTypeDict& dict, int indentLevel); + + bool isSimpleList(const AtomListView& lv) + { + return lv.allOf([](const Atom& a) { return !a.isData(); }); + } + + void appendIndent(EditorStringPtr& str, int level) + { + str->append(std::string(level * 4, ' ')); + } + + void appendIndent(EditorLineList& res, const char* txt, int level) + { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, level); + str->append(txt); + res.push_back(str); + } + + void appendIndent(EditorLineList& res, char ch, int level) + { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, level); + str->append(ch); + res.push_back(str); + } + + template + void appendMultiLine(EditorLineList& res, const L& lst, int indentLevel) + { + // each value on separate line + for (auto& a : lst) { + if (a.template isA()) { + editorAppend(res, *a.template asD(), indentLevel + 1); + } else if (a.template isA()) { + editorAppend(res, *a.template asD(), indentLevel + 1); + } else { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel + 1); + + string::SmallString buf; + if (string::parsed_atom_to_string(a, buf)) + str->append(buf.data(), buf.size()); + + res.push_back(str); + } + } + } + + void editorAppend(EditorLineList& res, const DataTypeMList& ml, int indentLevel) + { + const bool simple_content = isSimpleList(ml.data().view()); + const bool single_line = simple_content && ml.size() < 7; + + if (single_line) { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel); + + if (ml.empty()) + str->append("( )"); + else + str->append(ml.toString()); + + res.push_back(str); + } else { + appendIndent(res, '(', indentLevel); + appendMultiLine(res, ml, indentLevel); + appendIndent(res, ')', indentLevel); + } + } + + void editorAppend(EditorLineList& res, const DataTypeDict& dict, int indentLevel) + { + const bool single_line = dict.size() < 2; + + if (single_line) { + auto str = EditorStringPool::pool().allocate(); + + appendIndent(str, indentLevel); + if (dict.size() == 0) + str->append("[ ]"); + else + str->append(dict.toString()); + + res.push_back(str); + } else { + + appendIndent(res, '[', indentLevel); + + for (auto& kv : dict) { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel + 1); + + str->append(kv.first->s_name); + str->append(':'); + str->append(' '); + + auto& l = kv.second; + + // simple list is one-liner + if (isSimpleList(l.view())) { + for (auto& a : l) { + str->appendQuoted(a); + str->append(' '); + } + + if (!l.empty()) + str->trim(); + + res.push_back(str); + } else { + res.push_back(str); + appendMultiLine(res, l, indentLevel + 1); + } + } + + appendIndent(res, ']', indentLevel); + } + } +} + +void editorAppend(EditorLineList& res, const AbstractData* d, int indentLevel) +{ + if (!d) + return; + + if (d->type() == DataTypeMList::dataType) + return editorAppend(res, static_cast(*d), indentLevel); + else if (d->type() == DataTypeDict::dataType) + return editorAppend(res, static_cast(*d), indentLevel); + else { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel); + + if (d->canInitWithList()) { + str->append(d->toListString()); + res.push_back(str); + } else if (d->canInitWithDict()) { + auto dict_str = d->toDictString(); + for (size_t i = 0; i < dict_str.length(); i++) { + const auto c = dict_str[i]; + if (c == '\n') { + res.push_back(str); + str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel); + } else { + str->append(c); + } + } + + if (str->length() > 0) + res.push_back(str); + } + } +} + +void editorAppend(EditorLineList& res, const AtomListView& lv, int indentLevel) +{ + for (auto& a : lv) { + auto str = EditorStringPool::pool().allocate(); + appendIndent(str, indentLevel); + + if (a.isData()) + editorAppend(res, a.asData(), indentLevel + 1); + else { + str->appendQuoted(a); + res.push_back(str); + } + } +} + +} diff --git a/ceammc/ext/src/data/editor_data.h b/ceammc/ext/src/data/editor_data.h new file mode 100644 index 0000000000..a0772a94fd --- /dev/null +++ b/ceammc/ext/src/data/editor_data.h @@ -0,0 +1,76 @@ +#ifndef EDITOR_DATA_H +#define EDITOR_DATA_H + +#include "ceammc_abstractdata.h" +#include "ceammc_convert.h" +#include "ceammc_data.h" +#include "ceammc_datatypes.h" +#include "ceammc_editor_object.h" +#include "ceammc_format.h" +#include "ceammc_string.h" + +namespace ceammc { + +void editorAppend(EditorLineList& res, const AtomListView& lv, int indentLevel); +void editorAppend(EditorLineList& res, const AbstractData* d, int indentLevel); + +template +class EditorDataT : public EditorObject { + AtomList lines_; + +public: + EditorDataT(const PdArgs& a) + : EditorObject(a) + { + } + + virtual const Data& editorData() const = 0; + virtual Data& editorData() = 0; + + void editorSync() override + { + string::MediumString buf; + if (!string::list_to_string(lines_, buf)) + return; + + buf.push_back('\0'); + if (!editorData().setFromDataString(buf.data())) { + OBJ_ERR << "can't set data: " << lines_; + return; + } + + EditorObject::editorSync(); + } + + void editorAddLine(t_symbol* sel, const AtomListView& lv) override + { + lines_.append(lv); + } + + void editorClear() override + { + lines_.clear(); + editorData().clear(); + } + + EditorLineList getContentForEditor() const override + { + EditorLineList res; + editorAppend(res, &editorData(), 0); + return res; + } + + int calcEditorLines() const override + { + return clip(editorData().size()); + } + + int calcEditorChars() const override + { + return 36; + } +}; + +} + +#endif // EDITOR_DATA_H diff --git a/ceammc/ext/src/data/editor_list.h b/ceammc/ext/src/data/editor_list.h new file mode 100644 index 0000000000..8607e192e9 --- /dev/null +++ b/ceammc/ext/src/data/editor_list.h @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef EDITOR_LIST_H +#define EDITOR_LIST_H + +#include "ceammc_convert.h" +#include "ceammc_editor_object.h" +#include "ceammc_object.h" + +namespace ceammc { + +template +class EditorListT : public EditorObject { +public: + EditorListT(const PdArgs& a) + : EditorObject(a) + { + } + + void editorAddLine(t_symbol* sel, const AtomListView& lv) override + { + for (auto& a : lv) + this->list().append(a); + } + + void editorClear() override + { + this->list().clear(); + } + + EditorLineList getContentForEditor() const override + { + EditorLineList res; + for (auto& a : this->list()) { + auto str = EditorStringPool::pool().allocate(); + str->str.append(to_string(a)); + res.push_back(str); + } + return res; + } + + int calcEditorLines() const override + { + return clip(this->list().size()); + } + + int calcEditorChars() const override + { + return 36; + } +}; + +} + +#endif // EDITOR_LIST_H diff --git a/ceammc/ext/src/data/global_base.h b/ceammc/ext/src/data/global_base.h index c427f02261..edd42357df 100644 --- a/ceammc/ext/src/data/global_base.h +++ b/ceammc/ext/src/data/global_base.h @@ -53,6 +53,8 @@ class GlobalBase : public BaseObject { T& ref() { return data_.ref(); } const T& ref() const { return data_.ref(); } + t_symbol* id() const { return data_.name(); } + size_t refCount() const { return data_.refCount(); } AtomList m_keys() const diff --git a/ceammc/ext/src/data/global_dict.cpp b/ceammc/ext/src/data/global_dict.cpp index 200dce0184..bc7dd2f949 100644 --- a/ceammc/ext/src/data/global_dict.cpp +++ b/ceammc/ext/src/data/global_dict.cpp @@ -17,10 +17,22 @@ GlobalDict::GlobalDict(const PdArgs& args) : GlobalDictBase(args) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString GlobalDict::editorTitle() const +{ + return makeEditorTitleString("global Dict", id()->s_name); } void setup_global_dict() { DictIFaceFactory obj("global.dict"); obj.addAlias("global.json"); + + obj.setXletsInfo({ "bang: output\n" + "methods: add, clear, get_key, set_key, remove, set, read, write" }, + { "data: dict" }); + + GlobalDict::registerMethods(obj); } diff --git a/ceammc/ext/src/data/global_dict.h b/ceammc/ext/src/data/global_dict.h index 620a8df44b..85700ca246 100644 --- a/ceammc/ext/src/data/global_dict.h +++ b/ceammc/ext/src/data/global_dict.h @@ -15,17 +15,24 @@ #define GLOBAL_DICT_H #include "dict_iface.h" +#include "editor_data.h" #include "global_base.h" using namespace ceammc; -typedef DictIFace> GlobalDictBase; +using GlobalDictIFace = DictIFace>; +using GlobalDictBase = EditorDataT; class GlobalDict : public GlobalDictBase { public: GlobalDict(const PdArgs& args); const DictAtom& dict() const final { return ref(); } DictAtom& dict() final { return ref(); } + + const DataTypeDict& editorData() const final { return *ref(); } + DataTypeDict& editorData() final { return *ref(); } + + EditorTitleString editorTitle() const final; }; void setup_global_dict(); diff --git a/ceammc/ext/src/data/global_list.cpp b/ceammc/ext/src/data/global_list.cpp index 28ad86c5a4..f6abdf9309 100644 --- a/ceammc/ext/src/data/global_list.cpp +++ b/ceammc/ext/src/data/global_list.cpp @@ -3,12 +3,26 @@ #include "datatype_mlist.h" GlobalList::GlobalList(const PdArgs& a) - : GlobalListBase(a) + : EditorListT(a) { + createCbListProperty( + "@value", + [this]() -> AtomList { return list(); }, + [this](const AtomListView& lv) -> bool { list() = lv; return true; }) + ->setArgIndex(1); +} + +EditorTitleString GlobalList::editorTitle() const +{ + char buf[32]; + snprintf(buf, sizeof(buf) - 1, "GLOBAL.LIST (%s)", this->id()->s_name); + return buf; } void setup_global_list() { ListIFaceFactory obj("global.list"); obj.processData(); + + GlobalList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/global_list.h b/ceammc/ext/src/data/global_list.h index f729d6aa1d..762bd4bc1d 100644 --- a/ceammc/ext/src/data/global_list.h +++ b/ceammc/ext/src/data/global_list.h @@ -15,16 +15,20 @@ #define GLOBAL_LIST_H #include "datatype_mlist.h" +#include "editor_list.h" #include "global_base.h" #include "list_iface.h" -typedef DataListIFace> GlobalListBase; +using GlobalListBase = DataListIFace>; -class GlobalList : public GlobalListBase { +class GlobalList : public EditorListT { public: GlobalList(const PdArgs& a); + AtomList& list() final { return ref(); } const AtomList& list() const final { return ref(); } + + EditorTitleString editorTitle() const final; }; void setup_global_list(); diff --git a/ceammc/ext/src/data/global_mlist.cpp b/ceammc/ext/src/data/global_mlist.cpp index 74553762e2..dc0315dae1 100644 --- a/ceammc/ext/src/data/global_mlist.cpp +++ b/ceammc/ext/src/data/global_mlist.cpp @@ -17,6 +17,12 @@ GlobalMList::GlobalMList(const PdArgs& args) : GlobalMListBase(args) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString GlobalMList::editorTitle() const +{ + return makeEditorTitleString("global MList", id()->s_name); } void setup_global_mlist() @@ -25,4 +31,6 @@ void setup_global_mlist() obj.processData(); obj.useDefaultPdFloatFn(); obj.useDefaultPdSymbolFn(); + + GlobalMList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/global_mlist.h b/ceammc/ext/src/data/global_mlist.h index 17263a05bb..03e26db935 100644 --- a/ceammc/ext/src/data/global_mlist.h +++ b/ceammc/ext/src/data/global_mlist.h @@ -14,16 +14,23 @@ #ifndef GLOBAL_MLIST_H #define GLOBAL_MLIST_H +#include "editor_data.h" #include "global_base.h" #include "mlist_iface.h" -typedef DataMListIFace> GlobalMListBase; +using GlobalMListBase = EditorDataT>, DataTypeMList>; class GlobalMList : public GlobalMListBase { public: GlobalMList(const PdArgs& args); + MListAtom& mlist() override { return ref(); } const MListAtom& mlist() const override { return ref(); } + + const DataTypeMList& editorData() const final { return *ref(); } + DataTypeMList& editorData() final { return *ref(); } + + EditorTitleString editorTitle() const final; }; void setup_global_mlist(); diff --git a/ceammc/ext/src/data/global_set.cpp b/ceammc/ext/src/data/global_set.cpp index 8c70da22d2..874e9d826e 100644 --- a/ceammc/ext/src/data/global_set.cpp +++ b/ceammc/ext/src/data/global_set.cpp @@ -17,10 +17,20 @@ GlobalSet::GlobalSet(const PdArgs& a) : GlobalSetBase(a) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString GlobalSet::editorTitle() const +{ + char buf[STATIC_STRING_SIZE(EditorTitleString)]; + snprintf(buf, sizeof(buf) - 1, "global Set (%s)", id()->s_name); + return buf; } void setup_global_set() { ColectionIFaceFactory obj("global.set"); obj.processData(); + + GlobalSet::registerMethods(obj); } diff --git a/ceammc/ext/src/data/global_set.h b/ceammc/ext/src/data/global_set.h index eff7b773a8..b812ca4804 100644 --- a/ceammc/ext/src/data/global_set.h +++ b/ceammc/ext/src/data/global_set.h @@ -15,11 +15,12 @@ #define GLOBAL_SET_H #include "dataset_iface.h" +#include "editor_data.h" #include "global_base.h" using namespace ceammc; -typedef DataSetIface> GlobalSetBase; +using GlobalSetBase = EditorDataT>, DataTypeSet>; class GlobalSet : public GlobalSetBase { public: @@ -27,6 +28,11 @@ class GlobalSet : public GlobalSetBase { DataTypeSet& data() final { return ref(); } const DataTypeSet& data() const final { return ref(); } + + EditorTitleString editorTitle() const final; + + DataTypeSet& editorData() final { return ref(); } + const DataTypeSet& editorData() const final { return ref(); } }; void setup_global_set(); diff --git a/ceammc/ext/src/data/list_iface.h b/ceammc/ext/src/data/list_iface.h index 872a0ad45c..c3fdc6ca61 100644 --- a/ceammc/ext/src/data/list_iface.h +++ b/ceammc/ext/src/data/list_iface.h @@ -45,18 +45,18 @@ class DataListIFace : public ListIFace { onList(AtomList(s)); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - list() = l; + list() = lv; onBang(); } - void onInlet(size_t n, const AtomListView& l) override + void onInlet(size_t n, const AtomListView& lv) override { if (n != 1) return; - list() = l; + list() = lv; } void onDataT(const MListAtom& ml) @@ -64,9 +64,31 @@ class DataListIFace : public ListIFace { onList(ml->data()); } - void proto_set(const AtomListView& lst) override + bool proto_front(Atom& res) const override { - list() = lst; + auto a = list().first(); + + if (a) { + res = *a; + return true; + } else + return false; + } + + bool proto_back(Atom& res) const override + { + auto a = list().last(); + + if (a) { + res = *a; + return true; + } else + return false; + } + + void proto_set(const AtomListView& lv) override + { + list() = lv; } void proto_clear() override @@ -74,19 +96,19 @@ class DataListIFace : public ListIFace { list().clear(); } - void proto_append(const AtomListView& lst) override + void proto_append(const AtomListView& lv) override { - list().append(lst); + list().append(lv); } - void proto_prepend(const AtomListView& lst) override + void proto_prepend(const AtomListView& lv) override { - list().insert(0, lst); + list().insert(0, lv); } - bool proto_insert(size_t idx, const AtomListView& lst) override + bool proto_insert(size_t idx, const AtomListView& lv) override { - return list().insert(idx, lst); + return list().insert(idx, lv); } bool proto_pop() override @@ -128,17 +150,28 @@ class DataListIFace : public ListIFace { list().fill(v); } - void proto_choose() override + bool proto_choose(Atom& res) const override { using RandomGenT = std::mt19937; static RandomGenT gen(time(0)); auto N = list().size(); if (N < 1) - return; + return false; auto idx = std::uniform_int_distribution(0, N - 1)(gen); - this->atomTo(0, list().at(idx)); + res = list().at(idx); + return true; + } + + bool proto_at(int idx, Atom& res) const override + { + const auto a = list().relativeAt(idx); + if (a) { + res = *a; + return true; + } else + return true; } void dump() const override diff --git a/ceammc/ext/src/data/local_base.cpp b/ceammc/ext/src/data/local_base.cpp new file mode 100644 index 0000000000..26c38f0bdb --- /dev/null +++ b/ceammc/ext/src/data/local_base.cpp @@ -0,0 +1,33 @@ +#include "local_base.h" +#include "ceammc_string.h" +#include "ceammc_string_types.h" +#include "fmt/core.h" + +namespace ceammc { + +PdArgs make_local_id(const PdArgs& a) +{ + PdArgs res(a); + void* cnv = static_cast(canvas_getcurrent()); + + string::MediumString buf; + + try { + if (res.args.empty()) { + fmt::format_to(std::back_inserter(buf), "{}-default", cnv); + buf.push_back('\0'); + res.args.append(gensym(buf.data())); + } else { + fmt::format_to(std::back_inserter(buf), "{}-", cnv); + string::atom_to_string(res.args[0], buf); + buf.push_back('\0'); + res.args[0] = gensym(buf.data()); + } + } catch (std::exception& e) { + LIB_ERR << "local id exception: " << e.what(); + } + + return res; +} + +} diff --git a/ceammc/ext/src/data/local_base.h b/ceammc/ext/src/data/local_base.h index d0de6fd10c..e4703d8557 100644 --- a/ceammc/ext/src/data/local_base.h +++ b/ceammc/ext/src/data/local_base.h @@ -21,19 +21,7 @@ namespace ceammc { -static PdArgs make_local_id(const PdArgs& a) -{ - PdArgs res(a); - void* cnv = static_cast(canvas_getcurrent()); - char buf[32]; - snprintf(buf, sizeof(buf), "%p-", cnv); - if (res.args.empty()) - res.args.append(atomFrom(std::string(buf) + "default")); - else - res.args[0] = atomFrom(std::string(buf) + to_string(res.args[0])); - - return res; -} +PdArgs make_local_id(const PdArgs& a); template class LocalBase : public GlobalBase { diff --git a/ceammc/ext/src/data/local_dict.cpp b/ceammc/ext/src/data/local_dict.cpp index a06d3ecfa8..08e2946fea 100644 --- a/ceammc/ext/src/data/local_dict.cpp +++ b/ceammc/ext/src/data/local_dict.cpp @@ -17,10 +17,22 @@ LocalDict::LocalDict(const PdArgs& args) : LocalDictBase(args) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString LocalDict::editorTitle() const +{ + return makeEditorTitleString("local Dict", binbufArgs().symbolAt(0, gensym("default"))->s_name); } void setup_local_dict() { DictIFaceFactory obj("local.dict"); obj.addAlias("local.json"); + + obj.setXletsInfo({ "bang: output\n" + "methods: add, clear, get_key, set_key, remove, set, read, write" }, + { "data: dict" }); + + LocalDict::registerMethods(obj); } diff --git a/ceammc/ext/src/data/local_dict.h b/ceammc/ext/src/data/local_dict.h index ae4045d37a..14ad1767e4 100644 --- a/ceammc/ext/src/data/local_dict.h +++ b/ceammc/ext/src/data/local_dict.h @@ -15,17 +15,24 @@ #define LOCAL_DICT_H #include "dict_iface.h" +#include "editor_data.h" #include "local_base.h" using namespace ceammc; -typedef DictIFace> LocalDictBase; +using LocalDictIFace = DictIFace>; +using LocalDictBase = EditorDataT; class LocalDict : public LocalDictBase { public: LocalDict(const PdArgs& args); const DictAtom& dict() const final { return ref(); } DictAtom& dict() final { return ref(); } + + const DataTypeDict& editorData() const final { return *ref(); } + DataTypeDict& editorData() final { return *ref(); } + + EditorTitleString editorTitle() const final; }; void setup_local_dict(); diff --git a/ceammc/ext/src/data/local_list.cpp b/ceammc/ext/src/data/local_list.cpp index 5cfc1b4beb..6392f7f50e 100644 --- a/ceammc/ext/src/data/local_list.cpp +++ b/ceammc/ext/src/data/local_list.cpp @@ -6,10 +6,24 @@ LocalList::LocalList(const PdArgs& a) : LocalListBase(a) { + createCbListProperty( + "@value", + [this]() -> AtomList { return list(); }, + [this](const AtomListView& lv) -> bool { list() = lv; return true; }) + ->setArgIndex(1); +} + +EditorTitleString LocalList::editorTitle() const +{ + char buf[32]; + snprintf(buf, sizeof(buf) - 1, "LOCAL.LIST (%s)", this->id()->s_name); + return buf; } void setup_local_list() { ListIFaceFactory obj("local.list"); obj.processData(); + + LocalList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/local_list.h b/ceammc/ext/src/data/local_list.h index 580df6d672..bdb88564b2 100644 --- a/ceammc/ext/src/data/local_list.h +++ b/ceammc/ext/src/data/local_list.h @@ -15,16 +15,20 @@ #define LOCAL_LIST_H #include "datatype_mlist.h" +#include "editor_list.h" #include "list_iface.h" #include "local_base.h" -typedef DataListIFace> LocalListBase; +using LocalListBase = EditorListT>>; class LocalList : public LocalListBase { public: LocalList(const PdArgs& a); + AtomList& list() final { return ref(); } const AtomList& list() const final { return ref(); } + + EditorTitleString editorTitle() const final; }; void setup_local_list(); diff --git a/ceammc/ext/src/data/local_mlist.cpp b/ceammc/ext/src/data/local_mlist.cpp index 491dd029f4..e30c578f92 100644 --- a/ceammc/ext/src/data/local_mlist.cpp +++ b/ceammc/ext/src/data/local_mlist.cpp @@ -19,6 +19,12 @@ LocalMList::LocalMList(const PdArgs& args) : LocalMListBase(args) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString LocalMList::editorTitle() const +{ + return makeEditorTitleString("local MList", binbufArgs().symbolAt(0, gensym("default"))->s_name); } void setup_local_mlist() @@ -27,4 +33,6 @@ void setup_local_mlist() obj.processData(); obj.useDefaultPdFloatFn(); obj.useDefaultPdSymbolFn(); + + LocalMList::registerMethods(obj); } diff --git a/ceammc/ext/src/data/local_mlist.h b/ceammc/ext/src/data/local_mlist.h index bcfe1d1397..87cc3ecd86 100644 --- a/ceammc/ext/src/data/local_mlist.h +++ b/ceammc/ext/src/data/local_mlist.h @@ -14,10 +14,11 @@ #ifndef LOCAL_MLIST_H #define LOCAL_MLIST_H +#include "editor_data.h" #include "local_base.h" #include "mlist_iface.h" -typedef DataMListIFace> LocalMListBase; +using LocalMListBase = EditorDataT>, DataTypeMList>; class LocalMList : public LocalMListBase { public: @@ -25,6 +26,11 @@ class LocalMList : public LocalMListBase { MListAtom& mlist() override { return ref(); } const MListAtom& mlist() const override { return ref(); } + + const DataTypeMList& editorData() const final { return *ref(); } + DataTypeMList& editorData() final { return *ref(); } + + EditorTitleString editorTitle() const final; }; void setup_local_mlist(); diff --git a/ceammc/ext/src/data/local_set.cpp b/ceammc/ext/src/data/local_set.cpp index 800be0125e..2eedd4554a 100644 --- a/ceammc/ext/src/data/local_set.cpp +++ b/ceammc/ext/src/data/local_set.cpp @@ -14,13 +14,23 @@ #include "local_set.h" #include "ceammc_factory.h" -LocalDataSet::LocalDataSet(const PdArgs& a) +LocalSet::LocalSet(const PdArgs& a) : LocalSetBase(a) { + setSpecialSymbolEscape(EDITOR_ESC_MODE_DATA); +} + +EditorTitleString LocalSet::editorTitle() const +{ + char buf[STATIC_STRING_SIZE(EditorTitleString)]; + snprintf(buf, sizeof(buf) - 1, "local Set (%s)", binbufArgs().symbolAt(0, gensym("default"))->s_name); + return buf; } void setup_local_set() { - ColectionIFaceFactory obj("local.set"); + ColectionIFaceFactory obj("local.set"); obj.processData(); + + LocalSet::registerMethods(obj); } diff --git a/ceammc/ext/src/data/local_set.h b/ceammc/ext/src/data/local_set.h index d9c7c050bd..a0343eb41d 100644 --- a/ceammc/ext/src/data/local_set.h +++ b/ceammc/ext/src/data/local_set.h @@ -15,18 +15,24 @@ #define LOCAL_SET_H #include "dataset_iface.h" +#include "editor_data.h" #include "local_base.h" using namespace ceammc; -typedef DataSetIface> LocalSetBase; +using LocalSetBase = EditorDataT>, DataTypeSet>; -class LocalDataSet : public LocalSetBase { +class LocalSet : public LocalSetBase { public: - LocalDataSet(const PdArgs& a); + LocalSet(const PdArgs& a); DataTypeSet& data() final { return ref(); } const DataTypeSet& data() const final { return ref(); } + + EditorTitleString editorTitle() const final; + + DataTypeSet& editorData() final { return ref(); } + const DataTypeSet& editorData() const final { return ref(); } }; void setup_local_set(); diff --git a/ceammc/ext/src/data/mlist_flatten.cpp b/ceammc/ext/src/data/mlist_flatten.cpp index 6dbe885ee5..3bcb0f6bf2 100644 --- a/ceammc/ext/src/data/mlist_flatten.cpp +++ b/ceammc/ext/src/data/mlist_flatten.cpp @@ -20,9 +20,9 @@ MListFlatten::MListFlatten(const PdArgs& args) createOutlet(); } -void MListFlatten::onList(const AtomList& lst) +void MListFlatten::onList(const AtomListView& lv) { - DataTypeMList ml(lst); + DataTypeMList ml(lv); listTo(0, ml.flatten().data()); } diff --git a/ceammc/ext/src/data/mlist_flatten.h b/ceammc/ext/src/data/mlist_flatten.h index 85a134c07b..2124f5b883 100644 --- a/ceammc/ext/src/data/mlist_flatten.h +++ b/ceammc/ext/src/data/mlist_flatten.h @@ -23,7 +23,7 @@ using namespace ceammc; class MListFlatten : public BaseObject { public: MListFlatten(const PdArgs& args); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onDataT(const MListAtom& lst); }; diff --git a/ceammc/ext/src/data/mlist_iface.h b/ceammc/ext/src/data/mlist_iface.h index 88fd49aa0f..a58f62d2c0 100644 --- a/ceammc/ext/src/data/mlist_iface.h +++ b/ceammc/ext/src/data/mlist_iface.h @@ -42,21 +42,21 @@ class DataMListIFace : public ListIFace { onBang(); } - void onList(const AtomList& lst) override + void onList(const AtomListView& lv) override { - mlist()->setRaw(lst); + mlist()->setRaw(lv); onBang(); } - void onAny(t_symbol* s, const AtomListView& lst) override + void onAny(t_symbol* s, const AtomListView& lv) override { - Message msg(s, lst); + Message msg(s, lv); if (s->s_name[0] != '\(') { OBJ_ERR << "opening parenthesis expected: " << to_string(msg); return; } - mlist()->setParsed(msg.anyValue()); + mlist()->setFromDataList(msg.anyValue()); } void onDataT(const MListAtom& ml) @@ -67,9 +67,31 @@ class DataMListIFace : public ListIFace { onBang(); } - void proto_set(const AtomListView& lst) override + bool proto_front(Atom& res) const override { - mlist()->setRaw(lst); + if (mlist()->size() > 0) { + res = mlist()->at(0); + return true; + } else { + return false; + } + } + + bool proto_back(Atom& res) const override + { + const auto size = mlist()->size(); + + if (size > 0) { + res = mlist()->at(size - 1); + return true; + } else { + return false; + } + } + + void proto_set(const AtomListView& lv) override + { + mlist()->setRaw(lv); } void proto_clear() override @@ -77,19 +99,19 @@ class DataMListIFace : public ListIFace { mlist()->clear(); } - void proto_append(const AtomListView& lst) override + void proto_append(const AtomListView& lv) override { - mlist()->append(lst); + mlist()->append(lv); } - void proto_prepend(const AtomListView& lst) override + void proto_prepend(const AtomListView& lv) override { - mlist()->prepend(lst); + mlist()->prepend(lv); } - bool proto_insert(size_t idx, const AtomListView& lst) override + bool proto_insert(size_t idx, const AtomListView& lv) override { - return mlist()->insert(idx, lst); + return mlist()->insert(idx, lv); } bool proto_pop() override @@ -126,17 +148,28 @@ class DataMListIFace : public ListIFace { mlist()->shuffle(); } - void proto_choose() override + bool proto_choose(Atom& a) const override { using RandomGenT = std::mt19937; static RandomGenT gen(time(0)); auto N = mlist()->size(); if (N < 1) - return; + return false; auto idx = std::uniform_int_distribution(0, N - 1)(gen); - this->atomTo(0, mlist()->at(idx)); + a = mlist()->at(idx); + return true; + } + + bool proto_at(int idx, Atom& res) const override + { + const auto N = mlist()->size(); + if (idx < -N || idx >= N) + return false; + + res = mlist()->at(idx < 0 ? N + idx : idx); + return true; } void proto_fill(const Atom& v) override diff --git a/ceammc/ext/src/data/rtree_to_list.cpp b/ceammc/ext/src/data/rtree_to_list.cpp index 265ff00d13..04977089c1 100644 --- a/ceammc/ext/src/data/rtree_to_list.cpp +++ b/ceammc/ext/src/data/rtree_to_list.cpp @@ -61,14 +61,13 @@ void RythmTreeToList::onAny(t_symbol* s, const AtomListView& args) std::string str(s->s_name); str += ' '; str += to_string(args, " "); - auto ml = DataTypeMList::parse(str); - if (!ml) { + MListAtom ml; + if (!ml->setFromDataString(str)) { OBJ_ERR << "can't parse message: " << s->s_name << ' ' << to_string(args); return; } - auto ma = MListAtom(ml.value()); - rtree_->setValue(ma); + rtree_->setValue(ml); changed_ = true; } diff --git a/ceammc/ext/src/data/set_contains.cpp b/ceammc/ext/src/data/set_contains.cpp index dd8c08d768..3c958102b5 100644 --- a/ceammc/ext/src/data/set_contains.cpp +++ b/ceammc/ext/src/data/set_contains.cpp @@ -31,9 +31,9 @@ void SetContains::onDataT(const SetAtom& set) boolTo(0, set->contains(element_->value())); } -void SetContains::onInlet(size_t n, const AtomListView& lst) +void SetContains::onInlet(size_t n, const AtomListView& lv) { - element_->set(lst); + element_->set(lv); } void setup_set_contains() diff --git a/ceammc/ext/src/data/set_contains.h b/ceammc/ext/src/data/set_contains.h index f293f0e620..7f70245d20 100644 --- a/ceammc/ext/src/data/set_contains.h +++ b/ceammc/ext/src/data/set_contains.h @@ -17,13 +17,15 @@ #include "ceammc_object.h" #include "datatype_set.h" +using namespace ceammc; + class SetContains : public BaseObject { AtomProperty* element_; public: SetContains(const PdArgs& a); void onDataT(const SetAtom& set); - void onInlet(size_t n, const AtomListView& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; }; void setup_set_contains(); diff --git a/ceammc/ext/src/data/set_difference.cpp b/ceammc/ext/src/data/set_difference.cpp index 3ce69f84bd..283dbc6272 100644 --- a/ceammc/ext/src/data/set_difference.cpp +++ b/ceammc/ext/src/data/set_difference.cpp @@ -22,9 +22,9 @@ SetDifference::SetDifference(const PdArgs& a) createOutlet(); } -void SetDifference::onList(const AtomList& l) +void SetDifference::onList(const AtomListView& lv) { - onDataT(SetAtom(l)); + onDataT(SetAtom(lv)); } void SetDifference::onDataT(const SetAtom& set) @@ -32,12 +32,12 @@ void SetDifference::onDataT(const SetAtom& set) atomTo(0, SetAtom(DataTypeSet::difference(*set, set1_))); } -void SetDifference::onInlet(size_t, const AtomListView& l) +void SetDifference::onInlet(size_t, const AtomListView& lv) { - if (l.isA()) { - set1_ = *l[0].asD(); + if (lv.isA()) { + set1_ = *lv[0].asD(); } else { - set1_ = DataTypeSet(l); + set1_ = DataTypeSet(lv); } } diff --git a/ceammc/ext/src/data/set_difference.h b/ceammc/ext/src/data/set_difference.h index 0703664c8c..67c87e7705 100644 --- a/ceammc/ext/src/data/set_difference.h +++ b/ceammc/ext/src/data/set_difference.h @@ -24,9 +24,9 @@ class SetDifference : public BaseObject { public: SetDifference(const PdArgs& a); - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onDataT(const SetAtom& set); - void onInlet(size_t, const AtomListView& l) override; + void onInlet(size_t, const AtomListView& lv) override; }; void setup_set_difference(); diff --git a/ceammc/ext/src/data/set_equal.cpp b/ceammc/ext/src/data/set_equal.cpp index c64d98e97c..9cd5a78341 100644 --- a/ceammc/ext/src/data/set_equal.cpp +++ b/ceammc/ext/src/data/set_equal.cpp @@ -20,11 +20,11 @@ SetEqual::SetEqual(const PdArgs& a) createCbListProperty( "@subj", [this]() { return set1_; }, - [this](const AtomList& l) -> bool { - if (l.isA()) - set1_ = SetAtom(l[0]); + [this](const AtomListView& lv) -> bool { + if (lv.isA()) + set1_ = SetAtom(lv[0]); else - set1_ = SetAtom(l); + set1_ = SetAtom(lv); return true; }) @@ -39,14 +39,14 @@ void SetEqual::onDataT(const SetAtom& set) boolTo(0, set == set1_); } -void SetEqual::onInlet(size_t, const AtomListView& l) +void SetEqual::onInlet(size_t, const AtomListView& lv) { - property("@subj")->set(l); + property("@subj")->set(lv); } -void SetEqual::onList(const AtomList& l) +void SetEqual::onList(const AtomListView& lv) { - onDataT(SetAtom(l)); + onDataT(SetAtom(lv)); } void setup_set_equal() diff --git a/ceammc/ext/src/data/set_equal.h b/ceammc/ext/src/data/set_equal.h index 0862160712..2c9b760549 100644 --- a/ceammc/ext/src/data/set_equal.h +++ b/ceammc/ext/src/data/set_equal.h @@ -25,8 +25,8 @@ class SetEqual : public BaseObject { public: SetEqual(const PdArgs& a); void onDataT(const SetAtom& set); - void onInlet(size_t, const AtomListView& l) override; - void onList(const AtomList& l) override; + void onInlet(size_t, const AtomListView& lv) override; + void onList(const AtomListView& lv) override; }; void setup_set_equal(); diff --git a/ceammc/ext/src/data/set_intersection.cpp b/ceammc/ext/src/data/set_intersection.cpp index e0efd68661..d974e6b784 100644 --- a/ceammc/ext/src/data/set_intersection.cpp +++ b/ceammc/ext/src/data/set_intersection.cpp @@ -22,9 +22,9 @@ SetIntersection::SetIntersection(const PdArgs& a) createOutlet(); } -void SetIntersection::onList(const AtomList& lst) +void SetIntersection::onList(const AtomListView& lv) { - onDataT(SetAtom(lst)); + onDataT(SetAtom(lv)); } void SetIntersection::onDataT(const SetAtom& set) @@ -32,12 +32,12 @@ void SetIntersection::onDataT(const SetAtom& set) atomTo(0, SetAtom(DataTypeSet::intersection(*set, set1_))); } -void SetIntersection::onInlet(size_t, const AtomListView& l) +void SetIntersection::onInlet(size_t, const AtomListView& lv) { - if (l.isA()) { - set1_ = *l.asD(); + if (lv.isA()) { + set1_ = *lv.asD(); } else { - set1_ = DataTypeSet(l); + set1_ = DataTypeSet(lv); } } diff --git a/ceammc/ext/src/data/set_intersection.h b/ceammc/ext/src/data/set_intersection.h index 222cb8d560..441db1f483 100644 --- a/ceammc/ext/src/data/set_intersection.h +++ b/ceammc/ext/src/data/set_intersection.h @@ -24,9 +24,9 @@ class SetIntersection : public BaseObject { public: SetIntersection(const PdArgs& a); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onDataT(const SetAtom& set); - void onInlet(size_t, const AtomListView& l) override; + void onInlet(size_t, const AtomListView& lv) override; }; void setup_set_intersection(); diff --git a/ceammc/ext/src/data/set_size.cpp b/ceammc/ext/src/data/set_size.cpp index 4afd6aeee4..2c58d5f8c1 100644 --- a/ceammc/ext/src/data/set_size.cpp +++ b/ceammc/ext/src/data/set_size.cpp @@ -20,9 +20,9 @@ SetSize::SetSize(const PdArgs& a) createOutlet(); } -void SetSize::onList(const AtomList& l) +void SetSize::onList(const AtomListView& lv) { - onDataT(SetAtom(l)); + onDataT(SetAtom(lv)); } void SetSize::onDataT(const SetAtom& set) diff --git a/ceammc/ext/src/data/set_size.h b/ceammc/ext/src/data/set_size.h index ad7e097cf4..1a133fcd6d 100644 --- a/ceammc/ext/src/data/set_size.h +++ b/ceammc/ext/src/data/set_size.h @@ -17,10 +17,12 @@ #include "ceammc_object.h" #include "datatype_set.h" +using namespace ceammc; + class SetSize : public BaseObject { public: SetSize(const PdArgs& a); - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onDataT(const SetAtom& set); }; diff --git a/ceammc/ext/src/data/set_symdiff.cpp b/ceammc/ext/src/data/set_symdiff.cpp index 0c5c2eb7e0..5fc2788ae9 100644 --- a/ceammc/ext/src/data/set_symdiff.cpp +++ b/ceammc/ext/src/data/set_symdiff.cpp @@ -22,9 +22,9 @@ SetSymmetricDifference::SetSymmetricDifference(const PdArgs& a) createOutlet(); } -void SetSymmetricDifference::onList(const AtomList& l) +void SetSymmetricDifference::onList(const AtomListView& lv) { - onDataT(SetAtom(l)); + onDataT(SetAtom(lv)); } void SetSymmetricDifference::onDataT(const SetAtom& set) @@ -32,12 +32,12 @@ void SetSymmetricDifference::onDataT(const SetAtom& set) atomTo(0, SetAtom(DataTypeSet::sym_difference(*set, set1_))); } -void SetSymmetricDifference::onInlet(size_t, const AtomListView& l) +void SetSymmetricDifference::onInlet(size_t, const AtomListView& lv) { - if (l.isA()) { - set1_ = *l.asD(); + if (lv.isA()) { + set1_ = *lv.asD(); } else { - set1_ = DataTypeSet(l); + set1_ = DataTypeSet(lv); } } diff --git a/ceammc/ext/src/data/set_symdiff.h b/ceammc/ext/src/data/set_symdiff.h index 30220abd34..39e90a2997 100644 --- a/ceammc/ext/src/data/set_symdiff.h +++ b/ceammc/ext/src/data/set_symdiff.h @@ -24,9 +24,9 @@ class SetSymmetricDifference : public BaseObject { public: SetSymmetricDifference(const PdArgs& a); - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onDataT(const SetAtom& set); - void onInlet(size_t, const AtomListView& l) override; + void onInlet(size_t, const AtomListView& lv) override; }; void setup_set_symdiff(); diff --git a/ceammc/ext/src/data/set_union.cpp b/ceammc/ext/src/data/set_union.cpp index 7f6c161b8b..baf5e524b9 100644 --- a/ceammc/ext/src/data/set_union.cpp +++ b/ceammc/ext/src/data/set_union.cpp @@ -22,9 +22,9 @@ SetUnion::SetUnion(const PdArgs& a) createOutlet(); } -void SetUnion::onList(const AtomList& lst) +void SetUnion::onList(const AtomListView& lv) { - onDataT(SetAtom(lst)); + onDataT(SetAtom(lv)); } void SetUnion::onDataT(const SetAtom& set) @@ -32,12 +32,12 @@ void SetUnion::onDataT(const SetAtom& set) atomTo(0, SetAtom(DataTypeSet::set_union(*set, set1_))); } -void SetUnion::onInlet(size_t, const AtomListView& lst) +void SetUnion::onInlet(size_t, const AtomListView& lv) { - if (lst.isA()) - set1_ = *lst.asD(); + if (lv.isA()) + set1_ = *lv.asD(); else - set1_ = DataTypeSet(lst); + set1_ = DataTypeSet(lv); } void setup_set_union() diff --git a/ceammc/ext/src/data/set_union.h b/ceammc/ext/src/data/set_union.h index be01ebbf73..ccf7a9ee88 100644 --- a/ceammc/ext/src/data/set_union.h +++ b/ceammc/ext/src/data/set_union.h @@ -24,9 +24,9 @@ class SetUnion : public BaseObject { public: SetUnion(const PdArgs& a); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onDataT(const SetAtom& dptr); - void onInlet(size_t, const AtomListView& lst) override; + void onInlet(size_t, const AtomListView& lv) override; }; void setup_set_union(); diff --git a/ceammc/ext/src/dyn/dyn_comp.h b/ceammc/ext/src/dyn/dyn_comp.h index efe871399a..a393f66797 100644 --- a/ceammc/ext/src/dyn/dyn_comp.h +++ b/ceammc/ext/src/dyn/dyn_comp.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.comp" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_comp -scn dyn_comp_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_comp_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_comp_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_comp_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_comp_dsp { +class FAUST_API dyn_comp_dsp { public: @@ -162,7 +247,7 @@ class dyn_comp_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_comp_dsp { +class FAUST_API decorator_dsp : public dyn_comp_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_comp_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_comp_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_comp_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_comp : public dyn_comp_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_comp #endif @@ -559,30 +636,41 @@ struct dyn_comp : public dyn_comp_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_comp : public dyn_comp_dsp { private: - FAUSTFLOAT fVslider0; int fSampleRate; - float fConst0; + float fConst1; + FAUSTFLOAT fVslider0; + float fConst2; + float fRec0[2]; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + float fConst3; + FAUSTFLOAT fVslider3; float fRec2[2]; + FAUSTFLOAT fVslider4; float fRec1[2]; - FAUSTFLOAT fVslider3; - float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_comp -scn dyn_comp_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("compressors.lib/compression_gain_mono:author", "Julius O. Smith III"); m->declare("compressors.lib/compression_gain_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compression_gain_mono:license", "MIT-style STK-4.3 license"); @@ -593,7 +681,7 @@ class dyn_comp : public dyn_comp_dsp { m->declare("compressors.lib/compressor_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compressor_mono:license", "MIT-style STK-4.3 license"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); - m->declare("compressors.lib/version", "0.1"); + m->declare("compressors.lib/version", "0.4"); m->declare("filename", "dyn_comp.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -604,7 +692,9 @@ class dyn_comp : public dyn_comp_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -619,25 +709,29 @@ class dyn_comp : public dyn_comp_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1.0f / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(10.0f); + fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(1.0f); - fVslider2 = FAUSTFLOAT(50.0f); - fVslider3 = FAUSTFLOAT(100.0f); + fVslider2 = FAUSTFLOAT(1e+01f); + fVslider3 = FAUSTFLOAT(5e+01f); + fVslider4 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec2[l0] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec1[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0f; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec1[l2] = 0.0f; } } @@ -661,46 +755,46 @@ class dyn_comp : public dyn_comp_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn.comp"); - ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(10.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("ratio", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.00100000005f)); ui_interface->declare(&fVslider2, "unit", "ms"); - ui_interface->addVerticalSlider("release", &fVslider2, FAUSTFLOAT(50.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("threshold", &fVslider3, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("attack", &fVslider2, FAUSTFLOAT(1e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider0, "unit", "db"); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-12.0f), FAUSTFLOAT(12.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("ratio", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.001f)); + ui_interface->declare(&fVslider3, "unit", "ms"); + ui_interface->addVerticalSlider("release", &fVslider3, FAUSTFLOAT(5e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider4, "unit", "db"); + ui_interface->addVerticalSlider("threshold", &fVslider4, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = float(fVslider0); - float fSlow1 = (0.000500000024f * fSlow0); - int iSlow2 = (std::fabs(fSlow1) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst0 / (iSlow2 ? 1.0f : fSlow1)))); - float fSlow3 = (iSlow2 ? 0.0f : fThen1); - float fSlow4 = ((1.0f / std::max(1.1920929e-07f, float(fVslider1))) + -1.0f); - float fSlow5 = (0.00100000005f * fSlow0); - int iSlow6 = (std::fabs(fSlow5) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst0 / (iSlow6 ? 1.0f : fSlow5)))); - float fSlow7 = (iSlow6 ? 0.0f : fThen3); - float fSlow8 = (0.00100000005f * float(fVslider2)); - int iSlow9 = (std::fabs(fSlow8) < 1.1920929e-07f); - float fThen5 = std::exp((0.0f - (fConst0 / (iSlow9 ? 1.0f : fSlow8)))); - float fSlow10 = (iSlow9 ? 0.0f : fThen5); - float fSlow11 = float(fVslider3); - float fSlow12 = (1.0f - fSlow3); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow0 = fConst1 * std::pow(1e+01f, 0.05f * float(fVslider0)); + float fSlow1 = 1.0f / std::max(1.1920929e-07f, float(fVslider1)) + -1.0f; + float fSlow2 = float(fVslider2); + float fSlow3 = 0.0005f * fSlow2; + int iSlow4 = std::fabs(fSlow3) < 1.1920929e-07f; + float fSlow5 = ((iSlow4) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow4) ? 1.0f : fSlow3))); + float fSlow6 = 1.0f - fSlow5; + float fSlow7 = 0.001f * float(fVslider3); + int iSlow8 = std::fabs(fSlow7) < 1.1920929e-07f; + float fSlow9 = ((iSlow8) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow8) ? 1.0f : fSlow7))); + float fSlow10 = 0.001f * fSlow2; + int iSlow11 = std::fabs(fSlow10) < 1.1920929e-07f; + float fSlow12 = ((iSlow11) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow11) ? 1.0f : fSlow10))); + float fSlow13 = float(fVslider4); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; float fTemp1 = std::fabs(fTemp0); - float fTemp2 = ((fRec1[1] > fTemp1) ? fSlow10 : fSlow7); - fRec2[0] = ((fRec2[1] * fTemp2) + (fTemp1 * (1.0f - fTemp2))); - fRec1[0] = fRec2[0]; - fRec0[0] = ((fRec0[1] * fSlow3) + (fSlow4 * (std::max((((20.0f * std::log10(std::max(1.17549435e-38f, fRec1[0]))) + 100.0f) - fSlow11), 0.0f) * fSlow12))); - output0[i0] = FAUSTFLOAT((fTemp0 * std::pow(10.0f, (0.0500000007f * fRec0[0])))); + float fTemp2 = ((fTemp1 > fRec2[1]) ? fSlow12 : fSlow9); + fRec2[0] = fTemp1 * (1.0f - fTemp2) + fRec2[1] * fTemp2; + fRec1[0] = fSlow1 * fSlow6 * std::max(2e+01f * std::log10(std::max(1.1754944e-38f, fRec2[0])) + 1e+02f - fSlow13, 0.0f) + fSlow5 * fRec1[1]; + output0[i0] = FAUSTFLOAT(fTemp0 * fRec0[0] * std::pow(1e+01f, 0.05f * fRec1[0])); + fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; - fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/dyn/dyn_comp2.h b/ceammc/ext/src/dyn/dyn_comp2.h index da5b83fae2..d88ac6e5f6 100644 --- a/ceammc/ext/src/dyn/dyn_comp2.h +++ b/ceammc/ext/src/dyn/dyn_comp2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.comp2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_comp2 -scn dyn_comp2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_comp2_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_comp2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_comp2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_comp2_dsp { +class FAUST_API dyn_comp2_dsp { public: @@ -162,7 +247,7 @@ class dyn_comp2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_comp2_dsp { +class FAUST_API decorator_dsp : public dyn_comp2_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_comp2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_comp2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_comp2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_comp2 : public dyn_comp2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_comp2 #endif @@ -559,30 +636,41 @@ struct dyn_comp2 : public dyn_comp2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_comp2 : public dyn_comp2_dsp { private: - FAUSTFLOAT fVslider0; int fSampleRate; - float fConst0; + float fConst1; + FAUSTFLOAT fVslider0; + float fConst2; + float fRec0[2]; FAUSTFLOAT fVslider1; FAUSTFLOAT fVslider2; + float fConst3; + FAUSTFLOAT fVslider3; float fRec2[2]; + FAUSTFLOAT fVslider4; float fRec1[2]; - FAUSTFLOAT fVslider3; - float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_comp2 -scn dyn_comp2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("compressors.lib/compression_gain_mono:author", "Julius O. Smith III"); m->declare("compressors.lib/compression_gain_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compression_gain_mono:license", "MIT-style STK-4.3 license"); @@ -590,7 +678,7 @@ class dyn_comp2 : public dyn_comp2_dsp { m->declare("compressors.lib/compressor_stereo:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compressor_stereo:license", "MIT-style STK-4.3 license"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); - m->declare("compressors.lib/version", "0.1"); + m->declare("compressors.lib/version", "0.4"); m->declare("filename", "dyn_comp2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -601,7 +689,9 @@ class dyn_comp2 : public dyn_comp2_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -616,25 +706,29 @@ class dyn_comp2 : public dyn_comp2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1.0f / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(10.0f); + fVslider0 = FAUSTFLOAT(0.0f); fVslider1 = FAUSTFLOAT(1.0f); - fVslider2 = FAUSTFLOAT(50.0f); - fVslider3 = FAUSTFLOAT(100.0f); + fVslider2 = FAUSTFLOAT(1e+01f); + fVslider3 = FAUSTFLOAT(5e+01f); + fVslider4 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec2[l0] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec1[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0f; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec1[l2] = 0.0f; } } @@ -658,51 +752,51 @@ class dyn_comp2 : public dyn_comp2_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn.comp2"); - ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(10.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("ratio", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.00100000005f)); ui_interface->declare(&fVslider2, "unit", "ms"); - ui_interface->addVerticalSlider("release", &fVslider2, FAUSTFLOAT(50.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("threshold", &fVslider3, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("attack", &fVslider2, FAUSTFLOAT(1e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider0, "unit", "db"); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-12.0f), FAUSTFLOAT(12.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("ratio", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.001f)); + ui_interface->declare(&fVslider3, "unit", "ms"); + ui_interface->addVerticalSlider("release", &fVslider3, FAUSTFLOAT(5e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider4, "unit", "db"); + ui_interface->addVerticalSlider("threshold", &fVslider4, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - float fSlow0 = float(fVslider0); - float fSlow1 = (0.000500000024f * fSlow0); - int iSlow2 = (std::fabs(fSlow1) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst0 / (iSlow2 ? 1.0f : fSlow1)))); - float fSlow3 = (iSlow2 ? 0.0f : fThen1); - float fSlow4 = ((1.0f / std::max(1.1920929e-07f, float(fVslider1))) + -1.0f); - float fSlow5 = (0.00100000005f * fSlow0); - int iSlow6 = (std::fabs(fSlow5) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst0 / (iSlow6 ? 1.0f : fSlow5)))); - float fSlow7 = (iSlow6 ? 0.0f : fThen3); - float fSlow8 = (0.00100000005f * float(fVslider2)); - int iSlow9 = (std::fabs(fSlow8) < 1.1920929e-07f); - float fThen5 = std::exp((0.0f - (fConst0 / (iSlow9 ? 1.0f : fSlow8)))); - float fSlow10 = (iSlow9 ? 0.0f : fThen5); - float fSlow11 = float(fVslider3); - float fSlow12 = (1.0f - fSlow3); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow0 = fConst1 * std::pow(1e+01f, 0.05f * float(fVslider0)); + float fSlow1 = 1.0f / std::max(1.1920929e-07f, float(fVslider1)) + -1.0f; + float fSlow2 = float(fVslider2); + float fSlow3 = 0.0005f * fSlow2; + int iSlow4 = std::fabs(fSlow3) < 1.1920929e-07f; + float fSlow5 = ((iSlow4) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow4) ? 1.0f : fSlow3))); + float fSlow6 = 1.0f - fSlow5; + float fSlow7 = 0.001f * float(fVslider3); + int iSlow8 = std::fabs(fSlow7) < 1.1920929e-07f; + float fSlow9 = ((iSlow8) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow8) ? 1.0f : fSlow7))); + float fSlow10 = 0.001f * fSlow2; + int iSlow11 = std::fabs(fSlow10) < 1.1920929e-07f; + float fSlow12 = ((iSlow11) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow11) ? 1.0f : fSlow10))); + float fSlow13 = float(fVslider4); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; float fTemp1 = float(input1[i0]); - float fTemp2 = std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))); - float fTemp3 = ((fRec1[1] > fTemp2) ? fSlow10 : fSlow7); - fRec2[0] = ((fRec2[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); - fRec1[0] = fRec2[0]; - fRec0[0] = ((fRec0[1] * fSlow3) + (fSlow4 * (std::max((((20.0f * std::log10(std::max(1.17549435e-38f, fRec1[0]))) + 100.0f) - fSlow11), 0.0f) * fSlow12))); - float fTemp4 = std::pow(10.0f, (0.0500000007f * fRec0[0])); - output0[i0] = FAUSTFLOAT((fTemp0 * fTemp4)); - output1[i0] = FAUSTFLOAT((fTemp1 * fTemp4)); + float fTemp2 = std::fabs(std::fabs(fTemp0) + std::fabs(fTemp1)); + float fTemp3 = ((fTemp2 > fRec2[1]) ? fSlow12 : fSlow9); + fRec2[0] = fTemp2 * (1.0f - fTemp3) + fRec2[1] * fTemp3; + fRec1[0] = fSlow1 * fSlow6 * std::max(2e+01f * std::log10(std::max(1.1754944e-38f, fRec2[0])) + 1e+02f - fSlow13, 0.0f) + fSlow5 * fRec1[1]; + float fTemp4 = std::pow(1e+01f, 0.05f * fRec1[0]); + output0[i0] = FAUSTFLOAT(fTemp0 * fRec0[0] * fTemp4); + output1[i0] = FAUSTFLOAT(fTemp1 * fRec0[0] * fTemp4); + fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; - fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/dyn/dyn_gate.h b/ceammc/ext/src/dyn/dyn_gate.h index fc63a84be1..09e7b348ea 100644 --- a/ceammc/ext/src/dyn/dyn_gate.h +++ b/ceammc/ext/src/dyn/dyn_gate.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.gate" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_gate -scn dyn_gate_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_gate_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_gate_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_gate_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_gate_dsp { +class FAUST_API dyn_gate_dsp { public: @@ -162,7 +247,7 @@ class dyn_gate_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_gate_dsp { +class FAUST_API decorator_dsp : public dyn_gate_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_gate_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_gate_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_gate_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_gate : public dyn_gate_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_gate #endif @@ -559,6 +636,13 @@ struct dyn_gate : public dyn_gate_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_gate : public dyn_gate_dsp { private: @@ -567,28 +651,28 @@ class dyn_gate : public dyn_gate_dsp { FAUSTFLOAT fVslider1; int fSampleRate; float fConst1; - float fRec3[2]; + float fRec1[2]; float fConst2; FAUSTFLOAT fVslider2; float fConst3; - float fRec4[2]; + float fRec2[2]; int iVec0[2]; float fConst4; FAUSTFLOAT fVslider3; - int iRec5[2]; - float fRec1[2]; + int iRec3[2]; float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_gate -scn dyn_gate_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "dyn_gate.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -601,7 +685,9 @@ class dyn_gate : public dyn_gate_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -616,38 +702,35 @@ class dyn_gate : public dyn_gate_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (1.0f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); - fConst4 = (0.00100000005f * fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.0f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; + fConst4 = 0.001f * fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(0.10000000000000001f); - fVslider1 = FAUSTFLOAT(20.0f); - fVslider2 = FAUSTFLOAT(40.0f); - fVslider3 = FAUSTFLOAT(100.0f); + fVslider0 = FAUSTFLOAT(0.1f); + fVslider1 = FAUSTFLOAT(2e+01f); + fVslider2 = FAUSTFLOAT(4e+01f); + fVslider3 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec3[l0] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec4[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { iVec0[l2] = 0; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - iRec5[l3] = 0; + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + iRec3[l3] = 0; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec1[l4] = 0.0f; - } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec0[l5] = 0.0f; + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec0[l4] = 0.0f; } } @@ -672,52 +755,46 @@ class dyn_gate : public dyn_gate_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn.gate"); ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(0.100000001f), FAUSTFLOAT(0.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(0.1f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider3, "unit", "ms"); - ui_interface->addVerticalSlider("hold", &fVslider3, FAUSTFLOAT(100.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("hold", &fVslider3, FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "ms"); - ui_interface->addVerticalSlider("release", &fVslider1, FAUSTFLOAT(20.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("release", &fVslider1, FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("threshold", &fVslider2, FAUSTFLOAT(40.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("threshold", &fVslider2, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (0.00100000005f * float(fVslider0)); - float fSlow1 = (0.00100000005f * float(fVslider1)); + float fSlow0 = 0.001f * float(fVslider0); + float fSlow1 = 0.001f * float(fVslider1); float fSlow2 = std::min(fSlow0, fSlow1); - int iSlow3 = (std::fabs(fSlow2) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst1 / (iSlow3 ? 1.0f : fSlow2)))); - float fSlow4 = (iSlow3 ? 0.0f : fThen1); - float fSlow5 = (1.0f - fSlow4); - float fSlow6 = (fConst2 * (float(fVslider2) + -100.0f)); - int iSlow7 = int((fConst4 * float(fVslider3))); - int iSlow8 = (std::fabs(fSlow0) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst1 / (iSlow8 ? 1.0f : fSlow0)))); - float fSlow9 = (iSlow8 ? 0.0f : fThen3); - int iSlow10 = (std::fabs(fSlow1) < 1.1920929e-07f); - float fThen5 = std::exp((0.0f - (fConst1 / (iSlow10 ? 1.0f : fSlow1)))); - float fSlow11 = (iSlow10 ? 0.0f : fThen5); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + int iSlow3 = std::fabs(fSlow2) < 1.1920929e-07f; + float fSlow4 = ((iSlow3) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow3) ? 1.0f : fSlow2))); + float fSlow5 = 1.0f - fSlow4; + float fSlow6 = fConst2 * (float(fVslider2) + -1e+02f); + int iSlow7 = int(fConst4 * float(fVslider3)); + int iSlow8 = std::fabs(fSlow1) < 1.1920929e-07f; + float fSlow9 = ((iSlow8) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow8) ? 1.0f : fSlow1))); + int iSlow10 = std::fabs(fSlow0) < 1.1920929e-07f; + float fSlow11 = ((iSlow10) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow10) ? 1.0f : fSlow0))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - fRec3[0] = ((fRec3[1] * fSlow4) + (std::fabs(fTemp0) * fSlow5)); - float fRec2 = fRec3[0]; - fRec4[0] = (fSlow6 + (fConst3 * fRec4[1])); - int iTemp1 = (fRec2 > std::pow(10.0f, (0.0500000007f * fRec4[0]))); + fRec1[0] = std::fabs(fTemp0) * fSlow5 + fRec1[1] * fSlow4; + fRec2[0] = fSlow6 + fConst3 * fRec2[1]; + int iTemp1 = fRec1[0] > std::pow(1e+01f, 0.05f * fRec2[0]); iVec0[0] = iTemp1; - iRec5[0] = std::max(int((iSlow7 * (iTemp1 < iVec0[1]))), int((iRec5[1] + -1))); - float fTemp2 = std::fabs(std::max(float(iTemp1), float((iRec5[0] > 0)))); - float fTemp3 = ((fRec0[1] > fTemp2) ? fSlow11 : fSlow9); - fRec1[0] = ((fRec1[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); - fRec0[0] = fRec1[0]; - output0[i0] = FAUSTFLOAT((fTemp0 * fRec0[0])); - fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - iVec0[1] = iVec0[0]; - iRec5[1] = iRec5[0]; + iRec3[0] = std::max(iSlow7 * (iTemp1 < iVec0[1]), iRec3[1] + -1); + float fTemp2 = std::fabs(std::max(float(iTemp1), float(iRec3[0] > 0))); + float fTemp3 = ((fTemp2 > fRec0[1]) ? fSlow11 : fSlow9); + fRec0[0] = fTemp2 * (1.0f - fTemp3) + fRec0[1] * fTemp3; + output0[i0] = FAUSTFLOAT(fTemp0 * fRec0[0]); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + iVec0[1] = iVec0[0]; + iRec3[1] = iRec3[0]; fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/dyn/dyn_gate2.h b/ceammc/ext/src/dyn/dyn_gate2.h index 4c3ee05a89..edf7b6cfde 100644 --- a/ceammc/ext/src/dyn/dyn_gate2.h +++ b/ceammc/ext/src/dyn/dyn_gate2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "dyn.gate2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_gate2 -scn dyn_gate2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_gate2_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_gate2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_gate2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_gate2_dsp { +class FAUST_API dyn_gate2_dsp { public: @@ -162,7 +247,7 @@ class dyn_gate2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_gate2_dsp { +class FAUST_API decorator_dsp : public dyn_gate2_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_gate2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_gate2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_gate2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_gate2 : public dyn_gate2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_gate2 #endif @@ -559,6 +636,13 @@ struct dyn_gate2 : public dyn_gate2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_gate2 : public dyn_gate2_dsp { private: @@ -567,28 +651,28 @@ class dyn_gate2 : public dyn_gate2_dsp { FAUSTFLOAT fVslider1; int fSampleRate; float fConst1; - float fRec3[2]; + float fRec1[2]; float fConst2; FAUSTFLOAT fVslider2; float fConst3; - float fRec4[2]; + float fRec2[2]; int iVec0[2]; float fConst4; FAUSTFLOAT fVslider3; - int iRec5[2]; - float fRec1[2]; + int iRec3[2]; float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_gate2 -scn dyn_gate2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "dyn_gate2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -601,7 +685,9 @@ class dyn_gate2 : public dyn_gate2_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -616,38 +702,35 @@ class dyn_gate2 : public dyn_gate2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (1.0f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); - fConst4 = (0.00100000005f * fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.0f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; + fConst4 = 0.001f * fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(0.10000000000000001f); - fVslider1 = FAUSTFLOAT(20.0f); - fVslider2 = FAUSTFLOAT(40.0f); - fVslider3 = FAUSTFLOAT(100.0f); + fVslider0 = FAUSTFLOAT(0.1f); + fVslider1 = FAUSTFLOAT(2e+01f); + fVslider2 = FAUSTFLOAT(4e+01f); + fVslider3 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec3[l0] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec4[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { iVec0[l2] = 0; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - iRec5[l3] = 0; + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + iRec3[l3] = 0; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec1[l4] = 0.0f; - } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec0[l5] = 0.0f; + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec0[l4] = 0.0f; } } @@ -672,56 +755,50 @@ class dyn_gate2 : public dyn_gate2_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("dyn.gate2"); ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(0.100000001f), FAUSTFLOAT(0.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("attack", &fVslider0, FAUSTFLOAT(0.1f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider3, "unit", "ms"); - ui_interface->addVerticalSlider("hold", &fVslider3, FAUSTFLOAT(100.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("hold", &fVslider3, FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "ms"); - ui_interface->addVerticalSlider("release", &fVslider1, FAUSTFLOAT(20.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("release", &fVslider1, FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("threshold", &fVslider2, FAUSTFLOAT(40.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("threshold", &fVslider2, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - float fSlow0 = (0.00100000005f * float(fVslider0)); - float fSlow1 = (0.00100000005f * float(fVslider1)); + float fSlow0 = 0.001f * float(fVslider0); + float fSlow1 = 0.001f * float(fVslider1); float fSlow2 = std::min(fSlow0, fSlow1); - int iSlow3 = (std::fabs(fSlow2) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst1 / (iSlow3 ? 1.0f : fSlow2)))); - float fSlow4 = (iSlow3 ? 0.0f : fThen1); - float fSlow5 = (1.0f - fSlow4); - float fSlow6 = (fConst2 * (float(fVslider2) + -100.0f)); - int iSlow7 = int((fConst4 * float(fVslider3))); - int iSlow8 = (std::fabs(fSlow0) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst1 / (iSlow8 ? 1.0f : fSlow0)))); - float fSlow9 = (iSlow8 ? 0.0f : fThen3); - int iSlow10 = (std::fabs(fSlow1) < 1.1920929e-07f); - float fThen5 = std::exp((0.0f - (fConst1 / (iSlow10 ? 1.0f : fSlow1)))); - float fSlow11 = (iSlow10 ? 0.0f : fThen5); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + int iSlow3 = std::fabs(fSlow2) < 1.1920929e-07f; + float fSlow4 = ((iSlow3) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow3) ? 1.0f : fSlow2))); + float fSlow5 = 1.0f - fSlow4; + float fSlow6 = fConst2 * (float(fVslider2) + -1e+02f); + int iSlow7 = int(fConst4 * float(fVslider3)); + int iSlow8 = std::fabs(fSlow1) < 1.1920929e-07f; + float fSlow9 = ((iSlow8) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow8) ? 1.0f : fSlow1))); + int iSlow10 = std::fabs(fSlow0) < 1.1920929e-07f; + float fSlow11 = ((iSlow10) ? 0.0f : std::exp(0.0f - fConst1 / ((iSlow10) ? 1.0f : fSlow0))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); float fTemp1 = float(input1[i0]); - fRec3[0] = ((fRec3[1] * fSlow4) + (std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))) * fSlow5)); - float fRec2 = fRec3[0]; - fRec4[0] = (fSlow6 + (fConst3 * fRec4[1])); - int iTemp2 = (fRec2 > std::pow(10.0f, (0.0500000007f * fRec4[0]))); + fRec1[0] = std::fabs(std::fabs(fTemp0) + std::fabs(fTemp1)) * fSlow5 + fRec1[1] * fSlow4; + fRec2[0] = fSlow6 + fConst3 * fRec2[1]; + int iTemp2 = fRec1[0] > std::pow(1e+01f, 0.05f * fRec2[0]); iVec0[0] = iTemp2; - iRec5[0] = std::max(int((iSlow7 * (iTemp2 < iVec0[1]))), int((iRec5[1] + -1))); - float fTemp3 = std::fabs(std::max(float(iTemp2), float((iRec5[0] > 0)))); - float fTemp4 = ((fRec0[1] > fTemp3) ? fSlow11 : fSlow9); - fRec1[0] = ((fRec1[1] * fTemp4) + (fTemp3 * (1.0f - fTemp4))); - fRec0[0] = fRec1[0]; - output0[i0] = FAUSTFLOAT((fTemp0 * fRec0[0])); - output1[i0] = FAUSTFLOAT((fTemp1 * fRec0[0])); - fRec3[1] = fRec3[0]; - fRec4[1] = fRec4[0]; - iVec0[1] = iVec0[0]; - iRec5[1] = iRec5[0]; + iRec3[0] = std::max(iSlow7 * (iTemp2 < iVec0[1]), iRec3[1] + -1); + float fTemp3 = std::fabs(std::max(float(iTemp2), float(iRec3[0] > 0))); + float fTemp4 = ((fTemp3 > fRec0[1]) ? fSlow11 : fSlow9); + fRec0[0] = fTemp3 * (1.0f - fTemp4) + fRec0[1] * fTemp4; + output0[i0] = FAUSTFLOAT(fTemp0 * fRec0[0]); + output1[i0] = FAUSTFLOAT(fTemp1 * fRec0[0]); fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + iVec0[1] = iVec0[0]; + iRec3[1] = iRec3[0]; fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/dyn/dyn_limit.h b/ceammc/ext/src/dyn/dyn_limit.h index dff39e73ec..bd8a35ef61 100644 --- a/ceammc/ext/src/dyn/dyn_limit.h +++ b/ceammc/ext/src/dyn/dyn_limit.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "dyn_limit" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "dyn.limit" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_limit -scn dyn_limit_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_limit_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_limit_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_limit_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_limit_dsp { +class FAUST_API dyn_limit_dsp { public: @@ -162,7 +247,7 @@ class dyn_limit_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_limit_dsp { +class FAUST_API decorator_dsp : public dyn_limit_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_limit_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_limit_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_limit_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_limit : public dyn_limit_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_limit #endif @@ -559,6 +636,13 @@ struct dyn_limit : public dyn_limit_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_limit : public dyn_limit_dsp { private: @@ -568,18 +652,18 @@ class dyn_limit : public dyn_limit_dsp { float fConst2; float fConst3; float fConst4; - float fRec2[2]; float fRec1[2]; float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_limit -scn dyn_limit_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("compressors.lib/compression_gain_mono:author", "Julius O. Smith III"); m->declare("compressors.lib/compression_gain_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compression_gain_mono:license", "MIT-style STK-4.3 license"); @@ -593,18 +677,20 @@ class dyn_limit : public dyn_limit_dsp { m->declare("compressors.lib/limiter_1176_R4_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/limiter_1176_R4_mono:license", "MIT-style STK-4.3 license"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); - m->declare("compressors.lib/version", "0.1"); + m->declare("compressors.lib/version", "0.4"); m->declare("filename", "dyn_limit.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "dyn_limit"); + m->declare("name", "dyn.limit"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -619,25 +705,22 @@ class dyn_limit : public dyn_limit_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = std::exp((0.0f - (2500.0f / fConst0))); - fConst2 = (1.0f - fConst1); - fConst3 = std::exp((0.0f - (1250.0f / fConst0))); - fConst4 = std::exp((0.0f - (2.0f / fConst0))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = std::exp(0.0f - 2.5e+03f / fConst0); + fConst2 = 1.0f - fConst1; + fConst3 = std::exp(0.0f - 2.0f / fConst0); + fConst4 = std::exp(0.0f - 1.25e+03f / fConst0); } virtual void instanceResetUserInterface() { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec2[l0] = 0.0f; - } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec1[l1] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec0[l1] = 0.0f; } } @@ -660,22 +743,20 @@ class dyn_limit : public dyn_limit_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("dyn_limit"); + ui_interface->openVerticalBox("dyn.limit"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); float fTemp1 = std::fabs(fTemp0); - float fTemp2 = ((fRec1[1] > fTemp1) ? fConst4 : fConst3); - fRec2[0] = ((fRec2[1] * fTemp2) + (fTemp1 * (1.0f - fTemp2))); - fRec1[0] = fRec2[0]; - fRec0[0] = ((fConst1 * fRec0[1]) + (fConst2 * (0.0f - (0.75f * std::max(((20.0f * std::log10(std::max(1.17549435e-38f, fRec1[0]))) + 6.0f), 0.0f))))); - output0[i0] = FAUSTFLOAT((fTemp0 * std::pow(10.0f, (0.0500000007f * fRec0[0])))); - fRec2[1] = fRec2[0]; + float fTemp2 = ((fTemp1 > fRec1[1]) ? fConst4 : fConst3); + fRec1[0] = fTemp1 * (1.0f - fTemp2) + fRec1[1] * fTemp2; + fRec0[0] = fConst2 * (0.0f - 0.75f * std::max(2e+01f * std::log10(std::max(1.1754944e-38f, fRec1[0])) + 6.0f, 0.0f)) + fConst1 * fRec0[1]; + output0[i0] = FAUSTFLOAT(fTemp0 * std::pow(1e+01f, 0.05f * fRec0[0])); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/dyn/dyn_limit2.h b/ceammc/ext/src/dyn/dyn_limit2.h index 55e311fee0..0e8d72764d 100644 --- a/ceammc/ext/src/dyn/dyn_limit2.h +++ b/ceammc/ext/src/dyn/dyn_limit2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "dyn_limit2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "dyn.limit2" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_limit2 -scn dyn_limit2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_limit2_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_limit2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_limit2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_limit2_dsp { +class FAUST_API dyn_limit2_dsp { public: @@ -162,7 +247,7 @@ class dyn_limit2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_limit2_dsp { +class FAUST_API decorator_dsp : public dyn_limit2_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_limit2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_limit2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_limit2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct dyn_limit2 : public dyn_limit2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_limit2 #endif @@ -559,6 +636,13 @@ struct dyn_limit2 : public dyn_limit2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class dyn_limit2 : public dyn_limit2_dsp { private: @@ -568,18 +652,18 @@ class dyn_limit2 : public dyn_limit2_dsp { float fConst2; float fConst3; float fConst4; - float fRec2[2]; float fRec1[2]; float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_limit2 -scn dyn_limit2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("compressors.lib/compression_gain_mono:author", "Julius O. Smith III"); m->declare("compressors.lib/compression_gain_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compression_gain_mono:license", "MIT-style STK-4.3 license"); @@ -590,18 +674,20 @@ class dyn_limit2 : public dyn_limit2_dsp { m->declare("compressors.lib/limiter_1176_R4_stereo:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/limiter_1176_R4_stereo:license", "MIT-style STK-4.3 license"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); - m->declare("compressors.lib/version", "0.1"); + m->declare("compressors.lib/version", "0.4"); m->declare("filename", "dyn_limit2.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "dyn_limit2"); + m->declare("name", "dyn.limit2"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -616,25 +702,22 @@ class dyn_limit2 : public dyn_limit2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = std::exp((0.0f - (2500.0f / fConst0))); - fConst2 = (1.0f - fConst1); - fConst3 = std::exp((0.0f - (1250.0f / fConst0))); - fConst4 = std::exp((0.0f - (2.0f / fConst0))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = std::exp(0.0f - 2.5e+03f / fConst0); + fConst2 = 1.0f - fConst1; + fConst3 = std::exp(0.0f - 2.0f / fConst0); + fConst4 = std::exp(0.0f - 1.25e+03f / fConst0); } virtual void instanceResetUserInterface() { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec2[l0] = 0.0f; - } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec1[l1] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec0[l2] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec0[l1] = 0.0f; } } @@ -657,27 +740,25 @@ class dyn_limit2 : public dyn_limit2_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("dyn_limit2"); + ui_interface->openVerticalBox("dyn.limit2"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); float fTemp1 = float(input1[i0]); - float fTemp2 = std::fabs((std::fabs(fTemp0) + std::fabs(fTemp1))); - float fTemp3 = ((fRec1[1] > fTemp2) ? fConst4 : fConst3); - fRec2[0] = ((fRec2[1] * fTemp3) + (fTemp2 * (1.0f - fTemp3))); - fRec1[0] = fRec2[0]; - fRec0[0] = ((fConst1 * fRec0[1]) + (fConst2 * (0.0f - (0.75f * std::max(((20.0f * std::log10(std::max(1.17549435e-38f, fRec1[0]))) + 6.0f), 0.0f))))); - float fTemp4 = std::pow(10.0f, (0.0500000007f * fRec0[0])); - output0[i0] = FAUSTFLOAT((fTemp0 * fTemp4)); - output1[i0] = FAUSTFLOAT((fTemp1 * fTemp4)); - fRec2[1] = fRec2[0]; + float fTemp2 = std::fabs(std::fabs(fTemp0) + std::fabs(fTemp1)); + float fTemp3 = ((fTemp2 > fRec1[1]) ? fConst4 : fConst3); + fRec1[0] = fTemp2 * (1.0f - fTemp3) + fRec1[1] * fTemp3; + fRec0[0] = fConst2 * (0.0f - 0.75f * std::max(2e+01f * std::log10(std::max(1.1754944e-38f, fRec1[0])) + 6.0f, 0.0f)) + fConst1 * fRec0[1]; + float fTemp4 = std::pow(1e+01f, 0.05f * fRec0[0]); + output0[i0] = FAUSTFLOAT(fTemp0 * fTemp4); + output1[i0] = FAUSTFLOAT(fTemp1 * fTemp4); fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/dyn/dyn_softclip.h b/ceammc/ext/src/dyn/dyn_softclip.h index 33b5424c9c..8529ca12a8 100644 --- a/ceammc/ext/src/dyn/dyn_softclip.h +++ b/ceammc/ext/src/dyn/dyn_softclip.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "dyn_softclip" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "dyn.softclip" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_softclip -scn dyn_softclip_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __dyn_softclip_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN dyn_softclip_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN dyn_softclip_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class dyn_softclip_dsp { +class FAUST_API dyn_softclip_dsp { public: @@ -162,7 +247,7 @@ class dyn_softclip_dsp { * Generic DSP decorator. */ -class decorator_dsp : public dyn_softclip_dsp { +class FAUST_API decorator_dsp : public dyn_softclip_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public dyn_softclip_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END dyn_softclip_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in dyn_softclip_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -548,10 +626,6 @@ struct dyn_softclip : public dyn_softclip_dsp { #include #include -static float dyn_softclip_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS dyn_softclip #endif @@ -561,6 +635,16 @@ static float dyn_softclip_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float dyn_softclip_faustpower2_f(float value) { + return value * value; +} + class dyn_softclip : public dyn_softclip_dsp { private: @@ -570,9 +654,9 @@ class dyn_softclip : public dyn_softclip_dsp { public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn dyn_softclip -scn dyn_softclip_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "dyn_softclip.dsp"); - m->declare("name", "dyn_softclip"); + m->declare("name", "dyn.softclip"); } virtual int getNumInputs() { @@ -614,17 +698,17 @@ class dyn_softclip : public dyn_softclip_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("dyn_softclip"); + ui_interface->openVerticalBox("dyn.softclip"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - float fTemp0 = (std::fabs((2.0f * (std::max(-0.25f, std::min(0.25f, (0.158800006f * float(input0[i0])))) + -0.25f))) + -0.5f); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = std::fabs(2.0f * (std::max(-0.25f, std::min(0.25f, 0.1588f * float(input0[i0]))) + -0.25f)) + -0.5f; float fTemp1 = dyn_softclip_faustpower2_f(fTemp0); - output0[i0] = FAUSTFLOAT((fTemp0 * ((fTemp1 * ((2.26548004f * fTemp1) + -5.13274002f)) + 3.14159012f))); + output0[i0] = FAUSTFLOAT(fTemp0 * (fTemp1 * (2.26548f * fTemp1 + -5.13274f) + 3.14159f)); } } diff --git a/ceammc/ext/src/env/CMakeLists.txt b/ceammc/ext/src/env/CMakeLists.txt index ecde3bc998..0c8c0a3b24 100644 --- a/ceammc/ext/src/env/CMakeLists.txt +++ b/ceammc/ext/src/env/CMakeLists.txt @@ -23,3 +23,6 @@ ceammc_env_obj_external(smooth) add_library(ceammc_env STATIC mod_env.cpp ${ENV_SOURCES}) set_target_properties(ceammc_env PROPERTIES COMPILE_DEFINITIONS "FAUST_MACRO") +target_include_directories(ceammc_env + PRIVATE $ +) diff --git a/ceammc/ext/src/env/datatype_env.cpp b/ceammc/ext/src/env/datatype_env.cpp index 59633f5dd7..d67e73fac2 100644 --- a/ceammc/ext/src/env/datatype_env.cpp +++ b/ceammc/ext/src/env/datatype_env.cpp @@ -1,60 +1,71 @@ #include "datatype_env.h" #include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_datastorage.h" #include "ceammc_log.h" - -#include "../string/tinyformat.h" +#include "datatype_dict.h" +#include "datatype_mlist.h" +#include "fmt/format.h" #include #include #include -static const char* SYM_ADSR = "adsr"; -static const char* SYM_ASR = "asr"; -static const char* SYM_AR = "ar"; - -static const char* SYM_EADSR = "eadsr"; -static const char* SYM_EASR = "easr"; -static const char* SYM_EAR = "ear"; +constexpr const char* TYPE_NAME = "Env"; + +CEAMMC_DEFINE_HASH(adsr); +CEAMMC_DEFINE_HASH(asr); +CEAMMC_DEFINE_HASH(ar); +CEAMMC_DEFINE_HASH(eadsr); +CEAMMC_DEFINE_HASH(easr); +CEAMMC_DEFINE_HASH(ear); +CEAMMC_DEFINE_HASH(step) +CEAMMC_DEFINE_HASH(line) +CEAMMC_DEFINE_HASH(exp) +CEAMMC_DEFINE_HASH(sin2) +CEAMMC_DEFINE_HASH(sigmoid) + +CEAMMC_DEFINE_HASH(all) +CEAMMC_DEFINE_HASH(none) +CEAMMC_DEFINE_HASH(time) +CEAMMC_DEFINE_HASH(value) + +namespace { + +const char* CURVE_TYPES[] = { + str_step, str_line, str_exp, str_sin2, str_sigmoid +}; -static const char* SYM_ENVELOPE_POINT = "EnvelopePoint"; +const char* FIX_TYPES[] = { + str_none, str_all, str_time, str_value +}; -static const char* SYM_CURVE_STEP = "step"; -static const char* SYM_CURVE_LINE = "line"; -static const char* SYM_CURVE_EXP = "exp"; -static const char* SYM_CURVE_SIN2 = "sin2"; -static const char* SYM_CURVE_SIGMOID = "sigmoid"; +struct find_by_time { + size_t t; + find_by_time(size_t time_us) + : t(time_us) + { + } -static const char* CURVE_TYPES[] = { - SYM_CURVE_STEP, SYM_CURVE_LINE, SYM_CURVE_EXP, SYM_CURVE_SIN2, SYM_CURVE_SIGMOID + bool operator()(const EnvelopePoint& n) { return n.utime == t; } }; -static bool compareByTime(const EnvelopePoint& n0, const EnvelopePoint& n1) +bool compareByTime(const EnvelopePoint& n0, const EnvelopePoint& n1) { return n0.utime < n1.utime; } -static bool compareByValue(const EnvelopePoint& n0, const EnvelopePoint& n1) +bool compareByValue(const EnvelopePoint& n0, const EnvelopePoint& n1) { return n0.value < n1.value; } -static bool has_stop(const EnvelopePoint& n) +bool has_stop(const EnvelopePoint& n) { return n.stop; } -struct find_by_time { - size_t t; - find_by_time(size_t time_us) - : t(time_us) - { - } - - bool operator()(const EnvelopePoint& n) { return n.utime == t; } -}; - -static bool isValidAttack(const Atom& p) +bool isValidAttack(const Atom& p) { if (!p.isFloat() || p.asFloat() < 0) { LIB_ERR << "invalid attack time: " << p; @@ -64,7 +75,7 @@ static bool isValidAttack(const Atom& p) return true; } -static bool isValidDecay(const Atom& p) +bool isValidDecay(const Atom& p) { if (!p.isFloat() || p.asFloat() < 0) { LIB_ERR << "invalid decay time: " << p; @@ -74,7 +85,7 @@ static bool isValidDecay(const Atom& p) return true; } -static bool isValidRelease(const Atom& p) +bool isValidRelease(const Atom& p) { if (!p.isFloat() || p.asFloat() < 0) { LIB_ERR << "invalid release time: " << p; @@ -84,7 +95,7 @@ static bool isValidRelease(const Atom& p) return true; } -static bool isValidSustain(const Atom& p) +bool isValidSustain(const Atom& p) { if (!p.isFloat() || p.asFloat() < 0 || p.asFloat() > 100) { LIB_ERR << "invalid sustain level value: " << p; @@ -156,7 +167,137 @@ static bool isValidSustain(const Atom& p) } \ } -int DataTypeEnv::dataType = DataStorage::instance().registerNewType("Env"); +const char* fixToStr(uint8_t f) +{ + switch (f) { + case EnvelopePoint::FIX_TIME: + return str_time; + case EnvelopePoint::FIX_VALUE: + return str_value; + case EnvelopePoint::FIX_BOTH: + return str_all; + case EnvelopePoint::FIX_NONE: + default: + return str_none; + } +} + +void symbolToFix(t_symbol* s, std::uint8_t& fix) +{ + switch (crc32_hash(s)) { + case hash_time: + fix = EnvelopePoint::FIX_TIME; + break; + case hash_value: + fix = EnvelopePoint::FIX_VALUE; + break; + case hash_all: + fix = EnvelopePoint::FIX_BOTH; + break; + case hash_none: + default: + fix = EnvelopePoint::FIX_NONE; + break; + } +} + +void exportPoint(const EnvelopePoint& pt, std::string& res) +{ + auto str = std::back_inserter(res); + fmt::format_to(str, " [time: {0:.7g} value: {1:.7g} type: {2}", + pt.timeMs(), pt.value, CURVE_TYPES[pt.type]); + if (pt.type != CURVE_LINE || pt.type != CURVE_STEP) + fmt::format_to(str, " curve: {}", + (pt.type == CURVE_SIGMOID) ? pt.sigmoid_skew : pt.data); + + if (pt.fix_pos != EnvelopePoint::FIX_NONE) + fmt::format_to(str, " fix: {}", fixToStr(pt.fix_pos)); + fmt::format_to(str, " stop: {}]", pt.stop ? 1 : 0); +} + +EnvelopePoint pointFromDict(const DataTypeDict& dict) +{ + EnvelopePoint pt { 0, 0 }; + + for (auto& kv : dict) { + const auto key = kv.first; + const auto& val = kv.second; + switch (crc32_hash(key)) { + case "time"_hash: + pt.utime = val.floatAt(0, 0) * 1000; + break; + case "value"_hash: + pt.value = val.floatAt(0, 0); + break; + case "type"_hash: + symbol2curve(val.symbolAt(0, gensym(str_line)), pt.type); + break; + case "stop"_hash: + pt.stop = val.boolAt(0, false); + break; + case "curve"_hash: + pt.data = val.floatAt(0, 0); + break; + case "skew"_hash: + pt.sigmoid_skew = val.floatAt(0, 0); + break; + case "fix"_hash: + symbolToFix(val.symbolAt(0, gensym(str_none)), pt.fix_pos); + break; + default: + LIB_ERR << fmt::format("[{}] invalid key '{}'", TYPE_NAME, key->s_name); + break; + } + } + + return pt; +} + +Atom createEnv(const DictAtom& dict) +{ + EnvAtom res; + + for (auto& kv : *dict) { + const auto key = kv.first; + const auto& val = kv.second; + + switch (crc32_hash(key)) { + case hash_adsr: + res->setADSR(val); + return res; + case hash_asr: + res->setASR(val); + return res; + case hash_ar: + res->setAR(val); + return res; + case hash_step: + res->setStep(val); + return res; + case hash_line: + res->setLine(val); + return res; + case hash_ear: + res->setEAR(val); + return res; + case "points"_hash: { + for (auto& a : val) { + auto dict = a.asDataT(); + if (dict) + res->insertPoint(pointFromDict(*dict)); + } + } break; + default: + LIB_ERR << fmt::format("invalid key: '{}'", key->s_name); + break; + } + } + + return res; +} +} + +DataTypeId DataTypeEnv::dataType = DataStorage::instance().registerNewType(TYPE_NAME, nullptr, createEnv); DataTypeEnv::DataTypeEnv() { @@ -172,7 +313,7 @@ DataTypeEnv::DataTypeEnv(DataTypeEnv&& env) { } -int DataTypeEnv::type() const noexcept +DataTypeId DataTypeEnv::type() const noexcept { return dataType; } @@ -185,20 +326,19 @@ static const char* to_string(CurveType t) return "?"; } -std::string DataTypeEnv::toString() const -{ - std::string res("Envelope:\n"); - - for (size_t i = 0; i < points_.size(); i++) { - res += tfm::format(" %c point: % 8g(ms) % 8g %s\n", - points_[i].stop ? '*' : ' ', - points_[i].utime / 1000.f, - points_[i].value, - to_string(points_[i].type)); - } - - return res; -} +const DataTypeEnv::NamedMethodList DataTypeEnv::named_methods = { + NamedMethod { hash_adsr, &DataTypeEnv::setADSR }, + NamedMethod { hash_ar, &DataTypeEnv::setAR }, + NamedMethod { hash_asr, &DataTypeEnv::setASR }, + NamedMethod { hash_eadsr, &DataTypeEnv::setEADSR }, + NamedMethod { hash_ear, &DataTypeEnv::setEAR }, + NamedMethod { hash_easr, &DataTypeEnv::setEASR }, + NamedMethod { hash_exp, &DataTypeEnv::setExponential }, + NamedMethod { hash_line, &DataTypeEnv::setLine }, + NamedMethod { hash_sigmoid, &DataTypeEnv::setSigmoid }, + NamedMethod { hash_sin2, &DataTypeEnv::setSin2 }, + NamedMethod { hash_step, &DataTypeEnv::setStep }, +}; bool DataTypeEnv::isEqual(const AbstractData* d) const noexcept { @@ -332,7 +472,7 @@ void DataTypeEnv::shiftTime(long time_us) points_[i].utime += time_us; } -void DataTypeEnv::scaleTime(double factor) +void DataTypeEnv::scaleTime(float factor) { if (factor < 0) return; @@ -341,7 +481,7 @@ void DataTypeEnv::scaleTime(double factor) points_[i].utime = round(factor * points_[i].utime); } -void DataTypeEnv::scaleValue(double factor) +void DataTypeEnv::scaleValue(float factor) { for (size_t i = 0; i < points_.size(); i++) points_[i].value *= factor; @@ -349,12 +489,14 @@ void DataTypeEnv::scaleValue(double factor) DataTypeEnv DataTypeEnv::normalize() const { + DataTypeEnv res; + std::pair yr = valueRange(); float vrange = yr.second - yr.first; if (vrange == 0 || totalLength() == 0) - return DataTypeEnv(); + return res; - DataTypeEnv res(*this); + res = *this; // shift if (points_[0].utime > 0) @@ -477,7 +619,7 @@ void DataTypeEnv::clear() points_.clear(); } -void DataTypeEnv::setAR(size_t attack_us, size_t release_us, double value) +void DataTypeEnv::setAR(size_t attack_us, size_t release_us, float value) { clear(); points_.push_back(EnvelopePoint(0, 0, false, CURVE_LINE)); @@ -615,56 +757,56 @@ bool DataTypeEnv::setEAR(const AtomListView& lv) return true; } -bool DataTypeEnv::setEASR(const AtomListView& lst) +bool DataTypeEnv::setEASR(const AtomListView& lv) { static const char* usage = "Usage: EASR attack(ms) attack_curve release(ms) release_curve"; - if (lst.size() != 4) { + if (lv.size() != 4) { LIB_ERR << usage; return false; } - VALIDATE_ATTACK(lst, 0, usage); - VALIDATE_ATTACK_CURVE(lst, 1, usage); - VALIDATE_RELEASE(lst, 2, usage); - VALIDATE_RELEASE_CURVE(lst, 3, usage); + VALIDATE_ATTACK(lv, 0, usage); + VALIDATE_ATTACK_CURVE(lv, 1, usage); + VALIDATE_RELEASE(lv, 2, usage); + VALIDATE_RELEASE_CURVE(lv, 3, usage); - setEASR(lst[0].asFloat() * 1000, lst[1].asFloat(), lst[2].asFloat() * 1000, lst[3].asFloat()); + setEASR(lv[0].asFloat() * 1000, lv[1].asFloat(), lv[2].asFloat() * 1000, lv[3].asFloat()); return true; } -bool DataTypeEnv::setEADSR(const AtomListView& lst) +bool DataTypeEnv::setEADSR(const AtomListView& lv) { static const char* usage = "Usage: EADSR attack(ms) attack_curve " "decay(ms) decay_curve sustain_level " "release(ms) release_curve"; - if (lst.size() != 7) { + if (lv.size() != 7) { LIB_ERR << usage; return false; } - VALIDATE_ATTACK(lst, 0, usage); - VALIDATE_ATTACK_CURVE(lst, 1, usage); - VALIDATE_DECAY(lst, 2, usage); - VALIDATE_DECAY_CURVE(lst, 3, usage); - VALIDATE_SUSTAIN(lst, 4, usage); - VALIDATE_RELEASE(lst, 5, usage); - VALIDATE_RELEASE_CURVE(lst, 6, usage); + VALIDATE_ATTACK(lv, 0, usage); + VALIDATE_ATTACK_CURVE(lv, 1, usage); + VALIDATE_DECAY(lv, 2, usage); + VALIDATE_DECAY_CURVE(lv, 3, usage); + VALIDATE_SUSTAIN(lv, 4, usage); + VALIDATE_RELEASE(lv, 5, usage); + VALIDATE_RELEASE_CURVE(lv, 6, usage); - setEADSR(lst[0].asFloat() * 1000, lst[1].asFloat(), - lst[2].asFloat() * 1000, lst[3].asFloat(), - lst[4].asFloat() / 100, - lst[5].asFloat() * 1000, lst[6].asFloat()); + setEADSR(lv[0].asFloat() * 1000, lv[1].asFloat(), + lv[2].asFloat() * 1000, lv[3].asFloat(), + lv[4].asFloat() / 100, + lv[5].asFloat() * 1000, lv[6].asFloat()); return true; } -bool DataTypeEnv::setStep(const AtomListView& lst) +bool DataTypeEnv::setStep(const AtomListView& lv) { // check args - if (lst.size() % 2 != 1) { + if (lv.size() % 2 != 1) { LIB_ERR << "Usage: step VAL_0 LEN_0 VAL_1 [LEN_1 VAL_2] ..."; return false; } @@ -673,13 +815,13 @@ bool DataTypeEnv::setStep(const AtomListView& lst) points_.clear(); // insert start point - points_.push_back(EnvelopePoint(0, lst[0].asFloat(), false, CURVE_STEP)); + points_.push_back(EnvelopePoint(0, lv[0].asFloat(), false, CURVE_STEP)); t_float offset_ms = 0; // inserts remaining - for (size_t i = 1; i < (lst.size() - 1); i += 2) { - t_float time_ms = lst[i].asFloat() * 1000; + for (size_t i = 1; i < (lv.size() - 1); i += 2) { + t_float time_ms = lv[i].asFloat() * 1000; if (time_ms < 1) { LIB_ERR << "invalid segment, skipping..."; @@ -687,16 +829,16 @@ bool DataTypeEnv::setStep(const AtomListView& lst) } offset_ms += time_ms; - points_.push_back(EnvelopePoint(offset_ms, lst[i + 1].asFloat(), false, CURVE_STEP)); + points_.push_back(EnvelopePoint(offset_ms, lv[i + 1].asFloat(), false, CURVE_STEP)); } return true; } -bool DataTypeEnv::setLine(const AtomListView& lst) +bool DataTypeEnv::setLine(const AtomListView& lv) { // check args - if (lst.size() % 2 != 1) { + if (lv.size() % 2 != 1) { LIB_ERR << "Usage: line VAL_0 LEN_0 VAL_1 [LEN_1 VAL_2] ..."; return false; } @@ -705,13 +847,13 @@ bool DataTypeEnv::setLine(const AtomListView& lst) points_.clear(); // insert start point - points_.push_back(EnvelopePoint(0, lst[0].asFloat(), false, CURVE_LINE)); + points_.push_back(EnvelopePoint(0, lv[0].asFloat(), false, CURVE_LINE)); t_float offset_us = 0; // inserts remaining - for (size_t i = 1; i < (lst.size() - 1); i += 2) { - t_float time_us = lst[i].asFloat() * 1000; + for (size_t i = 1; i < (lv.size() - 1); i += 2) { + t_float time_us = lv[i].asFloat() * 1000; if (time_us < 1) { LIB_ERR << "invalid segment, skipping..."; @@ -719,7 +861,7 @@ bool DataTypeEnv::setLine(const AtomListView& lst) } offset_us += time_us; - points_.push_back(EnvelopePoint(offset_us, lst[i + 1].asFloat(), false, CURVE_LINE)); + points_.push_back(EnvelopePoint(offset_us, lv[i + 1].asFloat(), false, CURVE_LINE)); } return true; @@ -826,45 +968,27 @@ bool DataTypeEnv::setSigmoid(const AtomListView& lv) return true; } -struct NameEntry { - t_symbol* s; - bool (DataTypeEnv::*m)(const AtomListView&); -}; +bool DataTypeEnv::setNamedEnvelope(const char* name, const AtomListView& args) +{ + const auto hash = crc32_hash(name); -bool DataTypeEnv::setNamedEnvelope(t_symbol* name, const AtomListView& args) -{ - static const NameEntry envs[] = { - { gensym(SYM_EADSR), &DataTypeEnv::setEADSR }, - { gensym(SYM_EASR), &DataTypeEnv::setEASR }, - { gensym(SYM_EAR), &DataTypeEnv::setEAR }, - { gensym(SYM_ADSR), &DataTypeEnv::setADSR }, - { gensym(SYM_ASR), &DataTypeEnv::setASR }, - { gensym(SYM_AR), &DataTypeEnv::setAR }, - { gensym(SYM_CURVE_EXP), &DataTypeEnv::setExponential }, - { gensym(SYM_CURVE_LINE), &DataTypeEnv::setLine }, - { gensym(SYM_CURVE_SIGMOID), &DataTypeEnv::setSigmoid }, - { gensym(SYM_CURVE_SIN2), &DataTypeEnv::setSin2 }, - { gensym(SYM_CURVE_STEP), &DataTypeEnv::setStep }, - }; - - for (const NameEntry& e : envs) { - if (e.s == name) - return (this->*e.m)(args); + for (const auto& n : named_methods) { + if (n.crc32_hash == hash) + return (this->*n.m)(args); } return false; } -bool DataTypeEnv::isNamedEnvelope(t_symbol* name) const +bool DataTypeEnv::isNamedEnvelope(const char* name) const { - static t_symbol* names[] = { - gensym(SYM_AR), gensym(SYM_ASR), gensym(SYM_ADSR), - gensym(SYM_EAR), gensym(SYM_EASR), gensym(SYM_EADSR), - gensym(SYM_CURVE_EXP), gensym(SYM_CURVE_LINE), - gensym(SYM_CURVE_SIGMOID), gensym(SYM_CURVE_SIN2), gensym(SYM_CURVE_STEP) - }; + const auto hash = crc32_hash(name); - return std::find(std::begin(names), std::end(names), name) != std::end(names); + return std::find_if( + named_methods.begin(), + named_methods.end(), + [hash](const NamedMethod& m) { return m.crc32_hash == hash; }) + != named_methods.end(); } bool DataTypeEnv::hasStopPoints() const @@ -934,47 +1058,6 @@ DataTypeEnv& DataTypeEnv::operator=(DataTypeEnv&& env) return *this; } -DataTypeEnv DataTypeEnv::fromListView(const AtomListView& lv) -{ - DataTypeEnv env; - - if (lv.size() % 7 != 0) - return env; - - size_t n = lv.size() / 7; - for (size_t i = 0; i < n; i++) { - - if (lv[i * 7].asSymbol() != gensym(SYM_ENVELOPE_POINT)) { - LIB_ERR << "invalid preset data: " << lv; - return env; - } - - size_t tm = lv[i * 7 + 1].asFloat(); - float value = lv[i * 7 + 2].asFloat(); - float curve_data = lv[i * 7 + 3].asFloat(); - float sigmoid_data = lv[i * 7 + 4].asFloat(); - CurveType t = static_cast(lv[i * 7 + 5].asInt()); - bool stop = lv[i * 7 + 6].asFloat(); - - EnvelopePoint pt(tm, value, stop, t, curve_data); - pt.sigmoid_skew = sigmoid_data; - - env.points_.push_back(pt); - } - - return env; -} - -AtomList DataTypeEnv::toList() const -{ - AtomList res; - - for (size_t i = 0; i < points_.size(); i++) - res.append(points_[i].toList()); - - return res; -} - void DataTypeEnv::sort() { std::stable_sort(points_.begin(), points_.end(), compareByTime); @@ -1052,6 +1135,109 @@ bool DataTypeEnv::isADSR(bool checkVal) const return true; } +bool DataTypeEnv::checkAR() const +{ + return points_.size() == 3 + && (points_[0].utime == 0 + && points_[0].value == 0 + && points_[0].stop == false + && points_[0].type == CURVE_LINE + && points_[0].fix_pos == EnvelopePoint::FIX_BOTH) + && (points_[1].value == 1 + && points_[1].stop == false + && points_[1].type == CURVE_LINE) + && (points_[2].value == 0 + && points_[2].stop == false + && points_[2].type == CURVE_LINE + && points_[2].fix_pos == EnvelopePoint::FIX_VALUE); +} + +bool DataTypeEnv::checkASR() const +{ + return points_.size() == 3 + && (points_[0].utime == 0 + && points_[0].value == 0 + && points_[0].stop == false + && points_[0].type == CURVE_LINE + && points_[0].fix_pos == EnvelopePoint::FIX_BOTH) + && (points_[1].value == 1 + && points_[1].stop == true + && points_[1].type == CURVE_LINE) + && (points_[2].value == 0 + && points_[2].stop == false + && points_[2].type == CURVE_LINE + && points_[2].fix_pos == EnvelopePoint::FIX_VALUE); +} + +bool DataTypeEnv::checkADSR() const +{ + return points_.size() == 4 + && (points_[0].utime == 0 + && points_[0].value == 0 + && points_[0].stop == false + && points_[0].type == CURVE_LINE + && points_[0].fix_pos == EnvelopePoint::FIX_BOTH) + && (points_[1].value == 1 + && points_[1].stop == false + && points_[1].type == CURVE_LINE) + && (points_[2].stop == true + && points_[2].type == CURVE_LINE) + && (points_[3].value == 0 + && points_[3].stop == false + && points_[3].type == CURVE_LINE + && points_[3].fix_pos == EnvelopePoint::FIX_VALUE); +} + +std::string DataTypeEnv::toString() const noexcept +{ + return toDictString(); +} + +std::string DataTypeEnv::toListStringContent() const noexcept +{ + return " "; +} + +std::string DataTypeEnv::toDictStringContent() const noexcept +{ + std::string res; + + try { + if (checkAR()) { + const auto A = points_[1].timeMs(); + const auto R = points_[2].timeMs() - A; + res = fmt::format("ar: {:.3g} {:.3g}", A, R); + } else if (checkASR()) { + const auto A = points_[1].timeMs(); + const auto R = points_[2].timeMs() - A; + res = fmt::format("asr: {:.3g} {:.3g}", A, R); + } else if (checkADSR()) { + const auto A = points_[1].timeMs(); + const auto D = points_[2].timeMs() - A; + const auto S = points_[2].value * 100; + const auto R = points_[3].timeMs() - (A + D); + res = fmt::format("adsr: {:.3g} {:.3g} {:.3g} {:.3g}", A, D, S, R); + } else if (!points_.empty()) { + res = fmt::format("points:\n"); + for (auto& pt : points_) { + exportPoint(pt, res); + res.push_back('\n'); + } + + } else + res = " "; + } catch (std::exception& e) { + LIB_ERR << e.what(); + } + + return res; +} + +bool DataTypeEnv::set(const AbstractData* d) noexcept +{ + return setDataT(d); +} + bool operator==(const EnvelopePoint& p0, const EnvelopePoint& p1) { return p0.utime == p1.utime @@ -1068,22 +1254,6 @@ std::ostream& operator<<(std::ostream& os, const DataTypeEnv& env) return os; } -AtomList EnvelopePoint::toList() const -{ - AtomList res; - res.fill(Atom(), 7); - - res[0].setSymbol(gensym(SYM_ENVELOPE_POINT), true); - res[1] = Atom(utime); - res[2] = Atom(value); - res[3] = Atom(data); - res[4] = Atom(sigmoid_skew); - res[5] = Atom(type); - res[6] = Atom(stop); - - return res; -} - bool symbol2curve(t_symbol* s, CurveType& t) { const size_t n = boost::size(CURVE_TYPES); diff --git a/ceammc/ext/src/env/datatype_env.h b/ceammc/ext/src/env/datatype_env.h index ecbd65929d..e3f99b31e1 100644 --- a/ceammc/ext/src/env/datatype_env.h +++ b/ceammc/ext/src/env/datatype_env.h @@ -7,13 +7,15 @@ #include "ceammc_data.h" #include +#include +#include #include #include using namespace ceammc; /* @note when add new type you have to update render functions and to_string function */ -enum CurveType { +enum CurveType : std::uint8_t { CURVE_STEP = 0, CURVE_LINE = 1, CURVE_EXP = 2, @@ -44,13 +46,6 @@ t_symbol* curve2symbol(CurveType t); bool isValidCurve(t_symbol* s); struct EnvelopePoint { - size_t utime; - double value; - float data; - float sigmoid_skew; - CurveType type; - bool stop; - enum FixType : std::uint8_t { FIX_NONE = 0, FIX_TIME = 1 << 0, @@ -58,9 +53,16 @@ struct EnvelopePoint { FIX_BOTH = FIX_TIME | FIX_VALUE }; +public: + std::uint64_t utime; + float value; + float data; + float sigmoid_skew; + CurveType type; + bool stop; std::uint8_t fix_pos; - EnvelopePoint(size_t time_us, double v, bool stop_node = false, CurveType t = CURVE_LINE, float curve = 0.f) + EnvelopePoint(size_t time_us, float v, bool stop_node = false, CurveType t = CURVE_LINE, float curve = 0.f) : utime(time_us > 0 ? time_us : 0) , value(v) , data(curve) @@ -80,8 +82,6 @@ struct EnvelopePoint { void toggleFixValue() { fix_pos ^= FIX_VALUE; } void unsetFixTime() { fix_pos &= (~FIX_TIME); } void unsetFixValue() { fix_pos &= (~FIX_VALUE); } - - AtomList toList() const; }; /** @@ -93,20 +93,19 @@ struct EnvelopePoint { bool operator==(const EnvelopePoint& p0, const EnvelopePoint& p1); /** - * Calculate time interval between points (signed) in millieseconds + * Calculate time interval between points (signed) in milliseconds * @param p0 * @param p1 * @return */ -static double intervalMs(const EnvelopePoint& p0, const EnvelopePoint& p1) +static inline double intervalMs(const EnvelopePoint& p0, const EnvelopePoint& p1) { return double(p0.utime - p1.utime) / 1000.0; } -typedef std::vector PointList; - class DataTypeEnv; using EnvAtom = DataAtom; +using PointList = boost::container::small_vector; class DataTypeEnv : public AbstractData { PointList points_; @@ -121,9 +120,8 @@ class DataTypeEnv : public AbstractData { DataTypeEnv& operator=(const DataTypeEnv& env); DataTypeEnv& operator=(DataTypeEnv&& env); - int type() const noexcept; - std::string toString() const; - bool isEqual(const AbstractData* d) const noexcept; + DataTypeId type() const noexcept override; + bool isEqual(const AbstractData* d) const noexcept override; iterator begin(); iterator end(); @@ -172,12 +170,12 @@ class DataTypeEnv : public AbstractData { /** * Scales all envelope points time by specified factor. */ - void scaleTime(double factor); + void scaleTime(float factor); /** - * Scales all envelope values by specified factor - */ - void scaleValue(double factor); + * Scales all envelope values by specified factor + */ + void scaleValue(float factor); /** * Returns new envelope in which point values are normalized to range [0-1] and @@ -248,7 +246,7 @@ class DataTypeEnv : public AbstractData { */ void clear(); - void setAR(size_t attack_us, size_t release_us, double value = 1); + void setAR(size_t attack_us, size_t release_us, float value = 1); void setEAR(size_t attack_us, float attack_curve, size_t release_us, float release_curve); void setASR(size_t attack_us, size_t release_us, double value = 1); void setEASR(size_t attack_us, float attack_curve, size_t release_us, float release_curve); @@ -269,15 +267,15 @@ class DataTypeEnv : public AbstractData { bool setEADSR(const AtomListView& lv); bool setStep(const AtomListView& lv); - bool setLine(const AtomListView& kv); + bool setLine(const AtomListView& lv); bool setExponential(const AtomListView& lv); bool setSin2(const AtomListView& lv); bool setSigmoid(const AtomListView& lv); - bool setNamedEnvelope(t_symbol* name, const AtomListView& args); - bool isNamedEnvelope(t_symbol* name) const; + bool setNamedEnvelope(const char* name, const AtomListView& args); + bool isNamedEnvelope(const char* name) const; - DataTypeEnv* clone() const; + DataTypeEnv* clone() const override; /** * Render envelope to fit output range (end-begin) @@ -296,16 +294,6 @@ class DataTypeEnv : public AbstractData { */ DataTypeEnv& operator+=(const DataTypeEnv& env); - /** - * Create new envelope from raw list content - */ - static DataTypeEnv fromListView(const AtomListView& lv); - - /** - * Saves envelope to raw list data for usage in e.g. in preset system - */ - AtomList toList() const; - /** * Sorts points in envelope */ @@ -331,8 +319,31 @@ class DataTypeEnv : public AbstractData { */ bool isADSR(bool checkVal = false) const; + /** + * Check if envelope is strict AR envelope + */ + bool checkAR() const; + bool checkASR() const; + bool checkADSR() const; + + std::string toString() const noexcept final; + std::string toListStringContent() const noexcept final; + std::string toDictStringContent() const noexcept final; + bool set(const AbstractData* d) noexcept final; + public: - static int dataType; + static DataTypeId dataType; + + using setMethod = bool (DataTypeEnv::*)(const AtomListView&); + + struct NamedMethod { + uint32_t crc32_hash; + setMethod m; + }; + + using NamedMethodList = std::array; + + static const NamedMethodList named_methods; }; std::ostream& operator<<(std::ostream& os, const DataTypeEnv& env); diff --git a/ceammc/ext/src/env/env_adsr.cpp b/ceammc/ext/src/env/env_adsr.cpp index 0a57cf14fa..a8b849b185 100644 --- a/ceammc/ext/src/env/env_adsr.cpp +++ b/ceammc/ext/src/env/env_adsr.cpp @@ -51,14 +51,14 @@ class EnvAdsr : public faust_env_adsr_tilde { return faust_env_adsr_tilde::processAnyProps(sel, lv); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - if (!checkArgs(l, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT)) { - OBJ_ERR << "ATTACK DECAY SUSTAIN RELEASE values expected: " << l; + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "ATTACK DECAY SUSTAIN RELEASE values expected: " << lv; return; } - if (!set(l[0].asFloat(), l[1].asFloat(), l[2].asFloat(), l[3].asFloat())) + if (!set(lv[0].asFloat(), lv[1].asFloat(), lv[2].asFloat(), lv[3].asFloat())) OBJ_ERR << "can't set envelope"; } diff --git a/ceammc/ext/src/env/env_adsr.h b/ceammc/ext/src/env/env_adsr.h index 568544922a..cd6a48412a 100644 --- a/ceammc/ext/src/env/env_adsr.h +++ b/ceammc/ext/src/env/env_adsr.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "env_adsr" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "env.adsr" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_adsr -scn env_adsr_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __env_adsr_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN env_adsr_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN env_adsr_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class env_adsr_dsp { +class FAUST_API env_adsr_dsp { public: @@ -162,7 +247,7 @@ class env_adsr_dsp { * Generic DSP decorator. */ -class decorator_dsp : public env_adsr_dsp { +class FAUST_API decorator_dsp : public env_adsr_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public env_adsr_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END env_adsr_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in env_adsr_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct env_adsr : public env_adsr_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS env_adsr #endif @@ -559,6 +636,13 @@ struct env_adsr : public env_adsr_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class env_adsr : public env_adsr_dsp { private: @@ -588,24 +672,24 @@ class env_adsr : public env_adsr_dsp { m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_adsr -scn env_adsr_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("envelopes.lib/adsr:author", "Yann Orlarey and Andrey Bundin"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); - m->declare("envelopes.lib/version", "0.1"); + m->declare("envelopes.lib/version", "0.2"); m->declare("filename", "env_adsr.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "env_adsr"); + m->declare("name", "env.adsr"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -620,40 +704,40 @@ class env_adsr : public env_adsr_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (0.0441000015f / fConst0); - fConst2 = (1.0f - (44.0999985f / fConst0)); - fConst3 = (0.441000015f / fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 0.0441f / fConst0; + fConst2 = 1.0f - 44.1f / fConst0; + fConst3 = 0.441f / fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(10.0f); - fHslider1 = FAUSTFLOAT(50.0f); - fHslider2 = FAUSTFLOAT(10.0f); - fHslider3 = FAUSTFLOAT(300.0f); + fHslider0 = FAUSTFLOAT(1e+01f); + fHslider1 = FAUSTFLOAT(5e+01f); + fHslider2 = FAUSTFLOAT(1e+01f); + fHslider3 = FAUSTFLOAT(3e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec3[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { iRec4[l5] = 0; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec5[l6] = 0.0f; } } @@ -677,43 +761,43 @@ class env_adsr : public env_adsr_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("env_adsr"); + ui_interface->openVerticalBox("env.adsr"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "ms"); - ui_interface->addHorizontalSlider("attack", &fHslider0, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("attack", &fHslider0, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider2, "style", "knob"); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("decay", &fHslider2, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("decay", &fHslider2, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fCheckbox0, "type", "float"); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->declare(&fHslider3, "style", "knob"); ui_interface->declare(&fHslider3, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider3, FAUSTFLOAT(300.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("release", &fHslider3, FAUSTFLOAT(3e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->declare(&fHslider1, "unit", "percent"); - ui_interface->addHorizontalSlider("sustain", &fHslider1, FAUSTFLOAT(50.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("sustain", &fHslider1, FAUSTFLOAT(5e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fCheckbox0); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst3 * float(fHslider1)); - float fSlow3 = (fConst1 * float(fHslider2)); - int iSlow4 = (fSlow0 == 0.0f); - float fSlow5 = (fConst1 * float(fHslider3)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst3 * float(fHslider1); + float fSlow3 = fConst1 * float(fHslider2); + int iSlow4 = fSlow0 == 0.0f; + float fSlow5 = fConst1 * float(fHslider3); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - fRec0[0] = (fSlow0 + (fRec0[1] * float((fVec0[1] >= fSlow0)))); - fRec1[0] = (fSlow1 + (fConst2 * fRec1[1])); - float fTemp0 = std::max(1.0f, (fConst0 * fRec1[0])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - fRec3[0] = (fSlow3 + (fConst2 * fRec3[1])); - iRec4[0] = (iSlow4 * (iRec4[1] + 1)); - fRec5[0] = (fSlow5 + (fConst2 * fRec5[1])); - output0[i0] = FAUSTFLOAT((float(input0[i0]) * std::max(0.0f, (std::min((fRec0[0] / fTemp0), std::max(((((1.0f - fRec2[0]) * (fTemp0 - fRec0[0])) / std::max(1.0f, (fConst0 * fRec3[0]))) + 1.0f), fRec2[0])) * (1.0f - (float(iRec4[0]) / std::max(1.0f, (fConst0 * fRec5[0])))))))); + fRec0[0] = fSlow0 + fRec0[1] * float(fVec0[1] >= fSlow0); + fRec1[0] = fSlow1 + fConst2 * fRec1[1]; + float fTemp0 = std::max(1.0f, fConst0 * fRec1[0]); + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + fRec3[0] = fSlow3 + fConst2 * fRec3[1]; + iRec4[0] = iSlow4 * (iRec4[1] + 1); + fRec5[0] = fSlow5 + fConst2 * fRec5[1]; + output0[i0] = FAUSTFLOAT(float(input0[i0]) * std::max(0.0f, std::min(fRec0[0] / fTemp0, std::max((1.0f - fRec2[0]) * (fTemp0 - fRec0[0]) / std::max(1.0f, fConst0 * fRec3[0]) + 1.0f, fRec2[0])) * (1.0f - float(iRec4[0]) / std::max(1.0f, fConst0 * fRec5[0])))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/env/env_ar.cpp b/ceammc/ext/src/env/env_ar.cpp index 5c5f0560e7..7eabb1fc89 100644 --- a/ceammc/ext/src/env/env_ar.cpp +++ b/ceammc/ext/src/env/env_ar.cpp @@ -32,14 +32,14 @@ class EnvAr : public faust_env_ar_tilde { createOutlet(); } - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override + bool processAnyProps(t_symbol* sel, const AtomListView& lv) override { - if (sel == gensym("@gate") && lst.boolAt(0, false)) { + if (sel == gensym("@gate") && lv.boolAt(0, false)) { auto_release_.unset(); done_.delay(length()); } - return faust_env_ar_tilde::processAnyProps(sel, lst); + return faust_env_ar_tilde::processAnyProps(sel, lv); } void onBang() override @@ -49,14 +49,14 @@ class EnvAr : public faust_env_ar_tilde { done_.delay(length()); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - if (!checkArgs(l, ARG_FLOAT, ARG_FLOAT)) { - OBJ_ERR << "ATTACK RELEASE values expected: " << l; + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "ATTACK RELEASE values expected: " << lv; return; } - if (!set(l[0].asFloat(), l[1].asFloat())) + if (!set(lv[0].asFloat(), lv[1].asFloat())) OBJ_ERR << "can't set envelope"; } @@ -138,4 +138,17 @@ void setup_env_ar_tilde() obj.addMethod("play", &EnvAr::m_play); obj.addMethod("reset", &EnvAr::m_reset); obj.useClick(); + + obj.setXletsInfo( + { + "bang: run envelope\n" + "list: ATTACK RELEASE\n" + "play: run envelope\n" + "reset: reset evenlope\n" + "signal: input", + }, + { + "output signal", + "bang on done", + }); } diff --git a/ceammc/ext/src/env/env_ar.h b/ceammc/ext/src/env/env_ar.h index e066fe3627..32d2cc98ca 100644 --- a/ceammc/ext/src/env/env_ar.h +++ b/ceammc/ext/src/env/env_ar.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "env_ar" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "env.ar" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_ar -scn env_ar_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __env_ar_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN env_ar_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN env_ar_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class env_ar_dsp { +class FAUST_API env_ar_dsp { public: @@ -162,7 +247,7 @@ class env_ar_dsp { * Generic DSP decorator. */ -class decorator_dsp : public env_ar_dsp { +class FAUST_API decorator_dsp : public env_ar_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public env_ar_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END env_ar_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in env_ar_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct env_ar : public env_ar_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS env_ar #endif @@ -559,6 +636,13 @@ struct env_ar : public env_ar_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class env_ar : public env_ar_dsp { private: @@ -582,24 +666,24 @@ class env_ar : public env_ar_dsp { m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_ar -scn env_ar_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("envelopes.lib/ar:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); - m->declare("envelopes.lib/version", "0.1"); + m->declare("envelopes.lib/version", "0.2"); m->declare("filename", "env_ar.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "env_ar"); + m->declare("name", "env.ar"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -614,28 +698,28 @@ class env_ar : public env_ar_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (0.0441000015f / fConst0); - fConst2 = (1.0f - (44.0999985f / fConst0)); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 0.0441f / fConst0; + fConst2 = 1.0f - 44.1f / fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(10.0f); - fHslider1 = FAUSTFLOAT(300.0f); + fHslider0 = FAUSTFLOAT(1e+01f); + fHslider1 = FAUSTFLOAT(3e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { iRec0[l1] = 0; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec2[l3] = 0.0f; } } @@ -659,32 +743,32 @@ class env_ar : public env_ar_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("env_ar"); + ui_interface->openVerticalBox("env.ar"); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "ms"); - ui_interface->addHorizontalSlider("attack", &fHslider0, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("attack", &fHslider0, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fCheckbox0, "type", "bool"); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider1, FAUSTFLOAT(300.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("release", &fHslider1, FAUSTFLOAT(3e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { iVec0[0] = iSlow0; - iRec0[0] = (((iRec0[1] + (iRec0[1] > 0)) * (iSlow0 <= iVec0[1])) + (iSlow0 > iVec0[1])); + iRec0[0] = (iRec0[1] + (iRec0[1] > 0)) * (iSlow0 <= iVec0[1]) + (iSlow0 > iVec0[1]); float fTemp0 = float(iRec0[0]); - fRec1[0] = (fSlow1 + (fConst2 * fRec1[1])); - float fTemp1 = std::max(1.0f, (fConst0 * fRec1[0])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - output0[i0] = FAUSTFLOAT((float(input0[i0]) * std::max(0.0f, std::min((fTemp0 / fTemp1), (((fTemp1 - fTemp0) / std::max(1.0f, (fConst0 * fRec2[0]))) + 1.0f))))); + fRec1[0] = fSlow1 + fConst2 * fRec1[1]; + float fTemp1 = std::max(1.0f, fConst0 * fRec1[0]); + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + output0[i0] = FAUSTFLOAT(float(input0[i0]) * std::max(0.0f, std::min(fTemp0 / fTemp1, (fTemp1 - fTemp0) / std::max(1.0f, fConst0 * fRec2[0]) + 1.0f))); iVec0[1] = iVec0[0]; iRec0[1] = iRec0[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/env/env_asr.cpp b/ceammc/ext/src/env/env_asr.cpp index 16ef332b1a..f6524612d6 100644 --- a/ceammc/ext/src/env/env_asr.cpp +++ b/ceammc/ext/src/env/env_asr.cpp @@ -6,9 +6,12 @@ using namespace ceammc; -class EnvAsr : public faust_env_asr_tilde { - ClockMemberFunction attack_done_; - ClockMemberFunction release_done_; +constexpr int ATTACK_DONE = 1; +constexpr int RELEASE_DONE = 0; + +class EnvAsr : public EnvAutoplay { + ClockLambdaFunction attack_done_; + ClockLambdaFunction release_done_; UIProperty* prop_attack_; UIProperty* prop_sustain_; @@ -17,9 +20,9 @@ class EnvAsr : public faust_env_asr_tilde { public: EnvAsr(const PdArgs& args) - : faust_env_asr_tilde(args) - , attack_done_(this, &EnvAsr::attackDone) - , release_done_(this, &EnvAsr::releaseDone) + : EnvAutoplay(args) + , attack_done_([this]() { floatTo(1, ATTACK_DONE); }) + , release_done_([this]() { floatTo(1, RELEASE_DONE); }) , prop_attack_((UIProperty*)property(gensym("@attack"))) , prop_sustain_((UIProperty*)property(gensym("@sustain"))) , prop_release_((UIProperty*)property(gensym("@release"))) @@ -29,13 +32,14 @@ class EnvAsr : public faust_env_asr_tilde { addProperty(new CombinedProperty("@asr", { property(gensym("@attack")), property(gensym("@sustain")), property(gensym("@release")) })); + createInlet(); createOutlet(); } - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override + bool processAnyProps(t_symbol* sel, const AtomListView& lv) override { if (sel == gensym("@gate")) { - if (lst.boolAt(0, false)) { + if (lv.boolAt(0, false)) { clockReset(); attack_done_.delay(prop_attack_->value()); } else { @@ -44,17 +48,17 @@ class EnvAsr : public faust_env_asr_tilde { } } - return faust_env_asr_tilde::processAnyProps(sel, lst); + return faust_env_asr_tilde::processAnyProps(sel, lv); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - if (!checkArgs(l, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT)) { - OBJ_ERR << "ATTACK SUSTAIN RELEASE values expected: " << l; + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT, ARG_FLOAT)) { + OBJ_ERR << "ATTACK SUSTAIN RELEASE values expected: " << lv; return; } - if (!set(l[0].asFloat(), l[1].asFloat(), l[2].asFloat())) + if (!set(lv[0].asFloat(), lv[1].asFloat(), lv[2].asFloat())) OBJ_ERR << "can't set envelope"; } @@ -73,6 +77,16 @@ class EnvAsr : public faust_env_asr_tilde { OBJ_ERR << "can't set envelope: " << *env; } + void onInlet(size_t n, const AtomListView& lv) final + { + if (!checkArgs(lv, ARG_FLOAT)) { + OBJ_ERR << "float value expected, got: " << lv; + return; + } + + sendGate(lv[0].asT()); + } + void m_reset(t_symbol*, const AtomListView&) { dsp_->instanceClear(); @@ -81,16 +95,6 @@ class EnvAsr : public faust_env_asr_tilde { } private: - void attackDone() - { - floatTo(1, 1); - } - - void releaseDone() - { - floatTo(1, 0); - } - void clockReset() { attack_done_.unset(); @@ -116,12 +120,14 @@ class EnvAsr : public faust_env_asr_tilde { } }; -typedef EnvAutoplay EnvAsrP; - void setup_env_asr_tilde() { - SoundExternalFactory obj("env.asr~"); + SoundExternalFactory obj("env.asr~"); obj.processData(); - obj.addMethod("play", &EnvAsrP::m_play); - obj.addMethod("reset", &EnvAsrP::m_reset); + obj.addMethod("play", &EnvAsr::m_play); + obj.addMethod("reset", &EnvAsr::m_reset); + + obj.setXletsInfo( + { "signal: input", "float: start (if >0) or stop(if =0) envelope" }, + { "signal: output", "float: 1 on attack done, 0 on release done" }); } diff --git a/ceammc/ext/src/env/env_asr.h b/ceammc/ext/src/env/env_asr.h index 02e411300b..094321e7ce 100644 --- a/ceammc/ext/src/env/env_asr.h +++ b/ceammc/ext/src/env/env_asr.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "env_asr" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "env.asr" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_asr -scn env_asr_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __env_asr_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN env_asr_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN env_asr_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class env_asr_dsp { +class FAUST_API env_asr_dsp { public: @@ -162,7 +247,7 @@ class env_asr_dsp { * Generic DSP decorator. */ -class decorator_dsp : public env_asr_dsp { +class FAUST_API decorator_dsp : public env_asr_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public env_asr_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END env_asr_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in env_asr_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct env_asr : public env_asr_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS env_asr #endif @@ -559,6 +636,13 @@ struct env_asr : public env_asr_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class env_asr : public env_asr_dsp { private: @@ -586,24 +670,24 @@ class env_asr : public env_asr_dsp { m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_asr -scn env_asr_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("envelopes.lib/asr:author", "Yann Orlarey, Stéphane Letz"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); - m->declare("envelopes.lib/version", "0.1"); + m->declare("envelopes.lib/version", "0.2"); m->declare("filename", "env_asr.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "env_asr"); + m->declare("name", "env.asr"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -618,36 +702,36 @@ class env_asr : public env_asr_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (0.441000015f / fConst0); - fConst2 = (1.0f - (44.0999985f / fConst0)); - fConst3 = (0.0441000015f / fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 0.441f / fConst0; + fConst2 = 1.0f - 44.1f / fConst0; + fConst3 = 0.0441f / fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(100.0f); - fHslider1 = FAUSTFLOAT(10.0f); - fHslider2 = FAUSTFLOAT(300.0f); + fHslider0 = FAUSTFLOAT(1e+02f); + fHslider1 = FAUSTFLOAT(1e+01f); + fHslider2 = FAUSTFLOAT(3e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { iRec3[l4] = 0; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec4[l5] = 0.0f; } } @@ -671,37 +755,37 @@ class env_asr : public env_asr_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("env_asr"); + ui_interface->openVerticalBox("env.asr"); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("attack", &fHslider1, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("attack", &fHslider1, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fCheckbox0, "type", "float"); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->declare(&fHslider2, "style", "knob"); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider2, FAUSTFLOAT(300.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("release", &fHslider2, FAUSTFLOAT(3e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); ui_interface->declare(&fHslider0, "unit", "percent"); - ui_interface->addHorizontalSlider("sustain", &fHslider0, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("sustain", &fHslider0, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fCheckbox0); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst3 * float(fHslider1)); - int iSlow3 = (fSlow0 == 0.0f); - float fSlow4 = (fConst3 * float(fHslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst3 * float(fHslider1); + int iSlow3 = fSlow0 == 0.0f; + float fSlow4 = fConst3 * float(fHslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - fRec0[0] = (fSlow0 + (fRec0[1] * float((fVec0[1] >= fSlow0)))); - fRec1[0] = (fSlow1 + (fConst2 * fRec1[1])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - iRec3[0] = (iSlow3 * (iRec3[1] + 1)); - fRec4[0] = (fSlow4 + (fConst2 * fRec4[1])); - output0[i0] = FAUSTFLOAT((float(input0[i0]) * std::max(0.0f, (std::min(((fRec0[0] * fRec1[0]) / std::max(1.0f, (fConst0 * fRec2[0]))), fRec1[0]) - ((fRec1[0] * float(iRec3[0])) / std::max(1.0f, (fConst0 * fRec4[0]))))))); + fRec0[0] = fSlow0 + fRec0[1] * float(fVec0[1] >= fSlow0); + fRec1[0] = fSlow1 + fConst2 * fRec1[1]; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + iRec3[0] = iSlow3 * (iRec3[1] + 1); + fRec4[0] = fSlow4 + fConst2 * fRec4[1]; + output0[i0] = FAUSTFLOAT(float(input0[i0]) * std::max(0.0f, std::min(fRec0[0] * fRec1[0] / std::max(1.0f, fConst0 * fRec2[0]), fRec1[0]) - fRec1[0] * float(iRec3[0]) / std::max(1.0f, fConst0 * fRec4[0]))); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/env/env_concat.h b/ceammc/ext/src/env/env_concat.h index 652df3c486..388549e1a6 100644 --- a/ceammc/ext/src/env/env_concat.h +++ b/ceammc/ext/src/env/env_concat.h @@ -15,7 +15,7 @@ class EnvConcat : public BaseObject { void onBang() override; void onDataT(const EnvAtom& env); - void onInlet(size_t n, const AtomListView& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; }; void setup_env_concat(); diff --git a/ceammc/ext/src/env/env_env.cpp b/ceammc/ext/src/env/env_env.cpp index f92593f8af..1faf5290ac 100644 --- a/ceammc/ext/src/env/env_env.cpp +++ b/ceammc/ext/src/env/env_env.cpp @@ -1,34 +1,35 @@ #include "env_env.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" #include "datatype_env.h" #include #include -static t_symbol* SYM_CURVE_STEP; -static t_symbol* SYM_CURVE_LINE; -static t_symbol* SYM_CURVE_EXP; -static t_symbol* SYM_CURVE_SIN2; -static t_symbol* SYM_CURVE_SIGMOID; +CEAMMC_DEFINE_SYM_HASH(step); +CEAMMC_DEFINE_SYM_HASH(line); +CEAMMC_DEFINE_SYM_HASH(exp); +CEAMMC_DEFINE_SYM_HASH(sin2); +CEAMMC_DEFINE_SYM_HASH(sigmoid); -static t_symbol* SYM_ADSR; -static t_symbol* SYM_ASR; -static t_symbol* SYM_AR; -static t_symbol* SYM_EADSR; -static t_symbol* SYM_EASR; -static t_symbol* SYM_EAR; -static t_symbol* SYM_EMPTY; +CEAMMC_DEFINE_SYM_HASH(adsr); +CEAMMC_DEFINE_SYM_HASH(asr); +CEAMMC_DEFINE_SYM_HASH(ar); +CEAMMC_DEFINE_SYM_HASH(eadsr); +CEAMMC_DEFINE_SYM_HASH(easr); +CEAMMC_DEFINE_SYM_HASH(ear); +CEAMMC_DEFINE_SYM_HASH(empty); Envelope::Envelope(const PdArgs& args) : BaseObject(args) { createOutlet(); - t_symbol* method = parsedPosArgs().symbolAt(0, SYM_EMPTY); + t_symbol* method = parsedPosArgs().symbolAt(0, sym_empty()); - if (env_->isNamedEnvelope(method)) - env_->setNamedEnvelope(method, parsedPosArgs().slice(1)); - else if (method != SYM_EMPTY) // wrong name + if (env_->isNamedEnvelope(method->s_name)) + env_->setNamedEnvelope(method->s_name, parsedPosArgs().slice(1)); + else if (method != sym_empty()) // wrong name OBJ_ERR << "unknown arguments: " << parsedPosArgs(); { @@ -71,34 +72,42 @@ void Envelope::onDataT(const EnvAtom& env) onBang(); } -void Envelope::m_addPoint(t_symbol* s, const AtomListView& lst) +void Envelope::m_addPoint(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT, s)) return; - int point_time = lst[0].asFloat() * 1000; + int point_time = lv[0].asFloat() * 1000; if (point_time < 0) { OBJ_ERR << "invalid point time: " << point_time; return; } - t_float point_value = lst[1].asFloat(); - bool stop_point = lst.size() < 3 ? false : lst[2].asFloat(0); - t_symbol* curve = lst.size() < 4 ? SYM_CURVE_LINE : lst[3].asSymbol(); - t_float curve_data = lst.size() < 5 ? 1 : lst[4].asFloat(1); + t_float point_value = lv[1].asFloat(); + bool stop_point = lv.boolAt(2, false); + t_symbol* curve = lv.symbolAt(3, sym_line()); + t_float curve_data = lv.floatAt(4, 1); CurveType curve_type = CURVE_LINE; - if (curve == SYM_CURVE_STEP) + switch (crc32_hash(curve)) { + case hash_step: curve_type = CURVE_STEP; - else if (curve == SYM_CURVE_EXP) + break; + case hash_exp: curve_type = CURVE_EXP; - else if (curve == SYM_CURVE_SIN2) + break; + case hash_sin2: curve_type = CURVE_SIN2; - else if (curve == SYM_CURVE_SIGMOID) + break; + case hash_sigmoid: curve_type = CURVE_SIGMOID; - else + break; + case hash_line: + default: curve_type = CURVE_LINE; + break; + } EnvelopePoint pt(point_time, point_value, stop_point, curve_type); pt.data = curve_data; @@ -106,12 +115,12 @@ void Envelope::m_addPoint(t_symbol* s, const AtomListView& lst) env_->insertPoint(pt); } -void Envelope::m_removePoint(t_symbol* s, const AtomListView& lst) +void Envelope::m_removePoint(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, s)) + if (!checkArgs(lv, ARG_NATURAL, s)) return; - size_t point_idx = lst[0].asSizeT(); + size_t point_idx = lv[0].asSizeT(); if (point_idx >= env_->numPoints()) { OBJ_ERR << "invalid point index: " << point_idx; return; @@ -122,46 +131,46 @@ void Envelope::m_removePoint(t_symbol* s, const AtomListView& lst) OBJ_ERR << "can't remove point at: " << point_idx; } -void Envelope::m_setPointTime(t_symbol* s, const AtomListView& lst) +void Envelope::m_setPointTime(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_FLOAT, s)) return; - size_t point_idx = lst[0].asSizeT(); + size_t point_idx = lv[0].asSizeT(); if (point_idx >= env_->numPoints()) { OBJ_ERR << "invalid point index: " << point_idx; return; } env_.detachData(); - env_->pointAt(point_idx).utime = lst[1].asFloat() * 1000; + env_->pointAt(point_idx).utime = lv[1].asFloat() * 1000; env_->sort(); } -void Envelope::m_setPointValue(t_symbol* s, const AtomListView& lst) +void Envelope::m_setPointValue(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_FLOAT, s)) return; - size_t point_idx = lst[0].asSizeT(); + size_t point_idx = lv[0].asSizeT(); if (point_idx >= env_->numPoints()) { OBJ_ERR << "invalid point index: " << point_idx; return; } env_.detachData(); - env_->pointAt(point_idx).value = lst[1].asFloat(); + env_->pointAt(point_idx).value = lv[1].asFloat(); } -void Envelope::m_setPoint(t_symbol* s, const AtomListView& lst) +void Envelope::m_setPoint(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, s)) + if (!checkArgs(lv, ARG_NATURAL, s)) return; - size_t idx = lst[0].asSizeT(); - t_float time_ms = lst.floatAt(1, -1); - t_float value = lst.floatAt(2, 0); - int stop = lst.intAt(2, 0); + size_t idx = lv[0].asSizeT(); + t_float time_ms = lv.floatAt(1, -1); + t_float value = lv.floatAt(2, 0); + int stop = lv.intAt(2, 0); if (idx >= env_->numPoints()) { OBJ_ERR << "invalid point index: " << idx; @@ -182,28 +191,28 @@ void Envelope::m_setPoint(t_symbol* s, const AtomListView& lst) env_->sort(); } -void Envelope::m_setStopPoint(t_symbol* s, const AtomListView& lst) +void Envelope::m_setStopPoint(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_BOOL, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_BOOL, s)) return; - size_t point_idx = lst[0].asSizeT(); + size_t point_idx = lv[0].asSizeT(); if (point_idx >= env_->numPoints()) { OBJ_ERR << "invalid point index: " << point_idx; return; } env_.detachData(); - env_->pointAt(point_idx).stop = lst[1].asInt(); + env_->pointAt(point_idx).stop = lv[1].asInt(); } -void Envelope::m_appendSegment(t_symbol* s, const AtomListView& lst) +void Envelope::m_appendSegment(t_symbol* s, const AtomListView& lv) { - t_symbol* type = lst.symbolAt(0, NULL); - int length_ms = lst.intAt(1, -1); - t_float value = lst.floatAt(2, std::numeric_limits::max()); + t_symbol* type = lv.symbolAt(0, NULL); + int length_ms = lv.intAt(1, -1); + t_float value = lv.floatAt(2, std::numeric_limits::max()); - t_float curve_skew = lst.floatAt(3, 0); + t_float curve_skew = lv.floatAt(3, 0); if (length_ms < 1 || value == std::numeric_limits::max() @@ -226,22 +235,22 @@ void Envelope::m_appendSegment(t_symbol* s, const AtomListView& lst) OBJ_ERR << "can't append segment"; } -void Envelope::m_setSegmentType(t_symbol* s, const AtomListView& lst) +void Envelope::m_setSegmentType(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_NATURAL, ARG_SYMBOL, s)) + if (!checkArgs(lv, ARG_NATURAL, ARG_SYMBOL, s)) return; if (env_->numPoints() == 0) return; - size_t seg_idx = lst[0].asSizeT(); + size_t seg_idx = lv[0].asSizeT(); if (seg_idx >= (env_->numPoints() - 1)) { OBJ_ERR << "invalid segment index: " << seg_idx; return; } - t_symbol* t = lst[1].asSymbol(); + t_symbol* t = lv[1].asSymbol(); CurveType seg_type = CURVE_LINE; if (!symbol2curve(t, seg_type)) { OBJ_ERR << "invalid segment type: " << t->s_name; @@ -252,118 +261,118 @@ void Envelope::m_setSegmentType(t_symbol* s, const AtomListView& lst) env_->pointAt(seg_idx).type = seg_type; } -void Envelope::m_plus(t_symbol* s, const AtomListView& lst) +void Envelope::m_plus(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_FLOAT, s)) return; - t_float v = lst[0].asFloat(); + t_float v = lv[0].asFloat(); env_.detachData(); for (size_t i = 0; i < env_->numPoints(); i++) env_->pointAt(i).value += v; } -void Envelope::m_multiply(t_symbol* s, const AtomListView& lst) +void Envelope::m_multiply(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_FLOAT, s)) return; - t_float v = lst[0].asFloat(); + t_float v = lv[0].asFloat(); env_.detachData(); for (size_t i = 0; i < env_->numPoints(); i++) env_->pointAt(i).value *= v; } -void Envelope::m_shift(t_symbol* s, const AtomListView& lst) +void Envelope::m_shift(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT, s)) + if (!checkArgs(lv, ARG_FLOAT, s)) return; env_.detachData(); - long v = lst[0].asFloat() * 1000; + long v = lv[0].asFloat() * 1000; env_->shiftTime(v); } -void Envelope::m_AR(t_symbol* s, const AtomListView& lst) +void Envelope::m_AR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setAR(lst); + env_->setAR(lv); } -void Envelope::m_ASR(t_symbol* s, const AtomListView& lst) +void Envelope::m_ASR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setASR(lst); + env_->setASR(lv); } -void Envelope::m_ADSR(t_symbol* s, const AtomListView& lst) +void Envelope::m_ADSR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setADSR(lst); + env_->setADSR(lv); } -void Envelope::m_EADSR(t_symbol* s, const AtomListView& lst) +void Envelope::m_EADSR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setEADSR(lst); + env_->setEADSR(lv); } -void Envelope::m_EASR(t_symbol* s, const AtomListView& lst) +void Envelope::m_EASR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setEASR(lst); + env_->setEASR(lv); } -void Envelope::m_EAR(t_symbol* s, const AtomListView& lst) +void Envelope::m_EAR(t_symbol* s, const AtomListView& lv) { env_.detachData(); - env_->setEAR(lst); + env_->setEAR(lv); } -void Envelope::m_step(t_symbol* s, const AtomListView& lst) +void Envelope::m_step(t_symbol* s, const AtomListView& lv) { - if (lst.size() % 2 != 1 || !lst.allOf(isFloat)) { + if (lv.size() % 2 != 1 || !lv.allOf(isFloat)) { OBJ_ERR << "Usage: step VAL LENGTH VAL [LENGTH VAL]..."; return; } env_.detachData(); - if (!env_->setStep(lst)) + if (!env_->setStep(lv)) OBJ_ERR << "Can't set step envelope"; } -void Envelope::m_line(t_symbol* s, const AtomListView& lst) +void Envelope::m_line(t_symbol* s, const AtomListView& lv) { - if (lst.size() % 2 != 1 || !lst.allOf(isFloat)) { + if (lv.size() % 2 != 1 || !lv.allOf(isFloat)) { OBJ_ERR << "Usage: line VAL LENGTH VAL [LENGTH VAL]..."; return; } env_.detachData(); - if (!env_->setLine(lst)) + if (!env_->setLine(lv)) OBJ_ERR << "Can't set line envelope"; } -void Envelope::m_sin2(t_symbol* s, const AtomListView& lst) +void Envelope::m_sin2(t_symbol* s, const AtomListView& lv) { env_.detachData(); - if (!env_->setSin2(lst)) + if (!env_->setSin2(lv)) OBJ_ERR << "Can't set sin2 envelope"; } -void Envelope::m_exp(t_symbol* s, const AtomListView& lst) +void Envelope::m_exp(t_symbol* s, const AtomListView& lv) { env_.detachData(); - if (!env_->setExponential(lst)) + if (!env_->setExponential(lv)) OBJ_ERR << "Can't set exponential envelope"; } -void Envelope::m_sigmoid(t_symbol* s, const AtomListView& lst) +void Envelope::m_sigmoid(t_symbol* s, const AtomListView& lv) { env_.detachData(); - if (!env_->setSigmoid(lst)) + if (!env_->setSigmoid(lv)) OBJ_ERR << "Can't set sigmoid envelope"; } @@ -413,20 +422,6 @@ AtomList Envelope::p_stops() const void setup_envelope_env() { - SYM_CURVE_STEP = gensym("step"); - SYM_CURVE_LINE = gensym("line"); - SYM_CURVE_EXP = gensym("exp"); - SYM_CURVE_SIN2 = gensym("sin2"); - SYM_CURVE_SIGMOID = gensym("sigmoid"); - - SYM_ADSR = gensym("adsr"); - SYM_ASR = gensym("asr"); - SYM_AR = gensym("ar"); - SYM_EADSR = gensym("eadsr"); - SYM_EASR = gensym("easr"); - SYM_EAR = gensym("ear"); - SYM_EMPTY = gensym("empty"); - ObjectFactory obj("envelope"); obj.addAlias("env"); obj.processData(); @@ -441,17 +436,17 @@ void setup_envelope_env() obj.addMethod("+", &Envelope::m_plus); obj.addMethod("*", &Envelope::m_multiply); obj.addMethod(">>", &Envelope::m_shift); - obj.addMethod("adsr", &Envelope::m_ADSR); - obj.addMethod("asr", &Envelope::m_ASR); - obj.addMethod("ar", &Envelope::m_AR); - obj.addMethod("eadsr", &Envelope::m_EADSR); - obj.addMethod("easr", &Envelope::m_EASR); - obj.addMethod("ear", &Envelope::m_EAR); - obj.addMethod("step", &Envelope::m_step); - obj.addMethod("line", &Envelope::m_line); - obj.addMethod("exp", &Envelope::m_exp); - obj.addMethod("sin2", &Envelope::m_sin2); - obj.addMethod("sigmoid", &Envelope::m_sigmoid); + obj.addMethod(str_adsr, &Envelope::m_ADSR); + obj.addMethod(str_asr, &Envelope::m_ASR); + obj.addMethod(str_ar, &Envelope::m_AR); + obj.addMethod(str_eadsr, &Envelope::m_EADSR); + obj.addMethod(str_easr, &Envelope::m_EASR); + obj.addMethod(str_ear, &Envelope::m_EAR); + obj.addMethod(str_step, &Envelope::m_step); + obj.addMethod(str_line, &Envelope::m_line); + obj.addMethod(str_exp, &Envelope::m_exp); + obj.addMethod(str_sin2, &Envelope::m_sin2); + obj.addMethod(str_sigmoid, &Envelope::m_sigmoid); obj.addMethod("clear", &Envelope::m_clear); } diff --git a/ceammc/ext/src/env/env_env.h b/ceammc/ext/src/env/env_env.h index 1efa1b591d..cfcdef1fe8 100644 --- a/ceammc/ext/src/env/env_env.h +++ b/ceammc/ext/src/env/env_env.h @@ -21,31 +21,31 @@ class Envelope : public BaseObject { void onBang() override; void onDataT(const EnvAtom& env); - void m_addPoint(t_symbol* s, const AtomListView& lst); - void m_removePoint(t_symbol* s, const AtomListView& lst); - void m_setPointTime(t_symbol* s, const AtomListView& lst); - void m_setPointValue(t_symbol* s, const AtomListView& lst); - void m_setPoint(t_symbol* s, const AtomListView& lst); - void m_setStopPoint(t_symbol* s, const AtomListView& lst); - void m_appendSegment(t_symbol* s, const AtomListView& lst); - void m_setSegmentType(t_symbol* s, const AtomListView& lst); - void m_plus(t_symbol* s, const AtomListView& lst); - void m_multiply(t_symbol* s, const AtomListView& lst); - void m_shift(t_symbol* s, const AtomListView& lst); - - void m_AR(t_symbol* s, const AtomListView& lst); - void m_ASR(t_symbol* s, const AtomListView& lst); - void m_ADSR(t_symbol* s, const AtomListView& lst); - - void m_EADSR(t_symbol* s, const AtomListView& lst); - void m_EASR(t_symbol* s, const AtomListView& lst); - void m_EAR(t_symbol* s, const AtomListView& lst); - - void m_step(t_symbol* s, const AtomListView& lst); - void m_line(t_symbol* s, const AtomListView& lst); - void m_sin2(t_symbol* s, const AtomListView& lst); - void m_exp(t_symbol* s, const AtomListView& lst); - void m_sigmoid(t_symbol* s, const AtomListView& lst); + void m_addPoint(t_symbol* s, const AtomListView& lv); + void m_removePoint(t_symbol* s, const AtomListView& lv); + void m_setPointTime(t_symbol* s, const AtomListView& lv); + void m_setPointValue(t_symbol* s, const AtomListView& lv); + void m_setPoint(t_symbol* s, const AtomListView& lv); + void m_setStopPoint(t_symbol* s, const AtomListView& lv); + void m_appendSegment(t_symbol* s, const AtomListView& lv); + void m_setSegmentType(t_symbol* s, const AtomListView& lv); + void m_plus(t_symbol* s, const AtomListView& lv); + void m_multiply(t_symbol* s, const AtomListView& lv); + void m_shift(t_symbol* s, const AtomListView& lv); + + void m_AR(t_symbol* s, const AtomListView& lv); + void m_ASR(t_symbol* s, const AtomListView& lv); + void m_ADSR(t_symbol* s, const AtomListView& lv); + + void m_EADSR(t_symbol* s, const AtomListView& lv); + void m_EASR(t_symbol* s, const AtomListView& lv); + void m_EAR(t_symbol* s, const AtomListView& lv); + + void m_step(t_symbol* s, const AtomListView& lv); + void m_line(t_symbol* s, const AtomListView& lv); + void m_sin2(t_symbol* s, const AtomListView& lv); + void m_exp(t_symbol* s, const AtomListView& lv); + void m_sigmoid(t_symbol* s, const AtomListView& lv); void m_clear(t_symbol*, const AtomListView&); diff --git a/ceammc/ext/src/env/env_faust_play.h b/ceammc/ext/src/env/env_faust_play.h index edb696e4ec..f291f20a01 100644 --- a/ceammc/ext/src/env/env_faust_play.h +++ b/ceammc/ext/src/env/env_faust_play.h @@ -46,22 +46,21 @@ class EnvAutoplay : public T { sendGate(1); } -private: - +protected: void sendReset() { - static t_symbol* SYM_RESET = gensym("reset"); + auto SYM_RESET = gensym("reset"); pd_typedmess(&(this->owner()->te_g.g_pd), SYM_RESET, 0, nullptr); } - void sendGate(bool on) + void sendGate(t_float val) { - static t_symbol* SYM_PROP_GATE2 = gensym("@gate"); + auto SYM_PROP_GATE = gensym("@gate"); // send @gate message - t_atom v; - SETFLOAT(&v, on ? 1 : 0); - pd_typedmess(&(this->owner()->te_g.g_pd), SYM_PROP_GATE2, 1, &v); + t_atom a; + SETFLOAT(&a, val); + pd_typedmess(&(this->owner()->te_g.g_pd), SYM_PROP_GATE, 1, &a); } }; } diff --git a/ceammc/ext/src/env/env_follow.h b/ceammc/ext/src/env/env_follow.h index 4926955250..d363de1b72 100644 --- a/ceammc/ext/src/env/env_follow.h +++ b/ceammc/ext/src/env/env_follow.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "env_follow" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "env.follow" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_follow -scn env_follow_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __env_follow_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN env_follow_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN env_follow_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class env_follow_dsp { +class FAUST_API env_follow_dsp { public: @@ -162,7 +247,7 @@ class env_follow_dsp { * Generic DSP decorator. */ -class decorator_dsp : public env_follow_dsp { +class FAUST_API decorator_dsp : public env_follow_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public env_follow_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END env_follow_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in env_follow_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct env_follow : public env_follow_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS env_follow #endif @@ -559,6 +636,13 @@ struct env_follow : public env_follow_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class env_follow : public env_follow_dsp { private: @@ -567,30 +651,32 @@ class env_follow : public env_follow_dsp { int fSampleRate; float fConst0; FAUSTFLOAT fHslider1; - float fRec1[2]; float fRec0[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_follow -scn env_follow_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "env_follow.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "env_follow"); + m->declare("name", "env.follow"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -605,20 +691,17 @@ class env_follow : public env_follow_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(200.0f); - fHslider1 = FAUSTFLOAT(200.0f); + fHslider0 = FAUSTFLOAT(2e+02f); + fHslider1 = FAUSTFLOAT(2e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec1[l0] = 0.0f; - } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec0[l1] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; } } @@ -641,30 +724,28 @@ class env_follow : public env_follow_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("env_follow"); - ui_interface->addHorizontalSlider("attack", &fHslider0, FAUSTFLOAT(200.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addHorizontalSlider("release", &fHslider1, FAUSTFLOAT(200.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->openVerticalBox("env.follow"); + ui_interface->declare(&fHslider1, "unit", "ms"); + ui_interface->addHorizontalSlider("attack", &fHslider1, FAUSTFLOAT(2e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fHslider0, "unit", "ms"); + ui_interface->addHorizontalSlider("release", &fHslider0, FAUSTFLOAT(2e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (0.00100000005f * float(fHslider0)); - int iSlow1 = (std::fabs(fSlow0) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst0 / (iSlow1 ? 1.0f : fSlow0)))); - float fSlow2 = (iSlow1 ? 0.0f : fThen1); - float fSlow3 = (0.00100000005f * float(fHslider1)); - int iSlow4 = (std::fabs(fSlow3) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst0 / (iSlow4 ? 1.0f : fSlow3)))); - float fSlow5 = (iSlow4 ? 0.0f : fThen3); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow0 = 0.001f * float(fHslider0); + int iSlow1 = std::fabs(fSlow0) < 1.1920929e-07f; + float fSlow2 = ((iSlow1) ? 0.0f : std::exp(0.0f - fConst0 / ((iSlow1) ? 1.0f : fSlow0))); + float fSlow3 = 0.001f * float(fHslider1); + int iSlow4 = std::fabs(fSlow3) < 1.1920929e-07f; + float fSlow5 = ((iSlow4) ? 0.0f : std::exp(0.0f - fConst0 / ((iSlow4) ? 1.0f : fSlow3))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = std::fabs(float(input0[i0])); - float fTemp1 = ((fRec0[1] > fTemp0) ? fSlow5 : fSlow2); - fRec1[0] = ((fRec1[1] * fTemp1) + (fTemp0 * (1.0f - fTemp1))); - fRec0[0] = fRec1[0]; + float fTemp1 = ((fTemp0 > fRec0[1]) ? fSlow5 : fSlow2); + fRec0[0] = fTemp0 * (1.0f - fTemp1) + fRec0[1] * fTemp1; output0[i0] = FAUSTFLOAT(fRec0[0]); - fRec1[1] = fRec1[0]; fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/env/env_mix.h b/ceammc/ext/src/env/env_mix.h index f7ac70ec00..1a7d41b03d 100644 --- a/ceammc/ext/src/env/env_mix.h +++ b/ceammc/ext/src/env/env_mix.h @@ -12,7 +12,7 @@ class EnvMix : public BaseObject { public: EnvMix(const PdArgs& args); void onFloat(t_float v) override; - void onInlet(size_t n, const AtomListView& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; void dump() const override; }; diff --git a/ceammc/ext/src/env/env_smooth.h b/ceammc/ext/src/env/env_smooth.h index 3774cdebd5..29017aad9e 100644 --- a/ceammc/ext/src/env/env_smooth.h +++ b/ceammc/ext/src/env/env_smooth.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "env_smooth" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "env.smooth" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_smooth -scn env_smooth_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __env_smooth_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN env_smooth_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN env_smooth_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class env_smooth_dsp { +class FAUST_API env_smooth_dsp { public: @@ -162,7 +247,7 @@ class env_smooth_dsp { * Generic DSP decorator. */ -class decorator_dsp : public env_smooth_dsp { +class FAUST_API decorator_dsp : public env_smooth_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public env_smooth_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END env_smooth_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in env_smooth_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct env_smooth : public env_smooth_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS env_smooth #endif @@ -559,42 +636,50 @@ struct env_smooth : public env_smooth_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class env_smooth : public env_smooth_dsp { private: + FAUSTFLOAT fCheckbox0; FAUSTFLOAT fHslider0; int fSampleRate; float fConst0; - FAUSTFLOAT fCheckbox0; float fRec0[2]; public: void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn env_smooth -scn env_smooth_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("envelopes.lib/author", "GRAME"); m->declare("envelopes.lib/copyright", "GRAME"); m->declare("envelopes.lib/license", "LGPL with exception"); m->declare("envelopes.lib/name", "Faust Envelope Library"); - m->declare("envelopes.lib/version", "0.1"); + m->declare("envelopes.lib/smoothEnvelope:author", "Romain Michon"); + m->declare("envelopes.lib/version", "0.2"); m->declare("filename", "env_smooth.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "env_smooth"); + m->declare("name", "env.smooth"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -609,16 +694,16 @@ class env_smooth : public env_smooth_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(100.0f); fCheckbox0 = FAUSTFLOAT(0.0f); + fHslider0 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } } @@ -642,24 +727,23 @@ class env_smooth : public env_smooth_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("env_smooth"); + ui_interface->openVerticalBox("env.smooth"); ui_interface->declare(&fHslider0, "unit", "ms"); - ui_interface->addHorizontalSlider("duration", &fHslider0, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(100000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("duration", &fHslider0, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+05f), FAUSTFLOAT(1.0f)); ui_interface->addCheckButton("gate", &fCheckbox0); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (0.000144717807f * float(fHslider0)); - int iSlow1 = (std::fabs(fSlow0) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst0 / (iSlow1 ? 1.0f : fSlow0)))); - float fSlow2 = (iSlow1 ? 0.0f : fThen1); - float fSlow3 = (float(fCheckbox0) * (1.0f - fSlow2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = ((fRec0[1] * fSlow2) + fSlow3); - output0[i0] = FAUSTFLOAT((float(input0[i0]) * fRec0[0])); + float fSlow0 = 0.00014471781f * float(fHslider0); + int iSlow1 = std::fabs(fSlow0) < 1.1920929e-07f; + float fSlow2 = ((iSlow1) ? 0.0f : std::exp(0.0f - fConst0 / ((iSlow1) ? 1.0f : fSlow0))); + float fSlow3 = float(fCheckbox0) * (1.0f - fSlow2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow3 + fSlow2 * fRec0[1]; + output0[i0] = FAUSTFLOAT(float(input0[i0]) * fRec0[0]); fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/env/env_to_vline.cpp b/ceammc/ext/src/env/env_to_vline.cpp index f6301c0eb4..b0a12b63fb 100644 --- a/ceammc/ext/src/env/env_to_vline.cpp +++ b/ceammc/ext/src/env/env_to_vline.cpp @@ -241,8 +241,8 @@ void Env2VLine::interpSegment(const EnvelopePoint& pt0, const EnvelopePoint& pt1 void Env2VLine::interpSin2(size_t step_idx, double step_ms, const EnvelopePoint& pt0, const EnvelopePoint& pt1, AtomList& lst) { - double last_dur = pt0.timeMs() + step_idx * step_ms; - double v = convert::lin2sin2(last_dur, pt0.timeMs(), pt1.timeMs(), pt0.value, pt1.value); + auto last_dur = pt0.timeMs() + step_idx * step_ms; + auto v = convert::lin2sin2(last_dur, pt0.timeMs(), pt1.timeMs(), pt0.value, pt1.value); lst[0].setFloat(v); lst[1].setFloat(step_ms); @@ -268,8 +268,8 @@ void Env2VLine::interpExp(size_t step_idx, double step_ms, AtomList& lst) { double last_dur = pt0.timeMs() + step_idx * step_ms; - double v = convert::lin2curve(double(last_dur), - pt0.timeMs(), pt1.timeMs(), pt0.value, pt1.value, double(pt0.data)); + auto v = convert::lin2curve(last_dur, + pt0.timeMs(), pt1.timeMs(), (double)pt0.value, (double)pt1.value, (double)pt0.data); lst[0].setFloat(v); lst[1].setFloat(step_ms); diff --git a/ceammc/ext/src/env/vline_to_env.cpp b/ceammc/ext/src/env/vline_to_env.cpp index 087c6f668d..1196461053 100644 --- a/ceammc/ext/src/env/vline_to_env.cpp +++ b/ceammc/ext/src/env/vline_to_env.cpp @@ -29,9 +29,9 @@ void Vline2Env::onBang() atomTo(0, EnvAtom(env_)); } -void Vline2Env::onList(const AtomList& lst) +void Vline2Env::onList(const AtomListView& lv) { - if (lst.empty()) + if (lv.empty()) onBang(); auto tm = clock_getlogicaltime(); @@ -43,9 +43,9 @@ void Vline2Env::onList(const AtomList& lst) } // value, dur, offset - auto v = lst.floatAt(0, 0); - size_t dur_us = lst.floatAt(1, 0) * 1000; - size_t off_us = lst.floatAt(2, 0) * 1000; + auto v = lv.floatAt(0, 0); + size_t dur_us = lv.floatAt(1, 0) * 1000; + size_t off_us = lv.floatAt(2, 0) * 1000; // add prev value env_.insertPoint(EnvelopePoint(len_, v_, false, CURVE_LINE)); diff --git a/ceammc/ext/src/env/vline_to_env.h b/ceammc/ext/src/env/vline_to_env.h index 7d793ff654..885e0ed540 100644 --- a/ceammc/ext/src/env/vline_to_env.h +++ b/ceammc/ext/src/env/vline_to_env.h @@ -31,7 +31,7 @@ class Vline2Env : public BaseObject { Vline2Env(const PdArgs& args); void onBang() override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; private: void tick(); diff --git a/ceammc/ext/src/flow/CMakeLists.txt b/ceammc/ext/src/flow/CMakeLists.txt index 5e36a3d21b..4aba18ba01 100644 --- a/ceammc/ext/src/flow/CMakeLists.txt +++ b/ceammc/ext/src/flow/CMakeLists.txt @@ -1,6 +1,12 @@ set(FLOW_SOURCES mod_flow.h mod_flow.cpp conway_life.cpp + route_any.cpp + route_bang.cpp route_float.cpp + route_list.cpp + route_prop.cpp + route_random.cpp + route_symbol.cpp seq_arp.cpp seq_bangs.cpp seq_base.cpp @@ -54,6 +60,7 @@ ceammc_flow_external(reject) ceammc_flow_external(reject_if) ceammc_flow_external(route) ceammc_flow_external(select) +ceammc_flow_external(seqdelay) ceammc_flow_external(space) ceammc_flow_external(speedlim) ceammc_flow_external(split) diff --git a/ceammc/ext/src/flow/flow_append.cpp b/ceammc/ext/src/flow/flow_append.cpp index 6670307604..a3795156d7 100644 --- a/ceammc/ext/src/flow/flow_append.cpp +++ b/ceammc/ext/src/flow/flow_append.cpp @@ -55,9 +55,9 @@ void FlowAppend::onSymbol(t_symbol* s) append(); } -void FlowAppend::onList(const AtomList& l) +void FlowAppend::onList(const AtomListView& lv) { - listTo(0, l); + listTo(0, lv); append(); } @@ -67,7 +67,7 @@ void FlowAppend::onAny(t_symbol* s, const AtomListView& lv) append(); } -void FlowAppend::proxy_any(InletProxy* /*x*/, t_symbol* s, const AtomListView& v) +void FlowAppend::proxy_any(int /*x*/, t_symbol* s, const AtomListView& v) { msg_.setAny(s, v); } diff --git a/ceammc/ext/src/flow/flow_append.h b/ceammc/ext/src/flow/flow_append.h index 081935fb9b..eb08410767 100644 --- a/ceammc/ext/src/flow/flow_append.h +++ b/ceammc/ext/src/flow/flow_append.h @@ -33,10 +33,10 @@ class FlowAppend : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; - void proxy_any(InletProxy* x, t_symbol* s, const AtomListView& v); + void proxy_any(int id, t_symbol* s, const AtomListView& v); private: void append(); diff --git a/ceammc/ext/src/flow/flow_change.cpp b/ceammc/ext/src/flow/flow_change.cpp index 79b809156c..3fcdfa5903 100644 --- a/ceammc/ext/src/flow/flow_change.cpp +++ b/ceammc/ext/src/flow/flow_change.cpp @@ -57,15 +57,15 @@ void FlowChange::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowChange::onList(const AtomList& l) +void FlowChange::onList(const AtomListView& lv) { - if (msg_.isEqual(l)) { + if (msg_.isEqual(lv)) { onRepeat(); return; } - msg_ = l; - listTo(0, l); + msg_ = lv; + listTo(0, lv); } void FlowChange::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_change.h b/ceammc/ext/src/flow/flow_change.h index a9c9d08629..c95e058e9f 100644 --- a/ceammc/ext/src/flow/flow_change.h +++ b/ceammc/ext/src/flow/flow_change.h @@ -30,7 +30,7 @@ class FlowChange : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void m_reset(const AtomListView&); diff --git a/ceammc/ext/src/flow/flow_count.cpp b/ceammc/ext/src/flow/flow_count.cpp index ed54415d07..bc33f8c0b9 100644 --- a/ceammc/ext/src/flow/flow_count.cpp +++ b/ceammc/ext/src/flow/flow_count.cpp @@ -12,14 +12,9 @@ * this file belongs to. *****************************************************************************/ #include "flow_count.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" -#ifdef PD_INSTANCE -#define PROP_SYM(name) t_symbol* prop_##name = gensym("@" #name); -#else -#define PROP_SYM(name) static t_symbol* prop_##name = gensym("@" #name); -#endif - FlowCount::FlowCount(const PdArgs& a) : BaseObject(a) , counter_(nullptr) @@ -51,7 +46,7 @@ void FlowCount::onSymbol(t_symbol* s) tick(); } -void FlowCount::onList(const AtomList& l) +void FlowCount::onList(const AtomListView& lv) { tick(); } @@ -66,18 +61,30 @@ void FlowCount::onData(const Atom&) tick(); } -void FlowCount::onInletAny(Inlet* inl, t_symbol* s, const AtomListView& lv) +void FlowCount::onInletAny(int id, t_symbol* s, const AtomListView& lv) { - PROP_SYM(value); - - if (s == &s_bang) + switch (crc32_hash(s)) { + case "bang"_hash: counter_->setValue(default_value_); - else if (s == &s_float) - counter_->setValue(lv.asFloat()); - else if (s == prop_value) + break; + case "float"_hash: + counter_->setValue(lv.floatAt(0, 0)); + break; + case "@value"_hash: counter_->set(lv); - else { - OBJ_ERR << "bang, int or @value message expected, got: " << s->s_name << ' ' << lv; + break; + case "@value?"_hash: + floatTo(0, counter_->value()); + break; + case "-"_hash: + counter_->setValue(counter_->value() - lv.floatAt(0, 0)); + break; + case "+"_hash: + counter_->setValue(counter_->value() + lv.floatAt(0, 0)); + break; + default: + OBJ_ERR << "bang, int, +, - or @value message expected, got: " << s->s_name << ' ' << lv; + break; } } @@ -102,7 +109,10 @@ void setup_flow_count() ObjectFactory obj("flow.count"); obj.setXletsInfo({ "any: message", "bang: reset counter\n" "int: set current value\n" - "@value X: set current value" }, + "@value X: set current value\n" + "@value?: output current value\n" + "+ X: add value\n" + "- X: substract value" }, { "int: number of received messages" }); InletProxy::init(); diff --git a/ceammc/ext/src/flow/flow_count.h b/ceammc/ext/src/flow/flow_count.h index 25066635a9..60978cdafb 100644 --- a/ceammc/ext/src/flow/flow_count.h +++ b/ceammc/ext/src/flow/flow_count.h @@ -34,14 +34,14 @@ class FlowCount : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& l) override; void onData(const Atom&) override; bool processAnyProps(t_symbol* s, const AtomListView&) override; void initDone() override; - void onInletAny(Inlet* inl, t_symbol* s, const AtomListView& lv); + void onInletAny(int id, t_symbol* s, const AtomListView& lv); private: void tick(); diff --git a/ceammc/ext/src/flow/flow_delay.cpp b/ceammc/ext/src/flow/flow_delay.cpp index f3b7fcbd9d..2fdcdfb82f 100644 --- a/ceammc/ext/src/flow/flow_delay.cpp +++ b/ceammc/ext/src/flow/flow_delay.cpp @@ -72,13 +72,13 @@ void FlowDelay::onSymbol(t_symbol* s) clock_.delay(delay_->value()); } -void FlowDelay::onList(const AtomList& l) +void FlowDelay::onList(const AtomListView& lv) { if (block_->value() && in_process_) return; in_process_ = block_->value(); - last_msg_.setList(l); + last_msg_.setList(lv); clock_.delay(delay_->value()); } @@ -92,12 +92,12 @@ void FlowDelay::onAny(t_symbol* s, const AtomListView& l) clock_.delay(delay_->value()); } -void FlowDelay::proxy_delay(t_float f) +void FlowDelay::proxy_delay(int i, t_float f) { delay_->setValue(f); } -void FlowDelay::proxy_reset() +void FlowDelay::proxy_reset(int) { clock_.unset(); in_process_ = false; @@ -105,7 +105,7 @@ void FlowDelay::proxy_reset() void FlowDelay::proxy_reset(const AtomListView&) { - proxy_reset(); + proxy_reset(0); } void FlowDelay::proxy_add(const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_delay.h b/ceammc/ext/src/flow/flow_delay.h index a469f9cb9d..5c7e65e835 100644 --- a/ceammc/ext/src/flow/flow_delay.h +++ b/ceammc/ext/src/flow/flow_delay.h @@ -33,12 +33,12 @@ class FlowDelay : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& l) override; public: - void proxy_delay(t_float f); - void proxy_reset(); + void proxy_delay(int i, t_float f); + void proxy_reset(int); void proxy_reset(const AtomListView&); void proxy_add(const AtomListView&lv); void proxy_sub(const AtomListView&); diff --git a/ceammc/ext/src/flow/flow_demultiplex.cpp b/ceammc/ext/src/flow/flow_demultiplex.cpp index ab9cf05780..adb38a11f9 100644 --- a/ceammc/ext/src/flow/flow_demultiplex.cpp +++ b/ceammc/ext/src/flow/flow_demultiplex.cpp @@ -46,12 +46,12 @@ void FlowDemultiplex::onSymbol(t_symbol* s) symbolTo(index_->value(), s); } -void FlowDemultiplex::onList(const AtomList& l) +void FlowDemultiplex::onList(const AtomListView& lv) { if (!checkIndex()) return; - listTo(index_->value(), l); + listTo(index_->value(), lv); } void FlowDemultiplex::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_demultiplex.h b/ceammc/ext/src/flow/flow_demultiplex.h index 7fec8c8fd5..6e594e03d5 100644 --- a/ceammc/ext/src/flow/flow_demultiplex.h +++ b/ceammc/ext/src/flow/flow_demultiplex.h @@ -14,12 +14,12 @@ class FlowDemultiplex : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onData(const Atom& d) override; void onInlet(size_t n, const AtomListView& l) override; - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override; + bool processAnyProps(t_symbol* sel, const AtomListView& lv) override; const char* annotateOutlet(size_t n) const override; bool checkIndex() const; diff --git a/ceammc/ext/src/flow/flow_demultiplex_tilde.cpp b/ceammc/ext/src/flow/flow_demultiplex_tilde.cpp index e1d2d3b7a8..7fb17d96b0 100644 --- a/ceammc/ext/src/flow/flow_demultiplex_tilde.cpp +++ b/ceammc/ext/src/flow/flow_demultiplex_tilde.cpp @@ -66,13 +66,13 @@ void DemultiplexTilde::setupDSP(t_signal** in) } } -void DemultiplexTilde::onInlet(size_t /*n*/, const AtomListView& lst) +void DemultiplexTilde::onInlet(size_t /*n*/, const AtomListView& lv) { - const int idx = lst.intAt(0, -1); - const t_float fidx = lst.floatAt(0, -1); + const int idx = lv.intAt(0, -1); + const t_float fidx = lv.floatAt(0, -1); if (idx < 0 || idx >= gain_.size()) { - OBJ_ERR << "invalid index: " << lst; + OBJ_ERR << "invalid index: " << lv; return; } @@ -91,10 +91,10 @@ void DemultiplexTilde::onInlet(size_t /*n*/, const AtomListView& lst) } } -void DemultiplexTilde::onList(const AtomList& lst) +void DemultiplexTilde::onList(const AtomListView& lv) { for (size_t i = 0; i < gain_.size(); i++) - gain_[i].setTargetValue(clip(lst.floatAt(i, 0), 0, 1)); + gain_[i].setTargetValue(clip(lv.floatAt(i, 0), 0, 1)); } AtomList DemultiplexTilde::propValue() const @@ -108,9 +108,9 @@ AtomList DemultiplexTilde::propValue() const return res; } -void DemultiplexTilde::propSetValue(const AtomList& lst) +void DemultiplexTilde::propSetValue(const AtomListView& lv) { - onList(lst); + onList(lv); } void setup_flow_demultiplex_tilde() diff --git a/ceammc/ext/src/flow/flow_demultiplex_tilde.h b/ceammc/ext/src/flow/flow_demultiplex_tilde.h index 9408a25b99..2b178d88a1 100644 --- a/ceammc/ext/src/flow/flow_demultiplex_tilde.h +++ b/ceammc/ext/src/flow/flow_demultiplex_tilde.h @@ -34,11 +34,11 @@ class DemultiplexTilde : public SoundExternal { void processBlock(const t_sample** in, t_sample** out) override; void setupDSP(t_signal** in) override; - void onInlet(size_t n, const AtomListView& lst) override; - void onList(const AtomList& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; + void onList(const AtomListView& lv) override; AtomList propValue() const; - void propSetValue(const AtomList& lst); + void propSetValue(const AtomListView& lv); }; void setup_flow_demultiplex_tilde(); diff --git a/ceammc/ext/src/flow/flow_dollar.cpp b/ceammc/ext/src/flow/flow_dollar.cpp index 4c3dc1d6e9..87b2e937f5 100644 --- a/ceammc/ext/src/flow/flow_dollar.cpp +++ b/ceammc/ext/src/flow/flow_dollar.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "flow_dollar.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" #include "g_canvas.h" @@ -37,21 +38,23 @@ void FlowDollar::onSymbol(t_symbol* s) symbolTo(0, canvas_realizedollar(canvas(), s)); } -void FlowDollar::onList(const AtomList& lst) +void FlowDollar::onList(const AtomListView& lv) { auto cnv = canvas(); - const auto N = lst.size(); - Atom data[N]; + const auto N = lv.size(); + + AtomList64 data; + data.reserve(N); for (size_t i = 0; i < N; i++) { - auto& a = lst[i]; + auto& a = lv[i]; if (a.isSymbol()) - data[i] = canvas_realizedollar(cnv, a.asT()); + data.push_back(canvas_realizedollar(cnv, a.asT())); else - data[i] = a; + data.push_back(a); } - listTo(0, AtomListView(&data->atom(), N)); + listTo(0, data.view()); } void FlowDollar::onAny(t_symbol* s, const AtomListView& lv) @@ -59,17 +62,18 @@ void FlowDollar::onAny(t_symbol* s, const AtomListView& lv) auto cnv = canvas(); const auto N = lv.size(); t_symbol* sel = canvas_realizedollar(cnv, s); - Atom data[N]; + AtomList64 data; + data.reserve(N); for (size_t i = 0; i < N; i++) { auto& a = lv[i]; if (a.isSymbol()) - data[i] = canvas_realizedollar(cnv, a.asT()); + data.push_back(canvas_realizedollar(cnv, a.asT())); else - data[i] = a; + data.push_back(a); } - anyTo(0, sel, AtomListView(&data->atom(), N)); + anyTo(0, sel, data.view()); } void setup_flow_dollar() diff --git a/ceammc/ext/src/flow/flow_dollar.h b/ceammc/ext/src/flow/flow_dollar.h index ecdbde79d8..68b6a6ccab 100644 --- a/ceammc/ext/src/flow/flow_dollar.h +++ b/ceammc/ext/src/flow/flow_dollar.h @@ -23,7 +23,7 @@ class FlowDollar : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; }; diff --git a/ceammc/ext/src/flow/flow_dup.cpp b/ceammc/ext/src/flow/flow_dup.cpp index 27eabe8a45..8cefc3927d 100644 --- a/ceammc/ext/src/flow/flow_dup.cpp +++ b/ceammc/ext/src/flow/flow_dup.cpp @@ -45,10 +45,10 @@ void FlowDup::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowDup::onList(const AtomList& l) +void FlowDup::onList(const AtomListView& lv) { for (int i = times_->value(); i > 0; i--) - listTo(0, l); + listTo(0, lv); } void FlowDup::onAny(t_symbol* s, const AtomListView& lv) @@ -66,4 +66,6 @@ void setup_flow_dup() { ObjectFactory obj("flow.dup"); obj.noPropsDispatch(); + + obj.setXletsInfo({ "input messages", "int: number of repeats for each message" }, { "output messages" }); } diff --git a/ceammc/ext/src/flow/flow_dup.h b/ceammc/ext/src/flow/flow_dup.h index 55a506dbd8..105612d348 100644 --- a/ceammc/ext/src/flow/flow_dup.h +++ b/ceammc/ext/src/flow/flow_dup.h @@ -25,7 +25,7 @@ class FlowDup : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& l) override; }; diff --git a/ceammc/ext/src/flow/flow_gate.cpp b/ceammc/ext/src/flow/flow_gate.cpp index 446419c041..089166bc52 100644 --- a/ceammc/ext/src/flow/flow_gate.cpp +++ b/ceammc/ext/src/flow/flow_gate.cpp @@ -36,12 +36,12 @@ void FlowGate::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowGate::onList(const AtomList& l) +void FlowGate::onList(const AtomListView& lv) { if (!state_->value()) return; - listTo(0, l); + listTo(0, lv); } void FlowGate::onAny(t_symbol* s, const AtomListView& lv) @@ -60,15 +60,15 @@ void FlowGate::onData(const Atom& data) atomTo(0, data); } -void FlowGate::onInlet(size_t n, const AtomListView& l) +void FlowGate::onInlet(size_t n, const AtomListView& lv) { if (n != 1) return; - state_->set(l); + state_->set(lv); } -bool FlowGate::processAnyProps(t_symbol* s, const AtomListView& l) +bool FlowGate::processAnyProps(t_symbol* s, const AtomListView&) { return false; } diff --git a/ceammc/ext/src/flow/flow_gate.h b/ceammc/ext/src/flow/flow_gate.h index 2aceb1aee8..836e8017cb 100644 --- a/ceammc/ext/src/flow/flow_gate.h +++ b/ceammc/ext/src/flow/flow_gate.h @@ -14,13 +14,13 @@ class FlowGate : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onData(const Atom& data) override; - void onInlet(size_t n, const AtomListView& l) override; + void onInlet(size_t n, const AtomListView& lv) override; - bool processAnyProps(t_symbol* s, const AtomListView& l) override; + bool processAnyProps(t_symbol* s, const AtomListView&) override; }; void setup_flow_gate(); diff --git a/ceammc/ext/src/flow/flow_group.cpp b/ceammc/ext/src/flow/flow_group.cpp index 1b999ce92f..23d17ff757 100644 --- a/ceammc/ext/src/flow/flow_group.cpp +++ b/ceammc/ext/src/flow/flow_group.cpp @@ -42,11 +42,11 @@ void FlowGroup::onSymbol(t_symbol* s) atoms_.append(s); } -void FlowGroup::onList(const AtomList& l) +void FlowGroup::onList(const AtomListView& lv) { - for (size_t i = 0; i < l.size(); i++) { + for (auto& a : lv) { checkFull(); - atoms_.append(l[i]); + atoms_.append(a); } } @@ -56,9 +56,9 @@ void FlowGroup::onData(const Atom& d) atoms_.append(d); } -void FlowGroup::onInlet(size_t, const AtomListView& l) +void FlowGroup::onInlet(size_t, const AtomListView& lv) { - group_size_->set(l); + group_size_->set(lv); } void FlowGroup::m_flush(t_symbol*, const AtomListView&) diff --git a/ceammc/ext/src/flow/flow_group.h b/ceammc/ext/src/flow/flow_group.h index 6087e3a5bc..9a0ffb7bc8 100644 --- a/ceammc/ext/src/flow/flow_group.h +++ b/ceammc/ext/src/flow/flow_group.h @@ -26,9 +26,9 @@ class FlowGroup : public BaseObject { FlowGroup(const PdArgs& a); void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onData(const Atom& d) override; - void onInlet(size_t, const AtomListView& l) override; + void onInlet(size_t, const AtomListView& lv) override; void m_flush(t_symbol*, const AtomListView&); void m_clear(t_symbol*, const AtomListView &); diff --git a/ceammc/ext/src/flow/flow_interval.cpp b/ceammc/ext/src/flow/flow_interval.cpp index fb05ff444e..70a975c06a 100644 --- a/ceammc/ext/src/flow/flow_interval.cpp +++ b/ceammc/ext/src/flow/flow_interval.cpp @@ -47,7 +47,7 @@ void FlowInterval::onSymbol(t_symbol* s) onBang(); } -void FlowInterval::onList(const AtomList& lst) +void FlowInterval::onList(const AtomListView& lv) { onBang(); } diff --git a/ceammc/ext/src/flow/flow_interval.h b/ceammc/ext/src/flow/flow_interval.h index 24356d7cfd..5a3eacf76f 100644 --- a/ceammc/ext/src/flow/flow_interval.h +++ b/ceammc/ext/src/flow/flow_interval.h @@ -30,8 +30,8 @@ class FlowInterval : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; - void onAny(t_symbol* s, const AtomListView& lst) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; }; void setup_flow_interval(); diff --git a/ceammc/ext/src/flow/flow_list2many.cpp b/ceammc/ext/src/flow/flow_list2many.cpp index 07b2fe1c54..b2774a3652 100644 --- a/ceammc/ext/src/flow/flow_list2many.cpp +++ b/ceammc/ext/src/flow/flow_list2many.cpp @@ -40,7 +40,7 @@ FlowList2Many::FlowList2Many(const PdArgs& args) } } -void FlowList2Many::onList(const AtomList& lv) +void FlowList2Many::onList(const AtomListView& lv) { const size_t N = std::min(lv.size(), selectors_.size()); diff --git a/ceammc/ext/src/flow/flow_list2many.h b/ceammc/ext/src/flow/flow_list2many.h index 6e8b915024..91028a2cc0 100644 --- a/ceammc/ext/src/flow/flow_list2many.h +++ b/ceammc/ext/src/flow/flow_list2many.h @@ -24,7 +24,7 @@ class FlowList2Many : public BaseObject { public: FlowList2Many(const PdArgs& args); - void onList(const AtomList& lv) override; + void onList(const AtomListView& lv) override; const char* annotateOutlet(size_t n) const override; }; diff --git a/ceammc/ext/src/flow/flow_loop.cpp b/ceammc/ext/src/flow/flow_loop.cpp index 6773f30e32..ed95685081 100644 --- a/ceammc/ext/src/flow/flow_loop.cpp +++ b/ceammc/ext/src/flow/flow_loop.cpp @@ -115,15 +115,15 @@ void FlowLoop::onSymbol(t_symbol* s) appendMessage(s); } -void FlowLoop::onList(const AtomList& l) +void FlowLoop::onList(const AtomListView& lv) { if (mode_ != MODE_REC) return; - appendMessage(l); + appendMessage(lv); } -void FlowLoop::onInlet(size_t n, const AtomListView& l) +void FlowLoop::onInlet(size_t n, const AtomListView&) { mode_ = MODE_REC; messages_.clear(); diff --git a/ceammc/ext/src/flow/flow_loop.h b/ceammc/ext/src/flow/flow_loop.h index 8a1285de39..85b2130c37 100644 --- a/ceammc/ext/src/flow/flow_loop.h +++ b/ceammc/ext/src/flow/flow_loop.h @@ -40,8 +40,8 @@ class FlowLoop : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; - void onInlet(size_t n, const AtomListView& l) override; + void onList(const AtomListView& lv) override; + void onInlet(size_t n, const AtomListView&) override; void play(); void messageTo(size_t n, const Message& msg) final; diff --git a/ceammc/ext/src/flow/flow_match.h b/ceammc/ext/src/flow/flow_match.h index b947f12a0a..b1852855a4 100644 --- a/ceammc/ext/src/flow/flow_match.h +++ b/ceammc/ext/src/flow/flow_match.h @@ -45,7 +45,7 @@ class FlowMatch : public BaseObject { const char* annotateInlet(size_t n) const override; const char* annotateOutlet(size_t n) const override; - bool processAnyProps(t_symbol* sel, const AtomListView& lst) override { return false; } + bool processAnyProps(t_symbol* sel, const AtomListView& lv) override { return false; } }; void setup_flow_match(); diff --git a/ceammc/ext/src/flow/flow_mem.cpp b/ceammc/ext/src/flow/flow_mem.cpp index caf722f871..8a8c1bc706 100644 --- a/ceammc/ext/src/flow/flow_mem.cpp +++ b/ceammc/ext/src/flow/flow_mem.cpp @@ -52,8 +52,8 @@ void FlowMem::initDone() inlets_.reserve(num_->value()); for (int i = 0; i < num_->value(); i++) { - inlets_.emplace_back(this); - inlet_new(owner(), &inlets_.back().x_obj, nullptr, nullptr); + inlets_.emplace_back(this, i); + inlet_new(owner(), inlets_.back().target(), nullptr, nullptr); createOutlet(); } @@ -89,18 +89,13 @@ void FlowMem::onInlet(size_t, const AtomListView& v) } } -void FlowMem::proxy_any(InletProxy* x, t_symbol* s, const AtomListView& v) +void FlowMem::proxy_any(int id, t_symbol* s, const AtomListView& v) { - auto it = std::find_if(inlets_.begin(), inlets_.end(), [x](const InletProxy& i) { return x == &i; }); - if (it == inlets_.end()) { - OBJ_ERR << "invalid inlet"; + if (id < 0 || id >= mem_.size()) return; - } - auto idx = std::distance(inlets_.begin(), it); - assert(idx >= 0 && idx < mem_.size()); - mem_[idx] = Message(s, v); - mem_ttl_[idx] = ttl_->value(); + mem_[id] = Message(s, v); + mem_ttl_[id] = ttl_->value(); } const char* FlowMem::annotateInlet(size_t n) const diff --git a/ceammc/ext/src/flow/flow_mem.h b/ceammc/ext/src/flow/flow_mem.h index 9621bbe162..339586da92 100644 --- a/ceammc/ext/src/flow/flow_mem.h +++ b/ceammc/ext/src/flow/flow_mem.h @@ -35,7 +35,7 @@ class FlowMem : public BaseObject { void onInlet(size_t, const AtomListView& v) override; - void proxy_any(InletProxy* x, t_symbol* s, const AtomListView& v); + void proxy_any(int id, t_symbol* s, const AtomListView& v); const char* annotateInlet(size_t n) const override; const char* annotateOutlet(size_t n) const override; diff --git a/ceammc/ext/src/flow/flow_multiplex.cpp b/ceammc/ext/src/flow/flow_multiplex.cpp index acbbfa2033..1febc9596e 100644 --- a/ceammc/ext/src/flow/flow_multiplex.cpp +++ b/ceammc/ext/src/flow/flow_multiplex.cpp @@ -21,7 +21,7 @@ FlowMultiplex::FlowMultiplex(const PdArgs& args) inlets_.reserve(total_ - 1); for (size_t i = 1; i < total_; i++) { - inlets_.emplace_back(this); + inlets_.emplace_back(this, i); inlet_new(owner(), &inlets_.back().x_obj, nullptr, nullptr); } @@ -58,9 +58,9 @@ void FlowMultiplex::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowMultiplex::onList(const AtomList& l) +void FlowMultiplex::onList(const AtomListView& lv) { - onInlet(0, l); + onInlet(0, lv); } void FlowMultiplex::onAny(t_symbol* sel, const AtomListView& lv) @@ -106,15 +106,11 @@ const char* FlowMultiplex::annotateInlet(size_t n) const return nullptr; } -void FlowMultiplex::proxy_any(Inlet* x, t_symbol* s, const AtomListView& lv) +void FlowMultiplex::proxy_any(int idx, t_symbol* s, const AtomListView& lv) { for (size_t i = 0; i < inlets_.size(); i++) { - if (&inlets_[i] == x) { - if (i + 1 == index_->value()) - anyTo(0, s, lv); - - return; - } + if (idx == index_->value()) + return anyTo(0, s, lv); } OBJ_ERR << "invalid inlet"; diff --git a/ceammc/ext/src/flow/flow_multiplex.h b/ceammc/ext/src/flow/flow_multiplex.h index 3e729a70d0..a2e68d4951 100644 --- a/ceammc/ext/src/flow/flow_multiplex.h +++ b/ceammc/ext/src/flow/flow_multiplex.h @@ -9,7 +9,7 @@ class FlowMultiplex : public BaseObject { public: struct ControlInlet { FlowMultiplex* pimpl; - void on_float(t_float f) { pimpl->proxy_float(f); } + void on_float(int, t_float f) { pimpl->proxy_float(f); } }; using Inlet = InletProxy; @@ -28,14 +28,14 @@ class FlowMultiplex : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* sel, const AtomListView& lv) override; void onData(const Atom& data) override; void onInlet(size_t idx, const AtomListView& lv) override; const char* annotateInlet(size_t n) const override; - void proxy_any(Inlet* x, t_symbol* s, const AtomListView& lv); + void proxy_any(int idx, t_symbol* s, const AtomListView& lv); void proxy_float(t_float f); public: diff --git a/ceammc/ext/src/flow/flow_multiplex_tilde.cpp b/ceammc/ext/src/flow/flow_multiplex_tilde.cpp index aeb5b00d7d..b7c8b9f97b 100644 --- a/ceammc/ext/src/flow/flow_multiplex_tilde.cpp +++ b/ceammc/ext/src/flow/flow_multiplex_tilde.cpp @@ -75,15 +75,15 @@ void MultiplexTilde::setupDSP(t_signal** in) g.setDurationMs(20, SR); } -void MultiplexTilde::onInlet(size_t n, const AtomListView& lst) +void MultiplexTilde::onInlet(size_t n, const AtomListView& lv) { - const int idx = lst.intAt(0, -1); - const t_float fidx = lst.floatAt(0, -1); + const int idx = lv.intAt(0, -1); + const t_float fidx = lv.floatAt(0, -1); if (idx < 0 || idx >= gain_.size()) { OBJ_ERR << fmt::format( "expected input channel index in range [0-{}], got: {}", - gain_.size() - 1, to_string(lst)); + gain_.size() - 1, to_string(lv)); return; } @@ -103,10 +103,10 @@ void MultiplexTilde::onInlet(size_t n, const AtomListView& lst) } } -void MultiplexTilde::onList(const AtomList& lst) +void MultiplexTilde::onList(const AtomListView& lv) { for (size_t i = 0; i < gain_.size(); i++) - gain_[i].setTargetValue(clip(lst[i].asFloat(), 0, 1)); + gain_[i].setTargetValue(clip(lv[i].asFloat(), 0, 1)); } AtomList MultiplexTilde::propValue() const @@ -120,9 +120,9 @@ AtomList MultiplexTilde::propValue() const return res; } -void MultiplexTilde::propSetValue(const AtomList& lst) +void MultiplexTilde::propSetValue(const AtomListView& lv) { - onList(lst); + onList(lv); } const char* MultiplexTilde::annotateInlet(size_t n) const diff --git a/ceammc/ext/src/flow/flow_multiplex_tilde.h b/ceammc/ext/src/flow/flow_multiplex_tilde.h index e1fc3b504e..b6f8e69680 100644 --- a/ceammc/ext/src/flow/flow_multiplex_tilde.h +++ b/ceammc/ext/src/flow/flow_multiplex_tilde.h @@ -34,11 +34,11 @@ class MultiplexTilde : public SoundExternal { void processBlock(const t_sample** in, t_sample** out) override; void setupDSP(t_signal** in) override; - void onInlet(size_t n, const AtomListView& lst) override; - void onList(const AtomList& lst) override; + void onInlet(size_t n, const AtomListView& lv) override; + void onList(const AtomListView& lv) override; AtomList propValue() const; - void propSetValue(const AtomList& lst); + void propSetValue(const AtomListView& lv); const char* annotateInlet(size_t) const override; }; diff --git a/ceammc/ext/src/flow/flow_once.cpp b/ceammc/ext/src/flow/flow_once.cpp index e4e5a2fbee..4128412bc5 100644 --- a/ceammc/ext/src/flow/flow_once.cpp +++ b/ceammc/ext/src/flow/flow_once.cpp @@ -46,10 +46,10 @@ void FlowOnce::onSymbol(t_symbol* s) } } -void FlowOnce::onList(const AtomList& lst) +void FlowOnce::onList(const AtomListView& lv) { if (pass_) { - listTo(0, lst); + listTo(0, lv); pass_ = false; } } diff --git a/ceammc/ext/src/flow/flow_once.h b/ceammc/ext/src/flow/flow_once.h index de8aa9d103..8ece934e82 100644 --- a/ceammc/ext/src/flow/flow_once.h +++ b/ceammc/ext/src/flow/flow_once.h @@ -27,7 +27,7 @@ class FlowOnce : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t, const AtomListView&) override; diff --git a/ceammc/ext/src/flow/flow_pack.cpp b/ceammc/ext/src/flow/flow_pack.cpp index 9cc104e0c2..f388b77363 100644 --- a/ceammc/ext/src/flow/flow_pack.cpp +++ b/ceammc/ext/src/flow/flow_pack.cpp @@ -84,16 +84,16 @@ void FlowPack::onInlet(size_t idx, const AtomListView& l) output(idx); } -void FlowPack::onList(const AtomList& l) +void FlowPack::onList(const AtomListView& lv) { const size_t N = msg_->value().size(); - if (l.size() > N) - OBJ_ERR << "too many values in list: " << l.size() << ". Using only first " << N; + if (lv.size() > N) + OBJ_ERR << "too many values in list: " << lv.size() << ". Using only first " << N; - const size_t NMIN = std::min(l.size(), N); + const size_t NMIN = std::min(lv.size(), N); for (size_t i = 0; i < NMIN; i++) - msg_->value()[i] = l[i]; + msg_->value()[i] = lv[i]; output(0); } diff --git a/ceammc/ext/src/flow/flow_pack.h b/ceammc/ext/src/flow/flow_pack.h index 92e1f4e559..ac3ec14454 100644 --- a/ceammc/ext/src/flow/flow_pack.h +++ b/ceammc/ext/src/flow/flow_pack.h @@ -33,7 +33,7 @@ class FlowPack : public BaseObject { void onFloat(t_float f) final; void onSymbol(t_symbol* s) final; void onInlet(size_t idx, const AtomListView& l) final; - void onList(const AtomList& l) final; + void onList(const AtomListView& lv) final; void onAny(t_symbol* s, const AtomListView& lv) final; virtual void output(size_t inlet_idx); diff --git a/ceammc/ext/src/flow/flow_pass.cpp b/ceammc/ext/src/flow/flow_pass.cpp index 682fe564e8..b672ea23f3 100644 --- a/ceammc/ext/src/flow/flow_pass.cpp +++ b/ceammc/ext/src/flow/flow_pass.cpp @@ -43,13 +43,13 @@ void FlowPass::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowPass::onList(const AtomList& l) +void FlowPass::onList(const AtomListView& lv) { - if (l.empty()) + if (lv.empty()) return bangTo(0); - if (pass_list_->value().contains(l[0])) - listTo(0, l); + if (pass_list_->value().contains(lv[0])) + listTo(0, lv); } void FlowPass::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_pass.h b/ceammc/ext/src/flow/flow_pass.h index 131a1ab00c..0aa160110e 100644 --- a/ceammc/ext/src/flow/flow_pass.h +++ b/ceammc/ext/src/flow/flow_pass.h @@ -26,7 +26,7 @@ class FlowPass : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t, const AtomListView& lv) override; }; diff --git a/ceammc/ext/src/flow/flow_pass_float.h b/ceammc/ext/src/flow/flow_pass_float.h index 9445eca503..27d1eadf89 100644 --- a/ceammc/ext/src/flow/flow_pass_float.h +++ b/ceammc/ext/src/flow/flow_pass_float.h @@ -24,7 +24,7 @@ class FlowPassFloat : public BaseObject { void onFloat(t_float f) override; void onBang() final { } void onSymbol(t_symbol*) final { } - void onList(const AtomList&) final { } + void onList(const AtomListView&) final { } void onAny(t_symbol*, const AtomListView&) final { } }; diff --git a/ceammc/ext/src/flow/flow_pass_if.cpp b/ceammc/ext/src/flow/flow_pass_if.cpp index 0205813b2e..bbca2868a5 100644 --- a/ceammc/ext/src/flow/flow_pass_if.cpp +++ b/ceammc/ext/src/flow/flow_pass_if.cpp @@ -50,13 +50,13 @@ void FlowPassIf::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowPassIf::onList(const AtomList& l) +void FlowPassIf::onList(const AtomListView& lv) { pass_ = 0; - listTo(1, l); + listTo(1, lv); if (pass_) - listTo(0, l); + listTo(0, lv); } void FlowPassIf::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_pass_if.h b/ceammc/ext/src/flow/flow_pass_if.h index 1906c35d49..990519fbc4 100644 --- a/ceammc/ext/src/flow/flow_pass_if.h +++ b/ceammc/ext/src/flow/flow_pass_if.h @@ -26,7 +26,7 @@ class FlowPassIf : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& lv) override; diff --git a/ceammc/ext/src/flow/flow_pipe.cpp b/ceammc/ext/src/flow/flow_pipe.cpp index 76bc688624..7da10d44ef 100644 --- a/ceammc/ext/src/flow/flow_pipe.cpp +++ b/ceammc/ext/src/flow/flow_pipe.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "flow_pipe.h" #include "ceammc_factory.h" +#include "ceammc_containers.h" FlowPipe::FlowPipe(const PdArgs& a) : BaseObject(a) @@ -54,17 +55,23 @@ void FlowPipe::onSymbol(t_symbol* s) pipe_.front().delay(delay_->value()); } -void FlowPipe::onList(const AtomList& l) +void FlowPipe::onList(const AtomListView& lv) { - pipe_.emplace_front([this, l]() { listTo(0, l); pop(); }); + // make a copy for lambda capture + AtomList16 l; + l.insert_back(lv); + + pipe_.emplace_front([this, l]() { listTo(0, l.view()); pop(); }); pipe_.front().delay(delay_->value()); } void FlowPipe::onAny(t_symbol* s, const AtomListView& lv) { - AtomList l(lv); // for lambda capture + // make a copy for lambda capture + AtomList16 l; + l.insert_back(lv); - pipe_.emplace_front([this, s, l]() { anyTo(0, s, l); pop(); }); + pipe_.emplace_front([this, s, l]() { anyTo(0, s, l.view()); pop(); }); pipe_.front().delay(delay_->value()); } @@ -73,12 +80,12 @@ void FlowPipe::pop() cleanup_.delay(0); } -void FlowPipe::proxy_bang() +void FlowPipe::proxy_bang(int) { pipe_.clear(); } -void FlowPipe::proxy_float(t_float f) +void FlowPipe::proxy_float(int, t_float f) { delay_->setValue(f); } diff --git a/ceammc/ext/src/flow/flow_pipe.h b/ceammc/ext/src/flow/flow_pipe.h index cd0a8d2a04..128b116137 100644 --- a/ceammc/ext/src/flow/flow_pipe.h +++ b/ceammc/ext/src/flow/flow_pipe.h @@ -37,12 +37,12 @@ class FlowPipe : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; public: - void proxy_bang(); - void proxy_float(t_float f); + void proxy_bang(int); + void proxy_float(int, t_float f); void proxy_flush(const AtomListView& v); void proxy_reset(const AtomListView& v); diff --git a/ceammc/ext/src/flow/flow_queue.cpp b/ceammc/ext/src/flow/flow_queue.cpp index 2f2685cf63..11623fdeed 100644 --- a/ceammc/ext/src/flow/flow_queue.cpp +++ b/ceammc/ext/src/flow/flow_queue.cpp @@ -94,7 +94,7 @@ void FlowQueue::initDone() inlets_.reserve(N); for (size_t i = 0; i < N; i++) { queue_.emplace_back(SZ); - inlets_.emplace_back(this); + inlets_.emplace_back(this, i); inlet_new(owner(), &inlets_.back().x_obj, nullptr, nullptr); createOutlet(); } @@ -102,13 +102,9 @@ void FlowQueue::initDone() inlet_new(owner(), &control_.x_obj, nullptr, nullptr); } -void FlowQueue::proxy_any(FlowQueue::Inlet* x, t_symbol* s, const AtomListView& v) +void FlowQueue::proxy_any(int id, t_symbol* s, const AtomListView& v) { - auto it = std::find_if(inlets_.cbegin(), inlets_.cend(), [x](const Inlet& i) { return &i == x; }); - if (it == inlets_.cend()) - return; // should never happen - - auto idx = std::distance(inlets_.cbegin(), it); + auto idx = id; assert(inlets_.size() == queue_.size()); assert(idx >= 0 && idx < queue_.size()); diff --git a/ceammc/ext/src/flow/flow_queue.h b/ceammc/ext/src/flow/flow_queue.h index 516e554f56..16fa98e7ab 100644 --- a/ceammc/ext/src/flow/flow_queue.h +++ b/ceammc/ext/src/flow/flow_queue.h @@ -43,7 +43,7 @@ class FlowQueue : public BaseObject { public: struct ControlInlet { FlowQueue* pimpl; - void on_bang() { pimpl->proxy_pop(); } + void on_bang(int) { pimpl->proxy_pop(); } void m_pop(const AtomListView&) { pimpl->proxy_pop(); } void m_clear(const AtomListView&) { pimpl->proxy_clear(); } void m_output(const AtomListView&) { pimpl->proxy_output(); } @@ -64,7 +64,7 @@ class FlowQueue : public BaseObject { FlowQueue(const PdArgs& a); void initDone() override; - void proxy_any(Inlet* x, t_symbol* s, const AtomListView& v); + void proxy_any(int id, t_symbol* s, const AtomListView& v); void proxy_pop(); void proxy_clear(); void proxy_output(); diff --git a/ceammc/ext/src/flow/flow_record.cpp b/ceammc/ext/src/flow/flow_record.cpp index cf4954f20a..9ab856b437 100644 --- a/ceammc/ext/src/flow/flow_record.cpp +++ b/ceammc/ext/src/flow/flow_record.cpp @@ -134,9 +134,9 @@ void FlowRecord::onSymbol(t_symbol* s) MessagePool::instance().deleteElement(msg); } -void FlowRecord::onList(const AtomList& lst) +void FlowRecord::onList(const AtomListView& lv) { - auto msg = MessagePool::instance().newElement(lst.view()); + auto msg = MessagePool::instance().newElement(lv); if (!appendMessage(msg)) MessagePool::instance().deleteElement(msg); @@ -445,7 +445,7 @@ void setup_flow_record() obj.noPropsDispatch(); FlowRecord::ControlProxy::init(); - FlowRecord::ControlProxy::set_bang_callback(&FlowRecord::m_bang); + FlowRecord::ControlProxy::set_bang_callback(&FlowRecord::onInletBang); FlowRecord::ControlProxy::set_method_callback(gensym("play"), &FlowRecord::m_play); FlowRecord::ControlProxy::set_method_callback(gensym("stop"), &FlowRecord::m_stop); FlowRecord::ControlProxy::set_method_callback(gensym("pause"), &FlowRecord::m_pause); diff --git a/ceammc/ext/src/flow/flow_record.h b/ceammc/ext/src/flow/flow_record.h index d0fb1ceb6d..c027fd7650 100644 --- a/ceammc/ext/src/flow/flow_record.h +++ b/ceammc/ext/src/flow/flow_record.h @@ -67,7 +67,7 @@ class FlowRecord : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void m_play(const AtomListView& lv); @@ -86,6 +86,8 @@ class FlowRecord : public BaseObject { double recStartMs() const { return rec_start_; } double recLengthMs() const { return rec_stop_ - rec_start_; } + void onInletBang(int) { m_bang(); } + public: const Events& events() const { return events_; } diff --git a/ceammc/ext/src/flow/flow_reject.cpp b/ceammc/ext/src/flow/flow_reject.cpp index 86e19ba0d3..93de703583 100644 --- a/ceammc/ext/src/flow/flow_reject.cpp +++ b/ceammc/ext/src/flow/flow_reject.cpp @@ -47,15 +47,15 @@ void FlowReject::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowReject::onList(const AtomList& l) +void FlowReject::onList(const AtomListView& lv) { - if (l.empty()) + if (lv.empty()) return onBang(); - if (reject_list_->value().contains(l[0])) + if (reject_list_->value().contains(lv[0])) return; - listTo(0, l); + listTo(0, lv); } void FlowReject::onAny(t_symbol* sel, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_reject.h b/ceammc/ext/src/flow/flow_reject.h index 0742ffbfff..9f8b0dad8d 100644 --- a/ceammc/ext/src/flow/flow_reject.h +++ b/ceammc/ext/src/flow/flow_reject.h @@ -26,7 +26,7 @@ class FlowReject : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* sel, const AtomListView& lv) override; void onInlet(size_t, const AtomListView& lv) override; }; diff --git a/ceammc/ext/src/flow/flow_reject_if.cpp b/ceammc/ext/src/flow/flow_reject_if.cpp index ab14a5bfa1..99e4b2facc 100644 --- a/ceammc/ext/src/flow/flow_reject_if.cpp +++ b/ceammc/ext/src/flow/flow_reject_if.cpp @@ -50,13 +50,13 @@ void FlowRejectIf::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowRejectIf::onList(const AtomList& l) +void FlowRejectIf::onList(const AtomListView& lv) { reject_ = 1; - listTo(1, l); + listTo(1, lv); if (reject_ == 0) - listTo(0, l); + listTo(0, lv); } void FlowRejectIf::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_reject_if.h b/ceammc/ext/src/flow/flow_reject_if.h index d72652a5f7..5ff76b582e 100644 --- a/ceammc/ext/src/flow/flow_reject_if.h +++ b/ceammc/ext/src/flow/flow_reject_if.h @@ -26,7 +26,7 @@ class FlowRejectIf : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& lv) override; diff --git a/ceammc/ext/src/flow/flow_ring.cpp b/ceammc/ext/src/flow/flow_ring.cpp index a7d532fbda..a6816cec9c 100644 --- a/ceammc/ext/src/flow/flow_ring.cpp +++ b/ceammc/ext/src/flow/flow_ring.cpp @@ -60,9 +60,9 @@ void FlowRing::onSymbol(t_symbol* s) output(); } -void FlowRing::onList(const AtomList& l) +void FlowRing::onList(const AtomListView& lv) { - addMessage(Message(l)); + addMessage(Message(lv)); output(); } @@ -72,7 +72,7 @@ void FlowRing::onAny(t_symbol* s, const AtomListView& lv) output(); } -void FlowRing::proxy_bang() +void FlowRing::proxy_bang(int) { output(); } diff --git a/ceammc/ext/src/flow/flow_ring.h b/ceammc/ext/src/flow/flow_ring.h index 6d8e0a1477..f98cac9b5d 100644 --- a/ceammc/ext/src/flow/flow_ring.h +++ b/ceammc/ext/src/flow/flow_ring.h @@ -31,10 +31,10 @@ class FlowRing : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; - void proxy_bang(); + void proxy_bang(int); void proxy_get(const AtomListView& lv); void proxy_fill(const AtomListView& lv); diff --git a/ceammc/ext/src/flow/flow_route.cpp b/ceammc/ext/src/flow/flow_route.cpp index 8c94947f5e..b27a6c48e6 100644 --- a/ceammc/ext/src/flow/flow_route.cpp +++ b/ceammc/ext/src/flow/flow_route.cpp @@ -55,12 +55,12 @@ FlowRoute::FlowRoute(const PdArgs& args) createOutlet(); } -void FlowRoute::onList(const AtomList& lst) +void FlowRoute::onList(const AtomListView& lv) { - if (lst.empty()) + if (lv.empty()) return; - auto& atom = lst[0]; + auto& atom = lv[0]; // iterate from end for (size_t i = n_; i > 0; i--) { @@ -69,16 +69,16 @@ void FlowRoute::onList(const AtomList& lst) if (atom == r.sel) { if (r.keep) - listTo(IDX, lst); + listTo(IDX, lv); else - listTo(IDX, lst.view(1)); + listTo(IDX, lv.subView(1)); return; } } // no match - listTo(n_, lst); + listTo(n_, lv); } void FlowRoute::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_route.h b/ceammc/ext/src/flow/flow_route.h index 1d5a6df24b..bee794ccef 100644 --- a/ceammc/ext/src/flow/flow_route.h +++ b/ceammc/ext/src/flow/flow_route.h @@ -30,7 +30,7 @@ class FlowRoute : public BaseObject { public: FlowRoute(const PdArgs& args); - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onData(const Atom& data) override; diff --git a/ceammc/ext/src/flow/flow_select.cpp b/ceammc/ext/src/flow/flow_select.cpp index d3096c54e9..64e320d50a 100644 --- a/ceammc/ext/src/flow/flow_select.cpp +++ b/ceammc/ext/src/flow/flow_select.cpp @@ -126,22 +126,22 @@ void FlowSelect::onSymbol(t_symbol* s) } } -void FlowSelect::onList(const AtomList& l) +void FlowSelect::onList(const AtomListView& lv) { const size_t N = patterns_->data.size(); bool res[N]; std::fill(res, res + N, false); - if (l.empty()) + if (lv.empty()) return; - else if (l.isFloat()) - return onFloat(l[0].asT()); - else if (l.isSymbol()) - return onSymbol(l[0].asT()); + else if (lv.isFloat()) + return onFloat(lv[0].asT()); + else if (lv.isSymbol()) + return onSymbol(lv[0].asT()); else { - if (!match(l[0], &res[0])) { - OBJ_ERR << "no match: " << N << " L" << l; - return listTo(N, l); + if (!match(lv[0], &res[0])) { + OBJ_ERR << "no match: " << N << " L" << lv; + return listTo(N, lv); } const bool kv = keep_value_->value(); @@ -150,7 +150,7 @@ void FlowSelect::onList(const AtomList& l) const auto idx = i - 1; if (res[idx]) - kv ? listTo(idx, l) : bangTo(idx); + kv ? listTo(idx, lv) : bangTo(idx); } } } diff --git a/ceammc/ext/src/flow/flow_select.h b/ceammc/ext/src/flow/flow_select.h index fa0d8a6707..79d56b5d4c 100644 --- a/ceammc/ext/src/flow/flow_select.h +++ b/ceammc/ext/src/flow/flow_select.h @@ -30,7 +30,7 @@ class FlowSelect : public BaseObject { void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; const char* annotateOutlet(size_t idx) const override; diff --git a/ceammc/ext/src/flow/flow_seqdelay.cpp b/ceammc/ext/src/flow/flow_seqdelay.cpp new file mode 100644 index 0000000000..59fb3dc13b --- /dev/null +++ b/ceammc/ext/src/flow/flow_seqdelay.cpp @@ -0,0 +1,189 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "flow_seqdelay.h" +#include "ceammc_crc32.h" +#include "ceammc_factory.h" +#include "fmt/core.h" + +#define PROP_TIME "@t" +#define PROP_BLOCK "@block" +#define METHOD_DUMP "dump" +#define METHOD_RESET "reset" + +constexpr int INLET_MAIN = 0; +constexpr int INLET_CTL = 1; + +FlowSeqDelay::FlowSeqDelay(const PdArgs& args) + : BaseObject(args) + , clock_([this]() { + messageTo(idx_++, msg_); + + while (scheduleNext()) + ; + }) + , main_inlet_(this, INLET_MAIN) + , ctl_inlet_(this, INLET_CTL) + , idx_(0) + , in_process_(false) + , is_init_(true) +{ + appendInlet(inlet_new(owner(), main_inlet_.target(), nullptr, nullptr)); + appendInlet(inlet_new(owner(), ctl_inlet_.target(), nullptr, nullptr)); + + auto prop = createCbListProperty( + PROP_TIME, [this]() -> AtomList { + AtomList res; + res.reserve(time_.size()); + + for (auto t : time_) + res.append(t); + + return res; }, + [this](const AtomListView& lv) { + if (is_init_) { + time_.reserve(lv.size()); + + for (auto& a : lv) { + if (a.isFloat() && a.asT() >= 0) { + time_.push_back(a.asT()); + } else { + OBJ_ERR << "invalid delay value: " << a << ", skipping"; + continue; + } + } + } else { + if (lv.size() != time_.size()) { + OBJ_ERR << fmt::format("expected list of size={}, got list with size={}", time_.size(), lv.size()); + return false; + } + + for (size_t i = 0; i < time_.size(); i++) { + const auto& a = lv[i]; + if (a.isFloat() && a.asT() >= 0) { + time_[i] = a.asT(); + } else { + OBJ_ERR << "invalid delay time: " << a; + continue; + } + } + + idx_ = 0; + in_process_ = false; + clock_.unset(); + } + + return true; + }); + + prop->setArgIndex(0); + prop->setUnitsMs(); + + block_ = new BoolProperty(PROP_BLOCK, false); + addProperty(block_); +} + +void FlowSeqDelay::initDone() +{ + for (size_t i = 0; i < time_.size(); i++) + createOutlet(); + + is_init_ = false; +} + +void FlowSeqDelay::m_reset(t_symbol* s, const AtomListView& lv) +{ + clock_.unset(); + idx_ = 0; + in_process_ = false; +} + +void FlowSeqDelay::on_proxy_any(int idx, t_symbol* s, const AtomListView& lv) +{ + if (idx == INLET_MAIN) { + if (block_->value() && in_process_) + return; + + in_process_ = block_->value(); + + if (s == &s_bang && lv.empty()) + msg_.setBang(); + else if (s == &s_float && lv.isFloat()) + msg_.setFloat(lv.asFloat()); + else if (s == &s_symbol && lv.isSymbol()) + msg_.setSymbol(lv.asSymbol()); + else if (s == &s_list) + msg_.setList(lv); + else + msg_.setAny(s, lv); + + handleNewMessage(); + } else if (idx == INLET_CTL) { + + switch (crc32_hash(s)) { + case PROP_TIME ""_hash: + case PROP_BLOCK ""_hash: + setProperty(s, lv); + break; + case METHOD_DUMP ""_hash: + dump(); + break; + case METHOD_RESET ""_hash: + m_reset(s, lv); + break; + case "list"_hash: + setProperty(PROP_TIME, lv); + break; + default: + OBJ_ERR << "unknown message: " << Message(s, lv); + break; + } + } +} + +void FlowSeqDelay::handleNewMessage() +{ + clock_.unset(); + idx_ = 0; + + while (scheduleNext()) + ; +} + +bool FlowSeqDelay::scheduleNext() +{ + if (idx_ >= time_.size()) { + in_process_ = false; + return false; + } + + const auto t = time_[idx_]; + if (t == 0) { + messageTo(idx_++, msg_); + return true; + } else { + clock_.delay(t); + return false; + } +} + +void setup_flow_seqdelay() +{ + InletProxy::init(); + InletProxy::set_any_callback(&FlowSeqDelay::on_proxy_any); + + ObjectFactory obj("flow.seqdelay", OBJECT_FACTORY_NO_DEFAULT_INLET); + obj.addAlias("flow.seqdel"); + obj.setInletsInfo({ "input message", "control inlet for properties" }); + obj.addMethod("reset", &FlowSeqDelay::m_reset); +} diff --git a/ceammc/ext/src/flow/flow_seqdelay.h b/ceammc/ext/src/flow/flow_seqdelay.h new file mode 100644 index 0000000000..7714089135 --- /dev/null +++ b/ceammc/ext/src/flow/flow_seqdelay.h @@ -0,0 +1,49 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef FLOW_SEQDELAY_H +#define FLOW_SEQDELAY_H + +#include "ceammc_clock.h" +#include "ceammc_object.h" +#include "ceammc_proxy.h" + +#include + +using namespace ceammc; + +class FlowSeqDelay : public BaseObject { + std::vector time_; + ClockLambdaFunction clock_; + Message msg_; + BoolProperty* block_; + InletProxy main_inlet_, ctl_inlet_; + std::uint16_t idx_; + bool in_process_, is_init_; + +public: + FlowSeqDelay(const PdArgs& args); + + void initDone() override; + + void m_reset(t_symbol* s, const AtomListView& lv); + void on_proxy_any(int idx, t_symbol* s, const AtomListView& lv); + +private: + void handleNewMessage(); + bool scheduleNext(); +}; + +void setup_flow_seqdelay(); + +#endif // FLOW_SEQDELAY_H diff --git a/ceammc/ext/src/flow/flow_space.cpp b/ceammc/ext/src/flow/flow_space.cpp index 842c132780..43b7368ec4 100644 --- a/ceammc/ext/src/flow/flow_space.cpp +++ b/ceammc/ext/src/flow/flow_space.cpp @@ -12,12 +12,22 @@ * this file belongs to. *****************************************************************************/ #include "flow_space.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" +#include +#include + +namespace { +std::mt19937 random_dev(std::time(nullptr)); + +} + FlowSpace::FlowSpace(const PdArgs& a) : BaseObject(a) , packet_sched_([this]() { packetSchedule(); }) , delay_(nullptr) + , deviation_(nullptr) , done_(nullptr) , done_fn_([this]() { bangTo(1); @@ -35,6 +45,10 @@ FlowSpace::FlowSpace(const PdArgs& a) delay_->setUnits(PropValueUnits::MSEC); addProperty(delay_); + deviation_ = new FloatProperty("@dev", 0); + deviation_->checkClosedRange(0, 1); + addProperty(deviation_); + done_ = new IntProperty("@done", 1); done_->checkNonNegative(); done_->setArgIndex(1); @@ -43,6 +57,10 @@ FlowSpace::FlowSpace(const PdArgs& a) void FlowSpace::packetSchedule() { + const t_float b = deviation_->value() * 0.49; + const t_float a = -b; + std::uniform_real_distribution dist(a, b); + // finalize scheduled clocks // as we add events from back to beginning // we need to process them from begining to end @@ -53,9 +71,13 @@ void FlowSpace::packetSchedule() it->new_one = false; - if (packet_count_ != 0) - it->clock.delay(packet_count_ * delay_->value()); - else // exec immidiately + if (packet_count_ != 0) { + t_float t = packet_count_ * delay_->value(); + if (deviation_->value() > 0) + t += (dist(random_dev) * delay_->value()); + + it->clock.delay(t); + } else // exec immidiately it->clock.exec(); } else @@ -70,9 +92,9 @@ void FlowSpace::clockDone() { if (--num_active_ == 0) { const auto n = done_->value(); - if (n > 0) + if (n > 0) { done_fn_.delay(n * delay_->value()); - else + } else bangTo(1); } } @@ -125,12 +147,15 @@ void FlowSpace::onSymbol(t_symbol* s) addClock(fn); } -void FlowSpace::onList(const AtomList& l) +void FlowSpace::onList(const AtomListView& lv) { if (packet_count_ == 0) packet_sched_.delay(0); - auto fn = [l, this]() { listTo(0, l); clockDone(); }; + // make a copy for lambda capture + AtomList16 l; + l.insert_back(lv); + auto fn = [l, this]() { listTo(0, l.view()); clockDone(); }; addClock(fn); } @@ -139,8 +164,10 @@ void FlowSpace::onAny(t_symbol* s, const AtomListView& lv) if (packet_count_ == 0) packet_sched_.delay(0); - AtomList l(lv); // lambda capture copy - auto fn = [this, s, l]() { anyTo(0, s, l); clockDone(); }; + // make a copy for lambda capture + AtomList16 l; + l.insert_back(lv); + auto fn = [this, s, l]() { anyTo(0, s, l.view()); clockDone(); }; addClock(fn); } @@ -166,7 +193,7 @@ void FlowSpace::m_prop_done(const AtomListView& lv) done_->set(lv); } -void FlowSpace::setInterval(t_float f) +void FlowSpace::setInterval(int, t_float f) { delay_->setValue(f); } diff --git a/ceammc/ext/src/flow/flow_space.h b/ceammc/ext/src/flow/flow_space.h index 3b982f6df1..d244ad66b3 100644 --- a/ceammc/ext/src/flow/flow_space.h +++ b/ceammc/ext/src/flow/flow_space.h @@ -35,6 +35,7 @@ class FlowSpace : public BaseObject { ClockLambdaFunction packet_sched_; FloatProperty* delay_; + FloatProperty* deviation_; IntProperty* done_; std::list pipe_; ClockLambdaFunction done_fn_; @@ -47,15 +48,14 @@ class FlowSpace : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void m_reset(const AtomListView&); void m_prop_delay(const AtomListView& lv); void m_prop_done(const AtomListView& lv); - - void setInterval(t_float f); + void setInterval(int, t_float f); private: void packetSchedule(); diff --git a/ceammc/ext/src/flow/flow_speedlim.cpp b/ceammc/ext/src/flow/flow_speedlim.cpp index ea44f70a73..3a133ef2d4 100644 --- a/ceammc/ext/src/flow/flow_speedlim.cpp +++ b/ceammc/ext/src/flow/flow_speedlim.cpp @@ -16,6 +16,7 @@ FlowSpeedLimit::FlowSpeedLimit(const PdArgs& a) period_ = new IntProperty("@limit", 0); period_->setArgIndex(0); period_->setUnitsMs(); + period_->checkMinEq(0); addProperty(period_); } @@ -46,13 +47,13 @@ void FlowSpeedLimit::onSymbol(t_symbol* s) symbolTo(0, s); } -void FlowSpeedLimit::onList(const AtomList& l) +void FlowSpeedLimit::onList(const AtomListView& lv) { if (is_closed_) return; accept(); - listTo(0, l); + listTo(0, lv); } void FlowSpeedLimit::onAny(t_symbol* s, const AtomListView& lv) @@ -87,7 +88,7 @@ void FlowSpeedLimit::clock_handler() is_closed_ = false; } -void FlowSpeedLimit::proxy_reset(const AtomListView&) +void FlowSpeedLimit::onInletReset(const AtomListView&) { is_closed_ = false; clock_.unset(); @@ -100,9 +101,9 @@ void setup_flow_speedlim() obj.noPropsDispatch(); InletProxy::init(); - InletProxy::set_bang_callback(&FlowSpeedLimit::proxy_reset); - InletProxy::set_float_callback(&FlowSpeedLimit::proxy_float); - InletProxy::set_method_callback(gensym("reset"), &FlowSpeedLimit::proxy_reset); + InletProxy::set_bang_callback(&FlowSpeedLimit::onInletBang); + InletProxy::set_float_callback(&FlowSpeedLimit::onInletFloat); + InletProxy::set_method_callback(gensym("reset"), &FlowSpeedLimit::onInletReset); obj.setXletsInfo({ "any: input flow", "float: change speed" }, { "any: output flow" }); } diff --git a/ceammc/ext/src/flow/flow_speedlim.h b/ceammc/ext/src/flow/flow_speedlim.h index 5aa774dc0e..5f2e515a36 100644 --- a/ceammc/ext/src/flow/flow_speedlim.h +++ b/ceammc/ext/src/flow/flow_speedlim.h @@ -18,13 +18,14 @@ class FlowSpeedLimit : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onData(const Atom& data) override; - void proxy_float(t_float f) { period_->setValue(f); } - void proxy_reset() { proxy_reset({}); } - void proxy_reset(const AtomListView&); +public: + void onInletBang(int) { onInletReset({}); } + void onInletFloat(int, t_float f) { period_->setValue(f); } + void onInletReset(const AtomListView&); void accept(); void clock_handler(); diff --git a/ceammc/ext/src/flow/flow_split.cpp b/ceammc/ext/src/flow/flow_split.cpp index 0019e9bd16..b1d0f997d6 100644 --- a/ceammc/ext/src/flow/flow_split.cpp +++ b/ceammc/ext/src/flow/flow_split.cpp @@ -45,11 +45,11 @@ void FlowSplit::onSymbol(t_symbol* s) symbolTo(split_, s); } -void FlowSplit::onList(const AtomList& l) +void FlowSplit::onList(const AtomListView& lv) { split_ = 1; - listTo(2, l); - listTo(split_, l); + listTo(2, lv); + listTo(split_, lv); } void FlowSplit::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_split.h b/ceammc/ext/src/flow/flow_split.h index b82f9c37bb..61cb0a9842 100644 --- a/ceammc/ext/src/flow/flow_split.h +++ b/ceammc/ext/src/flow/flow_split.h @@ -26,7 +26,7 @@ class FlowSplit : public BaseObject { void onBang() override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& lv) override; diff --git a/ceammc/ext/src/flow/flow_stack.cpp b/ceammc/ext/src/flow/flow_stack.cpp index 7eca0340ad..b9543914ff 100644 --- a/ceammc/ext/src/flow/flow_stack.cpp +++ b/ceammc/ext/src/flow/flow_stack.cpp @@ -34,21 +34,21 @@ FlowStack::FlowStack(const PdArgs& a) createCbBoolProperty("@empty", [this]() { return stack_.empty(); }); on_full_ = new ListProperty("@on_full"); - on_full_->setListCheckFn([this](const AtomList& l) -> bool { - if (l.empty() || l[0].isSymbol()) + on_full_->setListCheckFn([this](const AtomListView& lv) -> bool { + if (lv.empty() || lv[0].isSymbol()) return true; - OBJ_ERR << "[@on_full] symbol expected as first argument, got: " << l[0]; + OBJ_ERR << "[@on_full] symbol expected as first argument, got: " << lv[0]; return false; }); addProperty(on_full_); on_empty_ = new ListProperty("@on_empty"); - on_empty_->setListCheckFn([this](const AtomList& l) -> bool { - if (l.empty() || l[0].isSymbol()) + on_empty_->setListCheckFn([this](const AtomListView& lv) -> bool { + if (lv.empty() || lv[0].isSymbol()) return true; - OBJ_ERR << "[@on_empty] symbol expected as first argument, got: " << l[0]; + OBJ_ERR << "[@on_empty] symbol expected as first argument, got: " << lv[0]; return false; }); addProperty(on_empty_); @@ -84,13 +84,13 @@ void FlowStack::onSymbol(t_symbol* s) check_full(); } -void FlowStack::onList(const AtomList& l) +void FlowStack::onList(const AtomListView& lv) { if (stack_.size() >= max_size_->value()) { return; } - stack_.push_back(Message(l)); + stack_.push_back(Message(lv)); check_full(); } @@ -159,7 +159,7 @@ void FlowStack::m_flush(const AtomListView&) check_empty(); } -void FlowStack::m_poptop() +void FlowStack::m_poptop(int) { if (stack_.empty()) { OBJ_ERR << "stack is empty"; diff --git a/ceammc/ext/src/flow/flow_stack.h b/ceammc/ext/src/flow/flow_stack.h index 13f56e7f9b..506be3819e 100644 --- a/ceammc/ext/src/flow/flow_stack.h +++ b/ceammc/ext/src/flow/flow_stack.h @@ -32,7 +32,7 @@ class FlowStack : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void initDone() override; @@ -42,7 +42,7 @@ class FlowStack : public BaseObject { void m_clear(const AtomListView&); void m_top(const AtomListView&); void m_flush(const AtomListView&); - void m_poptop(); + void m_poptop(int); private: void check_empty(); diff --git a/ceammc/ext/src/flow/flow_sync.cpp b/ceammc/ext/src/flow/flow_sync.cpp index 1834aab18d..2a0e25e8ff 100644 --- a/ceammc/ext/src/flow/flow_sync.cpp +++ b/ceammc/ext/src/flow/flow_sync.cpp @@ -40,18 +40,18 @@ FlowSync::FlowSync(const PdArgs& a) } } -void FlowSync::onInlet(size_t n, const AtomListView& l) +void FlowSync::onInlet(size_t n, const AtomListView& lv) { if (n >= msg_list_.size()) return; - if (l.size() > 0) { - if (l[0].isFloat()) - msg_list_[n].setFloat(l[0].asFloat()); - else if (l[0].asSymbol()) - msg_list_[n].setSymbol(l[0].asSymbol()); + if (lv.size() > 0) { + if (lv[0].isFloat()) + msg_list_[n].setFloat(lv[0].asFloat()); + else if (lv[0].asSymbol()) + msg_list_[n].setSymbol(lv[0].asSymbol()); else - msg_list_[n].setList(l); + msg_list_[n].setList(lv); } else { OBJ_DBG << "bang received to inlet: " << n; } @@ -59,9 +59,9 @@ void FlowSync::onInlet(size_t n, const AtomListView& l) sync(); } -void FlowSync::onList(const AtomList& l) +void FlowSync::onList(const AtomListView& lv) { - msg_list_[0] = l; + msg_list_[0] = lv; sync(); } diff --git a/ceammc/ext/src/flow/flow_sync.h b/ceammc/ext/src/flow/flow_sync.h index 85e5395d4b..9fcc66d238 100644 --- a/ceammc/ext/src/flow/flow_sync.h +++ b/ceammc/ext/src/flow/flow_sync.h @@ -28,8 +28,8 @@ class FlowSync : public BaseObject { public: FlowSync(const PdArgs& a); - void onInlet(size_t n, const AtomListView& l) override; - void onList(const AtomList& l) override; + void onInlet(size_t n, const AtomListView& lv) override; + void onList(const AtomListView& lv) override; void onFloat(t_float v) override; void onSymbol(t_symbol* s) override; diff --git a/ceammc/ext/src/flow/flow_tee_tilde.cpp b/ceammc/ext/src/flow/flow_tee_tilde.cpp index 3cf9b0742f..e1f1bd7a26 100644 --- a/ceammc/ext/src/flow/flow_tee_tilde.cpp +++ b/ceammc/ext/src/flow/flow_tee_tilde.cpp @@ -23,9 +23,9 @@ void FlowTeeTilde::onFloat(t_float f) floatTo(1, f); } -void FlowTeeTilde::onList(const AtomList& l) +void FlowTeeTilde::onList(const AtomListView& lv) { - listTo(1, l); + listTo(1, lv); } void FlowTeeTilde::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/flow_tee_tilde.h b/ceammc/ext/src/flow/flow_tee_tilde.h index dd7b526655..47222d6be1 100644 --- a/ceammc/ext/src/flow/flow_tee_tilde.h +++ b/ceammc/ext/src/flow/flow_tee_tilde.h @@ -11,7 +11,7 @@ class FlowTeeTilde : public SoundExternal { void onBang() override; void onSymbol(t_symbol* s) override; void onFloat(t_float f) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; void processBlock(const t_sample** in, t_sample** out) override; diff --git a/ceammc/ext/src/flow/mod_flow.cpp b/ceammc/ext/src/flow/mod_flow.cpp index db37e678bb..901f124a32 100644 --- a/ceammc/ext/src/flow/mod_flow.cpp +++ b/ceammc/ext/src/flow/mod_flow.cpp @@ -32,6 +32,7 @@ #include "flow_ring.h" #include "flow_route.h" #include "flow_select.h" +#include "flow_seqdelay.h" #include "flow_speedlim.h" #include "flow_split.h" #include "flow_stack.h" @@ -55,7 +56,13 @@ void setup_seq_sequencer(); void setup_seq_toggles(); void setup_seq_life(); +void setup_route_any(); +void setup_route_bang(); void setup_route_float(); +void setup_route_list(); +void setup_route_prop(); +void setup_route_random(); +void setup_route_symbol(); void ceammc_flow_setup() { @@ -95,6 +102,7 @@ void ceammc_flow_setup() setup_flow_reject_if(); setup_flow_route(); setup_flow_select(); + setup_flow_seqdelay(); setup_flow_space(); setup_flow_speedlim(); setup_flow_split(); @@ -113,5 +121,11 @@ void ceammc_flow_setup() setup_seq_toggles(); setup_seq_life(); + setup_route_any(); + setup_route_bang(); setup_route_float(); + setup_route_list(); + setup_route_prop(); + setup_route_random(); + setup_route_symbol(); } diff --git a/ceammc/ext/src/flow/route_any.cpp b/ceammc/ext/src/flow/route_any.cpp new file mode 100644 index 0000000000..c2afb2e35d --- /dev/null +++ b/ceammc/ext/src/flow/route_any.cpp @@ -0,0 +1,55 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_any.h" +#include "ceammc_factory.h" + +RouteAny::RouteAny(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); + createOutlet(); +} + +void RouteAny::onBang() +{ + bangTo(1); +} + +void RouteAny::onFloat(t_float f) +{ + floatTo(1, f); +} + +void RouteAny::onSymbol(t_symbol* s) +{ + symbolTo(1, s); +} + +void RouteAny::onList(const AtomListView& lv) +{ + listTo(1, lv); +} + +void RouteAny::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(0, s, lv); +} + +void setup_route_any() +{ + ObjectFactory obj("route.any"); + + obj.setXletsInfo({ "any" }, { "any messages", "bangs, floats, symbols and lists" }); + obj.noPropsDispatch(); +} diff --git a/ceammc/ext/src/flow/route_any.h b/ceammc/ext/src/flow/route_any.h new file mode 100644 index 0000000000..5250235b65 --- /dev/null +++ b/ceammc/ext/src/flow/route_any.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * Copyright 2023 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_ANY_H +#define ROUTE_ANY_H + +#include "ceammc_object.h" +using namespace ceammc; + +class RouteAny : public BaseObject { +public: + RouteAny(const PdArgs& args); + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; +}; + +void setup_route_any(); + +#endif // ROUTE_ANY_H diff --git a/ceammc/ext/src/flow/route_bang.cpp b/ceammc/ext/src/flow/route_bang.cpp new file mode 100644 index 0000000000..2505b530b0 --- /dev/null +++ b/ceammc/ext/src/flow/route_bang.cpp @@ -0,0 +1,63 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_bang.h" +#include "ceammc_factory.h" + +RouteBang::RouteBang(const PdArgs& args) + : BaseObject(args) + , strict_(nullptr) +{ + strict_ = new BoolProperty("@strict", false); + addProperty(strict_); + + createOutlet(); + createOutlet(); +} + +void RouteBang::onBang() +{ + bangTo(0); +} + +void RouteBang::onFloat(t_float f) +{ + floatTo(1, f); +} + +void RouteBang::onSymbol(t_symbol* s) +{ + symbolTo(1, s); +} + +void RouteBang::onList(const AtomListView& lv) +{ + if (!strict_->value() && lv.empty()) + bangTo(0); + else + listTo(1, lv); +} + +void RouteBang::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(1, s, lv); +} + +void setup_route_bang() +{ + ObjectFactory obj("route.bang"); + obj.addAlias("route.b"); + + obj.setXletsInfo({ "any" }, { "bang", "other messages" }); + obj.noPropsDispatch(); +} diff --git a/ceammc/ext/src/flow/route_bang.h b/ceammc/ext/src/flow/route_bang.h new file mode 100644 index 0000000000..e8c19dec59 --- /dev/null +++ b/ceammc/ext/src/flow/route_bang.h @@ -0,0 +1,35 @@ +/***************************************************************************** + * Copyright 2023 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_BANG_H +#define ROUTE_BANG_H + +#include "ceammc_object.h" +using namespace ceammc; + +class RouteBang : public BaseObject { + BoolProperty* strict_; + +public: + RouteBang(const PdArgs& args); + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; +}; + +void setup_route_bang(); + +#endif // ROUTE_BANG_H diff --git a/ceammc/ext/src/flow/route_float.cpp b/ceammc/ext/src/flow/route_float.cpp index b17daa2e55..7df72b81ce 100644 --- a/ceammc/ext/src/flow/route_float.cpp +++ b/ceammc/ext/src/flow/route_float.cpp @@ -40,12 +40,12 @@ void RouteFloat::onSymbol(t_symbol* s) symbolTo(1, s); } -void RouteFloat::onList(const AtomList& lst) +void RouteFloat::onList(const AtomListView& lv) { - if (!strict_->value() && lst.isFloat()) - floatTo(0, lst[0].asT()); + if (!strict_->value() && lv.isFloat()) + floatTo(0, lv[0].asT()); else - listTo(1, lst); + listTo(1, lv); } void RouteFloat::onAny(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/route_float.h b/ceammc/ext/src/flow/route_float.h index 72482fc626..029c204398 100644 --- a/ceammc/ext/src/flow/route_float.h +++ b/ceammc/ext/src/flow/route_float.h @@ -26,7 +26,7 @@ class RouteFloat : public BaseObject { void onBang() override; void onFloat(t_float f) override; void onSymbol(t_symbol* s) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void onAny(t_symbol* s, const AtomListView& lv) override; }; diff --git a/ceammc/ext/src/flow/route_list.cpp b/ceammc/ext/src/flow/route_list.cpp new file mode 100644 index 0000000000..b8166455f1 --- /dev/null +++ b/ceammc/ext/src/flow/route_list.cpp @@ -0,0 +1,56 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_list.h" +#include "ceammc_factory.h" + +RouteList::RouteList(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); + createOutlet(); +} + +void RouteList::onBang() +{ + bangTo(1); +} + +void RouteList::onFloat(t_float f) +{ + floatTo(1, f); +} + +void RouteList::onSymbol(t_symbol* s) +{ + symbolTo(1, s); +} + +void RouteList::onList(const AtomListView& lv) +{ + listTo(0, lv); +} + +void RouteList::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(1, s, lv); +} + +void setup_route_list() +{ + ObjectFactory obj("route.list"); + obj.addAlias("route.l"); + + obj.setXletsInfo({ "any" }, { "list", "other messages" }); + obj.noPropsDispatch(); +} diff --git a/ceammc/ext/src/flow/route_list.h b/ceammc/ext/src/flow/route_list.h new file mode 100644 index 0000000000..1eaf657869 --- /dev/null +++ b/ceammc/ext/src/flow/route_list.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * Copyright 2023 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_LIST_H +#define ROUTE_LIST_H + +#include "ceammc_object.h" +using namespace ceammc; + +class RouteList : public BaseObject { +public: + RouteList(const PdArgs& args); + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; +}; + +void setup_route_list(); + +#endif // ROUTE_LIST_H diff --git a/ceammc/ext/src/flow/route_prop.cpp b/ceammc/ext/src/flow/route_prop.cpp new file mode 100644 index 0000000000..4dc6d987ae --- /dev/null +++ b/ceammc/ext/src/flow/route_prop.cpp @@ -0,0 +1,55 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_prop.h" +#include "ceammc_factory.h" + +RouteProp::RouteProp(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); + createOutlet(); +} + +void RouteProp::onBang() +{ + bangTo(1); +} + +void RouteProp::onFloat(t_float f) +{ + floatTo(1, f); +} + +void RouteProp::onSymbol(t_symbol* s) +{ + symbolTo(1, s); +} + +void RouteProp::onList(const AtomListView& lv) +{ + listTo(1, lv); +} + +void RouteProp::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(s->s_name[0] != '@', s, lv); +} + +void setup_route_prop() +{ + ObjectFactory obj("route.prop"); + + obj.setXletsInfo({ "any" }, { "properties", "other messages" }); + obj.noPropsDispatch(); +} diff --git a/ceammc/ext/src/flow/route_prop.h b/ceammc/ext/src/flow/route_prop.h new file mode 100644 index 0000000000..02ec8acbca --- /dev/null +++ b/ceammc/ext/src/flow/route_prop.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * Copyright 2023 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_PROP_H +#define ROUTE_PROP_H + +#include "ceammc_object.h" +using namespace ceammc; + +class RouteProp : public BaseObject { +public: + RouteProp(const PdArgs& args); + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; +}; + +void setup_route_prop(); + +#endif // ROUTE_PROP_H diff --git a/ceammc/ext/src/flow/route_random.cpp b/ceammc/ext/src/flow/route_random.cpp new file mode 100644 index 0000000000..efe9c96c69 --- /dev/null +++ b/ceammc/ext/src/flow/route_random.cpp @@ -0,0 +1,68 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_random.h" +#include "ceammc_factory.h" + +constexpr int MIN_NUM_OUTLETS = 2; +constexpr int MAX_NUM_OUTLETS = 64; +constexpr int DEFAULT_NUM_OUTLETS = 2; + +RouteRandom::RouteRandom(const PdArgs& args) + : BaseObject(args) + , n_(nullptr) +{ + n_ = new IntProperty("@n", DEFAULT_NUM_OUTLETS, PropValueAccess::INITONLY); + n_->checkClosedRange(MIN_NUM_OUTLETS, MAX_NUM_OUTLETS); + n_->setArgIndex(0); + addProperty(n_); + + addProperty(new random::SeedProperty(gen_)); +} + +void RouteRandom::initDone() +{ + for (int i = 0; i < n_->value(); i++) + createOutlet(); +} + +void RouteRandom::onBang() +{ + bangTo(genOutletIdx()); +} + +void RouteRandom::onFloat(t_float f) +{ + floatTo(genOutletIdx(), f); +} + +void RouteRandom::onSymbol(t_symbol* s) +{ + symbolTo(genOutletIdx(), s); +} + +void RouteRandom::onList(const AtomListView& lv) +{ + listTo(genOutletIdx(), lv); +} + +void RouteRandom::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(genOutletIdx(), s, lv); +} + +void setup_route_random() +{ + ObjectFactory obj("route.random"); + obj.addAlias("route.r"); +} diff --git a/ceammc/ext/src/flow/route_random.h b/ceammc/ext/src/flow/route_random.h new file mode 100644 index 0000000000..4f39991aea --- /dev/null +++ b/ceammc/ext/src/flow/route_random.h @@ -0,0 +1,41 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_RANDOM_H +#define ROUTE_RANDOM_H + +#include "ceammc_object.h" +#include "ceammc_random.h" +using namespace ceammc; + +class RouteRandom : public BaseObject { + IntProperty* n_; + random::RandomGen gen_; + +public: + RouteRandom(const PdArgs& args); + + void initDone() final; + void onBang() final; + void onFloat(t_float f) final; + void onSymbol(t_symbol* s) final; + void onList(const AtomListView& lv) final; + void onAny(t_symbol* s, const AtomListView& lv) override; + +private: + inline size_t genOutletIdx() { return gen_.gen_uniform_uint(0, n_->value() - 1); } +}; + +void setup_route_random(); + +#endif // ROUTE_RANDOM_H diff --git a/ceammc/ext/src/flow/route_symbol.cpp b/ceammc/ext/src/flow/route_symbol.cpp new file mode 100644 index 0000000000..5e9fb49ebc --- /dev/null +++ b/ceammc/ext/src/flow/route_symbol.cpp @@ -0,0 +1,56 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "route_symbol.h" +#include "ceammc_factory.h" + +RouteSymbol::RouteSymbol(const PdArgs& args) + : BaseObject(args) +{ + createOutlet(); + createOutlet(); +} + +void RouteSymbol::onBang() +{ + bangTo(1); +} + +void RouteSymbol::onFloat(t_float f) +{ + floatTo(1, f); +} + +void RouteSymbol::onSymbol(t_symbol* s) +{ + symbolTo(0, s); +} + +void RouteSymbol::onList(const AtomListView& lv) +{ + listTo(1, lv); +} + +void RouteSymbol::onAny(t_symbol* s, const AtomListView& lv) +{ + anyTo(1, s, lv); +} + +void setup_route_symbol() +{ + ObjectFactory obj("route.symbol"); + obj.addAlias("route.s"); + + obj.setXletsInfo({ "any" }, { "symbol", "other messages" }); + obj.noPropsDispatch(); +} diff --git a/ceammc/ext/src/flow/route_symbol.h b/ceammc/ext/src/flow/route_symbol.h new file mode 100644 index 0000000000..1e45228925 --- /dev/null +++ b/ceammc/ext/src/flow/route_symbol.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * Copyright 2023 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ROUTE_SYMBOL_H +#define ROUTE_SYMBOL_H + +#include "ceammc_object.h" +using namespace ceammc; + +class RouteSymbol : public BaseObject { +public: + RouteSymbol(const PdArgs& args); + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* s, const AtomListView& lv) override; +}; + +void setup_route_symbol(); + +#endif // ROUTE_SYMBOL_H diff --git a/ceammc/ext/src/flow/seq_arp.cpp b/ceammc/ext/src/flow/seq_arp.cpp index 78cb056bfe..fd1809f70f 100644 --- a/ceammc/ext/src/flow/seq_arp.cpp +++ b/ceammc/ext/src/flow/seq_arp.cpp @@ -71,6 +71,7 @@ SeqArp::SeqArp(const PdArgs& args) void SeqArp::onBang() { + m_on(&s_, {}); } void SeqArp::m_on(t_symbol* s, const AtomListView& lv) diff --git a/ceammc/ext/src/flow/seq_base.cpp b/ceammc/ext/src/flow/seq_base.cpp index e46b0469c2..c00a76447b 100644 --- a/ceammc/ext/src/flow/seq_base.cpp +++ b/ceammc/ext/src/flow/seq_base.cpp @@ -13,7 +13,7 @@ *****************************************************************************/ #include "seq_base.h" #include "ceammc_convert.h" -#include "ceammc_units.h" +#include "lex/parser_units.h" #define PROP_ERR() LogPdObject(owner(), LOG_ERROR).stream() << errorPrefix() @@ -271,26 +271,28 @@ bool SeqTimeGrain::setList(const AtomListView& lv) return FloatProperty::setList(lv); else if (lv.isSymbol()) { try { - units::UnitParseError err; - units::FreqValue v; - - auto res = units::FreqValue::parse(lv); - if (res.matchValue(v)) { - - switch (v.units()) { - case units::FreqValue::MS: - return setValue(v.value()); - case units::FreqValue::BPM: - return setBpm(v.value()); + using namespace parser; + UnitsFullMatch p; + + if (p.parse(lv[0])) { + + switch (p.type()) { + case TYPE_BPM: + return setValue(p.bpm().beatPeriodMs()); + case TYPE_MSEC: + return setValue(p.value()); + case TYPE_SEC: + return setValue(p.value() * 1000); + case TYPE_HZ: + return setValue(1000 / p.value()); default: return false; } - } else if (res.matchError(err)) { - PROP_ERR() << "parse error: " << err.msg; - return false; - } else + } else { + PROP_ERR() << "parse error"; return false; + } } catch (const std::exception& e) { PROP_ERR() << "parser error: " << e.what(); return false; diff --git a/ceammc/ext/src/flow/seq_base.h b/ceammc/ext/src/flow/seq_base.h index 9f0f5ca2aa..6abce5450e 100644 --- a/ceammc/ext/src/flow/seq_base.h +++ b/ceammc/ext/src/flow/seq_base.h @@ -30,6 +30,8 @@ class RepeatProperty : public IntProperty { bool setList(const AtomListView& lv) override; bool isFinite() const { return value() >= 0; } + bool isInfinite() const { return value() < 0; } + bool shouldRepeat(int n) const { return isInfinite() || n < value(); } }; class SeqTimeGrain : public FloatProperty { diff --git a/ceammc/ext/src/flow/seq_counter.cpp b/ceammc/ext/src/flow/seq_counter.cpp index 3bed2e1b2b..b4d239b773 100644 --- a/ceammc/ext/src/flow/seq_counter.cpp +++ b/ceammc/ext/src/flow/seq_counter.cpp @@ -12,13 +12,13 @@ * this file belongs to. *****************************************************************************/ #include "seq_counter.h" +#include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" -static t_symbol* SYM_DONE; -static t_symbol* SYM_WRAP; -static t_symbol* SYM_FOLD; - -constexpr int R_INFINITE = -1; +CEAMMC_DEFINE_STR(done) +CEAMMC_DEFINE_HASH(wrap) +CEAMMC_DEFINE_HASH(fold) SeqCounter::SeqCounter(const PdArgs& args) : BaseObject(args) @@ -29,11 +29,10 @@ SeqCounter::SeqCounter(const PdArgs& args) , ri_(0) , i_(0) , done_(false) - , dir_(DIR_FORWARD) { from_ = new IntProperty("@from", 0); from_->setArgIndex(0); - from_->setSuccessFn([this](Property*) { i_ = from_->value(); }); + from_->setSuccessFn([this](Property*) { i_ = 0; }); addProperty(from_); to_ = new IntProperty("@to", 0); @@ -45,17 +44,27 @@ SeqCounter::SeqCounter(const PdArgs& args) repeat_->setArgIndex(2); addProperty(repeat_); - mode_ = new SymbolEnumProperty("@mode", { SYM_WRAP, SYM_FOLD }); + mode_ = new SymbolEnumProperty("@mode", { str_wrap, str_fold }); addProperty(mode_); - addProperty(new SymbolEnumAlias("@wrap", mode_, SYM_WRAP)); - addProperty(new SymbolEnumAlias("@fold", mode_, SYM_FOLD)); + addProperty(new SymbolEnumAlias("@wrap", mode_, gensym(str_wrap))); + addProperty(new SymbolEnumAlias("@fold", mode_, gensym(str_fold))); addProperty(new AliasProperty("@inf", repeat_, -1)); addProperty(new AliasProperty("@once", repeat_, 1)); - createCbIntProperty("@i", [this]() -> int { return i_; }); + createCbIntProperty( + "@i", [this]() -> int { return i_; }, + [this](int val) -> bool { + if (crc32_hash(mode_->value()) == hash_fold) + i_ = wrapInteger(val, 2 * absRange()); + else + i_ = wrapInteger(val, absRange() + 1); + + return true; + }); createCbIntProperty("@ri", [this]() -> int { return ri_; }); + createCbIntProperty("@value", [this]() -> int { return currentValue(); }); createInlet(); createOutlet(); @@ -64,158 +73,180 @@ SeqCounter::SeqCounter(const PdArgs& args) void SeqCounter::onBang() { - const auto IS_CONST = (to_->value() - from_->value()) == 0; + if (!shouldRepeat()) + return; - if (!IS_CONST && mode_->value() == SYM_WRAP) - nextWrapped(); - else if (!IS_CONST && mode_->value() == SYM_FOLD) - nextFolded(); - else + if (range() == 0) { nextConst(); + } else { + outputCycleCounter(); + outputCurrent(); + next(); + } } -void SeqCounter::onInlet(size_t n, const AtomListView& l) +void SeqCounter::m_next(t_symbol*, const AtomListView& lv) { - if (l.empty()) + if (!shouldRepeat()) + return; + + if (range() == 0) { + nextConst(); + } else { + next(); + + if (shouldRepeat()) { + outputCycleCounter(); + outputCurrent(); + } + } +} + +void SeqCounter::onInlet(size_t n, const AtomListView& lv) +{ + if (lv.empty()) reset(); } -void SeqCounter::m_reset(t_symbol*, const AtomListView& lv) +void SeqCounter::m_reset(t_symbol*, const AtomListView& /*lv*/) { reset(); } -void SeqCounter::nextWrapped() +void SeqCounter::m_prev(t_symbol*, const AtomListView& lv) { if (!shouldRepeat()) return; - if (i_ == from_->value()) - floatTo(1, ri_); - - floatTo(0, i_); - - const auto N = to_->value() - from_->value(); - - if (i_ == to_->value()) { - const auto nr = repeat_->value(); - - if (nr == R_INFINITE || ri_ < nr) { - ri_++; + if (range() == 0) { + nextConst(); + } else { + prev(); - if (ri_ == nr) { // should stop - done_ = true; - anyTo(1, SYM_DONE, AtomListView {}); - } else { // continue: reset counter - i_ = from_->value(); - } + if (shouldRepeat()) { + outputCycleCounter(); + outputCurrent(); } - } else { - if (N > 0) - i_++; - else if (N < 0) - i_--; } } -void SeqCounter::nextFolded() +void SeqCounter::nextWrapped() { - if (!shouldRepeat()) - return; - - const auto RANGE = to_->value() - from_->value(); - const auto NR = repeat_->value(); - const auto BEGIN = from_->value(); - const auto END = to_->value(); - - int LAST = 0; - if (RANGE > 1) - LAST = BEGIN + 1; - else if (RANGE < -1) - LAST = END + 1; - else { - dir_ = DIR_BACK; - LAST = END; - } - - // repeat counter - if (i_ == BEGIN) { - dir_ = DIR_FORWARD; - floatTo(1, ri_); - } - - // output sequence counter - floatTo(0, i_); + if (i_ < absRange()) + i_++; + else if (nextCycle()) + i_ = 0; +} - // update - if (i_ == LAST && dir_ == DIR_BACK) { // last element in folded sequence - dir_ = DIR_FORWARD; +void SeqCounter::nextFolded() +{ + if (i_ < (2 * absRange() - 1)) + i_++; + else if (nextCycle()) + i_ = 0; +} - if (NR == R_INFINITE || ri_ < NR) { - if (++ri_ == NR) { // should stop - done_ = true; - anyTo(1, SYM_DONE, AtomListView {}); - } - } +void SeqCounter::nextConst() +{ + floatTo(1, ri_); + floatTo(0, from_->value()); - i_ = from_->value(); - } else if (i_ == to_->value()) { // going down - dir_ = DIR_BACK; + nextCycle(); +} - if (RANGE > 0) - i_ = to_->value() - 1; - else if (RANGE < 0) - i_ = to_->value() + 1; - } else { - const bool up = (RANGE > 0 && dir_) || (RANGE < 0 && !dir_); - const bool down = (RANGE > 0 && !dir_) || (RANGE < 0 && dir_); +bool SeqCounter::nextCycle() +{ + if (!repeat_->shouldRepeat(++ri_)) { + done_ = true; + anyTo(1, gensym(str_done), AtomListView {}); + return false; + } else + return true; +} - if (up) - i_++; - else if (down) - i_--; +void SeqCounter::prev() +{ + switch (crc32_hash(mode_->value())) { + case hash_wrap: + return prevWrapped(); + case hash_fold: + return prevFolded(); + default: + OBJ_ERR << "unknown wrap mode: " << mode_->value(); + break; } } -void SeqCounter::nextConst() +void SeqCounter::prevWrapped() { - if (!shouldRepeat()) - return; - - floatTo(1, ri_++); - floatTo(0, from_->value()); + if (i_ > 0) + i_--; + else if (nextCycle()) + i_ = absRange(); +} - if (ri_ == repeat_->value()) { - done_ = true; - anyTo(1, SYM_DONE, AtomListView {}); - } +void SeqCounter::prevFolded() +{ + if (i_ > 0) + i_--; + else if (nextCycle()) + i_ = (2 * absRange()) - 1; } void SeqCounter::reset() { done_ = false; - dir_ = DIR_FORWARD; ri_ = 0; - i_ = from_->value(); + i_ = 0; } -bool SeqCounter::shouldRepeat() const +void SeqCounter::outputCurrent() { - const auto n = repeat_->value(); - return !done_ && (n == R_INFINITE || ri_ < n); + floatTo(0, currentValue()); } -void setup_seq_counter() +void SeqCounter::outputCycleCounter() +{ + if (i_ == 0) + floatTo(1, ri_); +} + +void SeqCounter::next() { - SYM_DONE = gensym("done"); - SYM_WRAP = gensym("wrap"); - SYM_FOLD = gensym("fold"); + switch (crc32_hash(mode_->value())) { + case hash_wrap: + return nextWrapped(); + case hash_fold: + return nextFolded(); + default: + OBJ_ERR << "unknown wrap mode: " << mode_->value(); + break; + } +} + +int SeqCounter::currentValue() const +{ + const auto R = range(); + const auto rsign = (0 < R) - (R < 0); + + const auto idx = (crc32_hash(mode_->value()) == hash_fold) + ? std::min(i_, (2 * std::abs(R)) - i_) + : i_; + return from_->value() + (idx * rsign); +} + +void setup_seq_counter() +{ ObjectFactory obj("seq.counter"); obj.addMethod("reset", &SeqCounter::m_reset); + obj.addMethod("next", &SeqCounter::m_next); + obj.addMethod("prev", &SeqCounter::m_prev); - obj.setXletsInfo({ "bang: increment and output\n" + obj.setXletsInfo({ "bang: output current element then increment\n" + "bang: increment then output\n" + "prev: decrement then output\n" "reset: reset counter to start value", "bang: reset counter to start value" }, { "int: counter value", diff --git a/ceammc/ext/src/flow/seq_counter.h b/ceammc/ext/src/flow/seq_counter.h index d9708863d3..6524e94532 100644 --- a/ceammc/ext/src/flow/seq_counter.h +++ b/ceammc/ext/src/flow/seq_counter.h @@ -17,14 +17,9 @@ #include "ceammc_object.h" #include "seq_base.h" -#include +#include // for std::abs class SeqCounter : public BaseObject { - enum Direction : uint8_t { - DIR_FORWARD = 1, - DIR_BACK = 0 - }; - private: IntProperty* from_; IntProperty* to_; @@ -32,7 +27,6 @@ class SeqCounter : public BaseObject { SymbolEnumProperty* mode_; int ri_, i_; bool done_; - Direction dir_; public: SeqCounter(const PdArgs& args); @@ -40,13 +34,28 @@ class SeqCounter : public BaseObject { void onInlet(size_t n, const AtomListView& l) override; void m_reset(t_symbol*, const AtomListView& lv); + void m_next(t_symbol*, const AtomListView& lv); + void m_prev(t_symbol*, const AtomListView& lv); private: + void next(); void nextWrapped(); void nextFolded(); void nextConst(); + // + void prev(); + void prevWrapped(); + void prevFolded(); void reset(); - bool shouldRepeat() const; + void outputCurrent(); + void outputCycleCounter(); + + inline bool shouldRepeat() const { return !done_ && repeat_->shouldRepeat(ri_); } + bool nextCycle(); + + inline int range() const { return to_->value() - from_->value(); } + inline int absRange() const { return std::abs(range()); } + int currentValue() const; }; void setup_seq_counter(); diff --git a/ceammc/ext/src/flow/seq_nbangs.cpp b/ceammc/ext/src/flow/seq_nbangs.cpp index 50bf56f38f..09ab175d9e 100644 --- a/ceammc/ext/src/flow/seq_nbangs.cpp +++ b/ceammc/ext/src/flow/seq_nbangs.cpp @@ -69,15 +69,15 @@ void SeqNBangs::onFloat(t_float f) clock_.exec(); } -void SeqNBangs::onList(const AtomList& l) +void SeqNBangs::onList(const AtomListView& lv) { - if (l.empty()) + if (lv.empty()) return onBang(); - else if (l.size() == 1) - return onFloat(l[0].asFloat()); - else if (l.size() == 2) { + else if (lv.size() == 1) + return onFloat(lv[0].asFloat()); + else if (lv.size() == 2) { reset(); - if (n_->set(l.view(0, 1)) && interval_->set(l.view(1, 1))) + if (n_->set(lv.subView(0, 1)) && interval_->set(lv.subView(1, 1))) clock_.exec(); } else OBJ_ERR << "usage: NUM INTERVAL"; diff --git a/ceammc/ext/src/flow/seq_nbangs.h b/ceammc/ext/src/flow/seq_nbangs.h index 3fc669eb94..600168682d 100644 --- a/ceammc/ext/src/flow/seq_nbangs.h +++ b/ceammc/ext/src/flow/seq_nbangs.h @@ -30,7 +30,7 @@ class SeqNBangs : public BaseObject { void onBang() override; void onFloat(t_float f) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onInlet(size_t n, const AtomListView& lv) override; void start(); diff --git a/ceammc/ext/src/flt/CMakeLists.txt b/ceammc/ext/src/flt/CMakeLists.txt index dfc0ffd998..96b74a8fa7 100644 --- a/ceammc/ext/src/flt/CMakeLists.txt +++ b/ceammc/ext/src/flt/CMakeLists.txt @@ -1,6 +1,7 @@ include_directories(${CMAKE_SOURCE_DIR}/src) set(FLT_SOURCES + flt_a_weight.cpp flt_freqz.cpp flt_freqz_tilde.cpp ) @@ -26,7 +27,12 @@ ceammc_flt_obj(dcblock2) ceammc_flt_obj_json_double(bpf12) ceammc_flt_obj_json_double(bpf24) +ceammc_flt_obj_json_double(hpf24) +ceammc_flt_obj_json_double(lpf24) ceammc_flt_obj_json_double(moog_vcf) +ceammc_flt_obj_json_double(resonbp) +ceammc_flt_obj_json_double(resonhp) +ceammc_flt_obj_json_double(resonlp) ceammc_flt_obj_json(c_bpf) ceammc_flt_obj_json(c_highshelf) @@ -43,12 +49,9 @@ ceammc_flt_obj_json(ff_comb) ceammc_flt_obj_json(filterbank5x1) ceammc_flt_obj_json(highshelf) ceammc_flt_obj_json(hpf12) -ceammc_flt_obj_json(hpf24) ceammc_flt_obj_json(lowshelf) ceammc_flt_obj_json(lpf12) -ceammc_flt_obj_json(lpf24) ceammc_flt_obj_json(notch) -ceammc_flt_obj_json(resonbp) list(APPEND FLT_SOURCES "flt_median.h" "flt_median.cpp") diff --git a/ceammc/ext/src/flt/flt_a_weight.cpp b/ceammc/ext/src/flt/flt_a_weight.cpp new file mode 100644 index 0000000000..126198920e --- /dev/null +++ b/ceammc/ext/src/flt/flt_a_weight.cpp @@ -0,0 +1,76 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "flt_a_weight.h" +#include "ceammc_dsp.h" +#include "ceammc_factory.h" + +#include + +static const dsp::TableFunction tab_a_weight(dsp::curves::a_weight, 10, 20000); +static const auto RA_1000 = 20 * std::log10(tab_a_weight.at(1000)); + +FltAWeight::FltAWeight(const PdArgs& args) + : BaseObject(args) + , db_(nullptr) +{ + db_ = new FlagProperty("@db"); + addProperty(db_); + + createOutlet(); +} + +void FltAWeight::onFloat(t_float f) +{ + t_float res; + if (!getValue(f, res)) + return; + + floatTo(0, res); +} + +void FltAWeight::onList(const AtomListView& lv) +{ + AtomList res; + res.reserve(lv.size()); + + for (auto& a : lv) { + t_float val = 0; + if (a.isFloat() && getValue(a.asT(), val)) { + res.append(val); + } else + res.append(a); + } + + listTo(0, res); +} + +bool FltAWeight::getValue(t_float freqHz, t_float& res) const +{ + if (freqHz < tab_a_weight.min() || freqHz > tab_a_weight.max()) + return false; + + const auto val = tab_a_weight.at(freqHz); + + if (db_->value()) + res = 20 * std::log10(val) - 2.0; + else + res = val; + + return true; +} + +void setup_flt_a_weight() +{ + ObjectFactory obj("flt.a-weight"); +} diff --git a/ceammc/ext/src/flt/flt_a_weight.h b/ceammc/ext/src/flt/flt_a_weight.h new file mode 100644 index 0000000000..5dcdf5dd6a --- /dev/null +++ b/ceammc/ext/src/flt/flt_a_weight.h @@ -0,0 +1,35 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef FLT_A_WEIGHT_H +#define FLT_A_WEIGHT_H + +#include "ceammc_object.h" +using namespace ceammc; + +class FltAWeight : public BaseObject { + FlagProperty* db_; + +public: + FltAWeight(const PdArgs& args); + + void onFloat(t_float f) override; + void onList(const AtomListView& lv) override; + +private: + bool getValue(t_float freqHz, t_float& res) const; +}; + +void setup_flt_a_weight(); + +#endif // FLT_A_WEIGHT_H diff --git a/ceammc/ext/src/flt/flt_biquad.h b/ceammc/ext/src/flt/flt_biquad.h index 57ff5ee69d..18322270cd 100644 --- a/ceammc/ext/src/flt/flt_biquad.h +++ b/ceammc/ext/src/flt/flt_biquad.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "flt_biquad" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "flt.biquad" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_biquad -scn flt_biquad_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_biquad_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_biquad_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_biquad_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_biquad_dsp { +class FAUST_API flt_biquad_dsp { public: @@ -162,7 +247,7 @@ class flt_biquad_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_biquad_dsp { +class FAUST_API decorator_dsp : public flt_biquad_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_biquad_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_biquad_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_biquad_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -548,7 +626,6 @@ struct flt_biquad : public flt_biquad_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_biquad #endif @@ -558,6 +635,13 @@ struct flt_biquad : public flt_biquad_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_biquad : public flt_biquad_dsp { private: @@ -568,7 +652,7 @@ class flt_biquad : public flt_biquad_dsp { public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_biquad -scn flt_biquad_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_biquad.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -587,7 +671,7 @@ class flt_biquad : public flt_biquad_dsp { m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "flt_biquad"); + m->declare("name", "flt.biquad"); } virtual int getNumInputs() { @@ -608,7 +692,7 @@ class flt_biquad : public flt_biquad_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 3; l0 = l0 + 1) { fRec0[l0] = 0.0f; } } @@ -632,11 +716,11 @@ class flt_biquad : public flt_biquad_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("flt_biquad"); + ui_interface->openVerticalBox("flt.biquad"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* input2 = inputs[2]; @@ -644,9 +728,9 @@ class flt_biquad : public flt_biquad_dsp { FAUSTFLOAT* input4 = inputs[4]; FAUSTFLOAT* input5 = inputs[5]; FAUSTFLOAT* output0 = outputs[0]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (float(input0[i0]) - ((float(input4[i0]) * fRec0[1]) + (float(input5[i0]) * fRec0[2]))); - output0[i0] = FAUSTFLOAT((((float(input1[i0]) * fRec0[0]) + (float(input2[i0]) * fRec0[1])) + (float(input3[i0]) * fRec0[2]))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = float(input0[i0]) - (float(input4[i0]) * fRec0[1] + float(input5[i0]) * fRec0[2]); + output0[i0] = FAUSTFLOAT(float(input1[i0]) * fRec0[0] + float(input2[i0]) * fRec0[1] + float(input3[i0]) * fRec0[2]); fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/flt/flt_bpf12.h b/ceammc/ext/src/flt/flt_bpf12.h index d070d5d745..9c91eab6cc 100644 --- a/ceammc/ext/src/flt/flt_bpf12.h +++ b/ceammc/ext/src/flt/flt_bpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.bpf12" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_bpf12 -scn flt_bpf12_dsp -es 1 -mcd 16 -double -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_bpf12_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_bpf12_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_bpf12_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_bpf12_dsp { +class FAUST_API flt_bpf12_dsp { public: @@ -162,7 +247,7 @@ class flt_bpf12_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_bpf12_dsp { +class FAUST_API decorator_dsp : public flt_bpf12_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_bpf12_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_bpf12_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_bpf12_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_bpf12 : public flt_bpf12_dsp { #include #include -static double flt_bpf12_faustpower2_f(double value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_bpf12 #endif @@ -562,6 +636,16 @@ static double flt_bpf12_faustpower2_f(double value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_bpf12_faustpower2_f(double value) { + return value * value; +} + class flt_bpf12 : public flt_bpf12_dsp { private: @@ -588,7 +672,7 @@ class flt_bpf12 : public flt_bpf12_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_bpf12 -scn flt_bpf12_dsp -es 1 -mcd 16 -double -ftz 0"); m->declare("filename", "flt_bpf12.dsp"); m->declare("filters.lib/bandpass0_bandstop1:author", "Julius O. Smith III"); m->declare("filters.lib/bandpass0_bandstop1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -620,7 +704,7 @@ class flt_bpf12 : public flt_bpf12_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -635,32 +719,32 @@ class flt_bpf12 : public flt_bpf12_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - double fConst0 = std::min(192000.0, std::max(1.0, double(fSampleRate))); - fConst1 = (2.0 / fConst0); - fConst2 = flt_bpf12_faustpower2_f((1.0 / fConst0)); - fConst3 = (2.0 * fConst2); - fConst4 = (4.0 * flt_bpf12_faustpower2_f(fConst0)); - fConst5 = (3.1415926535897931 / fConst0); - fConst6 = (44.100000000000001 / fConst0); - fConst7 = (1.0 - fConst6); - fConst8 = (0.48999999999999999 * fConst0); - fConst9 = (2.0 * fConst0); - fConst10 = (0.5 / fConst0); + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + fConst1 = 2.0 / fConst0; + fConst2 = flt_bpf12_faustpower2_f(1.0 / fConst0); + fConst3 = 2.0 * fConst2; + fConst4 = 4.0 * flt_bpf12_faustpower2_f(fConst0); + fConst5 = 3.141592653589793 / fConst0; + fConst6 = 44.1 / fConst0; + fConst7 = 1.0 - fConst6; + fConst8 = 0.49 * fConst0; + fConst9 = 2.0 * fConst0; + fConst10 = 0.5 / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0); + fVslider0 = FAUSTFLOAT(1e+03); fVslider1 = FAUSTFLOAT(2.0); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec0[l2] = 0.0; } } @@ -686,28 +770,28 @@ class flt_bpf12 : public flt_bpf12_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.bpf12"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0), FAUSTFLOAT(20.0), FAUSTFLOAT(20000.0), FAUSTFLOAT(0.10000000000000001)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(2.0), FAUSTFLOAT(0.01), FAUSTFLOAT(100.0), FAUSTFLOAT(0.10000000000000001)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03), FAUSTFLOAT(2e+01), FAUSTFLOAT(2e+04), FAUSTFLOAT(0.1)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(2.0), FAUSTFLOAT(0.01), FAUSTFLOAT(1e+02), FAUSTFLOAT(0.1)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - double fSlow0 = (fConst6 * double(fVslider0)); - double fSlow1 = (fConst6 * double(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst7 * fRec1[1])); - fRec2[0] = (fSlow1 + (fConst7 * fRec2[1])); - double fTemp0 = (0.5 / fRec2[0]); - double fTemp1 = std::tan((fConst5 * std::min((fRec1[0] * (fTemp0 + 1.0)), fConst8))); - double fTemp2 = flt_bpf12_faustpower2_f(std::sqrt((fConst4 * (std::tan((fConst5 * std::max((fRec1[0] * (1.0 - fTemp0)), 20.0))) * fTemp1)))); - double fTemp3 = (fConst2 * fTemp2); - double fTemp4 = ((fConst9 * fTemp1) - (fConst10 * (fTemp2 / fTemp1))); - double fTemp5 = (fConst1 * fTemp4); - double fTemp6 = ((fTemp3 + fTemp5) + 4.0); - fRec0[0] = (double(input0[i0]) - (((fRec0[1] * ((fConst3 * fTemp2) + -8.0)) + (fRec0[2] * (fTemp3 + (4.0 - fTemp5)))) / fTemp6)); - output0[i0] = FAUSTFLOAT(((fConst1 * ((fRec0[0] * fTemp4) / fTemp6)) + (fRec0[2] * (0.0 - (fConst1 * (fTemp4 / fTemp6)))))); + double fSlow0 = fConst6 * double(fVslider0); + double fSlow1 = fConst6 * double(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst7 * fRec1[1]; + fRec2[0] = fSlow1 + fConst7 * fRec2[1]; + double fTemp0 = 0.5 / fRec2[0]; + double fTemp1 = std::tan(fConst5 * std::min(fRec1[0] * (fTemp0 + 1.0), fConst8)); + double fTemp2 = flt_bpf12_faustpower2_f(std::sqrt(fConst4 * std::tan(fConst5 * std::max(fRec1[0] * (1.0 - fTemp0), 2e+01)) * fTemp1)); + double fTemp3 = fConst2 * fTemp2; + double fTemp4 = fConst9 * fTemp1 - fConst10 * (fTemp2 / fTemp1); + double fTemp5 = fConst1 * fTemp4; + double fTemp6 = fTemp3 + fTemp5 + 4.0; + fRec0[0] = double(input0[i0]) - (fRec0[1] * (fConst3 * fTemp2 + -8.0) + fRec0[2] * (fTemp3 + (4.0 - fTemp5))) / fTemp6; + output0[i0] = FAUSTFLOAT(fConst1 * (fRec0[0] * fTemp4 / fTemp6) + fRec0[2] * (0.0 - fConst1 * (fTemp4 / fTemp6))); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; diff --git a/ceammc/ext/src/flt/flt_bpf24.h b/ceammc/ext/src/flt/flt_bpf24.h index c3fe026783..756910de18 100644 --- a/ceammc/ext/src/flt/flt_bpf24.h +++ b/ceammc/ext/src/flt/flt_bpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.bpf24" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_bpf24 -scn flt_bpf24_dsp -es 1 -mcd 16 -double -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_bpf24_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_bpf24_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_bpf24_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_bpf24_dsp { +class FAUST_API flt_bpf24_dsp { public: @@ -162,7 +247,7 @@ class flt_bpf24_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_bpf24_dsp { +class FAUST_API decorator_dsp : public flt_bpf24_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_bpf24_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_bpf24_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_bpf24_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,16 +627,6 @@ struct flt_bpf24 : public flt_bpf24_dsp { #include #include -static double flt_bpf24_faustpower2_f(double value) { - return (value * value); -} -static double flt_bpf24_faustpower3_f(double value) { - return ((value * value) * value); -} -static double flt_bpf24_faustpower4_f(double value) { - return (((value * value) * value) * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_bpf24 #endif @@ -568,29 +636,46 @@ static double flt_bpf24_faustpower4_f(double value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_bpf24_faustpower2_f(double value) { + return value * value; +} +static double flt_bpf24_faustpower4_f(double value) { + return value * value * value * value; +} +static double flt_bpf24_faustpower3_f(double value) { + return value * value * value; +} + class flt_bpf24 : public flt_bpf24_dsp { private: int fSampleRate; - double fConst1; double fConst2; double fConst3; double fConst4; double fConst5; double fConst6; - FAUSTFLOAT fVslider0; double fConst7; + FAUSTFLOAT fVslider0; + double fConst8; double fRec1[2]; FAUSTFLOAT fVslider1; double fRec2[2]; - double fConst8; double fConst9; double fConst10; double fConst11; - double fConst12; double fConst13; double fConst14; + double fConst15; + double fConst16; + double fConst17; double fRec0[5]; public: @@ -598,7 +683,7 @@ class flt_bpf24 : public flt_bpf24_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_bpf24 -scn flt_bpf24_dsp -es 1 -mcd 16 -double -ftz 0"); m->declare("filename", "flt_bpf24.dsp"); m->declare("filters.lib/bandpass0_bandstop1:author", "Julius O. Smith III"); m->declare("filters.lib/bandpass0_bandstop1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -627,7 +712,7 @@ class flt_bpf24 : public flt_bpf24_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -642,36 +727,39 @@ class flt_bpf24 : public flt_bpf24_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - double fConst0 = std::min(192000.0, std::max(1.0, double(fSampleRate))); - fConst1 = (1.0 / fConst0); + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + double fConst1 = 1.0 / fConst0; fConst2 = flt_bpf24_faustpower2_f(fConst1); - fConst3 = flt_bpf24_faustpower3_f(fConst1); - fConst4 = (4.0 * flt_bpf24_faustpower2_f(fConst0)); - fConst5 = (3.1415926535897931 / fConst0); - fConst6 = (44.100000000000001 / fConst0); - fConst7 = (1.0 - fConst6); - fConst8 = (0.499 * fConst0); - fConst9 = (2.0 * fConst0); - fConst10 = (0.5 / fConst0); - fConst11 = (4.0 * fConst1); - fConst12 = (22.627416997969519 / fConst0); - fConst13 = (6.0 * fConst2); - fConst14 = (11.313708498984759 / fConst0); + fConst3 = flt_bpf24_faustpower4_f(fConst1); + fConst4 = 4.0 * fConst3; + fConst5 = 4.0 * flt_bpf24_faustpower2_f(fConst0); + fConst6 = 3.141592653589793 / fConst0; + fConst7 = 44.1 / fConst0; + fConst8 = 1.0 - fConst7; + fConst9 = 0.499 * fConst0; + fConst10 = 2.0 * fConst0; + fConst11 = 0.5 / fConst0; + double fConst12 = flt_bpf24_faustpower3_f(fConst1); + fConst13 = 5.65685424949238 * fConst12; + fConst14 = 22.62741699796952 / fConst0; + fConst15 = 6.0 * fConst3; + fConst16 = 11.31370849898476 / fConst0; + fConst17 = 2.82842712474619 * fConst12; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0); + fVslider0 = FAUSTFLOAT(1e+03); fVslider1 = FAUSTFLOAT(2.0); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0; } - for (int l2 = 0; (l2 < 5); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 5; l2 = l2 + 1) { fRec0[l2] = 0.0; } } @@ -697,40 +785,39 @@ class flt_bpf24 : public flt_bpf24_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.bpf24"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0), FAUSTFLOAT(20.0), FAUSTFLOAT(20000.0), FAUSTFLOAT(0.10000000000000001)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(2.0), FAUSTFLOAT(0.01), FAUSTFLOAT(100.0), FAUSTFLOAT(0.10000000000000001)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03), FAUSTFLOAT(2e+01), FAUSTFLOAT(2e+04), FAUSTFLOAT(0.1)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(2.0), FAUSTFLOAT(0.01), FAUSTFLOAT(1e+02), FAUSTFLOAT(0.1)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - double fSlow0 = (fConst6 * double(fVslider0)); - double fSlow1 = (fConst6 * double(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst7 * fRec1[1])); - fRec2[0] = (fSlow1 + (fConst7 * fRec2[1])); - double fTemp0 = (0.5 / fRec2[0]); - double fTemp1 = std::tan((fConst5 * std::min((fRec1[0] * (fTemp0 + 1.0)), fConst8))); - double fTemp2 = std::sqrt((fConst4 * (std::tan((fConst5 * std::max((fRec1[0] * (1.0 - fTemp0)), 20.0))) * fTemp1))); - double fTemp3 = flt_bpf24_faustpower2_f(fTemp2); - double fTemp4 = ((fConst9 * fTemp1) - (fConst10 * (fTemp3 / fTemp1))); - double fTemp5 = (5.6568542494923797 * fTemp4); - double fTemp6 = (fConst11 * fTemp3); - double fTemp7 = (fConst12 * fTemp4); - double fTemp8 = flt_bpf24_faustpower2_f(fTemp4); - double fTemp9 = (8.0 * fTemp8); - double fTemp10 = ((4.0 * fTemp8) + (8.0 * fTemp3)); - double fTemp11 = (fConst1 * fTemp3); - double fTemp12 = (2.8284271247461898 * fTemp4); - double fTemp13 = (fConst14 * fTemp4); - double fTemp14 = (((fConst2 * (fTemp10 + (fConst1 * (fTemp3 * (fTemp11 + fTemp12))))) + fTemp13) + 16.0); - fRec0[0] = (double(input0[i0]) - (((((fRec0[1] * ((fConst3 * (fTemp3 * (fTemp5 + fTemp6))) + (-64.0 - fTemp7))) + (fRec0[2] * ((fConst2 * ((0.0 - (fTemp9 + (16.0 * fTemp3))) + (fConst13 * flt_bpf24_faustpower4_f(fTemp2)))) + 96.0))) + (fRec0[3] * ((fTemp7 + (fConst3 * (fTemp3 * (fTemp6 - fTemp5)))) + -64.0))) + (fRec0[4] * ((fConst2 * (fTemp10 + (fConst1 * (fTemp3 * (fTemp11 - fTemp12))))) + (16.0 - fTemp13)))) / fTemp14)); - output0[i0] = FAUSTFLOAT((fConst2 * ((((fRec0[2] * (0.0 - fTemp9)) + (4.0 * (fRec0[0] * fTemp8))) + (4.0 * (fTemp8 * fRec0[4]))) / fTemp14))); + double fSlow0 = fConst7 * double(fVslider0); + double fSlow1 = fConst7 * double(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst8 * fRec1[1]; + fRec2[0] = fSlow1 + fConst8 * fRec2[1]; + double fTemp0 = 0.5 / fRec2[0]; + double fTemp1 = std::tan(fConst6 * std::min(fRec1[0] * (fTemp0 + 1.0), fConst9)); + double fTemp2 = std::sqrt(fConst5 * std::tan(fConst6 * std::max(fRec1[0] * (1.0 - fTemp0), 2e+01)) * fTemp1); + double fTemp3 = flt_bpf24_faustpower4_f(fTemp2); + double fTemp4 = fConst4 * fTemp3; + double fTemp5 = flt_bpf24_faustpower2_f(fTemp2); + double fTemp6 = fConst10 * fTemp1 - fConst11 * (fTemp5 / fTemp1); + double fTemp7 = fConst13 * fTemp5; + double fTemp8 = flt_bpf24_faustpower2_f(fTemp6); + double fTemp9 = 8.0 * fTemp8; + double fTemp10 = fConst3 * fTemp3; + double fTemp11 = fConst2 * (4.0 * fTemp8 + 8.0 * fTemp5); + double fTemp12 = fConst16 + fConst17 * fTemp5; + double fTemp13 = fTemp10 + fTemp11 + fTemp6 * fTemp12 + 16.0; + fRec0[0] = double(input0[i0]) - (fRec0[1] * (fTemp4 + fTemp6 * (fTemp7 - fConst14) + -64.0) + fRec0[2] * (fConst15 * fTemp3 + fConst2 * (0.0 - (fTemp9 + 16.0 * fTemp5)) + 96.0) + fRec0[3] * (fTemp4 + fTemp6 * (fConst14 - fTemp7) + -64.0) + fRec0[4] * (fTemp10 + fTemp11 + fTemp6 * (0.0 - fTemp12) + 16.0)) / fTemp13; + output0[i0] = FAUSTFLOAT(fConst2 * ((fRec0[2] * (0.0 - fTemp9) + 4.0 * fRec0[0] * fTemp8 + 4.0 * fTemp8 * fRec0[4]) / fTemp13)); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; - for (int j0 = 4; (j0 > 0); j0 = (j0 - 1)) { - fRec0[j0] = fRec0[(j0 - 1)]; + for (int j0 = 4; j0 > 0; j0 = j0 - 1) { + fRec0[j0] = fRec0[j0 - 1]; } } } diff --git a/ceammc/ext/src/flt/flt_c_bpf.h b/ceammc/ext/src/flt/flt_c_bpf.h index 911b8c4a87..723047d426 100644 --- a/ceammc/ext/src/flt/flt_c_bpf.h +++ b/ceammc/ext/src/flt/flt_c_bpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_bpf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_bpf -scn flt_c_bpf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_bpf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_bpf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_bpf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_bpf_dsp { +class FAUST_API flt_c_bpf_dsp { public: @@ -162,7 +247,7 @@ class flt_c_bpf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_bpf_dsp { +class FAUST_API decorator_dsp : public flt_c_bpf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_bpf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_bpf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_bpf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_bpf : public flt_c_bpf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_bpf #endif @@ -559,6 +636,13 @@ struct flt_c_bpf : public flt_c_bpf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_bpf : public flt_c_bpf_dsp { private: @@ -577,7 +661,7 @@ class flt_c_bpf : public flt_c_bpf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_bpf -scn flt_c_bpf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_bpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -593,7 +677,7 @@ class flt_c_bpf : public flt_c_bpf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -609,22 +693,22 @@ class flt_c_bpf : public flt_c_bpf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); - fVslider1 = FAUSTFLOAT(0.10000000000000001f); + fVslider0 = FAUSTFLOAT(1e+03f); + fVslider1 = FAUSTFLOAT(0.1f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } } @@ -650,34 +734,34 @@ class flt_c_bpf : public flt_c_bpf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_bpf"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(0.100000001f), FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(0.1f), FAUSTFLOAT(0.01f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = (fConst1 * std::max(0.0f, fRec0[0])); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = fConst1 * std::max(0.0f, fRec0[0]); float fTemp1 = std::sin(fTemp0); - fRec1[0] = (fSlow1 + (fConst3 * fRec1[1])); - float fTemp2 = std::max(0.00100000005f, fRec1[0]); - float fTemp3 = (0.5f * (fTemp1 / fTemp2)); - float fTemp4 = (fTemp3 + 1.0f); - float fTemp5 = (0.5f * (fTemp1 / (fTemp2 * fTemp4))); + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp2 = std::max(0.001f, fRec1[0]); + float fTemp3 = 0.5f * (fTemp1 / fTemp2); + float fTemp4 = fTemp3 + 1.0f; + float fTemp5 = 0.5f * (fTemp1 / (fTemp2 * fTemp4)); output0[i0] = FAUSTFLOAT(fTemp5); output1[i0] = FAUSTFLOAT(0.0f); - output2[i0] = FAUSTFLOAT((0.0f - fTemp5)); - output3[i0] = FAUSTFLOAT(((0.0f - (2.0f * std::cos(fTemp0))) / fTemp4)); - output4[i0] = FAUSTFLOAT(((1.0f - fTemp3) / fTemp4)); + output2[i0] = FAUSTFLOAT(0.0f - fTemp5); + output3[i0] = FAUSTFLOAT((0.0f - 2.0f * std::cos(fTemp0)) / fTemp4); + output4[i0] = FAUSTFLOAT((1.0f - fTemp3) / fTemp4); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/flt/flt_c_highshelf.h b/ceammc/ext/src/flt/flt_c_highshelf.h index a4c3b66f46..9c5827a414 100644 --- a/ceammc/ext/src/flt/flt_c_highshelf.h +++ b/ceammc/ext/src/flt/flt_c_highshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_highshelf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_highshelf -scn flt_c_highshelf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_highshelf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_highshelf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_highshelf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_highshelf_dsp { +class FAUST_API flt_c_highshelf_dsp { public: @@ -162,7 +247,7 @@ class flt_c_highshelf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_highshelf_dsp { +class FAUST_API decorator_dsp : public flt_c_highshelf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_highshelf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_highshelf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_highshelf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_highshelf : public flt_c_highshelf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_highshelf #endif @@ -559,6 +636,13 @@ struct flt_c_highshelf : public flt_c_highshelf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_highshelf : public flt_c_highshelf_dsp { private: @@ -579,7 +663,7 @@ class flt_c_highshelf : public flt_c_highshelf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_highshelf -scn flt_c_highshelf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_highshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -595,7 +679,7 @@ class flt_c_highshelf : public flt_c_highshelf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -611,26 +695,26 @@ class flt_c_highshelf : public flt_c_highshelf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); - fVslider1 = FAUSTFLOAT(10000.0f); + fVslider1 = FAUSTFLOAT(1e+04f); fHslider0 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } } @@ -656,40 +740,40 @@ class flt_c_highshelf : public flt_c_highshelf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_highshelf"); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(10000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+04f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addHorizontalSlider("q", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); + ui_interface->addHorizontalSlider("q", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst1 * float(fVslider0)); - float fSlow1 = (fConst1 * float(fVslider1)); - float fSlow2 = (fConst1 * float(fHslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst2 * fRec0[1])); - float fTemp0 = std::pow(10.0f, (0.0250000004f * fRec0[0])); - fRec1[0] = (fSlow1 + (fConst2 * fRec1[1])); - float fTemp1 = (fConst3 * std::max(0.0f, fRec1[0])); + float fSlow0 = fConst1 * float(fVslider0); + float fSlow1 = fConst1 * float(fVslider1); + float fSlow2 = fConst1 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; + float fTemp0 = std::pow(1e+01f, 0.025f * fRec0[0]); + fRec1[0] = fSlow1 + fConst2 * fRec1[1]; + float fTemp1 = fConst3 * std::max(0.0f, fRec1[0]); float fTemp2 = std::cos(fTemp1); - float fTemp3 = ((fTemp0 + -1.0f) * fTemp2); - float fTemp4 = (fTemp0 + fTemp3); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - float fTemp5 = ((std::sqrt(fTemp0) * std::sin(fTemp1)) / std::max(0.00100000005f, fRec2[0])); - float fTemp6 = ((fTemp0 + fTemp5) + (1.0f - fTemp3)); - output0[i0] = FAUSTFLOAT(((fTemp0 * ((fTemp4 + fTemp5) + 1.0f)) / fTemp6)); - float fTemp7 = ((fTemp0 + 1.0f) * fTemp2); - output1[i0] = FAUSTFLOAT((((0.0f - (2.0f * fTemp0)) * ((fTemp0 + fTemp7) + -1.0f)) / fTemp6)); - output2[i0] = FAUSTFLOAT(((fTemp0 * (fTemp4 + (1.0f - fTemp5))) / fTemp6)); - output3[i0] = FAUSTFLOAT((2.0f * ((fTemp0 + (-1.0f - fTemp7)) / fTemp6))); - output4[i0] = FAUSTFLOAT(((fTemp0 + (1.0f - (fTemp3 + fTemp5))) / fTemp6)); + float fTemp3 = (fTemp0 + -1.0f) * fTemp2; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + float fTemp4 = std::sqrt(fTemp0) * std::sin(fTemp1) / std::max(0.001f, fRec2[0]); + float fTemp5 = fTemp0 + fTemp4; + float fTemp6 = fTemp5 + (1.0f - fTemp3); + output0[i0] = FAUSTFLOAT(fTemp0 * (fTemp3 + fTemp5 + 1.0f) / fTemp6); + float fTemp7 = (fTemp0 + 1.0f) * fTemp2; + output1[i0] = FAUSTFLOAT((0.0f - 2.0f * fTemp0) * (fTemp0 + fTemp7 + -1.0f) / fTemp6); + output2[i0] = FAUSTFLOAT(fTemp0 * (fTemp0 + fTemp3 + (1.0f - fTemp4)) / fTemp6); + output3[i0] = FAUSTFLOAT(2.0f * ((fTemp0 + (-1.0f - fTemp7)) / fTemp6)); + output4[i0] = FAUSTFLOAT((fTemp0 + (1.0f - (fTemp3 + fTemp4))) / fTemp6); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/flt/flt_c_hpf.h b/ceammc/ext/src/flt/flt_c_hpf.h index 8cdb71315b..f0a6989ca9 100644 --- a/ceammc/ext/src/flt/flt_c_hpf.h +++ b/ceammc/ext/src/flt/flt_c_hpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_hpf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_hpf -scn flt_c_hpf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_hpf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_hpf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_hpf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_hpf_dsp { +class FAUST_API flt_c_hpf_dsp { public: @@ -162,7 +247,7 @@ class flt_c_hpf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_hpf_dsp { +class FAUST_API decorator_dsp : public flt_c_hpf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_hpf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_hpf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_hpf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_hpf : public flt_c_hpf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_hpf #endif @@ -559,6 +636,13 @@ struct flt_c_hpf : public flt_c_hpf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_hpf : public flt_c_hpf_dsp { private: @@ -577,7 +661,7 @@ class flt_c_hpf : public flt_c_hpf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_hpf -scn flt_c_hpf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_hpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -593,7 +677,7 @@ class flt_c_hpf : public flt_c_hpf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -609,22 +693,22 @@ class flt_c_hpf : public flt_c_hpf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); fVslider1 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } } @@ -650,33 +734,33 @@ class flt_c_hpf : public flt_c_hpf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_hpf"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = (fConst1 * std::max(0.0f, fRec0[0])); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = fConst1 * std::max(0.0f, fRec0[0]); float fTemp1 = std::cos(fTemp0); - fRec1[0] = (fSlow1 + (fConst3 * fRec1[1])); - float fTemp2 = (0.5f * (std::sin(fTemp0) / std::max(0.00100000005f, fRec1[0]))); - float fTemp3 = (fTemp2 + 1.0f); - float fTemp4 = (0.5f * ((fTemp1 + 1.0f) / fTemp3)); + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp2 = 0.5f * (std::sin(fTemp0) / std::max(0.001f, fRec1[0])); + float fTemp3 = fTemp2 + 1.0f; + float fTemp4 = 0.5f * ((fTemp1 + 1.0f) / fTemp3); output0[i0] = FAUSTFLOAT(fTemp4); - output1[i0] = FAUSTFLOAT(((-1.0f - fTemp1) / fTemp3)); + output1[i0] = FAUSTFLOAT((-1.0f - fTemp1) / fTemp3); output2[i0] = FAUSTFLOAT(fTemp4); - output3[i0] = FAUSTFLOAT(((0.0f - (2.0f * fTemp1)) / fTemp3)); - output4[i0] = FAUSTFLOAT(((1.0f - fTemp2) / fTemp3)); + output3[i0] = FAUSTFLOAT((0.0f - 2.0f * fTemp1) / fTemp3); + output4[i0] = FAUSTFLOAT((1.0f - fTemp2) / fTemp3); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/flt/flt_c_lowshelf.h b/ceammc/ext/src/flt/flt_c_lowshelf.h index ab35a2d56a..c96cc1c43e 100644 --- a/ceammc/ext/src/flt/flt_c_lowshelf.h +++ b/ceammc/ext/src/flt/flt_c_lowshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_lowshelf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_lowshelf -scn flt_c_lowshelf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_lowshelf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_lowshelf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_lowshelf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_lowshelf_dsp { +class FAUST_API flt_c_lowshelf_dsp { public: @@ -162,7 +247,7 @@ class flt_c_lowshelf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_lowshelf_dsp { +class FAUST_API decorator_dsp : public flt_c_lowshelf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_lowshelf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_lowshelf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_lowshelf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_lowshelf : public flt_c_lowshelf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_lowshelf #endif @@ -559,6 +636,13 @@ struct flt_c_lowshelf : public flt_c_lowshelf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_lowshelf : public flt_c_lowshelf_dsp { private: @@ -579,7 +663,7 @@ class flt_c_lowshelf : public flt_c_lowshelf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_lowshelf -scn flt_c_lowshelf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_lowshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -595,7 +679,7 @@ class flt_c_lowshelf : public flt_c_lowshelf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -611,26 +695,26 @@ class flt_c_lowshelf : public flt_c_lowshelf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); - fVslider1 = FAUSTFLOAT(1000.0f); + fVslider1 = FAUSTFLOAT(1e+03f); fHslider0 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } } @@ -656,40 +740,40 @@ class flt_c_lowshelf : public flt_c_lowshelf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_lowshelf"); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addHorizontalSlider("q", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); + ui_interface->addHorizontalSlider("q", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst1 * float(fVslider0)); - float fSlow1 = (fConst1 * float(fVslider1)); - float fSlow2 = (fConst1 * float(fHslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst2 * fRec0[1])); - float fTemp0 = std::pow(10.0f, (0.0250000004f * fRec0[0])); - fRec1[0] = (fSlow1 + (fConst2 * fRec1[1])); - float fTemp1 = (fConst3 * std::max(0.0f, fRec1[0])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - float fTemp2 = ((std::sqrt(fTemp0) * std::sin(fTemp1)) / std::max(0.00100000005f, fRec2[0])); + float fSlow0 = fConst1 * float(fVslider0); + float fSlow1 = fConst1 * float(fVslider1); + float fSlow2 = fConst1 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; + float fTemp0 = std::pow(1e+01f, 0.025f * fRec0[0]); + fRec1[0] = fSlow1 + fConst2 * fRec1[1]; + float fTemp1 = fConst3 * std::max(0.0f, fRec1[0]); + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + float fTemp2 = std::sqrt(fTemp0) * std::sin(fTemp1) / std::max(0.001f, fRec2[0]); float fTemp3 = std::cos(fTemp1); - float fTemp4 = ((fTemp0 + -1.0f) * fTemp3); - float fTemp5 = (fTemp0 + fTemp4); - float fTemp6 = ((fTemp2 + fTemp5) + 1.0f); - output0[i0] = FAUSTFLOAT(((fTemp0 * ((fTemp0 + fTemp2) + (1.0f - fTemp4))) / fTemp6)); - float fTemp7 = ((fTemp0 + 1.0f) * fTemp3); - output1[i0] = FAUSTFLOAT((2.0f * ((fTemp0 * (fTemp0 + (-1.0f - fTemp7))) / fTemp6))); - output2[i0] = FAUSTFLOAT(((fTemp0 * (fTemp0 + (1.0f - (fTemp4 + fTemp2)))) / fTemp6)); - output3[i0] = FAUSTFLOAT(((0.0f - (2.0f * ((fTemp0 + fTemp7) + -1.0f))) / fTemp6)); - output4[i0] = FAUSTFLOAT(((fTemp5 + (1.0f - fTemp2)) / fTemp6)); + float fTemp4 = (fTemp0 + -1.0f) * fTemp3; + float fTemp5 = fTemp0 + fTemp4; + float fTemp6 = fTemp2 + fTemp5 + 1.0f; + output0[i0] = FAUSTFLOAT(fTemp0 * (fTemp0 + fTemp2 + (1.0f - fTemp4)) / fTemp6); + float fTemp7 = (fTemp0 + 1.0f) * fTemp3; + output1[i0] = FAUSTFLOAT(2.0f * (fTemp0 * (fTemp0 + (-1.0f - fTemp7)) / fTemp6)); + output2[i0] = FAUSTFLOAT(fTemp0 * (fTemp0 + (1.0f - (fTemp4 + fTemp2))) / fTemp6); + output3[i0] = FAUSTFLOAT((0.0f - 2.0f * (fTemp0 + fTemp7 + -1.0f)) / fTemp6); + output4[i0] = FAUSTFLOAT((fTemp5 + (1.0f - fTemp2)) / fTemp6); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/flt/flt_c_lpf.h b/ceammc/ext/src/flt/flt_c_lpf.h index f63b4caa98..38356eb5c7 100644 --- a/ceammc/ext/src/flt/flt_c_lpf.h +++ b/ceammc/ext/src/flt/flt_c_lpf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_lpf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_lpf -scn flt_c_lpf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_lpf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_lpf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_lpf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_lpf_dsp { +class FAUST_API flt_c_lpf_dsp { public: @@ -162,7 +247,7 @@ class flt_c_lpf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_lpf_dsp { +class FAUST_API decorator_dsp : public flt_c_lpf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_lpf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_lpf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_lpf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_lpf : public flt_c_lpf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_lpf #endif @@ -559,6 +636,13 @@ struct flt_c_lpf : public flt_c_lpf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_lpf : public flt_c_lpf_dsp { private: @@ -577,7 +661,7 @@ class flt_c_lpf : public flt_c_lpf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_lpf -scn flt_c_lpf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_lpf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -593,7 +677,7 @@ class flt_c_lpf : public flt_c_lpf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -609,22 +693,22 @@ class flt_c_lpf : public flt_c_lpf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); fVslider1 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } } @@ -650,34 +734,34 @@ class flt_c_lpf : public flt_c_lpf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_lpf"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = (fConst1 * std::max(0.0f, fRec0[0])); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = fConst1 * std::max(0.0f, fRec0[0]); float fTemp1 = std::cos(fTemp0); - fRec1[0] = (fSlow1 + (fConst3 * fRec1[1])); - float fTemp2 = (0.5f * (std::sin(fTemp0) / std::max(0.00100000005f, fRec1[0]))); - float fTemp3 = (fTemp2 + 1.0f); - float fTemp4 = ((1.0f - fTemp1) / fTemp3); - float fTemp5 = (0.5f * fTemp4); + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp2 = 0.5f * (std::sin(fTemp0) / std::max(0.001f, fRec1[0])); + float fTemp3 = fTemp2 + 1.0f; + float fTemp4 = (1.0f - fTemp1) / fTemp3; + float fTemp5 = 0.5f * fTemp4; output0[i0] = FAUSTFLOAT(fTemp5); output1[i0] = FAUSTFLOAT(fTemp4); output2[i0] = FAUSTFLOAT(fTemp5); - output3[i0] = FAUSTFLOAT(((0.0f - (2.0f * fTemp1)) / fTemp3)); - output4[i0] = FAUSTFLOAT(((1.0f - fTemp2) / fTemp3)); + output3[i0] = FAUSTFLOAT((0.0f - 2.0f * fTemp1) / fTemp3); + output4[i0] = FAUSTFLOAT((1.0f - fTemp2) / fTemp3); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/flt/flt_c_notch.h b/ceammc/ext/src/flt/flt_c_notch.h index c10d68ba0b..ac5713961f 100644 --- a/ceammc/ext/src/flt/flt_c_notch.h +++ b/ceammc/ext/src/flt/flt_c_notch.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_notch" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_notch -scn flt_c_notch_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_notch_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_notch_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_notch_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_notch_dsp { +class FAUST_API flt_c_notch_dsp { public: @@ -162,7 +247,7 @@ class flt_c_notch_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_notch_dsp { +class FAUST_API decorator_dsp : public flt_c_notch_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_notch_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_notch_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_notch_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_notch : public flt_c_notch_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_notch #endif @@ -559,6 +636,13 @@ struct flt_c_notch : public flt_c_notch_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_notch : public flt_c_notch_dsp { private: @@ -577,7 +661,7 @@ class flt_c_notch : public flt_c_notch_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_notch -scn flt_c_notch_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_notch.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -593,7 +677,7 @@ class flt_c_notch : public flt_c_notch_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -609,22 +693,22 @@ class flt_c_notch : public flt_c_notch_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); fVslider1 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } } @@ -650,33 +734,33 @@ class flt_c_notch : public flt_c_notch_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_notch"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = (fConst1 * std::max(0.0f, fRec0[0])); - fRec1[0] = (fSlow1 + (fConst3 * fRec1[1])); - float fTemp1 = (0.5f * (std::sin(fTemp0) / std::max(0.00100000005f, fRec1[0]))); - float fTemp2 = (fTemp1 + 1.0f); - float fTemp3 = (1.0f / fTemp2); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = fConst1 * std::max(0.0f, fRec0[0]); + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp1 = 0.5f * (std::sin(fTemp0) / std::max(0.001f, fRec1[0])); + float fTemp2 = fTemp1 + 1.0f; + float fTemp3 = 1.0f / fTemp2; output0[i0] = FAUSTFLOAT(fTemp3); - float fTemp4 = ((0.0f - (2.0f * std::cos(fTemp0))) / fTemp2); + float fTemp4 = (0.0f - 2.0f * std::cos(fTemp0)) / fTemp2; output1[i0] = FAUSTFLOAT(fTemp4); output2[i0] = FAUSTFLOAT(fTemp3); output3[i0] = FAUSTFLOAT(fTemp4); - output4[i0] = FAUSTFLOAT(((1.0f - fTemp1) / fTemp2)); + output4[i0] = FAUSTFLOAT((1.0f - fTemp1) / fTemp2); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/flt/flt_c_peak.h b/ceammc/ext/src/flt/flt_c_peak.h index 97bf443390..e071da9015 100644 --- a/ceammc/ext/src/flt/flt_c_peak.h +++ b/ceammc/ext/src/flt/flt_c_peak.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt_c_peak" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_peak -scn flt_c_peak_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_c_peak_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_c_peak_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_c_peak_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_c_peak_dsp { +class FAUST_API flt_c_peak_dsp { public: @@ -162,7 +247,7 @@ class flt_c_peak_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_c_peak_dsp { +class FAUST_API decorator_dsp : public flt_c_peak_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_c_peak_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_c_peak_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_c_peak_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_c_peak : public flt_c_peak_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_c_peak #endif @@ -559,6 +636,13 @@ struct flt_c_peak : public flt_c_peak_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_c_peak : public flt_c_peak_dsp { private: @@ -579,7 +663,7 @@ class flt_c_peak : public flt_c_peak_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_c_peak -scn flt_c_peak_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_c_peak.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -595,7 +679,7 @@ class flt_c_peak : public flt_c_peak_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("ui", "disable"); } @@ -611,26 +695,26 @@ class flt_c_peak : public flt_c_peak_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); fVslider1 = FAUSTFLOAT(0.0f); fVslider2 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } } @@ -656,40 +740,40 @@ class flt_c_peak : public flt_c_peak_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt_c_peak"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - float fSlow2 = (fConst2 * float(fVslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = (fConst1 * std::max(0.0f, fRec0[0])); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + float fSlow2 = fConst2 * float(fVslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = fConst1 * std::max(0.0f, fRec0[0]); float fTemp1 = std::sin(fTemp0); - fRec1[0] = (fSlow1 + (fConst3 * fRec1[1])); - float fTemp2 = std::pow(10.0f, (0.0250000004f * fRec1[0])); - fRec2[0] = (fSlow2 + (fConst3 * fRec2[1])); - float fTemp3 = std::max(0.00100000005f, fRec2[0]); - float fTemp4 = (0.5f * ((fTemp1 * fTemp2) / fTemp3)); - float fTemp5 = (0.5f * (fTemp1 / (fTemp3 * fTemp2))); - float fTemp6 = (fTemp5 + 1.0f); - output0[i0] = FAUSTFLOAT(((fTemp4 + 1.0f) / fTemp6)); - float fTemp7 = ((0.0f - (2.0f * std::cos(fTemp0))) / fTemp6); + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp2 = std::pow(1e+01f, 0.025f * fRec1[0]); + fRec2[0] = fSlow2 + fConst3 * fRec2[1]; + float fTemp3 = std::max(0.001f, fRec2[0]); + float fTemp4 = 0.5f * (fTemp1 * fTemp2 / fTemp3); + float fTemp5 = 0.5f * (fTemp1 / (fTemp3 * fTemp2)); + float fTemp6 = fTemp5 + 1.0f; + output0[i0] = FAUSTFLOAT((fTemp4 + 1.0f) / fTemp6); + float fTemp7 = (0.0f - 2.0f * std::cos(fTemp0)) / fTemp6; output1[i0] = FAUSTFLOAT(fTemp7); - output2[i0] = FAUSTFLOAT(((1.0f - fTemp4) / fTemp6)); + output2[i0] = FAUSTFLOAT((1.0f - fTemp4) / fTemp6); output3[i0] = FAUSTFLOAT(fTemp7); - output4[i0] = FAUSTFLOAT(((1.0f - fTemp5) / fTemp6)); + output4[i0] = FAUSTFLOAT((1.0f - fTemp5) / fTemp6); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/flt/flt_dcblock.h b/ceammc/ext/src/flt/flt_dcblock.h index 11cb03a588..b629c700b8 100644 --- a/ceammc/ext/src/flt/flt_dcblock.h +++ b/ceammc/ext/src/flt/flt_dcblock.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "flt_dcblock" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "flt.dcblock" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_dcblock -scn flt_dcblock_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_dcblock_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_dcblock_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_dcblock_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_dcblock_dsp { +class FAUST_API flt_dcblock_dsp { public: @@ -162,7 +247,7 @@ class flt_dcblock_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_dcblock_dsp { +class FAUST_API decorator_dsp : public flt_dcblock_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_dcblock_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_dcblock_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_dcblock_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -548,7 +626,6 @@ struct flt_dcblock : public flt_dcblock_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_dcblock #endif @@ -558,6 +635,13 @@ struct flt_dcblock : public flt_dcblock_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_dcblock : public flt_dcblock_dsp { private: @@ -569,7 +653,7 @@ class flt_dcblock : public flt_dcblock_dsp { public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_dcblock -scn flt_dcblock_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_dcblock.dsp"); m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -583,7 +667,7 @@ class flt_dcblock : public flt_dcblock_dsp { m->declare("filters.lib/zero:author", "Julius O. Smith III"); m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); - m->declare("name", "flt_dcblock"); + m->declare("name", "flt.dcblock"); } virtual int getNumInputs() { @@ -604,10 +688,10 @@ class flt_dcblock : public flt_dcblock_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -631,17 +715,17 @@ class flt_dcblock : public flt_dcblock_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("flt_dcblock"); + ui_interface->openVerticalBox("flt.dcblock"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); fVec0[0] = fTemp0; - fRec0[0] = ((fTemp0 + (0.995000005f * fRec0[1])) - fVec0[1]); + fRec0[0] = fTemp0 + 0.995f * fRec0[1] - fVec0[1]; output0[i0] = FAUSTFLOAT(fRec0[0]); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; diff --git a/ceammc/ext/src/flt/flt_dcblock2.h b/ceammc/ext/src/flt/flt_dcblock2.h index 3310322952..78d88d12a1 100644 --- a/ceammc/ext/src/flt/flt_dcblock2.h +++ b/ceammc/ext/src/flt/flt_dcblock2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "flt_dcblock2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "flt.dcblock2" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_dcblock2 -scn flt_dcblock2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_dcblock2_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_dcblock2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_dcblock2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_dcblock2_dsp { +class FAUST_API flt_dcblock2_dsp { public: @@ -162,7 +247,7 @@ class flt_dcblock2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_dcblock2_dsp { +class FAUST_API decorator_dsp : public flt_dcblock2_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_dcblock2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_dcblock2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_dcblock2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -548,7 +626,6 @@ struct flt_dcblock2 : public flt_dcblock2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_dcblock2 #endif @@ -558,6 +635,13 @@ struct flt_dcblock2 : public flt_dcblock2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_dcblock2 : public flt_dcblock2_dsp { private: @@ -573,7 +657,7 @@ class flt_dcblock2 : public flt_dcblock2_dsp { void metadata(Meta* m) { m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_dcblock2 -scn flt_dcblock2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_dcblock2.dsp"); m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -587,7 +671,7 @@ class flt_dcblock2 : public flt_dcblock2_dsp { m->declare("filters.lib/zero:author", "Julius O. Smith III"); m->declare("filters.lib/zero:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/zero:license", "MIT-style STK-4.3 license"); - m->declare("name", "flt_dcblock2"); + m->declare("name", "flt.dcblock2"); } virtual int getNumInputs() { @@ -608,16 +692,16 @@ class flt_dcblock2 : public flt_dcblock2_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fVec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec1[l3] = 0.0f; } } @@ -641,23 +725,23 @@ class flt_dcblock2 : public flt_dcblock2_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("flt_dcblock2"); + ui_interface->openVerticalBox("flt.dcblock2"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); fVec0[0] = fTemp0; - fRec0[0] = ((fTemp0 + (0.995000005f * fRec0[1])) - fVec0[1]); + fRec0[0] = fTemp0 + 0.995f * fRec0[1] - fVec0[1]; output0[i0] = FAUSTFLOAT(fRec0[0]); float fTemp1 = float(input1[i0]); fVec1[0] = fTemp1; - fRec1[0] = ((fTemp1 + (0.995000005f * fRec1[1])) - fVec1[1]); + fRec1[0] = fTemp1 + 0.995f * fRec1[1] - fVec1[1]; output1[i0] = FAUSTFLOAT(fRec1[0]); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; diff --git a/ceammc/ext/src/flt/flt_eq10.cpp b/ceammc/ext/src/flt/flt_eq10.cpp index 379904f702..c7bc6791ea 100644 --- a/ceammc/ext/src/flt/flt_eq10.cpp +++ b/ceammc/ext/src/flt/flt_eq10.cpp @@ -1,56 +1,46 @@ #include "flt_eq10.h" #include "ceammc_factory.h" +#include + using namespace ceammc; -; -template -constexpr std::size_t countof(T const (&)[N]) noexcept -{ - return N; -} +constexpr auto NUM_BANDS = 10; +static const std::array STR_BANDS = { + "@f31", + "@f62", + "@f125", + "@f250", + "@f500", + "@f1000", + "@f2000", + "@f4000", + "@f8000", + "@f16000", +}; class FltEq10 : public faust_flt_eq10_tilde { + std::array bands_; + public: FltEq10(const PdArgs& args) : faust_flt_eq10_tilde(args) { dsp_->instanceClear(); + + for (size_t i = 0; i < NUM_BANDS; i++) + bands_[i] = property(STR_BANDS[i]); } - void onList(const AtomList& l) override + void onList(const AtomListView& lv) override { - static t_symbol* SYM_PROP_FREQ_31 = gensym("@f31"); - static t_symbol* SYM_PROP_FREQ_62 = gensym("@f62"); - static t_symbol* SYM_PROP_FREQ_125 = gensym("@f125"); - static t_symbol* SYM_PROP_FREQ_250 = gensym("@f250"); - static t_symbol* SYM_PROP_FREQ_500 = gensym("@f500"); - static t_symbol* SYM_PROP_FREQ_1000 = gensym("@f1000"); - static t_symbol* SYM_PROP_FREQ_2000 = gensym("@f2000"); - static t_symbol* SYM_PROP_FREQ_4000 = gensym("@f4000"); - static t_symbol* SYM_PROP_FREQ_8000 = gensym("@f8000"); - static t_symbol* SYM_PROP_FREQ_16000 = gensym("@f16000"); - - static t_symbol* freq_pack[] = { - SYM_PROP_FREQ_31, - SYM_PROP_FREQ_62, - SYM_PROP_FREQ_125, - SYM_PROP_FREQ_250, - SYM_PROP_FREQ_500, - SYM_PROP_FREQ_1000, - SYM_PROP_FREQ_2000, - SYM_PROP_FREQ_4000, - SYM_PROP_FREQ_8000, - SYM_PROP_FREQ_16000 - }; - - const size_t N = std::min(l.size(), countof(freq_pack)); + const size_t N = std::min(lv.size(), bands_.size()); for (size_t i = 0; i < N; i++) { - if (!l[i].isFloat()) + if (!lv[i].isFloat()) continue; - setProperty(freq_pack[i], l.view(i, 1)); + bands_[i]->set(lv.subView(i, 1)); } } }; diff --git a/ceammc/ext/src/flt/flt_eq10.h b/ceammc/ext/src/flt/flt_eq10.h index dec9f4b51e..577f32ee68 100644 --- a/ceammc/ext/src/flt/flt_eq10.h +++ b/ceammc/ext/src/flt/flt_eq10.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq10" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq10 -scn flt_eq10_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq10_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_eq10_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_eq10_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_eq10_dsp { +class FAUST_API flt_eq10_dsp { public: @@ -162,7 +247,7 @@ class flt_eq10_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_eq10_dsp { +class FAUST_API decorator_dsp : public flt_eq10_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_eq10_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_eq10_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_eq10_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_eq10 : public flt_eq10_dsp { #include #include -static float flt_eq10_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_eq10 #endif @@ -562,6 +636,16 @@ static float flt_eq10_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_eq10_faustpower2_f(float value) { + return value * value; +} + class flt_eq10 : public flt_eq10_dsp { private: @@ -570,200 +654,200 @@ class flt_eq10 : public flt_eq10_dsp { float fConst3; float fConst5; float fConst6; - float fConst9; - float fConst11; + float fConst7; + float fConst10; float fConst12; - float fConst14; + float fConst13; float fConst15; - float fConst18; + float fConst16; float fConst19; - float fConst21; + float fConst20; float fConst22; - float fConst25; + float fConst23; float fConst26; - float fConst28; + float fConst27; float fConst29; - float fConst31; - float fConst32; + float fConst30; float fConst33; - float fConst35; + float fConst34; float fConst36; - float fVec0[2]; - float fRec18[2]; float fConst37; - float fConst39; float fConst40; - float fRec17[3]; float fConst41; - float fRec16[3]; - float fVec1[2]; - float fRec15[2]; - float fConst42; + float fConst43; float fConst44; - float fConst45; - float fRec14[3]; float fConst46; - float fRec13[3]; - float fVec2[2]; - float fRec12[2]; float fConst47; - float fConst49; + float fConst48; float fConst50; - float fRec11[3]; float fConst51; - float fRec10[3]; - float fVec3[2]; - float fRec9[2]; + float fVec0[2]; + float fRec22[2]; float fConst52; float fConst54; float fConst55; - float fRec8[3]; + float fRec21[3]; float fConst56; - float fRec7[3]; - float fVec4[2]; + float fRec20[3]; + float fVec1[2]; + float fRec19[2]; float fConst57; - float fConst58; float fConst59; - float fRec6[2]; float fConst60; + float fRec18[3]; float fConst61; - float fRec5[3]; + float fRec17[3]; + float fVec2[2]; + float fRec16[2]; float fConst62; - float fConst63; - float fRec4[3]; + float fConst64; + float fConst65; + float fRec15[3]; float fConst66; + float fRec14[3]; + float fVec3[2]; + float fRec13[2]; float fConst67; float fConst69; float fConst70; - float fRec3[3]; - float fConst73; + float fRec12[3]; + float fConst71; + float fRec11[3]; + float fVec4[2]; + float fRec10[2]; + float fConst72; float fConst74; + float fConst75; + float fRec9[3]; float fConst76; + float fRec8[3]; + float fVec5[2]; + float fRec7[2]; float fConst77; - float fRec2[3]; + float fConst79; float fConst80; + float fRec6[3]; float fConst81; + float fRec5[3]; + float fVec6[2]; + float fConst82; float fConst83; float fConst84; - float fRec1[3]; + float fRec4[2]; + float fConst85; + float fConst86; + float fRec3[3]; float fConst87; - float fConst88; + float fRec2[3]; float fConst90; float fConst91; - float fRec0[3]; - float fConst92; - FAUSTFLOAT fVslider0; float fConst93; - float fRec19[2]; float fConst94; - float fConst95; - float fConst96; - float fRec27[2]; - float fRec26[3]; + float fRec1[3]; float fConst97; - float fRec25[3]; - float fRec24[3]; - float fRec23[3]; - float fRec22[3]; - float fRec21[3]; float fConst98; - float fConst99; - float fRec20[3]; - FAUSTFLOAT fVslider1; - float fRec28[2]; float fConst100; float fConst101; + float fRec0[3]; float fConst102; + FAUSTFLOAT fVslider0; + float fConst103; + float fRec23[2]; + float fConst104; + float fConst105; + float fConst106; + float fRec29[2]; + float fRec28[3]; + float fConst107; + float fRec27[3]; + float fRec26[3]; + float fRec25[3]; + float fConst108; + float fConst109; + float fRec24[3]; + FAUSTFLOAT fVslider1; + float fRec30[2]; + float fConst110; + float fConst111; + float fConst112; float fRec37[2]; float fRec36[3]; - float fConst103; + float fConst113; float fRec35[3]; float fRec34[3]; float fRec33[3]; float fRec32[3]; + float fConst114; + float fConst115; float fRec31[3]; - float fRec30[3]; - float fConst104; - float fConst105; - float fRec29[3]; FAUSTFLOAT fVslider2; float fRec38[2]; - float fConst106; - float fConst107; - float fConst108; - float fRec48[2]; - float fRec47[3]; - float fConst109; - float fRec46[3]; + float fConst116; + float fConst117; + float fConst118; + float fRec46[2]; float fRec45[3]; + float fConst119; float fRec44[3]; float fRec43[3]; float fRec42[3]; float fRec41[3]; float fRec40[3]; - float fConst110; - float fConst111; + float fConst120; + float fConst121; float fRec39[3]; FAUSTFLOAT fVslider3; - float fRec49[2]; - float fConst112; - float fRec60[2]; - float fRec59[3]; - float fConst113; - float fRec58[3]; - float fRec57[3]; + float fRec47[2]; + float fConst122; + float fConst123; + float fConst124; + float fRec57[2]; float fRec56[3]; + float fConst125; float fRec55[3]; float fRec54[3]; float fRec53[3]; float fRec52[3]; float fRec51[3]; - float fConst114; - float fConst115; float fRec50[3]; + float fConst126; + float fConst127; + float fRec49[3]; + float fConst128; + float fConst129; + float fRec48[3]; FAUSTFLOAT fVslider4; - float fRec61[2]; - float fConst116; - float fConst117; - float fConst119; - float fConst120; - float fRec70[2]; - float fRec69[3]; + float fRec58[2]; + float fConst130; + float fRec69[2]; float fRec68[3]; - float fVec5[2]; - float fConst121; - float fConst122; - float fConst123; - float fRec67[2]; - float fConst124; + float fConst131; + float fRec67[3]; float fRec66[3]; - float fConst125; - float fConst126; float fRec65[3]; float fRec64[3]; float fRec63[3]; float fRec62[3]; - FAUSTFLOAT fVslider5; - float fRec71[2]; - float fConst127; - float fConst128; - float fConst130; - float fConst131; - float fRec79[2]; - float fRec78[3]; - float fRec77[3]; - float fVec6[2]; + float fRec61[3]; + float fRec60[3]; float fConst132; float fConst133; + float fRec59[3]; + FAUSTFLOAT fVslider5; + float fRec70[2]; float fConst134; - float fRec76[2]; float fConst135; - float fRec75[3]; float fConst136; + float fRec79[2]; + float fRec78[3]; float fConst137; + float fRec77[3]; + float fRec76[3]; + float fRec75[3]; float fRec74[3]; float fRec73[3]; float fRec72[3]; + float fRec71[3]; FAUSTFLOAT fVslider6; float fRec80[2]; float fConst138; @@ -816,10 +900,10 @@ class flt_eq10 : public flt_eq10_dsp { void metadata(Meta* m) { m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq10 -scn flt_eq10_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_eq10.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -866,7 +950,7 @@ class flt_eq10 : public flt_eq10_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -881,167 +965,167 @@ class flt_eq10 : public flt_eq10_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - float fConst1 = std::tan((3141.59277f / fConst0)); - float fConst2 = (1.0f / fConst1); - fConst3 = (1.0f / (((fConst2 + 0.618034005f) / fConst1) + 1.0f)); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + float fConst1 = std::tan(785.3982f / fConst0); + float fConst2 = 1.0f / fConst1; + fConst3 = 1.0f / ((fConst2 + 0.618034f) / fConst1 + 1.0f); float fConst4 = flt_eq10_faustpower2_f(fConst1); - fConst5 = (1.0f / fConst4); - fConst6 = (1.0f / (((fConst2 + 1.61803401f) / fConst1) + 1.0f)); - float fConst7 = std::tan((6283.18555f / fConst0)); - float fConst8 = (1.0f / fConst7); - fConst9 = (1.0f / (((fConst8 + 0.618034005f) / fConst7) + 1.0f)); - float fConst10 = (fConst2 + 1.0f); - fConst11 = (1.0f / (fConst1 * fConst10)); - fConst12 = (1.0f / (((fConst8 + 1.61803401f) / fConst7) + 1.0f)); - float fConst13 = (fConst8 + 1.0f); - fConst14 = (1.0f / fConst13); - fConst15 = (1.0f - fConst8); - float fConst16 = std::tan((12566.3711f / fConst0)); - float fConst17 = (1.0f / fConst16); - fConst18 = (1.0f / (((fConst17 + 0.618034005f) / fConst16) + 1.0f)); - fConst19 = (1.0f / (((fConst17 + 1.61803401f) / fConst16) + 1.0f)); - float fConst20 = (fConst17 + 1.0f); - fConst21 = (1.0f / fConst20); - fConst22 = (1.0f - fConst17); - float fConst23 = std::tan((25132.7422f / fConst0)); - float fConst24 = (1.0f / fConst23); - fConst25 = (1.0f / (((fConst24 + 0.618034005f) / fConst23) + 1.0f)); - fConst26 = (1.0f / (((fConst24 + 1.61803401f) / fConst23) + 1.0f)); - float fConst27 = (fConst24 + 1.0f); - fConst28 = (1.0f / fConst27); - fConst29 = (1.0f - fConst24); - float fConst30 = std::tan((50265.4844f / fConst0)); - fConst31 = (1.0f / fConst30); - fConst32 = (1.0f / (((fConst31 + 0.618034005f) / fConst30) + 1.0f)); - fConst33 = (1.0f / (((fConst31 + 1.61803401f) / fConst30) + 1.0f)); - float fConst34 = (fConst31 + 1.0f); - fConst35 = (1.0f / fConst34); - fConst36 = (1.0f - fConst31); - fConst37 = (((fConst31 + -1.61803401f) / fConst30) + 1.0f); - float fConst38 = flt_eq10_faustpower2_f(fConst30); - fConst39 = (1.0f / fConst38); - fConst40 = (2.0f * (1.0f - fConst39)); - fConst41 = (((fConst31 + -0.618034005f) / fConst30) + 1.0f); - fConst42 = (((fConst24 + -1.61803401f) / fConst23) + 1.0f); - float fConst43 = flt_eq10_faustpower2_f(fConst23); - fConst44 = (1.0f / fConst43); - fConst45 = (2.0f * (1.0f - fConst44)); - fConst46 = (((fConst24 + -0.618034005f) / fConst23) + 1.0f); - fConst47 = (((fConst17 + -1.61803401f) / fConst16) + 1.0f); - float fConst48 = flt_eq10_faustpower2_f(fConst16); - fConst49 = (1.0f / fConst48); - fConst50 = (2.0f * (1.0f - fConst49)); - fConst51 = (((fConst17 + -0.618034005f) / fConst16) + 1.0f); - fConst52 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); - float fConst53 = flt_eq10_faustpower2_f(fConst7); - fConst54 = (1.0f / fConst53); - fConst55 = (2.0f * (1.0f - fConst54)); - fConst56 = (((fConst8 + -0.618034005f) / fConst7) + 1.0f); - fConst57 = (0.0f - fConst11); - fConst58 = (1.0f - fConst2); - fConst59 = (fConst58 / fConst10); - fConst60 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); - fConst61 = (2.0f * (1.0f - fConst5)); - fConst62 = (0.0f - (2.0f / fConst4)); - fConst63 = (((fConst2 + -0.618034005f) / fConst1) + 1.0f); - float fConst64 = std::tan((196.349548f / fConst0)); - float fConst65 = (1.0f / fConst64); - fConst66 = (1.0f / (((fConst65 + 1.61803401f) / fConst64) + 1.0f)); - fConst67 = (((fConst65 + -1.61803401f) / fConst64) + 1.0f); - float fConst68 = flt_eq10_faustpower2_f(fConst64); - fConst69 = (1.0f / fConst68); - fConst70 = (2.0f * (1.0f - fConst69)); - float fConst71 = std::tan((392.699097f / fConst0)); - float fConst72 = (1.0f / fConst71); - fConst73 = (1.0f / (((fConst72 + 1.61803401f) / fConst71) + 1.0f)); - fConst74 = (((fConst72 + -1.61803401f) / fConst71) + 1.0f); - float fConst75 = flt_eq10_faustpower2_f(fConst71); - fConst76 = (1.0f / fConst75); - fConst77 = (2.0f * (1.0f - fConst76)); - float fConst78 = std::tan((785.398193f / fConst0)); - float fConst79 = (1.0f / fConst78); - fConst80 = (1.0f / (((fConst79 + 1.61803401f) / fConst78) + 1.0f)); - fConst81 = (((fConst79 + -1.61803401f) / fConst78) + 1.0f); - float fConst82 = flt_eq10_faustpower2_f(fConst78); - fConst83 = (1.0f / fConst82); - fConst84 = (2.0f * (1.0f - fConst83)); - float fConst85 = std::tan((1570.79639f / fConst0)); - float fConst86 = (1.0f / fConst85); - fConst87 = (1.0f / (((fConst86 + 1.61803401f) / fConst85) + 1.0f)); - fConst88 = (((fConst86 + -1.61803401f) / fConst85) + 1.0f); - float fConst89 = flt_eq10_faustpower2_f(fConst85); - fConst90 = (1.0f / fConst89); - fConst91 = (2.0f * (1.0f - fConst90)); - fConst92 = (44.0999985f / fConst0); - fConst93 = (1.0f - fConst92); - fConst94 = (1.0f / (fConst7 * fConst13)); - fConst95 = (0.0f - fConst94); - fConst96 = (fConst15 / fConst13); - fConst97 = (0.0f - (2.0f / fConst53)); - fConst98 = (1.0f / (((fConst2 + 1.61803401f) / fConst1) + 1.0f)); - fConst99 = (((fConst2 + -1.61803401f) / fConst1) + 1.0f); - fConst100 = (1.0f / (fConst16 * fConst20)); - fConst101 = (0.0f - fConst100); - fConst102 = (fConst22 / fConst20); - fConst103 = (0.0f - (2.0f / fConst48)); - fConst104 = (1.0f / (((fConst8 + 1.61803401f) / fConst7) + 1.0f)); - fConst105 = (((fConst8 + -1.61803401f) / fConst7) + 1.0f); - fConst106 = (1.0f / (fConst23 * fConst27)); - fConst107 = (0.0f - fConst106); - fConst108 = (fConst29 / fConst27); - fConst109 = (0.0f - (2.0f / fConst43)); - fConst110 = (1.0f / (((fConst17 + 1.61803401f) / fConst16) + 1.0f)); - fConst111 = (((fConst17 + -1.61803401f) / fConst16) + 1.0f); - fConst112 = (0.0f - (1.0f / (fConst30 * fConst34))); - fConst113 = (0.0f - (2.0f / fConst38)); - fConst114 = (1.0f / (((fConst24 + 1.61803401f) / fConst23) + 1.0f)); - fConst115 = (((fConst24 + -1.61803401f) / fConst23) + 1.0f); - fConst116 = (1.0f / (((fConst86 + 0.618034005f) / fConst85) + 1.0f)); - fConst117 = (1.0f / (((fConst86 + 1.61803401f) / fConst85) + 1.0f)); - float fConst118 = (fConst86 + 1.0f); - fConst119 = (1.0f / (fConst85 * fConst118)); - fConst120 = (1.0f / fConst10); - fConst121 = (0.0f - fConst119); - fConst122 = (1.0f - fConst86); - fConst123 = (fConst122 / fConst118); - fConst124 = (((fConst86 + -1.61803401f) / fConst85) + 1.0f); - fConst125 = (0.0f - (2.0f / fConst89)); - fConst126 = (((fConst86 + -0.618034005f) / fConst85) + 1.0f); - fConst127 = (1.0f / (((fConst79 + 0.618034005f) / fConst78) + 1.0f)); - fConst128 = (1.0f / (((fConst79 + 1.61803401f) / fConst78) + 1.0f)); - float fConst129 = (fConst79 + 1.0f); - fConst130 = (1.0f / (fConst78 * fConst129)); - fConst131 = (1.0f / fConst118); - fConst132 = (0.0f - fConst130); - fConst133 = (1.0f - fConst79); - fConst134 = (fConst133 / fConst129); - fConst135 = (((fConst79 + -1.61803401f) / fConst78) + 1.0f); - fConst136 = (0.0f - (2.0f / fConst82)); - fConst137 = (((fConst79 + -0.618034005f) / fConst78) + 1.0f); - fConst138 = (1.0f / (((fConst72 + 0.618034005f) / fConst71) + 1.0f)); - fConst139 = (1.0f / (((fConst72 + 1.61803401f) / fConst71) + 1.0f)); - float fConst140 = (fConst72 + 1.0f); - fConst141 = (1.0f / (fConst71 * fConst140)); - fConst142 = (1.0f / fConst129); - fConst143 = (0.0f - fConst141); - fConst144 = (1.0f - fConst72); - fConst145 = (fConst144 / fConst140); - fConst146 = (((fConst72 + -1.61803401f) / fConst71) + 1.0f); - fConst147 = (0.0f - (2.0f / fConst75)); - fConst148 = (((fConst72 + -0.618034005f) / fConst71) + 1.0f); - fConst149 = (1.0f / (((fConst65 + 0.618034005f) / fConst64) + 1.0f)); - fConst150 = (1.0f / (((fConst65 + 1.61803401f) / fConst64) + 1.0f)); - float fConst151 = (fConst65 + 1.0f); - fConst152 = (1.0f / (fConst64 * fConst151)); - fConst153 = (1.0f / fConst140); - fConst154 = (0.0f - fConst152); - fConst155 = (1.0f - fConst65); - fConst156 = (fConst155 / fConst151); - fConst157 = (((fConst65 + -1.61803401f) / fConst64) + 1.0f); - fConst158 = (0.0f - (2.0f / fConst68)); - fConst159 = (((fConst65 + -0.618034005f) / fConst64) + 1.0f); - fConst160 = (1.0f / fConst151); + fConst5 = 0.0f - 2.0f / fConst4; + fConst6 = 1.0f / ((fConst2 + 1.618034f) / fConst1 + 1.0f); + fConst7 = 1.0f / fConst4; + float fConst8 = std::tan(1570.7964f / fConst0); + float fConst9 = 1.0f / fConst8; + fConst10 = 1.0f / ((fConst9 + 0.618034f) / fConst8 + 1.0f); + float fConst11 = fConst2 + 1.0f; + fConst12 = 1.0f / (fConst1 * fConst11); + fConst13 = 1.0f / ((fConst9 + 1.618034f) / fConst8 + 1.0f); + float fConst14 = fConst9 + 1.0f; + fConst15 = 1.0f / fConst14; + fConst16 = 1.0f - fConst9; + float fConst17 = std::tan(3141.5928f / fConst0); + float fConst18 = 1.0f / fConst17; + fConst19 = 1.0f / ((fConst18 + 0.618034f) / fConst17 + 1.0f); + fConst20 = 1.0f / ((fConst18 + 1.618034f) / fConst17 + 1.0f); + float fConst21 = fConst18 + 1.0f; + fConst22 = 1.0f / fConst21; + fConst23 = 1.0f - fConst18; + float fConst24 = std::tan(6283.1855f / fConst0); + float fConst25 = 1.0f / fConst24; + fConst26 = 1.0f / ((fConst25 + 0.618034f) / fConst24 + 1.0f); + fConst27 = 1.0f / ((fConst25 + 1.618034f) / fConst24 + 1.0f); + float fConst28 = fConst25 + 1.0f; + fConst29 = 1.0f / fConst28; + fConst30 = 1.0f - fConst25; + float fConst31 = std::tan(12566.371f / fConst0); + float fConst32 = 1.0f / fConst31; + fConst33 = 1.0f / ((fConst32 + 0.618034f) / fConst31 + 1.0f); + fConst34 = 1.0f / ((fConst32 + 1.618034f) / fConst31 + 1.0f); + float fConst35 = fConst32 + 1.0f; + fConst36 = 1.0f / fConst35; + fConst37 = 1.0f - fConst32; + float fConst38 = std::tan(25132.742f / fConst0); + float fConst39 = 1.0f / fConst38; + fConst40 = 1.0f / ((fConst39 + 0.618034f) / fConst38 + 1.0f); + fConst41 = 1.0f / ((fConst39 + 1.618034f) / fConst38 + 1.0f); + float fConst42 = fConst39 + 1.0f; + fConst43 = 1.0f / fConst42; + fConst44 = 1.0f - fConst39; + float fConst45 = std::tan(50265.484f / fConst0); + fConst46 = 1.0f / fConst45; + fConst47 = 1.0f / ((fConst46 + 0.618034f) / fConst45 + 1.0f); + fConst48 = 1.0f / ((fConst46 + 1.618034f) / fConst45 + 1.0f); + float fConst49 = fConst46 + 1.0f; + fConst50 = 1.0f / fConst49; + fConst51 = 1.0f - fConst46; + fConst52 = (fConst46 + -1.618034f) / fConst45 + 1.0f; + float fConst53 = flt_eq10_faustpower2_f(fConst45); + fConst54 = 1.0f / fConst53; + fConst55 = 2.0f * (1.0f - fConst54); + fConst56 = (fConst46 + -0.618034f) / fConst45 + 1.0f; + fConst57 = (fConst39 + -1.618034f) / fConst38 + 1.0f; + float fConst58 = flt_eq10_faustpower2_f(fConst38); + fConst59 = 1.0f / fConst58; + fConst60 = 2.0f * (1.0f - fConst59); + fConst61 = (fConst39 + -0.618034f) / fConst38 + 1.0f; + fConst62 = (fConst32 + -1.618034f) / fConst31 + 1.0f; + float fConst63 = flt_eq10_faustpower2_f(fConst31); + fConst64 = 1.0f / fConst63; + fConst65 = 2.0f * (1.0f - fConst64); + fConst66 = (fConst32 + -0.618034f) / fConst31 + 1.0f; + fConst67 = (fConst25 + -1.618034f) / fConst24 + 1.0f; + float fConst68 = flt_eq10_faustpower2_f(fConst24); + fConst69 = 1.0f / fConst68; + fConst70 = 2.0f * (1.0f - fConst69); + fConst71 = (fConst25 + -0.618034f) / fConst24 + 1.0f; + fConst72 = (fConst18 + -1.618034f) / fConst17 + 1.0f; + float fConst73 = flt_eq10_faustpower2_f(fConst17); + fConst74 = 1.0f / fConst73; + fConst75 = 2.0f * (1.0f - fConst74); + fConst76 = (fConst18 + -0.618034f) / fConst17 + 1.0f; + fConst77 = (fConst9 + -1.618034f) / fConst8 + 1.0f; + float fConst78 = flt_eq10_faustpower2_f(fConst8); + fConst79 = 1.0f / fConst78; + fConst80 = 2.0f * (1.0f - fConst79); + fConst81 = (fConst9 + -0.618034f) / fConst8 + 1.0f; + fConst82 = 0.0f - fConst12; + fConst83 = 1.0f - fConst2; + fConst84 = fConst83 / fConst11; + fConst85 = (fConst2 + -1.618034f) / fConst1 + 1.0f; + fConst86 = 2.0f * (1.0f - fConst7); + fConst87 = (fConst2 + -0.618034f) / fConst1 + 1.0f; + float fConst88 = std::tan(196.34955f / fConst0); + float fConst89 = 1.0f / fConst88; + fConst90 = 1.0f / ((fConst89 + 1.618034f) / fConst88 + 1.0f); + fConst91 = (fConst89 + -1.618034f) / fConst88 + 1.0f; + float fConst92 = flt_eq10_faustpower2_f(fConst88); + fConst93 = 1.0f / fConst92; + fConst94 = 2.0f * (1.0f - fConst93); + float fConst95 = std::tan(392.6991f / fConst0); + float fConst96 = 1.0f / fConst95; + fConst97 = 1.0f / ((fConst96 + 1.618034f) / fConst95 + 1.0f); + fConst98 = (fConst96 + -1.618034f) / fConst95 + 1.0f; + float fConst99 = flt_eq10_faustpower2_f(fConst95); + fConst100 = 1.0f / fConst99; + fConst101 = 2.0f * (1.0f - fConst100); + fConst102 = 44.1f / fConst0; + fConst103 = 1.0f - fConst102; + fConst104 = 1.0f / (fConst8 * fConst14); + fConst105 = 0.0f - fConst104; + fConst106 = fConst16 / fConst14; + fConst107 = 0.0f - 2.0f / fConst78; + fConst108 = 1.0f / ((fConst2 + 1.618034f) / fConst1 + 1.0f); + fConst109 = (fConst2 + -1.618034f) / fConst1 + 1.0f; + fConst110 = 1.0f / (fConst17 * fConst21); + fConst111 = 0.0f - fConst110; + fConst112 = fConst23 / fConst21; + fConst113 = 0.0f - 2.0f / fConst73; + fConst114 = 1.0f / ((fConst9 + 1.618034f) / fConst8 + 1.0f); + fConst115 = (fConst9 + -1.618034f) / fConst8 + 1.0f; + fConst116 = 1.0f / (fConst24 * fConst28); + fConst117 = 0.0f - fConst116; + fConst118 = fConst30 / fConst28; + fConst119 = 0.0f - 2.0f / fConst68; + fConst120 = 1.0f / ((fConst18 + 1.618034f) / fConst17 + 1.0f); + fConst121 = (fConst18 + -1.618034f) / fConst17 + 1.0f; + fConst122 = 1.0f / (fConst38 * fConst42); + fConst123 = 0.0f - fConst122; + fConst124 = fConst44 / fConst42; + fConst125 = 0.0f - 2.0f / fConst58; + fConst126 = 1.0f / ((fConst25 + 1.618034f) / fConst24 + 1.0f); + fConst127 = (fConst25 + -1.618034f) / fConst24 + 1.0f; + fConst128 = 1.0f / ((fConst32 + 1.618034f) / fConst31 + 1.0f); + fConst129 = (fConst32 + -1.618034f) / fConst31 + 1.0f; + fConst130 = 0.0f - 1.0f / (fConst45 * fConst49); + fConst131 = 0.0f - 2.0f / fConst53; + fConst132 = 1.0f / ((fConst39 + 1.618034f) / fConst38 + 1.0f); + fConst133 = (fConst39 + -1.618034f) / fConst38 + 1.0f; + fConst134 = 1.0f / (fConst31 * fConst35); + fConst135 = 0.0f - fConst134; + fConst136 = fConst37 / fConst35; + fConst137 = 0.0f - 2.0f / fConst63; + fConst138 = 1.0f / ((fConst96 + 0.618034f) / fConst95 + 1.0f); + fConst139 = 1.0f / ((fConst96 + 1.618034f) / fConst95 + 1.0f); + float fConst140 = fConst96 + 1.0f; + fConst141 = 1.0f / (fConst95 * fConst140); + fConst142 = 1.0f / fConst11; + fConst143 = 0.0f - fConst141; + fConst144 = 1.0f - fConst96; + fConst145 = fConst144 / fConst140; + fConst146 = (fConst96 + -1.618034f) / fConst95 + 1.0f; + fConst147 = 0.0f - 2.0f / fConst99; + fConst148 = (fConst96 + -0.618034f) / fConst95 + 1.0f; + fConst149 = 1.0f / ((fConst89 + 0.618034f) / fConst88 + 1.0f); + fConst150 = 1.0f / ((fConst89 + 1.618034f) / fConst88 + 1.0f); + float fConst151 = fConst89 + 1.0f; + fConst152 = 1.0f / (fConst88 * fConst151); + fConst153 = 1.0f / fConst140; + fConst154 = 0.0f - fConst152; + fConst155 = 1.0f - fConst89; + fConst156 = fConst155 / fConst151; + fConst157 = (fConst89 + -1.618034f) / fConst88 + 1.0f; + fConst158 = 0.0f - 2.0f / fConst92; + fConst159 = (fConst89 + -0.618034f) / fConst88 + 1.0f; + fConst160 = 1.0f / fConst151; } virtual void instanceResetUserInterface() { @@ -1058,331 +1142,331 @@ class flt_eq10 : public flt_eq10_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec18[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec22[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { - fRec17[l2] = 0.0f; + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { + fRec21[l2] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { - fRec16[l3] = 0.0f; + for (int l3 = 0; l3 < 3; l3 = l3 + 1) { + fRec20[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fVec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec15[l5] = 0.0f; + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec19[l5] = 0.0f; } - for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { - fRec14[l6] = 0.0f; + for (int l6 = 0; l6 < 3; l6 = l6 + 1) { + fRec18[l6] = 0.0f; } - for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { - fRec13[l7] = 0.0f; + for (int l7 = 0; l7 < 3; l7 = l7 + 1) { + fRec17[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fVec2[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec12[l9] = 0.0f; + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { + fRec16[l9] = 0.0f; } - for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fRec11[l10] = 0.0f; + for (int l10 = 0; l10 < 3; l10 = l10 + 1) { + fRec15[l10] = 0.0f; } - for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { - fRec10[l11] = 0.0f; + for (int l11 = 0; l11 < 3; l11 = l11 + 1) { + fRec14[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { fVec3[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec9[l13] = 0.0f; + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { + fRec13[l13] = 0.0f; } - for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { - fRec8[l14] = 0.0f; + for (int l14 = 0; l14 < 3; l14 = l14 + 1) { + fRec12[l14] = 0.0f; } - for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec7[l15] = 0.0f; + for (int l15 = 0; l15 < 3; l15 = l15 + 1) { + fRec11[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fVec4[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec6[l17] = 0.0f; + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { + fRec10[l17] = 0.0f; } - for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { - fRec5[l18] = 0.0f; + for (int l18 = 0; l18 < 3; l18 = l18 + 1) { + fRec9[l18] = 0.0f; } - for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { - fRec4[l19] = 0.0f; + for (int l19 = 0; l19 < 3; l19 = l19 + 1) { + fRec8[l19] = 0.0f; } - for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { - fRec3[l20] = 0.0f; + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { + fVec5[l20] = 0.0f; } - for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { - fRec2[l21] = 0.0f; + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { + fRec7[l21] = 0.0f; } - for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { - fRec1[l22] = 0.0f; + for (int l22 = 0; l22 < 3; l22 = l22 + 1) { + fRec6[l22] = 0.0f; } - for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { - fRec0[l23] = 0.0f; + for (int l23 = 0; l23 < 3; l23 = l23 + 1) { + fRec5[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec19[l24] = 0.0f; + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { + fVec6[l24] = 0.0f; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec27[l25] = 0.0f; + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { + fRec4[l25] = 0.0f; } - for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { - fRec26[l26] = 0.0f; + for (int l26 = 0; l26 < 3; l26 = l26 + 1) { + fRec3[l26] = 0.0f; } - for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec25[l27] = 0.0f; + for (int l27 = 0; l27 < 3; l27 = l27 + 1) { + fRec2[l27] = 0.0f; } - for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { - fRec24[l28] = 0.0f; + for (int l28 = 0; l28 < 3; l28 = l28 + 1) { + fRec1[l28] = 0.0f; } - for (int l29 = 0; (l29 < 3); l29 = (l29 + 1)) { - fRec23[l29] = 0.0f; + for (int l29 = 0; l29 < 3; l29 = l29 + 1) { + fRec0[l29] = 0.0f; } - for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { - fRec22[l30] = 0.0f; + for (int l30 = 0; l30 < 2; l30 = l30 + 1) { + fRec23[l30] = 0.0f; } - for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { - fRec21[l31] = 0.0f; + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { + fRec29[l31] = 0.0f; } - for (int l32 = 0; (l32 < 3); l32 = (l32 + 1)) { - fRec20[l32] = 0.0f; + for (int l32 = 0; l32 < 3; l32 = l32 + 1) { + fRec28[l32] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec28[l33] = 0.0f; + for (int l33 = 0; l33 < 3; l33 = l33 + 1) { + fRec27[l33] = 0.0f; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec37[l34] = 0.0f; + for (int l34 = 0; l34 < 3; l34 = l34 + 1) { + fRec26[l34] = 0.0f; } - for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { - fRec36[l35] = 0.0f; + for (int l35 = 0; l35 < 3; l35 = l35 + 1) { + fRec25[l35] = 0.0f; } - for (int l36 = 0; (l36 < 3); l36 = (l36 + 1)) { - fRec35[l36] = 0.0f; + for (int l36 = 0; l36 < 3; l36 = l36 + 1) { + fRec24[l36] = 0.0f; } - for (int l37 = 0; (l37 < 3); l37 = (l37 + 1)) { - fRec34[l37] = 0.0f; + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { + fRec30[l37] = 0.0f; } - for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { - fRec33[l38] = 0.0f; + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { + fRec37[l38] = 0.0f; } - for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { - fRec32[l39] = 0.0f; + for (int l39 = 0; l39 < 3; l39 = l39 + 1) { + fRec36[l39] = 0.0f; } - for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { - fRec31[l40] = 0.0f; + for (int l40 = 0; l40 < 3; l40 = l40 + 1) { + fRec35[l40] = 0.0f; } - for (int l41 = 0; (l41 < 3); l41 = (l41 + 1)) { - fRec30[l41] = 0.0f; + for (int l41 = 0; l41 < 3; l41 = l41 + 1) { + fRec34[l41] = 0.0f; } - for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { - fRec29[l42] = 0.0f; + for (int l42 = 0; l42 < 3; l42 = l42 + 1) { + fRec33[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec38[l43] = 0.0f; + for (int l43 = 0; l43 < 3; l43 = l43 + 1) { + fRec32[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { - fRec48[l44] = 0.0f; + for (int l44 = 0; l44 < 3; l44 = l44 + 1) { + fRec31[l44] = 0.0f; } - for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec47[l45] = 0.0f; + for (int l45 = 0; l45 < 2; l45 = l45 + 1) { + fRec38[l45] = 0.0f; } - for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 2; l46 = l46 + 1) { fRec46[l46] = 0.0f; } - for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 3; l47 = l47 + 1) { fRec45[l47] = 0.0f; } - for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 3; l48 = l48 + 1) { fRec44[l48] = 0.0f; } - for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 3; l49 = l49 + 1) { fRec43[l49] = 0.0f; } - for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 3; l50 = l50 + 1) { fRec42[l50] = 0.0f; } - for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 3; l51 = l51 + 1) { fRec41[l51] = 0.0f; } - for (int l52 = 0; (l52 < 3); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 3; l52 = l52 + 1) { fRec40[l52] = 0.0f; } - for (int l53 = 0; (l53 < 3); l53 = (l53 + 1)) { + for (int l53 = 0; l53 < 3; l53 = l53 + 1) { fRec39[l53] = 0.0f; } - for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { - fRec49[l54] = 0.0f; + for (int l54 = 0; l54 < 2; l54 = l54 + 1) { + fRec47[l54] = 0.0f; } - for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { - fRec60[l55] = 0.0f; + for (int l55 = 0; l55 < 2; l55 = l55 + 1) { + fRec57[l55] = 0.0f; } - for (int l56 = 0; (l56 < 3); l56 = (l56 + 1)) { - fRec59[l56] = 0.0f; + for (int l56 = 0; l56 < 3; l56 = l56 + 1) { + fRec56[l56] = 0.0f; } - for (int l57 = 0; (l57 < 3); l57 = (l57 + 1)) { - fRec58[l57] = 0.0f; + for (int l57 = 0; l57 < 3; l57 = l57 + 1) { + fRec55[l57] = 0.0f; } - for (int l58 = 0; (l58 < 3); l58 = (l58 + 1)) { - fRec57[l58] = 0.0f; + for (int l58 = 0; l58 < 3; l58 = l58 + 1) { + fRec54[l58] = 0.0f; } - for (int l59 = 0; (l59 < 3); l59 = (l59 + 1)) { - fRec56[l59] = 0.0f; + for (int l59 = 0; l59 < 3; l59 = l59 + 1) { + fRec53[l59] = 0.0f; } - for (int l60 = 0; (l60 < 3); l60 = (l60 + 1)) { - fRec55[l60] = 0.0f; + for (int l60 = 0; l60 < 3; l60 = l60 + 1) { + fRec52[l60] = 0.0f; } - for (int l61 = 0; (l61 < 3); l61 = (l61 + 1)) { - fRec54[l61] = 0.0f; + for (int l61 = 0; l61 < 3; l61 = l61 + 1) { + fRec51[l61] = 0.0f; } - for (int l62 = 0; (l62 < 3); l62 = (l62 + 1)) { - fRec53[l62] = 0.0f; + for (int l62 = 0; l62 < 3; l62 = l62 + 1) { + fRec50[l62] = 0.0f; } - for (int l63 = 0; (l63 < 3); l63 = (l63 + 1)) { - fRec52[l63] = 0.0f; + for (int l63 = 0; l63 < 3; l63 = l63 + 1) { + fRec49[l63] = 0.0f; } - for (int l64 = 0; (l64 < 3); l64 = (l64 + 1)) { - fRec51[l64] = 0.0f; + for (int l64 = 0; l64 < 3; l64 = l64 + 1) { + fRec48[l64] = 0.0f; } - for (int l65 = 0; (l65 < 3); l65 = (l65 + 1)) { - fRec50[l65] = 0.0f; + for (int l65 = 0; l65 < 2; l65 = l65 + 1) { + fRec58[l65] = 0.0f; } - for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { - fRec61[l66] = 0.0f; + for (int l66 = 0; l66 < 2; l66 = l66 + 1) { + fRec69[l66] = 0.0f; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { - fRec70[l67] = 0.0f; + for (int l67 = 0; l67 < 3; l67 = l67 + 1) { + fRec68[l67] = 0.0f; } - for (int l68 = 0; (l68 < 3); l68 = (l68 + 1)) { - fRec69[l68] = 0.0f; + for (int l68 = 0; l68 < 3; l68 = l68 + 1) { + fRec67[l68] = 0.0f; } - for (int l69 = 0; (l69 < 3); l69 = (l69 + 1)) { - fRec68[l69] = 0.0f; + for (int l69 = 0; l69 < 3; l69 = l69 + 1) { + fRec66[l69] = 0.0f; } - for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { - fVec5[l70] = 0.0f; + for (int l70 = 0; l70 < 3; l70 = l70 + 1) { + fRec65[l70] = 0.0f; } - for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { - fRec67[l71] = 0.0f; + for (int l71 = 0; l71 < 3; l71 = l71 + 1) { + fRec64[l71] = 0.0f; } - for (int l72 = 0; (l72 < 3); l72 = (l72 + 1)) { - fRec66[l72] = 0.0f; + for (int l72 = 0; l72 < 3; l72 = l72 + 1) { + fRec63[l72] = 0.0f; } - for (int l73 = 0; (l73 < 3); l73 = (l73 + 1)) { - fRec65[l73] = 0.0f; + for (int l73 = 0; l73 < 3; l73 = l73 + 1) { + fRec62[l73] = 0.0f; } - for (int l74 = 0; (l74 < 3); l74 = (l74 + 1)) { - fRec64[l74] = 0.0f; + for (int l74 = 0; l74 < 3; l74 = l74 + 1) { + fRec61[l74] = 0.0f; } - for (int l75 = 0; (l75 < 3); l75 = (l75 + 1)) { - fRec63[l75] = 0.0f; + for (int l75 = 0; l75 < 3; l75 = l75 + 1) { + fRec60[l75] = 0.0f; } - for (int l76 = 0; (l76 < 3); l76 = (l76 + 1)) { - fRec62[l76] = 0.0f; + for (int l76 = 0; l76 < 3; l76 = l76 + 1) { + fRec59[l76] = 0.0f; } - for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec71[l77] = 0.0f; + for (int l77 = 0; l77 < 2; l77 = l77 + 1) { + fRec70[l77] = 0.0f; } - for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + for (int l78 = 0; l78 < 2; l78 = l78 + 1) { fRec79[l78] = 0.0f; } - for (int l79 = 0; (l79 < 3); l79 = (l79 + 1)) { + for (int l79 = 0; l79 < 3; l79 = l79 + 1) { fRec78[l79] = 0.0f; } - for (int l80 = 0; (l80 < 3); l80 = (l80 + 1)) { + for (int l80 = 0; l80 < 3; l80 = l80 + 1) { fRec77[l80] = 0.0f; } - for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fVec6[l81] = 0.0f; + for (int l81 = 0; l81 < 3; l81 = l81 + 1) { + fRec76[l81] = 0.0f; } - for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { - fRec76[l82] = 0.0f; + for (int l82 = 0; l82 < 3; l82 = l82 + 1) { + fRec75[l82] = 0.0f; } - for (int l83 = 0; (l83 < 3); l83 = (l83 + 1)) { - fRec75[l83] = 0.0f; + for (int l83 = 0; l83 < 3; l83 = l83 + 1) { + fRec74[l83] = 0.0f; } - for (int l84 = 0; (l84 < 3); l84 = (l84 + 1)) { - fRec74[l84] = 0.0f; + for (int l84 = 0; l84 < 3; l84 = l84 + 1) { + fRec73[l84] = 0.0f; } - for (int l85 = 0; (l85 < 3); l85 = (l85 + 1)) { - fRec73[l85] = 0.0f; + for (int l85 = 0; l85 < 3; l85 = l85 + 1) { + fRec72[l85] = 0.0f; } - for (int l86 = 0; (l86 < 3); l86 = (l86 + 1)) { - fRec72[l86] = 0.0f; + for (int l86 = 0; l86 < 3; l86 = l86 + 1) { + fRec71[l86] = 0.0f; } - for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + for (int l87 = 0; l87 < 2; l87 = l87 + 1) { fRec80[l87] = 0.0f; } - for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + for (int l88 = 0; l88 < 2; l88 = l88 + 1) { fRec87[l88] = 0.0f; } - for (int l89 = 0; (l89 < 3); l89 = (l89 + 1)) { + for (int l89 = 0; l89 < 3; l89 = l89 + 1) { fRec86[l89] = 0.0f; } - for (int l90 = 0; (l90 < 3); l90 = (l90 + 1)) { + for (int l90 = 0; l90 < 3; l90 = l90 + 1) { fRec85[l90] = 0.0f; } - for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + for (int l91 = 0; l91 < 2; l91 = l91 + 1) { fVec7[l91] = 0.0f; } - for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + for (int l92 = 0; l92 < 2; l92 = l92 + 1) { fRec84[l92] = 0.0f; } - for (int l93 = 0; (l93 < 3); l93 = (l93 + 1)) { + for (int l93 = 0; l93 < 3; l93 = l93 + 1) { fRec83[l93] = 0.0f; } - for (int l94 = 0; (l94 < 3); l94 = (l94 + 1)) { + for (int l94 = 0; l94 < 3; l94 = l94 + 1) { fRec82[l94] = 0.0f; } - for (int l95 = 0; (l95 < 3); l95 = (l95 + 1)) { + for (int l95 = 0; l95 < 3; l95 = l95 + 1) { fRec81[l95] = 0.0f; } - for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + for (int l96 = 0; l96 < 2; l96 = l96 + 1) { fRec88[l96] = 0.0f; } - for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + for (int l97 = 0; l97 < 2; l97 = l97 + 1) { fRec94[l97] = 0.0f; } - for (int l98 = 0; (l98 < 3); l98 = (l98 + 1)) { + for (int l98 = 0; l98 < 3; l98 = l98 + 1) { fRec93[l98] = 0.0f; } - for (int l99 = 0; (l99 < 3); l99 = (l99 + 1)) { + for (int l99 = 0; l99 < 3; l99 = l99 + 1) { fRec92[l99] = 0.0f; } - for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + for (int l100 = 0; l100 < 2; l100 = l100 + 1) { fVec8[l100] = 0.0f; } - for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + for (int l101 = 0; l101 < 2; l101 = l101 + 1) { fRec91[l101] = 0.0f; } - for (int l102 = 0; (l102 < 3); l102 = (l102 + 1)) { + for (int l102 = 0; l102 < 3; l102 = l102 + 1) { fRec90[l102] = 0.0f; } - for (int l103 = 0; (l103 < 3); l103 = (l103 + 1)) { + for (int l103 = 0; l103 < 3; l103 = l103 + 1) { fRec89[l103] = 0.0f; } - for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + for (int l104 = 0; l104 < 2; l104 = l104 + 1) { fRec95[l104] = 0.0f; } - for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + for (int l105 = 0; l105 < 2; l105 = l105 + 1) { fRec98[l105] = 0.0f; } - for (int l106 = 0; (l106 < 3); l106 = (l106 + 1)) { + for (int l106 = 0; l106 < 3; l106 = l106 + 1) { fRec97[l106] = 0.0f; } - for (int l107 = 0; (l107 < 3); l107 = (l107 + 1)) { + for (int l107 = 0; l107 < 3; l107 = l107 + 1) { fRec96[l107] = 0.0f; } - for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + for (int l108 = 0; l108 < 2; l108 = l108 + 1) { fRec99[l108] = 0.0f; } } @@ -1407,227 +1491,235 @@ class flt_eq10 : public flt_eq10_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.eq10"); - ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("f1000", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider7, "unit", "db"); - ui_interface->addVerticalSlider("f125", &fVslider7, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider4, "unit", "db"); - ui_interface->addVerticalSlider("f16000", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("f2000", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider6, "unit", "db"); - ui_interface->addVerticalSlider("f250", &fVslider6, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider9, "unit", "db"); - ui_interface->addVerticalSlider("f31", &fVslider9, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("f4000", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f1000", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider7, "unit", "db"); + ui_interface->addVerticalSlider("f125", &fVslider7, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider5, "unit", "db"); - ui_interface->addVerticalSlider("f500", &fVslider5, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider8, "unit", "db"); - ui_interface->addVerticalSlider("f62", &fVslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f16000", &fVslider5, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("f8000", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-70.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f2000", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider0, "unit", "db"); + ui_interface->addVerticalSlider("f250", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider9, "unit", "db"); + ui_interface->addVerticalSlider("f31", &fVslider9, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider6, "unit", "db"); + ui_interface->addVerticalSlider("f4000", &fVslider6, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider1, "unit", "db"); + ui_interface->addVerticalSlider("f500", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider8, "unit", "db"); + ui_interface->addVerticalSlider("f62", &fVslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider4, "unit", "db"); + ui_interface->addVerticalSlider("f8000", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(-7e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst92 * float(fVslider0)); - float fSlow1 = (fConst92 * float(fVslider1)); - float fSlow2 = (fConst92 * float(fVslider2)); - float fSlow3 = (fConst92 * float(fVslider3)); - float fSlow4 = (fConst92 * float(fVslider4)); - float fSlow5 = (fConst92 * float(fVslider5)); - float fSlow6 = (fConst92 * float(fVslider6)); - float fSlow7 = (fConst92 * float(fVslider7)); - float fSlow8 = (fConst92 * float(fVslider8)); - float fSlow9 = (fConst92 * float(fVslider9)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow0 = fConst102 * float(fVslider0); + float fSlow1 = fConst102 * float(fVslider1); + float fSlow2 = fConst102 * float(fVslider2); + float fSlow3 = fConst102 * float(fVslider3); + float fSlow4 = fConst102 * float(fVslider4); + float fSlow5 = fConst102 * float(fVslider5); + float fSlow6 = fConst102 * float(fVslider6); + float fSlow7 = fConst102 * float(fVslider7); + float fSlow8 = fConst102 * float(fVslider8); + float fSlow9 = fConst102 * float(fVslider9); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); fVec0[0] = fTemp0; - fRec18[0] = (0.0f - (fConst35 * ((fConst36 * fRec18[1]) - (fTemp0 + fVec0[1])))); - fRec17[0] = (fRec18[0] - (fConst33 * ((fConst37 * fRec17[2]) + (fConst40 * fRec17[1])))); - fRec16[0] = ((fConst33 * (fRec17[2] + (fRec17[0] + (2.0f * fRec17[1])))) - (fConst32 * ((fConst41 * fRec16[2]) + (fConst40 * fRec16[1])))); - float fTemp1 = (fRec16[2] + (fRec16[0] + (2.0f * fRec16[1]))); + fRec22[0] = 0.0f - fConst50 * (fConst51 * fRec22[1] - (fTemp0 + fVec0[1])); + fRec21[0] = fRec22[0] - fConst48 * (fConst52 * fRec21[2] + fConst55 * fRec21[1]); + fRec20[0] = fConst48 * (fRec21[2] + fRec21[0] + 2.0f * fRec21[1]) - fConst47 * (fConst56 * fRec20[2] + fConst55 * fRec20[1]); + float fTemp1 = fRec20[2] + fRec20[0] + 2.0f * fRec20[1]; fVec1[0] = fTemp1; - fRec15[0] = (0.0f - (fConst28 * ((fConst29 * fRec15[1]) - (fConst32 * (fTemp1 + fVec1[1]))))); - fRec14[0] = (fRec15[0] - (fConst26 * ((fConst42 * fRec14[2]) + (fConst45 * fRec14[1])))); - fRec13[0] = ((fConst26 * (fRec14[2] + (fRec14[0] + (2.0f * fRec14[1])))) - (fConst25 * ((fConst46 * fRec13[2]) + (fConst45 * fRec13[1])))); - float fTemp2 = (fRec13[2] + (fRec13[0] + (2.0f * fRec13[1]))); + fRec19[0] = 0.0f - fConst43 * (fConst44 * fRec19[1] - fConst47 * (fTemp1 + fVec1[1])); + fRec18[0] = fRec19[0] - fConst41 * (fConst57 * fRec18[2] + fConst60 * fRec18[1]); + fRec17[0] = fConst41 * (fRec18[2] + fRec18[0] + 2.0f * fRec18[1]) - fConst40 * (fConst61 * fRec17[2] + fConst60 * fRec17[1]); + float fTemp2 = fRec17[2] + fRec17[0] + 2.0f * fRec17[1]; fVec2[0] = fTemp2; - fRec12[0] = (0.0f - (fConst21 * ((fConst22 * fRec12[1]) - (fConst25 * (fTemp2 + fVec2[1]))))); - fRec11[0] = (fRec12[0] - (fConst19 * ((fConst47 * fRec11[2]) + (fConst50 * fRec11[1])))); - fRec10[0] = ((fConst19 * (fRec11[2] + (fRec11[0] + (2.0f * fRec11[1])))) - (fConst18 * ((fConst51 * fRec10[2]) + (fConst50 * fRec10[1])))); - float fTemp3 = (fRec10[2] + (fRec10[0] + (2.0f * fRec10[1]))); + fRec16[0] = 0.0f - fConst36 * (fConst37 * fRec16[1] - fConst40 * (fTemp2 + fVec2[1])); + fRec15[0] = fRec16[0] - fConst34 * (fConst62 * fRec15[2] + fConst65 * fRec15[1]); + fRec14[0] = fConst34 * (fRec15[2] + fRec15[0] + 2.0f * fRec15[1]) - fConst33 * (fConst66 * fRec14[2] + fConst65 * fRec14[1]); + float fTemp3 = fRec14[2] + fRec14[0] + 2.0f * fRec14[1]; fVec3[0] = fTemp3; - fRec9[0] = (0.0f - (fConst14 * ((fConst15 * fRec9[1]) - (fConst18 * (fTemp3 + fVec3[1]))))); - fRec8[0] = (fRec9[0] - (fConst12 * ((fConst52 * fRec8[2]) + (fConst55 * fRec8[1])))); - fRec7[0] = ((fConst12 * (fRec8[2] + (fRec8[0] + (2.0f * fRec8[1])))) - (fConst9 * ((fConst56 * fRec7[2]) + (fConst55 * fRec7[1])))); - float fTemp4 = (fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))); + fRec13[0] = 0.0f - fConst29 * (fConst30 * fRec13[1] - fConst33 * (fTemp3 + fVec3[1])); + fRec12[0] = fRec13[0] - fConst27 * (fConst67 * fRec12[2] + fConst70 * fRec12[1]); + fRec11[0] = fConst27 * (fRec12[2] + fRec12[0] + 2.0f * fRec12[1]) - fConst26 * (fConst71 * fRec11[2] + fConst70 * fRec11[1]); + float fTemp4 = fRec11[2] + fRec11[0] + 2.0f * fRec11[1]; fVec4[0] = fTemp4; - fRec6[0] = ((fConst9 * ((fConst11 * fTemp4) + (fConst57 * fVec4[1]))) - (fConst59 * fRec6[1])); - fRec5[0] = (fRec6[0] - (fConst6 * ((fConst60 * fRec5[2]) + (fConst61 * fRec5[1])))); - fRec4[0] = ((fConst6 * (((fConst5 * fRec5[0]) + (fConst62 * fRec5[1])) + (fConst5 * fRec5[2]))) - (fConst3 * ((fConst63 * fRec4[2]) + (fConst61 * fRec4[1])))); - float fTemp5 = (fConst70 * fRec3[1]); - fRec3[0] = ((fConst3 * (((fConst5 * fRec4[0]) + (fConst62 * fRec4[1])) + (fConst5 * fRec4[2]))) - (fConst66 * ((fConst67 * fRec3[2]) + fTemp5))); - float fTemp6 = (fConst77 * fRec2[1]); - fRec2[0] = ((fRec3[2] + (fConst66 * (fTemp5 + (fConst67 * fRec3[0])))) - (fConst73 * ((fConst74 * fRec2[2]) + fTemp6))); - float fTemp7 = (fConst84 * fRec1[1]); - fRec1[0] = ((fRec2[2] + (fConst73 * (fTemp6 + (fConst74 * fRec2[0])))) - (fConst80 * ((fConst81 * fRec1[2]) + fTemp7))); - float fTemp8 = (fConst91 * fRec0[1]); - fRec0[0] = ((fRec1[2] + (fConst80 * (fTemp7 + (fConst81 * fRec1[0])))) - (fConst87 * ((fConst88 * fRec0[2]) + fTemp8))); - fRec19[0] = (fSlow0 + (fConst93 * fRec19[1])); - fRec27[0] = ((fConst18 * ((fConst94 * fTemp3) + (fConst95 * fVec3[1]))) - (fConst96 * fRec27[1])); - fRec26[0] = (fRec27[0] - (fConst12 * ((fConst52 * fRec26[2]) + (fConst55 * fRec26[1])))); - fRec25[0] = ((fConst12 * (((fConst54 * fRec26[0]) + (fConst97 * fRec26[1])) + (fConst54 * fRec26[2]))) - (fConst9 * ((fConst56 * fRec25[2]) + (fConst55 * fRec25[1])))); - float fTemp9 = (fConst70 * fRec24[1]); - fRec24[0] = ((fConst9 * (((fConst54 * fRec25[0]) + (fConst97 * fRec25[1])) + (fConst54 * fRec25[2]))) - (fConst66 * ((fConst67 * fRec24[2]) + fTemp9))); - float fTemp10 = (fConst77 * fRec23[1]); - fRec23[0] = ((fRec24[2] + (fConst66 * (fTemp9 + (fConst67 * fRec24[0])))) - (fConst73 * ((fConst74 * fRec23[2]) + fTemp10))); - float fTemp11 = (fConst84 * fRec22[1]); - fRec22[0] = ((fRec23[2] + (fConst73 * (fTemp10 + (fConst74 * fRec23[0])))) - (fConst80 * ((fConst81 * fRec22[2]) + fTemp11))); - float fTemp12 = (fConst91 * fRec21[1]); - fRec21[0] = ((fRec22[2] + (fConst80 * (fTemp11 + (fConst81 * fRec22[0])))) - (fConst87 * ((fConst88 * fRec21[2]) + fTemp12))); - float fTemp13 = (fConst61 * fRec20[1]); - fRec20[0] = ((fRec21[2] + (fConst87 * (fTemp12 + (fConst88 * fRec21[0])))) - (fConst98 * ((fConst99 * fRec20[2]) + fTemp13))); - fRec28[0] = (fSlow1 + (fConst93 * fRec28[1])); - fRec37[0] = ((fConst25 * ((fConst100 * fTemp2) + (fConst101 * fVec2[1]))) - (fConst102 * fRec37[1])); - fRec36[0] = (fRec37[0] - (fConst19 * ((fConst47 * fRec36[2]) + (fConst50 * fRec36[1])))); - fRec35[0] = ((fConst19 * (((fConst49 * fRec36[0]) + (fConst103 * fRec36[1])) + (fConst49 * fRec36[2]))) - (fConst18 * ((fConst51 * fRec35[2]) + (fConst50 * fRec35[1])))); - float fTemp14 = (fConst70 * fRec34[1]); - fRec34[0] = ((fConst18 * (((fConst49 * fRec35[0]) + (fConst103 * fRec35[1])) + (fConst49 * fRec35[2]))) - (fConst66 * ((fConst67 * fRec34[2]) + fTemp14))); - float fTemp15 = (fConst77 * fRec33[1]); - fRec33[0] = ((fRec34[2] + (fConst66 * (fTemp14 + (fConst67 * fRec34[0])))) - (fConst73 * ((fConst74 * fRec33[2]) + fTemp15))); - float fTemp16 = (fConst84 * fRec32[1]); - fRec32[0] = ((fRec33[2] + (fConst73 * (fTemp15 + (fConst74 * fRec33[0])))) - (fConst80 * ((fConst81 * fRec32[2]) + fTemp16))); - float fTemp17 = (fConst91 * fRec31[1]); - fRec31[0] = ((fRec32[2] + (fConst80 * (fTemp16 + (fConst81 * fRec32[0])))) - (fConst87 * ((fConst88 * fRec31[2]) + fTemp17))); - float fTemp18 = (fConst61 * fRec30[1]); - fRec30[0] = ((fRec31[2] + (fConst87 * (fTemp17 + (fConst88 * fRec31[0])))) - (fConst98 * ((fConst99 * fRec30[2]) + fTemp18))); - float fTemp19 = (fConst55 * fRec29[1]); - fRec29[0] = ((fRec30[2] + (fConst98 * (fTemp18 + (fConst99 * fRec30[0])))) - (fConst104 * ((fConst105 * fRec29[2]) + fTemp19))); - fRec38[0] = (fSlow2 + (fConst93 * fRec38[1])); - fRec48[0] = ((fConst32 * ((fConst106 * fTemp1) + (fConst107 * fVec1[1]))) - (fConst108 * fRec48[1])); - fRec47[0] = (fRec48[0] - (fConst26 * ((fConst42 * fRec47[2]) + (fConst45 * fRec47[1])))); - fRec46[0] = ((fConst26 * (((fConst44 * fRec47[0]) + (fConst109 * fRec47[1])) + (fConst44 * fRec47[2]))) - (fConst25 * ((fConst46 * fRec46[2]) + (fConst45 * fRec46[1])))); - float fTemp20 = (fConst70 * fRec45[1]); - fRec45[0] = ((fConst25 * (((fConst44 * fRec46[0]) + (fConst109 * fRec46[1])) + (fConst44 * fRec46[2]))) - (fConst66 * ((fConst67 * fRec45[2]) + fTemp20))); - float fTemp21 = (fConst77 * fRec44[1]); - fRec44[0] = ((fRec45[2] + (fConst66 * (fTemp20 + (fConst67 * fRec45[0])))) - (fConst73 * ((fConst74 * fRec44[2]) + fTemp21))); - float fTemp22 = (fConst84 * fRec43[1]); - fRec43[0] = ((fRec44[2] + (fConst73 * (fTemp21 + (fConst74 * fRec44[0])))) - (fConst80 * ((fConst81 * fRec43[2]) + fTemp22))); - float fTemp23 = (fConst91 * fRec42[1]); - fRec42[0] = ((fRec43[2] + (fConst80 * (fTemp22 + (fConst81 * fRec43[0])))) - (fConst87 * ((fConst88 * fRec42[2]) + fTemp23))); - float fTemp24 = (fConst61 * fRec41[1]); - fRec41[0] = ((fRec42[2] + (fConst87 * (fTemp23 + (fConst88 * fRec42[0])))) - (fConst98 * ((fConst99 * fRec41[2]) + fTemp24))); - float fTemp25 = (fConst55 * fRec40[1]); - fRec40[0] = ((fRec41[2] + (fConst98 * (fTemp24 + (fConst99 * fRec41[0])))) - (fConst104 * ((fConst105 * fRec40[2]) + fTemp25))); - float fTemp26 = (fConst50 * fRec39[1]); - fRec39[0] = ((fRec40[2] + (fConst104 * (fTemp25 + (fConst105 * fRec40[0])))) - (fConst110 * ((fConst111 * fRec39[2]) + fTemp26))); - fRec49[0] = (fSlow3 + (fConst93 * fRec49[1])); - fRec60[0] = ((fConst112 * fVec0[1]) + (fConst35 * ((fConst31 * fTemp0) - (fConst36 * fRec60[1])))); - fRec59[0] = (fRec60[0] - (fConst33 * ((fConst37 * fRec59[2]) + (fConst40 * fRec59[1])))); - fRec58[0] = ((fConst33 * (((fConst39 * fRec59[0]) + (fConst113 * fRec59[1])) + (fConst39 * fRec59[2]))) - (fConst32 * ((fConst41 * fRec58[2]) + (fConst40 * fRec58[1])))); - float fTemp27 = (fConst70 * fRec57[1]); - fRec57[0] = ((fConst32 * (((fConst39 * fRec58[0]) + (fConst113 * fRec58[1])) + (fConst39 * fRec58[2]))) - (fConst66 * ((fConst67 * fRec57[2]) + fTemp27))); - float fTemp28 = (fConst77 * fRec56[1]); - fRec56[0] = ((fRec57[2] + (fConst66 * (fTemp27 + (fConst67 * fRec57[0])))) - (fConst73 * ((fConst74 * fRec56[2]) + fTemp28))); - float fTemp29 = (fConst84 * fRec55[1]); - fRec55[0] = ((fRec56[2] + (fConst73 * (fTemp28 + (fConst74 * fRec56[0])))) - (fConst80 * ((fConst81 * fRec55[2]) + fTemp29))); - float fTemp30 = (fConst91 * fRec54[1]); - fRec54[0] = ((fRec55[2] + (fConst80 * (fTemp29 + (fConst81 * fRec55[0])))) - (fConst87 * ((fConst88 * fRec54[2]) + fTemp30))); - float fTemp31 = (fConst61 * fRec53[1]); - fRec53[0] = ((fRec54[2] + (fConst87 * (fTemp30 + (fConst88 * fRec54[0])))) - (fConst98 * ((fConst99 * fRec53[2]) + fTemp31))); - float fTemp32 = (fConst55 * fRec52[1]); - fRec52[0] = ((fRec53[2] + (fConst98 * (fTemp31 + (fConst99 * fRec53[0])))) - (fConst104 * ((fConst105 * fRec52[2]) + fTemp32))); - float fTemp33 = (fConst50 * fRec51[1]); - fRec51[0] = ((fRec52[2] + (fConst104 * (fTemp32 + (fConst105 * fRec52[0])))) - (fConst110 * ((fConst111 * fRec51[2]) + fTemp33))); - float fTemp34 = (fConst45 * fRec50[1]); - fRec50[0] = ((fRec51[2] + (fConst110 * (fTemp33 + (fConst111 * fRec51[0])))) - (fConst114 * ((fConst115 * fRec50[2]) + fTemp34))); - fRec61[0] = (fSlow4 + (fConst93 * fRec61[1])); - fRec70[0] = (0.0f - (fConst120 * ((fConst58 * fRec70[1]) - (fConst9 * (fTemp4 + fVec4[1]))))); - fRec69[0] = (fRec70[0] - (fConst6 * ((fConst60 * fRec69[2]) + (fConst61 * fRec69[1])))); - fRec68[0] = ((fConst6 * (fRec69[2] + (fRec69[0] + (2.0f * fRec69[1])))) - (fConst3 * ((fConst63 * fRec68[2]) + (fConst61 * fRec68[1])))); - float fTemp35 = (fRec68[2] + (fRec68[0] + (2.0f * fRec68[1]))); - fVec5[0] = fTemp35; - fRec67[0] = ((fConst3 * ((fConst119 * fTemp35) + (fConst121 * fVec5[1]))) - (fConst123 * fRec67[1])); - fRec66[0] = (fRec67[0] - (fConst117 * ((fConst124 * fRec66[2]) + (fConst91 * fRec66[1])))); - fRec65[0] = ((fConst117 * (((fConst90 * fRec66[0]) + (fConst125 * fRec66[1])) + (fConst90 * fRec66[2]))) - (fConst116 * ((fConst126 * fRec65[2]) + (fConst91 * fRec65[1])))); - float fTemp36 = (fConst70 * fRec64[1]); - fRec64[0] = ((fConst116 * (((fConst90 * fRec65[0]) + (fConst125 * fRec65[1])) + (fConst90 * fRec65[2]))) - (fConst66 * ((fConst67 * fRec64[2]) + fTemp36))); - float fTemp37 = (fConst77 * fRec63[1]); - fRec63[0] = ((fRec64[2] + (fConst66 * (fTemp36 + (fConst67 * fRec64[0])))) - (fConst73 * ((fConst74 * fRec63[2]) + fTemp37))); - float fTemp38 = (fConst84 * fRec62[1]); - fRec62[0] = ((fRec63[2] + (fConst73 * (fTemp37 + (fConst74 * fRec63[0])))) - (fConst80 * ((fConst81 * fRec62[2]) + fTemp38))); - fRec71[0] = (fSlow5 + (fConst93 * fRec71[1])); - fRec79[0] = (0.0f - (fConst131 * ((fConst122 * fRec79[1]) - (fConst3 * (fTemp35 + fVec5[1]))))); - fRec78[0] = (fRec79[0] - (fConst117 * ((fConst124 * fRec78[2]) + (fConst91 * fRec78[1])))); - fRec77[0] = ((fConst117 * (fRec78[2] + (fRec78[0] + (2.0f * fRec78[1])))) - (fConst116 * ((fConst126 * fRec77[2]) + (fConst91 * fRec77[1])))); - float fTemp39 = (fRec77[2] + (fRec77[0] + (2.0f * fRec77[1]))); - fVec6[0] = fTemp39; - fRec76[0] = ((fConst116 * ((fConst130 * fTemp39) + (fConst132 * fVec6[1]))) - (fConst134 * fRec76[1])); - fRec75[0] = (fRec76[0] - (fConst128 * ((fConst135 * fRec75[2]) + (fConst84 * fRec75[1])))); - fRec74[0] = ((fConst128 * (((fConst83 * fRec75[0]) + (fConst136 * fRec75[1])) + (fConst83 * fRec75[2]))) - (fConst127 * ((fConst137 * fRec74[2]) + (fConst84 * fRec74[1])))); - float fTemp40 = (fConst70 * fRec73[1]); - fRec73[0] = ((fConst127 * (((fConst83 * fRec74[0]) + (fConst136 * fRec74[1])) + (fConst83 * fRec74[2]))) - (fConst66 * ((fConst67 * fRec73[2]) + fTemp40))); - float fTemp41 = (fConst77 * fRec72[1]); - fRec72[0] = ((fRec73[2] + (fConst66 * (fTemp40 + (fConst67 * fRec73[0])))) - (fConst73 * ((fConst74 * fRec72[2]) + fTemp41))); - fRec80[0] = (fSlow6 + (fConst93 * fRec80[1])); - fRec87[0] = (0.0f - (fConst142 * ((fConst133 * fRec87[1]) - (fConst116 * (fTemp39 + fVec6[1]))))); - fRec86[0] = (fRec87[0] - (fConst128 * ((fConst135 * fRec86[2]) + (fConst84 * fRec86[1])))); - fRec85[0] = ((fConst128 * (fRec86[2] + (fRec86[0] + (2.0f * fRec86[1])))) - (fConst127 * ((fConst137 * fRec85[2]) + (fConst84 * fRec85[1])))); - float fTemp42 = (fRec85[2] + (fRec85[0] + (2.0f * fRec85[1]))); + fRec10[0] = 0.0f - fConst22 * (fConst23 * fRec10[1] - fConst26 * (fTemp4 + fVec4[1])); + fRec9[0] = fRec10[0] - fConst20 * (fConst72 * fRec9[2] + fConst75 * fRec9[1]); + fRec8[0] = fConst20 * (fRec9[2] + fRec9[0] + 2.0f * fRec9[1]) - fConst19 * (fConst76 * fRec8[2] + fConst75 * fRec8[1]); + float fTemp5 = fRec8[2] + fRec8[0] + 2.0f * fRec8[1]; + fVec5[0] = fTemp5; + fRec7[0] = 0.0f - fConst15 * (fConst16 * fRec7[1] - fConst19 * (fTemp5 + fVec5[1])); + fRec6[0] = fRec7[0] - fConst13 * (fConst77 * fRec6[2] + fConst80 * fRec6[1]); + fRec5[0] = fConst13 * (fRec6[2] + fRec6[0] + 2.0f * fRec6[1]) - fConst10 * (fConst81 * fRec5[2] + fConst80 * fRec5[1]); + float fTemp6 = fRec5[2] + fRec5[0] + 2.0f * fRec5[1]; + fVec6[0] = fTemp6; + fRec4[0] = fConst10 * (fConst12 * fTemp6 + fConst82 * fVec6[1]) - fConst84 * fRec4[1]; + fRec3[0] = fRec4[0] - fConst6 * (fConst85 * fRec3[2] + fConst86 * fRec3[1]); + fRec2[0] = fConst6 * (fConst7 * fRec3[0] + fConst5 * fRec3[1] + fConst7 * fRec3[2]) - fConst3 * (fConst87 * fRec2[2] + fConst86 * fRec2[1]); + float fTemp7 = fConst94 * fRec1[1]; + fRec1[0] = fConst3 * (fConst5 * fRec2[1] + fConst7 * fRec2[0] + fConst7 * fRec2[2]) - fConst90 * (fConst91 * fRec1[2] + fTemp7); + float fTemp8 = fConst101 * fRec0[1]; + fRec0[0] = fRec1[2] + fConst90 * (fTemp7 + fConst91 * fRec1[0]) - fConst97 * (fConst98 * fRec0[2] + fTemp8); + fRec23[0] = fSlow0 + fConst103 * fRec23[1]; + fRec29[0] = fConst19 * (fConst104 * fTemp5 + fConst105 * fVec5[1]) - fConst106 * fRec29[1]; + fRec28[0] = fRec29[0] - fConst13 * (fConst77 * fRec28[2] + fConst80 * fRec28[1]); + fRec27[0] = fConst13 * (fConst79 * fRec28[0] + fConst107 * fRec28[1] + fConst79 * fRec28[2]) - fConst10 * (fConst81 * fRec27[2] + fConst80 * fRec27[1]); + float fTemp9 = fConst94 * fRec26[1]; + fRec26[0] = fConst10 * (fConst79 * fRec27[0] + fConst107 * fRec27[1] + fConst79 * fRec27[2]) - fConst90 * (fConst91 * fRec26[2] + fTemp9); + float fTemp10 = fConst101 * fRec25[1]; + fRec25[0] = fRec26[2] + fConst90 * (fTemp9 + fConst91 * fRec26[0]) - fConst97 * (fConst98 * fRec25[2] + fTemp10); + float fTemp11 = fConst86 * fRec24[1]; + fRec24[0] = fRec25[2] + fConst97 * (fTemp10 + fConst98 * fRec25[0]) - fConst108 * (fConst109 * fRec24[2] + fTemp11); + fRec30[0] = fSlow1 + fConst103 * fRec30[1]; + fRec37[0] = fConst26 * (fConst110 * fTemp4 + fConst111 * fVec4[1]) - fConst112 * fRec37[1]; + fRec36[0] = fRec37[0] - fConst20 * (fConst72 * fRec36[2] + fConst75 * fRec36[1]); + fRec35[0] = fConst20 * (fConst74 * fRec36[0] + fConst113 * fRec36[1] + fConst74 * fRec36[2]) - fConst19 * (fConst76 * fRec35[2] + fConst75 * fRec35[1]); + float fTemp12 = fConst94 * fRec34[1]; + fRec34[0] = fConst19 * (fConst74 * fRec35[0] + fConst113 * fRec35[1] + fConst74 * fRec35[2]) - fConst90 * (fConst91 * fRec34[2] + fTemp12); + float fTemp13 = fConst101 * fRec33[1]; + fRec33[0] = fRec34[2] + fConst90 * (fTemp12 + fConst91 * fRec34[0]) - fConst97 * (fConst98 * fRec33[2] + fTemp13); + float fTemp14 = fConst86 * fRec32[1]; + fRec32[0] = fRec33[2] + fConst97 * (fTemp13 + fConst98 * fRec33[0]) - fConst108 * (fConst109 * fRec32[2] + fTemp14); + float fTemp15 = fConst80 * fRec31[1]; + fRec31[0] = fRec32[2] + fConst108 * (fTemp14 + fConst109 * fRec32[0]) - fConst114 * (fConst115 * fRec31[2] + fTemp15); + fRec38[0] = fSlow2 + fConst103 * fRec38[1]; + fRec46[0] = fConst33 * (fConst116 * fTemp3 + fConst117 * fVec3[1]) - fConst118 * fRec46[1]; + fRec45[0] = fRec46[0] - fConst27 * (fConst67 * fRec45[2] + fConst70 * fRec45[1]); + fRec44[0] = fConst27 * (fConst69 * fRec45[0] + fConst119 * fRec45[1] + fConst69 * fRec45[2]) - fConst26 * (fConst71 * fRec44[2] + fConst70 * fRec44[1]); + float fTemp16 = fConst94 * fRec43[1]; + fRec43[0] = fConst26 * (fConst69 * fRec44[0] + fConst119 * fRec44[1] + fConst69 * fRec44[2]) - fConst90 * (fConst91 * fRec43[2] + fTemp16); + float fTemp17 = fConst101 * fRec42[1]; + fRec42[0] = fRec43[2] + fConst90 * (fTemp16 + fConst91 * fRec43[0]) - fConst97 * (fConst98 * fRec42[2] + fTemp17); + float fTemp18 = fConst86 * fRec41[1]; + fRec41[0] = fRec42[2] + fConst97 * (fTemp17 + fConst98 * fRec42[0]) - fConst108 * (fConst109 * fRec41[2] + fTemp18); + float fTemp19 = fConst80 * fRec40[1]; + fRec40[0] = fRec41[2] + fConst108 * (fTemp18 + fConst109 * fRec41[0]) - fConst114 * (fConst115 * fRec40[2] + fTemp19); + float fTemp20 = fConst75 * fRec39[1]; + fRec39[0] = fRec40[2] + fConst114 * (fTemp19 + fConst115 * fRec40[0]) - fConst120 * (fConst121 * fRec39[2] + fTemp20); + fRec47[0] = fSlow3 + fConst103 * fRec47[1]; + fRec57[0] = fConst47 * (fConst122 * fTemp1 + fConst123 * fVec1[1]) - fConst124 * fRec57[1]; + fRec56[0] = fRec57[0] - fConst41 * (fConst57 * fRec56[2] + fConst60 * fRec56[1]); + fRec55[0] = fConst41 * (fConst59 * fRec56[0] + fConst125 * fRec56[1] + fConst59 * fRec56[2]) - fConst40 * (fConst61 * fRec55[2] + fConst60 * fRec55[1]); + float fTemp21 = fConst94 * fRec54[1]; + fRec54[0] = fConst40 * (fConst59 * fRec55[0] + fConst125 * fRec55[1] + fConst59 * fRec55[2]) - fConst90 * (fConst91 * fRec54[2] + fTemp21); + float fTemp22 = fConst101 * fRec53[1]; + fRec53[0] = fRec54[2] + fConst90 * (fTemp21 + fConst91 * fRec54[0]) - fConst97 * (fConst98 * fRec53[2] + fTemp22); + float fTemp23 = fConst86 * fRec52[1]; + fRec52[0] = fRec53[2] + fConst97 * (fTemp22 + fConst98 * fRec53[0]) - fConst108 * (fConst109 * fRec52[2] + fTemp23); + float fTemp24 = fConst80 * fRec51[1]; + fRec51[0] = fRec52[2] + fConst108 * (fTemp23 + fConst109 * fRec52[0]) - fConst114 * (fConst115 * fRec51[2] + fTemp24); + float fTemp25 = fConst75 * fRec50[1]; + fRec50[0] = fRec51[2] + fConst114 * (fTemp24 + fConst115 * fRec51[0]) - fConst120 * (fConst121 * fRec50[2] + fTemp25); + float fTemp26 = fConst70 * fRec49[1]; + fRec49[0] = fRec50[2] + fConst120 * (fTemp25 + fConst121 * fRec50[0]) - fConst126 * (fConst127 * fRec49[2] + fTemp26); + float fTemp27 = fConst65 * fRec48[1]; + fRec48[0] = fRec49[2] + fConst126 * (fTemp26 + fConst127 * fRec49[0]) - fConst128 * (fConst129 * fRec48[2] + fTemp27); + fRec58[0] = fSlow4 + fConst103 * fRec58[1]; + fRec69[0] = fConst130 * fVec0[1] - fConst50 * (fConst51 * fRec69[1] - fConst46 * fTemp0); + fRec68[0] = fRec69[0] - fConst48 * (fConst52 * fRec68[2] + fConst55 * fRec68[1]); + fRec67[0] = fConst48 * (fConst54 * fRec68[0] + fConst131 * fRec68[1] + fConst54 * fRec68[2]) - fConst47 * (fConst56 * fRec67[2] + fConst55 * fRec67[1]); + float fTemp28 = fConst94 * fRec66[1]; + fRec66[0] = fConst47 * (fConst54 * fRec67[0] + fConst131 * fRec67[1] + fConst54 * fRec67[2]) - fConst90 * (fConst91 * fRec66[2] + fTemp28); + float fTemp29 = fConst101 * fRec65[1]; + fRec65[0] = fRec66[2] + fConst90 * (fTemp28 + fConst91 * fRec66[0]) - fConst97 * (fConst98 * fRec65[2] + fTemp29); + float fTemp30 = fConst86 * fRec64[1]; + fRec64[0] = fRec65[2] + fConst97 * (fTemp29 + fConst98 * fRec65[0]) - fConst108 * (fConst109 * fRec64[2] + fTemp30); + float fTemp31 = fConst80 * fRec63[1]; + fRec63[0] = fRec64[2] + fConst108 * (fTemp30 + fConst109 * fRec64[0]) - fConst114 * (fConst115 * fRec63[2] + fTemp31); + float fTemp32 = fConst75 * fRec62[1]; + fRec62[0] = fRec63[2] + fConst114 * (fTemp31 + fConst115 * fRec63[0]) - fConst120 * (fConst121 * fRec62[2] + fTemp32); + float fTemp33 = fConst70 * fRec61[1]; + fRec61[0] = fRec62[2] + fConst120 * (fTemp32 + fConst121 * fRec62[0]) - fConst126 * (fConst127 * fRec61[2] + fTemp33); + float fTemp34 = fConst65 * fRec60[1]; + fRec60[0] = fRec61[2] + fConst126 * (fTemp33 + fConst127 * fRec61[0]) - fConst128 * (fConst129 * fRec60[2] + fTemp34); + float fTemp35 = fConst60 * fRec59[1]; + fRec59[0] = fRec60[2] + fConst128 * (fTemp34 + fConst129 * fRec60[0]) - fConst132 * (fConst133 * fRec59[2] + fTemp35); + fRec70[0] = fSlow5 + fConst103 * fRec70[1]; + fRec79[0] = fConst40 * (fConst134 * fTemp2 + fConst135 * fVec2[1]) - fConst136 * fRec79[1]; + fRec78[0] = fRec79[0] - fConst34 * (fConst62 * fRec78[2] + fConst65 * fRec78[1]); + fRec77[0] = fConst34 * (fConst64 * fRec78[0] + fConst137 * fRec78[1] + fConst64 * fRec78[2]) - fConst33 * (fConst66 * fRec77[2] + fConst65 * fRec77[1]); + float fTemp36 = fConst94 * fRec76[1]; + fRec76[0] = fConst33 * (fConst64 * fRec77[0] + fConst137 * fRec77[1] + fConst64 * fRec77[2]) - fConst90 * (fConst91 * fRec76[2] + fTemp36); + float fTemp37 = fConst101 * fRec75[1]; + fRec75[0] = fRec76[2] + fConst90 * (fTemp36 + fConst91 * fRec76[0]) - fConst97 * (fConst98 * fRec75[2] + fTemp37); + float fTemp38 = fConst86 * fRec74[1]; + fRec74[0] = fRec75[2] + fConst97 * (fTemp37 + fConst98 * fRec75[0]) - fConst108 * (fConst109 * fRec74[2] + fTemp38); + float fTemp39 = fConst80 * fRec73[1]; + fRec73[0] = fRec74[2] + fConst108 * (fTemp38 + fConst109 * fRec74[0]) - fConst114 * (fConst115 * fRec73[2] + fTemp39); + float fTemp40 = fConst75 * fRec72[1]; + fRec72[0] = fRec73[2] + fConst114 * (fTemp39 + fConst115 * fRec73[0]) - fConst120 * (fConst121 * fRec72[2] + fTemp40); + float fTemp41 = fConst70 * fRec71[1]; + fRec71[0] = fRec72[2] + fConst120 * (fTemp40 + fConst121 * fRec72[0]) - fConst126 * (fConst127 * fRec71[2] + fTemp41); + fRec80[0] = fSlow6 + fConst103 * fRec80[1]; + fRec87[0] = 0.0f - fConst142 * (fConst83 * fRec87[1] - fConst10 * (fTemp6 + fVec6[1])); + fRec86[0] = fRec87[0] - fConst6 * (fConst85 * fRec86[2] + fConst86 * fRec86[1]); + fRec85[0] = fConst6 * (fRec86[2] + fRec86[0] + 2.0f * fRec86[1]) - fConst3 * (fConst87 * fRec85[2] + fConst86 * fRec85[1]); + float fTemp42 = fRec85[2] + fRec85[0] + 2.0f * fRec85[1]; fVec7[0] = fTemp42; - fRec84[0] = ((fConst127 * ((fConst141 * fTemp42) + (fConst143 * fVec7[1]))) - (fConst145 * fRec84[1])); - fRec83[0] = (fRec84[0] - (fConst139 * ((fConst146 * fRec83[2]) + (fConst77 * fRec83[1])))); - fRec82[0] = ((fConst139 * (((fConst76 * fRec83[0]) + (fConst147 * fRec83[1])) + (fConst76 * fRec83[2]))) - (fConst138 * ((fConst148 * fRec82[2]) + (fConst77 * fRec82[1])))); - float fTemp43 = (fConst70 * fRec81[1]); - fRec81[0] = ((fConst138 * (((fConst76 * fRec82[0]) + (fConst147 * fRec82[1])) + (fConst76 * fRec82[2]))) - (fConst66 * ((fConst67 * fRec81[2]) + fTemp43))); - fRec88[0] = (fSlow7 + (fConst93 * fRec88[1])); - fRec94[0] = (0.0f - (fConst153 * ((fConst144 * fRec94[1]) - (fConst127 * (fTemp42 + fVec7[1]))))); - fRec93[0] = (fRec94[0] - (fConst139 * ((fConst146 * fRec93[2]) + (fConst77 * fRec93[1])))); - fRec92[0] = ((fConst139 * (fRec93[2] + (fRec93[0] + (2.0f * fRec93[1])))) - (fConst138 * ((fConst148 * fRec92[2]) + (fConst77 * fRec92[1])))); - float fTemp44 = (fRec92[2] + (fRec92[0] + (2.0f * fRec92[1]))); + fRec84[0] = fConst3 * (fConst141 * fTemp42 + fConst143 * fVec7[1]) - fConst145 * fRec84[1]; + fRec83[0] = fRec84[0] - fConst139 * (fConst146 * fRec83[2] + fConst101 * fRec83[1]); + fRec82[0] = fConst139 * (fConst100 * fRec83[0] + fConst147 * fRec83[1] + fConst100 * fRec83[2]) - fConst138 * (fConst148 * fRec82[2] + fConst101 * fRec82[1]); + float fTemp43 = fConst94 * fRec81[1]; + fRec81[0] = fConst138 * (fConst100 * fRec82[0] + fConst147 * fRec82[1] + fConst100 * fRec82[2]) - fConst90 * (fConst91 * fRec81[2] + fTemp43); + fRec88[0] = fSlow7 + fConst103 * fRec88[1]; + fRec94[0] = 0.0f - fConst153 * (fConst144 * fRec94[1] - fConst3 * (fTemp42 + fVec7[1])); + fRec93[0] = fRec94[0] - fConst139 * (fConst146 * fRec93[2] + fConst101 * fRec93[1]); + fRec92[0] = fConst139 * (fRec93[2] + fRec93[0] + 2.0f * fRec93[1]) - fConst138 * (fConst148 * fRec92[2] + fConst101 * fRec92[1]); + float fTemp44 = fRec92[2] + fRec92[0] + 2.0f * fRec92[1]; fVec8[0] = fTemp44; - fRec91[0] = ((fConst138 * ((fConst152 * fTemp44) + (fConst154 * fVec8[1]))) - (fConst156 * fRec91[1])); - fRec90[0] = (fRec91[0] - (fConst150 * ((fConst157 * fRec90[2]) + (fConst70 * fRec90[1])))); - fRec89[0] = ((fConst150 * (((fConst69 * fRec90[0]) + (fConst158 * fRec90[1])) + (fConst69 * fRec90[2]))) - (fConst149 * ((fConst159 * fRec89[2]) + (fConst70 * fRec89[1])))); - fRec95[0] = (fSlow8 + (fConst93 * fRec95[1])); - fRec98[0] = (0.0f - (fConst160 * ((fConst155 * fRec98[1]) - (fConst138 * (fTemp44 + fVec8[1]))))); - fRec97[0] = (fRec98[0] - (fConst150 * ((fConst157 * fRec97[2]) + (fConst70 * fRec97[1])))); - fRec96[0] = ((fConst150 * (fRec97[2] + (fRec97[0] + (2.0f * fRec97[1])))) - (fConst149 * ((fConst159 * fRec96[2]) + (fConst70 * fRec96[1])))); - fRec99[0] = (fSlow9 + (fConst93 * fRec99[1])); - output0[i0] = FAUSTFLOAT(((((fRec0[2] + (fConst87 * (fTemp8 + (fConst88 * fRec0[0])))) * std::pow(10.0f, (0.0500000007f * fRec19[0]))) + (((fRec20[2] + (fConst98 * (fTemp13 + (fConst99 * fRec20[0])))) * std::pow(10.0f, (0.0500000007f * fRec28[0]))) + (((fRec29[2] + (fConst104 * (fTemp19 + (fConst105 * fRec29[0])))) * std::pow(10.0f, (0.0500000007f * fRec38[0]))) + (((fRec39[2] + (fConst110 * (fTemp26 + (fConst111 * fRec39[0])))) * std::pow(10.0f, (0.0500000007f * fRec49[0]))) + (((fRec50[2] + (fConst114 * (fTemp34 + (fConst115 * fRec50[0])))) * std::pow(10.0f, (0.0500000007f * fRec61[0]))) + ((((fRec62[2] + (fConst80 * (fTemp38 + (fConst81 * fRec62[0])))) * std::pow(10.0f, (0.0500000007f * fRec71[0]))) + ((fRec72[2] + (fConst73 * (fTemp41 + (fConst74 * fRec72[0])))) * std::pow(10.0f, (0.0500000007f * fRec80[0])))) + ((fRec81[2] + (fConst66 * (fTemp43 + (fConst67 * fRec81[0])))) * std::pow(10.0f, (0.0500000007f * fRec88[0]))))))))) + (fConst149 * (((((fConst69 * fRec89[0]) + (fConst158 * fRec89[1])) + (fConst69 * fRec89[2])) * std::pow(10.0f, (0.0500000007f * fRec95[0]))) + ((fRec96[2] + (fRec96[0] + (2.0f * fRec96[1]))) * std::pow(10.0f, (0.0500000007f * fRec99[0]))))))); + fRec91[0] = fConst138 * (fConst152 * fTemp44 + fConst154 * fVec8[1]) - fConst156 * fRec91[1]; + fRec90[0] = fRec91[0] - fConst150 * (fConst157 * fRec90[2] + fConst94 * fRec90[1]); + fRec89[0] = fConst150 * (fConst93 * fRec90[0] + fConst158 * fRec90[1] + fConst93 * fRec90[2]) - fConst149 * (fConst159 * fRec89[2] + fConst94 * fRec89[1]); + fRec95[0] = fSlow8 + fConst103 * fRec95[1]; + fRec98[0] = fConst160 * (fConst138 * (fTemp44 + fVec8[1]) - fConst155 * fRec98[1]); + fRec97[0] = fRec98[0] - fConst150 * (fConst157 * fRec97[2] + fConst94 * fRec97[1]); + fRec96[0] = fConst150 * (fRec97[2] + fRec97[0] + 2.0f * fRec97[1]) - fConst149 * (fConst159 * fRec96[2] + fConst94 * fRec96[1]); + fRec99[0] = fSlow9 + fConst103 * fRec99[1]; + output0[i0] = FAUSTFLOAT((fRec0[2] + fConst97 * (fTemp8 + fConst98 * fRec0[0])) * std::pow(1e+01f, 0.05f * fRec23[0]) + (fRec24[2] + fConst108 * (fTemp11 + fConst109 * fRec24[0])) * std::pow(1e+01f, 0.05f * fRec30[0]) + (fRec31[2] + fConst114 * (fTemp15 + fConst115 * fRec31[0])) * std::pow(1e+01f, 0.05f * fRec38[0]) + (fRec39[2] + fConst120 * (fTemp20 + fConst121 * fRec39[0])) * std::pow(1e+01f, 0.05f * fRec47[0]) + (fRec48[2] + fConst128 * (fTemp27 + fConst129 * fRec48[0])) * std::pow(1e+01f, 0.05f * fRec58[0]) + (fRec59[2] + fConst132 * (fTemp35 + fConst133 * fRec59[0])) * std::pow(1e+01f, 0.05f * fRec70[0]) + (fRec71[2] + fConst126 * (fTemp41 + fConst127 * fRec71[0])) * std::pow(1e+01f, 0.05f * fRec80[0]) + (fRec81[2] + fConst90 * (fTemp43 + fConst91 * fRec81[0])) * std::pow(1e+01f, 0.05f * fRec88[0]) + fConst149 * ((fConst93 * fRec89[0] + fConst158 * fRec89[1] + fConst93 * fRec89[2]) * std::pow(1e+01f, 0.05f * fRec95[0]) + (fRec96[2] + fRec96[0] + 2.0f * fRec96[1]) * std::pow(1e+01f, 0.05f * fRec99[0]))); fVec0[1] = fVec0[0]; + fRec22[1] = fRec22[0]; + fRec21[2] = fRec21[1]; + fRec21[1] = fRec21[0]; + fRec20[2] = fRec20[1]; + fRec20[1] = fRec20[0]; + fVec1[1] = fVec1[0]; + fRec19[1] = fRec19[0]; + fRec18[2] = fRec18[1]; fRec18[1] = fRec18[0]; fRec17[2] = fRec17[1]; fRec17[1] = fRec17[0]; - fRec16[2] = fRec16[1]; + fVec2[1] = fVec2[0]; fRec16[1] = fRec16[0]; - fVec1[1] = fVec1[0]; + fRec15[2] = fRec15[1]; fRec15[1] = fRec15[0]; fRec14[2] = fRec14[1]; fRec14[1] = fRec14[0]; - fRec13[2] = fRec13[1]; + fVec3[1] = fVec3[0]; fRec13[1] = fRec13[0]; - fVec2[1] = fVec2[0]; + fRec12[2] = fRec12[1]; fRec12[1] = fRec12[0]; fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; - fRec10[2] = fRec10[1]; + fVec4[1] = fVec4[0]; fRec10[1] = fRec10[0]; - fVec3[1] = fVec3[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; - fRec7[2] = fRec7[1]; + fVec5[1] = fVec5[0]; fRec7[1] = fRec7[0]; - fVec4[1] = fVec4[0]; + fRec6[2] = fRec6[1]; fRec6[1] = fRec6[0]; fRec5[2] = fRec5[1]; fRec5[1] = fRec5[0]; - fRec4[2] = fRec4[1]; + fVec6[1] = fVec6[0]; fRec4[1] = fRec4[0]; fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; @@ -1637,7 +1729,11 @@ class flt_eq10 : public flt_eq10_dsp { fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - fRec19[1] = fRec19[0]; + fRec23[1] = fRec23[0]; + fRec29[1] = fRec29[0]; + fRec28[2] = fRec28[1]; + fRec28[1] = fRec28[0]; + fRec27[2] = fRec27[1]; fRec27[1] = fRec27[0]; fRec26[2] = fRec26[1]; fRec26[1] = fRec26[0]; @@ -1645,15 +1741,7 @@ class flt_eq10 : public flt_eq10_dsp { fRec25[1] = fRec25[0]; fRec24[2] = fRec24[1]; fRec24[1] = fRec24[0]; - fRec23[2] = fRec23[1]; - fRec23[1] = fRec23[0]; - fRec22[2] = fRec22[1]; - fRec22[1] = fRec22[0]; - fRec21[2] = fRec21[1]; - fRec21[1] = fRec21[0]; - fRec20[2] = fRec20[1]; - fRec20[1] = fRec20[0]; - fRec28[1] = fRec28[0]; + fRec30[1] = fRec30[0]; fRec37[1] = fRec37[0]; fRec36[2] = fRec36[1]; fRec36[1] = fRec36[0]; @@ -1667,15 +1755,7 @@ class flt_eq10 : public flt_eq10_dsp { fRec32[1] = fRec32[0]; fRec31[2] = fRec31[1]; fRec31[1] = fRec31[0]; - fRec30[2] = fRec30[1]; - fRec30[1] = fRec30[0]; - fRec29[2] = fRec29[1]; - fRec29[1] = fRec29[0]; fRec38[1] = fRec38[0]; - fRec48[1] = fRec48[0]; - fRec47[2] = fRec47[1]; - fRec47[1] = fRec47[0]; - fRec46[2] = fRec46[1]; fRec46[1] = fRec46[0]; fRec45[2] = fRec45[1]; fRec45[1] = fRec45[0]; @@ -1691,13 +1771,7 @@ class flt_eq10 : public flt_eq10_dsp { fRec40[1] = fRec40[0]; fRec39[2] = fRec39[1]; fRec39[1] = fRec39[0]; - fRec49[1] = fRec49[0]; - fRec60[1] = fRec60[0]; - fRec59[2] = fRec59[1]; - fRec59[1] = fRec59[0]; - fRec58[2] = fRec58[1]; - fRec58[1] = fRec58[0]; - fRec57[2] = fRec57[1]; + fRec47[1] = fRec47[0]; fRec57[1] = fRec57[0]; fRec56[2] = fRec56[1]; fRec56[1] = fRec56[0]; @@ -1713,13 +1787,15 @@ class flt_eq10 : public flt_eq10_dsp { fRec51[1] = fRec51[0]; fRec50[2] = fRec50[1]; fRec50[1] = fRec50[0]; - fRec61[1] = fRec61[0]; - fRec70[1] = fRec70[0]; - fRec69[2] = fRec69[1]; + fRec49[2] = fRec49[1]; + fRec49[1] = fRec49[0]; + fRec48[2] = fRec48[1]; + fRec48[1] = fRec48[0]; + fRec58[1] = fRec58[0]; fRec69[1] = fRec69[0]; fRec68[2] = fRec68[1]; fRec68[1] = fRec68[0]; - fVec5[1] = fVec5[0]; + fRec67[2] = fRec67[1]; fRec67[1] = fRec67[0]; fRec66[2] = fRec66[1]; fRec66[1] = fRec66[0]; @@ -1731,13 +1807,19 @@ class flt_eq10 : public flt_eq10_dsp { fRec63[1] = fRec63[0]; fRec62[2] = fRec62[1]; fRec62[1] = fRec62[0]; - fRec71[1] = fRec71[0]; + fRec61[2] = fRec61[1]; + fRec61[1] = fRec61[0]; + fRec60[2] = fRec60[1]; + fRec60[1] = fRec60[0]; + fRec59[2] = fRec59[1]; + fRec59[1] = fRec59[0]; + fRec70[1] = fRec70[0]; fRec79[1] = fRec79[0]; fRec78[2] = fRec78[1]; fRec78[1] = fRec78[0]; fRec77[2] = fRec77[1]; fRec77[1] = fRec77[0]; - fVec6[1] = fVec6[0]; + fRec76[2] = fRec76[1]; fRec76[1] = fRec76[0]; fRec75[2] = fRec75[1]; fRec75[1] = fRec75[0]; @@ -1747,6 +1829,8 @@ class flt_eq10 : public flt_eq10_dsp { fRec73[1] = fRec73[0]; fRec72[2] = fRec72[1]; fRec72[1] = fRec72[0]; + fRec71[2] = fRec71[1]; + fRec71[1] = fRec71[0]; fRec80[1] = fRec80[0]; fRec87[1] = fRec87[0]; fRec86[2] = fRec86[1]; diff --git a/ceammc/ext/src/flt/flt_eq_peak.h b/ceammc/ext/src/flt/flt_eq_peak.h index 333f7d653f..b02c8023e3 100644 --- a/ceammc/ext/src/flt/flt_eq_peak.h +++ b/ceammc/ext/src/flt/flt_eq_peak.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq_peak" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq_peak -scn flt_eq_peak_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq_peak_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_eq_peak_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_eq_peak_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_eq_peak_dsp { +class FAUST_API flt_eq_peak_dsp { public: @@ -162,7 +247,7 @@ class flt_eq_peak_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_eq_peak_dsp { +class FAUST_API decorator_dsp : public flt_eq_peak_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_eq_peak_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_eq_peak_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_eq_peak_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_eq_peak : public flt_eq_peak_dsp { #include #include -static float flt_eq_peak_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_eq_peak #endif @@ -562,6 +636,16 @@ static float flt_eq_peak_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_eq_peak_faustpower2_f(float value) { + return value * value; +} + class flt_eq_peak : public flt_eq_peak_dsp { private: @@ -583,10 +667,10 @@ class flt_eq_peak : public flt_eq_peak_dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq_peak -scn flt_eq_peak_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_eq_peak.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -615,7 +699,7 @@ class flt_eq_peak : public flt_eq_peak_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -630,30 +714,30 @@ class flt_eq_peak : public flt_eq_peak_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); - fConst4 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; + fConst4 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); fVslider1 = FAUSTFLOAT(0.0f); - fVslider2 = FAUSTFLOAT(100.0f); + fVslider2 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec3[l2] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 3; l3 = l3 + 1) { fRec0[l3] = 0.0f; } } @@ -679,36 +763,36 @@ class flt_eq_peak : public flt_eq_peak_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.eq_peak"); ui_interface->declare(&fVslider2, "unit", "Hz"); - ui_interface->addVerticalSlider("bandwidth", &fVslider2, FAUSTFLOAT(100.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("bandwidth", &fVslider2, FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - float fSlow2 = (fConst2 * float(fVslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = std::tan((fConst1 * fRec1[0])); - float fTemp1 = (1.0f / fTemp0); - fRec2[0] = (fSlow1 + (fConst3 * fRec2[1])); - int iTemp2 = (fRec2[0] > 0.0f); - fRec3[0] = (fSlow2 + (fConst3 * fRec3[1])); - float fTemp3 = std::sin((fConst4 * fRec1[0])); - float fTemp4 = (fConst1 * ((fRec3[0] * std::pow(10.0f, (0.0500000007f * std::fabs(fRec2[0])))) / fTemp3)); - float fTemp5 = (fConst1 * (fRec3[0] / fTemp3)); - float fTemp6 = (iTemp2 ? fTemp5 : fTemp4); - float fTemp7 = (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_eq_peak_faustpower2_f(fTemp0))))); - float fTemp8 = (((fTemp1 + fTemp6) / fTemp0) + 1.0f); - fRec0[0] = (float(input0[i0]) - (((fRec0[2] * (((fTemp1 - fTemp6) / fTemp0) + 1.0f)) + fTemp7) / fTemp8)); - float fTemp9 = (iTemp2 ? fTemp4 : fTemp5); - output0[i0] = FAUSTFLOAT((((fTemp7 + (fRec0[0] * (((fTemp1 + fTemp9) / fTemp0) + 1.0f))) + (fRec0[2] * (((fTemp1 - fTemp9) / fTemp0) + 1.0f))) / fTemp8)); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + float fSlow2 = fConst2 * float(fVslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + float fTemp0 = std::tan(fConst1 * fRec1[0]); + float fTemp1 = 1.0f / fTemp0; + fRec2[0] = fSlow1 + fConst3 * fRec2[1]; + int iTemp2 = fRec2[0] > 0.0f; + fRec3[0] = fSlow2 + fConst3 * fRec3[1]; + float fTemp3 = std::sin(fConst4 * fRec1[0]); + float fTemp4 = fConst1 * (fRec3[0] * std::pow(1e+01f, 0.05f * std::fabs(fRec2[0])) / fTemp3); + float fTemp5 = fConst1 * (fRec3[0] / fTemp3); + float fTemp6 = ((iTemp2) ? fTemp5 : fTemp4); + float fTemp7 = 2.0f * fRec0[1] * (1.0f - 1.0f / flt_eq_peak_faustpower2_f(fTemp0)); + float fTemp8 = (fTemp1 + fTemp6) / fTemp0 + 1.0f; + fRec0[0] = float(input0[i0]) - (fRec0[2] * ((fTemp1 - fTemp6) / fTemp0 + 1.0f) + fTemp7) / fTemp8; + float fTemp9 = ((iTemp2) ? fTemp4 : fTemp5); + output0[i0] = FAUSTFLOAT((fTemp7 + fRec0[0] * ((fTemp1 + fTemp9) / fTemp0 + 1.0f) + fRec0[2] * ((fTemp1 - fTemp9) / fTemp0 + 1.0f)) / fTemp8); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/flt/flt_eq_peak_cq.h b/ceammc/ext/src/flt/flt_eq_peak_cq.h index 0945fab4e9..838a83f263 100644 --- a/ceammc/ext/src/flt/flt_eq_peak_cq.h +++ b/ceammc/ext/src/flt/flt_eq_peak_cq.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.eq_peak_cq" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq_peak_cq -scn flt_eq_peak_cq_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_eq_peak_cq_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_eq_peak_cq_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_eq_peak_cq_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_eq_peak_cq_dsp { +class FAUST_API flt_eq_peak_cq_dsp { public: @@ -162,7 +247,7 @@ class flt_eq_peak_cq_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_eq_peak_cq_dsp { +class FAUST_API decorator_dsp : public flt_eq_peak_cq_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_eq_peak_cq_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_eq_peak_cq_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_eq_peak_cq_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_eq_peak_cq : public flt_eq_peak_cq_dsp { #include #include -static float flt_eq_peak_cq_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_eq_peak_cq #endif @@ -562,16 +636,26 @@ static float flt_eq_peak_cq_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_eq_peak_cq_faustpower2_f(float value) { + return value * value; +} + class flt_eq_peak_cq : public flt_eq_peak_cq_dsp { private: int fSampleRate; float fConst1; - float fConst2; FAUSTFLOAT fVslider0; - float fConst3; + float fConst2; float fRec1[2]; + float fConst3; FAUSTFLOAT fVslider1; float fRec2[2]; FAUSTFLOAT fVslider2; @@ -583,10 +667,10 @@ class flt_eq_peak_cq : public flt_eq_peak_cq_dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_eq_peak_cq -scn flt_eq_peak_cq_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_eq_peak_cq.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -618,7 +702,7 @@ class flt_eq_peak_cq : public flt_eq_peak_cq_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -633,30 +717,30 @@ class flt_eq_peak_cq : public flt_eq_peak_cq_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); - fConst4 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 3.1415927f / fConst0; + fConst4 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); - fVslider1 = FAUSTFLOAT(0.0f); + fVslider0 = FAUSTFLOAT(0.0f); + fVslider1 = FAUSTFLOAT(1e+03f); fVslider2 = FAUSTFLOAT(3.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec3[l2] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 3; l3 = l3 + 1) { fRec0[l3] = 0.0f; } } @@ -681,36 +765,36 @@ class flt_eq_peak_cq : public flt_eq_peak_cq_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.eq_peak_cq"); - ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider2, FAUSTFLOAT(3.0f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->declare(&fVslider1, "unit", "Hz"); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider0, "unit", "db"); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("q", &fVslider2, FAUSTFLOAT(3.0f), FAUSTFLOAT(0.1f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - float fSlow2 = (fConst2 * float(fVslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = std::tan((fConst1 * fRec1[0])); - float fTemp1 = (1.0f / fTemp0); - fRec2[0] = (fSlow1 + (fConst3 * fRec2[1])); - int iTemp2 = (fRec2[0] > 0.0f); - fRec3[0] = (fSlow2 + (fConst3 * fRec3[1])); - float fTemp3 = (fRec3[0] * std::sin((fConst4 * fRec1[0]))); - float fTemp4 = (fConst1 * ((fRec1[0] * std::pow(10.0f, (0.0500000007f * std::fabs(fRec2[0])))) / fTemp3)); - float fTemp5 = (fConst1 * (fRec1[0] / fTemp3)); - float fTemp6 = (iTemp2 ? fTemp5 : fTemp4); - float fTemp7 = (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_eq_peak_cq_faustpower2_f(fTemp0))))); - float fTemp8 = (((fTemp1 + fTemp6) / fTemp0) + 1.0f); - fRec0[0] = (float(input0[i0]) - (((fRec0[2] * (((fTemp1 - fTemp6) / fTemp0) + 1.0f)) + fTemp7) / fTemp8)); - float fTemp9 = (iTemp2 ? fTemp4 : fTemp5); - output0[i0] = FAUSTFLOAT((((fTemp7 + (fRec0[0] * (((fTemp1 + fTemp9) / fTemp0) + 1.0f))) + (fRec0[2] * (((fTemp1 - fTemp9) / fTemp0) + 1.0f))) / fTemp8)); + float fSlow0 = fConst1 * float(fVslider0); + float fSlow1 = fConst1 * float(fVslider1); + float fSlow2 = fConst1 * float(fVslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst2 * fRec1[1]; + int iTemp0 = fRec1[0] > 0.0f; + fRec2[0] = fSlow1 + fConst2 * fRec2[1]; + fRec3[0] = fSlow2 + fConst2 * fRec3[1]; + float fTemp1 = fRec3[0] * std::sin(fConst4 * fRec2[0]); + float fTemp2 = fConst3 * (fRec2[0] * std::pow(1e+01f, 0.05f * std::fabs(fRec1[0])) / fTemp1); + float fTemp3 = fConst3 * (fRec2[0] / fTemp1); + float fTemp4 = ((iTemp0) ? fTemp3 : fTemp2); + float fTemp5 = std::tan(fConst3 * fRec2[0]); + float fTemp6 = 1.0f / fTemp5; + float fTemp7 = 2.0f * fRec0[1] * (1.0f - 1.0f / flt_eq_peak_cq_faustpower2_f(fTemp5)); + float fTemp8 = (fTemp6 + fTemp4) / fTemp5 + 1.0f; + fRec0[0] = float(input0[i0]) - (fRec0[2] * (1.0f - (fTemp4 - fTemp6) / fTemp5) + fTemp7) / fTemp8; + float fTemp9 = ((iTemp0) ? fTemp2 : fTemp3); + output0[i0] = FAUSTFLOAT((fTemp7 + fRec0[0] * ((fTemp6 + fTemp9) / fTemp5 + 1.0f) + fRec0[2] * (1.0f - (fTemp9 - fTemp6) / fTemp5)) / fTemp8); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/flt/flt_fb_comb.h b/ceammc/ext/src/flt/flt_fb_comb.h index 5bbe63b7ea..9853b07289 100644 --- a/ceammc/ext/src/flt/flt_fb_comb.h +++ b/ceammc/ext/src/flt/flt_fb_comb.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "flt_fb_comb" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "flt.fb_comb" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_fb_comb -scn flt_fb_comb_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_fb_comb_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_fb_comb_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_fb_comb_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_fb_comb_dsp { +class FAUST_API flt_fb_comb_dsp { public: @@ -162,7 +247,7 @@ class flt_fb_comb_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_fb_comb_dsp { +class FAUST_API decorator_dsp : public flt_fb_comb_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_fb_comb_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_fb_comb_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_fb_comb_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_fb_comb : public flt_fb_comb_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_fb_comb #endif @@ -559,6 +636,13 @@ struct flt_fb_comb : public flt_fb_comb_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_fb_comb : public flt_fb_comb_dsp { private: @@ -569,9 +653,9 @@ class flt_fb_comb : public flt_fb_comb_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec2[2]; - int IOTA; + int IOTA0; float fVec0[16384]; - float fConst8; + int iConst8; float fRec0[2]; float fRec1[2]; @@ -579,8 +663,8 @@ class flt_fb_comb : public flt_fb_comb_dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_fb_comb -scn flt_fb_comb_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "flt_fb_comb.dsp"); @@ -595,11 +679,11 @@ class flt_fb_comb : public flt_fb_comb_dsp { m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "flt_fb_comb"); + m->declare("name", "flt.fb_comb"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -614,15 +698,15 @@ class flt_fb_comb : public flt_fb_comb_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - int iConst3 = int(((0.0500000007f * std::max(8000.0f, fConst0)) + -1.0f)); - int iConst4 = ((iConst3 >> 1) | iConst3); - int iConst5 = ((iConst4 >> 2) | iConst4); - int iConst6 = ((iConst5 >> 4) | iConst5); - int iConst7 = ((iConst6 >> 8) | iConst6); - fConst8 = (float(((iConst7 >> 16) | iConst7)) + 2.0f); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + int iConst3 = int(0.05f * std::max(8e+03f, fConst0) + -1.0f); + int iConst4 = (iConst3 >> 1) | iConst3; + int iConst5 = (iConst4 >> 2) | iConst4; + int iConst6 = (iConst5 >> 4) | iConst5; + int iConst7 = (iConst6 >> 8) | iConst6; + iConst8 = ((iConst7 >> 16) | iConst7) + 2; } virtual void instanceResetUserInterface() { @@ -630,17 +714,17 @@ class flt_fb_comb : public flt_fb_comb_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec2[l0] = 0.0f; } - IOTA = 0; - for (int l1 = 0; (l1 < 16384); l1 = (l1 + 1)) { + IOTA0 = 0; + for (int l1 = 0; l1 < 16384; l1 = l1 + 1) { fVec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec0[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec1[l3] = 0.0f; } } @@ -664,29 +748,29 @@ class flt_fb_comb : public flt_fb_comb_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("flt_fb_comb"); - ui_interface->addHorizontalSlider("a", &fHslider0, FAUSTFLOAT(0.75f), FAUSTFLOAT(-1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(9.99999975e-05f)); + ui_interface->openVerticalBox("flt.fb_comb"); + ui_interface->addHorizontalSlider("a", &fHslider0, FAUSTFLOAT(0.75f), FAUSTFLOAT(-1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst1 * float(fHslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec2[0] = (fSlow0 + (fConst2 * fRec2[1])); - float fTemp0 = (float(input0[i0]) - (fRec2[0] * fRec0[1])); - fVec0[(IOTA & 16383)] = fTemp0; - float fTemp1 = (fConst0 / std::max(20.0f, std::min(20000.0f, float(input1[i0])))); - float fTemp2 = (fTemp1 + -1.0f); + float fSlow0 = fConst1 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec2[0] = fSlow0 + fConst2 * fRec2[1]; + float fTemp0 = float(input0[i0]) - fRec2[0] * fRec0[1]; + fVec0[IOTA0 & 16383] = fTemp0; + float fTemp1 = fConst0 / std::max(2e+01f, std::min(2e+04f, float(input1[i0]))); + float fTemp2 = fTemp1 + -1.0f; int iTemp3 = int(fTemp2); float fTemp4 = std::floor(fTemp2); - fRec0[0] = ((fVec0[((IOTA - int(std::min(fConst8, float(std::max(0, iTemp3))))) & 16383)] * (fTemp4 + (2.0f - fTemp1))) + ((fTemp1 + (-1.0f - fTemp4)) * fVec0[((IOTA - int(std::min(fConst8, float(std::max(0, (iTemp3 + 1)))))) & 16383)])); + fRec0[0] = fVec0[(IOTA0 - std::min(iConst8, std::max(0, iTemp3))) & 16383] * (fTemp4 + (2.0f - fTemp1)) + (fTemp1 + (-1.0f - fTemp4)) * fVec0[(IOTA0 - std::min(iConst8, std::max(0, iTemp3 + 1))) & 16383]; fRec1[0] = fTemp0; output0[i0] = FAUSTFLOAT(fRec1[1]); fRec2[1] = fRec2[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/flt/flt_ff_comb.h b/ceammc/ext/src/flt/flt_ff_comb.h index d44735d8bf..48ffd3110a 100644 --- a/ceammc/ext/src/flt/flt_ff_comb.h +++ b/ceammc/ext/src/flt/flt_ff_comb.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "flt_ff_comb" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "flt.ff_comb" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_ff_comb -scn flt_ff_comb_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_ff_comb_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_ff_comb_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_ff_comb_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_ff_comb_dsp { +class FAUST_API flt_ff_comb_dsp { public: @@ -162,7 +247,7 @@ class flt_ff_comb_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_ff_comb_dsp { +class FAUST_API decorator_dsp : public flt_ff_comb_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_ff_comb_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_ff_comb_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_ff_comb_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_ff_comb : public flt_ff_comb_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_ff_comb #endif @@ -559,11 +636,18 @@ struct flt_ff_comb : public flt_ff_comb_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_ff_comb : public flt_ff_comb_dsp { private: - int IOTA; + int IOTA0; float fVec0[16384]; int fSampleRate; float fConst0; @@ -571,14 +655,14 @@ class flt_ff_comb : public flt_ff_comb_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec0[2]; - float fConst8; + int iConst8; public: void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_ff_comb -scn flt_ff_comb_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "flt_ff_comb.dsp"); @@ -593,11 +677,11 @@ class flt_ff_comb : public flt_ff_comb_dsp { m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "flt_ff_comb"); + m->declare("name", "flt.ff_comb"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -612,15 +696,15 @@ class flt_ff_comb : public flt_ff_comb_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - int iConst3 = int(((0.0500000007f * std::max(8000.0f, fConst0)) + -1.0f)); - int iConst4 = ((iConst3 >> 1) | iConst3); - int iConst5 = ((iConst4 >> 2) | iConst4); - int iConst6 = ((iConst5 >> 4) | iConst5); - int iConst7 = ((iConst6 >> 8) | iConst6); - fConst8 = (float(((iConst7 >> 16) | iConst7)) + 2.0f); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + int iConst3 = int(0.05f * std::max(8e+03f, fConst0) + -1.0f); + int iConst4 = (iConst3 >> 1) | iConst3; + int iConst5 = (iConst4 >> 2) | iConst4; + int iConst6 = (iConst5 >> 4) | iConst5; + int iConst7 = (iConst6 >> 8) | iConst6; + iConst8 = ((iConst7 >> 16) | iConst7) + 2; } virtual void instanceResetUserInterface() { @@ -628,11 +712,11 @@ class flt_ff_comb : public flt_ff_comb_dsp { } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 16384); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 16384; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -656,25 +740,25 @@ class flt_ff_comb : public flt_ff_comb_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("flt_ff_comb"); - ui_interface->addHorizontalSlider("a", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(-1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(9.99999975e-05f)); + ui_interface->openVerticalBox("flt.ff_comb"); + ui_interface->addHorizontalSlider("a", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(-1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst1 * float(fHslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow0 = fConst1 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - fVec0[(IOTA & 16383)] = fTemp0; - fRec0[0] = (fSlow0 + (fConst2 * fRec0[1])); - float fTemp1 = (fConst0 / std::max(std::min(20000.0f, float(input1[i0])), 20.0f)); + fVec0[IOTA0 & 16383] = fTemp0; + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; + float fTemp1 = fConst0 / std::max(std::min(2e+04f, float(input1[i0])), 2e+01f); int iTemp2 = int(fTemp1); float fTemp3 = std::floor(fTemp1); - output0[i0] = FAUSTFLOAT((fTemp0 + (fRec0[0] * ((fVec0[((IOTA - int(std::min(fConst8, float(std::max(0, iTemp2))))) & 16383)] * (fTemp3 + (1.0f - fTemp1))) + ((fTemp1 - fTemp3) * fVec0[((IOTA - int(std::min(fConst8, float(std::max(0, (iTemp2 + 1)))))) & 16383)]))))); - IOTA = (IOTA + 1); + output0[i0] = FAUSTFLOAT(fTemp0 + fRec0[0] * (fVec0[(IOTA0 - std::min(iConst8, std::max(0, iTemp2))) & 16383] * (fTemp3 + (1.0f - fTemp1)) + (fTemp1 - fTemp3) * fVec0[(IOTA0 - std::min(iConst8, std::max(0, iTemp2 + 1))) & 16383])); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/flt/flt_filterbank5x1.cpp b/ceammc/ext/src/flt/flt_filterbank5x1.cpp index 9175ced872..7a07261930 100644 --- a/ceammc/ext/src/flt/flt_filterbank5x1.cpp +++ b/ceammc/ext/src/flt/flt_filterbank5x1.cpp @@ -5,51 +5,45 @@ using namespace ceammc; -static t_symbol* SYM_PROP_FREQ_250; -static t_symbol* SYM_PROP_FREQ_500; -static t_symbol* SYM_PROP_FREQ_1000; -static t_symbol* SYM_PROP_FREQ_2000; -static t_symbol* SYM_PROP_FREQ_4000; - -static std::array freq_props { - &SYM_PROP_FREQ_250, - &SYM_PROP_FREQ_500, - &SYM_PROP_FREQ_1000, - &SYM_PROP_FREQ_2000, - &SYM_PROP_FREQ_4000, +constexpr size_t NUM_BANDS = 5; +static const std::array STR_BANDS = { + "@f250", + "@f500", + "@f1000", + "@f2000", + "@f4000", }; class FltFilterBank5x1 : public faust_flt_filterbank5x1_tilde { + std::array bands_; + public: FltFilterBank5x1(const PdArgs& args) : faust_flt_filterbank5x1_tilde(args) { bindPositionalArgsToProps({ - SYM_PROP_FREQ_250, - SYM_PROP_FREQ_500, - SYM_PROP_FREQ_1000, - SYM_PROP_FREQ_2000, - SYM_PROP_FREQ_4000, + gensym(STR_BANDS[0]), + gensym(STR_BANDS[1]), + gensym(STR_BANDS[2]), + gensym(STR_BANDS[3]), + gensym(STR_BANDS[4]), }); + + for (size_t i = 0; i < NUM_BANDS; i++) + bands_[i] = property(STR_BANDS[i]); } - void onList(const AtomList& lst) override + void onList(const AtomListView& lv) override { - const size_t N = std::min(lst.size(), freq_props.size()); - for (size_t i = 0; i < N; i++) { - setProperty(*freq_props[i], lst.view(i, 1)); - } + const size_t N = std::min(lv.size(), bands_.size()); + + for (size_t i = 0; i < N; i++) + bands_[i]->set(lv.subView(i, 1)); } }; void setup_flt_filterbank5x1_tilde() { - SYM_PROP_FREQ_250 = gensym("@f250"); - SYM_PROP_FREQ_500 = gensym("@f500"); - SYM_PROP_FREQ_1000 = gensym("@f1000"); - SYM_PROP_FREQ_2000 = gensym("@f2000"); - SYM_PROP_FREQ_4000 = gensym("@f4000"); - SoundExternalFactory obj("flt.fbank5x1~"); obj.addMethod("reset", &FltFilterBank5x1::m_reset); obj.setXletsInfo({ "input signal" }, diff --git a/ceammc/ext/src/flt/flt_filterbank5x1.h b/ceammc/ext/src/flt/flt_filterbank5x1.h index f378599481..d534981f0e 100644 --- a/ceammc/ext/src/flt/flt_filterbank5x1.h +++ b/ceammc/ext/src/flt/flt_filterbank5x1.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.fbank5x1" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_filterbank5x1 -scn flt_filterbank5x1_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_filterbank5x1_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_filterbank5x1_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_filterbank5x1_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_filterbank5x1_dsp { +class FAUST_API flt_filterbank5x1_dsp { public: @@ -162,7 +247,7 @@ class flt_filterbank5x1_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_filterbank5x1_dsp { +class FAUST_API decorator_dsp : public flt_filterbank5x1_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_filterbank5x1_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_filterbank5x1_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_filterbank5x1_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_filterbank5x1 : public flt_filterbank5x1_dsp { #include #include -static float flt_filterbank5x1_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_filterbank5x1 #endif @@ -562,6 +636,16 @@ static float flt_filterbank5x1_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_filterbank5x1_faustpower2_f(float value) { + return value * value; +} + class flt_filterbank5x1 : public flt_filterbank5x1_dsp { private: @@ -576,27 +660,27 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { float fConst8; float fConst11; float fConst13; - float fConst14; - float fConst17; - float fConst19; + float fConst16; + float fConst18; float fConst20; - float fConst22; + float fConst21; float fConst23; - float fConst25; - float fConst26; + float fConst24; float fVec0[2]; float fRec8[2]; + float fConst25; float fConst27; - float fConst29; - float fConst30; + float fConst28; float fRec7[3]; float fVec1[2]; + float fConst29; float fRec6[2]; - float fConst31; + float fConst30; + float fConst32; float fConst33; - float fConst34; float fRec5[3]; float fVec2[2]; + float fConst34; float fRec4[2]; float fConst35; float fConst37; @@ -655,10 +739,10 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { void metadata(Meta* m) { m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_filterbank5x1 -scn flt_filterbank5x1_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_filterbank5x1.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -702,7 +786,7 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -717,69 +801,69 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - float fConst1 = std::tan((1570.79639f / fConst0)); - float fConst2 = (1.0f / fConst1); - fConst3 = (1.0f / (((fConst2 + 1.0f) / fConst1) + 1.0f)); - fConst4 = (44.0999985f / fConst0); - fConst5 = (1.0f - fConst4); - float fConst6 = (fConst2 + 1.0f); - fConst7 = (1.0f / fConst6); - fConst8 = (1.0f - fConst2); - float fConst9 = std::tan((3141.59277f / fConst0)); - float fConst10 = (1.0f / fConst9); - fConst11 = (1.0f / (((fConst10 + 1.0f) / fConst9) + 1.0f)); - float fConst12 = (fConst10 + 1.0f); - fConst13 = (1.0f / fConst12); - fConst14 = (1.0f - fConst10); - float fConst15 = std::tan((6283.18555f / fConst0)); - float fConst16 = (1.0f / fConst15); - fConst17 = (1.0f / (((fConst16 + 1.0f) / fConst15) + 1.0f)); - float fConst18 = (fConst16 + 1.0f); - fConst19 = (1.0f / fConst18); - fConst20 = (1.0f - fConst16); - float fConst21 = std::tan((12566.3711f / fConst0)); - fConst22 = (1.0f / fConst21); - fConst23 = (1.0f / (((fConst22 + 1.0f) / fConst21) + 1.0f)); - float fConst24 = (fConst22 + 1.0f); - fConst25 = (1.0f / fConst24); - fConst26 = (1.0f - fConst22); - fConst27 = (((fConst22 + -1.0f) / fConst21) + 1.0f); - float fConst28 = flt_filterbank5x1_faustpower2_f(fConst21); - fConst29 = (1.0f / fConst28); - fConst30 = (2.0f * (1.0f - fConst29)); - fConst31 = (((fConst16 + -1.0f) / fConst15) + 1.0f); - float fConst32 = flt_filterbank5x1_faustpower2_f(fConst15); - fConst33 = (1.0f / fConst32); - fConst34 = (2.0f * (1.0f - fConst33)); - fConst35 = (((fConst10 + -1.0f) / fConst9) + 1.0f); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + float fConst1 = std::tan(1570.7964f / fConst0); + float fConst2 = 1.0f / fConst1; + fConst3 = 1.0f / ((fConst2 + 1.0f) / fConst1 + 1.0f); + fConst4 = 44.1f / fConst0; + fConst5 = 1.0f - fConst4; + float fConst6 = fConst2 + 1.0f; + fConst7 = 1.0f / fConst6; + fConst8 = 1.0f - fConst2; + float fConst9 = std::tan(3141.5928f / fConst0); + float fConst10 = 1.0f / fConst9; + fConst11 = 1.0f / ((fConst10 + 1.0f) / fConst9 + 1.0f); + float fConst12 = fConst10 + 1.0f; + fConst13 = 1.0f / fConst12; + float fConst14 = std::tan(6283.1855f / fConst0); + float fConst15 = 1.0f / fConst14; + fConst16 = 1.0f / ((fConst15 + 1.0f) / fConst14 + 1.0f); + float fConst17 = fConst15 + 1.0f; + fConst18 = 1.0f / fConst17; + float fConst19 = std::tan(12566.371f / fConst0); + fConst20 = 1.0f / fConst19; + fConst21 = 1.0f / ((fConst20 + 1.0f) / fConst19 + 1.0f); + float fConst22 = fConst20 + 1.0f; + fConst23 = 1.0f / fConst22; + fConst24 = 1.0f - fConst20; + fConst25 = (fConst20 + -1.0f) / fConst19 + 1.0f; + float fConst26 = flt_filterbank5x1_faustpower2_f(fConst19); + fConst27 = 1.0f / fConst26; + fConst28 = 2.0f * (1.0f - fConst27); + fConst29 = 1.0f - fConst15; + fConst30 = (fConst15 + -1.0f) / fConst14 + 1.0f; + float fConst31 = flt_filterbank5x1_faustpower2_f(fConst14); + fConst32 = 1.0f / fConst31; + fConst33 = 2.0f * (1.0f - fConst32); + fConst34 = 1.0f - fConst10; + fConst35 = (fConst10 + -1.0f) / fConst9 + 1.0f; float fConst36 = flt_filterbank5x1_faustpower2_f(fConst9); - fConst37 = (1.0f / fConst36); - fConst38 = (2.0f * (1.0f - fConst37)); - fConst39 = (((fConst2 + -1.0f) / fConst1) + 1.0f); + fConst37 = 1.0f / fConst36; + fConst38 = 2.0f * (1.0f - fConst37); + fConst39 = (fConst2 + -1.0f) / fConst1 + 1.0f; float fConst40 = flt_filterbank5x1_faustpower2_f(fConst1); - fConst41 = (1.0f / fConst40); - fConst42 = (2.0f * (1.0f - fConst41)); - fConst43 = (1.0f / (fConst1 * fConst6)); - fConst44 = (0.0f - fConst43); - fConst45 = (fConst8 / fConst6); - fConst46 = (0.0f - (2.0f / fConst40)); - fConst47 = (1.0f / (fConst9 * fConst12)); - fConst48 = (0.0f - fConst47); - fConst49 = (fConst14 / fConst12); - fConst50 = (0.0f - (2.0f / fConst36)); - fConst51 = (1.0f / ((fConst6 / fConst1) + 1.0f)); - fConst52 = (1.0f - (fConst8 / fConst1)); - fConst53 = (1.0f / (fConst15 * fConst18)); - fConst54 = (0.0f - fConst53); - fConst55 = (fConst20 / fConst18); - fConst56 = (0.0f - (2.0f / fConst32)); - fConst57 = (1.0f / ((fConst12 / fConst9) + 1.0f)); - fConst58 = (1.0f - (fConst14 / fConst9)); - fConst59 = (0.0f - (1.0f / (fConst21 * fConst24))); - fConst60 = (0.0f - (2.0f / fConst28)); - fConst61 = (1.0f / ((fConst18 / fConst15) + 1.0f)); - fConst62 = (1.0f - (fConst20 / fConst15)); + fConst41 = 1.0f / fConst40; + fConst42 = 2.0f * (1.0f - fConst41); + fConst43 = 1.0f / (fConst1 * fConst6); + fConst44 = 0.0f - fConst43; + fConst45 = fConst8 / fConst6; + fConst46 = 0.0f - 2.0f / fConst40; + fConst47 = 1.0f / (fConst9 * fConst12); + fConst48 = 0.0f - fConst47; + fConst49 = fConst34 / fConst12; + fConst50 = 0.0f - 2.0f / fConst36; + fConst51 = 1.0f / (fConst6 / fConst1 + 1.0f); + fConst52 = 1.0f - fConst8 / fConst1; + fConst53 = 1.0f / (fConst14 * fConst17); + fConst54 = 0.0f - fConst53; + fConst55 = fConst29 / fConst17; + fConst56 = 0.0f - 2.0f / fConst31; + fConst57 = 1.0f / (fConst12 / fConst9 + 1.0f); + fConst58 = 1.0f - fConst34 / fConst9; + fConst59 = 0.0f - 1.0f / (fConst19 * fConst22); + fConst60 = 0.0f - 2.0f / fConst26; + fConst61 = 1.0f / (fConst17 / fConst14 + 1.0f); + fConst62 = 1.0f - fConst29 / fConst14; } virtual void instanceResetUserInterface() { @@ -791,97 +875,97 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fVec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec8[l2] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 3; l3 = l3 + 1) { fRec7[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fVec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec6[l5] = 0.0f; } - for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 3; l6 = l6 + 1) { fRec5[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fVec2[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec4[l8] = 0.0f; } - for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 3; l9 = l9 + 1) { fRec3[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fVec3[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec2[l11] = 0.0f; } - for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 3; l12 = l12 + 1) { fRec1[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { fRec9[l13] = 0.0f; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { fRec11[l14] = 0.0f; } - for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 3; l15 = l15 + 1) { fRec10[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fRec12[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { fRec15[l17] = 0.0f; } - for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 3; l18 = l18 + 1) { fRec14[l18] = 0.0f; } - for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 3; l19 = l19 + 1) { fRec13[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { fRec16[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { fRec20[l21] = 0.0f; } - for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 3; l22 = l22 + 1) { fRec19[l22] = 0.0f; } - for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 3; l23 = l23 + 1) { fRec18[l23] = 0.0f; } - for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 3; l24 = l24 + 1) { fRec17[l24] = 0.0f; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { fRec21[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { fRec26[l26] = 0.0f; } - for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 3; l27 = l27 + 1) { fRec25[l27] = 0.0f; } - for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 3; l28 = l28 + 1) { fRec24[l28] = 0.0f; } - for (int l29 = 0; (l29 < 3); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 3; l29 = l29 + 1) { fRec23[l29] = 0.0f; } - for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 3; l30 = l30 + 1) { fRec22[l30] = 0.0f; } } @@ -907,77 +991,77 @@ class flt_filterbank5x1 : public flt_filterbank5x1_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.fbank5x1"); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("f1000", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f1000", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("f2000", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f2000", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("f250", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f250", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider4, "unit", "db"); - ui_interface->addVerticalSlider("f4000", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f4000", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "db"); - ui_interface->addVerticalSlider("f500", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("f500", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6.0f), FAUSTFLOAT(6.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; FAUSTFLOAT* output2 = outputs[2]; FAUSTFLOAT* output3 = outputs[3]; FAUSTFLOAT* output4 = outputs[4]; - float fSlow0 = (fConst4 * std::pow(10.0f, (0.0500000007f * float(fVslider0)))); - float fSlow1 = (fConst4 * std::pow(10.0f, (0.0500000007f * float(fVslider1)))); - float fSlow2 = (fConst4 * std::pow(10.0f, (0.0500000007f * float(fVslider2)))); - float fSlow3 = (fConst4 * std::pow(10.0f, (0.0500000007f * float(fVslider3)))); - float fSlow4 = (fConst4 * std::pow(10.0f, (0.0500000007f * float(fVslider4)))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst5 * fRec0[1])); + float fSlow0 = fConst4 * std::pow(1e+01f, 0.05f * float(fVslider0)); + float fSlow1 = fConst4 * std::pow(1e+01f, 0.05f * float(fVslider1)); + float fSlow2 = fConst4 * std::pow(1e+01f, 0.05f * float(fVslider2)); + float fSlow3 = fConst4 * std::pow(1e+01f, 0.05f * float(fVslider3)); + float fSlow4 = fConst4 * std::pow(1e+01f, 0.05f * float(fVslider4)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst5 * fRec0[1]; float fTemp0 = float(input0[i0]); fVec0[0] = fTemp0; - fRec8[0] = (0.0f - (fConst25 * ((fConst26 * fRec8[1]) - (fTemp0 + fVec0[1])))); - fRec7[0] = (fRec8[0] - (fConst23 * ((fConst27 * fRec7[2]) + (fConst30 * fRec7[1])))); - float fTemp1 = (fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))); + fRec8[0] = 0.0f - fConst23 * (fConst24 * fRec8[1] - (fTemp0 + fVec0[1])); + fRec7[0] = fRec8[0] - fConst21 * (fConst25 * fRec7[2] + fConst28 * fRec7[1]); + float fTemp1 = fRec7[2] + fRec7[0] + 2.0f * fRec7[1]; fVec1[0] = fTemp1; - fRec6[0] = (0.0f - (fConst19 * ((fConst20 * fRec6[1]) - (fConst23 * (fTemp1 + fVec1[1]))))); - fRec5[0] = (fRec6[0] - (fConst17 * ((fConst31 * fRec5[2]) + (fConst34 * fRec5[1])))); - float fTemp2 = (fRec5[2] + (fRec5[0] + (2.0f * fRec5[1]))); + fRec6[0] = fConst18 * (fConst21 * (fTemp1 + fVec1[1]) - fConst29 * fRec6[1]); + fRec5[0] = fRec6[0] - fConst16 * (fConst30 * fRec5[2] + fConst33 * fRec5[1]); + float fTemp2 = fRec5[2] + fRec5[0] + 2.0f * fRec5[1]; fVec2[0] = fTemp2; - fRec4[0] = (0.0f - (fConst13 * ((fConst14 * fRec4[1]) - (fConst17 * (fTemp2 + fVec2[1]))))); - fRec3[0] = (fRec4[0] - (fConst11 * ((fConst35 * fRec3[2]) + (fConst38 * fRec3[1])))); - float fTemp3 = (fRec3[2] + (fRec3[0] + (2.0f * fRec3[1]))); + fRec4[0] = fConst13 * (fConst16 * (fTemp2 + fVec2[1]) - fConst34 * fRec4[1]); + fRec3[0] = fRec4[0] - fConst11 * (fConst35 * fRec3[2] + fConst38 * fRec3[1]); + float fTemp3 = fRec3[2] + fRec3[0] + 2.0f * fRec3[1]; fVec3[0] = fTemp3; - fRec2[0] = (0.0f - (fConst7 * ((fConst8 * fRec2[1]) - (fConst11 * (fTemp3 + fVec3[1]))))); - fRec1[0] = (fRec2[0] - (fConst3 * ((fConst39 * fRec1[2]) + (fConst42 * fRec1[1])))); - output0[i0] = FAUSTFLOAT((fConst3 * (fRec0[0] * (fRec1[2] + (fRec1[0] + (2.0f * fRec1[1])))))); - fRec9[0] = (fSlow1 + (fConst5 * fRec9[1])); - fRec11[0] = ((fConst11 * ((fConst43 * fTemp3) + (fConst44 * fVec3[1]))) - (fConst45 * fRec11[1])); - fRec10[0] = (fRec11[0] - (fConst3 * ((fConst39 * fRec10[2]) + (fConst42 * fRec10[1])))); - output1[i0] = FAUSTFLOAT((fConst3 * (fRec9[0] * (((fConst41 * fRec10[0]) + (fConst46 * fRec10[1])) + (fConst41 * fRec10[2]))))); - fRec12[0] = (fSlow2 + (fConst5 * fRec12[1])); - fRec15[0] = ((fConst17 * ((fConst47 * fTemp2) + (fConst48 * fVec2[1]))) - (fConst49 * fRec15[1])); - fRec14[0] = (fRec15[0] - (fConst11 * ((fConst35 * fRec14[2]) + (fConst38 * fRec14[1])))); - float fTemp4 = (fConst42 * fRec13[1]); - fRec13[0] = ((fConst11 * (((fConst37 * fRec14[0]) + (fConst50 * fRec14[1])) + (fConst37 * fRec14[2]))) - (fConst51 * ((fConst52 * fRec13[2]) + fTemp4))); - output2[i0] = FAUSTFLOAT((fRec12[0] * (fRec13[2] + (fConst51 * (fTemp4 + (fConst52 * fRec13[0])))))); - fRec16[0] = (fSlow3 + (fConst5 * fRec16[1])); - fRec20[0] = ((fConst23 * ((fConst53 * fTemp1) + (fConst54 * fVec1[1]))) - (fConst55 * fRec20[1])); - fRec19[0] = (fRec20[0] - (fConst17 * ((fConst31 * fRec19[2]) + (fConst34 * fRec19[1])))); - float fTemp5 = (fConst42 * fRec18[1]); - fRec18[0] = ((fConst17 * (((fConst33 * fRec19[0]) + (fConst56 * fRec19[1])) + (fConst33 * fRec19[2]))) - (fConst51 * ((fConst52 * fRec18[2]) + fTemp5))); - float fTemp6 = (fConst38 * fRec17[1]); - fRec17[0] = ((fRec18[2] + (fConst51 * (fTemp5 + (fConst52 * fRec18[0])))) - (fConst57 * ((fConst58 * fRec17[2]) + fTemp6))); - output3[i0] = FAUSTFLOAT((fRec16[0] * (fRec17[2] + (fConst57 * (fTemp6 + (fConst58 * fRec17[0])))))); - fRec21[0] = (fSlow4 + (fConst5 * fRec21[1])); - fRec26[0] = ((fConst59 * fVec0[1]) - (fConst25 * ((fConst26 * fRec26[1]) - (fConst22 * fTemp0)))); - fRec25[0] = (fRec26[0] - (fConst23 * ((fConst27 * fRec25[2]) + (fConst30 * fRec25[1])))); - float fTemp7 = (fConst42 * fRec24[1]); - fRec24[0] = ((fConst23 * (((fConst29 * fRec25[0]) + (fConst60 * fRec25[1])) + (fConst29 * fRec25[2]))) - (fConst51 * ((fConst52 * fRec24[2]) + fTemp7))); - float fTemp8 = (fConst38 * fRec23[1]); - fRec23[0] = ((fRec24[2] + (fConst51 * (fTemp7 + (fConst52 * fRec24[0])))) - (fConst57 * ((fConst58 * fRec23[2]) + fTemp8))); - float fTemp9 = (fConst34 * fRec22[1]); - fRec22[0] = ((fRec23[2] + (fConst57 * (fTemp8 + (fConst58 * fRec23[0])))) - (fConst61 * ((fConst62 * fRec22[2]) + fTemp9))); - output4[i0] = FAUSTFLOAT((fRec21[0] * (fRec22[2] + (fConst61 * (fTemp9 + (fConst62 * fRec22[0])))))); + fRec2[0] = 0.0f - fConst7 * (fConst8 * fRec2[1] - fConst11 * (fTemp3 + fVec3[1])); + fRec1[0] = fRec2[0] - fConst3 * (fConst39 * fRec1[2] + fConst42 * fRec1[1]); + output0[i0] = FAUSTFLOAT(fConst3 * fRec0[0] * (fRec1[2] + fRec1[0] + 2.0f * fRec1[1])); + fRec9[0] = fSlow1 + fConst5 * fRec9[1]; + fRec11[0] = fConst11 * (fConst43 * fTemp3 + fConst44 * fVec3[1]) - fConst45 * fRec11[1]; + fRec10[0] = fRec11[0] - fConst3 * (fConst39 * fRec10[2] + fConst42 * fRec10[1]); + output1[i0] = FAUSTFLOAT(fConst3 * fRec9[0] * (fConst41 * fRec10[0] + fConst46 * fRec10[1] + fConst41 * fRec10[2])); + fRec12[0] = fSlow2 + fConst5 * fRec12[1]; + fRec15[0] = fConst16 * (fConst47 * fTemp2 + fConst48 * fVec2[1]) - fConst49 * fRec15[1]; + fRec14[0] = fRec15[0] - fConst11 * (fConst35 * fRec14[2] + fConst38 * fRec14[1]); + float fTemp4 = fConst42 * fRec13[1]; + fRec13[0] = fConst11 * (fConst37 * fRec14[0] + fConst50 * fRec14[1] + fConst37 * fRec14[2]) - fConst51 * (fConst52 * fRec13[2] + fTemp4); + output2[i0] = FAUSTFLOAT(fRec12[0] * (fRec13[2] + fConst51 * (fTemp4 + fConst52 * fRec13[0]))); + fRec16[0] = fSlow3 + fConst5 * fRec16[1]; + fRec20[0] = fConst21 * (fConst53 * fTemp1 + fConst54 * fVec1[1]) - fConst55 * fRec20[1]; + fRec19[0] = fRec20[0] - fConst16 * (fConst30 * fRec19[2] + fConst33 * fRec19[1]); + float fTemp5 = fConst42 * fRec18[1]; + fRec18[0] = fConst16 * (fConst32 * fRec19[0] + fConst56 * fRec19[1] + fConst32 * fRec19[2]) - fConst51 * (fConst52 * fRec18[2] + fTemp5); + float fTemp6 = fConst38 * fRec17[1]; + fRec17[0] = fRec18[2] + fConst51 * (fTemp5 + fConst52 * fRec18[0]) - fConst57 * (fConst58 * fRec17[2] + fTemp6); + output3[i0] = FAUSTFLOAT(fRec16[0] * (fRec17[2] + fConst57 * (fTemp6 + fConst58 * fRec17[0]))); + fRec21[0] = fSlow4 + fConst5 * fRec21[1]; + fRec26[0] = fConst59 * fVec0[1] - fConst23 * (fConst24 * fRec26[1] - fConst20 * fTemp0); + fRec25[0] = fRec26[0] - fConst21 * (fConst25 * fRec25[2] + fConst28 * fRec25[1]); + float fTemp7 = fConst42 * fRec24[1]; + fRec24[0] = fConst21 * (fConst27 * fRec25[0] + fConst60 * fRec25[1] + fConst27 * fRec25[2]) - fConst51 * (fConst52 * fRec24[2] + fTemp7); + float fTemp8 = fConst38 * fRec23[1]; + fRec23[0] = fRec24[2] + fConst51 * (fTemp7 + fConst52 * fRec24[0]) - fConst57 * (fConst58 * fRec23[2] + fTemp8); + float fTemp9 = fConst33 * fRec22[1]; + fRec22[0] = fRec23[2] + fConst57 * (fTemp8 + fConst58 * fRec23[0]) - fConst61 * (fConst62 * fRec22[2] + fTemp9); + output4[i0] = FAUSTFLOAT(fRec21[0] * (fRec22[2] + fConst61 * (fTemp9 + fConst62 * fRec22[0]))); fRec0[1] = fRec0[0]; fVec0[1] = fVec0[0]; fRec8[1] = fRec8[0]; diff --git a/ceammc/ext/src/flt/flt_freqz.cpp b/ceammc/ext/src/flt/flt_freqz.cpp index b88164f1ee..8804315a63 100644 --- a/ceammc/ext/src/flt/flt_freqz.cpp +++ b/ceammc/ext/src/flt/flt_freqz.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "flt_freqz.h" +#include "ceammc_containers.h" #include "ceammc_factory.h" #include "ceammc_filter.h" @@ -31,7 +32,7 @@ FltFreqZ::FltFreqZ(const PdArgs& args) createOutlet(); cb_ = new ListProperty("@b", { 1 }); - cb_->setListCheckFn([](const AtomList& l) -> bool { return l.size() > 0 && l.allOf(isFloat); }, "invalid list"); + cb_->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() > 0 && lv.allOf(isFloat); }, "invalid list"); cb_->setSuccessFn([this](Property*) { kb_.clear(); kb_.reserve(cb_->value().size()); @@ -43,7 +44,7 @@ FltFreqZ::FltFreqZ(const PdArgs& args) addProperty(cb_); ca_ = new ListProperty("@a"); - ca_->setListCheckFn([](const AtomList& l) -> bool { return l.empty() || l.allOf(isFloat); }, "invalid list"); + ca_->setListCheckFn([](const AtomListView& lv) -> bool { return lv.empty() || lv.allOf(isFloat); }, "invalid list"); ca_->setSuccessFn([this](Property*) { ka_.clear(); ka_.reserve(ca_->value().size() + 1); @@ -70,20 +71,22 @@ void FltFreqZ::onBang() const size_t N = n_->value(); const bool db = db_scale_->value(); - Atom amp[N]; - Atom phase[N]; + AtomList512 amp; + amp.reserve(N); + AtomList512 phase; + phase.reserve(N); floatTo(2, N); for (size_t i = 0; i < N; i++) { t_float w = flt::freq2ang(i, 2 * N); const auto Hw = flt::freqz(w, kb_.begin(), kb_.end(), ka_.begin(), ka_.end()); - amp[i] = db ? 20 * std::log(std::abs(Hw)) : std::abs(Hw); - phase[i] = std::arg(Hw); + amp.push_back(db ? 20 * std::log(std::abs(Hw)) : std::abs(Hw)); + phase.push_back(std::arg(Hw)); } - listTo(1, AtomListView(phase, N)); - listTo(0, AtomListView(amp, N)); + listTo(1, phase.view()); + listTo(0, amp.view()); } void FltFreqZ::dump() const diff --git a/ceammc/ext/src/flt/flt_freqz_tilde.cpp b/ceammc/ext/src/flt/flt_freqz_tilde.cpp index c709e58b6c..95d9c63b46 100644 --- a/ceammc/ext/src/flt/flt_freqz_tilde.cpp +++ b/ceammc/ext/src/flt/flt_freqz_tilde.cpp @@ -28,7 +28,7 @@ FltFreqZTilde::FltFreqZTilde(const PdArgs& args) createSignalOutlet(); cb_ = new ListProperty("@b", { 1 }); - cb_->setListCheckFn([](const AtomList& l) -> bool { return l.size() > 0 && l.allOf(isFloat); }, "invalid list"); + cb_->setListCheckFn([](const AtomListView& lv) -> bool { return lv.size() > 0 && lv.allOf(isFloat); }, "invalid list"); cb_->setSuccessFn([this](Property*) { kb_.clear(); kb_.reserve(cb_->value().size()); @@ -40,7 +40,7 @@ FltFreqZTilde::FltFreqZTilde(const PdArgs& args) addProperty(cb_); ca_ = new ListProperty("@a"); - ca_->setListCheckFn([](const AtomList& l) -> bool { return l.empty() || l.allOf(isFloat); }, "invalid list"); + ca_->setListCheckFn([](const AtomListView& lv) -> bool { return lv.empty() || lv.allOf(isFloat); }, "invalid list"); ca_->setSuccessFn([this](Property*) { ka_.clear(); ka_.reserve(ca_->value().size() + 1); diff --git a/ceammc/ext/src/flt/flt_highshelf.h b/ceammc/ext/src/flt/flt_highshelf.h index f34e628786..c007289107 100644 --- a/ceammc/ext/src/flt/flt_highshelf.h +++ b/ceammc/ext/src/flt/flt_highshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.highshelf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_highshelf -scn flt_highshelf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_highshelf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_highshelf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_highshelf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_highshelf_dsp { +class FAUST_API flt_highshelf_dsp { public: @@ -162,7 +247,7 @@ class flt_highshelf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_highshelf_dsp { +class FAUST_API decorator_dsp : public flt_highshelf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_highshelf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_highshelf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_highshelf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_highshelf : public flt_highshelf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_highshelf #endif @@ -559,6 +636,13 @@ struct flt_highshelf : public flt_highshelf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_highshelf : public flt_highshelf_dsp { private: @@ -578,7 +662,7 @@ class flt_highshelf : public flt_highshelf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_highshelf -scn flt_highshelf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_highshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -594,7 +678,7 @@ class flt_highshelf : public flt_highshelf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -609,25 +693,25 @@ class flt_highshelf : public flt_highshelf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); - fVslider1 = FAUSTFLOAT(10000.0f); + fVslider1 = FAUSTFLOAT(1e+04f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec0[l2] = 0.0f; } } @@ -653,30 +737,30 @@ class flt_highshelf : public flt_highshelf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.highshelf"); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(10000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+04f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst1 * float(fVslider0)); - float fSlow1 = (fConst1 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst2 * fRec1[1])); - float fTemp0 = std::pow(10.0f, (0.0250000004f * fRec1[0])); - fRec2[0] = (fSlow1 + (fConst2 * fRec2[1])); - float fTemp1 = (fConst3 * std::max(0.0f, fRec2[0])); + float fSlow0 = fConst1 * float(fVslider0); + float fSlow1 = fConst1 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst2 * fRec1[1]; + float fTemp0 = std::pow(1e+01f, 0.025f * fRec1[0]); + fRec2[0] = fSlow1 + fConst2 * fRec2[1]; + float fTemp1 = fConst3 * std::max(0.0f, fRec2[0]); float fTemp2 = std::cos(fTemp1); - float fTemp3 = ((fTemp0 + -1.0f) * fTemp2); - float fTemp4 = (std::sqrt(fTemp0) * std::sin(fTemp1)); - float fTemp5 = ((fTemp0 + 1.0f) * fTemp2); - float fTemp6 = ((fTemp0 + fTemp4) + (1.0f - fTemp3)); - fRec0[0] = (float(input0[i0]) - ((((fTemp0 + (1.0f - (fTemp3 + fTemp4))) * fRec0[2]) + (2.0f * ((fTemp0 + (-1.0f - fTemp5)) * fRec0[1]))) / fTemp6)); - float fTemp7 = (fTemp0 + fTemp3); - output0[i0] = FAUSTFLOAT((((((fRec0[0] * fTemp0) * ((fTemp7 + fTemp4) + 1.0f)) + ((fRec0[1] * (0.0f - (2.0f * fTemp0))) * ((fTemp0 + fTemp5) + -1.0f))) + ((fTemp0 * fRec0[2]) * (fTemp7 + (1.0f - fTemp4)))) / fTemp6)); + float fTemp3 = (fTemp0 + -1.0f) * fTemp2; + float fTemp4 = std::sqrt(fTemp0) * std::sin(fTemp1); + float fTemp5 = (fTemp0 + 1.0f) * fTemp2; + float fTemp6 = fTemp0 + fTemp4 + (1.0f - fTemp3); + fRec0[0] = float(input0[i0]) - ((fTemp0 + (1.0f - (fTemp3 + fTemp4))) * fRec0[2] + 2.0f * (fTemp0 + (-1.0f - fTemp5)) * fRec0[1]) / fTemp6; + float fTemp7 = fTemp0 + fTemp3; + output0[i0] = FAUSTFLOAT((fRec0[0] * fTemp0 * (fTemp7 + fTemp4 + 1.0f) + fRec0[1] * (0.0f - 2.0f * fTemp0) * (fTemp0 + fTemp5 + -1.0f) + fTemp0 * fRec0[2] * (fTemp7 + (1.0f - fTemp4))) / fTemp6); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; diff --git a/ceammc/ext/src/flt/flt_hpf12.cpp b/ceammc/ext/src/flt/flt_hpf12.cpp index 0956b30962..144854558c 100644 --- a/ceammc/ext/src/flt/flt_hpf12.cpp +++ b/ceammc/ext/src/flt/flt_hpf12.cpp @@ -4,15 +4,26 @@ using namespace ceammc; class FltHpf12 : public faust_flt_hpf12_tilde { + Property* freq_; + public: FltHpf12(const PdArgs& args) : faust_flt_hpf12_tilde(args) + , freq_(property("@freq")) { bindPositionalArgsToProps({ gensym("@freq") }); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (freq_) + freq_->set(lv); } }; void setup_flt_hpf12_tilde() { SoundExternalFactory obj("flt.hpf12~"); + obj.setXletsInfo({ "signal: input", "float: freq" }, { "signal: output" }); } diff --git a/ceammc/ext/src/flt/flt_hpf12.h b/ceammc/ext/src/flt/flt_hpf12.h index 1060ca13b8..e803d4ee73 100644 --- a/ceammc/ext/src/flt/flt_hpf12.h +++ b/ceammc/ext/src/flt/flt_hpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.hpf12" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_hpf12 -scn flt_hpf12_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_hpf12_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_hpf12_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_hpf12_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_hpf12_dsp { +class FAUST_API flt_hpf12_dsp { public: @@ -162,7 +247,7 @@ class flt_hpf12_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_hpf12_dsp { +class FAUST_API decorator_dsp : public flt_hpf12_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_hpf12_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_hpf12_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_hpf12_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_hpf12 : public flt_hpf12_dsp { #include #include -static float flt_hpf12_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_hpf12 #endif @@ -562,6 +636,16 @@ static float flt_hpf12_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_hpf12_faustpower2_f(float value) { + return value * value; +} + class flt_hpf12 : public flt_hpf12_dsp { private: @@ -579,7 +663,7 @@ class flt_hpf12 : public flt_hpf12_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_hpf12 -scn flt_hpf12_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_hpf12.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -608,7 +692,7 @@ class flt_hpf12 : public flt_hpf12_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -623,21 +707,21 @@ class flt_hpf12 : public flt_hpf12_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(10000.0f); + fVslider0 = FAUSTFLOAT(1e+04f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -663,22 +747,22 @@ class flt_hpf12 : public flt_hpf12_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.hpf12"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(10000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+04f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = std::tan((fConst1 * fRec1[0])); - float fTemp1 = (1.0f / fTemp0); + float fSlow0 = fConst2 * float(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + float fTemp0 = std::tan(fConst1 * fRec1[0]); + float fTemp1 = 1.0f / fTemp0; float fTemp2 = flt_hpf12_faustpower2_f(fTemp0); - float fTemp3 = (((fTemp1 + 1.41421354f) / fTemp0) + 1.0f); - fRec0[0] = (float(input0[i0]) - (((fRec0[2] * (((fTemp1 + -1.41421354f) / fTemp0) + 1.0f)) + (2.0f * (fRec0[1] * (1.0f - (1.0f / fTemp2))))) / fTemp3)); - output0[i0] = FAUSTFLOAT(((((fRec0[1] * (0.0f - (2.0f / fTemp2))) + (fRec0[0] / fTemp2)) + (fRec0[2] / fTemp2)) / fTemp3)); + float fTemp3 = (fTemp1 + 1.4142135f) / fTemp0 + 1.0f; + fRec0[0] = float(input0[i0]) - (fRec0[2] * ((fTemp1 + -1.4142135f) / fTemp0 + 1.0f) + 2.0f * fRec0[1] * (1.0f - 1.0f / fTemp2)) / fTemp3; + output0[i0] = FAUSTFLOAT((fRec0[1] * (0.0f - 2.0f / fTemp2) + fRec0[0] / fTemp2 + fRec0[2] / fTemp2) / fTemp3); fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; diff --git a/ceammc/ext/src/flt/flt_hpf24.cpp b/ceammc/ext/src/flt/flt_hpf24.cpp index 9302668794..5f4cc145e8 100644 --- a/ceammc/ext/src/flt/flt_hpf24.cpp +++ b/ceammc/ext/src/flt/flt_hpf24.cpp @@ -4,15 +4,26 @@ using namespace ceammc; class FltHpf24 : public faust_flt_hpf24_tilde { + Property* freq_; + public: FltHpf24(const PdArgs& args) : faust_flt_hpf24_tilde(args) + , freq_(property("@freq")) { bindPositionalArgsToProps({ gensym("@freq") }); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (freq_) + freq_->set(lv); } }; void setup_flt_hpf24_tilde() { SoundExternalFactory obj("flt.hpf24~"); + obj.setXletsInfo({ "signal: input", "float: freq" }, { "signal: output" }); } diff --git a/ceammc/ext/src/flt/flt_hpf24.h b/ceammc/ext/src/flt/flt_hpf24.h index a08717d1b2..699ef7c6d3 100644 --- a/ceammc/ext/src/flt/flt_hpf24.h +++ b/ceammc/ext/src/flt/flt_hpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.hpf24" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_hpf24 -scn flt_hpf24_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_hpf24_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_hpf24_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_hpf24_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_hpf24_dsp { +class FAUST_API flt_hpf24_dsp { public: @@ -162,7 +247,7 @@ class flt_hpf24_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_hpf24_dsp { +class FAUST_API decorator_dsp : public flt_hpf24_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_hpf24_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_hpf24_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_hpf24_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_hpf24 : public flt_hpf24_dsp { #include #include -static float flt_hpf24_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_hpf24 #endif @@ -562,6 +636,16 @@ static float flt_hpf24_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_hpf24_faustpower2_f(float value) { + return value * value; +} + class flt_hpf24 : public flt_hpf24_dsp { private: @@ -580,7 +664,7 @@ class flt_hpf24 : public flt_hpf24_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_hpf24 -scn flt_hpf24_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_hpf24.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -609,7 +693,7 @@ class flt_hpf24 : public flt_hpf24_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -624,24 +708,24 @@ class flt_hpf24 : public flt_hpf24_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(10000.0f); + fVslider0 = FAUSTFLOAT(1e+04f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec1[l2] = 0.0f; } } @@ -667,26 +751,26 @@ class flt_hpf24 : public flt_hpf24_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.hpf24"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(10000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+04f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst3 * fRec0[1])); - float fTemp0 = std::tan((fConst1 * fRec0[0])); + float fSlow0 = fConst2 * float(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst3 * fRec0[1]; + float fTemp0 = std::tan(fConst1 * fRec0[0]); float fTemp1 = flt_hpf24_faustpower2_f(fTemp0); - float fTemp2 = (0.0f - (2.0f / fTemp1)); - float fTemp3 = (1.0f / fTemp0); - float fTemp4 = (1.0f - (1.0f / fTemp1)); - float fTemp5 = (((fTemp3 + 1.84775901f) / fTemp0) + 1.0f); - fRec2[0] = (float(input0[i0]) - (((fRec2[2] * (((fTemp3 + -1.84775901f) / fTemp0) + 1.0f)) + (2.0f * (fRec2[1] * fTemp4))) / fTemp5)); - float fTemp6 = (((fTemp3 + 0.765366852f) / fTemp0) + 1.0f); - fRec1[0] = (((((fRec2[1] * fTemp2) + (fRec2[0] / fTemp1)) + (fRec2[2] / fTemp1)) / fTemp5) - (((fRec1[2] * (((fTemp3 + -0.765366852f) / fTemp0) + 1.0f)) + (2.0f * (fTemp4 * fRec1[1]))) / fTemp6)); - output0[i0] = FAUSTFLOAT(((((fTemp2 * fRec1[1]) + (fRec1[0] / fTemp1)) + (fRec1[2] / fTemp1)) / fTemp6)); + float fTemp2 = 0.0f - 2.0f / fTemp1; + float fTemp3 = 1.0f / fTemp0; + float fTemp4 = 1.0f - 1.0f / fTemp1; + float fTemp5 = (fTemp3 + 1.847759f) / fTemp0 + 1.0f; + fRec2[0] = float(input0[i0]) - (fRec2[2] * ((fTemp3 + -1.847759f) / fTemp0 + 1.0f) + 2.0f * fRec2[1] * fTemp4) / fTemp5; + float fTemp6 = (fTemp3 + 0.76536685f) / fTemp0 + 1.0f; + fRec1[0] = (fRec2[1] * fTemp2 + fRec2[0] / fTemp1 + fRec2[2] / fTemp1) / fTemp5 - (fRec1[2] * ((fTemp3 + -0.76536685f) / fTemp0 + 1.0f) + 2.0f * fTemp4 * fRec1[1]) / fTemp6; + output0[i0] = FAUSTFLOAT((fTemp2 * fRec1[1] + fRec1[0] / fTemp1 + fRec1[2] / fTemp1) / fTemp6); fRec0[1] = fRec0[0]; fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/flt/flt_lowshelf.h b/ceammc/ext/src/flt/flt_lowshelf.h index ac42b4283b..5e0081ee2b 100644 --- a/ceammc/ext/src/flt/flt_lowshelf.h +++ b/ceammc/ext/src/flt/flt_lowshelf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lowshelf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lowshelf -scn flt_lowshelf_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lowshelf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_lowshelf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_lowshelf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_lowshelf_dsp { +class FAUST_API flt_lowshelf_dsp { public: @@ -162,7 +247,7 @@ class flt_lowshelf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_lowshelf_dsp { +class FAUST_API decorator_dsp : public flt_lowshelf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_lowshelf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_lowshelf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_lowshelf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct flt_lowshelf : public flt_lowshelf_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS flt_lowshelf #endif @@ -559,6 +636,13 @@ struct flt_lowshelf : public flt_lowshelf_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class flt_lowshelf : public flt_lowshelf_dsp { private: @@ -578,7 +662,7 @@ class flt_lowshelf : public flt_lowshelf_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lowshelf -scn flt_lowshelf_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_lowshelf.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -594,7 +678,7 @@ class flt_lowshelf : public flt_lowshelf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -609,25 +693,25 @@ class flt_lowshelf : public flt_lowshelf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { fVslider0 = FAUSTFLOAT(0.0f); - fVslider1 = FAUSTFLOAT(1000.0f); + fVslider1 = FAUSTFLOAT(1e+03f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec1[l2] = 0.0f; } } @@ -653,30 +737,30 @@ class flt_lowshelf : public flt_lowshelf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.lowshelf"); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-15.0f), FAUSTFLOAT(15.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst1 * float(fVslider0)); - float fSlow1 = (fConst1 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow0 + (fConst2 * fRec0[1])); - float fTemp0 = std::pow(10.0f, (0.0250000004f * fRec0[0])); - fRec2[0] = (fSlow1 + (fConst2 * fRec2[1])); - float fTemp1 = (fConst3 * std::max(0.0f, fRec2[0])); + float fSlow0 = fConst1 * float(fVslider0); + float fSlow1 = fConst1 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; + float fTemp0 = std::pow(1e+01f, 0.025f * fRec0[0]); + fRec2[0] = fSlow1 + fConst2 * fRec2[1]; + float fTemp1 = fConst3 * std::max(0.0f, fRec2[0]); float fTemp2 = std::cos(fTemp1); - float fTemp3 = ((fTemp0 + 1.0f) * fTemp2); - float fTemp4 = ((fTemp0 + -1.0f) * fTemp2); - float fTemp5 = (fTemp0 + fTemp4); - float fTemp6 = (std::sqrt(fTemp0) * std::sin(fTemp1)); - float fTemp7 = ((fTemp6 + fTemp5) + 1.0f); - fRec1[0] = (float(input0[i0]) - ((((0.0f - (2.0f * ((fTemp0 + fTemp3) + -1.0f))) * fRec1[1]) + ((fTemp5 + (1.0f - fTemp6)) * fRec1[2])) / fTemp7)); - output0[i0] = FAUSTFLOAT(((fTemp0 * (((fRec1[0] * ((fTemp0 + fTemp6) + (1.0f - fTemp4))) + (2.0f * (fRec1[1] * (fTemp0 + (-1.0f - fTemp3))))) + (fRec1[2] * (fTemp0 + (1.0f - (fTemp4 + fTemp6)))))) / fTemp7)); + float fTemp3 = (fTemp0 + 1.0f) * fTemp2; + float fTemp4 = (fTemp0 + -1.0f) * fTemp2; + float fTemp5 = fTemp0 + fTemp4; + float fTemp6 = std::sqrt(fTemp0) * std::sin(fTemp1); + float fTemp7 = fTemp6 + fTemp5 + 1.0f; + fRec1[0] = float(input0[i0]) - ((0.0f - 2.0f * (fTemp0 + fTemp3 + -1.0f)) * fRec1[1] + (fTemp5 + (1.0f - fTemp6)) * fRec1[2]) / fTemp7; + output0[i0] = FAUSTFLOAT(fTemp0 * (fRec1[0] * (fTemp0 + fTemp6 + (1.0f - fTemp4)) + 2.0f * fRec1[1] * (fTemp0 + (-1.0f - fTemp3)) + fRec1[2] * (fTemp0 + (1.0f - (fTemp4 + fTemp6)))) / fTemp7); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec1[2] = fRec1[1]; diff --git a/ceammc/ext/src/flt/flt_lpf12.cpp b/ceammc/ext/src/flt/flt_lpf12.cpp index 1b444a040f..0358272d9e 100644 --- a/ceammc/ext/src/flt/flt_lpf12.cpp +++ b/ceammc/ext/src/flt/flt_lpf12.cpp @@ -4,15 +4,26 @@ using namespace ceammc; class FltLpf12 : public faust_flt_lpf12_tilde { + Property* freq_; + public: FltLpf12(const PdArgs& args) : faust_flt_lpf12_tilde(args) + , freq_(property("@freq")) { bindPositionalArgsToProps({ gensym("@freq") }); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (freq_) + freq_->set(lv); } }; void setup_flt_lpf12_tilde() { SoundExternalFactory obj("flt.lpf12~"); + obj.setXletsInfo({ "signal: input", "float: freq" }, { "signal: output" }); } diff --git a/ceammc/ext/src/flt/flt_lpf12.h b/ceammc/ext/src/flt/flt_lpf12.h index 67ba442da5..4559593c5a 100644 --- a/ceammc/ext/src/flt/flt_lpf12.h +++ b/ceammc/ext/src/flt/flt_lpf12.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lpf12" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lpf12 -scn flt_lpf12_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lpf12_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_lpf12_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_lpf12_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_lpf12_dsp { +class FAUST_API flt_lpf12_dsp { public: @@ -162,7 +247,7 @@ class flt_lpf12_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_lpf12_dsp { +class FAUST_API decorator_dsp : public flt_lpf12_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_lpf12_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_lpf12_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_lpf12_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_lpf12 : public flt_lpf12_dsp { #include #include -static float flt_lpf12_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_lpf12 #endif @@ -562,6 +636,16 @@ static float flt_lpf12_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_lpf12_faustpower2_f(float value) { + return value * value; +} + class flt_lpf12 : public flt_lpf12_dsp { private: @@ -579,7 +663,7 @@ class flt_lpf12 : public flt_lpf12_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lpf12 -scn flt_lpf12_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_lpf12.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -609,7 +693,7 @@ class flt_lpf12 : public flt_lpf12_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -624,21 +708,21 @@ class flt_lpf12 : public flt_lpf12_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -664,21 +748,21 @@ class flt_lpf12 : public flt_lpf12_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.lpf12"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = std::tan((fConst1 * fRec1[0])); - float fTemp1 = (1.0f / fTemp0); - float fTemp2 = (((fTemp1 + 1.41421354f) / fTemp0) + 1.0f); - fRec0[0] = (float(input0[i0]) - (((fRec0[2] * (((fTemp1 + -1.41421354f) / fTemp0) + 1.0f)) + (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_lpf12_faustpower2_f(fTemp0)))))) / fTemp2)); - output0[i0] = FAUSTFLOAT(((fRec0[2] + (fRec0[0] + (2.0f * fRec0[1]))) / fTemp2)); + float fSlow0 = fConst2 * float(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + float fTemp0 = std::tan(fConst1 * fRec1[0]); + float fTemp1 = 1.0f / fTemp0; + float fTemp2 = (fTemp1 + 1.4142135f) / fTemp0 + 1.0f; + fRec0[0] = float(input0[i0]) - (fRec0[2] * ((fTemp1 + -1.4142135f) / fTemp0 + 1.0f) + 2.0f * fRec0[1] * (1.0f - 1.0f / flt_lpf12_faustpower2_f(fTemp0))) / fTemp2; + output0[i0] = FAUSTFLOAT((fRec0[2] + fRec0[0] + 2.0f * fRec0[1]) / fTemp2); fRec1[1] = fRec1[0]; fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; diff --git a/ceammc/ext/src/flt/flt_lpf24.cpp b/ceammc/ext/src/flt/flt_lpf24.cpp index 646d5c4ad1..43e612eaa3 100644 --- a/ceammc/ext/src/flt/flt_lpf24.cpp +++ b/ceammc/ext/src/flt/flt_lpf24.cpp @@ -4,15 +4,26 @@ using namespace ceammc; class FltLpf24 : public faust_flt_lpf24_tilde { + Property* freq_; + public: FltLpf24(const PdArgs& args) : faust_flt_lpf24_tilde(args) + , freq_(property("@freq")) { bindPositionalArgsToProps({ gensym("@freq") }); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (freq_) + freq_->set(lv); } }; void setup_flt_lpf24_tilde() { SoundExternalFactory obj("flt.lpf24~"); + obj.setXletsInfo({ "signal: input", "float: freq" }, { "signal: output" }); } diff --git a/ceammc/ext/src/flt/flt_lpf24.h b/ceammc/ext/src/flt/flt_lpf24.h index e22192725c..e37645696e 100644 --- a/ceammc/ext/src/flt/flt_lpf24.h +++ b/ceammc/ext/src/flt/flt_lpf24.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.lpf24" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lpf24 -scn flt_lpf24_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_lpf24_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_lpf24_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_lpf24_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_lpf24_dsp { +class FAUST_API flt_lpf24_dsp { public: @@ -162,7 +247,7 @@ class flt_lpf24_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_lpf24_dsp { +class FAUST_API decorator_dsp : public flt_lpf24_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_lpf24_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_lpf24_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_lpf24_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_lpf24 : public flt_lpf24_dsp { #include #include -static float flt_lpf24_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_lpf24 #endif @@ -562,6 +636,16 @@ static float flt_lpf24_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_lpf24_faustpower2_f(float value) { + return value * value; +} + class flt_lpf24 : public flt_lpf24_dsp { private: @@ -580,7 +664,7 @@ class flt_lpf24 : public flt_lpf24_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_lpf24 -scn flt_lpf24_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_lpf24.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -610,7 +694,7 @@ class flt_lpf24 : public flt_lpf24_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -625,24 +709,24 @@ class flt_lpf24 : public flt_lpf24_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(1e+03f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec2[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec0[l2] = 0.0f; } } @@ -668,24 +752,24 @@ class flt_lpf24 : public flt_lpf24_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.lpf24"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec2[0] = (fSlow0 + (fConst3 * fRec2[1])); - float fTemp0 = std::tan((fConst1 * fRec2[0])); - float fTemp1 = (1.0f / fTemp0); - float fTemp2 = (1.0f - (1.0f / flt_lpf24_faustpower2_f(fTemp0))); - float fTemp3 = (((fTemp1 + 1.84775901f) / fTemp0) + 1.0f); - fRec1[0] = (float(input0[i0]) - (((fRec1[2] * (((fTemp1 + -1.84775901f) / fTemp0) + 1.0f)) + (2.0f * (fRec1[1] * fTemp2))) / fTemp3)); - float fTemp4 = (((fTemp1 + 0.765366852f) / fTemp0) + 1.0f); - fRec0[0] = (((fRec1[2] + (fRec1[0] + (2.0f * fRec1[1]))) / fTemp3) - (((fRec0[2] * (((fTemp1 + -0.765366852f) / fTemp0) + 1.0f)) + (2.0f * (fTemp2 * fRec0[1]))) / fTemp4)); - output0[i0] = FAUSTFLOAT(((fRec0[2] + (fRec0[0] + (2.0f * fRec0[1]))) / fTemp4)); + float fSlow0 = fConst2 * float(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec2[0] = fSlow0 + fConst3 * fRec2[1]; + float fTemp0 = std::tan(fConst1 * fRec2[0]); + float fTemp1 = 1.0f / fTemp0; + float fTemp2 = 1.0f - 1.0f / flt_lpf24_faustpower2_f(fTemp0); + float fTemp3 = (fTemp1 + 1.847759f) / fTemp0 + 1.0f; + fRec1[0] = float(input0[i0]) - (fRec1[2] * ((fTemp1 + -1.847759f) / fTemp0 + 1.0f) + 2.0f * fRec1[1] * fTemp2) / fTemp3; + float fTemp4 = (fTemp1 + 0.76536685f) / fTemp0 + 1.0f; + fRec0[0] = (fRec1[2] + fRec1[0] + 2.0f * fRec1[1]) / fTemp3 - (fRec0[2] * ((fTemp1 + -0.76536685f) / fTemp0 + 1.0f) + 2.0f * fTemp2 * fRec0[1]) / fTemp4; + output0[i0] = FAUSTFLOAT((fRec0[2] + fRec0[0] + 2.0f * fRec0[1]) / fTemp4); fRec2[1] = fRec2[0]; fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/flt/flt_moog_vcf.h b/ceammc/ext/src/flt/flt_moog_vcf.h index ac32a66ece..8d159e2090 100644 --- a/ceammc/ext/src/flt/flt_moog_vcf.h +++ b/ceammc/ext/src/flt/flt_moog_vcf.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.moog_vcf" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_moog_vcf -scn flt_moog_vcf_dsp -es 1 -mcd 16 -double -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_moog_vcf_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_moog_vcf_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_moog_vcf_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_moog_vcf_dsp { +class FAUST_API flt_moog_vcf_dsp { public: @@ -162,7 +247,7 @@ class flt_moog_vcf_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_moog_vcf_dsp { +class FAUST_API decorator_dsp : public flt_moog_vcf_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_moog_vcf_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_moog_vcf_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_moog_vcf_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_moog_vcf : public flt_moog_vcf_dsp { #include #include -static double flt_moog_vcf_faustpower2_f(double value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_moog_vcf #endif @@ -562,6 +636,16 @@ static double flt_moog_vcf_faustpower2_f(double value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_moog_vcf_faustpower2_f(double value) { + return value * value; +} + class flt_moog_vcf : public flt_moog_vcf_dsp { private: @@ -581,8 +665,8 @@ class flt_moog_vcf : public flt_moog_vcf_dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -double -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_moog_vcf -scn flt_moog_vcf_dsp -es 1 -mcd 16 -double -ftz 0"); m->declare("filename", "flt_moog_vcf.dsp"); m->declare("filters.lib/allpassnnlt:author", "Julius O. Smith III"); m->declare("filters.lib/allpassnnlt:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -602,7 +686,7 @@ class flt_moog_vcf : public flt_moog_vcf_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("vaeffects.lib/moog_vcf_2bn:author", "Julius O. Smith III"); m->declare("vaeffects.lib/moog_vcf_2bn:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("vaeffects.lib/moog_vcf_2bn:license", "MIT-style STK-4.3 license"); @@ -622,30 +706,30 @@ class flt_moog_vcf : public flt_moog_vcf_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - double fConst0 = std::min(192000.0, std::max(1.0, double(fSampleRate))); - fConst1 = (44.100000000000001 / fConst0); - fConst2 = (1.0 - fConst1); - fConst3 = (3.1415926535897931 / fConst0); + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + fConst1 = 44.1 / fConst0; + fConst2 = 1.0 - fConst1; + fConst3 = 3.141592653589793 / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(0.40000000000000002); + fVslider0 = FAUSTFLOAT(0.4); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec3[l1] = 0.0; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec6[l3] = 0.0; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec4[l4] = 0.0; } } @@ -670,59 +754,59 @@ class flt_moog_vcf : public flt_moog_vcf_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.moog_vcf"); - ui_interface->addVerticalSlider("res", &fVslider0, FAUSTFLOAT(0.40000000000000002), FAUSTFLOAT(0.0), FAUSTFLOAT(1.0), FAUSTFLOAT(0.001)); + ui_interface->addVerticalSlider("res", &fVslider0, FAUSTFLOAT(0.4), FAUSTFLOAT(0.0), FAUSTFLOAT(1.0), FAUSTFLOAT(0.001)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; - double fSlow0 = (fConst1 * double(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + double fSlow0 = fConst1 * double(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { double fTemp0 = double(input0[i0]); - fRec0[0] = (fSlow0 + (fConst2 * fRec0[1])); - double fTemp1 = flt_moog_vcf_faustpower2_f((1.4141994202374715 * fRec0[0])); - double fTemp2 = (1.9999800000000003 * fRec0[0]); - double fTemp3 = (fTemp1 + fTemp2); - double fTemp4 = (fTemp2 + 2.0); - double fTemp5 = std::tan((fConst3 * std::max(double(input1[i0]), 20.0))); - double fTemp6 = (1.0 / fTemp5); - double fTemp7 = ((fTemp1 + (fTemp2 + ((fTemp4 + fTemp6) / fTemp5))) + 1.0); - double fTemp8 = ((fTemp3 + (1.0 - ((fTemp4 - fTemp6) / fTemp5))) / fTemp7); - double fTemp9 = std::max(-0.99999999999999978, std::min(0.99999999999999978, fTemp8)); - double fTemp10 = (1.0 - flt_moog_vcf_faustpower2_f(fTemp9)); + fRec0[0] = fSlow0 + fConst2 * fRec0[1]; + double fTemp1 = flt_moog_vcf_faustpower2_f(1.4141994202374715 * fRec0[0]); + double fTemp2 = 1.9999800000000003 * fRec0[0]; + double fTemp3 = fTemp1 + fTemp2; + double fTemp4 = fTemp2 + 2.0; + double fTemp5 = std::tan(fConst3 * std::max(double(input1[i0]), 2e+01)); + double fTemp6 = 1.0 / fTemp5; + double fTemp7 = fTemp2 + fTemp1 + (fTemp4 + fTemp6) / fTemp5 + 1.0; + double fTemp8 = (fTemp3 + (1.0 - (fTemp4 - fTemp6) / fTemp5)) / fTemp7; + double fTemp9 = std::max(-0.9999999999999998, std::min(0.9999999999999998, fTemp8)); + double fTemp10 = 1.0 - flt_moog_vcf_faustpower2_f(fTemp9); double fTemp11 = std::sqrt(std::max(0.0, fTemp10)); - double fTemp12 = ((fTemp0 * fTemp11) - (fTemp9 * fRec1[1])); - double fTemp13 = (1.0 / flt_moog_vcf_faustpower2_f(fTemp5)); - double fTemp14 = (fTemp3 + (1.0 - fTemp13)); - double fTemp15 = std::max(-0.99999999999999978, std::min(0.99999999999999978, (2.0 * (fTemp14 / (fTemp7 * (fTemp8 + 1.0)))))); - double fTemp16 = (1.0 - flt_moog_vcf_faustpower2_f(fTemp15)); + double fTemp12 = fTemp0 * fTemp11 - fTemp9 * fRec1[1]; + double fTemp13 = 1.0 / flt_moog_vcf_faustpower2_f(fTemp5); + double fTemp14 = fTemp3 + (1.0 - fTemp13); + double fTemp15 = std::max(-0.9999999999999998, std::min(0.9999999999999998, 2.0 * (fTemp14 / (fTemp7 * (fTemp8 + 1.0))))); + double fTemp16 = 1.0 - flt_moog_vcf_faustpower2_f(fTemp15); double fTemp17 = std::sqrt(std::max(0.0, fTemp16)); - fRec3[0] = ((fTemp12 * fTemp17) - (fTemp15 * fRec3[1])); - fRec1[0] = ((fTemp12 * fTemp15) + (fRec3[1] * fTemp17)); + fRec3[0] = fTemp12 * fTemp17 - fTemp15 * fRec3[1]; + fRec1[0] = fTemp12 * fTemp15 + fRec3[1] * fTemp17; double fRec2 = fRec3[0]; - double fTemp18 = (1.0 - (fTemp14 / fTemp7)); + double fTemp18 = 1.0 - fTemp14 / fTemp7; double fTemp19 = std::sqrt(fTemp10); - double fTemp20 = ((((fTemp0 * fTemp9) + (fRec1[1] * fTemp11)) + (2.0 * ((fRec1[0] * fTemp18) / fTemp19))) + ((fRec2 * ((1.0 - fTemp8) - (2.0 * (fTemp15 * fTemp18)))) / (fTemp19 * std::sqrt(fTemp16)))); - double fTemp21 = (2.0 - fTemp2); - double fTemp22 = (1.0 - fTemp2); - double fTemp23 = ((fTemp1 + ((fTemp6 + fTemp21) / fTemp5)) + fTemp22); - double fTemp24 = (((fTemp1 + ((fTemp6 - fTemp21) / fTemp5)) + fTemp22) / fTemp23); - double fTemp25 = std::max(-0.99999999999999978, std::min(0.99999999999999978, fTemp24)); - double fTemp26 = (1.0 - flt_moog_vcf_faustpower2_f(fTemp25)); + double fTemp20 = fTemp0 * fTemp9 + fRec1[1] * fTemp11 + 2.0 * (fRec1[0] * fTemp18 / fTemp19) + fRec2 * (1.0 - fTemp8 - 2.0 * fTemp15 * fTemp18) / (fTemp19 * std::sqrt(fTemp16)); + double fTemp21 = 2.0 - fTemp2; + double fTemp22 = 1.0 - fTemp2; + double fTemp23 = fTemp1 + (fTemp6 + fTemp21) / fTemp5 + fTemp22; + double fTemp24 = (fTemp1 + (fTemp6 - fTemp21) / fTemp5 + fTemp22) / fTemp23; + double fTemp25 = std::max(-0.9999999999999998, std::min(0.9999999999999998, fTemp24)); + double fTemp26 = 1.0 - flt_moog_vcf_faustpower2_f(fTemp25); double fTemp27 = std::sqrt(std::max(0.0, fTemp26)); - double fTemp28 = (((fTemp20 * fTemp27) / fTemp7) - (fTemp25 * fRec4[1])); - double fTemp29 = (fTemp1 + (1.0 - (fTemp2 + fTemp13))); - double fTemp30 = std::max(-0.99999999999999978, std::min(0.99999999999999978, (2.0 * (fTemp29 / (fTemp23 * (fTemp24 + 1.0)))))); - double fTemp31 = (1.0 - flt_moog_vcf_faustpower2_f(fTemp30)); + double fTemp28 = fTemp20 * fTemp27 / fTemp7 - fTemp25 * fRec4[1]; + double fTemp29 = fTemp1 + (1.0 - (fTemp2 + fTemp13)); + double fTemp30 = std::max(-0.9999999999999998, std::min(0.9999999999999998, 2.0 * (fTemp29 / (fTemp23 * (fTemp24 + 1.0))))); + double fTemp31 = 1.0 - flt_moog_vcf_faustpower2_f(fTemp30); double fTemp32 = std::sqrt(std::max(0.0, fTemp31)); - fRec6[0] = ((fTemp28 * fTemp32) - (fTemp30 * fRec6[1])); - fRec4[0] = ((fTemp28 * fTemp30) + (fRec6[1] * fTemp32)); + fRec6[0] = fTemp28 * fTemp32 - fTemp30 * fRec6[1]; + fRec4[0] = fTemp28 * fTemp30 + fRec6[1] * fTemp32; double fRec5 = fRec6[0]; - double fTemp33 = (1.0 - (fTemp29 / fTemp23)); + double fTemp33 = 1.0 - fTemp29 / fTemp23; double fTemp34 = std::sqrt(fTemp26); - output0[i0] = FAUSTFLOAT(((((((fTemp20 * fTemp25) / fTemp7) + (fRec4[1] * fTemp27)) + (2.0 * ((fRec4[0] * fTemp33) / fTemp34))) + ((fRec5 * ((1.0 - fTemp24) - (2.0 * (fTemp30 * fTemp33)))) / (fTemp34 * std::sqrt(fTemp31)))) / fTemp23)); + output0[i0] = FAUSTFLOAT((fTemp20 * fTemp25 / fTemp7 + fRec4[1] * fTemp27 + 2.0 * (fRec4[0] * fTemp33 / fTemp34) + fRec5 * (1.0 - fTemp24 - 2.0 * fTemp30 * fTemp33) / (fTemp34 * std::sqrt(fTemp31))) / fTemp23); fRec0[1] = fRec0[0]; fRec3[1] = fRec3[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/flt/flt_notch.h b/ceammc/ext/src/flt/flt_notch.h index 79b389be7d..fea066a6fe 100644 --- a/ceammc/ext/src/flt/flt_notch.h +++ b/ceammc/ext/src/flt/flt_notch.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.notch" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_notch -scn flt_notch_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_notch_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_notch_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_notch_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_notch_dsp { +class FAUST_API flt_notch_dsp { public: @@ -162,7 +247,7 @@ class flt_notch_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_notch_dsp { +class FAUST_API decorator_dsp : public flt_notch_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_notch_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_notch_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_notch_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_notch : public flt_notch_dsp { #include #include -static float flt_notch_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_notch #endif @@ -562,6 +636,16 @@ static float flt_notch_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float flt_notch_faustpower2_f(float value) { + return value * value; +} + class flt_notch : public flt_notch_dsp { private: @@ -582,7 +666,7 @@ class flt_notch : public flt_notch_dsp { void metadata(Meta* m) { m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_notch -scn flt_notch_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "flt_notch.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -608,7 +692,7 @@ class flt_notch : public flt_notch_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -623,26 +707,26 @@ class flt_notch : public flt_notch_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (1.57079637f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); - fConst4 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.5707964f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; + fConst4 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(50.0f); - fVslider1 = FAUSTFLOAT(1000.0f); + fVslider0 = FAUSTFLOAT(5e+01f); + fVslider1 = FAUSTFLOAT(1e+03f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec1[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec0[l2] = 0.0f; } } @@ -668,27 +752,27 @@ class flt_notch : public flt_notch_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.notch"); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("width", &fVslider0, FAUSTFLOAT(50.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(10000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("width", &fVslider0, FAUSTFLOAT(5e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+04f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = (fConst1 * fRec1[0]); - float fTemp1 = flt_notch_faustpower2_f((1.0f - fTemp0)); - float fTemp2 = flt_notch_faustpower2_f((fTemp0 + 1.0f)); - float fTemp3 = ((fTemp1 / fTemp2) + 1.0f); - fRec2[0] = (fSlow1 + (fConst3 * fRec2[1])); - float fTemp4 = (fRec0[1] * (0.0f - (fTemp3 * std::cos((fConst4 * fRec2[0]))))); - fRec0[0] = (float(input0[i0]) - (fTemp4 + ((fTemp1 * fRec0[2]) / fTemp2))); - output0[i0] = FAUSTFLOAT((fTemp4 + (0.5f * (fTemp3 * (fRec0[0] + fRec0[2]))))); + float fSlow0 = fConst2 * float(fVslider0); + float fSlow1 = fConst2 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + float fTemp0 = fConst1 * fRec1[0]; + float fTemp1 = flt_notch_faustpower2_f(1.0f - fTemp0); + float fTemp2 = flt_notch_faustpower2_f(fTemp0 + 1.0f); + float fTemp3 = fTemp1 / fTemp2 + 1.0f; + fRec2[0] = fSlow1 + fConst3 * fRec2[1]; + float fTemp4 = fRec0[1] * (0.0f - fTemp3 * std::cos(fConst4 * fRec2[0])); + fRec0[0] = float(input0[i0]) - (fTemp4 + fTemp1 * fRec0[2] / fTemp2); + output0[i0] = FAUSTFLOAT(fTemp4 + 0.5f * fTemp3 * (fRec0[0] + fRec0[2])); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; diff --git a/ceammc/ext/src/flt/flt_resonbp.cpp b/ceammc/ext/src/flt/flt_resonbp.cpp index 43613a1911..cc1d47cc44 100644 --- a/ceammc/ext/src/flt/flt_resonbp.cpp +++ b/ceammc/ext/src/flt/flt_resonbp.cpp @@ -4,18 +4,36 @@ using namespace ceammc; class FltResonBp : public faust_flt_resonbp_tilde { + Property *freq_, *q_; + public: FltResonBp(const PdArgs& args) : faust_flt_resonbp_tilde(args) + , freq_(property("@freq")) + , q_(property("@q")) + { + if (freq_) + freq_->setArgIndex(0); + + if (q_) + q_->setArgIndex(1); + + createInlet(); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) { - static t_symbol* SYM_PROP_FREQ = gensym("@freq"); - static t_symbol* SYM_PROP_Q = gensym("@q"); + if (n == 1 && freq_) + freq_->set(lv); - bindPositionalArgsToProps({ SYM_PROP_FREQ, SYM_PROP_Q }); + if (n == 2 && q_) + q_->set(lv); } }; void setup_flt_resonbp_tilde() { SoundExternalFactory obj("flt.resonbp~"); + obj.setXletsInfo({ "signal: input", "float: freq", "float: Q-factor" }, { "signal: output" }); } diff --git a/ceammc/ext/src/flt/flt_resonbp.h b/ceammc/ext/src/flt/flt_resonbp.h index 6e5a3cdadc..d1aa5436e2 100644 --- a/ceammc/ext/src/flt/flt_resonbp.h +++ b/ceammc/ext/src/flt/flt_resonbp.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "flt.resonbp" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonbp -scn flt_resonbp_dsp -es 1 -mcd 16 -double -ftz 0 ------------------------------------------------------------ */ #ifndef __flt_resonbp_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN flt_resonbp_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN flt_resonbp_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class flt_resonbp_dsp { +class FAUST_API flt_resonbp_dsp { public: @@ -162,7 +247,7 @@ class flt_resonbp_dsp { * Generic DSP decorator. */ -class decorator_dsp : public flt_resonbp_dsp { +class FAUST_API decorator_dsp : public flt_resonbp_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public flt_resonbp_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END flt_resonbp_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in flt_resonbp_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct flt_resonbp : public flt_resonbp_dsp { #include #include -static float flt_resonbp_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS flt_resonbp #endif @@ -562,24 +636,34 @@ static float flt_resonbp_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_resonbp_faustpower2_f(double value) { + return value * value; +} + class flt_resonbp : public flt_resonbp_dsp { private: int fSampleRate; - float fConst1; - float fConst2; + double fConst1; + double fConst2; FAUSTFLOAT fVslider0; - float fConst3; - float fRec1[2]; + double fConst3; + double fRec1[2]; FAUSTFLOAT fVslider1; - float fRec2[2]; - float fRec0[3]; + double fRec2[2]; + double fRec0[3]; public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonbp -scn flt_resonbp_dsp -es 1 -mcd 16 -double -ftz 0"); m->declare("filename", "flt_resonbp.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -608,7 +692,7 @@ class flt_resonbp : public flt_resonbp_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -623,26 +707,26 @@ class flt_resonbp : public flt_resonbp_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - fConst2 = (44.0999985f / fConst0); - fConst3 = (1.0f - fConst2); + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + fConst1 = 3.141592653589793 / fConst0; + fConst2 = 44.1 / fConst0; + fConst3 = 1.0 - fConst2; } virtual void instanceResetUserInterface() { - fVslider0 = FAUSTFLOAT(1000.0f); - fVslider1 = FAUSTFLOAT(80.0f); + fVslider0 = FAUSTFLOAT(1e+03); + fVslider1 = FAUSTFLOAT(8e+01); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { - fRec1[l0] = 0.0f; + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec2[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { - fRec0[l2] = 0.0f; + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { + fRec0[l2] = 0.0; } } @@ -667,26 +751,26 @@ class flt_resonbp : public flt_resonbp_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("flt.resonbp"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(80.0f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(300.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+03), FAUSTFLOAT(2e+01), FAUSTFLOAT(2e+04), FAUSTFLOAT(0.1)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(8e+01), FAUSTFLOAT(0.1), FAUSTFLOAT(3e+02), FAUSTFLOAT(0.1)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = (fConst2 * float(fVslider0)); - float fSlow1 = (fConst2 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec1[0] = (fSlow0 + (fConst3 * fRec1[1])); - float fTemp0 = std::tan((fConst1 * fRec1[0])); - float fTemp1 = (1.0f / fTemp0); - fRec2[0] = (fSlow1 + (fConst3 * fRec2[1])); - float fTemp2 = (1.0f / fRec2[0]); - float fTemp3 = (((fTemp2 + fTemp1) / fTemp0) + 1.0f); - fRec0[0] = (float(input0[i0]) - (((fRec0[2] * (((fTemp1 - fTemp2) / fTemp0) + 1.0f)) + (2.0f * (fRec0[1] * (1.0f - (1.0f / flt_resonbp_faustpower2_f(fTemp0)))))) / fTemp3)); - float fTemp4 = (fTemp0 * fTemp3); - output0[i0] = FAUSTFLOAT(((fRec0[0] / fTemp4) + (fRec0[2] * (0.0f - (1.0f / fTemp4))))); + double fSlow0 = fConst2 * double(fVslider0); + double fSlow1 = fConst2 * double(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + double fTemp0 = std::tan(fConst1 * fRec1[0]); + double fTemp1 = 1.0 / fTemp0; + fRec2[0] = fSlow1 + fConst3 * fRec2[1]; + double fTemp2 = 1.0 / fRec2[0]; + double fTemp3 = (fTemp2 + fTemp1) / fTemp0 + 1.0; + fRec0[0] = double(input0[i0]) - (fRec0[2] * ((fTemp1 - fTemp2) / fTemp0 + 1.0) + 2.0 * fRec0[1] * (1.0 - 1.0 / flt_resonbp_faustpower2_f(fTemp0))) / fTemp3; + double fTemp4 = fTemp0 * fTemp3; + output0[i0] = FAUSTFLOAT(fRec0[0] / fTemp4 + fRec0[2] * (0.0 - 1.0 / fTemp4)); fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; fRec0[2] = fRec0[1]; diff --git a/ceammc/ext/src/flt/flt_resonhp.cpp b/ceammc/ext/src/flt/flt_resonhp.cpp new file mode 100644 index 0000000000..8fbb016c47 --- /dev/null +++ b/ceammc/ext/src/flt/flt_resonhp.cpp @@ -0,0 +1,39 @@ +#include "flt_resonhp.h" +#include "ceammc_factory.h" + +using namespace ceammc; + +class FltResonHighPass : public faust_flt_resonhp_tilde { + Property *freq_, *q_; + +public: + FltResonHighPass(const PdArgs& args) + : faust_flt_resonhp_tilde(args) + , freq_(property("@freq")) + , q_(property("@q")) + { + if (freq_) + freq_->setArgIndex(0); + + if (q_) + q_->setArgIndex(1); + + createInlet(); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (n == 1 && freq_) + freq_->set(lv); + + if (n == 2 && q_) + q_->set(lv); + } +}; + +void setup_flt_resonhp_tilde() +{ + SoundExternalFactory obj("flt.resonhp~"); + obj.setXletsInfo({ "signal: input", "float: freq", "float: Q-factor" }, { "signal: output" }); +} diff --git a/ceammc/ext/src/flt/flt_resonhp.h b/ceammc/ext/src/flt/flt_resonhp.h new file mode 100644 index 0000000000..088d4ac8cb --- /dev/null +++ b/ceammc/ext/src/flt/flt_resonhp.h @@ -0,0 +1,806 @@ +/* ------------------------------------------------------------ +name: "flt.resonhp" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonhp -scn flt_resonhp_dsp -es 1 -mcd 16 -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __flt_resonhp_H__ +#define __flt_resonhp_H__ + +// FAUST Architecture File for ceammc::SoundExternal class +#include +#include +#include +#include +#include + +/************************** BEGIN flt_resonhp_dsp.h ******************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +struct FAUST_API UI; +struct FAUST_API Meta; + +/** + * DSP memory manager. + */ + +struct FAUST_API dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ + virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class FAUST_API flt_resonhp_dsp { + + public: + + flt_resonhp_dsp() {} + virtual ~flt_resonhp_dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'openTabBox', 'addButton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Return the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void init(int sample_rate) = 0; + + /** + * Init instance state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceInit(int sample_rate) = 0; + + /** + * Init instance constant state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceConstants(int sample_rate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (like delay lines...) but keep the control parameter values */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual flt_resonhp_dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * + */ + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class FAUST_API decorator_dsp : public flt_resonhp_dsp { + + protected: + + flt_resonhp_dsp* fDSP; + + public: + + decorator_dsp(flt_resonhp_dsp* flt_resonhp_dsp = nullptr):fDSP(flt_resonhp_dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class, used with LLVM and Interpreter backends + * to create DSP instances from a compiled DSP program. + */ + +class FAUST_API dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual flt_resonhp_dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +// Denormal handling + +#if defined (__SSE__) +#include +#endif + +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + +#endif + +/************************** END flt_resonhp_dsp.h **************************/ +/************************** BEGIN UI.h ***************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ********************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +template +struct FAUST_API UIReal { + + UIReal() {} + virtual ~UIReal() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + + // To be used by LLVM client + virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } +}; + +struct FAUST_API UI : public UIReal { + UI() {} + virtual ~UI() {} +}; + +#endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h ******************************* + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + + +/** + The base class of Meta handler to be used in flt_resonhp_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. + */ +struct FAUST_API Meta { + virtual ~Meta() {} + virtual void declare(const char* key, const char* value) = 0; +}; + +#endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include +#include +#include + + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key] = value; } +}; + +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< +#include +#include +#include + +#ifndef FAUSTCLASS +#define FAUSTCLASS flt_resonhp +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_resonhp_faustpower2_f(double value) { + return value * value; +} + +class flt_resonhp : public flt_resonhp_dsp { + + private: + + int fSampleRate; + double fConst1; + double fConst2; + FAUSTFLOAT fVslider0; + double fConst3; + double fRec1[2]; + FAUSTFLOAT fVslider1; + double fRec2[2]; + double fRec0[3]; + + public: + + void metadata(Meta* m) { + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonhp -scn flt_resonhp_dsp -es 1 -mcd 16 -double -ftz 0"); + m->declare("filename", "flt_resonhp.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/resonhp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonhp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonhp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/resonlp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonlp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonlp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/version", "0.3"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.5"); + m->declare("name", "flt.resonhp"); + m->declare("platform.lib/name", "Generic Platform Library"); + m->declare("platform.lib/version", "0.2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.3"); + } + + virtual int getNumInputs() { + return 1; + } + virtual int getNumOutputs() { + return 1; + } + + static void classInit(int sample_rate) { + } + + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + fConst1 = 3.141592653589793 / fConst0; + fConst2 = 44.1 / fConst0; + fConst3 = 1.0 - fConst2; + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(1e+02); + fVslider1 = FAUSTFLOAT(2e+01); + } + + virtual void instanceClear() { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0; + } + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0; + } + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { + fRec0[l2] = 0.0; + } + } + + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); + } + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual flt_resonhp* clone() { + return new flt_resonhp(); + } + + virtual int getSampleRate() { + return fSampleRate; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("flt.resonhp"); + ui_interface->declare(&fVslider0, "unit", "Hz"); + ui_interface->addVerticalSlider("freq", &fVslider0, FAUSTFLOAT(1e+02), FAUSTFLOAT(2e+01), FAUSTFLOAT(2e+04), FAUSTFLOAT(0.1)); + ui_interface->addVerticalSlider("q", &fVslider1, FAUSTFLOAT(2e+01), FAUSTFLOAT(0.1), FAUSTFLOAT(1e+02), FAUSTFLOAT(0.1)); + ui_interface->closeBox(); + } + + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + double fSlow0 = fConst2 * double(fVslider0); + double fSlow1 = fConst2 * double(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + double fTemp0 = double(input0[i0]); + fRec1[0] = fSlow0 + fConst3 * fRec1[1]; + double fTemp1 = std::tan(fConst1 * fRec1[0]); + double fTemp2 = 1.0 / fTemp1; + fRec2[0] = fSlow1 + fConst3 * fRec2[1]; + double fTemp3 = 1.0 / fRec2[0]; + double fTemp4 = (fTemp3 + fTemp2) / fTemp1 + 1.0; + fRec0[0] = fTemp0 - (fRec0[2] * ((fTemp2 - fTemp3) / fTemp1 + 1.0) + 2.0 * fRec0[1] * (1.0 - 1.0 / flt_resonhp_faustpower2_f(fTemp1))) / fTemp4; + output0[i0] = FAUSTFLOAT(fTemp0 - (fRec0[2] + fRec0[0] + 2.0 * fRec0[1]) / fTemp4); + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec0[2] = fRec0[1]; + fRec0[1] = fRec0[0]; + } + } + +}; +// clang-format on +#endif + + template + struct _flt_resonhp_UI : public UI { + static std::string name; +}; + +template +std::string _flt_resonhp_UI::name(sym(flt_resonhp)); + +typedef _flt_resonhp_UI flt_resonhp_UI; + +class faust_flt_resonhp_tilde : public FaustExternal { +public: + faust_flt_resonhp_tilde(const ceammc::PdArgs& args) + : FaustExternal(args) + { + } +}; + +#endif diff --git a/ceammc/ext/src/flt/flt_resonlp.cpp b/ceammc/ext/src/flt/flt_resonlp.cpp new file mode 100644 index 0000000000..910489b66f --- /dev/null +++ b/ceammc/ext/src/flt/flt_resonlp.cpp @@ -0,0 +1,39 @@ +#include "flt_resonlp.h" +#include "ceammc_factory.h" + +using namespace ceammc; + +class FltResonLowPass : public faust_flt_resonlp_tilde { + Property *freq_, *q_; + +public: + FltResonLowPass(const PdArgs& args) + : faust_flt_resonlp_tilde(args) + , freq_(property("@freq")) + , q_(property("@q")) + { + if (freq_) + freq_->setArgIndex(0); + + if (q_) + q_->setArgIndex(1); + + createInlet(); + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (n == 1 && freq_) + freq_->set(lv); + + if (n == 2 && q_) + q_->set(lv); + } +}; + +void setup_flt_resonlp_tilde() +{ + SoundExternalFactory obj("flt.resonlp~"); + obj.setXletsInfo({ "signal: input", "float: freq", "float: Q-factor" }, { "signal: output" }); +} diff --git a/ceammc/ext/src/flt/flt_resonlp.h b/ceammc/ext/src/flt/flt_resonlp.h new file mode 100644 index 0000000000..332151ff01 --- /dev/null +++ b/ceammc/ext/src/flt/flt_resonlp.h @@ -0,0 +1,802 @@ +/* ------------------------------------------------------------ +name: "flt.resonlp" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonlp -scn flt_resonlp_dsp -es 1 -mcd 16 -double -ftz 0 +------------------------------------------------------------ */ + +#ifndef __flt_resonlp_H__ +#define __flt_resonlp_H__ + +// FAUST Architecture File for ceammc::SoundExternal class +#include +#include +#include +#include +#include + +/************************** BEGIN flt_resonlp_dsp.h ******************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +struct FAUST_API UI; +struct FAUST_API Meta; + +/** + * DSP memory manager. + */ + +struct FAUST_API dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ + virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class FAUST_API flt_resonlp_dsp { + + public: + + flt_resonlp_dsp() {} + virtual ~flt_resonlp_dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'openTabBox', 'addButton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Return the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void init(int sample_rate) = 0; + + /** + * Init instance state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceInit(int sample_rate) = 0; + + /** + * Init instance constant state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceConstants(int sample_rate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (like delay lines...) but keep the control parameter values */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual flt_resonlp_dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * + */ + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class FAUST_API decorator_dsp : public flt_resonlp_dsp { + + protected: + + flt_resonlp_dsp* fDSP; + + public: + + decorator_dsp(flt_resonlp_dsp* flt_resonlp_dsp = nullptr):fDSP(flt_resonlp_dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class, used with LLVM and Interpreter backends + * to create DSP instances from a compiled DSP program. + */ + +class FAUST_API dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual flt_resonlp_dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +// Denormal handling + +#if defined (__SSE__) +#include +#endif + +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + +#endif + +/************************** END flt_resonlp_dsp.h **************************/ +/************************** BEGIN UI.h ***************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ********************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +template +struct FAUST_API UIReal { + + UIReal() {} + virtual ~UIReal() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + + // To be used by LLVM client + virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } +}; + +struct FAUST_API UI : public UIReal { + UI() {} + virtual ~UI() {} +}; + +#endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h ******************************* + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + + +/** + The base class of Meta handler to be used in flt_resonlp_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. + */ +struct FAUST_API Meta { + virtual ~Meta() {} + virtual void declare(const char* key, const char* value) = 0; +}; + +#endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include +#include +#include + + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key] = value; } +}; + +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< +#include +#include +#include + +#ifndef FAUSTCLASS +#define FAUSTCLASS flt_resonlp +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static double flt_resonlp_faustpower2_f(double value) { + return value * value; +} + +class flt_resonlp : public flt_resonlp_dsp { + + private: + + int fSampleRate; + double fConst1; + FAUSTFLOAT fVslider0; + double fConst2; + double fRec1[2]; + double fConst3; + FAUSTFLOAT fVslider1; + double fRec2[2]; + double fRec0[3]; + + public: + + void metadata(Meta* m) { + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn flt_resonlp -scn flt_resonlp_dsp -es 1 -mcd 16 -double -ftz 0"); + m->declare("filename", "flt_resonlp.dsp"); + m->declare("filters.lib/fir:author", "Julius O. Smith III"); + m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/iir:author", "Julius O. Smith III"); + m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/resonlp:author", "Julius O. Smith III"); + m->declare("filters.lib/resonlp:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/resonlp:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/tf2s:author", "Julius O. Smith III"); + m->declare("filters.lib/tf2s:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/tf2s:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/version", "0.3"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.5"); + m->declare("name", "flt.resonlp"); + m->declare("platform.lib/name", "Generic Platform Library"); + m->declare("platform.lib/version", "0.2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.3"); + } + + virtual int getNumInputs() { + return 1; + } + virtual int getNumOutputs() { + return 1; + } + + static void classInit(int sample_rate) { + } + + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + double fConst0 = std::min(1.92e+05, std::max(1.0, double(fSampleRate))); + fConst1 = 44.1 / fConst0; + fConst2 = 1.0 - fConst1; + fConst3 = 3.141592653589793 / fConst0; + } + + virtual void instanceResetUserInterface() { + fVslider0 = FAUSTFLOAT(4e+01); + fVslider1 = FAUSTFLOAT(1e+03); + } + + virtual void instanceClear() { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec1[l0] = 0.0; + } + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec2[l1] = 0.0; + } + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { + fRec0[l2] = 0.0; + } + } + + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); + } + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual flt_resonlp* clone() { + return new flt_resonlp(); + } + + virtual int getSampleRate() { + return fSampleRate; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("flt.resonlp"); + ui_interface->declare(&fVslider1, "unit", "Hz"); + ui_interface->addVerticalSlider("freq", &fVslider1, FAUSTFLOAT(1e+03), FAUSTFLOAT(2e+01), FAUSTFLOAT(2e+04), FAUSTFLOAT(0.1)); + ui_interface->addVerticalSlider("q", &fVslider0, FAUSTFLOAT(4e+01), FAUSTFLOAT(0.1), FAUSTFLOAT(1e+02), FAUSTFLOAT(0.1)); + ui_interface->closeBox(); + } + + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + double fSlow0 = fConst1 * double(fVslider0); + double fSlow1 = fConst1 * double(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec1[0] = fSlow0 + fConst2 * fRec1[1]; + double fTemp0 = 1.0 / fRec1[0]; + fRec2[0] = fSlow1 + fConst2 * fRec2[1]; + double fTemp1 = std::tan(fConst3 * fRec2[0]); + double fTemp2 = 1.0 / fTemp1; + double fTemp3 = (fTemp0 + fTemp2) / fTemp1 + 1.0; + fRec0[0] = double(input0[i0]) - (fRec0[2] * (1.0 - (fTemp0 - fTemp2) / fTemp1) + 2.0 * fRec0[1] * (1.0 - 1.0 / flt_resonlp_faustpower2_f(fTemp1))) / fTemp3; + output0[i0] = FAUSTFLOAT((fRec0[2] + fRec0[0] + 2.0 * fRec0[1]) / fTemp3); + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec0[2] = fRec0[1]; + fRec0[1] = fRec0[0]; + } + } + +}; +// clang-format on +#endif + + template + struct _flt_resonlp_UI : public UI { + static std::string name; +}; + +template +std::string _flt_resonlp_UI::name(sym(flt_resonlp)); + +typedef _flt_resonlp_UI flt_resonlp_UI; + +class faust_flt_resonlp_tilde : public FaustExternal { +public: + faust_flt_resonlp_tilde(const ceammc::PdArgs& args) + : FaustExternal(args) + { + } +}; + +#endif diff --git a/ceammc/ext/src/flt/mod_flt.cpp b/ceammc/ext/src/flt/mod_flt.cpp index 1ad0fff3ea..900bebf65f 100644 --- a/ceammc/ext/src/flt/mod_flt.cpp +++ b/ceammc/ext/src/flt/mod_flt.cpp @@ -1,5 +1,6 @@ #include "mod_flt.h" +void setup_flt_a_weight(); void setup_flt_apf2biquad(); void setup_flt_biquad_tilde(); void setup_flt_bpf12_tilde(); @@ -35,9 +36,12 @@ void setup_flt_moog_vcf_tilde(); void setup_flt_notch_tilde(); void setup_flt_pole2biquad(); void setup_flt_resonbp_tilde(); +void setup_flt_resonhp_tilde(); +void setup_flt_resonlp_tilde(); void ceammc_flt_setup() { + setup_flt_a_weight(); setup_flt_apf2biquad(); setup_flt_biquad_tilde(); setup_flt_bpf12_tilde(); @@ -73,4 +77,6 @@ void ceammc_flt_setup() setup_flt_notch_tilde(); setup_flt_pole2biquad(); setup_flt_resonbp_tilde(); + setup_flt_resonhp_tilde(); + setup_flt_resonlp_tilde(); } diff --git a/ceammc/ext/src/fx/CMakeLists.txt b/ceammc/ext/src/fx/CMakeLists.txt index 6178468d40..d731436280 100644 --- a/ceammc/ext/src/fx/CMakeLists.txt +++ b/ceammc/ext/src/fx/CMakeLists.txt @@ -14,6 +14,7 @@ ceammc_fx_obj(freqshift) ceammc_fx_obj_ui(bitdown) ceammc_fx_obj_ui(chorus) +ceammc_fx_obj_ui(dattorro) ceammc_fx_obj_ui(distortion) ceammc_fx_obj_ui(distortion1) ceammc_fx_obj_ui(distortion2) @@ -22,6 +23,7 @@ ceammc_fx_obj_ui(drive) ceammc_fx_obj_ui(drone_box) ceammc_fx_obj_ui(echo) ceammc_fx_obj_ui(echo2) +ceammc_fx_obj_ui(jcrev) ceammc_fx_obj_ui(flanger) ceammc_fx_obj_ui(freeverb) ceammc_fx_obj_ui(freeverb2) @@ -31,9 +33,11 @@ ceammc_fx_obj_ui(pitchshift) ceammc_fx_obj_ui(pitchshift_sig) ceammc_fx_obj_ui(recho) ceammc_fx_obj_ui(room) +ceammc_fx_obj_ui(satrev) ceammc_fx_obj_ui(sdelay) ceammc_fx_obj_ui(secho) ceammc_fx_obj_ui(shimmer) +ceammc_fx_obj_ui(stutter) ceammc_fx_obj_ui(tapiir) ceammc_fx_obj_ui(vocoder) ceammc_fx_obj_ui(wahwah) diff --git a/ceammc/ext/src/fx/fx_bitdown.cpp b/ceammc/ext/src/fx/fx_bitdown.cpp index 7b7c4cc46d..ac583a4095 100644 --- a/ceammc/ext/src/fx/fx_bitdown.cpp +++ b/ceammc/ext/src/fx/fx_bitdown.cpp @@ -8,8 +8,8 @@ class FxBitdown : public faust_fx_bitdown_tilde { FxBitdown(const PdArgs& args) : faust_fx_bitdown_tilde(args) { - static t_symbol* SYM_PROP_BITS = gensym("@bits"); - static t_symbol* SYM_PROP_DOWNSAMP = gensym("@downsamp"); + auto SYM_PROP_BITS = gensym("@bits"); + auto SYM_PROP_DOWNSAMP = gensym("@downsamp"); bindPositionalArgsToProps({ SYM_PROP_BITS, SYM_PROP_DOWNSAMP }); property(SYM_PROP_DOWNSAMP)->setUnitsSamp(); diff --git a/ceammc/ext/src/fx/fx_bitdown.h b/ceammc/ext/src/fx/fx_bitdown.h index 8ad2c701c7..a7baee74ed 100644 --- a/ceammc/ext/src/fx/fx_bitdown.h +++ b/ceammc/ext/src/fx/fx_bitdown.h @@ -3,8 +3,8 @@ author: "Viacheslav Lotsmanov (unclechu)" copyright: "(c) Viacheslav Lotsmanov, 2015" license: "BSD" name: "fx.bitdown" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_bitdown -scn fx_bitdown_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_bitdown_H__ @@ -17,23 +17,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_bitdown_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_bitdown_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -47,22 +47,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -71,7 +156,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_bitdown_dsp { +class FAUST_API fx_bitdown_dsp { public: @@ -165,7 +250,7 @@ class fx_bitdown_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_bitdown_dsp { +class FAUST_API decorator_dsp : public fx_bitdown_dsp { protected: @@ -198,7 +283,7 @@ class decorator_dsp : public fx_bitdown_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -227,18 +312,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -246,7 +334,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -257,16 +345,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -279,38 +365,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_bitdown_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -325,8 +412,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -356,37 +443,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -397,40 +483,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_bitdown_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -443,14 +529,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -551,7 +629,6 @@ struct fx_bitdown : public fx_bitdown_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_bitdown #endif @@ -561,6 +638,13 @@ struct fx_bitdown : public fx_bitdown_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_bitdown : public fx_bitdown_dsp { private: @@ -576,12 +660,13 @@ class fx_bitdown : public fx_bitdown_dsp { void metadata(Meta* m) { m->declare("author", "Viacheslav Lotsmanov (unclechu)"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("category", "Distortion"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_bitdown -scn fx_bitdown_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "(c) Viacheslav Lotsmanov, 2015"); m->declare("filename", "fx_bitdown.dsp"); m->declare("license", "BSD"); @@ -609,10 +694,10 @@ class fx_bitdown : public fx_bitdown_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iRec1[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -638,32 +723,29 @@ class fx_bitdown : public fx_bitdown_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.bitdown"); ui_interface->declare(&fVslider1, "type", "int"); - ui_interface->addVerticalSlider("bits", &fVslider1, FAUSTFLOAT(16.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(16.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("bits", &fVslider1, FAUSTFLOAT(16.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(16.0f), FAUSTFLOAT(1.0f)); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fVslider0, "type", "int"); - ui_interface->addVerticalSlider("downsamp", &fVslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(200.0f), FAUSTFLOAT(1.0f)); + ui_interface->addVerticalSlider("downsamp", &fVslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(2e+02f), FAUSTFLOAT(1.0f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); int iSlow1 = int(float(fVslider0)); - int iSlow2 = (iSlow1 > 1); - float fSlow3 = float(int(std::pow(2.0f, (float(fVslider1) + -1.0f)))); - float fSlow4 = (1.0f / fSlow3); - int iSlow5 = (iSlow1 + -1); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + int iSlow2 = iSlow1 > 1; + float fSlow3 = float(int(std::pow(2.0f, float(fVslider1) + -1.0f))); + float fSlow4 = 1.0f / fSlow3; + int iSlow5 = iSlow1 + -1; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (fSlow4 * std::floor((fSlow3 * (iSlow0 ? 0.0f : fTemp0)))); - float fThen2 = ((fTemp1 < -1.0f) ? -1.0f : fTemp1); - float fTemp2 = ((fTemp1 > 1.0f) ? 1.0f : fThen2); - int iElse3 = (iRec1[1] + 1); - iRec1[0] = ((iRec1[1] < iSlow5) ? iElse3 : 0); + float fTemp1 = fSlow4 * std::floor(fSlow3 * ((iSlow0) ? 0.0f : fTemp0)); + float fTemp2 = ((fTemp1 > 1.0f) ? 1.0f : ((fTemp1 < -1.0f) ? -1.0f : fTemp1)); + iRec1[0] = ((iRec1[1] < iSlow5) ? iRec1[1] + 1 : 0); fRec0[0] = ((iRec1[0] == 0) ? fTemp2 : fRec0[1]); - float fThen6 = (iSlow2 ? fRec0[0] : fTemp2); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen6)); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : ((iSlow2) ? fRec0[0] : fTemp2))); iRec1[1] = iRec1[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/fx/fx_chorus.h b/ceammc/ext/src/fx/fx_chorus.h index 4506b16a9b..9ec2532404 100644 --- a/ceammc/ext/src/fx/fx_chorus.h +++ b/ceammc/ext/src/fx/fx_chorus.h @@ -2,8 +2,8 @@ author: "Albert Graef" name: "fx.chorus" version: "1.0" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_chorus -scn fx_chorus_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_chorus_H__ @@ -16,23 +16,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_chorus_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_chorus_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -46,22 +46,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -70,7 +155,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_chorus_dsp { +class FAUST_API fx_chorus_dsp { public: @@ -164,7 +249,7 @@ class fx_chorus_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_chorus_dsp { +class FAUST_API decorator_dsp : public fx_chorus_dsp { protected: @@ -197,7 +282,7 @@ class decorator_dsp : public fx_chorus_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -226,18 +311,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -245,7 +333,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -256,16 +344,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -278,38 +364,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_chorus_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -324,8 +411,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -355,37 +442,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -396,40 +482,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_chorus_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -442,14 +528,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -551,6 +629,21 @@ struct fx_chorus : public fx_chorus_dsp { #include #include +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_chorus +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + class fx_chorusSIG0 { private: @@ -567,15 +660,15 @@ class fx_chorusSIG0 { } void instanceInitfx_chorusSIG0(int sample_rate) { - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { iRec5[l6] = 0; } } void fillfx_chorusSIG0(int count, float* table) { - for (int i1 = 0; (i1 < count); i1 = (i1 + 1)) { - iRec5[0] = (iRec5[1] + 1); - table[i1] = std::sin((9.58738019e-05f * float((iRec5[0] + -1)))); + for (int i1 = 0; i1 < count; i1 = i1 + 1) { + iRec5[0] = iRec5[1] + 1; + table[i1] = std::sin(9.58738e-05f * float(iRec5[0] + -1)); iRec5[1] = iRec5[0]; } } @@ -587,21 +680,12 @@ static void deletefx_chorusSIG0(fx_chorusSIG0* dsp) { delete dsp; } static float ftbl0fx_chorusSIG0[65536]; -#ifndef FAUSTCLASS -#define FAUSTCLASS fx_chorus -#endif - -#ifdef __APPLE__ -#define exp10f __exp10f -#define exp10 __exp10 -#endif - class fx_chorus : public fx_chorus_dsp { private: FAUSTFLOAT fCheckbox0; - int IOTA; + int IOTA0; float fVec0[131072]; int fSampleRate; float fConst1; @@ -623,13 +707,14 @@ class fx_chorus : public fx_chorus_dsp { void metadata(Meta* m) { m->declare("author", "Albert Graef"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_chorus -scn fx_chorus_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_chorus.dsp"); @@ -642,7 +727,7 @@ class fx_chorus : public fx_chorus_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "1.0"); } @@ -662,12 +747,12 @@ class fx_chorus : public fx_chorus_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.5f * fConst0); - fConst4 = (0.0441000015f / fConst0); - fConst5 = (1.0f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.5f * fConst0; + fConst4 = 0.0441f / fConst0; + fConst5 = 1.0f / fConst0; } virtual void instanceResetUserInterface() { @@ -679,23 +764,23 @@ class fx_chorus : public fx_chorus_dsp { } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 131072); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 131072; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec4[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec3[l5] = 0.0f; } } @@ -722,43 +807,42 @@ class fx_chorus : public fx_chorus_dsp { ui_interface->openVerticalBox("fx.chorus"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider1, FAUSTFLOAT(25.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(200.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("delay", &fHslider1, FAUSTFLOAT(25.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(2e+02f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider2, "style", "knob"); - ui_interface->addHorizontalSlider("depth", &fHslider2, FAUSTFLOAT(0.0199999996f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("depth", &fHslider2, FAUSTFLOAT(0.02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider3, "unit", "Hz"); - ui_interface->addHorizontalSlider("freq", &fHslider3, FAUSTFLOAT(3.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("freq", &fHslider3, FAUSTFLOAT(3.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst4 * float(fHslider1)); - float fSlow3 = (fConst1 * float(fHslider2)); - float fSlow4 = (fConst1 * float(fHslider3)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst4 * float(fHslider1); + float fSlow3 = fConst1 * float(fHslider2); + float fSlow4 = fConst1 * float(fHslider3); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fVec0[(IOTA & 131071)] = fTemp1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec1[0] = (fSlow2 + (fConst2 * fRec1[1])); - fRec2[0] = (fSlow3 + (fConst2 * fRec2[1])); - fRec4[0] = (fSlow4 + (fConst2 * fRec4[1])); - float fTemp2 = (fRec3[1] + (fConst5 * fRec4[0])); - fRec3[0] = (fTemp2 - std::floor(fTemp2)); - float fTemp3 = (65536.0f * (fRec3[0] - std::floor(fRec3[0]))); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fVec0[IOTA0 & 131071] = fTemp1; + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec1[0] = fSlow2 + fConst2 * fRec1[1]; + fRec2[0] = fSlow3 + fConst2 * fRec2[1]; + fRec4[0] = fSlow4 + fConst2 * fRec4[1]; + float fTemp2 = fRec3[1] + fConst5 * fRec4[0]; + fRec3[0] = fTemp2 - std::floor(fTemp2); + float fTemp3 = 65536.0f * (fRec3[0] - std::floor(fRec3[0])); float fTemp4 = std::floor(fTemp3); int iTemp5 = int(fTemp4); - float fTemp6 = (fConst3 * (fRec1[0] * ((fRec2[0] * (((fTemp4 + (1.0f - fTemp3)) * ftbl0fx_chorusSIG0[(iTemp5 & 65535)]) + ((fTemp3 - fTemp4) * ftbl0fx_chorusSIG0[((iTemp5 + 1) & 65535)]))) + 1.0f))); + float fTemp6 = fConst3 * fRec1[0] * (fRec2[0] * ((fTemp4 + (1.0f - fTemp3)) * ftbl0fx_chorusSIG0[iTemp5 & 65535] + (fTemp3 - fTemp4) * ftbl0fx_chorusSIG0[(iTemp5 + 1) & 65535]) + 1.0f); int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * (fTemp8 + (1.0f - fTemp6))) + ((fTemp6 - fTemp8) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); - IOTA = (IOTA + 1); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * (fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7))) & 131071] * (fTemp8 + (1.0f - fTemp6)) + (fTemp6 - fTemp8) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7 + 1))) & 131071]))); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/fx/fx_dattorro.cpp b/ceammc/ext/src/fx/fx_dattorro.cpp new file mode 100644 index 0000000000..b36c37d100 --- /dev/null +++ b/ceammc/ext/src/fx/fx_dattorro.cpp @@ -0,0 +1,34 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "fx_dattorro.h" +#include "ceammc_factory.h" + +#include "ceammc_factory.h" + +using namespace ceammc; + +class FxDattorro : public faust_fx_dattorro_tilde { +public: + FxDattorro(const PdArgs& args) + : faust_fx_dattorro_tilde(args) + { + bindPositionalArgsToProps({ gensym("@decay"), gensym("@drywet") }); + } +}; + +void setup_fx_dattorro_tilde() +{ + SoundExternalFactory obj("fx.dattorro~"); + obj.addMethod("reset", &FxDattorro::m_reset); +} diff --git a/ceammc/ext/src/fx/fx_dattorro.h b/ceammc/ext/src/fx/fx_dattorro.h new file mode 100644 index 0000000000..29230a6d04 --- /dev/null +++ b/ceammc/ext/src/fx/fx_dattorro.h @@ -0,0 +1,1036 @@ +/* ------------------------------------------------------------ +name: "fx.dattorro" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_dattorro -scn fx_dattorro_dsp -es 1 -mcd 16 -single -ftz 0 +------------------------------------------------------------ */ + +#ifndef __fx_dattorro_H__ +#define __fx_dattorro_H__ + +// FAUST Architecture File for ceammc::SoundExternal class +#include +#include +#include +#include +#include + +/************************** BEGIN fx_dattorro_dsp.h ******************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +struct FAUST_API UI; +struct FAUST_API Meta; + +/** + * DSP memory manager. + */ + +struct FAUST_API dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ + virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class FAUST_API fx_dattorro_dsp { + + public: + + fx_dattorro_dsp() {} + virtual ~fx_dattorro_dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'openTabBox', 'addButton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Return the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void init(int sample_rate) = 0; + + /** + * Init instance state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceInit(int sample_rate) = 0; + + /** + * Init instance constant state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceConstants(int sample_rate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (like delay lines...) but keep the control parameter values */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual fx_dattorro_dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * + */ + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class FAUST_API decorator_dsp : public fx_dattorro_dsp { + + protected: + + fx_dattorro_dsp* fDSP; + + public: + + decorator_dsp(fx_dattorro_dsp* fx_dattorro_dsp = nullptr):fDSP(fx_dattorro_dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class, used with LLVM and Interpreter backends + * to create DSP instances from a compiled DSP program. + */ + +class FAUST_API dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual fx_dattorro_dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +// Denormal handling + +#if defined (__SSE__) +#include +#endif + +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + +#endif + +/************************** END fx_dattorro_dsp.h **************************/ +/************************** BEGIN UI.h ***************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ********************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +template +struct FAUST_API UIReal { + + UIReal() {} + virtual ~UIReal() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + + // To be used by LLVM client + virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } +}; + +struct FAUST_API UI : public UIReal { + UI() {} + virtual ~UI() {} +}; + +#endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h ******************************* + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + + +/** + The base class of Meta handler to be used in fx_dattorro_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. + */ +struct FAUST_API Meta { + virtual ~Meta() {} + virtual void declare(const char* key, const char* value) = 0; +}; + +#endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include +#include +#include + + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key] = value; } +}; + +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< +#include +#include +#include + +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_dattorro +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + +class fx_dattorro : public fx_dattorro_dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSampleRate; + float fConst0; + float fConst1; + FAUSTFLOAT fHslider0; + float fConst2; + float fRec0[2]; + FAUSTFLOAT fVslider0; + float fRec12[2]; + int IOTA0; + float fVec0[32768]; + float fConst3; + float fConst4; + FAUSTFLOAT fVslider1; + float fRec13[2]; + float fRec11[3]; + FAUSTFLOAT fVslider2; + float fRec14[2]; + float fVec1[256]; + float fRec9[2]; + float fVec2[128]; + float fRec7[2]; + FAUSTFLOAT fVslider3; + float fRec15[2]; + float fVec3[512]; + float fRec5[2]; + float fVec4[512]; + float fRec3[2]; + FAUSTFLOAT fVslider4; + float fRec16[2]; + FAUSTFLOAT fVslider5; + float fRec20[2]; + FAUSTFLOAT fVslider6; + float fRec23[2]; + float fVec5[1024]; + float fRec21[2]; + float fVec6[8192]; + float fRec19[2]; + FAUSTFLOAT fVslider7; + float fRec24[2]; + float fVec7[4096]; + float fRec17[2]; + float fVec8[4096]; + float fRec1[2]; + float fVec9[1024]; + float fRec28[2]; + float fVec10[8192]; + float fRec27[2]; + float fVec11[2048]; + float fRec25[2]; + float fVec12[2048]; + float fRec2[2]; + + public: + + void metadata(Meta* m) { + m->declare("basics.lib/bypass2:author", "Julius Smith"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.8"); + m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); + m->declare("ceammc.lib/version", "0.1.2"); + m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); + m->declare("ceammc_ui.lib/version", "0.1.2"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_dattorro -scn fx_dattorro_dsp -es 1 -mcd 16 -single -ftz 0"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_dattorro.dsp"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.5"); + m->declare("name", "fx.dattorro"); + m->declare("platform.lib/name", "Generic Platform Library"); + m->declare("platform.lib/version", "0.2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.3"); + } + + virtual int getNumInputs() { + return 2; + } + virtual int getNumOutputs() { + return 2; + } + + static void classInit(int sample_rate) { + } + + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.1f * fConst0 + 1.0f; + fConst4 = 0.0441f / fConst0; + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0f); + fHslider0 = FAUSTFLOAT(0.33f); + fVslider0 = FAUSTFLOAT(0.9995f); + fVslider1 = FAUSTFLOAT(4e+01f); + fVslider2 = FAUSTFLOAT(0.625f); + fVslider3 = FAUSTFLOAT(0.75f); + fVslider4 = FAUSTFLOAT(0.5f); + fVslider5 = FAUSTFLOAT(0.0005f); + fVslider6 = FAUSTFLOAT(0.5f); + fVslider7 = FAUSTFLOAT(0.7f); + } + + virtual void instanceClear() { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; + } + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec12[l1] = 0.0f; + } + IOTA0 = 0; + for (int l2 = 0; l2 < 32768; l2 = l2 + 1) { + fVec0[l2] = 0.0f; + } + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec13[l3] = 0.0f; + } + for (int l4 = 0; l4 < 3; l4 = l4 + 1) { + fRec11[l4] = 0.0f; + } + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec14[l5] = 0.0f; + } + for (int l6 = 0; l6 < 256; l6 = l6 + 1) { + fVec1[l6] = 0.0f; + } + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { + fRec9[l7] = 0.0f; + } + for (int l8 = 0; l8 < 128; l8 = l8 + 1) { + fVec2[l8] = 0.0f; + } + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { + fRec7[l9] = 0.0f; + } + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { + fRec15[l10] = 0.0f; + } + for (int l11 = 0; l11 < 512; l11 = l11 + 1) { + fVec3[l11] = 0.0f; + } + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { + fRec5[l12] = 0.0f; + } + for (int l13 = 0; l13 < 512; l13 = l13 + 1) { + fVec4[l13] = 0.0f; + } + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { + fRec3[l14] = 0.0f; + } + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { + fRec16[l15] = 0.0f; + } + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { + fRec20[l16] = 0.0f; + } + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { + fRec23[l17] = 0.0f; + } + for (int l18 = 0; l18 < 1024; l18 = l18 + 1) { + fVec5[l18] = 0.0f; + } + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fRec21[l19] = 0.0f; + } + for (int l20 = 0; l20 < 8192; l20 = l20 + 1) { + fVec6[l20] = 0.0f; + } + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { + fRec19[l21] = 0.0f; + } + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { + fRec24[l22] = 0.0f; + } + for (int l23 = 0; l23 < 4096; l23 = l23 + 1) { + fVec7[l23] = 0.0f; + } + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { + fRec17[l24] = 0.0f; + } + for (int l25 = 0; l25 < 4096; l25 = l25 + 1) { + fVec8[l25] = 0.0f; + } + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { + fRec1[l26] = 0.0f; + } + for (int l27 = 0; l27 < 1024; l27 = l27 + 1) { + fVec9[l27] = 0.0f; + } + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { + fRec28[l28] = 0.0f; + } + for (int l29 = 0; l29 < 8192; l29 = l29 + 1) { + fVec10[l29] = 0.0f; + } + for (int l30 = 0; l30 < 2; l30 = l30 + 1) { + fRec27[l30] = 0.0f; + } + for (int l31 = 0; l31 < 2048; l31 = l31 + 1) { + fVec11[l31] = 0.0f; + } + for (int l32 = 0; l32 < 2; l32 = l32 + 1) { + fRec25[l32] = 0.0f; + } + for (int l33 = 0; l33 < 2048; l33 = l33 + 1) { + fVec12[l33] = 0.0f; + } + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { + fRec2[l34] = 0.0f; + } + } + + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); + } + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual fx_dattorro* clone() { + return new fx_dattorro(); + } + + virtual int getSampleRate() { + return fSampleRate; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("fx.dattorro"); + ui_interface->addVerticalSlider("bw", &fVslider0, FAUSTFLOAT(0.9995f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addCheckButton("bypass", &fCheckbox0); + ui_interface->addVerticalSlider("damp", &fVslider5, FAUSTFLOAT(0.0005f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0001f)); + ui_interface->addVerticalSlider("ddiff1", &fVslider6, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addVerticalSlider("ddiff2", &fVslider7, FAUSTFLOAT(0.7f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addVerticalSlider("decay", &fVslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.33f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("idiff1", &fVslider2, FAUSTFLOAT(0.625f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addVerticalSlider("idiff2", &fVslider3, FAUSTFLOAT(0.75f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->declare(&fVslider1, "style", "knob"); + ui_interface->declare(&fVslider1, "unit", "ms"); + ui_interface->addVerticalSlider("predelay", &fVslider1, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.0f)); + ui_interface->closeBox(); + } + + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* input1 = inputs[1]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + int iSlow0 = int(float(fCheckbox0)); + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fVslider0); + float fSlow3 = fConst4 * float(fVslider1); + float fSlow4 = fConst1 * float(fVslider2); + float fSlow5 = fConst1 * float(fVslider3); + float fSlow6 = fConst1 * float(fVslider4); + float fSlow7 = fConst1 * float(fVslider5); + float fSlow8 = fConst1 * float(fVslider6); + float fSlow9 = fConst1 * float(fVslider7); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = float(input0[i0]); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = 1.0f - fRec0[0]; + fRec12[0] = fSlow2 + fConst2 * fRec12[1]; + float fTemp3 = float(input1[i0]); + float fTemp4 = ((iSlow0) ? 0.0f : fTemp3); + float fTemp5 = fTemp1 + fTemp4; + fVec0[IOTA0 & 32767] = fTemp5; + fRec13[0] = fSlow3 + fConst2 * fRec13[1]; + float fTemp6 = fConst0 * fRec13[0]; + int iTemp7 = int(fTemp6); + float fTemp8 = std::floor(fTemp6); + fRec11[0] = (1.0f - fRec12[0]) * fRec11[2] + 0.5f * fRec12[0] * (fVec0[(IOTA0 - int(std::min(fConst3, float(std::max(0, iTemp7))))) & 32767] * (fTemp8 + (1.0f - fTemp6)) + (fTemp6 - fTemp8) * fVec0[(IOTA0 - int(std::min(fConst3, float(std::max(0, iTemp7 + 1))))) & 32767]); + fRec14[0] = fSlow4 + fConst2 * fRec14[1]; + float fTemp9 = fRec11[0] - fRec14[0] * fRec9[1]; + fVec1[IOTA0 & 255] = fTemp9; + fRec9[0] = fVec1[(IOTA0 - 142) & 255]; + float fRec10 = fRec14[0] * fTemp9; + float fTemp10 = fRec10 + fRec9[1] - fRec14[0] * fRec7[1]; + fVec2[IOTA0 & 127] = fTemp10; + fRec7[0] = fVec2[(IOTA0 - 107) & 127]; + float fRec8 = fRec14[0] * fTemp10; + fRec15[0] = fSlow5 + fConst2 * fRec15[1]; + float fTemp11 = fRec8 + fRec7[1] - fRec15[0] * fRec5[1]; + fVec3[IOTA0 & 511] = fTemp11; + fRec5[0] = fVec3[(IOTA0 - 379) & 511]; + float fRec6 = fRec15[0] * fTemp11; + float fTemp12 = fRec6 + fRec5[1] - fRec15[0] * fRec3[1]; + fVec4[IOTA0 & 511] = fTemp12; + fRec3[0] = fVec4[(IOTA0 - 277) & 511]; + float fRec4 = fRec15[0] * fTemp12; + fRec16[0] = fSlow6 + fConst2 * fRec16[1]; + fRec20[0] = fSlow7 + fConst2 * fRec20[1]; + float fTemp13 = 1.0f - fRec20[0]; + fRec23[0] = fSlow8 + fConst2 * fRec23[1]; + float fTemp14 = fRec23[0] * fRec21[1] + fRec2[1]; + fVec5[IOTA0 & 1023] = fTemp14; + fRec21[0] = fVec5[(IOTA0 - 908) & 1023]; + float fRec22 = 0.0f - fRec23[0] * fTemp14; + fVec6[IOTA0 & 8191] = fRec22 + fRec21[1]; + fRec19[0] = fRec20[0] * fRec19[1] + fTemp13 * fVec6[(IOTA0 - 4217) & 8191]; + fRec24[0] = fSlow9 + fConst2 * fRec24[1]; + float fTemp15 = fRec19[0] * fRec16[0] - fRec24[0] * fRec17[1]; + fVec7[IOTA0 & 4095] = fTemp15; + fRec17[0] = fVec7[(IOTA0 - 2656) & 4095]; + float fRec18 = fRec24[0] * fTemp15; + fVec8[IOTA0 & 4095] = fRec18 + fRec17[1]; + fRec1[0] = fRec4 + fRec16[0] * fVec8[(IOTA0 - 2656) & 4095] + fRec3[1]; + float fTemp16 = fRec23[0] * fRec28[1] + fRec1[1]; + fVec9[IOTA0 & 1023] = fTemp16; + fRec28[0] = fVec9[(IOTA0 - 672) & 1023]; + float fRec29 = 0.0f - fRec23[0] * fTemp16; + fVec10[IOTA0 & 8191] = fRec29 + fRec28[1]; + fRec27[0] = fRec20[0] * fRec27[1] + fTemp13 * fVec10[(IOTA0 - 4453) & 8191]; + float fTemp17 = fRec16[0] * fRec27[0] - fRec24[0] * fRec25[1]; + fVec11[IOTA0 & 2047] = fTemp17; + fRec25[0] = fVec11[(IOTA0 - 1800) & 2047]; + float fRec26 = fRec24[0] * fTemp17; + fVec12[IOTA0 & 2047] = fRec26 + fRec25[1]; + fRec2[0] = fRec4 + fRec3[1] + fRec16[0] * fVec12[(IOTA0 - 1800) & 2047]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * fTemp2 + fRec0[0] * fRec1[0])); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp3 : fTemp2 * fTemp4 + fRec0[0] * fRec2[0])); + fRec0[1] = fRec0[0]; + fRec12[1] = fRec12[0]; + IOTA0 = IOTA0 + 1; + fRec13[1] = fRec13[0]; + fRec11[2] = fRec11[1]; + fRec11[1] = fRec11[0]; + fRec14[1] = fRec14[0]; + fRec9[1] = fRec9[0]; + fRec7[1] = fRec7[0]; + fRec15[1] = fRec15[0]; + fRec5[1] = fRec5[0]; + fRec3[1] = fRec3[0]; + fRec16[1] = fRec16[0]; + fRec20[1] = fRec20[0]; + fRec23[1] = fRec23[0]; + fRec21[1] = fRec21[0]; + fRec19[1] = fRec19[0]; + fRec24[1] = fRec24[0]; + fRec17[1] = fRec17[0]; + fRec1[1] = fRec1[0]; + fRec28[1] = fRec28[0]; + fRec27[1] = fRec27[0]; + fRec25[1] = fRec25[0]; + fRec2[1] = fRec2[0]; + } + } + +}; +// clang-format on +#endif + + template + struct _fx_dattorro_UI : public UI { + static std::string name; +}; + +template +std::string _fx_dattorro_UI::name(sym(fx_dattorro)); + +typedef _fx_dattorro_UI fx_dattorro_UI; + +class faust_fx_dattorro_tilde : public FaustExternal { +public: + faust_fx_dattorro_tilde(const ceammc::PdArgs& args) + : FaustExternal(args) + { + } +}; + +#endif diff --git a/ceammc/ext/src/fx/fx_distortion.h b/ceammc/ext/src/fx/fx_distortion.h index 6007e16bee..d69ae92f7c 100644 --- a/ceammc/ext/src/fx/fx_distortion.h +++ b/ceammc/ext/src/fx/fx_distortion.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.distortion" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion -scn fx_distortion_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_distortion_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_distortion_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_distortion_dsp { +class FAUST_API fx_distortion_dsp { public: @@ -162,7 +247,7 @@ class fx_distortion_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_distortion_dsp { +class FAUST_API decorator_dsp : public fx_distortion_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_distortion_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_distortion_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_distortion_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct fx_distortion : public fx_distortion_dsp { #include #include -static float fx_distortion_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_distortion #endif @@ -562,6 +636,16 @@ static float fx_distortion_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_distortion_faustpower2_f(float value) { + return value * value; +} + class fx_distortion : public fx_distortion_dsp { private: @@ -582,13 +666,14 @@ class fx_distortion : public fx_distortion_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion -scn fx_distortion_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_distortion.dsp"); m->declare("filters.lib/dcblocker:author", "Julius O. Smith III"); m->declare("filters.lib/dcblocker:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -613,7 +698,7 @@ class fx_distortion : public fx_distortion_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -628,8 +713,8 @@ class fx_distortion : public fx_distortion_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (44.0999985f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); - fConst1 = (1.0f - fConst0); + fConst0 = 44.1f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.0f - fConst0; } virtual void instanceResetUserInterface() { @@ -640,19 +725,19 @@ class fx_distortion : public fx_distortion_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec3[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fVec0[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec1[l4] = 0.0f; } } @@ -678,32 +763,31 @@ class fx_distortion : public fx_distortion_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.distortion"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addVerticalSlider("drive", &fVslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addVerticalSlider("drive", &fVslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("offset", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("offset", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst0 * float(fHslider0)); - float fSlow2 = (fConst0 * float(fVslider0)); - float fSlow3 = (fConst0 * float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float(fHslider0); + float fSlow2 = fConst0 * float(fVslider0); + float fSlow3 = fConst0 * float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst1 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst1 * fRec2[1])); - fRec3[0] = (fSlow3 + (fConst1 * fRec3[1])); - float fTemp2 = std::max(-1.0f, std::min(1.0f, (fRec2[0] + (fTemp1 * std::pow(10.0f, (2.0f * fRec3[0])))))); - float fTemp3 = (fTemp2 * (1.0f - (0.333333343f * fx_distortion_faustpower2_f(fTemp2)))); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst1 * fRec0[1]; + fRec2[0] = fSlow2 + fConst1 * fRec2[1]; + fRec3[0] = fSlow3 + fConst1 * fRec3[1]; + float fTemp2 = std::max(-1.0f, std::min(1.0f, fRec2[0] + fTemp1 * std::pow(1e+01f, 2.0f * fRec3[0]))); + float fTemp3 = fTemp2 * (1.0f - 0.33333334f * fx_distortion_faustpower2_f(fTemp2)); fVec0[0] = fTemp3; - fRec1[0] = (((0.995000005f * fRec1[1]) + fTemp3) - fVec0[1]); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); + fRec1[0] = 0.995f * fRec1[1] + fTemp3 - fVec0[1]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * fRec1[0])); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/fx/fx_distortion1.h b/ceammc/ext/src/fx/fx_distortion1.h index 8cb98721ee..f8413c78a3 100644 --- a/ceammc/ext/src/fx/fx_distortion1.h +++ b/ceammc/ext/src/fx/fx_distortion1.h @@ -4,8 +4,8 @@ copyright: "(c)brummer 2008" license: "BSD" name: "fx.distortion1" version: "0.01" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion1 -scn fx_distortion1_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion1_H__ @@ -18,23 +18,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_distortion1_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_distortion1_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -48,22 +48,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -72,7 +157,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_distortion1_dsp { +class FAUST_API fx_distortion1_dsp { public: @@ -166,7 +251,7 @@ class fx_distortion1_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_distortion1_dsp { +class FAUST_API decorator_dsp : public fx_distortion1_dsp { protected: @@ -199,7 +284,7 @@ class decorator_dsp : public fx_distortion1_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -228,18 +313,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -247,7 +335,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -258,16 +346,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -280,38 +366,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_distortion1_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -326,8 +413,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -357,37 +444,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -398,40 +484,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_distortion1_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -444,14 +530,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -553,10 +631,6 @@ struct fx_distortion1 : public fx_distortion1_dsp { #include #include -static float fx_distortion1_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_distortion1 #endif @@ -566,6 +640,16 @@ static float fx_distortion1_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_distortion1_faustpower2_f(float value) { + return value * value; +} + class fx_distortion1 : public fx_distortion1_dsp { private: @@ -587,49 +671,49 @@ class fx_distortion1 : public fx_distortion1_dsp { FAUSTFLOAT fVslider5; FAUSTFLOAT fVslider6; FAUSTFLOAT fEntry0; - FAUSTFLOAT fCheckbox1; FAUSTFLOAT fEntry1; FAUSTFLOAT fEntry2; + FAUSTFLOAT fCheckbox1; + FAUSTFLOAT fEntry3; + FAUSTFLOAT fEntry4; FAUSTFLOAT fCheckbox2; FAUSTFLOAT fVslider7; float fVec1[2]; FAUSTFLOAT fVslider8; - float fRec17[2]; + float fRec21[2]; float fVec2[2]; - float fRec16[2]; - float fRec15[2]; + float fRec20[2]; + float fRec19[2]; float fVec3[2]; - float fRec14[2]; + float fRec18[2]; float fVec4[2]; - float fRec13[2]; - float fRec12[3]; - float fRec11[3]; + float fRec17[2]; + float fRec16[3]; + float fRec15[3]; float fConst10; float fConst11; - float fRec10[3]; + float fRec14[3]; float fConst12; float fConst13; float fVec5[2]; + float fRec13[2]; + float fRec12[3]; + float fVec6[2]; + float fRec11[2]; + float fRec10[3]; + float fVec7[2]; float fRec9[2]; float fRec8[3]; FAUSTFLOAT fVslider9; - float fRec18[2]; - FAUSTFLOAT fVslider10; - FAUSTFLOAT fEntry3; float fRec22[2]; - float fRec21[3]; - float fVec6[2]; - float fRec20[2]; - float fRec19[3]; + FAUSTFLOAT fVslider10; + float fRec24[2]; + float fRec23[3]; FAUSTFLOAT fVslider11; - float fRec23[2]; + float fRec25[2]; FAUSTFLOAT fVslider12; - FAUSTFLOAT fEntry4; float fRec27[2]; float fRec26[3]; - float fVec7[2]; - float fRec25[2]; - float fRec24[3]; FAUSTFLOAT fVslider13; float fRec28[2]; FAUSTFLOAT fVslider14; @@ -648,9 +732,10 @@ class fx_distortion1 : public fx_distortion1_dsp { void metadata(Meta* m) { m->declare("HighShelf.dsp/id", "HighShelf"); m->declare("author", "brummer"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion1 -scn fx_distortion1_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "(c)brummer 2008"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); @@ -666,7 +751,7 @@ class fx_distortion1 : public fx_distortion1_dsp { m->declare("filters.lib/iir:author", "Julius O. Smith III"); m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -722,170 +807,170 @@ class fx_distortion1 : public fx_distortion1_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - float fConst2 = (6.28318548f * (std::max(0.0f, ((0.5f * fConst0) + -100.0f)) / fConst0)); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + float fConst2 = 6.2831855f * (std::max(0.0f, 0.5f * fConst0 + -1e+02f) / fConst0); float fConst3 = std::cos(fConst2); - float fConst4 = (0.683772206f * fConst3); - float fConst5 = (0.00562341325f * std::sin(fConst2)); - float fConst6 = (fConst4 + fConst5); - fConst7 = (1.0f / (fConst6 + 1.31622779f)); - float fConst8 = (1.31622779f * fConst3); - fConst9 = (0.0f - (0.632455528f * (fConst8 + -0.683772206f))); - fConst10 = (fConst4 + (1.31622779f - fConst5)); - fConst11 = (2.0f * (-0.683772206f - fConst8)); - fConst12 = (0.316227764f * (fConst5 + (1.31622779f - fConst4))); - fConst13 = (0.316227764f * (1.31622779f - fConst6)); + float fConst4 = 0.6837722f * fConst3; + float fConst5 = 0.0056234132f * std::sin(fConst2); + float fConst6 = fConst4 + fConst5; + fConst7 = 1.0f / (fConst6 + 1.3162278f); + float fConst8 = 1.3162278f * fConst3; + fConst9 = 0.0f - 0.6324555f * (fConst8 + -0.6837722f); + fConst10 = fConst4 + (1.3162278f - fConst5); + fConst11 = 2.0f * (-0.6837722f - fConst8); + fConst12 = 0.31622776f * (fConst5 + (1.3162278f - fConst4)); + fConst13 = 0.31622776f * (1.3162278f - fConst6); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fVslider0 = FAUSTFLOAT(5000.0f); - fVslider1 = FAUSTFLOAT(130.0f); + fVslider0 = FAUSTFLOAT(5e+03f); + fVslider1 = FAUSTFLOAT(1.3e+02f); fVslider2 = FAUSTFLOAT(2.0f); - fVslider3 = FAUSTFLOAT(10.0f); + fVslider3 = FAUSTFLOAT(1e+01f); fVslider4 = FAUSTFLOAT(0.01f); - fVslider5 = FAUSTFLOAT(1.0f); - fVslider6 = FAUSTFLOAT(0.64000000000000001f); - fEntry0 = FAUSTFLOAT(1250.0f); + fVslider5 = FAUSTFLOAT(0.64f); + fVslider6 = FAUSTFLOAT(1.0f); + fEntry0 = FAUSTFLOAT(2.5e+02f); + fEntry1 = FAUSTFLOAT(6.5e+02f); + fEntry2 = FAUSTFLOAT(1.25e+03f); fCheckbox1 = FAUSTFLOAT(0.0f); - fEntry1 = FAUSTFLOAT(130.0f); - fEntry2 = FAUSTFLOAT(5000.0f); + fEntry3 = FAUSTFLOAT(1.3e+02f); + fEntry4 = FAUSTFLOAT(5e+03f); fCheckbox2 = FAUSTFLOAT(0.0f); fVslider7 = FAUSTFLOAT(0.12f); fVslider8 = FAUSTFLOAT(1.0f); - fVslider9 = FAUSTFLOAT(10.0f); + fVslider9 = FAUSTFLOAT(1e+01f); fVslider10 = FAUSTFLOAT(1.0f); - fEntry3 = FAUSTFLOAT(650.0f); - fVslider11 = FAUSTFLOAT(10.0f); + fVslider11 = FAUSTFLOAT(1e+01f); fVslider12 = FAUSTFLOAT(1.0f); - fEntry4 = FAUSTFLOAT(250.0f); - fVslider13 = FAUSTFLOAT(10.0f); + fVslider13 = FAUSTFLOAT(1e+01f); fVslider14 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec4[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec6[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec7[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fVec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec17[l5] = 0.0f; + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec21[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fVec2[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { - fRec16[l7] = 0.0f; + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { + fRec20[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec15[l8] = 0.0f; + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { + fRec19[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fVec3[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec14[l10] = 0.0f; + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { + fRec18[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fVec4[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec13[l12] = 0.0f; + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { + fRec17[l12] = 0.0f; } - for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { - fRec12[l13] = 0.0f; + for (int l13 = 0; l13 < 3; l13 = l13 + 1) { + fRec16[l13] = 0.0f; } - for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { - fRec11[l14] = 0.0f; + for (int l14 = 0; l14 < 3; l14 = l14 + 1) { + fRec15[l14] = 0.0f; } - for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec10[l15] = 0.0f; + for (int l15 = 0; l15 < 3; l15 = l15 + 1) { + fRec14[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fVec5[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec9[l17] = 0.0f; + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { + fRec13[l17] = 0.0f; } - for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { - fRec8[l18] = 0.0f; + for (int l18 = 0; l18 < 3; l18 = l18 + 1) { + fRec12[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec18[l19] = 0.0f; + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fVec6[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec22[l20] = 0.0f; + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { + fRec11[l20] = 0.0f; } - for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { - fRec21[l21] = 0.0f; + for (int l21 = 0; l21 < 3; l21 = l21 + 1) { + fRec10[l21] = 0.0f; } - for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fVec6[l22] = 0.0f; + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { + fVec7[l22] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec20[l23] = 0.0f; + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { + fRec9[l23] = 0.0f; } - for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { - fRec19[l24] = 0.0f; + for (int l24 = 0; l24 < 3; l24 = l24 + 1) { + fRec8[l24] = 0.0f; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0f; + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { + fRec22[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec27[l26] = 0.0f; + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { + fRec24[l26] = 0.0f; } - for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec26[l27] = 0.0f; + for (int l27 = 0; l27 < 3; l27 = l27 + 1) { + fRec23[l27] = 0.0f; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fVec7[l28] = 0.0f; + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { + fRec25[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec25[l29] = 0.0f; + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { + fRec27[l29] = 0.0f; } - for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { - fRec24[l30] = 0.0f; + for (int l30 = 0; l30 < 3; l30 = l30 + 1) { + fRec26[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec28[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2; l32 = l32 + 1) { fRec30[l32] = 0.0f; } - for (int l33 = 0; (l33 < 3); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 3; l33 = l33 + 1) { fRec29[l33] = 0.0f; } - for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 3; l34 = l34 + 1) { fRec5[l34] = 0.0f; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { fVec8[l35] = 0.0f; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 2; l36 = l36 + 1) { fRec3[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { fVec9[l37] = 0.0f; } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { fRec2[l38] = 0.0f; } - for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 3; l39 = l39 + 1) { fRec1[l39] = 0.0f; } - for (int l40 = 0; (l40 < 3); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 3; l40 = l40 + 1) { fRec0[l40] = 0.0f; } } @@ -910,232 +995,230 @@ class fx_distortion1 : public fx_distortion1_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.distortion1"); - ui_interface->addVerticalSlider("drive", &fVslider6, FAUSTFLOAT(0.639999986f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("drive", &fVslider5, FAUSTFLOAT(0.64f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("high_drive", &fVslider5, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("high_gain", &fVslider3, FAUSTFLOAT(10.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("level", &fVslider4, FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("low_drive", &fVslider14, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("high_drive", &fVslider12, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->declare(&fVslider11, "unit", "db"); + ui_interface->addVerticalSlider("high_gain", &fVslider11, FAUSTFLOAT(1e+01f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("level", &fVslider4, FAUSTFLOAT(0.01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("low_drive", &fVslider14, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider13, "unit", "db"); - ui_interface->addVerticalSlider("low_gain", &fVslider13, FAUSTFLOAT(10.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("low_gain", &fVslider13, FAUSTFLOAT(1e+01f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.1f)); ui_interface->openHorizontalBox("low_highcutoff"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("sp_high_freq", &fVslider0, FAUSTFLOAT(5000.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(12000.0f), FAUSTFLOAT(10.0f)); + ui_interface->addVerticalSlider("sp_high_freq", &fVslider0, FAUSTFLOAT(5e+03f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1.2e+04f), FAUSTFLOAT(1e+01f)); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("sp_low_freq", &fVslider1, FAUSTFLOAT(130.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(10.0f)); + ui_interface->addVerticalSlider("sp_low_freq", &fVslider1, FAUSTFLOAT(1.3e+02f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1e+01f)); ui_interface->addCheckButton("sp_on_off", &fCheckbox0); ui_interface->closeBox(); ui_interface->openHorizontalBox("low_highpass"); ui_interface->addCheckButton("flt_on_off", &fCheckbox1); - ui_interface->declare(&fEntry1, "unit", "Hz"); - ui_interface->addNumEntry("hp_freq", &fEntry1, FAUSTFLOAT(130.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(7040.0f), FAUSTFLOAT(10.0f)); - ui_interface->declare(&fEntry2, "unit", "Hz"); - ui_interface->addNumEntry("lp_freq", &fEntry2, FAUSTFLOAT(5000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(12000.0f), FAUSTFLOAT(10.0f)); + ui_interface->declare(&fEntry3, "unit", "Hz"); + ui_interface->addNumEntry("hp_freq", &fEntry3, FAUSTFLOAT(1.3e+02f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(7.04e+03f), FAUSTFLOAT(1e+01f)); + ui_interface->declare(&fEntry4, "unit", "Hz"); + ui_interface->addNumEntry("lp_freq", &fEntry4, FAUSTFLOAT(5e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.2e+04f), FAUSTFLOAT(1e+01f)); ui_interface->closeBox(); - ui_interface->addVerticalSlider("middle_h_drive", &fVslider10, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("middle_h_drive", &fVslider10, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider9, "unit", "db"); - ui_interface->addVerticalSlider("middle_h_gain", &fVslider9, FAUSTFLOAT(10.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("middle_l_drive", &fVslider12, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->declare(&fVslider11, "unit", "db"); - ui_interface->addVerticalSlider("middle_l_gain", &fVslider11, FAUSTFLOAT(10.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("middle_h_gain", &fVslider9, FAUSTFLOAT(1e+01f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("middle_l_drive", &fVslider6, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->declare(&fVslider3, "unit", "db"); + ui_interface->addVerticalSlider("middle_l_gain", &fVslider3, FAUSTFLOAT(1e+01f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.1f)); ui_interface->addCheckButton("res_on_off", &fCheckbox2); + ui_interface->declare(&fEntry2, "unit", "Hz"); + ui_interface->addNumEntry("split_high_freq", &fEntry2, FAUSTFLOAT(1.25e+03f), FAUSTFLOAT(1.25e+03f), FAUSTFLOAT(1.2e+04f), FAUSTFLOAT(1e+01f)); ui_interface->declare(&fEntry0, "unit", "Hz"); - ui_interface->addNumEntry("split_high_freq", &fEntry0, FAUSTFLOAT(1250.0f), FAUSTFLOAT(1250.0f), FAUSTFLOAT(12000.0f), FAUSTFLOAT(10.0f)); - ui_interface->declare(&fEntry4, "unit", "Hz"); - ui_interface->addNumEntry("split_low_freq", &fEntry4, FAUSTFLOAT(250.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(600.0f), FAUSTFLOAT(10.0f)); - ui_interface->declare(&fEntry3, "unit", "Hz"); - ui_interface->addNumEntry("split_middle_freq", &fEntry3, FAUSTFLOAT(650.0f), FAUSTFLOAT(600.0f), FAUSTFLOAT(1250.0f), FAUSTFLOAT(10.0f)); - ui_interface->addVerticalSlider("trigger", &fVslider7, FAUSTFLOAT(0.119999997f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("vibrato", &fVslider8, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addNumEntry("split_low_freq", &fEntry0, FAUSTFLOAT(2.5e+02f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(6e+02f), FAUSTFLOAT(1e+01f)); + ui_interface->declare(&fEntry1, "unit", "Hz"); + ui_interface->addNumEntry("split_middle_freq", &fEntry1, FAUSTFLOAT(6.5e+02f), FAUSTFLOAT(6e+02f), FAUSTFLOAT(1.25e+03f), FAUSTFLOAT(1e+01f)); + ui_interface->addVerticalSlider("trigger", &fVslider7, FAUSTFLOAT(0.12f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("vibrato", &fVslider8, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = std::tan((fConst1 * float(fVslider0))); - float fSlow2 = (1.0f / fSlow1); - float fSlow3 = (1.0f / (((fSlow2 + 0.765366852f) / fSlow1) + 1.0f)); - float fSlow4 = (1.0f / (((fSlow2 + 1.84775901f) / fSlow1) + 1.0f)); - float fSlow5 = (fConst1 * float(fVslider1)); - float fSlow6 = (1.0f / (fSlow5 + 1.0f)); - float fSlow7 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider2) + -10.0f)))); - float fSlow8 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider3) + -10.0f)))); + float fSlow1 = std::tan(fConst1 * float(fVslider0)); + float fSlow2 = 1.0f / fSlow1; + float fSlow3 = 1.0f / ((fSlow2 + 0.76536685f) / fSlow1 + 1.0f); + float fSlow4 = 1.0f / ((fSlow2 + 1.847759f) / fSlow1 + 1.0f); + float fSlow5 = fConst1 * float(fVslider1); + float fSlow6 = 1.0f / (fSlow5 + 1.0f); + float fSlow7 = 0.001f * std::pow(1e+01f, 0.05f * (float(fVslider2) + -1e+01f)); + float fSlow8 = 0.001f * std::pow(1e+01f, 0.05f * (float(fVslider3) + -1e+01f)); float fSlow9 = float(fVslider4); - float fSlow10 = float(fVslider6); - float fSlow11 = std::tan((fConst1 * float(fEntry0))); - float fSlow12 = (1.0f / fSlow11); - float fSlow13 = (((fSlow12 + 1.0f) / fSlow11) + 1.0f); - float fSlow14 = (std::pow(10.0f, (2.0f * (float(fVslider5) * fSlow10))) / fSlow13); + float fSlow10 = float(fVslider5); + float fSlow11 = std::tan(fConst1 * float(fEntry0)); + float fSlow12 = 1.0f / fSlow11; + float fSlow13 = (fSlow12 + 1.0f) / fSlow11 + 1.0f; + float fSlow14 = std::pow(1e+01f, 2.0f * fSlow10 * float(fVslider6)) / fSlow13; float fSlow15 = fx_distortion1_faustpower2_f(fSlow11); - float fSlow16 = (1.0f / fSlow15); - float fSlow17 = (fSlow12 + 1.0f); - float fSlow18 = (1.0f / (fSlow11 * fSlow17)); - int iSlow19 = int(float(fCheckbox1)); - float fSlow20 = std::tan((fConst1 * float(fEntry1))); - float fSlow21 = (1.0f / fSlow20); - float fSlow22 = (fSlow21 + 1.0f); - float fSlow23 = (0.0f - (1.0f / (fSlow20 * fSlow22))); - float fSlow24 = (1.0f / std::tan((fConst1 * float(fEntry2)))); - float fSlow25 = (1.0f / (fSlow24 + 1.0f)); - float fSlow26 = (1.0f - fSlow24); - int iSlow27 = int(float(fCheckbox2)); - float fSlow28 = (1.0f - float(fVslider7)); - float fSlow29 = float(fVslider8); - int iSlow30 = int(std::min(4096.0f, std::max(0.0f, (fSlow29 + -1.0f)))); - int iSlow31 = int(std::min(4096.0f, std::max(0.0f, fSlow29))); - float fSlow32 = (1.0f / fSlow22); - float fSlow33 = (1.0f - fSlow21); - float fSlow34 = (1.0f - fSlow5); - float fSlow35 = (((fSlow2 + -1.84775901f) / fSlow1) + 1.0f); - float fSlow36 = (2.0f * (1.0f - (1.0f / fx_distortion1_faustpower2_f(fSlow1)))); - float fSlow37 = (((fSlow2 + -0.765366852f) / fSlow1) + 1.0f); - float fSlow38 = (0.0f - fSlow18); - float fSlow39 = (1.0f - fSlow12); - float fSlow40 = (fSlow39 / fSlow17); - float fSlow41 = (1.0f / fSlow13); - float fSlow42 = (((fSlow12 + -1.0f) / fSlow11) + 1.0f); - float fSlow43 = (2.0f * (1.0f - fSlow16)); - float fSlow44 = (0.0f - (2.0f / fSlow15)); - float fSlow45 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider9) + -10.0f)))); - float fSlow46 = std::tan((fConst1 * float(fEntry3))); - float fSlow47 = (1.0f / fSlow46); - float fSlow48 = (((fSlow47 + 1.0f) / fSlow46) + 1.0f); - float fSlow49 = (std::pow(10.0f, (2.0f * (fSlow10 * float(fVslider10)))) / fSlow48); - float fSlow50 = fx_distortion1_faustpower2_f(fSlow46); - float fSlow51 = (0.0f - (2.0f / fSlow50)); - float fSlow52 = (fSlow47 + 1.0f); - float fSlow53 = (0.0f - (1.0f / (fSlow46 * fSlow52))); - float fSlow54 = (1.0f / fSlow17); - float fSlow55 = (1.0f / fSlow52); - float fSlow56 = (1.0f - fSlow47); - float fSlow57 = (1.0f / (fSlow46 * fSlow13)); - float fSlow58 = (1.0f / fSlow48); - float fSlow59 = (((fSlow47 + -1.0f) / fSlow46) + 1.0f); - float fSlow60 = (1.0f / fSlow50); - float fSlow61 = (2.0f * (1.0f - fSlow60)); - float fSlow62 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider11) + -10.0f)))); - float fSlow63 = std::tan((fConst1 * float(fEntry4))); - float fSlow64 = (1.0f / fSlow63); - float fSlow65 = (((fSlow64 + 1.0f) / fSlow63) + 1.0f); - float fSlow66 = (std::pow(10.0f, (2.0f * (fSlow10 * float(fVslider12)))) / fSlow65); - float fSlow67 = fx_distortion1_faustpower2_f(fSlow63); - float fSlow68 = (1.0f / fSlow67); - float fSlow69 = (fSlow64 + 1.0f); - float fSlow70 = (0.0f - (1.0f / (fSlow63 * fSlow69))); - float fSlow71 = (1.0f / fSlow69); - float fSlow72 = (1.0f - fSlow64); - float fSlow73 = (1.0f / (fSlow63 * fSlow48)); - float fSlow74 = (1.0f / fSlow65); - float fSlow75 = (((fSlow64 + -1.0f) / fSlow63) + 1.0f); - float fSlow76 = (2.0f * (1.0f - fSlow68)); - float fSlow77 = (0.0f - (2.0f / fSlow67)); - float fSlow78 = (0.00100000005f * std::pow(10.0f, (0.0500000007f * (float(fVslider13) + -10.0f)))); - float fSlow79 = (std::pow(10.0f, (2.0f * (fSlow10 * float(fVslider14)))) / fSlow65); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow16 = 1.0f / fSlow15; + float fSlow17 = fSlow12 + 1.0f; + float fSlow18 = 0.0f - 1.0f / (fSlow11 * fSlow17); + float fSlow19 = std::tan(fConst1 * float(fEntry1)); + float fSlow20 = 1.0f / fSlow19; + float fSlow21 = (fSlow20 + 1.0f) / fSlow19 + 1.0f; + float fSlow22 = 1.0f / fSlow21; + float fSlow23 = fSlow20 + 1.0f; + float fSlow24 = 1.0f / fSlow23; + float fSlow25 = 1.0f - fSlow20; + float fSlow26 = std::tan(fConst1 * float(fEntry2)); + float fSlow27 = 1.0f / fSlow26; + float fSlow28 = (fSlow27 + 1.0f) / fSlow26 + 1.0f; + float fSlow29 = 1.0f / fSlow28; + float fSlow30 = fSlow27 + 1.0f; + float fSlow31 = 1.0f / fSlow30; + float fSlow32 = 1.0f - fSlow27; + int iSlow33 = int(float(fCheckbox1)); + float fSlow34 = std::tan(fConst1 * float(fEntry3)); + float fSlow35 = 1.0f / fSlow34; + float fSlow36 = fSlow35 + 1.0f; + float fSlow37 = 0.0f - 1.0f / (fSlow34 * fSlow36); + float fSlow38 = 1.0f / std::tan(fConst1 * float(fEntry4)); + float fSlow39 = 1.0f / (fSlow38 + 1.0f); + float fSlow40 = 1.0f - fSlow38; + int iSlow41 = int(float(fCheckbox2)); + float fSlow42 = 1.0f - float(fVslider7); + float fSlow43 = float(fVslider8); + int iSlow44 = int(std::min(4096.0f, std::max(0.0f, fSlow43 + -1.0f))); + int iSlow45 = int(std::min(4096.0f, std::max(0.0f, fSlow43))); + float fSlow46 = 1.0f / fSlow36; + float fSlow47 = 1.0f - fSlow35; + float fSlow48 = 1.0f - fSlow5; + float fSlow49 = (fSlow2 + -1.847759f) / fSlow1 + 1.0f; + float fSlow50 = 2.0f * (1.0f - 1.0f / fx_distortion1_faustpower2_f(fSlow1)); + float fSlow51 = (fSlow2 + -0.76536685f) / fSlow1 + 1.0f; + float fSlow52 = (fSlow27 + -1.0f) / fSlow26 + 1.0f; + float fSlow53 = fx_distortion1_faustpower2_f(fSlow26); + float fSlow54 = 1.0f / fSlow53; + float fSlow55 = 2.0f * (1.0f - fSlow54); + float fSlow56 = (fSlow20 + -1.0f) / fSlow19 + 1.0f; + float fSlow57 = fx_distortion1_faustpower2_f(fSlow19); + float fSlow58 = 1.0f / fSlow57; + float fSlow59 = 2.0f * (1.0f - fSlow58); + float fSlow60 = 1.0f / fSlow17; + float fSlow61 = 1.0f - fSlow12; + float fSlow62 = 1.0f / (fSlow21 * fSlow11); + float fSlow63 = 1.0f / fSlow13; + float fSlow64 = (fSlow12 + -1.0f) / fSlow11 + 1.0f; + float fSlow65 = 2.0f * (1.0f - fSlow16); + float fSlow66 = 0.0f - 2.0f / fSlow15; + float fSlow67 = 0.001f * std::pow(1e+01f, 0.05f * (float(fVslider9) + -1e+01f)); + float fSlow68 = std::pow(1e+01f, 2.0f * fSlow10 * float(fVslider10)) / fSlow21; + float fSlow69 = 0.0f - 1.0f / (fSlow19 * fSlow23); + float fSlow70 = 1.0f / (fSlow28 * fSlow19); + float fSlow71 = 0.0f - 2.0f / fSlow57; + float fSlow72 = 0.001f * std::pow(1e+01f, 0.05f * (float(fVslider11) + -1e+01f)); + float fSlow73 = std::pow(1e+01f, 2.0f * float(fVslider12) * fSlow10) / fSlow28; + float fSlow74 = 1.0f / (fSlow26 * fSlow30); + float fSlow75 = 0.0f - fSlow74; + float fSlow76 = fSlow32 / fSlow30; + float fSlow77 = 0.0f - 2.0f / fSlow53; + float fSlow78 = 0.001f * std::pow(1e+01f, 0.05f * (float(fVslider13) + -1e+01f)); + float fSlow79 = std::pow(1e+01f, 2.0f * fSlow10 * float(fVslider14)) / fSlow13; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { iVec0[0] = 1; - fRec4[0] = ((9.99999968e-21f * float((1 - iVec0[1]))) - fRec4[1]); - fRec6[0] = (fSlow7 + (0.999000013f * fRec6[1])); - fRec7[0] = (fSlow8 + (0.999000013f * fRec7[1])); + fRec4[0] = 1e-20f * float(1 - iVec0[1]) - fRec4[1]; + fRec6[0] = fSlow7 + 0.999f * fRec6[1]; + fRec7[0] = fSlow8 + 0.999f * fRec7[1]; float fTemp0 = float(input0[i0]); - float fTemp1 = (fTemp0 + (fSlow28 * fRec17[1])); + float fTemp1 = fTemp0 + fSlow42 * fRec21[1]; fVec1[0] = fTemp1; - fRec17[0] = (0.5f * (fVec1[iSlow30] + fVec1[iSlow31])); - float fTemp2 = ((iSlow27 ? fRec17[0] : fTemp0) + fRec4[0]); - float fTemp3 = (fRec4[0] + (iSlow19 ? 0.0f : fTemp2)); + fRec21[0] = 0.5f * (fVec1[iSlow44] + fVec1[iSlow45]); + float fTemp2 = fRec4[0] + ((iSlow41) ? fRec21[0] : fTemp0); + float fTemp3 = fRec4[0] + ((iSlow33) ? 0.0f : fTemp2); fVec2[0] = fTemp3; - fRec16[0] = (0.0f - (fSlow25 * ((fSlow26 * fRec16[1]) - (fTemp3 + fVec2[1])))); - fRec15[0] = ((fSlow23 * fRec16[1]) - (fSlow32 * ((fSlow33 * fRec15[1]) - (fSlow21 * fRec16[0])))); - float fTemp4 = (iSlow19 ? fTemp2 : fRec15[0]); - float fTemp5 = (fRec4[0] + (iSlow0 ? 0.0f : fTemp4)); - fVec3[0] = (fSlow6 * fTemp5); - fRec14[0] = ((fSlow6 * (fTemp5 + (fSlow34 * fRec14[1]))) - fVec3[1]); - fVec4[0] = (fSlow6 * fRec14[0]); - fRec13[0] = ((fSlow6 * (fRec14[0] + (fSlow34 * fRec13[1]))) - fVec4[1]); - fRec12[0] = (fRec13[0] - (fSlow4 * ((fSlow35 * fRec12[2]) + (fSlow36 * fRec12[1])))); - fRec11[0] = ((fSlow4 * (fRec12[2] + (fRec12[0] + (2.0f * fRec12[1])))) - (fSlow3 * ((fSlow37 * fRec11[2]) + (fSlow36 * fRec11[1])))); - float fThen4 = (fSlow3 * (fRec11[2] + (fRec11[0] + (2.0f * fRec11[1])))); - fRec10[0] = ((iSlow0 ? fTemp4 : fThen4) - (fConst7 * ((fConst10 * fRec10[2]) + (fConst11 * fRec10[1])))); - float fTemp6 = (((fConst9 * fRec10[1]) + (fConst12 * fRec10[0])) + (fConst13 * fRec10[2])); + fRec20[0] = 0.0f - fSlow39 * (fSlow40 * fRec20[1] - (fTemp3 + fVec2[1])); + fRec19[0] = fSlow37 * fRec20[1] - fSlow46 * (fSlow47 * fRec19[1] - fSlow35 * fRec20[0]); + float fTemp4 = ((iSlow33) ? fTemp2 : fRec19[0]); + float fTemp5 = fRec4[0] + ((iSlow0) ? 0.0f : fTemp4); + fVec3[0] = fSlow6 * fTemp5; + fRec18[0] = fSlow6 * (fTemp5 + fSlow48 * fRec18[1]) - fVec3[1]; + fVec4[0] = fSlow6 * fRec18[0]; + fRec17[0] = fSlow6 * (fRec18[0] + fSlow48 * fRec17[1]) - fVec4[1]; + fRec16[0] = fRec17[0] - fSlow4 * (fSlow49 * fRec16[2] + fSlow50 * fRec16[1]); + fRec15[0] = fSlow4 * (fRec16[2] + fRec16[0] + 2.0f * fRec16[1]) - fSlow3 * (fSlow51 * fRec15[2] + fSlow50 * fRec15[1]); + fRec14[0] = ((iSlow0) ? fTemp4 : fSlow3 * (fRec15[2] + fRec15[0] + 2.0f * fRec15[1])) - fConst7 * (fConst10 * fRec14[2] + fConst11 * fRec14[1]); + float fTemp6 = fConst9 * fRec14[1] + fConst12 * fRec14[0] + fConst13 * fRec14[2]; fVec5[0] = fTemp6; - fRec9[0] = ((fConst7 * ((fSlow18 * fTemp6) + (fSlow38 * fVec5[1]))) - (fSlow40 * fRec9[1])); - fRec8[0] = (fRec9[0] - (fSlow41 * ((fSlow42 * fRec8[2]) + (fSlow43 * fRec8[1])))); - float fTemp7 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow14 * (((fSlow16 * fRec8[0]) + (fSlow44 * fRec8[1])) + (fSlow16 * fRec8[2])))))); - fRec18[0] = (fSlow45 + (0.999000013f * fRec18[1])); - fRec22[0] = (0.0f - (fSlow54 * ((fSlow39 * fRec22[1]) - (fConst7 * (fTemp6 + fVec5[1]))))); - fRec21[0] = (fRec22[0] - (fSlow41 * ((fSlow42 * fRec21[2]) + (fSlow43 * fRec21[1])))); - float fTemp8 = (fRec21[2] + (fRec21[0] + (2.0f * fRec21[1]))); - float fTemp9 = (fSlow41 * fTemp8); - fVec6[0] = fTemp9; - fRec20[0] = ((fSlow53 * fVec6[1]) - (fSlow55 * ((fSlow56 * fRec20[1]) - (fSlow57 * fTemp8)))); - fRec19[0] = (fRec20[0] - (fSlow58 * ((fSlow59 * fRec19[2]) + (fSlow61 * fRec19[1])))); - float fTemp10 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow49 * (((fSlow51 * fRec19[1]) + (fSlow60 * fRec19[0])) + (fSlow60 * fRec19[2])))))); - fRec23[0] = (fSlow62 + (0.999000013f * fRec23[1])); - fRec27[0] = (0.0f - (fSlow55 * ((fSlow56 * fRec27[1]) - (fTemp9 + fVec6[1])))); - fRec26[0] = (fRec27[0] - (fSlow58 * ((fSlow59 * fRec26[2]) + (fSlow61 * fRec26[1])))); - float fTemp11 = (fRec26[2] + (fRec26[0] + (2.0f * fRec26[1]))); - float fTemp12 = (fSlow58 * fTemp11); - fVec7[0] = fTemp12; - fRec25[0] = ((fSlow70 * fVec7[1]) - (fSlow71 * ((fSlow72 * fRec25[1]) - (fSlow73 * fTemp11)))); - fRec24[0] = (fRec25[0] - (fSlow74 * ((fSlow75 * fRec24[2]) + (fSlow76 * fRec24[1])))); - float fTemp13 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow66 * (((fSlow68 * fRec24[0]) + (fSlow77 * fRec24[1])) + (fSlow68 * fRec24[2])))))); - fRec28[0] = (fSlow78 + (0.999000013f * fRec28[1])); - fRec30[0] = (0.0f - (fSlow71 * ((fSlow72 * fRec30[1]) - (fTemp12 + fVec7[1])))); - fRec29[0] = (fRec30[0] - (fSlow74 * ((fSlow75 * fRec29[2]) + (fSlow76 * fRec29[1])))); - float fTemp14 = std::max(-1.0f, std::min(1.0f, (fSlow9 + (fSlow79 * (fRec29[2] + (fRec29[0] + (2.0f * fRec29[1]))))))); - fRec5[0] = ((fRec6[0] * (((((fRec7[0] * fTemp7) * (1.0f - (0.333333343f * fx_distortion1_faustpower2_f(fTemp7)))) + ((fRec18[0] * fTemp10) * (1.0f - (0.333333343f * fx_distortion1_faustpower2_f(fTemp10))))) + ((fRec23[0] * fTemp13) * (1.0f - (0.333333343f * fx_distortion1_faustpower2_f(fTemp13))))) + ((fRec28[0] * fTemp14) * (1.0f - (0.333333343f * fx_distortion1_faustpower2_f(fTemp14)))))) - (fConst7 * ((fConst10 * fRec5[2]) + (fConst11 * fRec5[1])))); - float fTemp15 = (fConst7 * (((fConst9 * fRec5[1]) + (fConst12 * fRec5[0])) + (fConst13 * fRec5[2]))); - float fTemp16 = (fRec4[0] + (iSlow0 ? 0.0f : fTemp15)); - fVec8[0] = (fSlow6 * fTemp16); - fRec3[0] = ((fSlow6 * (fTemp16 + (fSlow34 * fRec3[1]))) - fVec8[1]); - fVec9[0] = (fSlow6 * fRec3[0]); - fRec2[0] = ((fSlow6 * (fRec3[0] + (fSlow34 * fRec2[1]))) - fVec9[1]); - fRec1[0] = (fRec2[0] - (fSlow4 * ((fSlow35 * fRec1[2]) + (fSlow36 * fRec1[1])))); - fRec0[0] = ((fSlow4 * (fRec1[2] + (fRec1[0] + (2.0f * fRec1[1])))) - (fSlow3 * ((fSlow37 * fRec0[2]) + (fSlow36 * fRec0[1])))); - float fThen6 = (fSlow3 * (fRec0[2] + (fRec0[0] + (2.0f * fRec0[1])))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp15 : fThen6)); + fRec13[0] = 0.0f - fSlow31 * (fSlow32 * fRec13[1] - fConst7 * (fTemp6 + fVec5[1])); + fRec12[0] = fRec13[0] - fSlow29 * (fSlow52 * fRec12[2] + fSlow55 * fRec12[1]); + float fTemp7 = fRec12[2] + fRec12[0] + 2.0f * fRec12[1]; + float fTemp8 = fSlow29 * fTemp7; + fVec6[0] = fTemp8; + fRec11[0] = 0.0f - fSlow24 * (fSlow25 * fRec11[1] - (fTemp8 + fVec6[1])); + fRec10[0] = fRec11[0] - fSlow22 * (fSlow56 * fRec10[2] + fSlow59 * fRec10[1]); + float fTemp9 = fRec10[2] + fRec10[0] + 2.0f * fRec10[1]; + float fTemp10 = fSlow22 * fTemp9; + fVec7[0] = fTemp10; + fRec9[0] = fSlow18 * fVec7[1] - fSlow60 * (fSlow61 * fRec9[1] - fSlow62 * fTemp9); + fRec8[0] = fRec9[0] - fSlow63 * (fSlow64 * fRec8[2] + fSlow65 * fRec8[1]); + float fTemp11 = std::max(-1.0f, std::min(1.0f, fSlow9 + fSlow14 * (fSlow16 * fRec8[0] + fSlow66 * fRec8[1] + fSlow16 * fRec8[2]))); + fRec22[0] = fSlow67 + 0.999f * fRec22[1]; + fRec24[0] = fSlow69 * fVec6[1] - fSlow24 * (fSlow25 * fRec24[1] - fSlow70 * fTemp7); + fRec23[0] = fRec24[0] - fSlow22 * (fSlow56 * fRec23[2] + fSlow59 * fRec23[1]); + float fTemp12 = std::max(-1.0f, std::min(1.0f, fSlow9 + fSlow68 * (fSlow58 * fRec23[0] + fSlow71 * fRec23[1] + fSlow58 * fRec23[2]))); + fRec25[0] = fSlow72 + 0.999f * fRec25[1]; + fRec27[0] = fConst7 * (fSlow74 * fTemp6 + fSlow75 * fVec5[1]) - fSlow76 * fRec27[1]; + fRec26[0] = fRec27[0] - fSlow29 * (fSlow52 * fRec26[2] + fSlow55 * fRec26[1]); + float fTemp13 = std::max(-1.0f, std::min(1.0f, fSlow9 + fSlow73 * (fSlow54 * fRec26[0] + fSlow77 * fRec26[1] + fSlow54 * fRec26[2]))); + fRec28[0] = fSlow78 + 0.999f * fRec28[1]; + fRec30[0] = 0.0f - fSlow60 * (fSlow61 * fRec30[1] - (fTemp10 + fVec7[1])); + fRec29[0] = fRec30[0] - fSlow63 * (fSlow64 * fRec29[2] + fSlow65 * fRec29[1]); + float fTemp14 = std::max(-1.0f, std::min(1.0f, fSlow9 + fSlow79 * (fRec29[2] + fRec29[0] + 2.0f * fRec29[1]))); + fRec5[0] = fRec6[0] * (fRec7[0] * fTemp11 * (1.0f - 0.33333334f * fx_distortion1_faustpower2_f(fTemp11)) + fRec22[0] * fTemp12 * (1.0f - 0.33333334f * fx_distortion1_faustpower2_f(fTemp12)) + fRec25[0] * fTemp13 * (1.0f - 0.33333334f * fx_distortion1_faustpower2_f(fTemp13)) + fRec28[0] * fTemp14 * (1.0f - 0.33333334f * fx_distortion1_faustpower2_f(fTemp14))) - fConst7 * (fConst10 * fRec5[2] + fConst11 * fRec5[1]); + float fTemp15 = fConst7 * (fConst9 * fRec5[1] + fConst12 * fRec5[0] + fConst13 * fRec5[2]); + float fTemp16 = fRec4[0] + ((iSlow0) ? 0.0f : fTemp15); + fVec8[0] = fSlow6 * fTemp16; + fRec3[0] = fSlow6 * (fTemp16 + fSlow48 * fRec3[1]) - fVec8[1]; + fVec9[0] = fSlow6 * fRec3[0]; + fRec2[0] = fSlow6 * (fRec3[0] + fSlow48 * fRec2[1]) - fVec9[1]; + fRec1[0] = fRec2[0] - fSlow4 * (fSlow49 * fRec1[2] + fSlow50 * fRec1[1]); + fRec0[0] = fSlow4 * (fRec1[2] + fRec1[0] + 2.0f * fRec1[1]) - fSlow3 * (fSlow51 * fRec0[2] + fSlow50 * fRec0[1]); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp15 : fSlow3 * (fRec0[2] + fRec0[0] + 2.0f * fRec0[1]))); iVec0[1] = iVec0[0]; fRec4[1] = fRec4[0]; fRec6[1] = fRec6[0]; fRec7[1] = fRec7[0]; fVec1[1] = fVec1[0]; - fRec17[1] = fRec17[0]; + fRec21[1] = fRec21[0]; fVec2[1] = fVec2[0]; + fRec20[1] = fRec20[0]; + fRec19[1] = fRec19[0]; + fVec3[1] = fVec3[0]; + fRec18[1] = fRec18[0]; + fVec4[1] = fVec4[0]; + fRec17[1] = fRec17[0]; + fRec16[2] = fRec16[1]; fRec16[1] = fRec16[0]; + fRec15[2] = fRec15[1]; fRec15[1] = fRec15[0]; - fVec3[1] = fVec3[0]; + fRec14[2] = fRec14[1]; fRec14[1] = fRec14[0]; - fVec4[1] = fVec4[0]; + fVec5[1] = fVec5[0]; fRec13[1] = fRec13[0]; fRec12[2] = fRec12[1]; fRec12[1] = fRec12[0]; - fRec11[2] = fRec11[1]; + fVec6[1] = fVec6[0]; fRec11[1] = fRec11[0]; fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; - fVec5[1] = fVec5[0]; + fVec7[1] = fVec7[0]; fRec9[1] = fRec9[0]; fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; - fRec18[1] = fRec18[0]; fRec22[1] = fRec22[0]; - fRec21[2] = fRec21[1]; - fRec21[1] = fRec21[0]; - fVec6[1] = fVec6[0]; - fRec20[1] = fRec20[0]; - fRec19[2] = fRec19[1]; - fRec19[1] = fRec19[0]; + fRec24[1] = fRec24[0]; + fRec23[2] = fRec23[1]; fRec23[1] = fRec23[0]; + fRec25[1] = fRec25[0]; fRec27[1] = fRec27[0]; fRec26[2] = fRec26[1]; fRec26[1] = fRec26[0]; - fVec7[1] = fVec7[0]; - fRec25[1] = fRec25[0]; - fRec24[2] = fRec24[1]; - fRec24[1] = fRec24[0]; fRec28[1] = fRec28[0]; fRec30[1] = fRec30[0]; fRec29[2] = fRec29[1]; diff --git a/ceammc/ext/src/fx/fx_distortion2.h b/ceammc/ext/src/fx/fx_distortion2.h index 1011fbbab0..82238604ef 100644 --- a/ceammc/ext/src/fx/fx_distortion2.h +++ b/ceammc/ext/src/fx/fx_distortion2.h @@ -4,8 +4,8 @@ copyright: "(c)brummer 2008" license: "BSD" name: "fx.distortion2" version: "0.01" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion2 -scn fx_distortion2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion2_H__ @@ -18,23 +18,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_distortion2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_distortion2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -48,22 +48,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -72,7 +157,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_distortion2_dsp { +class FAUST_API fx_distortion2_dsp { public: @@ -166,7 +251,7 @@ class fx_distortion2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_distortion2_dsp { +class FAUST_API decorator_dsp : public fx_distortion2_dsp { protected: @@ -199,7 +284,7 @@ class decorator_dsp : public fx_distortion2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -228,18 +313,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -247,7 +335,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -258,16 +346,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -280,38 +366,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_distortion2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -326,8 +413,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -357,37 +444,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -398,40 +484,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_distortion2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -444,14 +530,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -553,10 +631,6 @@ struct fx_distortion2 : public fx_distortion2_dsp { #include #include -static float fx_distortion2_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_distortion2 #endif @@ -566,6 +640,16 @@ static float fx_distortion2_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_distortion2_faustpower2_f(float value) { + return value * value; +} + class fx_distortion2 : public fx_distortion2_dsp { private: @@ -620,9 +704,10 @@ class fx_distortion2 : public fx_distortion2_dsp { void metadata(Meta* m) { m->declare("HighShelf.dsp/id", "HighShelf"); m->declare("author", "brummer"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("basics.lib/version", "0.8"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion2 -scn fx_distortion2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "(c)brummer 2008"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); @@ -638,7 +723,7 @@ class fx_distortion2 : public fx_distortion2_dsp { m->declare("filters.lib/iir:author", "Julius O. Smith III"); m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -680,7 +765,7 @@ class fx_distortion2 : public fx_distortion2_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "0.01"); } @@ -696,104 +781,104 @@ class fx_distortion2 : public fx_distortion2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (3.14159274f / fConst0); - float fConst2 = (6.28318548f * (std::max(0.0f, ((0.5f * fConst0) + -100.0f)) / fConst0)); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 3.1415927f / fConst0; + float fConst2 = 6.2831855f * (std::max(0.0f, 0.5f * fConst0 + -1e+02f) / fConst0); float fConst3 = std::cos(fConst2); - float fConst4 = (0.683772206f * fConst3); - float fConst5 = (0.00562341325f * std::sin(fConst2)); - float fConst6 = (fConst4 + fConst5); - fConst7 = (1.0f / (fConst6 + 1.31622779f)); - float fConst8 = (1.31622779f * fConst3); - fConst9 = (0.0f - (0.632455528f * (fConst8 + -0.683772206f))); - fConst10 = (44.0999985f / fConst0); - fConst11 = (1.0f - fConst10); - fConst12 = (fConst4 + (1.31622779f - fConst5)); - fConst13 = (2.0f * (-0.683772206f - fConst8)); - fConst14 = (0.316227764f * (fConst5 + (1.31622779f - fConst4))); - fConst15 = (0.316227764f * (1.31622779f - fConst6)); + float fConst4 = 0.6837722f * fConst3; + float fConst5 = 0.0056234132f * std::sin(fConst2); + float fConst6 = fConst4 + fConst5; + fConst7 = 1.0f / (fConst6 + 1.3162278f); + float fConst8 = 1.3162278f * fConst3; + fConst9 = 0.0f - 0.6324555f * (fConst8 + -0.6837722f); + fConst10 = 44.1f / fConst0; + fConst11 = 1.0f - fConst10; + fConst12 = fConst4 + (1.3162278f - fConst5); + fConst13 = 2.0f * (-0.6837722f - fConst8); + fConst14 = 0.31622776f * (fConst5 + (1.3162278f - fConst4)); + fConst15 = 0.31622776f * (1.3162278f - fConst6); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fVslider0 = FAUSTFLOAT(5000.0f); - fVslider1 = FAUSTFLOAT(130.0f); + fVslider0 = FAUSTFLOAT(5e+03f); + fVslider1 = FAUSTFLOAT(1.3e+02f); fVslider2 = FAUSTFLOAT(2.0f); fVslider3 = FAUSTFLOAT(0.01f); - fVslider4 = FAUSTFLOAT(0.64000000000000001f); + fVslider4 = FAUSTFLOAT(0.64f); fCheckbox1 = FAUSTFLOAT(0.0f); - fEntry0 = FAUSTFLOAT(130.0f); - fEntry1 = FAUSTFLOAT(5000.0f); + fEntry0 = FAUSTFLOAT(1.3e+02f); + fEntry1 = FAUSTFLOAT(5e+03f); fCheckbox2 = FAUSTFLOAT(0.0f); fVslider5 = FAUSTFLOAT(0.12f); fVslider6 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec4[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec6[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fVec1[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec14[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fVec2[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec13[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec12[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fVec3[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec11[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fVec4[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec10[l11] = 0.0f; } - for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 3; l12 = l12 + 1) { fRec9[l12] = 0.0f; } - for (int l13 = 0; (l13 < 3); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 3; l13 = l13 + 1) { fRec8[l13] = 0.0f; } - for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 3; l14 = l14 + 1) { fRec7[l14] = 0.0f; } - for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 3; l15 = l15 + 1) { fRec5[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fVec5[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { fRec3[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { fVec6[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { fRec2[l19] = 0.0f; } - for (int l20 = 0; (l20 < 3); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 3; l20 = l20 + 1) { fRec1[l20] = 0.0f; } - for (int l21 = 0; (l21 < 3); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 3; l21 = l21 + 1) { fRec0[l21] = 0.0f; } } @@ -818,97 +903,95 @@ class fx_distortion2 : public fx_distortion2_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.distortion2"); - ui_interface->addVerticalSlider("drive", &fVslider4, FAUSTFLOAT(0.639999986f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("drive", &fVslider4, FAUSTFLOAT(0.64f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(-10.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("level", &fVslider3, FAUSTFLOAT(0.00999999978f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(-1e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("level", &fVslider3, FAUSTFLOAT(0.01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(0.01f)); ui_interface->openHorizontalBox("low_highcutoff"); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("sp_high_freq", &fVslider0, FAUSTFLOAT(5000.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(12000.0f), FAUSTFLOAT(10.0f)); + ui_interface->addVerticalSlider("sp_high_freq", &fVslider0, FAUSTFLOAT(5e+03f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1.2e+04f), FAUSTFLOAT(1e+01f)); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("sp_low_freq", &fVslider1, FAUSTFLOAT(130.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(10.0f)); + ui_interface->addVerticalSlider("sp_low_freq", &fVslider1, FAUSTFLOAT(1.3e+02f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1e+01f)); ui_interface->addCheckButton("sp_on_off", &fCheckbox0); ui_interface->closeBox(); ui_interface->openHorizontalBox("low_highpass"); ui_interface->addCheckButton("flt_on_off", &fCheckbox1); ui_interface->declare(&fEntry0, "unit", "Hz"); - ui_interface->addNumEntry("hp_freq", &fEntry0, FAUSTFLOAT(130.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(7040.0f), FAUSTFLOAT(10.0f)); + ui_interface->addNumEntry("hp_freq", &fEntry0, FAUSTFLOAT(1.3e+02f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(7.04e+03f), FAUSTFLOAT(1e+01f)); ui_interface->declare(&fEntry1, "unit", "Hz"); - ui_interface->addNumEntry("lp_freq", &fEntry1, FAUSTFLOAT(5000.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(12000.0f), FAUSTFLOAT(10.0f)); + ui_interface->addNumEntry("lp_freq", &fEntry1, FAUSTFLOAT(5e+03f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.2e+04f), FAUSTFLOAT(1e+01f)); ui_interface->closeBox(); ui_interface->addCheckButton("res_on_off", &fCheckbox2); - ui_interface->addVerticalSlider("trigger", &fVslider5, FAUSTFLOAT(0.119999997f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("vibrato", &fVslider6, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addVerticalSlider("trigger", &fVslider5, FAUSTFLOAT(0.12f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("vibrato", &fVslider6, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = std::tan((fConst1 * float(fVslider0))); - float fSlow2 = (1.0f / fSlow1); - float fSlow3 = (1.0f / (((fSlow2 + 0.765366852f) / fSlow1) + 1.0f)); - float fSlow4 = (1.0f / (((fSlow2 + 1.84775901f) / fSlow1) + 1.0f)); - float fSlow5 = (fConst1 * float(fVslider1)); - float fSlow6 = (1.0f / (fSlow5 + 1.0f)); - float fSlow7 = (fConst10 * std::pow(10.0f, (0.0500000007f * (float(fVslider2) + -10.0f)))); + float fSlow1 = std::tan(fConst1 * float(fVslider0)); + float fSlow2 = 1.0f / fSlow1; + float fSlow3 = 1.0f / ((fSlow2 + 0.76536685f) / fSlow1 + 1.0f); + float fSlow4 = 1.0f / ((fSlow2 + 1.847759f) / fSlow1 + 1.0f); + float fSlow5 = fConst1 * float(fVslider1); + float fSlow6 = 1.0f / (fSlow5 + 1.0f); + float fSlow7 = fConst10 * std::pow(1e+01f, 0.05f * (float(fVslider2) + -1e+01f)); float fSlow8 = float(fVslider3); - float fSlow9 = (fConst7 * std::pow(10.0f, (2.0f * float(fVslider4)))); + float fSlow9 = fConst7 * std::pow(1e+01f, 2.0f * float(fVslider4)); int iSlow10 = int(float(fCheckbox1)); - float fSlow11 = std::tan((fConst1 * float(fEntry0))); - float fSlow12 = (1.0f / fSlow11); - float fSlow13 = (fSlow12 + 1.0f); - float fSlow14 = (0.0f - (1.0f / (fSlow11 * fSlow13))); - float fSlow15 = (1.0f / std::tan((fConst1 * float(fEntry1)))); - float fSlow16 = (1.0f / (fSlow15 + 1.0f)); - float fSlow17 = (1.0f - fSlow15); - int iSlow18 = int(float(fCheckbox2)); - float fSlow19 = (1.0f - float(fVslider5)); - float fSlow20 = float(fVslider6); - int iSlow21 = int(std::min(4096.0f, std::max(0.0f, (fSlow20 + -1.0f)))); - int iSlow22 = int(std::min(4096.0f, std::max(0.0f, fSlow20))); - float fSlow23 = (1.0f / fSlow13); - float fSlow24 = (1.0f - fSlow12); - float fSlow25 = (1.0f - fSlow5); - float fSlow26 = (((fSlow2 + -1.84775901f) / fSlow1) + 1.0f); - float fSlow27 = (2.0f * (1.0f - (1.0f / fx_distortion2_faustpower2_f(fSlow1)))); - float fSlow28 = (((fSlow2 + -0.765366852f) / fSlow1) + 1.0f); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow11 = std::tan(fConst1 * float(fEntry0)); + float fSlow12 = 1.0f / fSlow11; + float fSlow13 = fSlow12 + 1.0f; + float fSlow14 = 0.0f - 1.0f / (fSlow11 * fSlow13); + float fSlow15 = 1.0f / std::tan(fConst1 * float(fEntry1)); + float fSlow16 = 1.0f / (fSlow15 + 1.0f); + int iSlow17 = int(float(fCheckbox2)); + float fSlow18 = 1.0f - float(fVslider5); + float fSlow19 = float(fVslider6); + int iSlow20 = int(std::min(4096.0f, std::max(0.0f, fSlow19 + -1.0f))); + int iSlow21 = int(std::min(4096.0f, std::max(0.0f, fSlow19))); + float fSlow22 = 1.0f - fSlow15; + float fSlow23 = 1.0f / fSlow13; + float fSlow24 = 1.0f - fSlow12; + float fSlow25 = 1.0f - fSlow5; + float fSlow26 = (fSlow2 + -1.847759f) / fSlow1 + 1.0f; + float fSlow27 = 2.0f * (1.0f - 1.0f / fx_distortion2_faustpower2_f(fSlow1)); + float fSlow28 = (fSlow2 + -0.76536685f) / fSlow1 + 1.0f; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { iVec0[0] = 1; - fRec4[0] = ((9.99999968e-21f * float((1 - iVec0[1]))) - fRec4[1]); - fRec6[0] = (fSlow7 + (fConst11 * fRec6[1])); + fRec4[0] = 1e-20f * float(1 - iVec0[1]) - fRec4[1]; + fRec6[0] = fSlow7 + fConst11 * fRec6[1]; float fTemp0 = float(input0[i0]); - float fTemp1 = (fTemp0 + (fSlow19 * fRec14[1])); + float fTemp1 = fTemp0 + fSlow18 * fRec14[1]; fVec1[0] = fTemp1; - fRec14[0] = (0.5f * (fVec1[iSlow21] + fVec1[iSlow22])); - float fTemp2 = ((iSlow18 ? fRec14[0] : fTemp0) + fRec4[0]); - float fTemp3 = (fRec4[0] + (iSlow10 ? 0.0f : fTemp2)); + fRec14[0] = 0.5f * (fVec1[iSlow20] + fVec1[iSlow21]); + float fTemp2 = fRec4[0] + ((iSlow17) ? fRec14[0] : fTemp0); + float fTemp3 = fRec4[0] + ((iSlow10) ? 0.0f : fTemp2); fVec2[0] = fTemp3; - fRec13[0] = (0.0f - (fSlow16 * ((fSlow17 * fRec13[1]) - (fTemp3 + fVec2[1])))); - fRec12[0] = ((fSlow14 * fRec13[1]) - (fSlow23 * ((fSlow24 * fRec12[1]) - (fSlow12 * fRec13[0])))); - float fTemp4 = ((iSlow10 ? fTemp2 : fRec12[0]) + 9.99999968e-21f); - float fTemp5 = (fRec4[0] + (iSlow0 ? 0.0f : fTemp4)); - fVec3[0] = (fSlow6 * fTemp5); - fRec11[0] = ((fSlow6 * (fTemp5 + (fSlow25 * fRec11[1]))) - fVec3[1]); - fVec4[0] = (fSlow6 * fRec11[0]); - fRec10[0] = ((fSlow6 * (fRec11[0] + (fSlow25 * fRec10[1]))) - fVec4[1]); - fRec9[0] = (fRec10[0] - (fSlow4 * ((fSlow26 * fRec9[2]) + (fSlow27 * fRec9[1])))); - fRec8[0] = ((fSlow4 * (fRec9[2] + (fRec9[0] + (2.0f * fRec9[1])))) - (fSlow3 * ((fSlow28 * fRec8[2]) + (fSlow27 * fRec8[1])))); - float fThen4 = (fSlow3 * (fRec8[2] + (fRec8[0] + (2.0f * fRec8[1])))); - fRec7[0] = ((iSlow0 ? fTemp4 : fThen4) - (fConst7 * ((fConst12 * fRec7[2]) + (fConst13 * fRec7[1])))); - float fTemp6 = std::max(-1.0f, std::min(1.0f, (fSlow8 + (fSlow9 * (((fConst9 * fRec7[1]) + (fConst14 * fRec7[0])) + (fConst15 * fRec7[2])))))); - fRec5[0] = (((fRec6[0] * fTemp6) * (1.0f - (0.333333343f * fx_distortion2_faustpower2_f(fTemp6)))) - (fConst7 * ((fConst12 * fRec5[2]) + (fConst13 * fRec5[1])))); - float fTemp7 = (fConst7 * (((fConst9 * fRec5[1]) + (fConst14 * fRec5[0])) + (fConst15 * fRec5[2]))); - float fTemp8 = (fRec4[0] + (iSlow0 ? 0.0f : fTemp7)); - fVec5[0] = (fSlow6 * fTemp8); - fRec3[0] = ((fSlow6 * (fTemp8 + (fSlow25 * fRec3[1]))) - fVec5[1]); - fVec6[0] = (fSlow6 * fRec3[0]); - fRec2[0] = ((fSlow6 * (fRec3[0] + (fSlow25 * fRec2[1]))) - fVec6[1]); - fRec1[0] = (fRec2[0] - (fSlow4 * ((fSlow26 * fRec1[2]) + (fSlow27 * fRec1[1])))); - fRec0[0] = ((fSlow4 * (fRec1[2] + (fRec1[0] + (2.0f * fRec1[1])))) - (fSlow3 * ((fSlow28 * fRec0[2]) + (fSlow27 * fRec0[1])))); - float fThen6 = (fSlow3 * (fRec0[2] + (fRec0[0] + (2.0f * fRec0[1])))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp7 : fThen6)); + fRec13[0] = fSlow16 * (fTemp3 + fVec2[1] - fSlow22 * fRec13[1]); + fRec12[0] = fSlow14 * fRec13[1] + fSlow23 * (fSlow12 * fRec13[0] - fSlow24 * fRec12[1]); + float fTemp4 = ((iSlow10) ? fTemp2 : fRec12[0]) + 1e-20f; + float fTemp5 = fRec4[0] + ((iSlow0) ? 0.0f : fTemp4); + fVec3[0] = fSlow6 * fTemp5; + fRec11[0] = fSlow6 * (fTemp5 + fSlow25 * fRec11[1]) - fVec3[1]; + fVec4[0] = fSlow6 * fRec11[0]; + fRec10[0] = fSlow6 * (fRec11[0] + fSlow25 * fRec10[1]) - fVec4[1]; + fRec9[0] = fRec10[0] - fSlow4 * (fSlow26 * fRec9[2] + fSlow27 * fRec9[1]); + fRec8[0] = fSlow4 * (fRec9[2] + fRec9[0] + 2.0f * fRec9[1]) - fSlow3 * (fSlow28 * fRec8[2] + fSlow27 * fRec8[1]); + fRec7[0] = ((iSlow0) ? fTemp4 : fSlow3 * (fRec8[2] + fRec8[0] + 2.0f * fRec8[1])) - fConst7 * (fConst12 * fRec7[2] + fConst13 * fRec7[1]); + float fTemp6 = std::max(-1.0f, std::min(1.0f, fSlow8 + fSlow9 * (fConst9 * fRec7[1] + fConst14 * fRec7[0] + fConst15 * fRec7[2]))); + fRec5[0] = fRec6[0] * fTemp6 * (1.0f - 0.33333334f * fx_distortion2_faustpower2_f(fTemp6)) - fConst7 * (fConst12 * fRec5[2] + fConst13 * fRec5[1]); + float fTemp7 = fConst7 * (fConst9 * fRec5[1] + fConst14 * fRec5[0] + fConst15 * fRec5[2]); + float fTemp8 = fRec4[0] + ((iSlow0) ? 0.0f : fTemp7); + fVec5[0] = fSlow6 * fTemp8; + fRec3[0] = fSlow6 * (fTemp8 + fSlow25 * fRec3[1]) - fVec5[1]; + fVec6[0] = fSlow6 * fRec3[0]; + fRec2[0] = fSlow6 * (fRec3[0] + fSlow25 * fRec2[1]) - fVec6[1]; + fRec1[0] = fRec2[0] - fSlow4 * (fSlow26 * fRec1[2] + fSlow27 * fRec1[1]); + fRec0[0] = fSlow4 * (fRec1[2] + fRec1[0] + 2.0f * fRec1[1]) - fSlow3 * (fSlow28 * fRec0[2] + fSlow27 * fRec0[1]); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp7 : fSlow3 * (fRec0[2] + fRec0[0] + 2.0f * fRec0[1]))); iVec0[1] = iVec0[0]; fRec4[1] = fRec4[0]; fRec6[1] = fRec6[0]; diff --git a/ceammc/ext/src/fx/fx_distortion3.h b/ceammc/ext/src/fx/fx_distortion3.h index 37b0c461dd..d651902836 100644 --- a/ceammc/ext/src/fx/fx_distortion3.h +++ b/ceammc/ext/src/fx/fx_distortion3.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.distortion3" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion3 -scn fx_distortion3_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_distortion3_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_distortion3_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_distortion3_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_distortion3_dsp { +class FAUST_API fx_distortion3_dsp { public: @@ -162,7 +247,7 @@ class fx_distortion3_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_distortion3_dsp { +class FAUST_API decorator_dsp : public fx_distortion3_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_distortion3_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_distortion3_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_distortion3_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct fx_distortion3 : public fx_distortion3_dsp { #include #include -static float fx_distortion3_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_distortion3 #endif @@ -562,6 +636,16 @@ static float fx_distortion3_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_distortion3_faustpower2_f(float value) { + return value * value; +} + class fx_distortion3 : public fx_distortion3_dsp { private: @@ -575,10 +659,10 @@ class fx_distortion3 : public fx_distortion3_dsp { float fConst3; FAUSTFLOAT fVslider0; float fConst5; - float fConst6; FAUSTFLOAT fVslider1; float fRec4[3]; float fVec0[2]; + float fConst6; float fRec3[2]; FAUSTFLOAT fVslider2; float fRec5[2]; @@ -590,14 +674,15 @@ class fx_distortion3 : public fx_distortion3_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("category", "Distortion"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_distortion3 -scn fx_distortion3_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("description", "A simple Wavesharper distortion"); m->declare("filename", "fx_distortion3.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); @@ -637,7 +722,7 @@ class fx_distortion3 : public fx_distortion3_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -652,47 +737,47 @@ class fx_distortion3 : public fx_distortion3_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (3.14159274f / fConst0); - float fConst4 = (1.0f / std::tan((20520.8828f / fConst0))); - fConst5 = (1.0f / (fConst4 + 1.0f)); - fConst6 = (1.0f - fConst4); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 3.1415927f / fConst0; + float fConst4 = 1.0f / std::tan(20520.883f / fConst0); + fConst5 = 1.0f / (fConst4 + 1.0f); + fConst6 = 1.0f - fConst4; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fVslider0 = FAUSTFLOAT(10000.0f); - fVslider1 = FAUSTFLOAT(30.0f); + fVslider0 = FAUSTFLOAT(1e+04f); + fVslider1 = FAUSTFLOAT(3e+01f); fVslider2 = FAUSTFLOAT(0.0f); fVslider3 = FAUSTFLOAT(0.5f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec4[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fVec0[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec3[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec5[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec6[l5] = 0.0f; } - for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 4; l6 = l6 + 1) { fRec2[l6] = 0.0f; } - for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 3; l7 = l7 + 1) { fRec1[l7] = 0.0f; } } @@ -721,53 +806,52 @@ class fx_distortion3 : public fx_distortion3_dsp { ui_interface->declare(&fVslider3, "tooltip", "Distortion Level"); ui_interface->addVerticalSlider("drive", &fVslider3, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider2, "unit", "db"); - ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-30.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("gain", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(-3e+01f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider1, "unit", "Hz"); - ui_interface->addVerticalSlider("hp_freq", &fVslider1, FAUSTFLOAT(30.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(2000.0f), FAUSTFLOAT(1.08000004f)); + ui_interface->addVerticalSlider("hp_freq", &fVslider1, FAUSTFLOAT(3e+01f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(2e+03f), FAUSTFLOAT(1.08f)); ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("lp_freq", &fVslider0, FAUSTFLOAT(10000.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(20000.0f), FAUSTFLOAT(1.08000004f)); + ui_interface->addVerticalSlider("lp_freq", &fVslider0, FAUSTFLOAT(1e+04f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(2e+04f), FAUSTFLOAT(1.08f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = std::tan((fConst3 * float(fVslider0))); - float fSlow3 = (1.0f / fSlow2); - float fSlow4 = (1.0f / (((fSlow3 + 1.41421354f) / fSlow2) + 1.0f)); - float fSlow5 = std::tan((fConst3 * float(fVslider1))); - float fSlow6 = (1.0f / fSlow5); - float fSlow7 = (1.0f / (((fSlow6 + 1.41421354f) / fSlow5) + 1.0f)); + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = std::tan(fConst3 * float(fVslider0)); + float fSlow3 = 1.0f / fSlow2; + float fSlow4 = 1.0f / ((fSlow3 + 1.4142135f) / fSlow2 + 1.0f); + float fSlow5 = std::tan(fConst3 * float(fVslider1)); + float fSlow6 = 1.0f / fSlow5; + float fSlow7 = 1.0f / ((fSlow6 + 1.4142135f) / fSlow5 + 1.0f); float fSlow8 = fx_distortion3_faustpower2_f(fSlow5); - float fSlow9 = (1.0f / fSlow8); - float fSlow10 = (((fSlow6 + -1.41421354f) / fSlow5) + 1.0f); - float fSlow11 = (2.0f * (1.0f - fSlow9)); - float fSlow12 = (0.0f - (2.0f / fSlow8)); - float fSlow13 = (fConst1 * std::pow(10.0f, (0.0500000007f * float(fVslider2)))); - float fSlow14 = (fConst1 * float(fVslider3)); - float fSlow15 = (((fSlow3 + -1.41421354f) / fSlow2) + 1.0f); - float fSlow16 = (2.0f * (1.0f - (1.0f / fx_distortion3_faustpower2_f(fSlow2)))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow9 = 1.0f / fSlow8; + float fSlow10 = (fSlow6 + -1.4142135f) / fSlow5 + 1.0f; + float fSlow11 = 2.0f * (1.0f - fSlow9); + float fSlow12 = 0.0f - 2.0f / fSlow8; + float fSlow13 = fConst1 * std::pow(1e+01f, 0.05f * float(fVslider2)); + float fSlow14 = fConst1 * float(fVslider3); + float fSlow15 = (fSlow3 + -1.4142135f) / fSlow2 + 1.0f; + float fSlow16 = 2.0f * (1.0f - 1.0f / fx_distortion3_faustpower2_f(fSlow2)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec4[0] = (fTemp1 - (fSlow7 * ((fSlow10 * fRec4[2]) + (fSlow11 * fRec4[1])))); - float fTemp2 = (fSlow7 * (((fSlow9 * fRec4[0]) + (fSlow12 * fRec4[1])) + (fSlow9 * fRec4[2]))); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec4[0] = fTemp1 - fSlow7 * (fSlow10 * fRec4[2] + fSlow11 * fRec4[1]); + float fTemp2 = fSlow7 * (fSlow9 * fRec4[0] + fSlow12 * fRec4[1] + fSlow9 * fRec4[2]); fVec0[0] = fTemp2; - fRec3[0] = (0.0f - (fConst5 * ((fConst6 * fRec3[1]) - (fTemp2 + fVec0[1])))); - fRec5[0] = (fSlow13 + (fConst2 * fRec5[1])); - float fTemp3 = (fRec3[0] * fRec5[0]); - fRec6[0] = (fSlow14 + (fConst2 * fRec6[1])); - float fTemp4 = std::sin((1.53999639f * (fRec6[0] + 0.00999999978f))); - float fTemp5 = (1.0f - fTemp4); - fRec2[0] = ((0.5f * fRec2[3]) + ((fTemp3 * ((2.0f * (fTemp4 / fTemp5)) + 1.0f)) / ((2.0f * ((std::fabs(fTemp3) * fTemp4) / fTemp5)) + 1.0f))); - fRec1[0] = (fRec2[0] - (fSlow4 * ((fSlow15 * fRec1[2]) + (fSlow16 * fRec1[1])))); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fSlow4 * (fRec0[0] * (fRec1[2] + (fRec1[0] + (2.0f * fRec1[1])))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); + fRec3[0] = fConst5 * (fTemp2 + fVec0[1] - fConst6 * fRec3[1]); + fRec5[0] = fSlow13 + fConst2 * fRec5[1]; + float fTemp3 = fRec3[0] * fRec5[0]; + fRec6[0] = fSlow14 + fConst2 * fRec6[1]; + float fTemp4 = std::sin(1.5399964f * (fRec6[0] + 0.01f)); + float fTemp5 = 1.0f - fTemp4; + fRec2[0] = 0.5f * fRec2[3] + fTemp3 * (2.0f * (fTemp4 / fTemp5) + 1.0f) / (2.0f * (std::fabs(fTemp3) * fTemp4 / fTemp5) + 1.0f); + fRec1[0] = fRec2[0] - fSlow4 * (fSlow15 * fRec1[2] + fSlow16 * fRec1[1]); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fSlow4 * fRec0[0] * (fRec1[2] + fRec1[0] + 2.0f * fRec1[1]))); fRec0[1] = fRec0[0]; fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; @@ -775,8 +859,8 @@ class fx_distortion3 : public fx_distortion3_dsp { fRec3[1] = fRec3[0]; fRec5[1] = fRec5[0]; fRec6[1] = fRec6[0]; - for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { - fRec2[j0] = fRec2[(j0 - 1)]; + for (int j0 = 3; j0 > 0; j0 = j0 - 1) { + fRec2[j0] = fRec2[j0 - 1]; } fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/fx/fx_drive.h b/ceammc/ext/src/fx/fx_drive.h index 26233deda8..09e564d834 100644 --- a/ceammc/ext/src/fx/fx_drive.h +++ b/ceammc/ext/src/fx/fx_drive.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.drive" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_drive -scn fx_drive_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_drive_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_drive_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_drive_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_drive_dsp { +class FAUST_API fx_drive_dsp { public: @@ -162,7 +247,7 @@ class fx_drive_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_drive_dsp { +class FAUST_API decorator_dsp : public fx_drive_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_drive_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_drive_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_drive_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_drive : public fx_drive_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_drive #endif @@ -559,6 +636,13 @@ struct fx_drive : public fx_drive_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_drive : public fx_drive_dsp { private: @@ -573,11 +657,12 @@ class fx_drive : public fx_drive_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_drive -scn fx_drive_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_drive.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -588,7 +673,7 @@ class fx_drive : public fx_drive_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -603,8 +688,8 @@ class fx_drive : public fx_drive_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (44.0999985f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); - fConst1 = (1.0f - fConst0); + fConst0 = 44.1f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.0f - fConst0; } virtual void instanceResetUserInterface() { @@ -613,7 +698,7 @@ class fx_drive : public fx_drive_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } } @@ -639,21 +724,20 @@ class fx_drive : public fx_drive_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.drive"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addVerticalSlider("drive", &fVslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(1.0f)); + ui_interface->addVerticalSlider("drive", &fVslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(1.0f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst0 * float(fVslider0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float(fVslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst1 * fRec0[1])); - float fThen1 = std::max(-0.699999988f, std::min(0.699999988f, (fTemp1 * ((0.0625f * (fRec0[0] * ((4.0f * (1.0f - std::fabs(fTemp1))) + -1.0f))) + 1.0f)))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst1 * fRec0[1]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : std::max(-0.7f, std::min(0.7f, fTemp1 * (0.0625f * fRec0[0] * (4.0f * (1.0f - std::fabs(fTemp1)) + -1.0f) + 1.0f))))); fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/fx/fx_drone_box.h b/ceammc/ext/src/fx/fx_drone_box.h index 38a99fb20d..28cf278d68 100644 --- a/ceammc/ext/src/fx/fx_drone_box.h +++ b/ceammc/ext/src/fx/fx_drone_box.h @@ -3,8 +3,8 @@ author: "Oli Larkin (contact@olilarkin.co.uk)" copyright: "Oliver Larkin" name: "fx.drone_box" version: "0.1" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_drone_box -scn fx_drone_box_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_drone_box_H__ @@ -17,23 +17,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_drone_box_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_drone_box_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -47,22 +47,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -71,7 +156,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_drone_box_dsp { +class FAUST_API fx_drone_box_dsp { public: @@ -165,7 +250,7 @@ class fx_drone_box_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_drone_box_dsp { +class FAUST_API decorator_dsp : public fx_drone_box_dsp { protected: @@ -198,7 +283,7 @@ class decorator_dsp : public fx_drone_box_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -227,18 +312,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -246,7 +334,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -257,16 +345,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -279,38 +365,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_drone_box_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -325,8 +412,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -356,37 +443,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -397,40 +483,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_drone_box_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -443,14 +529,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -552,7 +630,6 @@ struct fx_drone_box : public fx_drone_box_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_drone_box #endif @@ -562,6 +639,13 @@ struct fx_drone_box : public fx_drone_box_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_drone_box : public fx_drone_box_dsp { private: @@ -580,7 +664,7 @@ class fx_drone_box : public fx_drone_box_dsp { float fConst6; FAUSTFLOAT fHslider2; float fRec3[2]; - int IOTA; + int IOTA0; float fVec0[8192]; float fRec1[2]; float fVec1[8192]; @@ -597,13 +681,14 @@ class fx_drone_box : public fx_drone_box_dsp { void metadata(Meta* m) { m->declare("author", "Oli Larkin (contact@olilarkin.co.uk)"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_drone_box -scn fx_drone_box_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "Oliver Larkin"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); @@ -619,7 +704,7 @@ class fx_drone_box : public fx_drone_box_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "0.1"); } @@ -635,58 +720,58 @@ class fx_drone_box : public fx_drone_box_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = std::exp((0.0f - (200.0f / fConst0))); - float fConst4 = (1.0f - fConst3); - fConst5 = (440.0f * fConst4); - fConst6 = (0.00100000005f * fConst4); - fConst7 = (0.666666687f * fConst0); - fConst8 = (0.5f * fConst0); - fConst9 = (0.333333343f * fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = std::exp(0.0f - 2e+02f / fConst0); + float fConst4 = 1.0f - fConst3; + fConst5 = 4.4e+02f * fConst4; + fConst6 = 0.001f * fConst4; + fConst7 = 0.6666667f * fConst0; + fConst8 = 0.5f * fConst0; + fConst9 = 0.33333334f * fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(0.5f); fHslider1 = FAUSTFLOAT(48.0f); - fHslider2 = FAUSTFLOAT(4000.0f); + fHslider2 = FAUSTFLOAT(4e+03f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec3[l2] = 0.0f; } - IOTA = 0; - for (int l3 = 0; (l3 < 8192); l3 = (l3 + 1)) { + IOTA0 = 0; + for (int l3 = 0; l3 < 8192; l3 = l3 + 1) { fVec0[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 8192); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 8192; l5 = l5 + 1) { fVec1[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec4[l6] = 0.0f; } - for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 8192; l7 = l7 + 1) { fVec2[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec5[l8] = 0.0f; } - for (int l9 = 0; (l9 < 8192); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 8192; l9 = l9 + 1) { fVec3[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fRec6[l10] = 0.0f; } } @@ -713,62 +798,61 @@ class fx_drone_box : public fx_drone_box_dsp { ui_interface->openVerticalBox("fx.drone_box"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("decay", &fHslider2, FAUSTFLOAT(4000.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(120000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("decay", &fHslider2, FAUSTFLOAT(4e+03f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.2e+05f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider1, "unit", "semitones"); - ui_interface->addHorizontalSlider("pitch", &fHslider1, FAUSTFLOAT(48.0f), FAUSTFLOAT(36.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("pitch", &fHslider1, FAUSTFLOAT(48.0f), FAUSTFLOAT(36.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst5 * std::pow(2.0f, (0.0833333358f * (float(fHslider1) + -69.0f)))); - float fSlow3 = (fConst6 * float(fHslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst5 * std::pow(2.0f, 0.083333336f * (float(fHslider1) + -69.0f)); + float fSlow3 = fConst6 * float(fHslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst3 * fRec2[1])); - fRec3[0] = (fSlow3 + (fConst3 * fRec3[1])); - float fTemp2 = (fRec2[0] * fRec3[0]); - float fTemp3 = (fTemp1 + (fRec1[1] * std::pow(0.00100000005f, (1.0f / fTemp2)))); - fVec0[(IOTA & 8191)] = fTemp3; - float fTemp4 = (fConst0 / fRec2[0]); - float fTemp5 = (fTemp4 + -2.0f); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow2 + fConst3 * fRec2[1]; + fRec3[0] = fSlow3 + fConst3 * fRec3[1]; + float fTemp2 = fRec2[0] * fRec3[0]; + float fTemp3 = fTemp1 + fRec1[1] * std::pow(0.001f, 1.0f / fTemp2); + fVec0[IOTA0 & 8191] = fTemp3; + float fTemp4 = fConst0 / fRec2[0]; + float fTemp5 = fTemp4 + -2.0f; int iTemp6 = int(fTemp5); float fTemp7 = std::floor(fTemp5); - fRec1[0] = ((fVec0[((IOTA - std::min(4097, std::max(0, iTemp6))) & 8191)] * (fTemp7 + (3.0f - fTemp4))) + ((fTemp4 + (-2.0f - fTemp7)) * fVec0[((IOTA - std::min(4097, std::max(0, (iTemp6 + 1)))) & 8191)])); - float fTemp8 = (fTemp1 + (fRec4[1] * std::pow(0.00100000005f, (0.666666687f / fTemp2)))); - fVec1[(IOTA & 8191)] = fTemp8; - float fTemp9 = (fConst7 / fRec2[0]); - float fTemp10 = (fTemp9 + -2.0f); + fRec1[0] = fVec0[(IOTA0 - std::min(4097, std::max(0, iTemp6))) & 8191] * (fTemp7 + (3.0f - fTemp4)) + (fTemp4 + (-2.0f - fTemp7)) * fVec0[(IOTA0 - std::min(4097, std::max(0, iTemp6 + 1))) & 8191]; + float fTemp8 = fTemp1 + fRec4[1] * std::pow(0.001f, 0.6666667f / fTemp2); + fVec1[IOTA0 & 8191] = fTemp8; + float fTemp9 = fConst7 / fRec2[0]; + float fTemp10 = fTemp9 + -2.0f; int iTemp11 = int(fTemp10); float fTemp12 = std::floor(fTemp10); - fRec4[0] = ((fVec1[((IOTA - std::min(4097, std::max(0, iTemp11))) & 8191)] * (fTemp12 + (3.0f - fTemp9))) + ((fTemp9 + (-2.0f - fTemp12)) * fVec1[((IOTA - std::min(4097, std::max(0, (iTemp11 + 1)))) & 8191)])); - float fTemp13 = (fTemp1 + (fRec5[1] * std::pow(0.00100000005f, (0.5f / fTemp2)))); - fVec2[(IOTA & 8191)] = fTemp13; - float fTemp14 = (fConst8 / fRec2[0]); - float fTemp15 = (fTemp14 + -2.0f); + fRec4[0] = fVec1[(IOTA0 - std::min(4097, std::max(0, iTemp11))) & 8191] * (fTemp12 + (3.0f - fTemp9)) + (fTemp9 + (-2.0f - fTemp12)) * fVec1[(IOTA0 - std::min(4097, std::max(0, iTemp11 + 1))) & 8191]; + float fTemp13 = fTemp1 + fRec5[1] * std::pow(0.001f, 0.5f / fTemp2); + fVec2[IOTA0 & 8191] = fTemp13; + float fTemp14 = fConst8 / fRec2[0]; + float fTemp15 = fTemp14 + -2.0f; int iTemp16 = int(fTemp15); float fTemp17 = std::floor(fTemp15); - fRec5[0] = ((fVec2[((IOTA - std::min(4097, std::max(0, iTemp16))) & 8191)] * (fTemp17 + (3.0f - fTemp14))) + ((fTemp14 + (-2.0f - fTemp17)) * fVec2[((IOTA - std::min(4097, std::max(0, (iTemp16 + 1)))) & 8191)])); - float fTemp18 = (fTemp1 + (fRec6[1] * std::pow(0.00100000005f, (0.333333343f / fTemp2)))); - fVec3[(IOTA & 8191)] = fTemp18; - float fTemp19 = (fConst9 / fRec2[0]); - float fTemp20 = (fTemp19 + -2.0f); + fRec5[0] = fVec2[(IOTA0 - std::min(4097, std::max(0, iTemp16))) & 8191] * (fTemp17 + (3.0f - fTemp14)) + (fTemp14 + (-2.0f - fTemp17)) * fVec2[(IOTA0 - std::min(4097, std::max(0, iTemp16 + 1))) & 8191]; + float fTemp18 = fTemp1 + fRec6[1] * std::pow(0.001f, 0.33333334f / fTemp2); + fVec3[IOTA0 & 8191] = fTemp18; + float fTemp19 = fConst9 / fRec2[0]; + float fTemp20 = fTemp19 + -2.0f; int iTemp21 = int(fTemp20); float fTemp22 = std::floor(fTemp20); - fRec6[0] = ((fVec3[((IOTA - std::min(4097, std::max(0, iTemp21))) & 8191)] * (fTemp22 + (3.0f - fTemp19))) + ((fTemp19 + (-2.0f - fTemp22)) * fVec3[((IOTA - std::min(4097, std::max(0, (iTemp21 + 1)))) & 8191)])); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (0.25f * (fRec0[0] * (((fRec1[0] + fRec4[0]) + fRec5[0]) + fRec6[0])))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); + fRec6[0] = fVec3[(IOTA0 - std::min(4097, std::max(0, iTemp21))) & 8191] * (fTemp22 + (3.0f - fTemp19)) + (fTemp19 + (-2.0f - fTemp22)) * fVec3[(IOTA0 - std::min(4097, std::max(0, iTemp21 + 1))) & 8191]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + 0.25f * fRec0[0] * (fRec1[0] + fRec4[0] + fRec5[0] + fRec6[0]))); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec1[1] = fRec1[0]; fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; diff --git a/ceammc/ext/src/fx/fx_echo.h b/ceammc/ext/src/fx/fx_echo.h index dda8f2c4aa..b6c3e99d61 100644 --- a/ceammc/ext/src/fx/fx_echo.h +++ b/ceammc/ext/src/fx/fx_echo.h @@ -1,8 +1,8 @@ /* ------------------------------------------------------------ name: "fx.echo" version: "0.2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_echo -scn fx_echo_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_echo_H__ @@ -15,23 +15,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_echo_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_echo_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -45,22 +45,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -69,7 +154,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_echo_dsp { +class FAUST_API fx_echo_dsp { public: @@ -163,7 +248,7 @@ class fx_echo_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_echo_dsp { +class FAUST_API decorator_dsp : public fx_echo_dsp { protected: @@ -196,7 +281,7 @@ class decorator_dsp : public fx_echo_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -225,18 +310,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -244,7 +332,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -255,16 +343,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -277,38 +363,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_echo_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -323,8 +410,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -354,37 +441,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -395,40 +481,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_echo_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -441,14 +527,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -550,7 +628,6 @@ struct fx_echo : public fx_echo_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_echo #endif @@ -560,6 +637,13 @@ struct fx_echo : public fx_echo_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_echo : public fx_echo_dsp { private: @@ -572,22 +656,23 @@ class fx_echo : public fx_echo_dsp { float fRec0[2]; FAUSTFLOAT fHslider1; float fRec2[2]; + int IOTA0; float fConst3; float fConst4; FAUSTFLOAT fHslider2; - int IOTA; float fRec1[2097152]; public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_echo -scn fx_echo_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_echo.dsp"); @@ -596,13 +681,14 @@ class fx_echo : public fx_echo_dsp { m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); + m->declare("misceffects.lib/echo:author", "Romain Michon"); m->declare("misceffects.lib/name", "Misc Effects Library"); m->declare("misceffects.lib/version", "2.0"); m->declare("name", "fx.echo"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "0.2"); } @@ -618,29 +704,29 @@ class fx_echo : public fx_echo_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (10.0f * fConst0); - fConst4 = (0.00100000005f * fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1e+01f * fConst0; + fConst4 = 0.001f * fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(0.29999999999999999f); - fHslider2 = FAUSTFLOAT(500.0f); + fHslider1 = FAUSTFLOAT(0.3f); + fHslider2 = FAUSTFLOAT(5e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - IOTA = 0; - for (int l2 = 0; (l2 < 2097152); l2 = (l2 + 1)) { + IOTA0 = 0; + for (int l2 = 0; l2 < 2097152; l2 = l2 + 1) { fRec1[l2] = 0.0f; } } @@ -667,31 +753,30 @@ class fx_echo : public fx_echo_dsp { ui_interface->openVerticalBox("fx.echo"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(500.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(10000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(5e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(1e+04f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.300000012f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.3f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); - int iSlow3 = (int(std::min(fConst3, std::max(0.0f, (fConst4 * float(fHslider2))))) + 1); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); + int iSlow3 = int(std::min(fConst3, std::max(0.0f, fConst4 * float(fHslider2)))) + 1; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - fRec1[(IOTA & 2097151)] = (fTemp1 + (fRec2[0] * fRec1[((IOTA - iSlow3) & 2097151)])); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[((IOTA - 0) & 2097151)])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + fRec1[IOTA0 & 2097151] = fTemp1 + fRec2[0] * fRec1[(IOTA0 - iSlow3) & 2097151]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * fRec1[IOTA0 & 2097151])); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; } } diff --git a/ceammc/ext/src/fx/fx_echo2.h b/ceammc/ext/src/fx/fx_echo2.h index b32e892519..a424602b56 100644 --- a/ceammc/ext/src/fx/fx_echo2.h +++ b/ceammc/ext/src/fx/fx_echo2.h @@ -1,8 +1,8 @@ /* ------------------------------------------------------------ author: "Albert Graef" name: "fx.echo2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_echo2 -scn fx_echo2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_echo2_H__ @@ -15,23 +15,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_echo2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_echo2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -45,22 +45,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -69,7 +154,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_echo2_dsp { +class FAUST_API fx_echo2_dsp { public: @@ -163,7 +248,7 @@ class fx_echo2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_echo2_dsp { +class FAUST_API decorator_dsp : public fx_echo2_dsp { protected: @@ -196,7 +281,7 @@ class decorator_dsp : public fx_echo2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -225,18 +310,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -244,7 +332,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -255,16 +343,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -277,38 +363,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_echo2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -323,8 +410,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -354,37 +441,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -395,40 +481,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_echo2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -441,14 +527,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -550,7 +628,6 @@ struct fx_echo2 : public fx_echo2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_echo2 #endif @@ -560,6 +637,13 @@ struct fx_echo2 : public fx_echo2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_echo2 : public fx_echo2_dsp { private: @@ -576,7 +660,7 @@ class fx_echo2 : public fx_echo2_dsp { FAUSTFLOAT fHslider2; FAUSTFLOAT fHslider3; float fRec4[2]; - int IOTA; + int IOTA0; float fVec0[1048576]; float fConst4; float fRec2[2]; @@ -587,13 +671,14 @@ class fx_echo2 : public fx_echo2_dsp { void metadata(Meta* m) { m->declare("author", "Albert Graef"); + m->declare("basics.lib/bypass2:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_echo2 -scn fx_echo2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_echo2.dsp"); @@ -608,7 +693,7 @@ class fx_echo2 : public fx_echo2_dsp { m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -623,42 +708,42 @@ class fx_echo2 : public fx_echo2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.00100000005f * fConst0); - fConst4 = ((5.0f * fConst0) + 1.0f); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.001f * fConst0; + fConst4 = 5.0f * fConst0 + 1.0f; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(1.0f); - fHslider2 = FAUSTFLOAT(500.0f); - fHslider3 = FAUSTFLOAT(0.29999999999999999f); + fHslider2 = FAUSTFLOAT(5e+02f); + fHslider3 = FAUSTFLOAT(0.3f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec4[l2] = 0.0f; } - IOTA = 0; - for (int l3 = 0; (l3 < 1048576); l3 = (l3 + 1)) { + IOTA0 = 0; + for (int l3 = 0; l3 < 1048576; l3 = l3 + 1) { fVec0[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec2[l4] = 0.0f; } - for (int l5 = 0; (l5 < 1048576); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 1048576; l5 = l5 + 1) { fVec1[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec3[l6] = 0.0f; } } @@ -685,54 +770,52 @@ class fx_echo2 : public fx_echo2_dsp { ui_interface->openVerticalBox("fx.echo2"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(500.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(5e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider3, FAUSTFLOAT(0.300000012f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(0.00100000005f)); - ui_interface->addHorizontalSlider("stereo", &fHslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider3, FAUSTFLOAT(0.3f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.001f)); + ui_interface->addHorizontalSlider("stereo", &fHslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); - float fSlow3 = (fConst3 * float(fHslider2)); + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); + float fSlow3 = fConst3 * float(fHslider2); float fSlow4 = std::floor(fSlow3); - float fSlow5 = (fSlow4 + (1.0f - fSlow3)); - float fSlow6 = (fConst1 * float(fHslider3)); + float fSlow5 = fSlow4 + (1.0f - fSlow3); + float fSlow6 = fConst1 * float(fHslider3); int iSlow7 = int(fSlow3); int iSlow8 = int(std::min(fConst4, float(std::max(0, iSlow7)))); - float fSlow9 = (fSlow3 - fSlow4); - int iSlow10 = int(std::min(fConst4, float(std::max(0, (iSlow7 + 1))))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow9 = fSlow3 - fSlow4; + int iSlow10 = int(std::min(fConst4, float(std::max(0, iSlow7 + 1)))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - float fTemp2 = (1.0f - fRec0[0]); - fRec1[0] = (fSlow2 + (fConst2 * fRec1[1])); - fRec4[0] = (fSlow6 + (fConst2 * fRec4[1])); - float fTemp3 = (1.0f - fRec1[0]); - float fTemp4 = (fTemp1 + (fRec4[0] * ((fTemp3 * fRec2[1]) + (fRec1[0] * fRec3[1])))); - fVec0[(IOTA & 1048575)] = fTemp4; - fRec2[0] = ((fSlow5 * fVec0[((IOTA - iSlow8) & 1048575)]) + (fSlow9 * fVec0[((IOTA - iSlow10) & 1048575)])); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = 1.0f - fRec0[0]; + fRec1[0] = fSlow2 + fConst2 * fRec1[1]; + fRec4[0] = fSlow6 + fConst2 * fRec4[1]; + float fTemp3 = 1.0f - fRec1[0]; + float fTemp4 = fTemp1 + fRec4[0] * (fTemp3 * fRec2[1] + fRec1[0] * fRec3[1]); + fVec0[IOTA0 & 1048575] = fTemp4; + fRec2[0] = fSlow5 * fVec0[(IOTA0 - iSlow8) & 1048575] + fSlow9 * fVec0[(IOTA0 - iSlow10) & 1048575]; float fTemp5 = float(input1[i0]); - float fTemp6 = (iSlow0 ? 0.0f : fTemp5); - float fTemp7 = (fTemp6 + (fRec4[0] * ((fTemp3 * fRec3[1]) + (fRec1[0] * fRec2[1])))); - fVec1[(IOTA & 1048575)] = fTemp7; - fRec3[0] = ((fSlow5 * fVec1[((IOTA - iSlow8) & 1048575)]) + (fSlow9 * fVec1[((IOTA - iSlow10) & 1048575)])); - float fThen2 = ((fTemp1 * fTemp2) + (0.5f * (fRec0[0] * ((fRec1[0] * fRec3[0]) + (fTemp1 + (fRec2[0] * fTemp3)))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen2)); - float fThen3 = ((fTemp2 * fTemp6) + (0.5f * (fRec0[0] * ((fRec1[0] * fRec2[0]) + (fTemp6 + (fRec3[0] * fTemp3)))))); - output1[i0] = FAUSTFLOAT((iSlow0 ? fTemp5 : fThen3)); + float fTemp6 = ((iSlow0) ? 0.0f : fTemp5); + float fTemp7 = fTemp6 + fRec4[0] * (fTemp3 * fRec3[1] + fRec1[0] * fRec2[1]); + fVec1[IOTA0 & 1048575] = fTemp7; + fRec3[0] = fSlow5 * fVec1[(IOTA0 - iSlow8) & 1048575] + fSlow9 * fVec1[(IOTA0 - iSlow10) & 1048575]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * fTemp2 + 0.5f * fRec0[0] * (fRec1[0] * fRec3[0] + fTemp1 + fRec2[0] * fTemp3))); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp5 : fTemp2 * fTemp6 + 0.5f * fRec0[0] * (fRec1[0] * fRec2[0] + fTemp6 + fRec3[0] * fTemp3))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec4[1] = fRec4[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; } diff --git a/ceammc/ext/src/fx/fx_flanger.h b/ceammc/ext/src/fx/fx_flanger.h index 2d5a2ee3c2..6b2be8a09a 100644 --- a/ceammc/ext/src/fx/fx_flanger.h +++ b/ceammc/ext/src/fx/fx_flanger.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.flanger" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_flanger -scn fx_flanger_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_flanger_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_flanger_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_flanger_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_flanger_dsp { +class FAUST_API fx_flanger_dsp { public: @@ -162,7 +247,7 @@ class fx_flanger_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_flanger_dsp { +class FAUST_API decorator_dsp : public fx_flanger_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_flanger_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_flanger_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_flanger_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_flanger : public fx_flanger_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_flanger #endif @@ -559,6 +636,13 @@ struct fx_flanger : public fx_flanger_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_flanger : public fx_flanger_dsp { private: @@ -572,7 +656,7 @@ class fx_flanger : public fx_flanger_dsp { float fRec0[2]; FAUSTFLOAT fHslider1; float fRec2[2]; - int IOTA; + int IOTA0; float fVec1[4096]; FAUSTFLOAT fHslider2; FAUSTFLOAT fHslider3; @@ -587,13 +671,14 @@ class fx_flanger : public fx_flanger_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_flanger -scn fx_flanger_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_flanger.dsp"); @@ -610,13 +695,13 @@ class fx_flanger : public fx_flanger_dsp { m->declare("maths.lib/version", "2.5"); m->declare("name", "fx.flanger"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.1"); + m->declare("oscillators.lib/version", "0.3"); m->declare("phaflangers.lib/name", "Faust Phaser and Flanger Library"); m->declare("phaflangers.lib/version", "0.1"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -631,10 +716,10 @@ class fx_flanger : public fx_flanger_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { @@ -642,35 +727,35 @@ class fx_flanger : public fx_flanger_dsp { fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(1.0f); - fHslider3 = FAUSTFLOAT(10.0f); + fHslider3 = FAUSTFLOAT(1e+01f); fHslider4 = FAUSTFLOAT(0.5f); fCheckbox1 = FAUSTFLOAT(0.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } - IOTA = 0; - for (int l3 = 0; (l3 < 4096); l3 = (l3 + 1)) { + IOTA0 = 0; + for (int l3 = 0; l3 < 4096; l3 = l3 + 1) { fVec1[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec4[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec5[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec3[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec1[l7] = 0.0f; } } @@ -698,53 +783,52 @@ class fx_flanger : public fx_flanger_dsp { ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider3, "style", "knob"); ui_interface->declare(&fHslider3, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider3, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("delay", &fHslider3, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->addCheckButton("invert", &fCheckbox1); ui_interface->declare(&fHslider2, "style", "knob"); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("offset", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("offset", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(2e+01f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider4, "style", "knob"); ui_interface->declare(&fHslider4, "unit", "Hz"); - ui_interface->addHorizontalSlider("speed", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("speed", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); - float fSlow3 = (0.00100000005f * float(fHslider2)); - float fSlow4 = (0.000500000024f * float(fHslider3)); - float fSlow5 = (fConst3 * float(fHslider4)); + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); + float fSlow3 = 0.001f * float(fHslider2); + float fSlow4 = 0.0005f * float(fHslider3); + float fSlow5 = fConst3 * float(fHslider4); float fSlow6 = std::sin(fSlow5); float fSlow7 = std::cos(fSlow5); - float fSlow8 = float((int(float(fCheckbox1)) ? -1 : 1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow8 = float(((int(float(fCheckbox1))) ? -1 : 1)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); iVec0[0] = 1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - float fTemp2 = ((fRec2[0] * fRec1[1]) - fTemp1); - fVec1[(IOTA & 4095)] = fTemp2; - fRec4[0] = ((fSlow6 * fRec5[1]) + (fSlow7 * fRec4[1])); - fRec5[0] = ((float((1 - iVec0[1])) + (fSlow7 * fRec5[1])) - (fSlow6 * fRec4[1])); - fRec3[0] = ((fConst2 * fRec3[1]) + (44.0999985f * (fSlow3 + (fSlow4 * (fRec4[0] + 1.0f))))); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + float fTemp2 = fRec2[0] * fRec1[1] - fTemp1; + fVec1[IOTA0 & 4095] = fTemp2; + fRec4[0] = fSlow6 * fRec5[1] + fSlow7 * fRec4[1]; + fRec5[0] = float(1 - iVec0[1]) + fSlow7 * fRec5[1] - fSlow6 * fRec4[1]; + fRec3[0] = 44.1f * (fSlow3 + fSlow4 * (fRec4[0] + 1.0f)) + fConst2 * fRec3[1]; int iTemp3 = int(fRec3[0]); float fTemp4 = std::floor(fRec3[0]); - fRec1[0] = ((fVec1[((IOTA - std::min(2049, std::max(0, iTemp3))) & 4095)] * (fTemp4 + (1.0f - fRec3[0]))) + ((fRec3[0] - fTemp4) * fVec1[((IOTA - std::min(2049, std::max(0, (iTemp3 + 1)))) & 4095)])); - float fThen2 = ((fTemp1 * (1.0f - fRec0[0])) + (0.5f * (fRec0[0] * (fTemp1 + (fRec1[0] * fSlow8))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen2)); + fRec1[0] = fVec1[(IOTA0 - std::min(2049, std::max(0, iTemp3))) & 4095] * (fTemp4 + (1.0f - fRec3[0])) + (fRec3[0] - fTemp4) * fVec1[(IOTA0 - std::min(2049, std::max(0, iTemp3 + 1))) & 4095]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + 0.5f * fRec0[0] * (fTemp1 + fRec1[0] * fSlow8))); iVec0[1] = iVec0[0]; fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/fx/fx_freeverb.h b/ceammc/ext/src/fx/fx_freeverb.h index 92a2b56c74..c7da2bd131 100644 --- a/ceammc/ext/src/fx/fx_freeverb.h +++ b/ceammc/ext/src/fx/fx_freeverb.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.freeverb" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freeverb -scn fx_freeverb_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_freeverb_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_freeverb_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_freeverb_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_freeverb_dsp { +class FAUST_API fx_freeverb_dsp { public: @@ -162,7 +247,7 @@ class fx_freeverb_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_freeverb_dsp { +class FAUST_API decorator_dsp : public fx_freeverb_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_freeverb_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_freeverb_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_freeverb_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_freeverb : public fx_freeverb_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_freeverb #endif @@ -559,6 +636,13 @@ struct fx_freeverb : public fx_freeverb_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_freeverb : public fx_freeverb_dsp { private: @@ -569,20 +653,20 @@ class fx_freeverb : public fx_freeverb_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec0[2]; - FAUSTFLOAT fHslider1; - float fConst3; FAUSTFLOAT fCheckbox1; - float fRec10[2]; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; float fRec12[2]; + FAUSTFLOAT fHslider2; FAUSTFLOAT fHslider3; + float fConst3; float fRec11[2]; + float fRec10[2]; FAUSTFLOAT fHslider4; - float fRec15[2]; - FAUSTFLOAT fHslider5; float fRec14[2]; + FAUSTFLOAT fHslider5; float fRec13[2]; - int IOTA; + float fRec15[2]; + int IOTA0; float fVec0[8192]; int iConst4; float fRec9[2]; @@ -630,13 +714,14 @@ class fx_freeverb : public fx_freeverb_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freeverb -scn fx_freeverb_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_freeverb.dsp"); @@ -654,10 +739,11 @@ class fx_freeverb : public fx_freeverb_dsp { m->declare("name", "fx.freeverb"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); + m->declare("reverbs.lib/mono_freeverb:author", "Romain Michon"); m->declare("reverbs.lib/name", "Faust Reverb Library"); m->declare("reverbs.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -672,149 +758,149 @@ class fx_freeverb : public fx_freeverb_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (1.0f / fConst0); - iConst4 = int((0.0353061222f * fConst0)); - iConst5 = int((0.033809524f * fConst0)); - iConst6 = int((0.0322448984f * fConst0)); - iConst7 = int((0.0307482984f * fConst0)); - iConst8 = int((0.0289569162f * fConst0)); - iConst9 = int((0.0269387756f * fConst0)); - iConst10 = int((0.0253061224f * fConst0)); - iConst11 = int((0.0366666652f * fConst0)); - iConst12 = std::min(1024, std::max(0, (int((0.0126077095f * fConst0)) + -1))); - iConst13 = std::min(1024, std::max(0, (int((0.00999999978f * fConst0)) + -1))); - iConst14 = std::min(1024, std::max(0, (int((0.00773242628f * fConst0)) + -1))); - iConst15 = std::min(1024, std::max(0, (int((0.00510204071f * fConst0)) + -1))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1.0f / fConst0; + iConst4 = int(0.025306122f * fConst0); + iConst5 = int(0.026938776f * fConst0); + iConst6 = int(0.028956916f * fConst0); + iConst7 = int(0.030748298f * fConst0); + iConst8 = int(0.0322449f * fConst0); + iConst9 = int(0.033809524f * fConst0); + iConst10 = int(0.035306122f * fConst0); + iConst11 = int(0.036666665f * fConst0); + iConst12 = std::min(1024, std::max(0, int(0.0126077095f * fConst0) + -1)); + iConst13 = std::min(1024, std::max(0, int(0.01f * fConst0) + -1)); + iConst14 = std::min(1024, std::max(0, int(0.0077324263f * fConst0) + -1)); + iConst15 = std::min(1024, std::max(0, int(0.0051020407f * fConst0) + -1)); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(0.33000000000000002f); - fHslider1 = FAUSTFLOAT(100.0f); + fHslider0 = FAUSTFLOAT(0.33f); fCheckbox1 = FAUSTFLOAT(0.0f); - fHslider2 = FAUSTFLOAT(0.5f); - fHslider3 = FAUSTFLOAT(0.999f); + fHslider1 = FAUSTFLOAT(0.5f); + fHslider2 = FAUSTFLOAT(0.0001f); + fHslider3 = FAUSTFLOAT(1e+02f); fHslider4 = FAUSTFLOAT(0.5f); - fHslider5 = FAUSTFLOAT(0.0001f); + fHslider5 = FAUSTFLOAT(0.999f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { - fRec10[l1] = 0.0f; + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec12[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec12[l2] = 0.0f; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec11[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec11[l3] = 0.0f; + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec10[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec15[l4] = 0.0f; + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec14[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec14[l5] = 0.0f; + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec13[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec13[l6] = 0.0f; + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { + fRec15[l6] = 0.0f; } - IOTA = 0; - for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { + IOTA0 = 0; + for (int l7 = 0; l7 < 8192; l7 = l7 + 1) { fVec0[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec9[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec17[l9] = 0.0f; } - for (int l10 = 0; (l10 < 8192); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 8192; l10 = l10 + 1) { fVec1[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec16[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { fRec19[l12] = 0.0f; } - for (int l13 = 0; (l13 < 8192); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 8192; l13 = l13 + 1) { fVec2[l13] = 0.0f; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { fRec18[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { fRec21[l15] = 0.0f; } - for (int l16 = 0; (l16 < 8192); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 8192; l16 = l16 + 1) { fVec3[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { fRec20[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { fRec23[l18] = 0.0f; } - for (int l19 = 0; (l19 < 8192); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 8192; l19 = l19 + 1) { fVec4[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { fRec22[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { fRec25[l21] = 0.0f; } - for (int l22 = 0; (l22 < 8192); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 8192; l22 = l22 + 1) { fVec5[l22] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { fRec24[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { fRec27[l24] = 0.0f; } - for (int l25 = 0; (l25 < 8192); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 8192; l25 = l25 + 1) { fVec6[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { fRec26[l26] = 0.0f; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 2; l27 = l27 + 1) { fRec29[l27] = 0.0f; } - for (int l28 = 0; (l28 < 8192); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 8192; l28 = l28 + 1) { fVec7[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { fRec28[l29] = 0.0f; } - for (int l30 = 0; (l30 < 2048); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 2048; l30 = l30 + 1) { fVec8[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec7[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2048); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2048; l32 = l32 + 1) { fVec9[l32] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 2; l33 = l33 + 1) { fRec5[l33] = 0.0f; } - for (int l34 = 0; (l34 < 2048); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 2048; l34 = l34 + 1) { fVec10[l34] = 0.0f; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { fRec3[l35] = 0.0f; } - for (int l36 = 0; (l36 < 1024); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 1024; l36 = l36 + 1) { fVec11[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { fRec1[l37] = 0.0f; } } @@ -840,101 +926,99 @@ class fx_freeverb : public fx_freeverb_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.freeverb"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->declare(&fHslider4, "style", "knob"); - ui_interface->addHorizontalSlider("damp", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->declare(&fHslider1, "style", "knob"); + ui_interface->addHorizontalSlider("damp", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.330000013f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.33f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("fr_damp", &fHslider2, FAUSTFLOAT(0.0001f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider5, "style", "knob"); - ui_interface->addHorizontalSlider("fr_damp", &fHslider5, FAUSTFLOAT(9.99999975e-05f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("fr_room", &fHslider5, FAUSTFLOAT(0.999f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("fr_room", &fHslider3, FAUSTFLOAT(0.999000013f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("fr_time", &fHslider1, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->declare(&fHslider3, "unit", "ms"); + ui_interface->addHorizontalSlider("fr_time", &fHslider3, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fCheckbox1, "type", "bool"); ui_interface->addCheckButton("freeze", &fCheckbox1); - ui_interface->declare(&fHslider2, "stye", "knob"); - ui_interface->addHorizontalSlider("room", &fHslider2, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->declare(&fHslider4, "stye", "knob"); + ui_interface->addHorizontalSlider("room", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (0.00100000005f * float(fHslider1)); - int iSlow3 = (std::fabs(fSlow2) < 1.1920929e-07f); - float fThen2 = std::exp((0.0f - (fConst3 / (iSlow3 ? 1.0f : fSlow2)))); - float fSlow4 = (iSlow3 ? 0.0f : fThen2); - int iSlow5 = int(float(fCheckbox1)); - float fSlow6 = (1.0f - fSlow4); - float fSlow7 = (float((1 - iSlow5)) * fSlow6); - float fSlow8 = (fConst1 * float(fHslider2)); - float fSlow9 = float(fHslider3); - float fSlow10 = (fConst1 * float(fHslider4)); - float fSlow11 = float(fHslider5); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + int iSlow2 = int(float(fCheckbox1)); + float fSlow3 = fConst1 * float(fHslider1); + float fSlow4 = float(fHslider2); + float fSlow5 = 0.001f * float(fHslider3); + int iSlow6 = std::fabs(fSlow5) < 1.1920929e-07f; + float fSlow7 = ((iSlow6) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow6) ? 1.0f : fSlow5))); + float fSlow8 = 1.0f - fSlow7; + float fSlow9 = fConst1 * float(fHslider4); + float fSlow10 = float(fHslider5); + float fSlow11 = float(1 - iSlow2) * fSlow8; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec10[0] = ((fSlow4 * fRec10[1]) + fSlow7); - float fTemp2 = (fRec10[0] * fTemp1); - fRec12[0] = (fSlow8 + (fConst2 * fRec12[1])); - fRec11[0] = ((fSlow4 * fRec11[1]) + ((iSlow5 ? fSlow9 : fRec12[0]) * fSlow6)); - fRec15[0] = (fSlow10 + (fConst2 * fRec15[1])); - fRec14[0] = ((fRec14[1] * fSlow4) + ((iSlow5 ? fSlow11 : fRec15[0]) * fSlow6)); - float fTemp3 = (1.0f - fRec14[0]); - fRec13[0] = ((fRec14[0] * fRec13[1]) + (fTemp3 * fRec9[1])); - fVec0[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec13[0])); - fRec9[0] = fVec0[((IOTA - iConst4) & 8191)]; - fRec17[0] = ((fRec14[0] * fRec17[1]) + (fTemp3 * fRec16[1])); - fVec1[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec17[0])); - fRec16[0] = fVec1[((IOTA - iConst5) & 8191)]; - fRec19[0] = ((fRec14[0] * fRec19[1]) + (fTemp3 * fRec18[1])); - fVec2[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec19[0])); - fRec18[0] = fVec2[((IOTA - iConst6) & 8191)]; - fRec21[0] = ((fRec14[0] * fRec21[1]) + (fTemp3 * fRec20[1])); - fVec3[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec21[0])); - fRec20[0] = fVec3[((IOTA - iConst7) & 8191)]; - fRec23[0] = ((fRec14[0] * fRec23[1]) + (fTemp3 * fRec22[1])); - fVec4[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec23[0])); - fRec22[0] = fVec4[((IOTA - iConst8) & 8191)]; - fRec25[0] = ((fRec14[0] * fRec25[1]) + (fTemp3 * fRec24[1])); - fVec5[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec25[0])); - fRec24[0] = fVec5[((IOTA - iConst9) & 8191)]; - fRec27[0] = ((fRec14[0] * fRec27[1]) + (fTemp3 * fRec26[1])); - fVec6[(IOTA & 8191)] = ((fRec27[0] * fRec11[0]) + fTemp2); - fRec26[0] = fVec6[((IOTA - iConst10) & 8191)]; - fRec29[0] = ((fRec14[0] * fRec29[1]) + (fTemp3 * fRec28[1])); - fVec7[(IOTA & 8191)] = (fTemp2 + (fRec11[0] * fRec29[0])); - fRec28[0] = fVec7[((IOTA - iConst11) & 8191)]; - float fTemp4 = (fRec9[0] + (fRec16[0] + (fRec18[0] + (fRec20[0] + (fRec22[0] + (fRec24[0] + (fRec26[0] + (fRec28[0] + (0.5f * fRec7[1]))))))))); - fVec8[(IOTA & 2047)] = fTemp4; - fRec7[0] = fVec8[((IOTA - iConst12) & 2047)]; - float fRec8 = (0.0f - (0.5f * fTemp4)); - float fTemp5 = (fRec8 + ((0.5f * fRec5[1]) + fRec7[1])); - fVec9[(IOTA & 2047)] = fTemp5; - fRec5[0] = fVec9[((IOTA - iConst13) & 2047)]; - float fRec6 = (0.0f - (0.5f * fTemp5)); - float fTemp6 = (fRec6 + ((0.5f * fRec3[1]) + fRec5[1])); - fVec10[(IOTA & 2047)] = fTemp6; - fRec3[0] = fVec10[((IOTA - iConst14) & 2047)]; - float fRec4 = (0.0f - (0.5f * fTemp6)); - float fTemp7 = (fRec4 + ((0.5f * fRec1[1]) + fRec3[1])); - fVec11[(IOTA & 1023)] = fTemp7; - fRec1[0] = fVec11[((IOTA - iConst15) & 1023)]; - float fRec2 = (0.0f - (0.5f * fTemp7)); - float fThen5 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * (fRec2 + fRec1[1]))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen5)); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec12[0] = fSlow3 + fConst2 * fRec12[1]; + fRec11[0] = ((iSlow2) ? fSlow4 : fRec12[0]) * fSlow8 + fSlow7 * fRec11[1]; + float fTemp2 = 1.0f - fRec11[0]; + fRec10[0] = fRec11[0] * fRec10[1] + fTemp2 * fRec9[1]; + fRec14[0] = fSlow9 + fConst2 * fRec14[1]; + fRec13[0] = ((iSlow2) ? fSlow10 : fRec14[0]) * fSlow8 + fSlow7 * fRec13[1]; + fRec15[0] = fSlow11 + fSlow7 * fRec15[1]; + float fTemp3 = fRec15[0] * fTemp1; + fVec0[IOTA0 & 8191] = fRec10[0] * fRec13[0] + fTemp3; + fRec9[0] = fVec0[(IOTA0 - iConst4) & 8191]; + fRec17[0] = fRec11[0] * fRec17[1] + fTemp2 * fRec16[1]; + fVec1[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec17[0]; + fRec16[0] = fVec1[(IOTA0 - iConst5) & 8191]; + fRec19[0] = fRec11[0] * fRec19[1] + fTemp2 * fRec18[1]; + fVec2[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec19[0]; + fRec18[0] = fVec2[(IOTA0 - iConst6) & 8191]; + fRec21[0] = fRec11[0] * fRec21[1] + fTemp2 * fRec20[1]; + fVec3[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec21[0]; + fRec20[0] = fVec3[(IOTA0 - iConst7) & 8191]; + fRec23[0] = fRec11[0] * fRec23[1] + fTemp2 * fRec22[1]; + fVec4[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec23[0]; + fRec22[0] = fVec4[(IOTA0 - iConst8) & 8191]; + fRec25[0] = fRec11[0] * fRec25[1] + fTemp2 * fRec24[1]; + fVec5[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec25[0]; + fRec24[0] = fVec5[(IOTA0 - iConst9) & 8191]; + fRec27[0] = fRec11[0] * fRec27[1] + fTemp2 * fRec26[1]; + fVec6[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec27[0]; + fRec26[0] = fVec6[(IOTA0 - iConst10) & 8191]; + fRec29[0] = fRec11[0] * fRec29[1] + fTemp2 * fRec28[1]; + fVec7[IOTA0 & 8191] = fTemp3 + fRec13[0] * fRec29[0]; + fRec28[0] = fVec7[(IOTA0 - iConst11) & 8191]; + float fTemp4 = fRec9[0] + fRec16[0] + fRec18[0] + fRec20[0] + fRec22[0] + fRec24[0] + fRec26[0] + fRec28[0] + 0.5f * fRec7[1]; + fVec8[IOTA0 & 2047] = fTemp4; + fRec7[0] = fVec8[(IOTA0 - iConst12) & 2047]; + float fRec8 = 0.0f - 0.5f * fTemp4; + float fTemp5 = fRec7[1] + fRec8 + 0.5f * fRec5[1]; + fVec9[IOTA0 & 2047] = fTemp5; + fRec5[0] = fVec9[(IOTA0 - iConst13) & 2047]; + float fRec6 = 0.0f - 0.5f * fTemp5; + float fTemp6 = fRec5[1] + fRec6 + 0.5f * fRec3[1]; + fVec10[IOTA0 & 2047] = fTemp6; + fRec3[0] = fVec10[(IOTA0 - iConst14) & 2047]; + float fRec4 = 0.0f - 0.5f * fTemp6; + float fTemp7 = 0.5f * fRec1[1] + fRec4 + fRec3[1]; + fVec11[IOTA0 & 1023] = fTemp7; + fRec1[0] = fVec11[(IOTA0 - iConst15) & 1023]; + float fRec2 = 0.0f - 0.5f * fTemp7; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * (fRec2 + fRec1[1]))); fRec0[1] = fRec0[0]; - fRec10[1] = fRec10[0]; fRec12[1] = fRec12[0]; fRec11[1] = fRec11[0]; - fRec15[1] = fRec15[0]; + fRec10[1] = fRec10[0]; fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; - IOTA = (IOTA + 1); + fRec15[1] = fRec15[0]; + IOTA0 = IOTA0 + 1; fRec9[1] = fRec9[0]; fRec17[1] = fRec17[0]; fRec16[1] = fRec16[0]; diff --git a/ceammc/ext/src/fx/fx_freeverb2.h b/ceammc/ext/src/fx/fx_freeverb2.h index bf18ba82dd..b5f0ddaf5e 100644 --- a/ceammc/ext/src/fx/fx_freeverb2.h +++ b/ceammc/ext/src/fx/fx_freeverb2.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.freeverb2" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freeverb2 -scn fx_freeverb2_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_freeverb2_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_freeverb2_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_freeverb2_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_freeverb2_dsp { +class FAUST_API fx_freeverb2_dsp { public: @@ -162,7 +247,7 @@ class fx_freeverb2_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_freeverb2_dsp { +class FAUST_API decorator_dsp : public fx_freeverb2_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_freeverb2_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_freeverb2_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_freeverb2_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_freeverb2 : public fx_freeverb2_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_freeverb2 #endif @@ -559,6 +636,13 @@ struct fx_freeverb2 : public fx_freeverb2_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_freeverb2 : public fx_freeverb2_dsp { private: @@ -569,12 +653,12 @@ class fx_freeverb2 : public fx_freeverb2_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec0[2]; - FAUSTFLOAT fHslider1; - float fConst3; FAUSTFLOAT fCheckbox1; - FAUSTFLOAT fHslider2; + FAUSTFLOAT fHslider1; float fRec12[2]; + FAUSTFLOAT fHslider2; FAUSTFLOAT fHslider3; + float fConst3; float fRec11[2]; float fRec10[2]; FAUSTFLOAT fHslider4; @@ -582,7 +666,7 @@ class fx_freeverb2 : public fx_freeverb2_dsp { FAUSTFLOAT fHslider5; float fRec13[2]; float fRec15[2]; - int IOTA; + int IOTA0; float fVec0[8192]; int iConst4; float fRec9[2]; @@ -668,20 +752,21 @@ class fx_freeverb2 : public fx_freeverb2_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass2:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freeverb2 -scn fx_freeverb2_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_freeverb2.dsp"); m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); m->declare("filters.lib/name", "Faust Filters Library"); m->declare("filters.lib/version", "0.3"); m->declare("maths.lib/author", "GRAME"); @@ -692,12 +777,14 @@ class fx_freeverb2 : public fx_freeverb2_dsp { m->declare("name", "fx.freeverb2"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); + m->declare("reverbs.lib/mono_freeverb:author", "Romain Michon"); m->declare("reverbs.lib/name", "Faust Reverb Library"); + m->declare("reverbs.lib/stereo_freeverb:author", "Romain Michon"); m->declare("reverbs.lib/version", "0.2"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -712,251 +799,251 @@ class fx_freeverb2 : public fx_freeverb2_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (1.0f / fConst0); - iConst4 = int((0.0253061224f * fConst0)); - iConst5 = int((0.0269387756f * fConst0)); - iConst6 = int((0.0289569162f * fConst0)); - iConst7 = int((0.0307482984f * fConst0)); - iConst8 = int((0.0322448984f * fConst0)); - iConst9 = int((0.033809524f * fConst0)); - iConst10 = int((0.0353061222f * fConst0)); - iConst11 = int((0.0366666652f * fConst0)); - iConst12 = int((0.0126077095f * fConst0)); - iConst13 = std::min(1024, std::max(0, (iConst12 + -1))); - iConst14 = int((0.00999999978f * fConst0)); - iConst15 = std::min(1024, std::max(0, (iConst14 + -1))); - iConst16 = int((0.00773242628f * fConst0)); - iConst17 = std::min(1024, std::max(0, (iConst16 + -1))); - iConst18 = int((0.00510204071f * fConst0)); - iConst19 = std::min(1024, std::max(0, (iConst18 + -1))); - fConst20 = (0.00104308384f * fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1.0f / fConst0; + iConst4 = int(0.025306122f * fConst0); + iConst5 = int(0.026938776f * fConst0); + iConst6 = int(0.028956916f * fConst0); + iConst7 = int(0.030748298f * fConst0); + iConst8 = int(0.0322449f * fConst0); + iConst9 = int(0.033809524f * fConst0); + iConst10 = int(0.035306122f * fConst0); + iConst11 = int(0.036666665f * fConst0); + iConst12 = int(0.0126077095f * fConst0); + iConst13 = std::min(1024, std::max(0, iConst12 + -1)); + iConst14 = int(0.01f * fConst0); + iConst15 = std::min(1024, std::max(0, iConst14 + -1)); + iConst16 = int(0.0077324263f * fConst0); + iConst17 = std::min(1024, std::max(0, iConst16 + -1)); + iConst18 = int(0.0051020407f * fConst0); + iConst19 = std::min(1024, std::max(0, iConst18 + -1)); + fConst20 = 0.0010430838f * fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); - fHslider0 = FAUSTFLOAT(0.33000000000000002f); - fHslider1 = FAUSTFLOAT(100.0f); + fHslider0 = FAUSTFLOAT(0.33f); fCheckbox1 = FAUSTFLOAT(0.0f); - fHslider2 = FAUSTFLOAT(0.5f); - fHslider3 = FAUSTFLOAT(0.0001f); + fHslider1 = FAUSTFLOAT(0.5f); + fHslider2 = FAUSTFLOAT(0.0001f); + fHslider3 = FAUSTFLOAT(1e+02f); fHslider4 = FAUSTFLOAT(0.5f); fHslider5 = FAUSTFLOAT(0.999f); fHslider6 = FAUSTFLOAT(0.5f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec12[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec11[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec10[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec14[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec13[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec15[l6] = 0.0f; } - IOTA = 0; - for (int l7 = 0; (l7 < 8192); l7 = (l7 + 1)) { + IOTA0 = 0; + for (int l7 = 0; l7 < 8192; l7 = l7 + 1) { fVec0[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec9[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec17[l9] = 0.0f; } - for (int l10 = 0; (l10 < 8192); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 8192; l10 = l10 + 1) { fVec1[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec16[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { fRec19[l12] = 0.0f; } - for (int l13 = 0; (l13 < 8192); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 8192; l13 = l13 + 1) { fVec2[l13] = 0.0f; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { fRec18[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { fRec21[l15] = 0.0f; } - for (int l16 = 0; (l16 < 8192); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 8192; l16 = l16 + 1) { fVec3[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { fRec20[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { fRec23[l18] = 0.0f; } - for (int l19 = 0; (l19 < 8192); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 8192; l19 = l19 + 1) { fVec4[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { fRec22[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { fRec25[l21] = 0.0f; } - for (int l22 = 0; (l22 < 8192); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 8192; l22 = l22 + 1) { fVec5[l22] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { fRec24[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { fRec27[l24] = 0.0f; } - for (int l25 = 0; (l25 < 8192); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 8192; l25 = l25 + 1) { fVec6[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { fRec26[l26] = 0.0f; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 2; l27 = l27 + 1) { fRec29[l27] = 0.0f; } - for (int l28 = 0; (l28 < 8192); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 8192; l28 = l28 + 1) { fVec7[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { fRec28[l29] = 0.0f; } - for (int l30 = 0; (l30 < 2048); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 2048; l30 = l30 + 1) { fVec8[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec7[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2048); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2048; l32 = l32 + 1) { fVec9[l32] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 2; l33 = l33 + 1) { fRec5[l33] = 0.0f; } - for (int l34 = 0; (l34 < 2048); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 2048; l34 = l34 + 1) { fVec10[l34] = 0.0f; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { fRec3[l35] = 0.0f; } - for (int l36 = 0; (l36 < 1024); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 1024; l36 = l36 + 1) { fVec11[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { fRec1[l37] = 0.0f; } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { fRec39[l38] = 0.0f; } - for (int l39 = 0; (l39 < 8192); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 8192; l39 = l39 + 1) { fVec12[l39] = 0.0f; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { fRec38[l40] = 0.0f; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + for (int l41 = 0; l41 < 2; l41 = l41 + 1) { fRec41[l41] = 0.0f; } - for (int l42 = 0; (l42 < 8192); l42 = (l42 + 1)) { + for (int l42 = 0; l42 < 8192; l42 = l42 + 1) { fVec13[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + for (int l43 = 0; l43 < 2; l43 = l43 + 1) { fRec40[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 2; l44 = l44 + 1) { fRec43[l44] = 0.0f; } - for (int l45 = 0; (l45 < 8192); l45 = (l45 + 1)) { + for (int l45 = 0; l45 < 8192; l45 = l45 + 1) { fVec14[l45] = 0.0f; } - for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 2; l46 = l46 + 1) { fRec42[l46] = 0.0f; } - for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 2; l47 = l47 + 1) { fRec45[l47] = 0.0f; } - for (int l48 = 0; (l48 < 8192); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 8192; l48 = l48 + 1) { fVec15[l48] = 0.0f; } - for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 2; l49 = l49 + 1) { fRec44[l49] = 0.0f; } - for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 2; l50 = l50 + 1) { fRec47[l50] = 0.0f; } - for (int l51 = 0; (l51 < 8192); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 8192; l51 = l51 + 1) { fVec16[l51] = 0.0f; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 2; l52 = l52 + 1) { fRec46[l52] = 0.0f; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + for (int l53 = 0; l53 < 2; l53 = l53 + 1) { fRec49[l53] = 0.0f; } - for (int l54 = 0; (l54 < 8192); l54 = (l54 + 1)) { + for (int l54 = 0; l54 < 8192; l54 = l54 + 1) { fVec17[l54] = 0.0f; } - for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + for (int l55 = 0; l55 < 2; l55 = l55 + 1) { fRec48[l55] = 0.0f; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + for (int l56 = 0; l56 < 2; l56 = l56 + 1) { fRec51[l56] = 0.0f; } - for (int l57 = 0; (l57 < 8192); l57 = (l57 + 1)) { + for (int l57 = 0; l57 < 8192; l57 = l57 + 1) { fVec18[l57] = 0.0f; } - for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + for (int l58 = 0; l58 < 2; l58 = l58 + 1) { fRec50[l58] = 0.0f; } - for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + for (int l59 = 0; l59 < 2; l59 = l59 + 1) { fRec53[l59] = 0.0f; } - for (int l60 = 0; (l60 < 8192); l60 = (l60 + 1)) { + for (int l60 = 0; l60 < 8192; l60 = l60 + 1) { fVec19[l60] = 0.0f; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { fRec52[l61] = 0.0f; } - for (int l62 = 0; (l62 < 2048); l62 = (l62 + 1)) { + for (int l62 = 0; l62 < 2048; l62 = l62 + 1) { fVec20[l62] = 0.0f; } - for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + for (int l63 = 0; l63 < 2; l63 = l63 + 1) { fRec36[l63] = 0.0f; } - for (int l64 = 0; (l64 < 2048); l64 = (l64 + 1)) { + for (int l64 = 0; l64 < 2048; l64 = l64 + 1) { fVec21[l64] = 0.0f; } - for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + for (int l65 = 0; l65 < 2; l65 = l65 + 1) { fRec34[l65] = 0.0f; } - for (int l66 = 0; (l66 < 2048); l66 = (l66 + 1)) { + for (int l66 = 0; l66 < 2048; l66 = l66 + 1) { fVec22[l66] = 0.0f; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + for (int l67 = 0; l67 < 2; l67 = l67 + 1) { fRec32[l67] = 0.0f; } - for (int l68 = 0; (l68 < 2048); l68 = (l68 + 1)) { + for (int l68 = 0; l68 < 2048; l68 = l68 + 1) { fVec23[l68] = 0.0f; } - for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + for (int l69 = 0; l69 < 2; l69 = l69 + 1) { fRec30[l69] = 0.0f; } } @@ -982,153 +1069,150 @@ class fx_freeverb2 : public fx_freeverb2_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.freeverb2"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addHorizontalSlider("damp", &fHslider2, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("damp", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.330000013f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->declare(&fHslider3, "style", "knob"); - ui_interface->addHorizontalSlider("fr_damp", &fHslider3, FAUSTFLOAT(9.99999975e-05f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.33f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->declare(&fHslider2, "style", "knob"); + ui_interface->addHorizontalSlider("fr_damp", &fHslider2, FAUSTFLOAT(0.0001f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider5, "style", "knob"); - ui_interface->addHorizontalSlider("fr_room", &fHslider5, FAUSTFLOAT(0.999000013f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); - ui_interface->declare(&fHslider1, "style", "knob"); - ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("fr_time", &fHslider1, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("fr_room", &fHslider5, FAUSTFLOAT(0.999f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->declare(&fHslider3, "style", "knob"); + ui_interface->declare(&fHslider3, "unit", "ms"); + ui_interface->addHorizontalSlider("fr_time", &fHslider3, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fCheckbox1, "type", "bool"); ui_interface->addCheckButton("freeze", &fCheckbox1); - ui_interface->addHorizontalSlider("room", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); - ui_interface->addHorizontalSlider("spread", &fHslider6, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("room", &fHslider4, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addHorizontalSlider("spread", &fHslider6, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (0.00100000005f * float(fHslider1)); - int iSlow3 = (std::fabs(fSlow2) < 1.1920929e-07f); - float fThen2 = std::exp((0.0f - (fConst3 / (iSlow3 ? 1.0f : fSlow2)))); - float fSlow4 = (iSlow3 ? 0.0f : fThen2); - int iSlow5 = int(float(fCheckbox1)); - float fSlow6 = (fConst1 * float(fHslider2)); - float fSlow7 = float(fHslider3); - float fSlow8 = (1.0f - fSlow4); - float fSlow9 = (fConst1 * float(fHslider4)); + float fSlow1 = fConst1 * float(fHslider0); + int iSlow2 = int(float(fCheckbox1)); + float fSlow3 = fConst1 * float(fHslider1); + float fSlow4 = float(fHslider2); + float fSlow5 = 0.001f * float(fHslider3); + int iSlow6 = std::fabs(fSlow5) < 1.1920929e-07f; + float fSlow7 = ((iSlow6) ? 0.0f : std::exp(0.0f - fConst3 / ((iSlow6) ? 1.0f : fSlow5))); + float fSlow8 = 1.0f - fSlow7; + float fSlow9 = fConst1 * float(fHslider4); float fSlow10 = float(fHslider5); - float fSlow11 = (float((1 - iSlow5)) * fSlow8); - int iSlow12 = int((fConst20 * float(fHslider6))); - int iSlow13 = (iConst4 + iSlow12); - int iSlow14 = (iConst5 + iSlow12); - int iSlow15 = (iConst6 + iSlow12); - int iSlow16 = (iConst7 + iSlow12); - int iSlow17 = (iConst8 + iSlow12); - int iSlow18 = (iConst9 + iSlow12); - int iSlow19 = (iConst10 + iSlow12); - int iSlow20 = (iConst11 + iSlow12); - int iSlow21 = (iSlow12 + -1); - int iSlow22 = std::min(1024, std::max(0, (iConst12 + iSlow21))); - int iSlow23 = std::min(1024, std::max(0, (iConst14 + iSlow21))); - int iSlow24 = std::min(1024, std::max(0, (iConst16 + iSlow21))); - int iSlow25 = std::min(1024, std::max(0, (iConst18 + iSlow21))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow11 = float(1 - iSlow2) * fSlow8; + int iSlow12 = int(fConst20 * float(fHslider6)); + int iSlow13 = iConst4 + iSlow12; + int iSlow14 = iConst5 + iSlow12; + int iSlow15 = iConst6 + iSlow12; + int iSlow16 = iConst7 + iSlow12; + int iSlow17 = iConst8 + iSlow12; + int iSlow18 = iConst9 + iSlow12; + int iSlow19 = iConst10 + iSlow12; + int iSlow20 = iConst11 + iSlow12; + int iSlow21 = iSlow12 + -1; + int iSlow22 = std::min(1024, std::max(0, iConst12 + iSlow21)); + int iSlow23 = std::min(1024, std::max(0, iConst14 + iSlow21)); + int iSlow24 = std::min(1024, std::max(0, iConst16 + iSlow21)); + int iSlow25 = std::min(1024, std::max(0, iConst18 + iSlow21)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - float fTemp2 = (1.0f - fRec0[0]); - fRec12[0] = (fSlow6 + (fConst2 * fRec12[1])); - fRec11[0] = ((fRec11[1] * fSlow4) + ((iSlow5 ? fSlow7 : fRec12[0]) * fSlow8)); - float fTemp3 = (1.0f - fRec11[0]); - fRec10[0] = ((fRec11[0] * fRec10[1]) + (fTemp3 * fRec9[1])); - fRec14[0] = (fSlow9 + (fConst2 * fRec14[1])); - fRec13[0] = ((fSlow4 * fRec13[1]) + ((iSlow5 ? fSlow10 : fRec14[0]) * fSlow8)); - fRec15[0] = ((fSlow4 * fRec15[1]) + fSlow11); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = 1.0f - fRec0[0]; + fRec12[0] = fSlow3 + fConst2 * fRec12[1]; + fRec11[0] = ((iSlow2) ? fSlow4 : fRec12[0]) * fSlow8 + fSlow7 * fRec11[1]; + float fTemp3 = 1.0f - fRec11[0]; + fRec10[0] = fRec11[0] * fRec10[1] + fTemp3 * fRec9[1]; + fRec14[0] = fSlow9 + fConst2 * fRec14[1]; + fRec13[0] = ((iSlow2) ? fSlow10 : fRec14[0]) * fSlow8 + fSlow7 * fRec13[1]; + fRec15[0] = fSlow11 + fSlow7 * fRec15[1]; float fTemp4 = float(input1[i0]); - float fTemp5 = (iSlow0 ? 0.0f : fTemp4); - float fTemp6 = (fRec15[0] * (fTemp1 + fTemp5)); - fVec0[(IOTA & 8191)] = ((fRec10[0] * fRec13[0]) + fTemp6); - fRec9[0] = fVec0[((IOTA - iConst4) & 8191)]; - fRec17[0] = ((fRec11[0] * fRec17[1]) + (fTemp3 * fRec16[1])); - fVec1[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec17[0])); - fRec16[0] = fVec1[((IOTA - iConst5) & 8191)]; - fRec19[0] = ((fRec11[0] * fRec19[1]) + (fTemp3 * fRec18[1])); - fVec2[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec19[0])); - fRec18[0] = fVec2[((IOTA - iConst6) & 8191)]; - fRec21[0] = ((fRec11[0] * fRec21[1]) + (fTemp3 * fRec20[1])); - fVec3[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec21[0])); - fRec20[0] = fVec3[((IOTA - iConst7) & 8191)]; - fRec23[0] = ((fRec11[0] * fRec23[1]) + (fTemp3 * fRec22[1])); - fVec4[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec23[0])); - fRec22[0] = fVec4[((IOTA - iConst8) & 8191)]; - fRec25[0] = ((fRec11[0] * fRec25[1]) + (fTemp3 * fRec24[1])); - fVec5[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec25[0])); - fRec24[0] = fVec5[((IOTA - iConst9) & 8191)]; - fRec27[0] = ((fRec11[0] * fRec27[1]) + (fTemp3 * fRec26[1])); - fVec6[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec27[0])); - fRec26[0] = fVec6[((IOTA - iConst10) & 8191)]; - fRec29[0] = ((fRec11[0] * fRec29[1]) + (fTemp3 * fRec28[1])); - fVec7[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec29[0])); - fRec28[0] = fVec7[((IOTA - iConst11) & 8191)]; - float fTemp7 = ((((((((fRec9[0] + fRec16[0]) + fRec18[0]) + fRec20[0]) + fRec22[0]) + fRec24[0]) + fRec26[0]) + fRec28[0]) + (0.5f * fRec7[1])); - fVec8[(IOTA & 2047)] = fTemp7; - fRec7[0] = fVec8[((IOTA - iConst13) & 2047)]; - float fRec8 = (0.0f - (0.5f * fTemp7)); - float fTemp8 = (fRec8 + ((0.5f * fRec5[1]) + fRec7[1])); - fVec9[(IOTA & 2047)] = fTemp8; - fRec5[0] = fVec9[((IOTA - iConst15) & 2047)]; - float fRec6 = (0.0f - (0.5f * fTemp8)); - float fTemp9 = (fRec6 + ((0.5f * fRec3[1]) + fRec5[1])); - fVec10[(IOTA & 2047)] = fTemp9; - fRec3[0] = fVec10[((IOTA - iConst17) & 2047)]; - float fRec4 = (0.0f - (0.5f * fTemp9)); - float fTemp10 = (fRec4 + ((0.5f * fRec1[1]) + fRec3[1])); - fVec11[(IOTA & 1023)] = fTemp10; - fRec1[0] = fVec11[((IOTA - iConst19) & 1023)]; - float fRec2 = (0.0f - (0.5f * fTemp10)); - float fThen6 = ((fTemp1 * fTemp2) + (fRec0[0] * (fRec2 + fRec1[1]))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen6)); - fRec39[0] = ((fRec11[0] * fRec39[1]) + (fTemp3 * fRec38[1])); - fVec12[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec39[0])); - fRec38[0] = fVec12[((IOTA - iSlow13) & 8191)]; - fRec41[0] = ((fRec11[0] * fRec41[1]) + (fTemp3 * fRec40[1])); - fVec13[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec41[0])); - fRec40[0] = fVec13[((IOTA - iSlow14) & 8191)]; - fRec43[0] = ((fRec11[0] * fRec43[1]) + (fTemp3 * fRec42[1])); - fVec14[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec43[0])); - fRec42[0] = fVec14[((IOTA - iSlow15) & 8191)]; - fRec45[0] = ((fRec11[0] * fRec45[1]) + (fTemp3 * fRec44[1])); - fVec15[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec45[0])); - fRec44[0] = fVec15[((IOTA - iSlow16) & 8191)]; - fRec47[0] = ((fRec11[0] * fRec47[1]) + (fTemp3 * fRec46[1])); - fVec16[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec47[0])); - fRec46[0] = fVec16[((IOTA - iSlow17) & 8191)]; - fRec49[0] = ((fRec11[0] * fRec49[1]) + (fTemp3 * fRec48[1])); - fVec17[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec49[0])); - fRec48[0] = fVec17[((IOTA - iSlow18) & 8191)]; - fRec51[0] = ((fRec11[0] * fRec51[1]) + (fTemp3 * fRec50[1])); - fVec18[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec51[0])); - fRec50[0] = fVec18[((IOTA - iSlow19) & 8191)]; - fRec53[0] = ((fRec11[0] * fRec53[1]) + (fTemp3 * fRec52[1])); - fVec19[(IOTA & 8191)] = (fTemp6 + (fRec13[0] * fRec53[0])); - fRec52[0] = fVec19[((IOTA - iSlow20) & 8191)]; - float fTemp11 = ((((((((fRec38[0] + fRec40[0]) + fRec42[0]) + fRec44[0]) + fRec46[0]) + fRec48[0]) + fRec50[0]) + fRec52[0]) + (0.5f * fRec36[1])); - fVec20[(IOTA & 2047)] = fTemp11; - fRec36[0] = fVec20[((IOTA - iSlow22) & 2047)]; - float fRec37 = (0.0f - (0.5f * fTemp11)); - float fTemp12 = (fRec36[1] + (fRec37 + (0.5f * fRec34[1]))); - fVec21[(IOTA & 2047)] = fTemp12; - fRec34[0] = fVec21[((IOTA - iSlow23) & 2047)]; - float fRec35 = (0.0f - (0.5f * fTemp12)); - float fTemp13 = (fRec34[1] + (fRec35 + (0.5f * fRec32[1]))); - fVec22[(IOTA & 2047)] = fTemp13; - fRec32[0] = fVec22[((IOTA - iSlow24) & 2047)]; - float fRec33 = (0.0f - (0.5f * fTemp13)); - float fTemp14 = (fRec32[1] + (fRec33 + (0.5f * fRec30[1]))); - fVec23[(IOTA & 2047)] = fTemp14; - fRec30[0] = fVec23[((IOTA - iSlow25) & 2047)]; - float fRec31 = (0.0f - (0.5f * fTemp14)); - float fThen7 = ((fTemp2 * fTemp5) + (fRec0[0] * (fRec31 + fRec30[1]))); - output1[i0] = FAUSTFLOAT((iSlow0 ? fTemp4 : fThen7)); + float fTemp5 = ((iSlow0) ? 0.0f : fTemp4); + float fTemp6 = fRec15[0] * (fTemp1 + fTemp5); + fVec0[IOTA0 & 8191] = fRec10[0] * fRec13[0] + fTemp6; + fRec9[0] = fVec0[(IOTA0 - iConst4) & 8191]; + fRec17[0] = fRec11[0] * fRec17[1] + fTemp3 * fRec16[1]; + fVec1[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec17[0]; + fRec16[0] = fVec1[(IOTA0 - iConst5) & 8191]; + fRec19[0] = fRec11[0] * fRec19[1] + fTemp3 * fRec18[1]; + fVec2[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec19[0]; + fRec18[0] = fVec2[(IOTA0 - iConst6) & 8191]; + fRec21[0] = fRec11[0] * fRec21[1] + fTemp3 * fRec20[1]; + fVec3[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec21[0]; + fRec20[0] = fVec3[(IOTA0 - iConst7) & 8191]; + fRec23[0] = fRec11[0] * fRec23[1] + fTemp3 * fRec22[1]; + fVec4[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec23[0]; + fRec22[0] = fVec4[(IOTA0 - iConst8) & 8191]; + fRec25[0] = fRec11[0] * fRec25[1] + fTemp3 * fRec24[1]; + fVec5[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec25[0]; + fRec24[0] = fVec5[(IOTA0 - iConst9) & 8191]; + fRec27[0] = fRec11[0] * fRec27[1] + fTemp3 * fRec26[1]; + fVec6[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec27[0]; + fRec26[0] = fVec6[(IOTA0 - iConst10) & 8191]; + fRec29[0] = fRec11[0] * fRec29[1] + fTemp3 * fRec28[1]; + fVec7[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec29[0]; + fRec28[0] = fVec7[(IOTA0 - iConst11) & 8191]; + float fTemp7 = fRec9[0] + fRec16[0] + fRec18[0] + fRec20[0] + fRec22[0] + fRec24[0] + fRec26[0] + fRec28[0] + 0.5f * fRec7[1]; + fVec8[IOTA0 & 2047] = fTemp7; + fRec7[0] = fVec8[(IOTA0 - iConst13) & 2047]; + float fRec8 = 0.0f - 0.5f * fTemp7; + float fTemp8 = fRec7[1] + fRec8 + 0.5f * fRec5[1]; + fVec9[IOTA0 & 2047] = fTemp8; + fRec5[0] = fVec9[(IOTA0 - iConst15) & 2047]; + float fRec6 = 0.0f - 0.5f * fTemp8; + float fTemp9 = fRec5[1] + fRec6 + 0.5f * fRec3[1]; + fVec10[IOTA0 & 2047] = fTemp9; + fRec3[0] = fVec10[(IOTA0 - iConst17) & 2047]; + float fRec4 = 0.0f - 0.5f * fTemp9; + float fTemp10 = fRec3[1] + fRec4 + 0.5f * fRec1[1]; + fVec11[IOTA0 & 1023] = fTemp10; + fRec1[0] = fVec11[(IOTA0 - iConst19) & 1023]; + float fRec2 = 0.0f - 0.5f * fTemp10; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * fTemp2 + fRec0[0] * (fRec2 + fRec1[1]))); + fRec39[0] = fRec11[0] * fRec39[1] + fTemp3 * fRec38[1]; + fVec12[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec39[0]; + fRec38[0] = fVec12[(IOTA0 - iSlow13) & 8191]; + fRec41[0] = fRec11[0] * fRec41[1] + fTemp3 * fRec40[1]; + fVec13[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec41[0]; + fRec40[0] = fVec13[(IOTA0 - iSlow14) & 8191]; + fRec43[0] = fRec11[0] * fRec43[1] + fTemp3 * fRec42[1]; + fVec14[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec43[0]; + fRec42[0] = fVec14[(IOTA0 - iSlow15) & 8191]; + fRec45[0] = fRec11[0] * fRec45[1] + fTemp3 * fRec44[1]; + fVec15[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec45[0]; + fRec44[0] = fVec15[(IOTA0 - iSlow16) & 8191]; + fRec47[0] = fRec11[0] * fRec47[1] + fTemp3 * fRec46[1]; + fVec16[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec47[0]; + fRec46[0] = fVec16[(IOTA0 - iSlow17) & 8191]; + fRec49[0] = fRec11[0] * fRec49[1] + fTemp3 * fRec48[1]; + fVec17[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec49[0]; + fRec48[0] = fVec17[(IOTA0 - iSlow18) & 8191]; + fRec51[0] = fRec11[0] * fRec51[1] + fTemp3 * fRec50[1]; + fVec18[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec51[0]; + fRec50[0] = fVec18[(IOTA0 - iSlow19) & 8191]; + fRec53[0] = fRec11[0] * fRec53[1] + fTemp3 * fRec52[1]; + fVec19[IOTA0 & 8191] = fTemp6 + fRec13[0] * fRec53[0]; + fRec52[0] = fVec19[(IOTA0 - iSlow20) & 8191]; + float fTemp11 = fRec38[0] + fRec40[0] + fRec42[0] + fRec44[0] + fRec46[0] + fRec48[0] + fRec50[0] + fRec52[0] + 0.5f * fRec36[1]; + fVec20[IOTA0 & 2047] = fTemp11; + fRec36[0] = fVec20[(IOTA0 - iSlow22) & 2047]; + float fRec37 = 0.0f - 0.5f * fTemp11; + float fTemp12 = fRec36[1] + fRec37 + 0.5f * fRec34[1]; + fVec21[IOTA0 & 2047] = fTemp12; + fRec34[0] = fVec21[(IOTA0 - iSlow23) & 2047]; + float fRec35 = 0.0f - 0.5f * fTemp12; + float fTemp13 = fRec34[1] + fRec35 + 0.5f * fRec32[1]; + fVec22[IOTA0 & 2047] = fTemp13; + fRec32[0] = fVec22[(IOTA0 - iSlow24) & 2047]; + float fRec33 = 0.0f - 0.5f * fTemp13; + float fTemp14 = fRec32[1] + fRec33 + 0.5f * fRec30[1]; + fVec23[IOTA0 & 2047] = fTemp14; + fRec30[0] = fVec23[(IOTA0 - iSlow25) & 2047]; + float fRec31 = 0.0f - 0.5f * fTemp14; + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp4 : fTemp2 * fTemp5 + fRec0[0] * (fRec31 + fRec30[1]))); fRec0[1] = fRec0[0]; fRec12[1] = fRec12[0]; fRec11[1] = fRec11[0]; @@ -1136,7 +1220,7 @@ class fx_freeverb2 : public fx_freeverb2_dsp { fRec14[1] = fRec14[0]; fRec13[1] = fRec13[0]; fRec15[1] = fRec15[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec9[1] = fRec9[0]; fRec17[1] = fRec17[0]; fRec16[1] = fRec16[0]; diff --git a/ceammc/ext/src/fx/fx_freqshift.h b/ceammc/ext/src/fx/fx_freqshift.h index b306a88123..24c2f43678 100644 --- a/ceammc/ext/src/fx/fx_freqshift.h +++ b/ceammc/ext/src/fx/fx_freqshift.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ -name: "frequency shifter" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +name: "fx.freqshift" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freqshift -scn fx_freqshift_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_freqshift_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_freqshift_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_freqshift_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_freqshift_dsp { +class FAUST_API fx_freqshift_dsp { public: @@ -162,7 +247,7 @@ class fx_freqshift_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_freqshift_dsp { +class FAUST_API decorator_dsp : public fx_freqshift_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_freqshift_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_freqshift_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_freqshift_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_freqshift : public fx_freqshift_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_freqshift #endif @@ -559,6 +636,13 @@ struct fx_freqshift : public fx_freqshift_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_freqshift : public fx_freqshift_dsp { private: @@ -580,14 +664,14 @@ class fx_freqshift : public fx_freqshift_dsp { public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_freqshift -scn fx_freqshift_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_freqshift.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); - m->declare("name", "frequency shifter"); + m->declare("name", "fx.freqshift"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); } @@ -604,42 +688,42 @@ class fx_freqshift : public fx_freqshift_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (6.28318548f / fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 6.2831855f / fConst0; } virtual void instanceResetUserInterface() { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 4); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 4; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { fRec3[l1] = 0.0f; } - for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 3; l2 = l2 + 1) { fRec2[l2] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 3; l3 = l3 + 1) { fRec1[l3] = 0.0f; } - for (int l4 = 0; (l4 < 3); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 3; l4 = l4 + 1) { fRec0[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { iRec4[l5] = 0; } - for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 3; l6 = l6 + 1) { fRec8[l6] = 0.0f; } - for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 3; l7 = l7 + 1) { fRec7[l7] = 0.0f; } - for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 3; l8 = l8 + 1) { fRec6[l8] = 0.0f; } - for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 3; l9 = l9 + 1) { fRec5[l9] = 0.0f; } } @@ -663,35 +747,35 @@ class fx_freqshift : public fx_freqshift_dsp { } virtual void buildUserInterface(UI* ui_interface) { - ui_interface->openVerticalBox("frequency shifter"); + ui_interface->openVerticalBox("fx.freqshift"); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); fVec0[0] = fTemp0; - fRec3[0] = ((0.161758006f * (fTemp0 + fRec3[2])) - fVec0[2]); - fRec2[0] = ((0.733029008f * (fRec3[0] + fRec2[2])) - fRec3[2]); - fRec1[0] = ((0.945349991f * (fRec2[0] + fRec1[2])) - fRec2[2]); - fRec0[0] = ((0.990598023f * (fRec1[0] + fRec0[2])) - fRec1[2]); + fRec3[0] = 0.161758f * (fTemp0 + fRec3[2]) - fVec0[2]; + fRec2[0] = 0.733029f * (fRec3[0] + fRec2[2]) - fRec3[2]; + fRec1[0] = 0.94535f * (fRec2[0] + fRec1[2]) - fRec2[2]; + fRec0[0] = 0.990598f * (fRec1[0] + fRec0[2]) - fRec1[2]; float fTemp1 = float(input1[i0]); - iRec4[0] = (iRec4[1] + 1); - float fTemp2 = (fConst1 * (fTemp1 * std::fmod(float(iRec4[0]), (fConst0 / fTemp1)))); - float fTemp3 = (fRec0[0] * std::sin(fTemp2)); - fRec8[0] = ((0.479400992f * (fVec0[1] + fRec8[2])) - fVec0[3]); - fRec7[0] = ((0.876218021f * (fRec8[0] + fRec7[2])) - fRec8[2]); - fRec6[0] = ((0.976598978f * (fRec7[0] + fRec6[2])) - fRec7[2]); - fRec5[0] = ((0.997500002f * (fRec6[0] + fRec5[2])) - fRec6[2]); - float fTemp4 = (fRec5[0] * std::cos(fTemp2)); - output0[i0] = FAUSTFLOAT((fTemp3 + fTemp4)); - output1[i0] = FAUSTFLOAT((fTemp3 - fTemp4)); - for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) { - fVec0[j0] = fVec0[(j0 - 1)]; + iRec4[0] = iRec4[1] + 1; + float fTemp2 = fConst1 * fTemp1 * std::fmod(float(iRec4[0]), fConst0 / fTemp1); + float fTemp3 = fRec0[0] * std::sin(fTemp2); + fRec8[0] = 0.479401f * (fVec0[1] + fRec8[2]) - fVec0[3]; + fRec7[0] = 0.876218f * (fRec8[0] + fRec7[2]) - fRec8[2]; + fRec6[0] = 0.976599f * (fRec7[0] + fRec6[2]) - fRec7[2]; + fRec5[0] = 0.9975f * (fRec6[0] + fRec5[2]) - fRec6[2]; + float fTemp4 = fRec5[0] * std::cos(fTemp2); + output0[i0] = FAUSTFLOAT(fTemp3 + fTemp4); + output1[i0] = FAUSTFLOAT(fTemp3 - fTemp4); + for (int j0 = 3; j0 > 0; j0 = j0 - 1) { + fVec0[j0] = fVec0[j0 - 1]; } fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/fx/fx_granulator.h b/ceammc/ext/src/fx/fx_granulator.h index 84b4b8500e..91df0bec09 100644 --- a/ceammc/ext/src/fx/fx_granulator.h +++ b/ceammc/ext/src/fx/fx_granulator.h @@ -2,8 +2,8 @@ author: "Mayank Sanganeria" name: "fx.granulator" version: "1.0" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_granulator -scn fx_granulator_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_granulator_H__ @@ -16,23 +16,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_granulator_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_granulator_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -46,22 +46,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -70,7 +155,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_granulator_dsp { +class FAUST_API fx_granulator_dsp { public: @@ -164,7 +249,7 @@ class fx_granulator_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_granulator_dsp { +class FAUST_API decorator_dsp : public fx_granulator_dsp { protected: @@ -197,7 +282,7 @@ class decorator_dsp : public fx_granulator_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -226,18 +311,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -245,7 +333,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -256,16 +344,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -278,38 +364,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_granulator_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -324,8 +411,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -355,37 +442,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -396,40 +482,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_granulator_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -442,14 +528,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -551,6 +629,21 @@ struct fx_granulator : public fx_granulator_dsp { #include #include +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_granulator +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + class fx_granulatorSIG0 { private: @@ -569,7 +662,7 @@ class fx_granulatorSIG0 { } void fillfx_granulatorSIG0(int count, float* table) { - for (int i1 = 0; (i1 < count); i1 = (i1 + 1)) { + for (int i1 = 0; i1 < count; i1 = i1 + 1) { table[i1] = 0.0f; } } @@ -595,15 +688,15 @@ class fx_granulatorSIG1 { } void instanceInitfx_granulatorSIG1(int sample_rate) { - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { iRec70[l8] = 0; } } void fillfx_granulatorSIG1(int count, float* table) { - for (int i2 = 0; (i2 < count); i2 = (i2 + 1)) { - iRec70[0] = (iRec70[1] + 1); - table[i2] = (0.5f * (1.0f - std::cos((0.00614192104f * float((iRec70[0] + -1)))))); + for (int i2 = 0; i2 < count; i2 = i2 + 1) { + iRec70[0] = iRec70[1] + 1; + table[i2] = 0.5f * (1.0f - std::cos(0.006141921f * float(iRec70[0] + -1))); iRec70[1] = iRec70[0]; } } @@ -615,15 +708,6 @@ static void deletefx_granulatorSIG1(fx_granulatorSIG1* dsp) { delete dsp; } static float ftbl1fx_granulatorSIG1[1024]; -#ifndef FAUSTCLASS -#define FAUSTCLASS fx_granulator -#endif - -#ifdef __APPLE__ -#define exp10f __exp10f -#define exp10 __exp10 -#endif - class fx_granulator : public fx_granulator_dsp { private: @@ -777,10 +861,10 @@ class fx_granulator : public fx_granulator_dsp { void metadata(Meta* m) { m->declare("author", "Mayank Sanganeria"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_granulator -scn fx_granulator_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_granulator.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -791,7 +875,7 @@ class fx_granulator : public fx_granulator_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "1.0"); } @@ -814,420 +898,420 @@ class fx_granulator : public fx_granulator_dsp { fx_granulatorSIG0* sig0 = newfx_granulatorSIG0(); sig0->instanceInitfx_granulatorSIG0(sample_rate); sig0->fillfx_granulatorSIG0(480000, ftbl0); - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.0441000015f / fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.0441f / fConst0; deletefx_granulatorSIG0(sig0); } virtual void instanceResetUserInterface() { - fHslider0 = FAUSTFLOAT(10.0f); - fHslider1 = FAUSTFLOAT(10.0f); - fHslider2 = FAUSTFLOAT(100.0f); + fHslider0 = FAUSTFLOAT(1e+01f); + fHslider1 = FAUSTFLOAT(1e+01f); + fHslider2 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { iRec0[l2] = 0; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec4[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { iRec3[l4] = 0; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { iRec6[l5] = 0; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { iRec5[l6] = 0; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { iRec2[l7] = 0; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { iRec72[l9] = 0; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { iRec71[l10] = 0; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { iRec74[l11] = 0; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { iRec73[l12] = 0; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { iRec76[l13] = 0; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { iRec75[l14] = 0; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { iRec78[l15] = 0; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { iRec77[l16] = 0; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { iRec80[l17] = 0; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { iRec79[l18] = 0; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { iRec82[l19] = 0; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { iRec81[l20] = 0; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { iRec84[l21] = 0; } - for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { iRec83[l22] = 0; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { iRec86[l23] = 0; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { iRec85[l24] = 0; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { iRec88[l25] = 0; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { iRec87[l26] = 0; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 2; l27 = l27 + 1) { iRec90[l27] = 0; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { iRec89[l28] = 0; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { iRec92[l29] = 0; } - for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 2; l30 = l30 + 1) { iRec91[l30] = 0; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { iRec94[l31] = 0; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2; l32 = l32 + 1) { iRec93[l32] = 0; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 2; l33 = l33 + 1) { iRec96[l33] = 0; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { iRec95[l34] = 0; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { iRec98[l35] = 0; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 2; l36 = l36 + 1) { iRec97[l36] = 0; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { iRec100[l37] = 0; } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { iRec99[l38] = 0; } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 2; l39 = l39 + 1) { iRec102[l39] = 0; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { iRec101[l40] = 0; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + for (int l41 = 0; l41 < 2; l41 = l41 + 1) { iRec104[l41] = 0; } - for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + for (int l42 = 0; l42 < 2; l42 = l42 + 1) { iRec103[l42] = 0; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + for (int l43 = 0; l43 < 2; l43 = l43 + 1) { iRec106[l43] = 0; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 2; l44 = l44 + 1) { iRec105[l44] = 0; } - for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + for (int l45 = 0; l45 < 2; l45 = l45 + 1) { iRec108[l45] = 0; } - for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 2; l46 = l46 + 1) { iRec107[l46] = 0; } - for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 2; l47 = l47 + 1) { iRec110[l47] = 0; } - for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 2; l48 = l48 + 1) { iRec109[l48] = 0; } - for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 2; l49 = l49 + 1) { iRec112[l49] = 0; } - for (int l50 = 0; (l50 < 2); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 2; l50 = l50 + 1) { iRec111[l50] = 0; } - for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 2; l51 = l51 + 1) { iRec114[l51] = 0; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 2; l52 = l52 + 1) { iRec113[l52] = 0; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + for (int l53 = 0; l53 < 2; l53 = l53 + 1) { iRec116[l53] = 0; } - for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + for (int l54 = 0; l54 < 2; l54 = l54 + 1) { iRec115[l54] = 0; } - for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + for (int l55 = 0; l55 < 2; l55 = l55 + 1) { iRec118[l55] = 0; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + for (int l56 = 0; l56 < 2; l56 = l56 + 1) { iRec117[l56] = 0; } - for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + for (int l57 = 0; l57 < 2; l57 = l57 + 1) { iRec120[l57] = 0; } - for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + for (int l58 = 0; l58 < 2; l58 = l58 + 1) { iRec119[l58] = 0; } - for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + for (int l59 = 0; l59 < 2; l59 = l59 + 1) { iRec122[l59] = 0; } - for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + for (int l60 = 0; l60 < 2; l60 = l60 + 1) { iRec121[l60] = 0; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { iRec124[l61] = 0; } - for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + for (int l62 = 0; l62 < 2; l62 = l62 + 1) { iRec123[l62] = 0; } - for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + for (int l63 = 0; l63 < 2; l63 = l63 + 1) { iRec126[l63] = 0; } - for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + for (int l64 = 0; l64 < 2; l64 = l64 + 1) { iRec125[l64] = 0; } - for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { + for (int l65 = 0; l65 < 2; l65 = l65 + 1) { iRec128[l65] = 0; } - for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + for (int l66 = 0; l66 < 2; l66 = l66 + 1) { iRec127[l66] = 0; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + for (int l67 = 0; l67 < 2; l67 = l67 + 1) { iRec130[l67] = 0; } - for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + for (int l68 = 0; l68 < 2; l68 = l68 + 1) { iRec129[l68] = 0; } - for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + for (int l69 = 0; l69 < 2; l69 = l69 + 1) { iRec132[l69] = 0; } - for (int l70 = 0; (l70 < 2); l70 = (l70 + 1)) { + for (int l70 = 0; l70 < 2; l70 = l70 + 1) { iRec131[l70] = 0; } - for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + for (int l71 = 0; l71 < 2; l71 = l71 + 1) { iRec134[l71] = 0; } - for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + for (int l72 = 0; l72 < 2; l72 = l72 + 1) { iRec133[l72] = 0; } - for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + for (int l73 = 0; l73 < 2; l73 = l73 + 1) { iRec136[l73] = 0; } - for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + for (int l74 = 0; l74 < 2; l74 = l74 + 1) { iRec135[l74] = 0; } - for (int l75 = 0; (l75 < 2); l75 = (l75 + 1)) { + for (int l75 = 0; l75 < 2; l75 = l75 + 1) { iRec138[l75] = 0; } - for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + for (int l76 = 0; l76 < 2; l76 = l76 + 1) { iRec137[l76] = 0; } - for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + for (int l77 = 0; l77 < 2; l77 = l77 + 1) { iRec140[l77] = 0; } - for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + for (int l78 = 0; l78 < 2; l78 = l78 + 1) { iRec139[l78] = 0; } - for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + for (int l79 = 0; l79 < 2; l79 = l79 + 1) { iRec142[l79] = 0; } - for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + for (int l80 = 0; l80 < 2; l80 = l80 + 1) { iRec141[l80] = 0; } - for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + for (int l81 = 0; l81 < 2; l81 = l81 + 1) { iRec144[l81] = 0; } - for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + for (int l82 = 0; l82 < 2; l82 = l82 + 1) { iRec143[l82] = 0; } - for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + for (int l83 = 0; l83 < 2; l83 = l83 + 1) { iRec146[l83] = 0; } - for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + for (int l84 = 0; l84 < 2; l84 = l84 + 1) { iRec145[l84] = 0; } - for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { + for (int l85 = 0; l85 < 2; l85 = l85 + 1) { iRec148[l85] = 0; } - for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + for (int l86 = 0; l86 < 2; l86 = l86 + 1) { iRec147[l86] = 0; } - for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + for (int l87 = 0; l87 < 2; l87 = l87 + 1) { iRec150[l87] = 0; } - for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + for (int l88 = 0; l88 < 2; l88 = l88 + 1) { iRec149[l88] = 0; } - for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + for (int l89 = 0; l89 < 2; l89 = l89 + 1) { iRec152[l89] = 0; } - for (int l90 = 0; (l90 < 2); l90 = (l90 + 1)) { + for (int l90 = 0; l90 < 2; l90 = l90 + 1) { iRec151[l90] = 0; } - for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + for (int l91 = 0; l91 < 2; l91 = l91 + 1) { iRec154[l91] = 0; } - for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + for (int l92 = 0; l92 < 2; l92 = l92 + 1) { iRec153[l92] = 0; } - for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + for (int l93 = 0; l93 < 2; l93 = l93 + 1) { iRec156[l93] = 0; } - for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + for (int l94 = 0; l94 < 2; l94 = l94 + 1) { iRec155[l94] = 0; } - for (int l95 = 0; (l95 < 2); l95 = (l95 + 1)) { + for (int l95 = 0; l95 < 2; l95 = l95 + 1) { iRec158[l95] = 0; } - for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + for (int l96 = 0; l96 < 2; l96 = l96 + 1) { iRec157[l96] = 0; } - for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + for (int l97 = 0; l97 < 2; l97 = l97 + 1) { iRec160[l97] = 0; } - for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + for (int l98 = 0; l98 < 2; l98 = l98 + 1) { iRec159[l98] = 0; } - for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + for (int l99 = 0; l99 < 2; l99 = l99 + 1) { iRec162[l99] = 0; } - for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { + for (int l100 = 0; l100 < 2; l100 = l100 + 1) { iRec161[l100] = 0; } - for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + for (int l101 = 0; l101 < 2; l101 = l101 + 1) { iRec164[l101] = 0; } - for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + for (int l102 = 0; l102 < 2; l102 = l102 + 1) { iRec163[l102] = 0; } - for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + for (int l103 = 0; l103 < 2; l103 = l103 + 1) { iRec166[l103] = 0; } - for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + for (int l104 = 0; l104 < 2; l104 = l104 + 1) { iRec165[l104] = 0; } - for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { + for (int l105 = 0; l105 < 2; l105 = l105 + 1) { iRec168[l105] = 0; } - for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + for (int l106 = 0; l106 < 2; l106 = l106 + 1) { iRec167[l106] = 0; } - for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + for (int l107 = 0; l107 < 2; l107 = l107 + 1) { iRec170[l107] = 0; } - for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + for (int l108 = 0; l108 < 2; l108 = l108 + 1) { iRec169[l108] = 0; } - for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + for (int l109 = 0; l109 < 2; l109 = l109 + 1) { iRec172[l109] = 0; } - for (int l110 = 0; (l110 < 2); l110 = (l110 + 1)) { + for (int l110 = 0; l110 < 2; l110 = l110 + 1) { iRec171[l110] = 0; } - for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + for (int l111 = 0; l111 < 2; l111 = l111 + 1) { iRec174[l111] = 0; } - for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + for (int l112 = 0; l112 < 2; l112 = l112 + 1) { iRec173[l112] = 0; } - for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + for (int l113 = 0; l113 < 2; l113 = l113 + 1) { iRec176[l113] = 0; } - for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + for (int l114 = 0; l114 < 2; l114 = l114 + 1) { iRec175[l114] = 0; } - for (int l115 = 0; (l115 < 2); l115 = (l115 + 1)) { + for (int l115 = 0; l115 < 2; l115 = l115 + 1) { iRec178[l115] = 0; } - for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + for (int l116 = 0; l116 < 2; l116 = l116 + 1) { iRec177[l116] = 0; } - for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + for (int l117 = 0; l117 < 2; l117 = l117 + 1) { iRec180[l117] = 0; } - for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + for (int l118 = 0; l118 < 2; l118 = l118 + 1) { iRec179[l118] = 0; } - for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + for (int l119 = 0; l119 < 2; l119 = l119 + 1) { iRec182[l119] = 0; } - for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { + for (int l120 = 0; l120 < 2; l120 = l120 + 1) { iRec181[l120] = 0; } - for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + for (int l121 = 0; l121 < 2; l121 = l121 + 1) { iRec184[l121] = 0; } - for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + for (int l122 = 0; l122 < 2; l122 = l122 + 1) { iRec183[l122] = 0; } - for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + for (int l123 = 0; l123 < 2; l123 = l123 + 1) { iRec186[l123] = 0; } - for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + for (int l124 = 0; l124 < 2; l124 = l124 + 1) { iRec185[l124] = 0; } - for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { + for (int l125 = 0; l125 < 2; l125 = l125 + 1) { iRec188[l125] = 0; } - for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + for (int l126 = 0; l126 < 2; l126 = l126 + 1) { iRec187[l126] = 0; } - for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + for (int l127 = 0; l127 < 2; l127 = l127 + 1) { iRec190[l127] = 0; } - for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + for (int l128 = 0; l128 < 2; l128 = l128 + 1) { iRec189[l128] = 0; } - for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + for (int l129 = 0; l129 < 2; l129 = l129 + 1) { iRec192[l129] = 0; } - for (int l130 = 0; (l130 < 2); l130 = (l130 + 1)) { + for (int l130 = 0; l130 < 2; l130 = l130 + 1) { iRec191[l130] = 0; } - for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + for (int l131 = 0; l131 < 2; l131 = l131 + 1) { iRec194[l131] = 0; } - for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + for (int l132 = 0; l132 < 2; l132 = l132 + 1) { iRec193[l132] = 0; } - for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + for (int l133 = 0; l133 < 2; l133 = l133 + 1) { iRec196[l133] = 0; } - for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + for (int l134 = 0; l134 < 2; l134 = l134 + 1) { iRec195[l134] = 0; } } @@ -1253,162 +1337,162 @@ class fx_granulator : public fx_granulator_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.granulator"); ui_interface->declare(&fHslider1, "unit", "sec"); - ui_interface->addHorizontalSlider("delay", &fHslider1, FAUSTFLOAT(10.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("delay", &fHslider1, FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.5f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider0, "type", "int"); - ui_interface->addHorizontalSlider("density", &fHslider0, FAUSTFLOAT(10.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(64.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("density", &fHslider0, FAUSTFLOAT(1e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(64.0f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("length", &fHslider2, FAUSTFLOAT(100.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(500.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("length", &fHslider2, FAUSTFLOAT(1e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fHslider0)); - float fSlow1 = (2.0f / float(iSlow0)); - float fSlow2 = float((0 < iSlow0)); - float fSlow3 = (fConst1 * float(fHslider1)); - float fSlow4 = (fConst3 * float(fHslider2)); - float fSlow5 = float((2 < iSlow0)); - float fSlow6 = float((4 < iSlow0)); - float fSlow7 = float((6 < iSlow0)); - float fSlow8 = float((8 < iSlow0)); - float fSlow9 = float((10 < iSlow0)); - float fSlow10 = float((12 < iSlow0)); - float fSlow11 = float((14 < iSlow0)); - float fSlow12 = float((16 < iSlow0)); - float fSlow13 = float((18 < iSlow0)); - float fSlow14 = float((20 < iSlow0)); - float fSlow15 = float((22 < iSlow0)); - float fSlow16 = float((24 < iSlow0)); - float fSlow17 = float((26 < iSlow0)); - float fSlow18 = float((28 < iSlow0)); - float fSlow19 = float((30 < iSlow0)); - float fSlow20 = float((32 < iSlow0)); - float fSlow21 = float((34 < iSlow0)); - float fSlow22 = float((36 < iSlow0)); - float fSlow23 = float((38 < iSlow0)); - float fSlow24 = float((40 < iSlow0)); - float fSlow25 = float((42 < iSlow0)); - float fSlow26 = float((44 < iSlow0)); - float fSlow27 = float((46 < iSlow0)); - float fSlow28 = float((48 < iSlow0)); - float fSlow29 = float((50 < iSlow0)); - float fSlow30 = float((52 < iSlow0)); - float fSlow31 = float((54 < iSlow0)); - float fSlow32 = float((56 < iSlow0)); - float fSlow33 = float((58 < iSlow0)); - float fSlow34 = float((60 < iSlow0)); - float fSlow35 = float((62 < iSlow0)); - float fSlow36 = float((1 < iSlow0)); - float fSlow37 = float((3 < iSlow0)); - float fSlow38 = float((5 < iSlow0)); - float fSlow39 = float((7 < iSlow0)); - float fSlow40 = float((9 < iSlow0)); - float fSlow41 = float((11 < iSlow0)); - float fSlow42 = float((13 < iSlow0)); - float fSlow43 = float((15 < iSlow0)); - float fSlow44 = float((17 < iSlow0)); - float fSlow45 = float((19 < iSlow0)); - float fSlow46 = float((21 < iSlow0)); - float fSlow47 = float((23 < iSlow0)); - float fSlow48 = float((25 < iSlow0)); - float fSlow49 = float((27 < iSlow0)); - float fSlow50 = float((29 < iSlow0)); - float fSlow51 = float((31 < iSlow0)); - float fSlow52 = float((33 < iSlow0)); - float fSlow53 = float((35 < iSlow0)); - float fSlow54 = float((37 < iSlow0)); - float fSlow55 = float((39 < iSlow0)); - float fSlow56 = float((41 < iSlow0)); - float fSlow57 = float((43 < iSlow0)); - float fSlow58 = float((45 < iSlow0)); - float fSlow59 = float((47 < iSlow0)); - float fSlow60 = float((49 < iSlow0)); - float fSlow61 = float((51 < iSlow0)); - float fSlow62 = float((53 < iSlow0)); - float fSlow63 = float((55 < iSlow0)); - float fSlow64 = float((57 < iSlow0)); - float fSlow65 = float((59 < iSlow0)); - float fSlow66 = float((61 < iSlow0)); - float fSlow67 = float((63 < iSlow0)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = 2.0f / float(iSlow0); + float fSlow2 = float(0 < iSlow0); + float fSlow3 = fConst1 * float(fHslider1); + float fSlow4 = fConst3 * float(fHslider2); + float fSlow5 = float(2 < iSlow0); + float fSlow6 = float(4 < iSlow0); + float fSlow7 = float(6 < iSlow0); + float fSlow8 = float(8 < iSlow0); + float fSlow9 = float(10 < iSlow0); + float fSlow10 = float(12 < iSlow0); + float fSlow11 = float(14 < iSlow0); + float fSlow12 = float(16 < iSlow0); + float fSlow13 = float(18 < iSlow0); + float fSlow14 = float(20 < iSlow0); + float fSlow15 = float(22 < iSlow0); + float fSlow16 = float(24 < iSlow0); + float fSlow17 = float(26 < iSlow0); + float fSlow18 = float(28 < iSlow0); + float fSlow19 = float(30 < iSlow0); + float fSlow20 = float(32 < iSlow0); + float fSlow21 = float(34 < iSlow0); + float fSlow22 = float(36 < iSlow0); + float fSlow23 = float(38 < iSlow0); + float fSlow24 = float(40 < iSlow0); + float fSlow25 = float(42 < iSlow0); + float fSlow26 = float(44 < iSlow0); + float fSlow27 = float(46 < iSlow0); + float fSlow28 = float(48 < iSlow0); + float fSlow29 = float(50 < iSlow0); + float fSlow30 = float(52 < iSlow0); + float fSlow31 = float(54 < iSlow0); + float fSlow32 = float(56 < iSlow0); + float fSlow33 = float(58 < iSlow0); + float fSlow34 = float(60 < iSlow0); + float fSlow35 = float(62 < iSlow0); + float fSlow36 = float(1 < iSlow0); + float fSlow37 = float(3 < iSlow0); + float fSlow38 = float(5 < iSlow0); + float fSlow39 = float(7 < iSlow0); + float fSlow40 = float(9 < iSlow0); + float fSlow41 = float(11 < iSlow0); + float fSlow42 = float(13 < iSlow0); + float fSlow43 = float(15 < iSlow0); + float fSlow44 = float(17 < iSlow0); + float fSlow45 = float(19 < iSlow0); + float fSlow46 = float(21 < iSlow0); + float fSlow47 = float(23 < iSlow0); + float fSlow48 = float(25 < iSlow0); + float fSlow49 = float(27 < iSlow0); + float fSlow50 = float(29 < iSlow0); + float fSlow51 = float(31 < iSlow0); + float fSlow52 = float(33 < iSlow0); + float fSlow53 = float(35 < iSlow0); + float fSlow54 = float(37 < iSlow0); + float fSlow55 = float(39 < iSlow0); + float fSlow56 = float(41 < iSlow0); + float fSlow57 = float(43 < iSlow0); + float fSlow58 = float(45 < iSlow0); + float fSlow59 = float(47 < iSlow0); + float fSlow60 = float(49 < iSlow0); + float fSlow61 = float(51 < iSlow0); + float fSlow62 = float(53 < iSlow0); + float fSlow63 = float(55 < iSlow0); + float fSlow64 = float(57 < iSlow0); + float fSlow65 = float(59 < iSlow0); + float fSlow66 = float(61 < iSlow0); + float fSlow67 = float(63 < iSlow0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { iVec0[0] = 1; - fRec1[0] = (fSlow3 + (fConst2 * fRec1[1])); - int iTemp0 = int((fConst0 * fRec1[0])); - iRec0[0] = ((iRec0[1] + 1) % iTemp0); - ftbl0[(iRec0[0] % iTemp0)] = float(input0[i0]); - fRec4[0] = (fSlow4 + (fConst2 * fRec4[1])); - int iTemp1 = int((fConst0 * fRec4[0])); - iRec3[0] = ((iRec3[1] + 1) % iTemp1); - int iTemp2 = (1 - iVec0[1]); + fRec1[0] = fSlow3 + fConst2 * fRec1[1]; + int iTemp0 = int(fConst0 * fRec1[0]); + iRec0[0] = (iRec0[1] + 1) % iTemp0; + ftbl0[iRec0[0] % iTemp0] = float(input0[i0]); + fRec4[0] = fSlow4 + fConst2 * fRec4[1]; + int iTemp1 = int(fConst0 * fRec4[0]); + iRec3[0] = (iRec3[1] + 1) % iTemp1; + int iTemp2 = 1 - iVec0[1]; float fTemp3 = float(iTemp0); - int iTemp4 = (1103515245 * (iRec6[1] + 12345)); - int iTemp5 = (1103515245 * (iTemp4 + 12345)); - int iTemp6 = (1103515245 * (iTemp5 + 12345)); - int iTemp7 = (1103515245 * (iTemp6 + 12345)); - int iTemp8 = (1103515245 * (iTemp7 + 12345)); - int iTemp9 = (1103515245 * (iTemp8 + 12345)); - int iTemp10 = (1103515245 * (iTemp9 + 12345)); - int iTemp11 = (1103515245 * (iTemp10 + 12345)); - int iTemp12 = (1103515245 * (iTemp11 + 12345)); - int iTemp13 = (1103515245 * (iTemp12 + 12345)); - int iTemp14 = (1103515245 * (iTemp13 + 12345)); - int iTemp15 = (1103515245 * (iTemp14 + 12345)); - int iTemp16 = (1103515245 * (iTemp15 + 12345)); - int iTemp17 = (1103515245 * (iTemp16 + 12345)); - int iTemp18 = (1103515245 * (iTemp17 + 12345)); - int iTemp19 = (1103515245 * (iTemp18 + 12345)); - int iTemp20 = (1103515245 * (iTemp19 + 12345)); - int iTemp21 = (1103515245 * (iTemp20 + 12345)); - int iTemp22 = (1103515245 * (iTemp21 + 12345)); - int iTemp23 = (1103515245 * (iTemp22 + 12345)); - int iTemp24 = (1103515245 * (iTemp23 + 12345)); - int iTemp25 = (1103515245 * (iTemp24 + 12345)); - int iTemp26 = (1103515245 * (iTemp25 + 12345)); - int iTemp27 = (1103515245 * (iTemp26 + 12345)); - int iTemp28 = (1103515245 * (iTemp27 + 12345)); - int iTemp29 = (1103515245 * (iTemp28 + 12345)); - int iTemp30 = (1103515245 * (iTemp29 + 12345)); - int iTemp31 = (1103515245 * (iTemp30 + 12345)); - int iTemp32 = (1103515245 * (iTemp31 + 12345)); - int iTemp33 = (1103515245 * (iTemp32 + 12345)); - int iTemp34 = (1103515245 * (iTemp33 + 12345)); - int iTemp35 = (1103515245 * (iTemp34 + 12345)); - int iTemp36 = (1103515245 * (iTemp35 + 12345)); - int iTemp37 = (1103515245 * (iTemp36 + 12345)); - int iTemp38 = (1103515245 * (iTemp37 + 12345)); - int iTemp39 = (1103515245 * (iTemp38 + 12345)); - int iTemp40 = (1103515245 * (iTemp39 + 12345)); - int iTemp41 = (1103515245 * (iTemp40 + 12345)); - int iTemp42 = (1103515245 * (iTemp41 + 12345)); - int iTemp43 = (1103515245 * (iTemp42 + 12345)); - int iTemp44 = (1103515245 * (iTemp43 + 12345)); - int iTemp45 = (1103515245 * (iTemp44 + 12345)); - int iTemp46 = (1103515245 * (iTemp45 + 12345)); - int iTemp47 = (1103515245 * (iTemp46 + 12345)); - int iTemp48 = (1103515245 * (iTemp47 + 12345)); - int iTemp49 = (1103515245 * (iTemp48 + 12345)); - int iTemp50 = (1103515245 * (iTemp49 + 12345)); - int iTemp51 = (1103515245 * (iTemp50 + 12345)); - int iTemp52 = (1103515245 * (iTemp51 + 12345)); - int iTemp53 = (1103515245 * (iTemp52 + 12345)); - int iTemp54 = (1103515245 * (iTemp53 + 12345)); - int iTemp55 = (1103515245 * (iTemp54 + 12345)); - int iTemp56 = (1103515245 * (iTemp55 + 12345)); - int iTemp57 = (1103515245 * (iTemp56 + 12345)); - int iTemp58 = (1103515245 * (iTemp57 + 12345)); - int iTemp59 = (1103515245 * (iTemp58 + 12345)); - int iTemp60 = (1103515245 * (iTemp59 + 12345)); - int iTemp61 = (1103515245 * (iTemp60 + 12345)); - int iTemp62 = (1103515245 * (iTemp61 + 12345)); - int iTemp63 = (1103515245 * (iTemp62 + 12345)); - int iTemp64 = (1103515245 * (iTemp63 + 12345)); - int iTemp65 = (1103515245 * (iTemp64 + 12345)); - int iTemp66 = (1103515245 * (iTemp65 + 12345)); - int iTemp67 = (1103515245 * (iTemp66 + 12345)); - iRec6[0] = (1103515245 * (iTemp67 + 12345)); + int iTemp4 = 1103515245 * (iRec6[1] + 12345); + int iTemp5 = 1103515245 * (iTemp4 + 12345); + int iTemp6 = 1103515245 * (iTemp5 + 12345); + int iTemp7 = 1103515245 * (iTemp6 + 12345); + int iTemp8 = 1103515245 * (iTemp7 + 12345); + int iTemp9 = 1103515245 * (iTemp8 + 12345); + int iTemp10 = 1103515245 * (iTemp9 + 12345); + int iTemp11 = 1103515245 * (iTemp10 + 12345); + int iTemp12 = 1103515245 * (iTemp11 + 12345); + int iTemp13 = 1103515245 * (iTemp12 + 12345); + int iTemp14 = 1103515245 * (iTemp13 + 12345); + int iTemp15 = 1103515245 * (iTemp14 + 12345); + int iTemp16 = 1103515245 * (iTemp15 + 12345); + int iTemp17 = 1103515245 * (iTemp16 + 12345); + int iTemp18 = 1103515245 * (iTemp17 + 12345); + int iTemp19 = 1103515245 * (iTemp18 + 12345); + int iTemp20 = 1103515245 * (iTemp19 + 12345); + int iTemp21 = 1103515245 * (iTemp20 + 12345); + int iTemp22 = 1103515245 * (iTemp21 + 12345); + int iTemp23 = 1103515245 * (iTemp22 + 12345); + int iTemp24 = 1103515245 * (iTemp23 + 12345); + int iTemp25 = 1103515245 * (iTemp24 + 12345); + int iTemp26 = 1103515245 * (iTemp25 + 12345); + int iTemp27 = 1103515245 * (iTemp26 + 12345); + int iTemp28 = 1103515245 * (iTemp27 + 12345); + int iTemp29 = 1103515245 * (iTemp28 + 12345); + int iTemp30 = 1103515245 * (iTemp29 + 12345); + int iTemp31 = 1103515245 * (iTemp30 + 12345); + int iTemp32 = 1103515245 * (iTemp31 + 12345); + int iTemp33 = 1103515245 * (iTemp32 + 12345); + int iTemp34 = 1103515245 * (iTemp33 + 12345); + int iTemp35 = 1103515245 * (iTemp34 + 12345); + int iTemp36 = 1103515245 * (iTemp35 + 12345); + int iTemp37 = 1103515245 * (iTemp36 + 12345); + int iTemp38 = 1103515245 * (iTemp37 + 12345); + int iTemp39 = 1103515245 * (iTemp38 + 12345); + int iTemp40 = 1103515245 * (iTemp39 + 12345); + int iTemp41 = 1103515245 * (iTemp40 + 12345); + int iTemp42 = 1103515245 * (iTemp41 + 12345); + int iTemp43 = 1103515245 * (iTemp42 + 12345); + int iTemp44 = 1103515245 * (iTemp43 + 12345); + int iTemp45 = 1103515245 * (iTemp44 + 12345); + int iTemp46 = 1103515245 * (iTemp45 + 12345); + int iTemp47 = 1103515245 * (iTemp46 + 12345); + int iTemp48 = 1103515245 * (iTemp47 + 12345); + int iTemp49 = 1103515245 * (iTemp48 + 12345); + int iTemp50 = 1103515245 * (iTemp49 + 12345); + int iTemp51 = 1103515245 * (iTemp50 + 12345); + int iTemp52 = 1103515245 * (iTemp51 + 12345); + int iTemp53 = 1103515245 * (iTemp52 + 12345); + int iTemp54 = 1103515245 * (iTemp53 + 12345); + int iTemp55 = 1103515245 * (iTemp54 + 12345); + int iTemp56 = 1103515245 * (iTemp55 + 12345); + int iTemp57 = 1103515245 * (iTemp56 + 12345); + int iTemp58 = 1103515245 * (iTemp57 + 12345); + int iTemp59 = 1103515245 * (iTemp58 + 12345); + int iTemp60 = 1103515245 * (iTemp59 + 12345); + int iTemp61 = 1103515245 * (iTemp60 + 12345); + int iTemp62 = 1103515245 * (iTemp61 + 12345); + int iTemp63 = 1103515245 * (iTemp62 + 12345); + int iTemp64 = 1103515245 * (iTemp63 + 12345); + int iTemp65 = 1103515245 * (iTemp64 + 12345); + int iTemp66 = 1103515245 * (iTemp65 + 12345); + int iTemp67 = 1103515245 * (iTemp66 + 12345); + iRec6[0] = 1103515245 * (iTemp67 + 12345); int iRec7 = iTemp67; int iRec8 = iTemp66; int iRec9 = iTemp65; @@ -1472,393 +1556,393 @@ class fx_granulator : public fx_granulator_dsp { int iRec67 = iTemp7; int iRec68 = iTemp6; int iRec69 = iTemp5; - int iTemp68 = int((0.5f * (fTemp3 * (1.0f - float(iRec6[0]))))); - iRec5[0] = ((iVec0[1] * iRec5[1]) + (iTemp2 * iTemp68)); - int iTemp69 = ((iRec3[0] + iRec5[0]) % iTemp1); - float fTemp70 = float((iTemp1 + -1)); - float fTemp71 = (float(iTemp69) / fTemp70); + int iTemp68 = int(0.5f * fTemp3 * (1.0f - float(iRec6[0]))); + iRec5[0] = iVec0[1] * iRec5[1] + iTemp2 * iTemp68; + int iTemp69 = (iRec3[0] + iRec5[0]) % iTemp1; + float fTemp70 = float(iTemp1 + -1); + float fTemp71 = float(iTemp69) / fTemp70; int iTemp72 = int(fTemp71); - iRec2[0] = ((iRec2[1] * (1 - iTemp72)) + (iTemp68 * iTemp72)); - int iTemp73 = int((0.5f * (fTemp3 * (1.0f - float(iRec8))))); - iRec72[0] = ((iVec0[1] * iRec72[1]) + (iTemp2 * iTemp73)); - int iTemp74 = ((iRec3[0] + iRec72[0]) % iTemp1); - float fTemp75 = (float(iTemp74) / fTemp70); + iRec2[0] = iRec2[1] * (1 - iTemp72) + iTemp68 * iTemp72; + int iTemp73 = int(0.5f * fTemp3 * (1.0f - float(iRec8))); + iRec72[0] = iVec0[1] * iRec72[1] + iTemp2 * iTemp73; + int iTemp74 = (iRec3[0] + iRec72[0]) % iTemp1; + float fTemp75 = float(iTemp74) / fTemp70; int iTemp76 = int(fTemp75); - iRec71[0] = ((iRec71[1] * (1 - iTemp76)) + (iTemp73 * iTemp76)); - int iTemp77 = int((0.5f * (fTemp3 * (1.0f - float(iRec10))))); - iRec74[0] = ((iVec0[1] * iRec74[1]) + (iTemp2 * iTemp77)); - int iTemp78 = ((iRec3[0] + iRec74[0]) % iTemp1); - float fTemp79 = (float(iTemp78) / fTemp70); + iRec71[0] = iRec71[1] * (1 - iTemp76) + iTemp73 * iTemp76; + int iTemp77 = int(0.5f * fTemp3 * (1.0f - float(iRec10))); + iRec74[0] = iVec0[1] * iRec74[1] + iTemp2 * iTemp77; + int iTemp78 = (iRec3[0] + iRec74[0]) % iTemp1; + float fTemp79 = float(iTemp78) / fTemp70; int iTemp80 = int(fTemp79); - iRec73[0] = ((iRec73[1] * (1 - iTemp80)) + (iTemp77 * iTemp80)); - int iTemp81 = int((0.5f * (fTemp3 * (1.0f - float(iRec12))))); - iRec76[0] = ((iVec0[1] * iRec76[1]) + (iTemp2 * iTemp81)); - int iTemp82 = ((iRec3[0] + iRec76[0]) % iTemp1); - float fTemp83 = (float(iTemp82) / fTemp70); + iRec73[0] = iRec73[1] * (1 - iTemp80) + iTemp77 * iTemp80; + int iTemp81 = int(0.5f * fTemp3 * (1.0f - float(iRec12))); + iRec76[0] = iVec0[1] * iRec76[1] + iTemp2 * iTemp81; + int iTemp82 = (iRec3[0] + iRec76[0]) % iTemp1; + float fTemp83 = float(iTemp82) / fTemp70; int iTemp84 = int(fTemp83); - iRec75[0] = ((iRec75[1] * (1 - iTemp84)) + (iTemp81 * iTemp84)); - int iTemp85 = int((0.5f * (fTemp3 * (1.0f - float(iRec14))))); - iRec78[0] = ((iVec0[1] * iRec78[1]) + (iTemp2 * iTemp85)); - int iTemp86 = ((iRec3[0] + iRec78[0]) % iTemp1); - float fTemp87 = (float(iTemp86) / fTemp70); + iRec75[0] = iRec75[1] * (1 - iTemp84) + iTemp81 * iTemp84; + int iTemp85 = int(0.5f * fTemp3 * (1.0f - float(iRec14))); + iRec78[0] = iVec0[1] * iRec78[1] + iTemp2 * iTemp85; + int iTemp86 = (iRec3[0] + iRec78[0]) % iTemp1; + float fTemp87 = float(iTemp86) / fTemp70; int iTemp88 = int(fTemp87); - iRec77[0] = ((iRec77[1] * (1 - iTemp88)) + (iTemp85 * iTemp88)); - int iTemp89 = int((0.5f * (fTemp3 * (1.0f - float(iRec16))))); - iRec80[0] = ((iVec0[1] * iRec80[1]) + (iTemp2 * iTemp89)); - int iTemp90 = ((iRec3[0] + iRec80[0]) % iTemp1); - float fTemp91 = (float(iTemp90) / fTemp70); + iRec77[0] = iRec77[1] * (1 - iTemp88) + iTemp85 * iTemp88; + int iTemp89 = int(0.5f * fTemp3 * (1.0f - float(iRec16))); + iRec80[0] = iVec0[1] * iRec80[1] + iTemp2 * iTemp89; + int iTemp90 = (iRec3[0] + iRec80[0]) % iTemp1; + float fTemp91 = float(iTemp90) / fTemp70; int iTemp92 = int(fTemp91); - iRec79[0] = ((iRec79[1] * (1 - iTemp92)) + (iTemp89 * iTemp92)); - int iTemp93 = int((0.5f * (fTemp3 * (1.0f - float(iRec18))))); - iRec82[0] = ((iVec0[1] * iRec82[1]) + (iTemp2 * iTemp93)); - int iTemp94 = ((iRec3[0] + iRec82[0]) % iTemp1); - float fTemp95 = (float(iTemp94) / fTemp70); + iRec79[0] = iRec79[1] * (1 - iTemp92) + iTemp89 * iTemp92; + int iTemp93 = int(0.5f * fTemp3 * (1.0f - float(iRec18))); + iRec82[0] = iVec0[1] * iRec82[1] + iTemp2 * iTemp93; + int iTemp94 = (iRec3[0] + iRec82[0]) % iTemp1; + float fTemp95 = float(iTemp94) / fTemp70; int iTemp96 = int(fTemp95); - iRec81[0] = ((iRec81[1] * (1 - iTemp96)) + (iTemp93 * iTemp96)); - int iTemp97 = int((0.5f * (fTemp3 * (1.0f - float(iRec20))))); - iRec84[0] = ((iVec0[1] * iRec84[1]) + (iTemp2 * iTemp97)); - int iTemp98 = ((iRec3[0] + iRec84[0]) % iTemp1); - float fTemp99 = (float(iTemp98) / fTemp70); + iRec81[0] = iRec81[1] * (1 - iTemp96) + iTemp93 * iTemp96; + int iTemp97 = int(0.5f * fTemp3 * (1.0f - float(iRec20))); + iRec84[0] = iVec0[1] * iRec84[1] + iTemp2 * iTemp97; + int iTemp98 = (iRec3[0] + iRec84[0]) % iTemp1; + float fTemp99 = float(iTemp98) / fTemp70; int iTemp100 = int(fTemp99); - iRec83[0] = ((iRec83[1] * (1 - iTemp100)) + (iTemp97 * iTemp100)); - int iTemp101 = int((0.5f * (fTemp3 * (1.0f - float(iRec22))))); - iRec86[0] = ((iVec0[1] * iRec86[1]) + (iTemp2 * iTemp101)); - int iTemp102 = ((iRec3[0] + iRec86[0]) % iTemp1); - float fTemp103 = (float(iTemp102) / fTemp70); + iRec83[0] = iRec83[1] * (1 - iTemp100) + iTemp97 * iTemp100; + int iTemp101 = int(0.5f * fTemp3 * (1.0f - float(iRec22))); + iRec86[0] = iVec0[1] * iRec86[1] + iTemp2 * iTemp101; + int iTemp102 = (iRec3[0] + iRec86[0]) % iTemp1; + float fTemp103 = float(iTemp102) / fTemp70; int iTemp104 = int(fTemp103); - iRec85[0] = ((iRec85[1] * (1 - iTemp104)) + (iTemp101 * iTemp104)); - int iTemp105 = int((0.5f * (fTemp3 * (1.0f - float(iRec24))))); - iRec88[0] = ((iVec0[1] * iRec88[1]) + (iTemp2 * iTemp105)); - int iTemp106 = ((iRec3[0] + iRec88[0]) % iTemp1); - float fTemp107 = (float(iTemp106) / fTemp70); + iRec85[0] = iRec85[1] * (1 - iTemp104) + iTemp101 * iTemp104; + int iTemp105 = int(0.5f * fTemp3 * (1.0f - float(iRec24))); + iRec88[0] = iVec0[1] * iRec88[1] + iTemp2 * iTemp105; + int iTemp106 = (iRec3[0] + iRec88[0]) % iTemp1; + float fTemp107 = float(iTemp106) / fTemp70; int iTemp108 = int(fTemp107); - iRec87[0] = ((iRec87[1] * (1 - iTemp108)) + (iTemp105 * iTemp108)); - int iTemp109 = int((0.5f * (fTemp3 * (1.0f - float(iRec26))))); - iRec90[0] = ((iVec0[1] * iRec90[1]) + (iTemp2 * iTemp109)); - int iTemp110 = ((iRec3[0] + iRec90[0]) % iTemp1); - float fTemp111 = (float(iTemp110) / fTemp70); + iRec87[0] = iRec87[1] * (1 - iTemp108) + iTemp105 * iTemp108; + int iTemp109 = int(0.5f * fTemp3 * (1.0f - float(iRec26))); + iRec90[0] = iVec0[1] * iRec90[1] + iTemp2 * iTemp109; + int iTemp110 = (iRec3[0] + iRec90[0]) % iTemp1; + float fTemp111 = float(iTemp110) / fTemp70; int iTemp112 = int(fTemp111); - iRec89[0] = ((iRec89[1] * (1 - iTemp112)) + (iTemp109 * iTemp112)); - int iTemp113 = int((0.5f * (fTemp3 * (1.0f - float(iRec28))))); - iRec92[0] = ((iVec0[1] * iRec92[1]) + (iTemp2 * iTemp113)); - int iTemp114 = ((iRec3[0] + iRec92[0]) % iTemp1); - float fTemp115 = (float(iTemp114) / fTemp70); + iRec89[0] = iRec89[1] * (1 - iTemp112) + iTemp109 * iTemp112; + int iTemp113 = int(0.5f * fTemp3 * (1.0f - float(iRec28))); + iRec92[0] = iVec0[1] * iRec92[1] + iTemp2 * iTemp113; + int iTemp114 = (iRec3[0] + iRec92[0]) % iTemp1; + float fTemp115 = float(iTemp114) / fTemp70; int iTemp116 = int(fTemp115); - iRec91[0] = ((iRec91[1] * (1 - iTemp116)) + (iTemp113 * iTemp116)); - int iTemp117 = int((0.5f * (fTemp3 * (1.0f - float(iRec30))))); - iRec94[0] = ((iVec0[1] * iRec94[1]) + (iTemp2 * iTemp117)); - int iTemp118 = ((iRec3[0] + iRec94[0]) % iTemp1); - float fTemp119 = (float(iTemp118) / fTemp70); + iRec91[0] = iRec91[1] * (1 - iTemp116) + iTemp113 * iTemp116; + int iTemp117 = int(0.5f * fTemp3 * (1.0f - float(iRec30))); + iRec94[0] = iVec0[1] * iRec94[1] + iTemp2 * iTemp117; + int iTemp118 = (iRec3[0] + iRec94[0]) % iTemp1; + float fTemp119 = float(iTemp118) / fTemp70; int iTemp120 = int(fTemp119); - iRec93[0] = ((iRec93[1] * (1 - iTemp120)) + (iTemp117 * iTemp120)); - int iTemp121 = int((0.5f * (fTemp3 * (1.0f - float(iRec32))))); - iRec96[0] = ((iVec0[1] * iRec96[1]) + (iTemp2 * iTemp121)); - int iTemp122 = ((iRec3[0] + iRec96[0]) % iTemp1); - float fTemp123 = (float(iTemp122) / fTemp70); + iRec93[0] = iRec93[1] * (1 - iTemp120) + iTemp117 * iTemp120; + int iTemp121 = int(0.5f * fTemp3 * (1.0f - float(iRec32))); + iRec96[0] = iVec0[1] * iRec96[1] + iTemp2 * iTemp121; + int iTemp122 = (iRec3[0] + iRec96[0]) % iTemp1; + float fTemp123 = float(iTemp122) / fTemp70; int iTemp124 = int(fTemp123); - iRec95[0] = ((iRec95[1] * (1 - iTemp124)) + (iTemp121 * iTemp124)); - int iTemp125 = int((0.5f * (fTemp3 * (1.0f - float(iRec34))))); - iRec98[0] = ((iVec0[1] * iRec98[1]) + (iTemp2 * iTemp125)); - int iTemp126 = ((iRec3[0] + iRec98[0]) % iTemp1); - float fTemp127 = (float(iTemp126) / fTemp70); + iRec95[0] = iRec95[1] * (1 - iTemp124) + iTemp121 * iTemp124; + int iTemp125 = int(0.5f * fTemp3 * (1.0f - float(iRec34))); + iRec98[0] = iVec0[1] * iRec98[1] + iTemp2 * iTemp125; + int iTemp126 = (iRec3[0] + iRec98[0]) % iTemp1; + float fTemp127 = float(iTemp126) / fTemp70; int iTemp128 = int(fTemp127); - iRec97[0] = ((iRec97[1] * (1 - iTemp128)) + (iTemp125 * iTemp128)); - int iTemp129 = int((0.5f * (fTemp3 * (1.0f - float(iRec36))))); - iRec100[0] = ((iVec0[1] * iRec100[1]) + (iTemp2 * iTemp129)); - int iTemp130 = ((iRec3[0] + iRec100[0]) % iTemp1); - float fTemp131 = (float(iTemp130) / fTemp70); + iRec97[0] = iRec97[1] * (1 - iTemp128) + iTemp125 * iTemp128; + int iTemp129 = int(0.5f * fTemp3 * (1.0f - float(iRec36))); + iRec100[0] = iVec0[1] * iRec100[1] + iTemp2 * iTemp129; + int iTemp130 = (iRec3[0] + iRec100[0]) % iTemp1; + float fTemp131 = float(iTemp130) / fTemp70; int iTemp132 = int(fTemp131); - iRec99[0] = ((iRec99[1] * (1 - iTemp132)) + (iTemp129 * iTemp132)); - int iTemp133 = int((0.5f * (fTemp3 * (1.0f - float(iRec38))))); - iRec102[0] = ((iVec0[1] * iRec102[1]) + (iTemp2 * iTemp133)); - int iTemp134 = ((iRec3[0] + iRec102[0]) % iTemp1); - float fTemp135 = (float(iTemp134) / fTemp70); + iRec99[0] = iRec99[1] * (1 - iTemp132) + iTemp129 * iTemp132; + int iTemp133 = int(0.5f * fTemp3 * (1.0f - float(iRec38))); + iRec102[0] = iVec0[1] * iRec102[1] + iTemp2 * iTemp133; + int iTemp134 = (iRec3[0] + iRec102[0]) % iTemp1; + float fTemp135 = float(iTemp134) / fTemp70; int iTemp136 = int(fTemp135); - iRec101[0] = ((iRec101[1] * (1 - iTemp136)) + (iTemp133 * iTemp136)); - int iTemp137 = int((0.5f * (fTemp3 * (1.0f - float(iRec40))))); - iRec104[0] = ((iVec0[1] * iRec104[1]) + (iTemp2 * iTemp137)); - int iTemp138 = ((iRec3[0] + iRec104[0]) % iTemp1); - float fTemp139 = (float(iTemp138) / fTemp70); + iRec101[0] = iRec101[1] * (1 - iTemp136) + iTemp133 * iTemp136; + int iTemp137 = int(0.5f * fTemp3 * (1.0f - float(iRec40))); + iRec104[0] = iVec0[1] * iRec104[1] + iTemp2 * iTemp137; + int iTemp138 = (iRec3[0] + iRec104[0]) % iTemp1; + float fTemp139 = float(iTemp138) / fTemp70; int iTemp140 = int(fTemp139); - iRec103[0] = ((iRec103[1] * (1 - iTemp140)) + (iTemp137 * iTemp140)); - int iTemp141 = int((0.5f * (fTemp3 * (1.0f - float(iRec42))))); - iRec106[0] = ((iVec0[1] * iRec106[1]) + (iTemp2 * iTemp141)); - int iTemp142 = ((iRec3[0] + iRec106[0]) % iTemp1); - float fTemp143 = (float(iTemp142) / fTemp70); + iRec103[0] = iRec103[1] * (1 - iTemp140) + iTemp137 * iTemp140; + int iTemp141 = int(0.5f * fTemp3 * (1.0f - float(iRec42))); + iRec106[0] = iVec0[1] * iRec106[1] + iTemp2 * iTemp141; + int iTemp142 = (iRec3[0] + iRec106[0]) % iTemp1; + float fTemp143 = float(iTemp142) / fTemp70; int iTemp144 = int(fTemp143); - iRec105[0] = ((iRec105[1] * (1 - iTemp144)) + (iTemp141 * iTemp144)); - int iTemp145 = int((0.5f * (fTemp3 * (1.0f - float(iRec44))))); - iRec108[0] = ((iVec0[1] * iRec108[1]) + (iTemp2 * iTemp145)); - int iTemp146 = ((iRec3[0] + iRec108[0]) % iTemp1); - float fTemp147 = (float(iTemp146) / fTemp70); + iRec105[0] = iRec105[1] * (1 - iTemp144) + iTemp141 * iTemp144; + int iTemp145 = int(0.5f * fTemp3 * (1.0f - float(iRec44))); + iRec108[0] = iVec0[1] * iRec108[1] + iTemp2 * iTemp145; + int iTemp146 = (iRec3[0] + iRec108[0]) % iTemp1; + float fTemp147 = float(iTemp146) / fTemp70; int iTemp148 = int(fTemp147); - iRec107[0] = ((iRec107[1] * (1 - iTemp148)) + (iTemp145 * iTemp148)); - int iTemp149 = int((0.5f * (fTemp3 * (1.0f - float(iRec46))))); - iRec110[0] = ((iVec0[1] * iRec110[1]) + (iTemp2 * iTemp149)); - int iTemp150 = ((iRec3[0] + iRec110[0]) % iTemp1); - float fTemp151 = (float(iTemp150) / fTemp70); + iRec107[0] = iRec107[1] * (1 - iTemp148) + iTemp145 * iTemp148; + int iTemp149 = int(0.5f * fTemp3 * (1.0f - float(iRec46))); + iRec110[0] = iVec0[1] * iRec110[1] + iTemp2 * iTemp149; + int iTemp150 = (iRec3[0] + iRec110[0]) % iTemp1; + float fTemp151 = float(iTemp150) / fTemp70; int iTemp152 = int(fTemp151); - iRec109[0] = ((iRec109[1] * (1 - iTemp152)) + (iTemp149 * iTemp152)); - int iTemp153 = int((0.5f * (fTemp3 * (1.0f - float(iRec48))))); - iRec112[0] = ((iVec0[1] * iRec112[1]) + (iTemp2 * iTemp153)); - int iTemp154 = ((iRec3[0] + iRec112[0]) % iTemp1); - float fTemp155 = (float(iTemp154) / fTemp70); + iRec109[0] = iRec109[1] * (1 - iTemp152) + iTemp149 * iTemp152; + int iTemp153 = int(0.5f * fTemp3 * (1.0f - float(iRec48))); + iRec112[0] = iVec0[1] * iRec112[1] + iTemp2 * iTemp153; + int iTemp154 = (iRec3[0] + iRec112[0]) % iTemp1; + float fTemp155 = float(iTemp154) / fTemp70; int iTemp156 = int(fTemp155); - iRec111[0] = ((iRec111[1] * (1 - iTemp156)) + (iTemp153 * iTemp156)); - int iTemp157 = int((0.5f * (fTemp3 * (1.0f - float(iRec50))))); - iRec114[0] = ((iVec0[1] * iRec114[1]) + (iTemp2 * iTemp157)); - int iTemp158 = ((iRec3[0] + iRec114[0]) % iTemp1); - float fTemp159 = (float(iTemp158) / fTemp70); + iRec111[0] = iRec111[1] * (1 - iTemp156) + iTemp153 * iTemp156; + int iTemp157 = int(0.5f * fTemp3 * (1.0f - float(iRec50))); + iRec114[0] = iVec0[1] * iRec114[1] + iTemp2 * iTemp157; + int iTemp158 = (iRec3[0] + iRec114[0]) % iTemp1; + float fTemp159 = float(iTemp158) / fTemp70; int iTemp160 = int(fTemp159); - iRec113[0] = ((iRec113[1] * (1 - iTemp160)) + (iTemp157 * iTemp160)); - int iTemp161 = int((0.5f * (fTemp3 * (1.0f - float(iRec52))))); - iRec116[0] = ((iVec0[1] * iRec116[1]) + (iTemp2 * iTemp161)); - int iTemp162 = ((iRec3[0] + iRec116[0]) % iTemp1); - float fTemp163 = (float(iTemp162) / fTemp70); + iRec113[0] = iRec113[1] * (1 - iTemp160) + iTemp157 * iTemp160; + int iTemp161 = int(0.5f * fTemp3 * (1.0f - float(iRec52))); + iRec116[0] = iVec0[1] * iRec116[1] + iTemp2 * iTemp161; + int iTemp162 = (iRec3[0] + iRec116[0]) % iTemp1; + float fTemp163 = float(iTemp162) / fTemp70; int iTemp164 = int(fTemp163); - iRec115[0] = ((iRec115[1] * (1 - iTemp164)) + (iTemp161 * iTemp164)); - int iTemp165 = int((0.5f * (fTemp3 * (1.0f - float(iRec54))))); - iRec118[0] = ((iVec0[1] * iRec118[1]) + (iTemp2 * iTemp165)); - int iTemp166 = ((iRec3[0] + iRec118[0]) % iTemp1); - float fTemp167 = (float(iTemp166) / fTemp70); + iRec115[0] = iRec115[1] * (1 - iTemp164) + iTemp161 * iTemp164; + int iTemp165 = int(0.5f * fTemp3 * (1.0f - float(iRec54))); + iRec118[0] = iVec0[1] * iRec118[1] + iTemp2 * iTemp165; + int iTemp166 = (iRec3[0] + iRec118[0]) % iTemp1; + float fTemp167 = float(iTemp166) / fTemp70; int iTemp168 = int(fTemp167); - iRec117[0] = ((iRec117[1] * (1 - iTemp168)) + (iTemp165 * iTemp168)); - int iTemp169 = int((0.5f * (fTemp3 * (1.0f - float(iRec56))))); - iRec120[0] = ((iVec0[1] * iRec120[1]) + (iTemp2 * iTemp169)); - int iTemp170 = ((iRec3[0] + iRec120[0]) % iTemp1); - float fTemp171 = (float(iTemp170) / fTemp70); + iRec117[0] = iRec117[1] * (1 - iTemp168) + iTemp165 * iTemp168; + int iTemp169 = int(0.5f * fTemp3 * (1.0f - float(iRec56))); + iRec120[0] = iVec0[1] * iRec120[1] + iTemp2 * iTemp169; + int iTemp170 = (iRec3[0] + iRec120[0]) % iTemp1; + float fTemp171 = float(iTemp170) / fTemp70; int iTemp172 = int(fTemp171); - iRec119[0] = ((iRec119[1] * (1 - iTemp172)) + (iTemp169 * iTemp172)); - int iTemp173 = int((0.5f * (fTemp3 * (1.0f - float(iRec58))))); - iRec122[0] = ((iVec0[1] * iRec122[1]) + (iTemp2 * iTemp173)); - int iTemp174 = ((iRec3[0] + iRec122[0]) % iTemp1); - float fTemp175 = (float(iTemp174) / fTemp70); + iRec119[0] = iRec119[1] * (1 - iTemp172) + iTemp169 * iTemp172; + int iTemp173 = int(0.5f * fTemp3 * (1.0f - float(iRec58))); + iRec122[0] = iVec0[1] * iRec122[1] + iTemp2 * iTemp173; + int iTemp174 = (iRec3[0] + iRec122[0]) % iTemp1; + float fTemp175 = float(iTemp174) / fTemp70; int iTemp176 = int(fTemp175); - iRec121[0] = ((iRec121[1] * (1 - iTemp176)) + (iTemp173 * iTemp176)); - int iTemp177 = int((0.5f * (fTemp3 * (1.0f - float(iRec60))))); - iRec124[0] = ((iVec0[1] * iRec124[1]) + (iTemp2 * iTemp177)); - int iTemp178 = ((iRec3[0] + iRec124[0]) % iTemp1); - float fTemp179 = (float(iTemp178) / fTemp70); + iRec121[0] = iRec121[1] * (1 - iTemp176) + iTemp173 * iTemp176; + int iTemp177 = int(0.5f * fTemp3 * (1.0f - float(iRec60))); + iRec124[0] = iVec0[1] * iRec124[1] + iTemp2 * iTemp177; + int iTemp178 = (iRec3[0] + iRec124[0]) % iTemp1; + float fTemp179 = float(iTemp178) / fTemp70; int iTemp180 = int(fTemp179); - iRec123[0] = ((iRec123[1] * (1 - iTemp180)) + (iTemp177 * iTemp180)); - int iTemp181 = int((0.5f * (fTemp3 * (1.0f - float(iRec62))))); - iRec126[0] = ((iVec0[1] * iRec126[1]) + (iTemp2 * iTemp181)); - int iTemp182 = ((iRec3[0] + iRec126[0]) % iTemp1); - float fTemp183 = (float(iTemp182) / fTemp70); + iRec123[0] = iRec123[1] * (1 - iTemp180) + iTemp177 * iTemp180; + int iTemp181 = int(0.5f * fTemp3 * (1.0f - float(iRec62))); + iRec126[0] = iVec0[1] * iRec126[1] + iTemp2 * iTemp181; + int iTemp182 = (iRec3[0] + iRec126[0]) % iTemp1; + float fTemp183 = float(iTemp182) / fTemp70; int iTemp184 = int(fTemp183); - iRec125[0] = ((iRec125[1] * (1 - iTemp184)) + (iTemp181 * iTemp184)); - int iTemp185 = int((0.5f * (fTemp3 * (1.0f - float(iRec64))))); - iRec128[0] = ((iVec0[1] * iRec128[1]) + (iTemp2 * iTemp185)); - int iTemp186 = ((iRec3[0] + iRec128[0]) % iTemp1); - float fTemp187 = (float(iTemp186) / fTemp70); + iRec125[0] = iRec125[1] * (1 - iTemp184) + iTemp181 * iTemp184; + int iTemp185 = int(0.5f * fTemp3 * (1.0f - float(iRec64))); + iRec128[0] = iVec0[1] * iRec128[1] + iTemp2 * iTemp185; + int iTemp186 = (iRec3[0] + iRec128[0]) % iTemp1; + float fTemp187 = float(iTemp186) / fTemp70; int iTemp188 = int(fTemp187); - iRec127[0] = ((iRec127[1] * (1 - iTemp188)) + (iTemp185 * iTemp188)); - int iTemp189 = int((0.5f * (fTemp3 * (1.0f - float(iRec66))))); - iRec130[0] = ((iVec0[1] * iRec130[1]) + (iTemp2 * iTemp189)); - int iTemp190 = ((iRec3[0] + iRec130[0]) % iTemp1); - float fTemp191 = (float(iTemp190) / fTemp70); + iRec127[0] = iRec127[1] * (1 - iTemp188) + iTemp185 * iTemp188; + int iTemp189 = int(0.5f * fTemp3 * (1.0f - float(iRec66))); + iRec130[0] = iVec0[1] * iRec130[1] + iTemp2 * iTemp189; + int iTemp190 = (iRec3[0] + iRec130[0]) % iTemp1; + float fTemp191 = float(iTemp190) / fTemp70; int iTemp192 = int(fTemp191); - iRec129[0] = ((iRec129[1] * (1 - iTemp192)) + (iTemp189 * iTemp192)); - int iTemp193 = int((0.5f * (fTemp3 * (1.0f - float(iRec68))))); - iRec132[0] = ((iVec0[1] * iRec132[1]) + (iTemp2 * iTemp193)); - int iTemp194 = ((iRec3[0] + iRec132[0]) % iTemp1); - float fTemp195 = (float(iTemp194) / fTemp70); + iRec129[0] = iRec129[1] * (1 - iTemp192) + iTemp189 * iTemp192; + int iTemp193 = int(0.5f * fTemp3 * (1.0f - float(iRec68))); + iRec132[0] = iVec0[1] * iRec132[1] + iTemp2 * iTemp193; + int iTemp194 = (iRec3[0] + iRec132[0]) % iTemp1; + float fTemp195 = float(iTemp194) / fTemp70; int iTemp196 = int(fTemp195); - iRec131[0] = ((iRec131[1] * (1 - iTemp196)) + (iTemp193 * iTemp196)); - output0[i0] = FAUSTFLOAT((fSlow1 * ((((((((((((((((((((((((((((((((fSlow2 * (ftbl0[((iRec2[0] + iTemp69) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp71))])) + (fSlow5 * (ftbl0[((iRec71[0] + iTemp74) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp75))]))) + (fSlow6 * (ftbl0[((iRec73[0] + iTemp78) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp79))]))) + (fSlow7 * (ftbl0[((iRec75[0] + iTemp82) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp83))]))) + (fSlow8 * (ftbl0[((iRec77[0] + iTemp86) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp87))]))) + (fSlow9 * (ftbl0[((iRec79[0] + iTemp90) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp91))]))) + (fSlow10 * (ftbl0[((iRec81[0] + iTemp94) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp95))]))) + (fSlow11 * (ftbl0[((iRec83[0] + iTemp98) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp99))]))) + (fSlow12 * (ftbl0[((iRec85[0] + iTemp102) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp103))]))) + (fSlow13 * (ftbl0[((iRec87[0] + iTemp106) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp107))]))) + (fSlow14 * (ftbl0[((iRec89[0] + iTemp110) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp111))]))) + (fSlow15 * (ftbl0[((iRec91[0] + iTemp114) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp115))]))) + (fSlow16 * (ftbl0[((iRec93[0] + iTemp118) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp119))]))) + (fSlow17 * (ftbl0[((iRec95[0] + iTemp122) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp123))]))) + (fSlow18 * (ftbl0[((iRec97[0] + iTemp126) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp127))]))) + (fSlow19 * (ftbl0[((iRec99[0] + iTemp130) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp131))]))) + (fSlow20 * (ftbl0[((iRec101[0] + iTemp134) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp135))]))) + (fSlow21 * (ftbl0[((iRec103[0] + iTemp138) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp139))]))) + (fSlow22 * (ftbl0[((iRec105[0] + iTemp142) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp143))]))) + (fSlow23 * (ftbl0[((iRec107[0] + iTemp146) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp147))]))) + (fSlow24 * (ftbl0[((iRec109[0] + iTemp150) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp151))]))) + (fSlow25 * (ftbl0[((iRec111[0] + iTemp154) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp155))]))) + (fSlow26 * (ftbl0[((iRec113[0] + iTemp158) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp159))]))) + (fSlow27 * (ftbl0[((iRec115[0] + iTemp162) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp163))]))) + (fSlow28 * (ftbl0[((iRec117[0] + iTemp166) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp167))]))) + (fSlow29 * (ftbl0[((iRec119[0] + iTemp170) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp171))]))) + (fSlow30 * (ftbl0[((iRec121[0] + iTemp174) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp175))]))) + (fSlow31 * (ftbl0[((iRec123[0] + iTemp178) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp179))]))) + (fSlow32 * (ftbl0[((iRec125[0] + iTemp182) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp183))]))) + (fSlow33 * (ftbl0[((iRec127[0] + iTemp186) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp187))]))) + (fSlow34 * (ftbl0[((iRec129[0] + iTemp190) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp191))]))) + (fSlow35 * (ftbl0[((iRec131[0] + iTemp194) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp195))]))))); - int iTemp197 = int((0.5f * (fTemp3 * (1.0f - float(iRec7))))); - iRec134[0] = ((iVec0[1] * iRec134[1]) + (iTemp2 * iTemp197)); - int iTemp198 = ((iRec3[0] + iRec134[0]) % iTemp1); - float fTemp199 = (float(iTemp198) / fTemp70); + iRec131[0] = iRec131[1] * (1 - iTemp196) + iTemp193 * iTemp196; + output0[i0] = FAUSTFLOAT(fSlow1 * (fSlow2 * ftbl0[(iRec2[0] + iTemp69) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp71)] + fSlow5 * ftbl0[(iRec71[0] + iTemp74) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp75)] + fSlow6 * ftbl0[(iRec73[0] + iTemp78) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp79)] + fSlow7 * ftbl0[(iRec75[0] + iTemp82) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp83)] + fSlow8 * ftbl0[(iRec77[0] + iTemp86) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp87)] + fSlow9 * ftbl0[(iRec79[0] + iTemp90) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp91)] + fSlow10 * ftbl0[(iRec81[0] + iTemp94) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp95)] + fSlow11 * ftbl0[(iRec83[0] + iTemp98) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp99)] + fSlow12 * ftbl0[(iRec85[0] + iTemp102) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp103)] + fSlow13 * ftbl0[(iRec87[0] + iTemp106) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp107)] + fSlow14 * ftbl0[(iRec89[0] + iTemp110) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp111)] + fSlow15 * ftbl0[(iRec91[0] + iTemp114) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp115)] + fSlow16 * ftbl0[(iRec93[0] + iTemp118) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp119)] + fSlow17 * ftbl0[(iRec95[0] + iTemp122) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp123)] + fSlow18 * ftbl0[(iRec97[0] + iTemp126) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp127)] + fSlow19 * ftbl0[(iRec99[0] + iTemp130) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp131)] + fSlow20 * ftbl0[(iRec101[0] + iTemp134) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp135)] + fSlow21 * ftbl0[(iRec103[0] + iTemp138) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp139)] + fSlow22 * ftbl0[(iRec105[0] + iTemp142) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp143)] + fSlow23 * ftbl0[(iRec107[0] + iTemp146) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp147)] + fSlow24 * ftbl0[(iRec109[0] + iTemp150) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp151)] + fSlow25 * ftbl0[(iRec111[0] + iTemp154) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp155)] + fSlow26 * ftbl0[(iRec113[0] + iTemp158) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp159)] + fSlow27 * ftbl0[(iRec115[0] + iTemp162) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp163)] + fSlow28 * ftbl0[(iRec117[0] + iTemp166) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp167)] + fSlow29 * ftbl0[(iRec119[0] + iTemp170) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp171)] + fSlow30 * ftbl0[(iRec121[0] + iTemp174) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp175)] + fSlow31 * ftbl0[(iRec123[0] + iTemp178) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp179)] + fSlow32 * ftbl0[(iRec125[0] + iTemp182) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp183)] + fSlow33 * ftbl0[(iRec127[0] + iTemp186) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp187)] + fSlow34 * ftbl0[(iRec129[0] + iTemp190) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp191)] + fSlow35 * ftbl0[(iRec131[0] + iTemp194) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp195)])); + int iTemp197 = int(0.5f * fTemp3 * (1.0f - float(iRec7))); + iRec134[0] = iVec0[1] * iRec134[1] + iTemp2 * iTemp197; + int iTemp198 = (iRec3[0] + iRec134[0]) % iTemp1; + float fTemp199 = float(iTemp198) / fTemp70; int iTemp200 = int(fTemp199); - iRec133[0] = ((iRec133[1] * (1 - iTemp200)) + (iTemp197 * iTemp200)); - int iTemp201 = int((0.5f * (fTemp3 * (1.0f - float(iRec9))))); - iRec136[0] = ((iVec0[1] * iRec136[1]) + (iTemp2 * iTemp201)); - int iTemp202 = ((iRec3[0] + iRec136[0]) % iTemp1); - float fTemp203 = (float(iTemp202) / fTemp70); + iRec133[0] = iRec133[1] * (1 - iTemp200) + iTemp197 * iTemp200; + int iTemp201 = int(0.5f * fTemp3 * (1.0f - float(iRec9))); + iRec136[0] = iVec0[1] * iRec136[1] + iTemp2 * iTemp201; + int iTemp202 = (iRec3[0] + iRec136[0]) % iTemp1; + float fTemp203 = float(iTemp202) / fTemp70; int iTemp204 = int(fTemp203); - iRec135[0] = ((iRec135[1] * (1 - iTemp204)) + (iTemp201 * iTemp204)); - int iTemp205 = int((0.5f * (fTemp3 * (1.0f - float(iRec11))))); - iRec138[0] = ((iVec0[1] * iRec138[1]) + (iTemp2 * iTemp205)); - int iTemp206 = ((iRec3[0] + iRec138[0]) % iTemp1); - float fTemp207 = (float(iTemp206) / fTemp70); + iRec135[0] = iRec135[1] * (1 - iTemp204) + iTemp201 * iTemp204; + int iTemp205 = int(0.5f * fTemp3 * (1.0f - float(iRec11))); + iRec138[0] = iVec0[1] * iRec138[1] + iTemp2 * iTemp205; + int iTemp206 = (iRec3[0] + iRec138[0]) % iTemp1; + float fTemp207 = float(iTemp206) / fTemp70; int iTemp208 = int(fTemp207); - iRec137[0] = ((iRec137[1] * (1 - iTemp208)) + (iTemp205 * iTemp208)); - int iTemp209 = int((0.5f * (fTemp3 * (1.0f - float(iRec13))))); - iRec140[0] = ((iVec0[1] * iRec140[1]) + (iTemp2 * iTemp209)); - int iTemp210 = ((iRec3[0] + iRec140[0]) % iTemp1); - float fTemp211 = (float(iTemp210) / fTemp70); + iRec137[0] = iRec137[1] * (1 - iTemp208) + iTemp205 * iTemp208; + int iTemp209 = int(0.5f * fTemp3 * (1.0f - float(iRec13))); + iRec140[0] = iVec0[1] * iRec140[1] + iTemp2 * iTemp209; + int iTemp210 = (iRec3[0] + iRec140[0]) % iTemp1; + float fTemp211 = float(iTemp210) / fTemp70; int iTemp212 = int(fTemp211); - iRec139[0] = ((iRec139[1] * (1 - iTemp212)) + (iTemp209 * iTemp212)); - int iTemp213 = int((0.5f * (fTemp3 * (1.0f - float(iRec15))))); - iRec142[0] = ((iVec0[1] * iRec142[1]) + (iTemp2 * iTemp213)); - int iTemp214 = ((iRec3[0] + iRec142[0]) % iTemp1); - float fTemp215 = (float(iTemp214) / fTemp70); + iRec139[0] = iRec139[1] * (1 - iTemp212) + iTemp209 * iTemp212; + int iTemp213 = int(0.5f * fTemp3 * (1.0f - float(iRec15))); + iRec142[0] = iVec0[1] * iRec142[1] + iTemp2 * iTemp213; + int iTemp214 = (iRec3[0] + iRec142[0]) % iTemp1; + float fTemp215 = float(iTemp214) / fTemp70; int iTemp216 = int(fTemp215); - iRec141[0] = ((iRec141[1] * (1 - iTemp216)) + (iTemp213 * iTemp216)); - int iTemp217 = int((0.5f * (fTemp3 * (1.0f - float(iRec17))))); - iRec144[0] = ((iVec0[1] * iRec144[1]) + (iTemp2 * iTemp217)); - int iTemp218 = ((iRec3[0] + iRec144[0]) % iTemp1); - float fTemp219 = (float(iTemp218) / fTemp70); + iRec141[0] = iRec141[1] * (1 - iTemp216) + iTemp213 * iTemp216; + int iTemp217 = int(0.5f * fTemp3 * (1.0f - float(iRec17))); + iRec144[0] = iVec0[1] * iRec144[1] + iTemp2 * iTemp217; + int iTemp218 = (iRec3[0] + iRec144[0]) % iTemp1; + float fTemp219 = float(iTemp218) / fTemp70; int iTemp220 = int(fTemp219); - iRec143[0] = ((iRec143[1] * (1 - iTemp220)) + (iTemp217 * iTemp220)); - int iTemp221 = int((0.5f * (fTemp3 * (1.0f - float(iRec19))))); - iRec146[0] = ((iVec0[1] * iRec146[1]) + (iTemp2 * iTemp221)); - int iTemp222 = ((iRec3[0] + iRec146[0]) % iTemp1); - float fTemp223 = (float(iTemp222) / fTemp70); + iRec143[0] = iRec143[1] * (1 - iTemp220) + iTemp217 * iTemp220; + int iTemp221 = int(0.5f * fTemp3 * (1.0f - float(iRec19))); + iRec146[0] = iVec0[1] * iRec146[1] + iTemp2 * iTemp221; + int iTemp222 = (iRec3[0] + iRec146[0]) % iTemp1; + float fTemp223 = float(iTemp222) / fTemp70; int iTemp224 = int(fTemp223); - iRec145[0] = ((iRec145[1] * (1 - iTemp224)) + (iTemp221 * iTemp224)); - int iTemp225 = int((0.5f * (fTemp3 * (1.0f - float(iRec21))))); - iRec148[0] = ((iVec0[1] * iRec148[1]) + (iTemp2 * iTemp225)); - int iTemp226 = ((iRec3[0] + iRec148[0]) % iTemp1); - float fTemp227 = (float(iTemp226) / fTemp70); + iRec145[0] = iRec145[1] * (1 - iTemp224) + iTemp221 * iTemp224; + int iTemp225 = int(0.5f * fTemp3 * (1.0f - float(iRec21))); + iRec148[0] = iVec0[1] * iRec148[1] + iTemp2 * iTemp225; + int iTemp226 = (iRec3[0] + iRec148[0]) % iTemp1; + float fTemp227 = float(iTemp226) / fTemp70; int iTemp228 = int(fTemp227); - iRec147[0] = ((iRec147[1] * (1 - iTemp228)) + (iTemp225 * iTemp228)); - int iTemp229 = int((0.5f * (fTemp3 * (1.0f - float(iRec23))))); - iRec150[0] = ((iVec0[1] * iRec150[1]) + (iTemp2 * iTemp229)); - int iTemp230 = ((iRec3[0] + iRec150[0]) % iTemp1); - float fTemp231 = (float(iTemp230) / fTemp70); + iRec147[0] = iRec147[1] * (1 - iTemp228) + iTemp225 * iTemp228; + int iTemp229 = int(0.5f * fTemp3 * (1.0f - float(iRec23))); + iRec150[0] = iVec0[1] * iRec150[1] + iTemp2 * iTemp229; + int iTemp230 = (iRec3[0] + iRec150[0]) % iTemp1; + float fTemp231 = float(iTemp230) / fTemp70; int iTemp232 = int(fTemp231); - iRec149[0] = ((iRec149[1] * (1 - iTemp232)) + (iTemp229 * iTemp232)); - int iTemp233 = int((0.5f * (fTemp3 * (1.0f - float(iRec25))))); - iRec152[0] = ((iVec0[1] * iRec152[1]) + (iTemp2 * iTemp233)); - int iTemp234 = ((iRec3[0] + iRec152[0]) % iTemp1); - float fTemp235 = (float(iTemp234) / fTemp70); + iRec149[0] = iRec149[1] * (1 - iTemp232) + iTemp229 * iTemp232; + int iTemp233 = int(0.5f * fTemp3 * (1.0f - float(iRec25))); + iRec152[0] = iVec0[1] * iRec152[1] + iTemp2 * iTemp233; + int iTemp234 = (iRec3[0] + iRec152[0]) % iTemp1; + float fTemp235 = float(iTemp234) / fTemp70; int iTemp236 = int(fTemp235); - iRec151[0] = ((iRec151[1] * (1 - iTemp236)) + (iTemp233 * iTemp236)); - int iTemp237 = int((0.5f * (fTemp3 * (1.0f - float(iRec27))))); - iRec154[0] = ((iVec0[1] * iRec154[1]) + (iTemp2 * iTemp237)); - int iTemp238 = ((iRec3[0] + iRec154[0]) % iTemp1); - float fTemp239 = (float(iTemp238) / fTemp70); + iRec151[0] = iRec151[1] * (1 - iTemp236) + iTemp233 * iTemp236; + int iTemp237 = int(0.5f * fTemp3 * (1.0f - float(iRec27))); + iRec154[0] = iVec0[1] * iRec154[1] + iTemp2 * iTemp237; + int iTemp238 = (iRec3[0] + iRec154[0]) % iTemp1; + float fTemp239 = float(iTemp238) / fTemp70; int iTemp240 = int(fTemp239); - iRec153[0] = ((iRec153[1] * (1 - iTemp240)) + (iTemp237 * iTemp240)); - int iTemp241 = int((0.5f * (fTemp3 * (1.0f - float(iRec29))))); - iRec156[0] = ((iVec0[1] * iRec156[1]) + (iTemp2 * iTemp241)); - int iTemp242 = ((iRec3[0] + iRec156[0]) % iTemp1); - float fTemp243 = (float(iTemp242) / fTemp70); + iRec153[0] = iRec153[1] * (1 - iTemp240) + iTemp237 * iTemp240; + int iTemp241 = int(0.5f * fTemp3 * (1.0f - float(iRec29))); + iRec156[0] = iVec0[1] * iRec156[1] + iTemp2 * iTemp241; + int iTemp242 = (iRec3[0] + iRec156[0]) % iTemp1; + float fTemp243 = float(iTemp242) / fTemp70; int iTemp244 = int(fTemp243); - iRec155[0] = ((iRec155[1] * (1 - iTemp244)) + (iTemp241 * iTemp244)); - int iTemp245 = int((0.5f * (fTemp3 * (1.0f - float(iRec31))))); - iRec158[0] = ((iVec0[1] * iRec158[1]) + (iTemp2 * iTemp245)); - int iTemp246 = ((iRec3[0] + iRec158[0]) % iTemp1); - float fTemp247 = (float(iTemp246) / fTemp70); + iRec155[0] = iRec155[1] * (1 - iTemp244) + iTemp241 * iTemp244; + int iTemp245 = int(0.5f * fTemp3 * (1.0f - float(iRec31))); + iRec158[0] = iVec0[1] * iRec158[1] + iTemp2 * iTemp245; + int iTemp246 = (iRec3[0] + iRec158[0]) % iTemp1; + float fTemp247 = float(iTemp246) / fTemp70; int iTemp248 = int(fTemp247); - iRec157[0] = ((iRec157[1] * (1 - iTemp248)) + (iTemp245 * iTemp248)); - int iTemp249 = int((0.5f * (fTemp3 * (1.0f - float(iRec33))))); - iRec160[0] = ((iVec0[1] * iRec160[1]) + (iTemp2 * iTemp249)); - int iTemp250 = ((iRec3[0] + iRec160[0]) % iTemp1); - float fTemp251 = (float(iTemp250) / fTemp70); + iRec157[0] = iRec157[1] * (1 - iTemp248) + iTemp245 * iTemp248; + int iTemp249 = int(0.5f * fTemp3 * (1.0f - float(iRec33))); + iRec160[0] = iVec0[1] * iRec160[1] + iTemp2 * iTemp249; + int iTemp250 = (iRec3[0] + iRec160[0]) % iTemp1; + float fTemp251 = float(iTemp250) / fTemp70; int iTemp252 = int(fTemp251); - iRec159[0] = ((iRec159[1] * (1 - iTemp252)) + (iTemp249 * iTemp252)); - int iTemp253 = int((0.5f * (fTemp3 * (1.0f - float(iRec35))))); - iRec162[0] = ((iVec0[1] * iRec162[1]) + (iTemp2 * iTemp253)); - int iTemp254 = ((iRec3[0] + iRec162[0]) % iTemp1); - float fTemp255 = (float(iTemp254) / fTemp70); + iRec159[0] = iRec159[1] * (1 - iTemp252) + iTemp249 * iTemp252; + int iTemp253 = int(0.5f * fTemp3 * (1.0f - float(iRec35))); + iRec162[0] = iVec0[1] * iRec162[1] + iTemp2 * iTemp253; + int iTemp254 = (iRec3[0] + iRec162[0]) % iTemp1; + float fTemp255 = float(iTemp254) / fTemp70; int iTemp256 = int(fTemp255); - iRec161[0] = ((iRec161[1] * (1 - iTemp256)) + (iTemp253 * iTemp256)); - int iTemp257 = int((0.5f * (fTemp3 * (1.0f - float(iRec37))))); - iRec164[0] = ((iVec0[1] * iRec164[1]) + (iTemp2 * iTemp257)); - int iTemp258 = ((iRec3[0] + iRec164[0]) % iTemp1); - float fTemp259 = (float(iTemp258) / fTemp70); + iRec161[0] = iRec161[1] * (1 - iTemp256) + iTemp253 * iTemp256; + int iTemp257 = int(0.5f * fTemp3 * (1.0f - float(iRec37))); + iRec164[0] = iVec0[1] * iRec164[1] + iTemp2 * iTemp257; + int iTemp258 = (iRec3[0] + iRec164[0]) % iTemp1; + float fTemp259 = float(iTemp258) / fTemp70; int iTemp260 = int(fTemp259); - iRec163[0] = ((iRec163[1] * (1 - iTemp260)) + (iTemp257 * iTemp260)); - int iTemp261 = int((0.5f * (fTemp3 * (1.0f - float(iRec39))))); - iRec166[0] = ((iVec0[1] * iRec166[1]) + (iTemp2 * iTemp261)); - int iTemp262 = ((iRec3[0] + iRec166[0]) % iTemp1); - float fTemp263 = (float(iTemp262) / fTemp70); + iRec163[0] = iRec163[1] * (1 - iTemp260) + iTemp257 * iTemp260; + int iTemp261 = int(0.5f * fTemp3 * (1.0f - float(iRec39))); + iRec166[0] = iVec0[1] * iRec166[1] + iTemp2 * iTemp261; + int iTemp262 = (iRec3[0] + iRec166[0]) % iTemp1; + float fTemp263 = float(iTemp262) / fTemp70; int iTemp264 = int(fTemp263); - iRec165[0] = ((iRec165[1] * (1 - iTemp264)) + (iTemp261 * iTemp264)); - int iTemp265 = int((0.5f * (fTemp3 * (1.0f - float(iRec41))))); - iRec168[0] = ((iVec0[1] * iRec168[1]) + (iTemp2 * iTemp265)); - int iTemp266 = ((iRec3[0] + iRec168[0]) % iTemp1); - float fTemp267 = (float(iTemp266) / fTemp70); + iRec165[0] = iRec165[1] * (1 - iTemp264) + iTemp261 * iTemp264; + int iTemp265 = int(0.5f * fTemp3 * (1.0f - float(iRec41))); + iRec168[0] = iVec0[1] * iRec168[1] + iTemp2 * iTemp265; + int iTemp266 = (iRec3[0] + iRec168[0]) % iTemp1; + float fTemp267 = float(iTemp266) / fTemp70; int iTemp268 = int(fTemp267); - iRec167[0] = ((iRec167[1] * (1 - iTemp268)) + (iTemp265 * iTemp268)); - int iTemp269 = int((0.5f * (fTemp3 * (1.0f - float(iRec43))))); - iRec170[0] = ((iVec0[1] * iRec170[1]) + (iTemp2 * iTemp269)); - int iTemp270 = ((iRec3[0] + iRec170[0]) % iTemp1); - float fTemp271 = (float(iTemp270) / fTemp70); + iRec167[0] = iRec167[1] * (1 - iTemp268) + iTemp265 * iTemp268; + int iTemp269 = int(0.5f * fTemp3 * (1.0f - float(iRec43))); + iRec170[0] = iVec0[1] * iRec170[1] + iTemp2 * iTemp269; + int iTemp270 = (iRec3[0] + iRec170[0]) % iTemp1; + float fTemp271 = float(iTemp270) / fTemp70; int iTemp272 = int(fTemp271); - iRec169[0] = ((iRec169[1] * (1 - iTemp272)) + (iTemp269 * iTemp272)); - int iTemp273 = int((0.5f * (fTemp3 * (1.0f - float(iRec45))))); - iRec172[0] = ((iVec0[1] * iRec172[1]) + (iTemp2 * iTemp273)); - int iTemp274 = ((iRec3[0] + iRec172[0]) % iTemp1); - float fTemp275 = (float(iTemp274) / fTemp70); + iRec169[0] = iRec169[1] * (1 - iTemp272) + iTemp269 * iTemp272; + int iTemp273 = int(0.5f * fTemp3 * (1.0f - float(iRec45))); + iRec172[0] = iVec0[1] * iRec172[1] + iTemp2 * iTemp273; + int iTemp274 = (iRec3[0] + iRec172[0]) % iTemp1; + float fTemp275 = float(iTemp274) / fTemp70; int iTemp276 = int(fTemp275); - iRec171[0] = ((iRec171[1] * (1 - iTemp276)) + (iTemp273 * iTemp276)); - int iTemp277 = int((0.5f * (fTemp3 * (1.0f - float(iRec47))))); - iRec174[0] = ((iVec0[1] * iRec174[1]) + (iTemp2 * iTemp277)); - int iTemp278 = ((iRec3[0] + iRec174[0]) % iTemp1); - float fTemp279 = (float(iTemp278) / fTemp70); + iRec171[0] = iRec171[1] * (1 - iTemp276) + iTemp273 * iTemp276; + int iTemp277 = int(0.5f * fTemp3 * (1.0f - float(iRec47))); + iRec174[0] = iVec0[1] * iRec174[1] + iTemp2 * iTemp277; + int iTemp278 = (iRec3[0] + iRec174[0]) % iTemp1; + float fTemp279 = float(iTemp278) / fTemp70; int iTemp280 = int(fTemp279); - iRec173[0] = ((iRec173[1] * (1 - iTemp280)) + (iTemp277 * iTemp280)); - int iTemp281 = int((0.5f * (fTemp3 * (1.0f - float(iRec49))))); - iRec176[0] = ((iVec0[1] * iRec176[1]) + (iTemp2 * iTemp281)); - int iTemp282 = ((iRec3[0] + iRec176[0]) % iTemp1); - float fTemp283 = (float(iTemp282) / fTemp70); + iRec173[0] = iRec173[1] * (1 - iTemp280) + iTemp277 * iTemp280; + int iTemp281 = int(0.5f * fTemp3 * (1.0f - float(iRec49))); + iRec176[0] = iVec0[1] * iRec176[1] + iTemp2 * iTemp281; + int iTemp282 = (iRec3[0] + iRec176[0]) % iTemp1; + float fTemp283 = float(iTemp282) / fTemp70; int iTemp284 = int(fTemp283); - iRec175[0] = ((iRec175[1] * (1 - iTemp284)) + (iTemp281 * iTemp284)); - int iTemp285 = int((0.5f * (fTemp3 * (1.0f - float(iRec51))))); - iRec178[0] = ((iVec0[1] * iRec178[1]) + (iTemp2 * iTemp285)); - int iTemp286 = ((iRec3[0] + iRec178[0]) % iTemp1); - float fTemp287 = (float(iTemp286) / fTemp70); + iRec175[0] = iRec175[1] * (1 - iTemp284) + iTemp281 * iTemp284; + int iTemp285 = int(0.5f * fTemp3 * (1.0f - float(iRec51))); + iRec178[0] = iVec0[1] * iRec178[1] + iTemp2 * iTemp285; + int iTemp286 = (iRec3[0] + iRec178[0]) % iTemp1; + float fTemp287 = float(iTemp286) / fTemp70; int iTemp288 = int(fTemp287); - iRec177[0] = ((iRec177[1] * (1 - iTemp288)) + (iTemp285 * iTemp288)); - int iTemp289 = int((0.5f * (fTemp3 * (1.0f - float(iRec53))))); - iRec180[0] = ((iVec0[1] * iRec180[1]) + (iTemp2 * iTemp289)); - int iTemp290 = ((iRec3[0] + iRec180[0]) % iTemp1); - float fTemp291 = (float(iTemp290) / fTemp70); + iRec177[0] = iRec177[1] * (1 - iTemp288) + iTemp285 * iTemp288; + int iTemp289 = int(0.5f * fTemp3 * (1.0f - float(iRec53))); + iRec180[0] = iVec0[1] * iRec180[1] + iTemp2 * iTemp289; + int iTemp290 = (iRec3[0] + iRec180[0]) % iTemp1; + float fTemp291 = float(iTemp290) / fTemp70; int iTemp292 = int(fTemp291); - iRec179[0] = ((iRec179[1] * (1 - iTemp292)) + (iTemp289 * iTemp292)); - int iTemp293 = int((0.5f * (fTemp3 * (1.0f - float(iRec55))))); - iRec182[0] = ((iVec0[1] * iRec182[1]) + (iTemp2 * iTemp293)); - int iTemp294 = ((iRec3[0] + iRec182[0]) % iTemp1); - float fTemp295 = (float(iTemp294) / fTemp70); + iRec179[0] = iRec179[1] * (1 - iTemp292) + iTemp289 * iTemp292; + int iTemp293 = int(0.5f * fTemp3 * (1.0f - float(iRec55))); + iRec182[0] = iVec0[1] * iRec182[1] + iTemp2 * iTemp293; + int iTemp294 = (iRec3[0] + iRec182[0]) % iTemp1; + float fTemp295 = float(iTemp294) / fTemp70; int iTemp296 = int(fTemp295); - iRec181[0] = ((iRec181[1] * (1 - iTemp296)) + (iTemp293 * iTemp296)); - int iTemp297 = int((0.5f * (fTemp3 * (1.0f - float(iRec57))))); - iRec184[0] = ((iVec0[1] * iRec184[1]) + (iTemp2 * iTemp297)); - int iTemp298 = ((iRec3[0] + iRec184[0]) % iTemp1); - float fTemp299 = (float(iTemp298) / fTemp70); + iRec181[0] = iRec181[1] * (1 - iTemp296) + iTemp293 * iTemp296; + int iTemp297 = int(0.5f * fTemp3 * (1.0f - float(iRec57))); + iRec184[0] = iVec0[1] * iRec184[1] + iTemp2 * iTemp297; + int iTemp298 = (iRec3[0] + iRec184[0]) % iTemp1; + float fTemp299 = float(iTemp298) / fTemp70; int iTemp300 = int(fTemp299); - iRec183[0] = ((iRec183[1] * (1 - iTemp300)) + (iTemp297 * iTemp300)); - int iTemp301 = int((0.5f * (fTemp3 * (1.0f - float(iRec59))))); - iRec186[0] = ((iVec0[1] * iRec186[1]) + (iTemp2 * iTemp301)); - int iTemp302 = ((iRec3[0] + iRec186[0]) % iTemp1); - float fTemp303 = (float(iTemp302) / fTemp70); + iRec183[0] = iRec183[1] * (1 - iTemp300) + iTemp297 * iTemp300; + int iTemp301 = int(0.5f * fTemp3 * (1.0f - float(iRec59))); + iRec186[0] = iVec0[1] * iRec186[1] + iTemp2 * iTemp301; + int iTemp302 = (iRec3[0] + iRec186[0]) % iTemp1; + float fTemp303 = float(iTemp302) / fTemp70; int iTemp304 = int(fTemp303); - iRec185[0] = ((iRec185[1] * (1 - iTemp304)) + (iTemp301 * iTemp304)); - int iTemp305 = int((0.5f * (fTemp3 * (1.0f - float(iRec61))))); - iRec188[0] = ((iVec0[1] * iRec188[1]) + (iTemp2 * iTemp305)); - int iTemp306 = ((iRec3[0] + iRec188[0]) % iTemp1); - float fTemp307 = (float(iTemp306) / fTemp70); + iRec185[0] = iRec185[1] * (1 - iTemp304) + iTemp301 * iTemp304; + int iTemp305 = int(0.5f * fTemp3 * (1.0f - float(iRec61))); + iRec188[0] = iVec0[1] * iRec188[1] + iTemp2 * iTemp305; + int iTemp306 = (iRec3[0] + iRec188[0]) % iTemp1; + float fTemp307 = float(iTemp306) / fTemp70; int iTemp308 = int(fTemp307); - iRec187[0] = ((iRec187[1] * (1 - iTemp308)) + (iTemp305 * iTemp308)); - int iTemp309 = int((0.5f * (fTemp3 * (1.0f - float(iRec63))))); - iRec190[0] = ((iVec0[1] * iRec190[1]) + (iTemp2 * iTemp309)); - int iTemp310 = ((iRec3[0] + iRec190[0]) % iTemp1); - float fTemp311 = (float(iTemp310) / fTemp70); + iRec187[0] = iRec187[1] * (1 - iTemp308) + iTemp305 * iTemp308; + int iTemp309 = int(0.5f * fTemp3 * (1.0f - float(iRec63))); + iRec190[0] = iVec0[1] * iRec190[1] + iTemp2 * iTemp309; + int iTemp310 = (iRec3[0] + iRec190[0]) % iTemp1; + float fTemp311 = float(iTemp310) / fTemp70; int iTemp312 = int(fTemp311); - iRec189[0] = ((iRec189[1] * (1 - iTemp312)) + (iTemp309 * iTemp312)); - int iTemp313 = int((0.5f * (fTemp3 * (1.0f - float(iRec65))))); - iRec192[0] = ((iVec0[1] * iRec192[1]) + (iTemp2 * iTemp313)); - int iTemp314 = ((iRec3[0] + iRec192[0]) % iTemp1); - float fTemp315 = (float(iTemp314) / fTemp70); + iRec189[0] = iRec189[1] * (1 - iTemp312) + iTemp309 * iTemp312; + int iTemp313 = int(0.5f * fTemp3 * (1.0f - float(iRec65))); + iRec192[0] = iVec0[1] * iRec192[1] + iTemp2 * iTemp313; + int iTemp314 = (iRec3[0] + iRec192[0]) % iTemp1; + float fTemp315 = float(iTemp314) / fTemp70; int iTemp316 = int(fTemp315); - iRec191[0] = ((iRec191[1] * (1 - iTemp316)) + (iTemp313 * iTemp316)); - int iTemp317 = int((0.5f * (fTemp3 * (1.0f - float(iRec67))))); - iRec194[0] = ((iVec0[1] * iRec194[1]) + (iTemp2 * iTemp317)); - int iTemp318 = ((iRec3[0] + iRec194[0]) % iTemp1); - float fTemp319 = (float(iTemp318) / fTemp70); + iRec191[0] = iRec191[1] * (1 - iTemp316) + iTemp313 * iTemp316; + int iTemp317 = int(0.5f * fTemp3 * (1.0f - float(iRec67))); + iRec194[0] = iVec0[1] * iRec194[1] + iTemp2 * iTemp317; + int iTemp318 = (iRec3[0] + iRec194[0]) % iTemp1; + float fTemp319 = float(iTemp318) / fTemp70; int iTemp320 = int(fTemp319); - iRec193[0] = ((iRec193[1] * (1 - iTemp320)) + (iTemp317 * iTemp320)); - int iTemp321 = int((0.5f * (fTemp3 * (1.0f - float(iRec69))))); - iRec196[0] = ((iVec0[1] * iRec196[1]) + (iTemp2 * iTemp321)); - int iTemp322 = ((iRec3[0] + iRec196[0]) % iTemp1); - float fTemp323 = (float(iTemp322) / fTemp70); + iRec193[0] = iRec193[1] * (1 - iTemp320) + iTemp317 * iTemp320; + int iTemp321 = int(0.5f * fTemp3 * (1.0f - float(iRec69))); + iRec196[0] = iVec0[1] * iRec196[1] + iTemp2 * iTemp321; + int iTemp322 = (iRec3[0] + iRec196[0]) % iTemp1; + float fTemp323 = float(iTemp322) / fTemp70; int iTemp324 = int(fTemp323); - iRec195[0] = ((iRec195[1] * (1 - iTemp324)) + (iTemp321 * iTemp324)); - output1[i0] = FAUSTFLOAT((fSlow1 * ((((((((((((((((((((((((((((((((fSlow36 * (ftbl0[((iRec133[0] + iTemp198) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp199))])) + (fSlow37 * (ftbl0[((iRec135[0] + iTemp202) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp203))]))) + (fSlow38 * (ftbl0[((iRec137[0] + iTemp206) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp207))]))) + (fSlow39 * (ftbl0[((iRec139[0] + iTemp210) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp211))]))) + (fSlow40 * (ftbl0[((iRec141[0] + iTemp214) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp215))]))) + (fSlow41 * (ftbl0[((iRec143[0] + iTemp218) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp219))]))) + (fSlow42 * (ftbl0[((iRec145[0] + iTemp222) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp223))]))) + (fSlow43 * (ftbl0[((iRec147[0] + iTemp226) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp227))]))) + (fSlow44 * (ftbl0[((iRec149[0] + iTemp230) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp231))]))) + (fSlow45 * (ftbl0[((iRec151[0] + iTemp234) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp235))]))) + (fSlow46 * (ftbl0[((iRec153[0] + iTemp238) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp239))]))) + (fSlow47 * (ftbl0[((iRec155[0] + iTemp242) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp243))]))) + (fSlow48 * (ftbl0[((iRec157[0] + iTemp246) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp247))]))) + (fSlow49 * (ftbl0[((iRec159[0] + iTemp250) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp251))]))) + (fSlow50 * (ftbl0[((iRec161[0] + iTemp254) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp255))]))) + (fSlow51 * (ftbl0[((iRec163[0] + iTemp258) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp259))]))) + (fSlow52 * (ftbl0[((iRec165[0] + iTemp262) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp263))]))) + (fSlow53 * (ftbl0[((iRec167[0] + iTemp266) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp267))]))) + (fSlow54 * (ftbl0[((iRec169[0] + iTemp270) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp271))]))) + (fSlow55 * (ftbl0[((iRec171[0] + iTemp274) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp275))]))) + (fSlow56 * (ftbl0[((iRec173[0] + iTemp278) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp279))]))) + (fSlow57 * (ftbl0[((iRec175[0] + iTemp282) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp283))]))) + (fSlow58 * (ftbl0[((iRec177[0] + iTemp286) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp287))]))) + (fSlow59 * (ftbl0[((iRec179[0] + iTemp290) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp291))]))) + (fSlow60 * (ftbl0[((iRec181[0] + iTemp294) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp295))]))) + (fSlow61 * (ftbl0[((iRec183[0] + iTemp298) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp299))]))) + (fSlow62 * (ftbl0[((iRec185[0] + iTemp302) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp303))]))) + (fSlow63 * (ftbl0[((iRec187[0] + iTemp306) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp307))]))) + (fSlow64 * (ftbl0[((iRec189[0] + iTemp310) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp311))]))) + (fSlow65 * (ftbl0[((iRec191[0] + iTemp314) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp315))]))) + (fSlow66 * (ftbl0[((iRec193[0] + iTemp318) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp319))]))) + (fSlow67 * (ftbl0[((iRec195[0] + iTemp322) % iTemp0)] * ftbl1fx_granulatorSIG1[int((1024.0f * fTemp323))]))))); + iRec195[0] = iRec195[1] * (1 - iTemp324) + iTemp321 * iTemp324; + output1[i0] = FAUSTFLOAT(fSlow1 * (fSlow36 * ftbl0[(iRec133[0] + iTemp198) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp199)] + fSlow37 * ftbl0[(iRec135[0] + iTemp202) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp203)] + fSlow38 * ftbl0[(iRec137[0] + iTemp206) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp207)] + fSlow39 * ftbl0[(iRec139[0] + iTemp210) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp211)] + fSlow40 * ftbl0[(iRec141[0] + iTemp214) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp215)] + fSlow41 * ftbl0[(iRec143[0] + iTemp218) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp219)] + fSlow42 * ftbl0[(iRec145[0] + iTemp222) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp223)] + fSlow43 * ftbl0[(iRec147[0] + iTemp226) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp227)] + fSlow44 * ftbl0[(iRec149[0] + iTemp230) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp231)] + fSlow45 * ftbl0[(iRec151[0] + iTemp234) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp235)] + fSlow46 * ftbl0[(iRec153[0] + iTemp238) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp239)] + fSlow47 * ftbl0[(iRec155[0] + iTemp242) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp243)] + fSlow48 * ftbl0[(iRec157[0] + iTemp246) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp247)] + fSlow49 * ftbl0[(iRec159[0] + iTemp250) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp251)] + fSlow50 * ftbl0[(iRec161[0] + iTemp254) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp255)] + fSlow51 * ftbl0[(iRec163[0] + iTemp258) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp259)] + fSlow52 * ftbl0[(iRec165[0] + iTemp262) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp263)] + fSlow53 * ftbl0[(iRec167[0] + iTemp266) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp267)] + fSlow54 * ftbl0[(iRec169[0] + iTemp270) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp271)] + fSlow55 * ftbl0[(iRec171[0] + iTemp274) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp275)] + fSlow56 * ftbl0[(iRec173[0] + iTemp278) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp279)] + fSlow57 * ftbl0[(iRec175[0] + iTemp282) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp283)] + fSlow58 * ftbl0[(iRec177[0] + iTemp286) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp287)] + fSlow59 * ftbl0[(iRec179[0] + iTemp290) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp291)] + fSlow60 * ftbl0[(iRec181[0] + iTemp294) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp295)] + fSlow61 * ftbl0[(iRec183[0] + iTemp298) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp299)] + fSlow62 * ftbl0[(iRec185[0] + iTemp302) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp303)] + fSlow63 * ftbl0[(iRec187[0] + iTemp306) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp307)] + fSlow64 * ftbl0[(iRec189[0] + iTemp310) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp311)] + fSlow65 * ftbl0[(iRec191[0] + iTemp314) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp315)] + fSlow66 * ftbl0[(iRec193[0] + iTemp318) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp319)] + fSlow67 * ftbl0[(iRec195[0] + iTemp322) % iTemp0] * ftbl1fx_granulatorSIG1[int(1024.0f * fTemp323)])); iVec0[1] = iVec0[0]; fRec1[1] = fRec1[0]; iRec0[1] = iRec0[0]; diff --git a/ceammc/ext/src/fx/fx_greyhole.h b/ceammc/ext/src/fx/fx_greyhole.h index 7fb42b8bdb..d4679c6422 100644 --- a/ceammc/ext/src/fx/fx_greyhole.h +++ b/ceammc/ext/src/fx/fx_greyhole.h @@ -4,8 +4,8 @@ copyright: "(c) Julian Parker 2013" license: "GPL2+" name: "fx.greyhole" version: "1.0" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_greyhole -scn fx_greyhole_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_greyhole_H__ @@ -18,23 +18,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_greyhole_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_greyhole_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -48,22 +48,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -72,7 +157,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_greyhole_dsp { +class FAUST_API fx_greyhole_dsp { public: @@ -166,7 +251,7 @@ class fx_greyhole_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_greyhole_dsp { +class FAUST_API decorator_dsp : public fx_greyhole_dsp { protected: @@ -199,7 +284,7 @@ class decorator_dsp : public fx_greyhole_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -228,18 +313,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -247,7 +335,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -258,16 +346,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -280,38 +366,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_greyhole_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -326,8 +413,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -357,37 +444,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -398,40 +484,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_greyhole_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -444,14 +530,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -555,7 +633,6 @@ struct fx_greyhole : public fx_greyhole_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_greyhole #endif @@ -565,6 +642,13 @@ struct fx_greyhole : public fx_greyhole_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_greyhole : public fx_greyhole_dsp { private: @@ -583,6 +667,7 @@ class fx_greyhole : public fx_greyhole_dsp { float fVec2[2]; FAUSTFLOAT fHslider3; float fVec3[2]; + int IOTA0; float fConst3; FAUSTFLOAT fHslider4; float fVec4[2]; @@ -591,7 +676,6 @@ class fx_greyhole : public fx_greyhole_dsp { float fVec5[2]; float fRec40[2]; float fRec41[2]; - int IOTA; float fVec6[131072]; FAUSTFLOAT fHslider6; float fRec42[2]; @@ -729,14 +813,18 @@ class fx_greyhole : public fx_greyhole_dsp { void metadata(Meta* m) { m->declare("author", "Julian Parker, bug fixes by Till Bovermann"); + m->declare("basics.lib/bypass2:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_greyhole -scn fx_greyhole_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "(c) Julian Parker 2013"); + m->declare("delays.lib/fdelay1a:author", "Julius O. Smith III"); + m->declare("delays.lib/fdelay4:author", "Julius O. Smith III"); + m->declare("delays.lib/fdelayltv:author", "Julius O. Smith III"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_greyhole.dsp"); @@ -757,13 +845,13 @@ class fx_greyhole : public fx_greyhole_dsp { m->declare("maths.lib/version", "2.5"); m->declare("name", "fx.greyhole"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.1"); + m->declare("oscillators.lib/version", "0.3"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "1.0"); } @@ -779,11 +867,11 @@ class fx_greyhole : public fx_greyhole_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.000566893432f * fConst0); - fConst4 = (3.14159274f / fConst0); + fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.00056689343f * fConst0; + fConst4 = 3.1415927f / fConst0; } virtual void instanceResetUserInterface() { @@ -791,430 +879,430 @@ class fx_greyhole : public fx_greyhole_dsp { fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(0.5f); - fHslider3 = FAUSTFLOAT(0.90000000000000002f); - fHslider4 = FAUSTFLOAT(0.10000000000000001f); + fHslider3 = FAUSTFLOAT(0.9f); + fHslider4 = FAUSTFLOAT(0.1f); fHslider5 = FAUSTFLOAT(2.0f); - fHslider6 = FAUSTFLOAT(0.20000000000000001f); + fHslider6 = FAUSTFLOAT(0.2f); fHslider7 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fVec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fVec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fVec3[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + IOTA0 = 0; + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fVec4[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fVec5[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec40[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec41[l8] = 0.0f; } - IOTA = 0; - for (int l9 = 0; (l9 < 131072); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 131072; l9 = l9 + 1) { fVec6[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fRec42[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec43[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { fRec44[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { fRec45[l13] = 0.0f; } - for (int l14 = 0; (l14 < 16384); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 16384; l14 = l14 + 1) { fVec7[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { fRec46[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fVec8[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 2; l17 = l17 + 1) { fRec39[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { fRec37[l18] = 0.0f; } - for (int l19 = 0; (l19 < 131072); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 131072; l19 = l19 + 1) { fVec9[l19] = 0.0f; } - for (int l20 = 0; (l20 < 16384); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 16384; l20 = l20 + 1) { fVec10[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { fRec48[l21] = 0.0f; } - for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { fVec11[l22] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { fRec47[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { fRec38[l24] = 0.0f; } - for (int l25 = 0; (l25 < 16384); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 16384; l25 = l25 + 1) { fVec12[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { fRec49[l26] = 0.0f; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 2; l27 = l27 + 1) { fVec13[l27] = 0.0f; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { fRec36[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { fRec34[l29] = 0.0f; } - for (int l30 = 0; (l30 < 16384); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 16384; l30 = l30 + 1) { fVec14[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec51[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2; l32 = l32 + 1) { fVec15[l32] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 2; l33 = l33 + 1) { fRec50[l33] = 0.0f; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { fRec35[l34] = 0.0f; } - for (int l35 = 0; (l35 < 16384); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 16384; l35 = l35 + 1) { fVec16[l35] = 0.0f; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 2; l36 = l36 + 1) { fRec52[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { fVec17[l37] = 0.0f; } - for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { fRec33[l38] = 0.0f; } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 2; l39 = l39 + 1) { fRec31[l39] = 0.0f; } - for (int l40 = 0; (l40 < 16384); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 16384; l40 = l40 + 1) { fVec18[l40] = 0.0f; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + for (int l41 = 0; l41 < 2; l41 = l41 + 1) { fRec54[l41] = 0.0f; } - for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { + for (int l42 = 0; l42 < 2; l42 = l42 + 1) { fVec19[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + for (int l43 = 0; l43 < 2; l43 = l43 + 1) { fRec53[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 2; l44 = l44 + 1) { fRec32[l44] = 0.0f; } - for (int l45 = 0; (l45 < 16384); l45 = (l45 + 1)) { + for (int l45 = 0; l45 < 16384; l45 = l45 + 1) { fVec20[l45] = 0.0f; } - for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 2; l46 = l46 + 1) { fRec55[l46] = 0.0f; } - for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 2; l47 = l47 + 1) { fVec21[l47] = 0.0f; } - for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 2; l48 = l48 + 1) { fRec30[l48] = 0.0f; } - for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 2; l49 = l49 + 1) { fRec28[l49] = 0.0f; } - for (int l50 = 0; (l50 < 16384); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 16384; l50 = l50 + 1) { fVec22[l50] = 0.0f; } - for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 2; l51 = l51 + 1) { fRec57[l51] = 0.0f; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 2; l52 = l52 + 1) { fVec23[l52] = 0.0f; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + for (int l53 = 0; l53 < 2; l53 = l53 + 1) { fRec56[l53] = 0.0f; } - for (int l54 = 0; (l54 < 2); l54 = (l54 + 1)) { + for (int l54 = 0; l54 < 2; l54 = l54 + 1) { fRec29[l54] = 0.0f; } - for (int l55 = 0; (l55 < 16384); l55 = (l55 + 1)) { + for (int l55 = 0; l55 < 16384; l55 = l55 + 1) { fVec24[l55] = 0.0f; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + for (int l56 = 0; l56 < 2; l56 = l56 + 1) { fRec58[l56] = 0.0f; } - for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { + for (int l57 = 0; l57 < 2; l57 = l57 + 1) { fVec25[l57] = 0.0f; } - for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { + for (int l58 = 0; l58 < 2; l58 = l58 + 1) { fRec27[l58] = 0.0f; } - for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + for (int l59 = 0; l59 < 2; l59 = l59 + 1) { fRec25[l59] = 0.0f; } - for (int l60 = 0; (l60 < 16384); l60 = (l60 + 1)) { + for (int l60 = 0; l60 < 16384; l60 = l60 + 1) { fVec26[l60] = 0.0f; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { fRec60[l61] = 0.0f; } - for (int l62 = 0; (l62 < 2); l62 = (l62 + 1)) { + for (int l62 = 0; l62 < 2; l62 = l62 + 1) { fVec27[l62] = 0.0f; } - for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + for (int l63 = 0; l63 < 2; l63 = l63 + 1) { fRec59[l63] = 0.0f; } - for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + for (int l64 = 0; l64 < 2; l64 = l64 + 1) { fRec26[l64] = 0.0f; } - for (int l65 = 0; (l65 < 16384); l65 = (l65 + 1)) { + for (int l65 = 0; l65 < 16384; l65 = l65 + 1) { fVec28[l65] = 0.0f; } - for (int l66 = 0; (l66 < 2); l66 = (l66 + 1)) { + for (int l66 = 0; l66 < 2; l66 = l66 + 1) { fRec61[l66] = 0.0f; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + for (int l67 = 0; l67 < 2; l67 = l67 + 1) { fVec29[l67] = 0.0f; } - for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + for (int l68 = 0; l68 < 2; l68 = l68 + 1) { fRec24[l68] = 0.0f; } - for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { + for (int l69 = 0; l69 < 2; l69 = l69 + 1) { fRec22[l69] = 0.0f; } - for (int l70 = 0; (l70 < 16384); l70 = (l70 + 1)) { + for (int l70 = 0; l70 < 16384; l70 = l70 + 1) { fVec30[l70] = 0.0f; } - for (int l71 = 0; (l71 < 2); l71 = (l71 + 1)) { + for (int l71 = 0; l71 < 2; l71 = l71 + 1) { fRec63[l71] = 0.0f; } - for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { + for (int l72 = 0; l72 < 2; l72 = l72 + 1) { fVec31[l72] = 0.0f; } - for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { + for (int l73 = 0; l73 < 2; l73 = l73 + 1) { fRec62[l73] = 0.0f; } - for (int l74 = 0; (l74 < 2); l74 = (l74 + 1)) { + for (int l74 = 0; l74 < 2; l74 = l74 + 1) { fRec23[l74] = 0.0f; } - for (int l75 = 0; (l75 < 16384); l75 = (l75 + 1)) { + for (int l75 = 0; l75 < 16384; l75 = l75 + 1) { fVec32[l75] = 0.0f; } - for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { + for (int l76 = 0; l76 < 2; l76 = l76 + 1) { fRec64[l76] = 0.0f; } - for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { + for (int l77 = 0; l77 < 2; l77 = l77 + 1) { fVec33[l77] = 0.0f; } - for (int l78 = 0; (l78 < 2); l78 = (l78 + 1)) { + for (int l78 = 0; l78 < 2; l78 = l78 + 1) { fRec21[l78] = 0.0f; } - for (int l79 = 0; (l79 < 2); l79 = (l79 + 1)) { + for (int l79 = 0; l79 < 2; l79 = l79 + 1) { fRec19[l79] = 0.0f; } - for (int l80 = 0; (l80 < 16384); l80 = (l80 + 1)) { + for (int l80 = 0; l80 < 16384; l80 = l80 + 1) { fVec34[l80] = 0.0f; } - for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { + for (int l81 = 0; l81 < 2; l81 = l81 + 1) { fRec66[l81] = 0.0f; } - for (int l82 = 0; (l82 < 2); l82 = (l82 + 1)) { + for (int l82 = 0; l82 < 2; l82 = l82 + 1) { fVec35[l82] = 0.0f; } - for (int l83 = 0; (l83 < 2); l83 = (l83 + 1)) { + for (int l83 = 0; l83 < 2; l83 = l83 + 1) { fRec65[l83] = 0.0f; } - for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { + for (int l84 = 0; l84 < 2; l84 = l84 + 1) { fRec20[l84] = 0.0f; } - for (int l85 = 0; (l85 < 16384); l85 = (l85 + 1)) { + for (int l85 = 0; l85 < 16384; l85 = l85 + 1) { fVec36[l85] = 0.0f; } - for (int l86 = 0; (l86 < 2); l86 = (l86 + 1)) { + for (int l86 = 0; l86 < 2; l86 = l86 + 1) { fRec67[l86] = 0.0f; } - for (int l87 = 0; (l87 < 2); l87 = (l87 + 1)) { + for (int l87 = 0; l87 < 2; l87 = l87 + 1) { fVec37[l87] = 0.0f; } - for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { + for (int l88 = 0; l88 < 2; l88 = l88 + 1) { fRec18[l88] = 0.0f; } - for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { + for (int l89 = 0; l89 < 2; l89 = l89 + 1) { fRec16[l89] = 0.0f; } - for (int l90 = 0; (l90 < 16384); l90 = (l90 + 1)) { + for (int l90 = 0; l90 < 16384; l90 = l90 + 1) { fVec38[l90] = 0.0f; } - for (int l91 = 0; (l91 < 2); l91 = (l91 + 1)) { + for (int l91 = 0; l91 < 2; l91 = l91 + 1) { fRec69[l91] = 0.0f; } - for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + for (int l92 = 0; l92 < 2; l92 = l92 + 1) { fVec39[l92] = 0.0f; } - for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { + for (int l93 = 0; l93 < 2; l93 = l93 + 1) { fRec68[l93] = 0.0f; } - for (int l94 = 0; (l94 < 2); l94 = (l94 + 1)) { + for (int l94 = 0; l94 < 2; l94 = l94 + 1) { fRec17[l94] = 0.0f; } - for (int l95 = 0; (l95 < 16384); l95 = (l95 + 1)) { + for (int l95 = 0; l95 < 16384; l95 = l95 + 1) { fVec40[l95] = 0.0f; } - for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { + for (int l96 = 0; l96 < 2; l96 = l96 + 1) { fRec70[l96] = 0.0f; } - for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { + for (int l97 = 0; l97 < 2; l97 = l97 + 1) { fVec41[l97] = 0.0f; } - for (int l98 = 0; (l98 < 2); l98 = (l98 + 1)) { + for (int l98 = 0; l98 < 2; l98 = l98 + 1) { fRec15[l98] = 0.0f; } - for (int l99 = 0; (l99 < 2); l99 = (l99 + 1)) { + for (int l99 = 0; l99 < 2; l99 = l99 + 1) { fRec13[l99] = 0.0f; } - for (int l100 = 0; (l100 < 16384); l100 = (l100 + 1)) { + for (int l100 = 0; l100 < 16384; l100 = l100 + 1) { fVec42[l100] = 0.0f; } - for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { + for (int l101 = 0; l101 < 2; l101 = l101 + 1) { fRec72[l101] = 0.0f; } - for (int l102 = 0; (l102 < 2); l102 = (l102 + 1)) { + for (int l102 = 0; l102 < 2; l102 = l102 + 1) { fVec43[l102] = 0.0f; } - for (int l103 = 0; (l103 < 2); l103 = (l103 + 1)) { + for (int l103 = 0; l103 < 2; l103 = l103 + 1) { fRec71[l103] = 0.0f; } - for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { + for (int l104 = 0; l104 < 2; l104 = l104 + 1) { fRec14[l104] = 0.0f; } - for (int l105 = 0; (l105 < 16384); l105 = (l105 + 1)) { + for (int l105 = 0; l105 < 16384; l105 = l105 + 1) { fVec44[l105] = 0.0f; } - for (int l106 = 0; (l106 < 2); l106 = (l106 + 1)) { + for (int l106 = 0; l106 < 2; l106 = l106 + 1) { fRec73[l106] = 0.0f; } - for (int l107 = 0; (l107 < 2); l107 = (l107 + 1)) { + for (int l107 = 0; l107 < 2; l107 = l107 + 1) { fVec45[l107] = 0.0f; } - for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { + for (int l108 = 0; l108 < 2; l108 = l108 + 1) { fRec12[l108] = 0.0f; } - for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { + for (int l109 = 0; l109 < 2; l109 = l109 + 1) { fRec10[l109] = 0.0f; } - for (int l110 = 0; (l110 < 16384); l110 = (l110 + 1)) { + for (int l110 = 0; l110 < 16384; l110 = l110 + 1) { fVec46[l110] = 0.0f; } - for (int l111 = 0; (l111 < 2); l111 = (l111 + 1)) { + for (int l111 = 0; l111 < 2; l111 = l111 + 1) { fRec75[l111] = 0.0f; } - for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { + for (int l112 = 0; l112 < 2; l112 = l112 + 1) { fVec47[l112] = 0.0f; } - for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { + for (int l113 = 0; l113 < 2; l113 = l113 + 1) { fRec74[l113] = 0.0f; } - for (int l114 = 0; (l114 < 2); l114 = (l114 + 1)) { + for (int l114 = 0; l114 < 2; l114 = l114 + 1) { fRec11[l114] = 0.0f; } - for (int l115 = 0; (l115 < 16384); l115 = (l115 + 1)) { + for (int l115 = 0; l115 < 16384; l115 = l115 + 1) { fVec48[l115] = 0.0f; } - for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { + for (int l116 = 0; l116 < 2; l116 = l116 + 1) { fRec76[l116] = 0.0f; } - for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { + for (int l117 = 0; l117 < 2; l117 = l117 + 1) { fVec49[l117] = 0.0f; } - for (int l118 = 0; (l118 < 2); l118 = (l118 + 1)) { + for (int l118 = 0; l118 < 2; l118 = l118 + 1) { fRec9[l118] = 0.0f; } - for (int l119 = 0; (l119 < 2); l119 = (l119 + 1)) { + for (int l119 = 0; l119 < 2; l119 = l119 + 1) { fRec7[l119] = 0.0f; } - for (int l120 = 0; (l120 < 16384); l120 = (l120 + 1)) { + for (int l120 = 0; l120 < 16384; l120 = l120 + 1) { fVec50[l120] = 0.0f; } - for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { + for (int l121 = 0; l121 < 2; l121 = l121 + 1) { fRec78[l121] = 0.0f; } - for (int l122 = 0; (l122 < 2); l122 = (l122 + 1)) { + for (int l122 = 0; l122 < 2; l122 = l122 + 1) { fVec51[l122] = 0.0f; } - for (int l123 = 0; (l123 < 2); l123 = (l123 + 1)) { + for (int l123 = 0; l123 < 2; l123 = l123 + 1) { fRec77[l123] = 0.0f; } - for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { + for (int l124 = 0; l124 < 2; l124 = l124 + 1) { fRec8[l124] = 0.0f; } - for (int l125 = 0; (l125 < 16384); l125 = (l125 + 1)) { + for (int l125 = 0; l125 < 16384; l125 = l125 + 1) { fVec52[l125] = 0.0f; } - for (int l126 = 0; (l126 < 2); l126 = (l126 + 1)) { + for (int l126 = 0; l126 < 2; l126 = l126 + 1) { fRec79[l126] = 0.0f; } - for (int l127 = 0; (l127 < 2); l127 = (l127 + 1)) { + for (int l127 = 0; l127 < 2; l127 = l127 + 1) { fVec53[l127] = 0.0f; } - for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { + for (int l128 = 0; l128 < 2; l128 = l128 + 1) { fRec6[l128] = 0.0f; } - for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { + for (int l129 = 0; l129 < 2; l129 = l129 + 1) { fRec4[l129] = 0.0f; } - for (int l130 = 0; (l130 < 16384); l130 = (l130 + 1)) { + for (int l130 = 0; l130 < 16384; l130 = l130 + 1) { fVec54[l130] = 0.0f; } - for (int l131 = 0; (l131 < 2); l131 = (l131 + 1)) { + for (int l131 = 0; l131 < 2; l131 = l131 + 1) { fRec81[l131] = 0.0f; } - for (int l132 = 0; (l132 < 2); l132 = (l132 + 1)) { + for (int l132 = 0; l132 < 2; l132 = l132 + 1) { fVec55[l132] = 0.0f; } - for (int l133 = 0; (l133 < 2); l133 = (l133 + 1)) { + for (int l133 = 0; l133 < 2; l133 = l133 + 1) { fRec80[l133] = 0.0f; } - for (int l134 = 0; (l134 < 2); l134 = (l134 + 1)) { + for (int l134 = 0; l134 < 2; l134 = l134 + 1) { fRec5[l134] = 0.0f; } - for (int l135 = 0; (l135 < 2); l135 = (l135 + 1)) { + for (int l135 = 0; l135 < 2; l135 = l135 + 1) { fRec3[l135] = 0.0f; } - for (int l136 = 0; (l136 < 1024); l136 = (l136 + 1)) { + for (int l136 = 0; l136 < 1024; l136 = l136 + 1) { fRec1[l136] = 0.0f; } - for (int l137 = 0; (l137 < 2); l137 = (l137 + 1)) { + for (int l137 = 0; l137 < 2; l137 = l137 + 1) { fRec82[l137] = 0.0f; } - for (int l138 = 0; (l138 < 1024); l138 = (l138 + 1)) { + for (int l138 = 0; l138 < 1024; l138 = l138 + 1) { fRec2[l138] = 0.0f; } } @@ -1240,389 +1328,384 @@ class fx_greyhole : public fx_greyhole_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.greyhole"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addHorizontalSlider("damping", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("damping", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider6, "unit", "sec"); - ui_interface->addHorizontalSlider("delaytime", &fHslider6, FAUSTFLOAT(0.200000003f), FAUSTFLOAT(0.00100000005f), FAUSTFLOAT(1.45000005f), FAUSTFLOAT(9.99999975e-05f)); - ui_interface->addHorizontalSlider("diffusion", &fHslider2, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(9.99999975e-05f)); + ui_interface->addHorizontalSlider("delaytime", &fHslider6, FAUSTFLOAT(0.2f), FAUSTFLOAT(0.001f), FAUSTFLOAT(1.45f), FAUSTFLOAT(0.0001f)); + ui_interface->addHorizontalSlider("diffusion", &fHslider2, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.0001f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider3, FAUSTFLOAT(0.899999976f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("moddepth", &fHslider4, FAUSTFLOAT(0.100000001f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); - ui_interface->addHorizontalSlider("modfreq", &fHslider5, FAUSTFLOAT(2.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("size", &fHslider7, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(3.0f), FAUSTFLOAT(9.99999975e-05f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider3, FAUSTFLOAT(0.9f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("moddepth", &fHslider4, FAUSTFLOAT(0.1f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); + ui_interface->addHorizontalSlider("modfreq", &fHslider5, FAUSTFLOAT(2.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("size", &fHslider7, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.5f), FAUSTFLOAT(3.0f), FAUSTFLOAT(0.0001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); + float fSlow1 = fConst1 * float(fHslider0); float fSlow2 = float(fHslider1); float fSlow3 = float(fHslider2); float fSlow4 = float(fHslider3); float fSlow5 = float(fHslider4); float fSlow6 = float(fHslider5); - float fSlow7 = std::floor(std::min(65533.0f, (fConst0 * float(fHslider6)))); + float fSlow7 = std::floor(std::min(65533.0f, fConst0 * float(fHslider6))); float fSlow8 = float(fHslider7); - float fSlow9 = (49.0f * fSlow8); - int iSlow10 = int(primes(int(fSlow9))); - float fSlow11 = (9.99999975e-05f * float(iSlow10)); - int iSlow12 = int(primes(int((fSlow9 + 10.0f)))); - float fSlow13 = (9.99999975e-05f * float(iSlow12)); - float fSlow14 = (36.0f * fSlow8); - int iSlow15 = int(primes(int(fSlow14))); - float fSlow16 = (0.00100000005f * float(iSlow15)); - int iSlow17 = int(primes(int((fSlow14 + 10.0f)))); - float fSlow18 = (0.00100000005f * float(iSlow17)); - float fSlow19 = (23.0f * fSlow8); - int iSlow20 = int(primes(int(fSlow19))); - float fSlow21 = (0.00100000005f * float(iSlow20)); - int iSlow22 = int(primes(int((fSlow19 + 10.0f)))); - float fSlow23 = (0.00100000005f * float(iSlow22)); - int iSlow24 = int(primes(int((10.0f * fSlow8)))); - float fSlow25 = (0.00100000005f * float(iSlow24)); - int iSlow26 = int(primes(int((10.0f * (fSlow8 + 1.0f))))); - float fSlow27 = (0.00100000005f * float(iSlow26)); - float fSlow28 = (68.0f * fSlow8); - int iSlow29 = int(primes(int(fSlow28))); - float fSlow30 = (9.99999975e-05f * float(iSlow29)); - int iSlow31 = int(primes(int((fSlow28 + 10.0f)))); - float fSlow32 = (9.99999975e-05f * float(iSlow31)); - float fSlow33 = (55.0f * fSlow8); - int iSlow34 = int(primes(int(fSlow33))); - float fSlow35 = (0.00100000005f * float(iSlow34)); - int iSlow36 = int(primes(int((fSlow33 + 10.0f)))); - float fSlow37 = (0.00100000005f * float(iSlow36)); - float fSlow38 = (42.0f * fSlow8); - int iSlow39 = int(primes(int(fSlow38))); - float fSlow40 = (0.00100000005f * float(iSlow39)); - int iSlow41 = int(primes(int((fSlow38 + 10.0f)))); - float fSlow42 = (0.00100000005f * float(iSlow41)); - float fSlow43 = (29.0f * fSlow8); - int iSlow44 = int(primes(int(fSlow43))); - float fSlow45 = (0.00100000005f * float(iSlow44)); - int iSlow46 = int(primes(int((fSlow43 + 10.0f)))); - float fSlow47 = (0.00100000005f * float(iSlow46)); - float fSlow48 = (87.0f * fSlow8); - int iSlow49 = int(primes(int(fSlow48))); - float fSlow50 = (9.99999975e-05f * float(iSlow49)); - int iSlow51 = int(primes(int((fSlow48 + 10.0f)))); - float fSlow52 = (9.99999975e-05f * float(iSlow51)); - float fSlow53 = (74.0f * fSlow8); - int iSlow54 = int(primes(int(fSlow53))); - float fSlow55 = (0.00100000005f * float(iSlow54)); - int iSlow56 = int(primes(int((fSlow53 + 10.0f)))); - float fSlow57 = (0.00100000005f * float(iSlow56)); - float fSlow58 = (61.0f * fSlow8); - int iSlow59 = int(primes(int(fSlow58))); - float fSlow60 = (0.00100000005f * float(iSlow59)); - int iSlow61 = int(primes(int((fSlow58 + 10.0f)))); - float fSlow62 = (0.00100000005f * float(iSlow61)); - float fSlow63 = (48.0f * fSlow8); - int iSlow64 = int(primes(int(fSlow63))); - float fSlow65 = (0.00100000005f * float(iSlow64)); - int iSlow66 = int(primes(int((fSlow63 + 10.0f)))); - float fSlow67 = (0.00100000005f * float(iSlow66)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow9 = 49.0f * fSlow8; + int iSlow10 = primes(int(fSlow9)); + float fSlow11 = 0.0001f * float(iSlow10); + int iSlow12 = primes(int(fSlow9 + 1e+01f)); + float fSlow13 = 0.0001f * float(iSlow12); + float fSlow14 = 36.0f * fSlow8; + int iSlow15 = primes(int(fSlow14)); + float fSlow16 = 0.001f * float(iSlow15); + int iSlow17 = primes(int(fSlow14 + 1e+01f)); + float fSlow18 = 0.001f * float(iSlow17); + float fSlow19 = 23.0f * fSlow8; + int iSlow20 = primes(int(fSlow19)); + float fSlow21 = 0.001f * float(iSlow20); + int iSlow22 = primes(int(fSlow19 + 1e+01f)); + float fSlow23 = 0.001f * float(iSlow22); + int iSlow24 = primes(int(1e+01f * fSlow8)); + float fSlow25 = 0.001f * float(iSlow24); + int iSlow26 = primes(int(1e+01f * (fSlow8 + 1.0f))); + float fSlow27 = 0.001f * float(iSlow26); + float fSlow28 = 68.0f * fSlow8; + int iSlow29 = primes(int(fSlow28)); + float fSlow30 = 0.0001f * float(iSlow29); + int iSlow31 = primes(int(fSlow28 + 1e+01f)); + float fSlow32 = 0.0001f * float(iSlow31); + float fSlow33 = 55.0f * fSlow8; + int iSlow34 = primes(int(fSlow33)); + float fSlow35 = 0.001f * float(iSlow34); + int iSlow36 = primes(int(fSlow33 + 1e+01f)); + float fSlow37 = 0.001f * float(iSlow36); + float fSlow38 = 42.0f * fSlow8; + int iSlow39 = primes(int(fSlow38)); + float fSlow40 = 0.001f * float(iSlow39); + int iSlow41 = primes(int(fSlow38 + 1e+01f)); + float fSlow42 = 0.001f * float(iSlow41); + float fSlow43 = 29.0f * fSlow8; + int iSlow44 = primes(int(fSlow43)); + float fSlow45 = 0.001f * float(iSlow44); + int iSlow46 = primes(int(fSlow43 + 1e+01f)); + float fSlow47 = 0.001f * float(iSlow46); + float fSlow48 = 87.0f * fSlow8; + int iSlow49 = primes(int(fSlow48)); + float fSlow50 = 0.0001f * float(iSlow49); + int iSlow51 = primes(int(fSlow48 + 1e+01f)); + float fSlow52 = 0.0001f * float(iSlow51); + float fSlow53 = 74.0f * fSlow8; + int iSlow54 = primes(int(fSlow53)); + float fSlow55 = 0.001f * float(iSlow54); + int iSlow56 = primes(int(fSlow53 + 1e+01f)); + float fSlow57 = 0.001f * float(iSlow56); + float fSlow58 = 61.0f * fSlow8; + int iSlow59 = primes(int(fSlow58)); + float fSlow60 = 0.001f * float(iSlow59); + int iSlow61 = primes(int(fSlow58 + 1e+01f)); + float fSlow62 = 0.001f * float(iSlow61); + float fSlow63 = 48.0f * fSlow8; + int iSlow64 = primes(int(fSlow63)); + float fSlow65 = 0.001f * float(iSlow64); + int iSlow66 = primes(int(fSlow63 + 1e+01f)); + float fSlow67 = 0.001f * float(iSlow66); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); iVec0[0] = 1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - float fTemp2 = (1.0f - fRec0[0]); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = 1.0f - fRec0[0]; fVec1[0] = fSlow2; - float fTemp3 = (fSlow2 + fVec1[1]); + float fTemp3 = fSlow2 + fVec1[1]; + float fTemp4 = 1.0f - 0.5f * fTemp3; fVec2[0] = fSlow3; - float fTemp4 = (0.5f * (fSlow3 + fVec2[1])); - float fTemp5 = std::cos(fTemp4); - float fTemp6 = (0.0f - fTemp4); - float fTemp7 = std::cos(fTemp6); - float fTemp8 = float(input1[i0]); - float fTemp9 = (iSlow0 ? 0.0f : fTemp8); + float fTemp5 = 0.5f * (fSlow3 + fVec2[1]); + float fTemp6 = std::cos(fTemp5); + float fTemp7 = 0.0f - fTemp5; + float fTemp8 = std::cos(fTemp7); + float fTemp9 = float(input1[i0]); + float fTemp10 = ((iSlow0) ? 0.0f : fTemp9); fVec3[0] = fSlow4; - float fTemp10 = (fSlow4 + fVec3[1]); + float fTemp11 = fSlow4 + fVec3[1]; fVec4[0] = fSlow5; - float fTemp11 = (fSlow5 + fVec4[1]); + float fTemp12 = fSlow5 + fVec4[1]; fVec5[0] = fSlow6; - float fTemp12 = (fConst4 * (fSlow6 + fVec5[1])); - float fTemp13 = std::sin(fTemp12); - float fTemp14 = std::cos(fTemp12); - fRec40[0] = ((fTemp13 * fRec41[1]) + (fTemp14 * fRec40[1])); - int iTemp15 = (1 - iVec0[1]); - fRec41[0] = ((float(iTemp15) + (fTemp14 * fRec41[1])) - (fTemp13 * fRec40[1])); - float fTemp16 = (fConst3 * (fTemp11 * (fRec40[0] + 1.0f))); - float fTemp17 = (fTemp16 + 8.50000477f); - int iTemp18 = int(fTemp17); - float fTemp19 = std::floor(fTemp17); - float fTemp20 = (fTemp16 + (9.0f - fTemp19)); - float fTemp21 = (fTemp16 + (8.0f - fTemp19)); - float fTemp22 = (fTemp16 + (7.0f - fTemp19)); - float fTemp23 = (fTemp16 + (6.0f - fTemp19)); - float fTemp24 = (fTemp20 * fTemp21); - float fTemp25 = (((((fRec2[((IOTA - (std::min(512, std::max(0, iTemp18)) + 1)) & 1023)] * (0.0f - fTemp20)) * (0.0f - (0.5f * fTemp21))) * (0.0f - (0.333333343f * fTemp22))) * (0.0f - (0.25f * fTemp23))) + ((fTemp16 + (10.0f - fTemp19)) * ((((((fRec2[((IOTA - (std::min(512, std::max(0, (iTemp18 + 1))) + 1)) & 1023)] * (0.0f - fTemp21)) * (0.0f - (0.5f * fTemp22))) * (0.0f - (0.333333343f * fTemp23))) + (0.5f * (((fTemp20 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp18 + 2))) + 1)) & 1023)]) * (0.0f - fTemp22)) * (0.0f - (0.5f * fTemp23))))) + (0.166666672f * ((fTemp24 * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp18 + 3))) + 1)) & 1023)]) * (0.0f - fTemp23)))) + (0.0416666679f * ((fTemp24 * fTemp22) * fRec2[((IOTA - (std::min(512, std::max(0, (iTemp18 + 4))) + 1)) & 1023)]))))); - fVec6[(IOTA & 131071)] = fTemp25; - float fThen3 = (((fRec43[1] == 1.0f) & (fSlow7 != fRec45[1])) ? -4.53514731e-05f : 0.0f); - float fThen5 = (((fRec43[1] == 0.0f) & (fSlow7 != fRec44[1])) ? 4.53514731e-05f : fThen3); - float fElse5 = (((fRec43[1] > 0.0f) & (fRec43[1] < 1.0f)) ? fRec42[1] : 0.0f); - float fTemp26 = ((fRec42[1] != 0.0f) ? fElse5 : fThen5); - fRec42[0] = fTemp26; - fRec43[0] = std::max(0.0f, std::min(1.0f, (fRec43[1] + fTemp26))); + float fTemp13 = fConst4 * (fSlow6 + fVec5[1]); + float fTemp14 = std::sin(fTemp13); + float fTemp15 = std::cos(fTemp13); + fRec40[0] = fRec41[1] * fTemp14 + fRec40[1] * fTemp15; + int iTemp16 = 1 - iVec0[1]; + fRec41[0] = float(iTemp16) + fRec41[1] * fTemp15 - fTemp14 * fRec40[1]; + float fTemp17 = fConst3 * fTemp12 * (fRec40[0] + 1.0f); + float fTemp18 = fTemp17 + 8.500005f; + int iTemp19 = int(fTemp18); + float fTemp20 = std::floor(fTemp18); + float fTemp21 = fTemp17 + (9.0f - fTemp20); + float fTemp22 = fTemp17 + (8.0f - fTemp20); + float fTemp23 = fTemp17 + (7.0f - fTemp20); + float fTemp24 = fTemp17 + (6.0f - fTemp20); + float fTemp25 = fTemp21 * fTemp22; + float fTemp26 = fRec2[(IOTA0 - (std::min(512, std::max(0, iTemp19)) + 1)) & 1023] * (0.0f - fTemp21) * (0.0f - 0.5f * fTemp22) * (0.0f - 0.33333334f * fTemp23) * (0.0f - 0.25f * fTemp24) + (fTemp17 + (1e+01f - fTemp20)) * (fRec2[(IOTA0 - (std::min(512, std::max(0, iTemp19 + 1)) + 1)) & 1023] * (0.0f - fTemp22) * (0.0f - 0.5f * fTemp23) * (0.0f - 0.33333334f * fTemp24) + 0.5f * fTemp21 * fRec2[(IOTA0 - (std::min(512, std::max(0, iTemp19 + 2)) + 1)) & 1023] * (0.0f - fTemp23) * (0.0f - 0.5f * fTemp24) + 0.16666667f * fTemp25 * fRec2[(IOTA0 - (std::min(512, std::max(0, iTemp19 + 3)) + 1)) & 1023] * (0.0f - fTemp24) + 0.041666668f * fTemp25 * fTemp23 * fRec2[(IOTA0 - (std::min(512, std::max(0, iTemp19 + 4)) + 1)) & 1023]); + fVec6[IOTA0 & 131071] = fTemp26; + float fTemp27 = ((fRec42[1] != 0.0f) ? (((fRec43[1] > 0.0f) & (fRec43[1] < 1.0f)) ? fRec42[1] : 0.0f) : (((fRec43[1] == 0.0f) & (fSlow7 != fRec44[1])) ? 4.5351473e-05f : (((fRec43[1] == 1.0f) & (fSlow7 != fRec45[1])) ? -4.5351473e-05f : 0.0f))); + fRec42[0] = fTemp27; + fRec43[0] = std::max(0.0f, std::min(1.0f, fRec43[1] + fTemp27)); fRec44[0] = (((fRec43[1] >= 1.0f) & (fRec45[1] != fSlow7)) ? fSlow7 : fRec44[1]); fRec45[0] = (((fRec43[1] <= 0.0f) & (fRec44[1] != fSlow7)) ? fSlow7 : fRec45[1]); - int iTemp27 = int(std::min(65536.0f, std::max(0.0f, fRec44[0]))); - float fTemp28 = fVec6[((IOTA - iTemp27) & 131071)]; - int iTemp29 = int(std::min(65536.0f, std::max(0.0f, fRec45[0]))); - float fTemp30 = (fTemp9 + (0.5f * (fTemp10 * (fTemp28 + (fRec43[0] * (fVec6[((IOTA - iTemp29) & 131071)] - fTemp28)))))); - float fTemp31 = std::sin(fTemp4); - float fTemp32 = ((fTemp5 * fTemp30) - (fTemp31 * fRec29[1])); - float fTemp33 = ((fTemp5 * fTemp32) - (fTemp31 * fRec32[1])); - float fTemp34 = ((fTemp5 * fTemp33) - (fTemp31 * fRec35[1])); - fVec7[(IOTA & 16383)] = (0.0f - ((fTemp5 * fTemp34) - (fTemp31 * fRec38[1]))); - fRec46[0] = (fSlow11 + (0.999899983f * (fRec46[1] + float((iSlow10 * iTemp15))))); - float fTemp35 = (fRec46[0] + -1.49998999f); - float fTemp36 = fVec7[((IOTA - std::min(8192, std::max(0, int(fTemp35)))) & 16383)]; - fVec8[0] = fTemp36; - float fTemp37 = std::floor(fTemp35); - fRec39[0] = (fVec8[1] - (((fTemp37 + (2.0f - fRec46[0])) * (fRec39[1] - fTemp36)) / (fRec46[0] - fTemp37))); + int iTemp28 = int(std::min(65536.0f, std::max(0.0f, fRec44[0]))); + float fTemp29 = fVec6[(IOTA0 - iTemp28) & 131071]; + int iTemp30 = int(std::min(65536.0f, std::max(0.0f, fRec45[0]))); + float fTemp31 = fTemp10 + 0.5f * fTemp11 * (fTemp29 + fRec43[0] * (fVec6[(IOTA0 - iTemp30) & 131071] - fTemp29)); + float fTemp32 = std::sin(fTemp5); + float fTemp33 = fTemp6 * fTemp31 - fTemp32 * fRec29[1]; + float fTemp34 = fTemp6 * fTemp33 - fTemp32 * fRec32[1]; + float fTemp35 = fTemp6 * fTemp34 - fTemp32 * fRec35[1]; + fVec7[IOTA0 & 16383] = 0.0f - (fTemp6 * fTemp35 - fTemp32 * fRec38[1]); + fRec46[0] = fSlow11 + 0.9999f * (fRec46[1] + float(iSlow10 * iTemp16)); + float fTemp36 = fRec46[0] + -1.49999f; + float fTemp37 = fVec7[(IOTA0 - std::min(8192, std::max(0, int(fTemp36)))) & 16383]; + fVec8[0] = fTemp37; + float fTemp38 = std::floor(fTemp36); + fRec39[0] = fVec8[1] - (fTemp38 + (2.0f - fRec46[0])) * (fRec39[1] - fTemp37) / (fRec46[0] - fTemp38); fRec37[0] = fRec39[0]; - float fTemp38 = (fConst3 * (fTemp11 * (fRec41[0] + 1.0f))); - float fTemp39 = (fTemp38 + 8.50000477f); - int iTemp40 = int(fTemp39); - float fTemp41 = std::floor(fTemp39); - float fTemp42 = (fTemp38 + (9.0f - fTemp41)); - float fTemp43 = (fTemp38 + (8.0f - fTemp41)); - float fTemp44 = (fTemp38 + (7.0f - fTemp41)); - float fTemp45 = (fTemp38 + (6.0f - fTemp41)); - float fTemp46 = (fTemp42 * fTemp43); - float fTemp47 = (((((fRec1[((IOTA - (std::min(512, std::max(0, iTemp40)) + 1)) & 1023)] * (0.0f - fTemp42)) * (0.0f - (0.5f * fTemp43))) * (0.0f - (0.333333343f * fTemp44))) * (0.0f - (0.25f * fTemp45))) + ((fTemp38 + (10.0f - fTemp41)) * ((((((fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 1))) + 1)) & 1023)] * (0.0f - fTemp43)) * (0.0f - (0.5f * fTemp44))) * (0.0f - (0.333333343f * fTemp45))) + (0.5f * (((fTemp42 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 2))) + 1)) & 1023)]) * (0.0f - fTemp44)) * (0.0f - (0.5f * fTemp45))))) + (0.166666672f * ((fTemp46 * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 3))) + 1)) & 1023)]) * (0.0f - fTemp45)))) + (0.0416666679f * ((fTemp46 * fTemp44) * fRec1[((IOTA - (std::min(512, std::max(0, (iTemp40 + 4))) + 1)) & 1023)]))))); - fVec9[(IOTA & 131071)] = fTemp47; - float fTemp48 = fVec9[((IOTA - iTemp27) & 131071)]; - float fTemp49 = (fTemp1 + (0.5f * ((fTemp48 + (fRec43[0] * (fVec9[((IOTA - iTemp29) & 131071)] - fTemp48))) * fTemp10))); - float fTemp50 = ((fTemp49 * fTemp5) - (fTemp31 * fRec28[1])); - float fTemp51 = ((fTemp5 * fTemp50) - (fTemp31 * fRec31[1])); - float fTemp52 = ((fTemp5 * fTemp51) - (fTemp31 * fRec34[1])); - fVec10[(IOTA & 16383)] = ((fTemp5 * fTemp52) - (fTemp31 * fRec37[1])); - fRec48[0] = (fSlow13 + (0.999899983f * (fRec48[1] + float((iSlow12 * iTemp15))))); - float fTemp53 = (fRec48[0] + -1.49998999f); - float fTemp54 = fVec10[((IOTA - std::min(8192, std::max(0, int(fTemp53)))) & 16383)]; - fVec11[0] = fTemp54; - float fTemp55 = std::floor(fTemp53); - fRec47[0] = (fVec11[1] - (((fTemp55 + (2.0f - fRec48[0])) * (fRec47[1] - fTemp54)) / (fRec48[0] - fTemp55))); + float fTemp39 = fConst3 * fTemp12 * (fRec41[0] + 1.0f); + float fTemp40 = fTemp39 + 8.500005f; + int iTemp41 = int(fTemp40); + float fTemp42 = std::floor(fTemp40); + float fTemp43 = fTemp39 + (9.0f - fTemp42); + float fTemp44 = fTemp39 + (8.0f - fTemp42); + float fTemp45 = fTemp39 + (7.0f - fTemp42); + float fTemp46 = fTemp39 + (6.0f - fTemp42); + float fTemp47 = fTemp43 * fTemp44; + float fTemp48 = fRec1[(IOTA0 - (std::min(512, std::max(0, iTemp41)) + 1)) & 1023] * (0.0f - fTemp43) * (0.0f - 0.5f * fTemp44) * (0.0f - 0.33333334f * fTemp45) * (0.0f - 0.25f * fTemp46) + (fTemp39 + (1e+01f - fTemp42)) * (fRec1[(IOTA0 - (std::min(512, std::max(0, iTemp41 + 1)) + 1)) & 1023] * (0.0f - fTemp44) * (0.0f - 0.5f * fTemp45) * (0.0f - 0.33333334f * fTemp46) + 0.5f * fTemp43 * fRec1[(IOTA0 - (std::min(512, std::max(0, iTemp41 + 2)) + 1)) & 1023] * (0.0f - fTemp45) * (0.0f - 0.5f * fTemp46) + 0.16666667f * fTemp47 * fRec1[(IOTA0 - (std::min(512, std::max(0, iTemp41 + 3)) + 1)) & 1023] * (0.0f - fTemp46) + 0.041666668f * fTemp47 * fTemp45 * fRec1[(IOTA0 - (std::min(512, std::max(0, iTemp41 + 4)) + 1)) & 1023]); + fVec9[IOTA0 & 131071] = fTemp48; + float fTemp49 = fVec9[(IOTA0 - iTemp28) & 131071]; + float fTemp50 = fTemp1 + 0.5f * (fTemp49 + fRec43[0] * (fVec9[(IOTA0 - iTemp30) & 131071] - fTemp49)) * fTemp11; + float fTemp51 = fTemp50 * fTemp6 - fTemp32 * fRec28[1]; + float fTemp52 = fTemp6 * fTemp51 - fTemp32 * fRec31[1]; + float fTemp53 = fTemp6 * fTemp52 - fTemp32 * fRec34[1]; + fVec10[IOTA0 & 16383] = fTemp6 * fTemp53 - fTemp32 * fRec37[1]; + fRec48[0] = fSlow13 + 0.9999f * (fRec48[1] + float(iSlow12 * iTemp16)); + float fTemp54 = fRec48[0] + -1.49999f; + float fTemp55 = fVec10[(IOTA0 - std::min(8192, std::max(0, int(fTemp54)))) & 16383]; + fVec11[0] = fTemp55; + float fTemp56 = std::floor(fTemp54); + fRec47[0] = fVec11[1] - (fTemp56 + (2.0f - fRec48[0])) * (fRec47[1] - fTemp55) / (fRec48[0] - fTemp56); fRec38[0] = fRec47[0]; - fVec12[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec38[1]) + (fTemp31 * fTemp34))); - fRec49[0] = (fSlow16 + (0.999000013f * (fRec49[1] + float((iSlow15 * iTemp15))))); - float fTemp56 = (fRec49[0] + -1.49998999f); - float fTemp57 = fVec12[((IOTA - std::min(8192, std::max(0, int(fTemp56)))) & 16383)]; - fVec13[0] = fTemp57; - float fTemp58 = std::floor(fTemp56); - fRec36[0] = (fVec13[1] - (((fTemp58 + (2.0f - fRec49[0])) * (fRec36[1] - fTemp57)) / (fRec49[0] - fTemp58))); + fVec12[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec38[1] + fTemp32 * fTemp35); + fRec49[0] = fSlow16 + 0.999f * (fRec49[1] + float(iSlow15 * iTemp16)); + float fTemp57 = fRec49[0] + -1.49999f; + float fTemp58 = fVec12[(IOTA0 - std::min(8192, std::max(0, int(fTemp57)))) & 16383]; + fVec13[0] = fTemp58; + float fTemp59 = std::floor(fTemp57); + fRec36[0] = fVec13[1] - (fTemp59 + (2.0f - fRec49[0])) * (fRec36[1] - fTemp58) / (fRec49[0] - fTemp59); fRec34[0] = fRec36[0]; - fVec14[(IOTA & 16383)] = ((fRec37[1] * fTemp5) + (fTemp31 * fTemp52)); - fRec51[0] = (fSlow18 + (0.999000013f * (fRec51[1] + float((iSlow17 * iTemp15))))); - float fTemp59 = (fRec51[0] + -1.49998999f); - float fTemp60 = fVec14[((IOTA - std::min(8192, std::max(0, int(fTemp59)))) & 16383)]; - fVec15[0] = fTemp60; - float fTemp61 = std::floor(fTemp59); - fRec50[0] = (fVec15[1] - (((fTemp61 + (2.0f - fRec51[0])) * (fRec50[1] - fTemp60)) / (fRec51[0] - fTemp61))); + fVec14[IOTA0 & 16383] = fRec37[1] * fTemp6 + fTemp32 * fTemp53; + fRec51[0] = fSlow18 + 0.999f * (fRec51[1] + float(iSlow17 * iTemp16)); + float fTemp60 = fRec51[0] + -1.49999f; + float fTemp61 = fVec14[(IOTA0 - std::min(8192, std::max(0, int(fTemp60)))) & 16383]; + fVec15[0] = fTemp61; + float fTemp62 = std::floor(fTemp60); + fRec50[0] = fVec15[1] - (fTemp62 + (2.0f - fRec51[0])) * (fRec50[1] - fTemp61) / (fRec51[0] - fTemp62); fRec35[0] = fRec50[0]; - fVec16[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec35[1]) + (fTemp31 * fTemp33))); - fRec52[0] = (fSlow21 + (0.999000013f * (fRec52[1] + float((iSlow20 * iTemp15))))); - float fTemp62 = (fRec52[0] + -1.49998999f); - float fTemp63 = fVec16[((IOTA - std::min(8192, std::max(0, int(fTemp62)))) & 16383)]; - fVec17[0] = fTemp63; - float fTemp64 = std::floor(fTemp62); - fRec33[0] = (fVec17[1] - (((fTemp64 + (2.0f - fRec52[0])) * (fRec33[1] - fTemp63)) / (fRec52[0] - fTemp64))); + fVec16[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec35[1] + fTemp32 * fTemp34); + fRec52[0] = fSlow21 + 0.999f * (fRec52[1] + float(iSlow20 * iTemp16)); + float fTemp63 = fRec52[0] + -1.49999f; + float fTemp64 = fVec16[(IOTA0 - std::min(8192, std::max(0, int(fTemp63)))) & 16383]; + fVec17[0] = fTemp64; + float fTemp65 = std::floor(fTemp63); + fRec33[0] = fVec17[1] - (fTemp65 + (2.0f - fRec52[0])) * (fRec33[1] - fTemp64) / (fRec52[0] - fTemp65); fRec31[0] = fRec33[0]; - fVec18[(IOTA & 16383)] = ((fRec34[1] * fTemp5) + (fTemp31 * fTemp51)); - fRec54[0] = (fSlow23 + (0.999000013f * (fRec54[1] + float((iSlow22 * iTemp15))))); - float fTemp65 = (fRec54[0] + -1.49998999f); - float fTemp66 = fVec18[((IOTA - std::min(8192, std::max(0, int(fTemp65)))) & 16383)]; - fVec19[0] = fTemp66; - float fTemp67 = std::floor(fTemp65); - fRec53[0] = (fVec19[1] - (((fTemp67 + (2.0f - fRec54[0])) * (fRec53[1] - fTemp66)) / (fRec54[0] - fTemp67))); + fVec18[IOTA0 & 16383] = fRec34[1] * fTemp6 + fTemp32 * fTemp52; + fRec54[0] = fSlow23 + 0.999f * (fRec54[1] + float(iSlow22 * iTemp16)); + float fTemp66 = fRec54[0] + -1.49999f; + float fTemp67 = fVec18[(IOTA0 - std::min(8192, std::max(0, int(fTemp66)))) & 16383]; + fVec19[0] = fTemp67; + float fTemp68 = std::floor(fTemp66); + fRec53[0] = fVec19[1] - (fTemp68 + (2.0f - fRec54[0])) * (fRec53[1] - fTemp67) / (fRec54[0] - fTemp68); fRec32[0] = fRec53[0]; - fVec20[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec32[1]) + (fTemp31 * fTemp32))); - fRec55[0] = (fSlow25 + (0.999000013f * (fRec55[1] + float((iSlow24 * iTemp15))))); - float fTemp68 = (fRec55[0] + -1.49998999f); - float fTemp69 = fVec20[((IOTA - std::min(8192, std::max(0, int(fTemp68)))) & 16383)]; - fVec21[0] = fTemp69; - float fTemp70 = std::floor(fTemp68); - fRec30[0] = (fVec21[1] - (((fTemp70 + (2.0f - fRec55[0])) * (fRec30[1] - fTemp69)) / (fRec55[0] - fTemp70))); + fVec20[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec32[1] + fTemp32 * fTemp33); + fRec55[0] = fSlow25 + 0.999f * (fRec55[1] + float(iSlow24 * iTemp16)); + float fTemp69 = fRec55[0] + -1.49999f; + float fTemp70 = fVec20[(IOTA0 - std::min(8192, std::max(0, int(fTemp69)))) & 16383]; + fVec21[0] = fTemp70; + float fTemp71 = std::floor(fTemp69); + fRec30[0] = fVec21[1] - (fTemp71 + (2.0f - fRec55[0])) * (fRec30[1] - fTemp70) / (fRec55[0] - fTemp71); fRec28[0] = fRec30[0]; - fVec22[(IOTA & 16383)] = ((fRec31[1] * fTemp5) + (fTemp31 * fTemp50)); - fRec57[0] = (fSlow27 + (0.999000013f * (fRec57[1] + float((iSlow26 * iTemp15))))); - float fTemp71 = (fRec57[0] + -1.49998999f); - float fTemp72 = fVec22[((IOTA - std::min(8192, std::max(0, int(fTemp71)))) & 16383)]; - fVec23[0] = fTemp72; - float fTemp73 = std::floor(fTemp71); - fRec56[0] = (fVec23[1] - (((fTemp73 + (2.0f - fRec57[0])) * (fRec56[1] - fTemp72)) / (fRec57[0] - fTemp73))); + fVec22[IOTA0 & 16383] = fRec31[1] * fTemp6 + fTemp32 * fTemp51; + fRec57[0] = fSlow27 + 0.999f * (fRec57[1] + float(iSlow26 * iTemp16)); + float fTemp72 = fRec57[0] + -1.49999f; + float fTemp73 = fVec22[(IOTA0 - std::min(8192, std::max(0, int(fTemp72)))) & 16383]; + fVec23[0] = fTemp73; + float fTemp74 = std::floor(fTemp72); + fRec56[0] = fVec23[1] - (fTemp74 + (2.0f - fRec57[0])) * (fRec56[1] - fTemp73) / (fRec57[0] - fTemp74); fRec29[0] = fRec56[0]; - float fTemp74 = ((fTemp5 * fRec29[1]) + (fTemp31 * fTemp30)); - float fTemp75 = std::sin(fTemp6); - float fTemp76 = ((fTemp7 * fTemp74) - (fTemp75 * fRec17[1])); - float fTemp77 = ((fTemp7 * fTemp76) - (fTemp75 * fRec20[1])); - float fTemp78 = ((fTemp7 * fTemp77) - (fTemp75 * fRec23[1])); - fVec24[(IOTA & 16383)] = (0.0f - ((fTemp7 * fTemp78) - (fTemp75 * fRec26[1]))); - fRec58[0] = (fSlow30 + (0.999899983f * (fRec58[1] + float((iSlow29 * iTemp15))))); - float fTemp79 = (fRec58[0] + -1.49998999f); - float fTemp80 = fVec24[((IOTA - std::min(8192, std::max(0, int(fTemp79)))) & 16383)]; - fVec25[0] = fTemp80; - float fTemp81 = std::floor(fTemp79); - fRec27[0] = (fVec25[1] - (((fTemp81 + (2.0f - fRec58[0])) * (fRec27[1] - fTemp80)) / (fRec58[0] - fTemp81))); + float fTemp75 = fTemp6 * fRec29[1] + fTemp32 * fTemp31; + float fTemp76 = std::sin(fTemp7); + float fTemp77 = fTemp8 * fTemp75 - fTemp76 * fRec17[1]; + float fTemp78 = fTemp8 * fTemp77 - fTemp76 * fRec20[1]; + float fTemp79 = fTemp8 * fTemp78 - fTemp76 * fRec23[1]; + fVec24[IOTA0 & 16383] = 0.0f - (fTemp8 * fTemp79 - fTemp76 * fRec26[1]); + fRec58[0] = fSlow30 + 0.9999f * (fRec58[1] + float(iSlow29 * iTemp16)); + float fTemp80 = fRec58[0] + -1.49999f; + float fTemp81 = fVec24[(IOTA0 - std::min(8192, std::max(0, int(fTemp80)))) & 16383]; + fVec25[0] = fTemp81; + float fTemp82 = std::floor(fTemp80); + fRec27[0] = fVec25[1] - (fTemp82 + (2.0f - fRec58[0])) * (fRec27[1] - fTemp81) / (fRec58[0] - fTemp82); fRec25[0] = fRec27[0]; - float fTemp82 = ((fRec28[1] * fTemp5) + (fTemp31 * fTemp49)); - float fTemp83 = ((fTemp82 * fTemp7) - (fTemp75 * fRec16[1])); - float fTemp84 = ((fTemp7 * fTemp83) - (fTemp75 * fRec19[1])); - float fTemp85 = ((fTemp7 * fTemp84) - (fTemp75 * fRec22[1])); - fVec26[(IOTA & 16383)] = ((fTemp7 * fTemp85) - (fRec25[1] * fTemp75)); - fRec60[0] = (fSlow32 + (0.999899983f * (fRec60[1] + float((iSlow31 * iTemp15))))); - float fTemp86 = (fRec60[0] + -1.49998999f); - float fTemp87 = fVec26[((IOTA - std::min(8192, std::max(0, int(fTemp86)))) & 16383)]; - fVec27[0] = fTemp87; - float fTemp88 = std::floor(fTemp86); - fRec59[0] = (fVec27[1] - (((fTemp88 + (2.0f - fRec60[0])) * (fRec59[1] - fTemp87)) / (fRec60[0] - fTemp88))); + float fTemp83 = fRec28[1] * fTemp6 + fTemp32 * fTemp50; + float fTemp84 = fTemp83 * fTemp8 - fTemp76 * fRec16[1]; + float fTemp85 = fTemp8 * fTemp84 - fTemp76 * fRec19[1]; + float fTemp86 = fTemp8 * fTemp85 - fTemp76 * fRec22[1]; + fVec26[IOTA0 & 16383] = fTemp8 * fTemp86 - fRec25[1] * fTemp76; + fRec60[0] = fSlow32 + 0.9999f * (fRec60[1] + float(iSlow31 * iTemp16)); + float fTemp87 = fRec60[0] + -1.49999f; + float fTemp88 = fVec26[(IOTA0 - std::min(8192, std::max(0, int(fTemp87)))) & 16383]; + fVec27[0] = fTemp88; + float fTemp89 = std::floor(fTemp87); + fRec59[0] = fVec27[1] - (fTemp89 + (2.0f - fRec60[0])) * (fRec59[1] - fTemp88) / (fRec60[0] - fTemp89); fRec26[0] = fRec59[0]; - fVec28[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec26[1]) + (fTemp75 * fTemp78))); - fRec61[0] = (fSlow35 + (0.999000013f * (fRec61[1] + float((iSlow34 * iTemp15))))); - float fTemp89 = (fRec61[0] + -1.49998999f); - float fTemp90 = fVec28[((IOTA - std::min(8192, std::max(0, int(fTemp89)))) & 16383)]; - fVec29[0] = fTemp90; - float fTemp91 = std::floor(fTemp89); - fRec24[0] = (fVec29[1] - (((fTemp91 + (2.0f - fRec61[0])) * (fRec24[1] - fTemp90)) / (fRec61[0] - fTemp91))); + fVec28[IOTA0 & 16383] = 0.0f - (fTemp8 * fRec26[1] + fTemp76 * fTemp79); + fRec61[0] = fSlow35 + 0.999f * (fRec61[1] + float(iSlow34 * iTemp16)); + float fTemp90 = fRec61[0] + -1.49999f; + float fTemp91 = fVec28[(IOTA0 - std::min(8192, std::max(0, int(fTemp90)))) & 16383]; + fVec29[0] = fTemp91; + float fTemp92 = std::floor(fTemp90); + fRec24[0] = fVec29[1] + (fTemp92 + (2.0f - fRec61[0])) * (fTemp91 - fRec24[1]) / (fRec61[0] - fTemp92); fRec22[0] = fRec24[0]; - fVec30[(IOTA & 16383)] = ((fRec25[1] * fTemp7) + (fTemp75 * fTemp85)); - fRec63[0] = (fSlow37 + (0.999000013f * (fRec63[1] + float((iSlow36 * iTemp15))))); - float fTemp92 = (fRec63[0] + -1.49998999f); - float fTemp93 = fVec30[((IOTA - std::min(8192, std::max(0, int(fTemp92)))) & 16383)]; - fVec31[0] = fTemp93; - float fTemp94 = std::floor(fTemp92); - fRec62[0] = (fVec31[1] - (((fTemp94 + (2.0f - fRec63[0])) * (fRec62[1] - fTemp93)) / (fRec63[0] - fTemp94))); + fVec30[IOTA0 & 16383] = fRec25[1] * fTemp8 + fTemp76 * fTemp86; + fRec63[0] = fSlow37 + 0.999f * (fRec63[1] + float(iSlow36 * iTemp16)); + float fTemp93 = fRec63[0] + -1.49999f; + float fTemp94 = fVec30[(IOTA0 - std::min(8192, std::max(0, int(fTemp93)))) & 16383]; + fVec31[0] = fTemp94; + float fTemp95 = std::floor(fTemp93); + fRec62[0] = fVec31[1] - (fTemp95 + (2.0f - fRec63[0])) * (fRec62[1] - fTemp94) / (fRec63[0] - fTemp95); fRec23[0] = fRec62[0]; - fVec32[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec23[1]) + (fTemp75 * fTemp77))); - fRec64[0] = (fSlow40 + (0.999000013f * (fRec64[1] + float((iSlow39 * iTemp15))))); - float fTemp95 = (fRec64[0] + -1.49998999f); - float fTemp96 = fVec32[((IOTA - std::min(8192, std::max(0, int(fTemp95)))) & 16383)]; - fVec33[0] = fTemp96; - float fTemp97 = std::floor(fTemp95); - fRec21[0] = (fVec33[1] - (((fTemp97 + (2.0f - fRec64[0])) * (fRec21[1] - fTemp96)) / (fRec64[0] - fTemp97))); + fVec32[IOTA0 & 16383] = 0.0f - (fTemp8 * fRec23[1] + fTemp76 * fTemp78); + fRec64[0] = fSlow40 + 0.999f * (fRec64[1] + float(iSlow39 * iTemp16)); + float fTemp96 = fRec64[0] + -1.49999f; + float fTemp97 = fVec32[(IOTA0 - std::min(8192, std::max(0, int(fTemp96)))) & 16383]; + fVec33[0] = fTemp97; + float fTemp98 = std::floor(fTemp96); + fRec21[0] = fVec33[1] - (fTemp98 + (2.0f - fRec64[0])) * (fRec21[1] - fTemp97) / (fRec64[0] - fTemp98); fRec19[0] = fRec21[0]; - fVec34[(IOTA & 16383)] = ((fRec22[1] * fTemp7) + (fTemp75 * fTemp84)); - fRec66[0] = (fSlow42 + (0.999000013f * (fRec66[1] + float((iSlow41 * iTemp15))))); - float fTemp98 = (fRec66[0] + -1.49998999f); - float fTemp99 = fVec34[((IOTA - std::min(8192, std::max(0, int(fTemp98)))) & 16383)]; - fVec35[0] = fTemp99; - float fTemp100 = std::floor(fTemp98); - fRec65[0] = (fVec35[1] - (((fTemp100 + (2.0f - fRec66[0])) * (fRec65[1] - fTemp99)) / (fRec66[0] - fTemp100))); + fVec34[IOTA0 & 16383] = fRec22[1] * fTemp8 + fTemp76 * fTemp85; + fRec66[0] = fSlow42 + 0.999f * (fRec66[1] + float(iSlow41 * iTemp16)); + float fTemp99 = fRec66[0] + -1.49999f; + float fTemp100 = fVec34[(IOTA0 - std::min(8192, std::max(0, int(fTemp99)))) & 16383]; + fVec35[0] = fTemp100; + float fTemp101 = std::floor(fTemp99); + fRec65[0] = fVec35[1] - (fTemp101 + (2.0f - fRec66[0])) * (fRec65[1] - fTemp100) / (fRec66[0] - fTemp101); fRec20[0] = fRec65[0]; - fVec36[(IOTA & 16383)] = (0.0f - ((fTemp7 * fRec20[1]) + (fTemp75 * fTemp76))); - fRec67[0] = (fSlow45 + (0.999000013f * (fRec67[1] + float((iSlow44 * iTemp15))))); - float fTemp101 = (fRec67[0] + -1.49998999f); - float fTemp102 = fVec36[((IOTA - std::min(8192, std::max(0, int(fTemp101)))) & 16383)]; - fVec37[0] = fTemp102; - float fTemp103 = std::floor(fTemp101); - fRec18[0] = (fVec37[1] - (((fTemp103 + (2.0f - fRec67[0])) * (fRec18[1] - fTemp102)) / (fRec67[0] - fTemp103))); + fVec36[IOTA0 & 16383] = 0.0f - (fTemp8 * fRec20[1] + fTemp76 * fTemp77); + fRec67[0] = fSlow45 + 0.999f * (fRec67[1] + float(iSlow44 * iTemp16)); + float fTemp102 = fRec67[0] + -1.49999f; + float fTemp103 = fVec36[(IOTA0 - std::min(8192, std::max(0, int(fTemp102)))) & 16383]; + fVec37[0] = fTemp103; + float fTemp104 = std::floor(fTemp102); + fRec18[0] = fVec37[1] - (fTemp104 + (2.0f - fRec67[0])) * (fRec18[1] - fTemp103) / (fRec67[0] - fTemp104); fRec16[0] = fRec18[0]; - fVec38[(IOTA & 16383)] = ((fRec19[1] * fTemp7) + (fTemp75 * fTemp83)); - fRec69[0] = (fSlow47 + (0.999000013f * (fRec69[1] + float((iSlow46 * iTemp15))))); - float fTemp104 = (fRec69[0] + -1.49998999f); - float fTemp105 = fVec38[((IOTA - std::min(8192, std::max(0, int(fTemp104)))) & 16383)]; - fVec39[0] = fTemp105; - float fTemp106 = std::floor(fTemp104); - fRec68[0] = (fVec39[1] - (((fTemp106 + (2.0f - fRec69[0])) * (fRec68[1] - fTemp105)) / (fRec69[0] - fTemp106))); + fVec38[IOTA0 & 16383] = fRec19[1] * fTemp8 + fTemp76 * fTemp84; + fRec69[0] = fSlow47 + 0.999f * (fRec69[1] + float(iSlow46 * iTemp16)); + float fTemp105 = fRec69[0] + -1.49999f; + float fTemp106 = fVec38[(IOTA0 - std::min(8192, std::max(0, int(fTemp105)))) & 16383]; + fVec39[0] = fTemp106; + float fTemp107 = std::floor(fTemp105); + fRec68[0] = fVec39[1] - (fTemp107 + (2.0f - fRec69[0])) * (fRec68[1] - fTemp106) / (fRec69[0] - fTemp107); fRec17[0] = fRec68[0]; - float fTemp107 = ((fTemp7 * fRec17[1]) + (fTemp75 * fTemp74)); - float fTemp108 = ((fTemp5 * fTemp107) - (fTemp31 * fRec5[1])); - float fTemp109 = ((fTemp5 * fTemp108) - (fTemp31 * fRec8[1])); - float fTemp110 = ((fTemp5 * fTemp109) - (fTemp31 * fRec11[1])); - fVec40[(IOTA & 16383)] = (0.0f - ((fTemp5 * fTemp110) - (fTemp31 * fRec14[1]))); - fRec70[0] = (fSlow50 + (0.999899983f * (fRec70[1] + float((iSlow49 * iTemp15))))); - float fTemp111 = (fRec70[0] + -1.49998999f); - float fTemp112 = fVec40[((IOTA - std::min(8192, std::max(0, int(fTemp111)))) & 16383)]; - fVec41[0] = fTemp112; - float fTemp113 = std::floor(fTemp111); - fRec15[0] = (fVec41[1] - (((fTemp113 + (2.0f - fRec70[0])) * (fRec15[1] - fTemp112)) / (fRec70[0] - fTemp113))); + float fTemp108 = fTemp8 * fRec17[1] + fTemp76 * fTemp75; + float fTemp109 = fTemp6 * fTemp108 - fTemp32 * fRec5[1]; + float fTemp110 = fTemp6 * fTemp109 - fTemp32 * fRec8[1]; + float fTemp111 = fTemp6 * fTemp110 - fTemp32 * fRec11[1]; + fVec40[IOTA0 & 16383] = 0.0f - (fTemp6 * fTemp111 - fTemp32 * fRec14[1]); + fRec70[0] = fSlow50 + 0.9999f * (fRec70[1] + float(iSlow49 * iTemp16)); + float fTemp112 = fRec70[0] + -1.49999f; + float fTemp113 = fVec40[(IOTA0 - std::min(8192, std::max(0, int(fTemp112)))) & 16383]; + fVec41[0] = fTemp113; + float fTemp114 = std::floor(fTemp112); + fRec15[0] = fVec41[1] - (fTemp114 + (2.0f - fRec70[0])) * (fRec15[1] - fTemp113) / (fRec70[0] - fTemp114); fRec13[0] = fRec15[0]; - float fTemp114 = ((fRec16[1] * fTemp7) + (fTemp75 * fTemp82)); - float fTemp115 = ((fTemp5 * fTemp114) - (fTemp31 * fRec4[1])); - float fTemp116 = ((fTemp5 * fTemp115) - (fTemp31 * fRec7[1])); - float fTemp117 = ((fTemp5 * fTemp116) - (fTemp31 * fRec10[1])); - fVec42[(IOTA & 16383)] = ((fTemp5 * fTemp117) - (fRec13[1] * fTemp31)); - fRec72[0] = (fSlow52 + (0.999899983f * (fRec72[1] + float((iSlow51 * iTemp15))))); - float fTemp118 = (fRec72[0] + -1.49998999f); - float fTemp119 = fVec42[((IOTA - std::min(8192, std::max(0, int(fTemp118)))) & 16383)]; - fVec43[0] = fTemp119; - float fTemp120 = std::floor(fTemp118); - fRec71[0] = (fVec43[1] - (((fTemp120 + (2.0f - fRec72[0])) * (fRec71[1] - fTemp119)) / (fRec72[0] - fTemp120))); + float fTemp115 = fRec16[1] * fTemp8 + fTemp76 * fTemp83; + float fTemp116 = fTemp6 * fTemp115 - fTemp32 * fRec4[1]; + float fTemp117 = fTemp6 * fTemp116 - fTemp32 * fRec7[1]; + float fTemp118 = fTemp6 * fTemp117 - fTemp32 * fRec10[1]; + fVec42[IOTA0 & 16383] = fTemp6 * fTemp118 - fRec13[1] * fTemp32; + fRec72[0] = fSlow52 + 0.9999f * (fRec72[1] + float(iSlow51 * iTemp16)); + float fTemp119 = fRec72[0] + -1.49999f; + float fTemp120 = fVec42[(IOTA0 - std::min(8192, std::max(0, int(fTemp119)))) & 16383]; + fVec43[0] = fTemp120; + float fTemp121 = std::floor(fTemp119); + fRec71[0] = fVec43[1] - (fTemp121 + (2.0f - fRec72[0])) * (fRec71[1] - fTemp120) / (fRec72[0] - fTemp121); fRec14[0] = fRec71[0]; - fVec44[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec14[1]) + (fTemp31 * fTemp110))); - fRec73[0] = (fSlow55 + (0.999000013f * (fRec73[1] + float((iSlow54 * iTemp15))))); - float fTemp121 = (fRec73[0] + -1.49998999f); - float fTemp122 = fVec44[((IOTA - std::min(8192, std::max(0, int(fTemp121)))) & 16383)]; - fVec45[0] = fTemp122; - float fTemp123 = std::floor(fTemp121); - fRec12[0] = (fVec45[1] - (((fTemp123 + (2.0f - fRec73[0])) * (fRec12[1] - fTemp122)) / (fRec73[0] - fTemp123))); + fVec44[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec14[1] + fTemp32 * fTemp111); + fRec73[0] = fSlow55 + 0.999f * (fRec73[1] + float(iSlow54 * iTemp16)); + float fTemp122 = fRec73[0] + -1.49999f; + float fTemp123 = fVec44[(IOTA0 - std::min(8192, std::max(0, int(fTemp122)))) & 16383]; + fVec45[0] = fTemp123; + float fTemp124 = std::floor(fTemp122); + fRec12[0] = fVec45[1] - (fTemp124 + (2.0f - fRec73[0])) * (fRec12[1] - fTemp123) / (fRec73[0] - fTemp124); fRec10[0] = fRec12[0]; - fVec46[(IOTA & 16383)] = ((fRec13[1] * fTemp5) + (fTemp31 * fTemp117)); - fRec75[0] = (fSlow57 + (0.999000013f * (fRec75[1] + float((iSlow56 * iTemp15))))); - float fTemp124 = (fRec75[0] + -1.49998999f); - float fTemp125 = fVec46[((IOTA - std::min(8192, std::max(0, int(fTemp124)))) & 16383)]; - fVec47[0] = fTemp125; - float fTemp126 = std::floor(fTemp124); - fRec74[0] = (fVec47[1] - (((fTemp126 + (2.0f - fRec75[0])) * (fRec74[1] - fTemp125)) / (fRec75[0] - fTemp126))); + fVec46[IOTA0 & 16383] = fRec13[1] * fTemp6 + fTemp32 * fTemp118; + fRec75[0] = fSlow57 + 0.999f * (fRec75[1] + float(iSlow56 * iTemp16)); + float fTemp125 = fRec75[0] + -1.49999f; + float fTemp126 = fVec46[(IOTA0 - std::min(8192, std::max(0, int(fTemp125)))) & 16383]; + fVec47[0] = fTemp126; + float fTemp127 = std::floor(fTemp125); + fRec74[0] = fVec47[1] - (fTemp127 + (2.0f - fRec75[0])) * (fRec74[1] - fTemp126) / (fRec75[0] - fTemp127); fRec11[0] = fRec74[0]; - fVec48[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec11[1]) + (fTemp31 * fTemp109))); - fRec76[0] = (fSlow60 + (0.999000013f * (fRec76[1] + float((iSlow59 * iTemp15))))); - float fTemp127 = (fRec76[0] + -1.49998999f); - float fTemp128 = fVec48[((IOTA - std::min(8192, std::max(0, int(fTemp127)))) & 16383)]; - fVec49[0] = fTemp128; - float fTemp129 = std::floor(fTemp127); - fRec9[0] = (fVec49[1] - (((fTemp129 + (2.0f - fRec76[0])) * (fRec9[1] - fTemp128)) / (fRec76[0] - fTemp129))); + fVec48[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec11[1] + fTemp32 * fTemp110); + fRec76[0] = fSlow60 + 0.999f * (fRec76[1] + float(iSlow59 * iTemp16)); + float fTemp128 = fRec76[0] + -1.49999f; + float fTemp129 = fVec48[(IOTA0 - std::min(8192, std::max(0, int(fTemp128)))) & 16383]; + fVec49[0] = fTemp129; + float fTemp130 = std::floor(fTemp128); + fRec9[0] = fVec49[1] - (fTemp130 + (2.0f - fRec76[0])) * (fRec9[1] - fTemp129) / (fRec76[0] - fTemp130); fRec7[0] = fRec9[0]; - fVec50[(IOTA & 16383)] = ((fRec10[1] * fTemp5) + (fTemp31 * fTemp116)); - fRec78[0] = (fSlow62 + (0.999000013f * (fRec78[1] + float((iSlow61 * iTemp15))))); - float fTemp130 = (fRec78[0] + -1.49998999f); - float fTemp131 = fVec50[((IOTA - std::min(8192, std::max(0, int(fTemp130)))) & 16383)]; - fVec51[0] = fTemp131; - float fTemp132 = std::floor(fTemp130); - fRec77[0] = (fVec51[1] - (((fTemp132 + (2.0f - fRec78[0])) * (fRec77[1] - fTemp131)) / (fRec78[0] - fTemp132))); + fVec50[IOTA0 & 16383] = fRec10[1] * fTemp6 + fTemp32 * fTemp117; + fRec78[0] = fSlow62 + 0.999f * (fRec78[1] + float(iSlow61 * iTemp16)); + float fTemp131 = fRec78[0] + -1.49999f; + float fTemp132 = fVec50[(IOTA0 - std::min(8192, std::max(0, int(fTemp131)))) & 16383]; + fVec51[0] = fTemp132; + float fTemp133 = std::floor(fTemp131); + fRec77[0] = fVec51[1] + (fTemp133 + (2.0f - fRec78[0])) * (fTemp132 - fRec77[1]) / (fRec78[0] - fTemp133); fRec8[0] = fRec77[0]; - fVec52[(IOTA & 16383)] = (0.0f - ((fTemp5 * fRec8[1]) + (fTemp31 * fTemp108))); - fRec79[0] = (fSlow65 + (0.999000013f * (fRec79[1] + float((iSlow64 * iTemp15))))); - float fTemp133 = (fRec79[0] + -1.49998999f); - float fTemp134 = fVec52[((IOTA - std::min(8192, std::max(0, int(fTemp133)))) & 16383)]; - fVec53[0] = fTemp134; - float fTemp135 = std::floor(fTemp133); - fRec6[0] = (fVec53[1] - (((fTemp135 + (2.0f - fRec79[0])) * (fRec6[1] - fTemp134)) / (fRec79[0] - fTemp135))); + fVec52[IOTA0 & 16383] = 0.0f - (fTemp6 * fRec8[1] + fTemp32 * fTemp109); + fRec79[0] = fSlow65 + 0.999f * (fRec79[1] + float(iSlow64 * iTemp16)); + float fTemp134 = fRec79[0] + -1.49999f; + float fTemp135 = fVec52[(IOTA0 - std::min(8192, std::max(0, int(fTemp134)))) & 16383]; + fVec53[0] = fTemp135; + float fTemp136 = std::floor(fTemp134); + fRec6[0] = fVec53[1] - (fTemp136 + (2.0f - fRec79[0])) * (fRec6[1] - fTemp135) / (fRec79[0] - fTemp136); fRec4[0] = fRec6[0]; - fVec54[(IOTA & 16383)] = ((fRec7[1] * fTemp5) + (fTemp31 * fTemp115)); - fRec81[0] = (fSlow67 + (0.999000013f * (fRec81[1] + float((iSlow66 * iTemp15))))); - float fTemp136 = (fRec81[0] + -1.49998999f); - float fTemp137 = fVec54[((IOTA - std::min(8192, std::max(0, int(fTemp136)))) & 16383)]; - fVec55[0] = fTemp137; - float fTemp138 = std::floor(fTemp136); - fRec80[0] = (fVec55[1] - (((fTemp138 + (2.0f - fRec81[0])) * (fRec80[1] - fTemp137)) / (fRec81[0] - fTemp138))); + fVec54[IOTA0 & 16383] = fRec7[1] * fTemp6 + fTemp32 * fTemp116; + fRec81[0] = fSlow67 + 0.999f * (fRec81[1] + float(iSlow66 * iTemp16)); + float fTemp137 = fRec81[0] + -1.49999f; + float fTemp138 = fVec54[(IOTA0 - std::min(8192, std::max(0, int(fTemp137)))) & 16383]; + fVec55[0] = fTemp138; + float fTemp139 = std::floor(fTemp137); + fRec80[0] = fVec55[1] - (fTemp139 + (2.0f - fRec81[0])) * (fRec80[1] - fTemp138) / (fRec81[0] - fTemp139); fRec5[0] = fRec80[0]; - float fTemp139 = (1.0f - (0.5f * fTemp3)); - fRec3[0] = ((0.5f * (fTemp3 * fRec3[1])) + (((fRec4[1] * fTemp5) + (fTemp31 * fTemp114)) * fTemp139)); - fRec1[(IOTA & 1023)] = fRec3[0]; - fRec82[0] = ((0.5f * (fTemp3 * fRec82[1])) + (fTemp139 * ((fTemp5 * fRec5[1]) + (fTemp31 * fTemp107)))); - fRec2[(IOTA & 1023)] = fRec82[0]; - float fThen8 = ((fTemp1 * fTemp2) + (fRec0[0] * fRec1[((IOTA - 0) & 1023)])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen8)); - float fThen9 = ((fTemp2 * fTemp9) + (fRec0[0] * fRec2[((IOTA - 0) & 1023)])); - output1[i0] = FAUSTFLOAT((iSlow0 ? fTemp8 : fThen9)); + fRec3[0] = fTemp4 * (fRec4[1] * fTemp6 + fTemp32 * fTemp115) + 0.5f * fTemp3 * fRec3[1]; + fRec1[IOTA0 & 1023] = fRec3[0]; + fRec82[0] = fTemp4 * (fTemp6 * fRec5[1] + fTemp32 * fTemp108) + 0.5f * fTemp3 * fRec82[1]; + fRec2[IOTA0 & 1023] = fRec82[0]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * fTemp2 + fRec0[0] * fRec1[IOTA0 & 1023])); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp9 : fTemp2 * fTemp10 + fRec0[0] * fRec2[IOTA0 & 1023])); iVec0[1] = iVec0[0]; fRec0[1] = fRec0[0]; fVec1[1] = fVec1[0]; fVec2[1] = fVec2[0]; fVec3[1] = fVec3[0]; + IOTA0 = IOTA0 + 1; fVec4[1] = fVec4[0]; fVec5[1] = fVec5[0]; fRec40[1] = fRec40[0]; fRec41[1] = fRec41[0]; - IOTA = (IOTA + 1); fRec42[1] = fRec42[0]; fRec43[1] = fRec43[0]; fRec44[1] = fRec44[0]; diff --git a/ceammc/ext/src/fx/fx_jcrev.cpp b/ceammc/ext/src/fx/fx_jcrev.cpp new file mode 100644 index 0000000000..a454289fff --- /dev/null +++ b/ceammc/ext/src/fx/fx_jcrev.cpp @@ -0,0 +1,43 @@ +#include "fx_jcrev.h" +#include "ceammc_factory.h" + +using namespace ceammc; + +class FxJCReverb : public faust_fx_jcrev_tilde { + Property* drywet_; + +public: + FxJCReverb(const PdArgs& args) + : faust_fx_jcrev_tilde(args) + , drywet_(property("@drywet")) + { + if (drywet_) + drywet_->setArgIndex(0); + + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (drywet_) + drywet_->set(lv); + } +}; + +void setup_fx_jcrev_tilde() +{ + SoundExternalFactory obj("fx.jcrev~"); + obj.addMethod("reset", &FxJCReverb::m_reset); + + obj.setXletsInfo( + { + "signal: input", + "float: drywet mix", + }, + { + "signal: 1 output", + "signal: 2 output", + "signal: 3 output", + "signal: 4 output", + }); +} diff --git a/ceammc/ext/src/fx/fx_jcrev.h b/ceammc/ext/src/fx/fx_jcrev.h new file mode 100644 index 0000000000..6242d060d0 --- /dev/null +++ b/ceammc/ext/src/fx/fx_jcrev.h @@ -0,0 +1,923 @@ +/* ------------------------------------------------------------ +name: "fx.jcrev" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_jcrev -scn fx_jcrev_dsp -es 1 -mcd 16 -single -ftz 0 +------------------------------------------------------------ */ + +#ifndef __fx_jcrev_H__ +#define __fx_jcrev_H__ + +// FAUST Architecture File for ceammc::SoundExternal class +#include +#include +#include +#include +#include + +/************************** BEGIN fx_jcrev_dsp.h ******************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +struct FAUST_API UI; +struct FAUST_API Meta; + +/** + * DSP memory manager. + */ + +struct FAUST_API dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ + virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class FAUST_API fx_jcrev_dsp { + + public: + + fx_jcrev_dsp() {} + virtual ~fx_jcrev_dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'openTabBox', 'addButton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Return the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void init(int sample_rate) = 0; + + /** + * Init instance state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceInit(int sample_rate) = 0; + + /** + * Init instance constant state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceConstants(int sample_rate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (like delay lines...) but keep the control parameter values */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual fx_jcrev_dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * + */ + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class FAUST_API decorator_dsp : public fx_jcrev_dsp { + + protected: + + fx_jcrev_dsp* fDSP; + + public: + + decorator_dsp(fx_jcrev_dsp* fx_jcrev_dsp = nullptr):fDSP(fx_jcrev_dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class, used with LLVM and Interpreter backends + * to create DSP instances from a compiled DSP program. + */ + +class FAUST_API dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual fx_jcrev_dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +// Denormal handling + +#if defined (__SSE__) +#include +#endif + +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + +#endif + +/************************** END fx_jcrev_dsp.h **************************/ +/************************** BEGIN UI.h ***************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ********************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +template +struct FAUST_API UIReal { + + UIReal() {} + virtual ~UIReal() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + + // To be used by LLVM client + virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } +}; + +struct FAUST_API UI : public UIReal { + UI() {} + virtual ~UI() {} +}; + +#endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h ******************************* + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + + +/** + The base class of Meta handler to be used in fx_jcrev_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. + */ +struct FAUST_API Meta { + virtual ~Meta() {} + virtual void declare(const char* key, const char* value) = 0; +}; + +#endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include +#include +#include + + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key] = value; } +}; + +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< +#include +#include +#include + +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_jcrev +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + +class fx_jcrev : public fx_jcrev_dsp { + + private: + + int fSampleRate; + float fConst1; + FAUSTFLOAT fCheckbox0; + float fRec0[2]; + float fConst2; + FAUSTFLOAT fHslider0; + float fConst3; + float fRec1[2]; + int IOTA0; + float fVec0[512]; + float fRec8[2]; + float fVec1[128]; + float fRec6[2]; + float fVec2[64]; + float fRec4[2]; + float fVec3[2048]; + float fRec2[2]; + float fRec3[2]; + float fVec4[2048]; + float fRec10[2]; + float fRec11[2]; + float fVec5[4096]; + float fRec12[2]; + float fRec13[2]; + float fVec6[4096]; + float fRec14[2]; + float fRec15[2]; + + public: + + void metadata(Meta* m) { + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.8"); + m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); + m->declare("ceammc_ui.lib/version", "0.1.2"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_jcrev -scn fx_jcrev_dsp -es 1 -mcd 16 -single -ftz 0"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_jcrev.dsp"); + m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fb_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/fb_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fb_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/rev1:author", "Julius O. Smith III"); + m->declare("filters.lib/rev1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/rev1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/rev2:author", "Julius O. Smith III"); + m->declare("filters.lib/rev2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/rev2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/version", "0.3"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.5"); + m->declare("name", "fx.jcrev"); + m->declare("platform.lib/name", "Generic Platform Library"); + m->declare("platform.lib/version", "0.2"); + m->declare("reverbs.lib/name", "Faust Reverb Library"); + m->declare("reverbs.lib/version", "0.2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.3"); + } + + virtual int getNumInputs() { + return 1; + } + virtual int getNumOutputs() { + return 4; + } + + static void classInit(int sample_rate) { + } + + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 2e+01f / fConst0; + fConst2 = 44.1f / fConst0; + fConst3 = 1.0f - fConst2; + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0f); + fHslider0 = FAUSTFLOAT(0.4f); + } + + virtual void instanceClear() { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; + } + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { + fRec1[l1] = 0.0f; + } + IOTA0 = 0; + for (int l2 = 0; l2 < 512; l2 = l2 + 1) { + fVec0[l2] = 0.0f; + } + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec8[l3] = 0.0f; + } + for (int l4 = 0; l4 < 128; l4 = l4 + 1) { + fVec1[l4] = 0.0f; + } + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec6[l5] = 0.0f; + } + for (int l6 = 0; l6 < 64; l6 = l6 + 1) { + fVec2[l6] = 0.0f; + } + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { + fRec4[l7] = 0.0f; + } + for (int l8 = 0; l8 < 2048; l8 = l8 + 1) { + fVec3[l8] = 0.0f; + } + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { + fRec2[l9] = 0.0f; + } + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { + fRec3[l10] = 0.0f; + } + for (int l11 = 0; l11 < 2048; l11 = l11 + 1) { + fVec4[l11] = 0.0f; + } + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { + fRec10[l12] = 0.0f; + } + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { + fRec11[l13] = 0.0f; + } + for (int l14 = 0; l14 < 4096; l14 = l14 + 1) { + fVec5[l14] = 0.0f; + } + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { + fRec12[l15] = 0.0f; + } + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { + fRec13[l16] = 0.0f; + } + for (int l17 = 0; l17 < 4096; l17 = l17 + 1) { + fVec6[l17] = 0.0f; + } + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { + fRec14[l18] = 0.0f; + } + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fRec15[l19] = 0.0f; + } + } + + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); + } + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual fx_jcrev* clone() { + return new fx_jcrev(); + } + + virtual int getSampleRate() { + return fSampleRate; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("fx.jcrev"); + ui_interface->addCheckButton("bypass", &fCheckbox0); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.4f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->closeBox(); + } + + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + FAUSTFLOAT* output2 = outputs[2]; + FAUSTFLOAT* output3 = outputs[3]; + float fSlow0 = float(fCheckbox0); + float fSlow1 = fConst2 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = float(input0[i0]); + float fTemp1 = fConst1 + fRec0[1]; + float fTemp2 = fRec0[1] - fConst1; + fRec0[0] = ((fTemp1 < fSlow0) ? fTemp1 : ((fTemp2 > fSlow0) ? fTemp2 : fSlow0)); + float fTemp3 = fTemp0 * fRec0[0]; + float fTemp4 = 1.0f - fRec0[0]; + float fTemp5 = fTemp0 * fTemp4; + fRec1[0] = fSlow1 + fConst3 * fRec1[1]; + float fTemp6 = fTemp5 * (1.0f - fRec1[0]); + float fTemp7 = 0.7f * fRec8[1] + 0.06f * fTemp5; + fVec0[IOTA0 & 511] = fTemp7; + fRec8[0] = fVec0[(IOTA0 - 346) & 511]; + float fRec9 = 0.0f - 0.7f * fTemp7; + float fTemp8 = fRec9 + 0.7f * fRec6[1] + fRec8[1]; + fVec1[IOTA0 & 127] = fTemp8; + fRec6[0] = fVec1[(IOTA0 - 112) & 127]; + float fRec7 = 0.0f - 0.7f * fTemp8; + float fTemp9 = fRec7 + 0.7f * fRec4[1] + fRec6[1]; + fVec2[IOTA0 & 63] = fTemp9; + fRec4[0] = fVec2[(IOTA0 - 36) & 63]; + float fRec5 = 0.0f - 0.7f * fTemp9; + float fTemp10 = fRec5 + 0.802f * fRec2[1] + fRec4[1]; + fVec3[IOTA0 & 2047] = fTemp10; + fRec2[0] = fVec3[(IOTA0 - 1600) & 2047]; + fRec3[0] = fTemp10; + float fTemp11 = fRec5 + fRec4[1]; + float fTemp12 = fTemp11 + 0.773f * fRec10[1]; + fVec4[IOTA0 & 2047] = fTemp12; + fRec10[0] = fVec4[(IOTA0 - 1866) & 2047]; + fRec11[0] = fTemp12; + float fTemp13 = fTemp11 + 0.753f * fRec12[1]; + fVec5[IOTA0 & 4095] = fTemp13; + fRec12[0] = fVec5[(IOTA0 - 2052) & 4095]; + fRec13[0] = fTemp13; + float fTemp14 = fTemp11 + 0.733f * fRec14[1]; + fVec6[IOTA0 & 4095] = fTemp14; + fRec14[0] = fVec6[(IOTA0 - 2250) & 4095]; + fRec15[0] = fTemp14; + float fTemp15 = fRec1[0] * (fRec3[1] + fRec11[1] + fRec13[1] + fRec15[1]); + output0[i0] = FAUSTFLOAT(fTemp3 + fTemp4 * (fTemp6 + fTemp15)); + output1[i0] = FAUSTFLOAT(fTemp3 + fTemp4 * (fTemp6 - fTemp15)); + float fTemp16 = fRec1[0] * (fRec11[1] + fRec15[1] - (fRec3[1] + fRec13[1])); + output2[i0] = FAUSTFLOAT(fTemp3 + fTemp4 * (fTemp6 + fTemp16)); + output3[i0] = FAUSTFLOAT(fTemp3 + fTemp4 * (fTemp6 - fTemp16)); + fRec0[1] = fRec0[0]; + fRec1[1] = fRec1[0]; + IOTA0 = IOTA0 + 1; + fRec8[1] = fRec8[0]; + fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec15[1] = fRec15[0]; + } + } + +}; +// clang-format on +#endif + + template + struct _fx_jcrev_UI : public UI { + static std::string name; +}; + +template +std::string _fx_jcrev_UI::name(sym(fx_jcrev)); + +typedef _fx_jcrev_UI fx_jcrev_UI; + +class faust_fx_jcrev_tilde : public FaustExternal { +public: + faust_fx_jcrev_tilde(const ceammc::PdArgs& args) + : FaustExternal(args) + { + } +}; + +#endif diff --git a/ceammc/ext/src/fx/fx_looper.cpp b/ceammc/ext/src/fx/fx_looper.cpp index b41e26a5cc..12d9a68f13 100644 --- a/ceammc/ext/src/fx/fx_looper.cpp +++ b/ceammc/ext/src/fx/fx_looper.cpp @@ -93,6 +93,7 @@ FxLooper::FxLooper(const PdArgs& args) capacity_sec_ = new FloatProperty("@capacity", DEFAULT_CAPACITY_SEC); capacity_sec_->setArgIndex(0); + capacity_sec_->checkClosedRange(0, 120); capacity_sec_->setUnitsSec(); addProperty(capacity_sec_); @@ -123,6 +124,7 @@ FxLooper::FxLooper(const PdArgs& args) addProperty(x_dub_to_stop_); round_ = new IntProperty("@round", 0); + round_->checkMin(0); round_->setUnits(PropValueUnits::SAMP); addProperty(round_); @@ -496,25 +498,25 @@ void FxLooper::m_clear(t_symbol*, const AtomListView&) state_ = STATE_STOP; } -void FxLooper::m_adjust(t_symbol* s, const AtomListView& lst) +void FxLooper::m_adjust(t_symbol* s, const AtomListView& lv) { - if (!checkArgs(lst, ARG_FLOAT)) + if (!checkArgs(lv, ARG_FLOAT)) return; - long samples = lst[0].asFloat() * sys_getsr(); + long samples = lv[0].asFloat() * sys_getsr(); if (labs(samples) >= loop_len_) { - METHOD_ERR(s) << "adjust value is too big: " << lst[0]; + METHOD_ERR(s) << "adjust value is too big: " << lv[0]; return; } loop_len_ = long(loop_len_) + samples; } -void FxLooper::m_smooth(t_symbol* s, const AtomListView& lst) +void FxLooper::m_smooth(t_symbol* s, const AtomListView& lv) { using namespace ceammc::units; - auto res = TimeValue::parse(lst); + auto res = TimeValue::parse(lv); UnitParseError err; if (res.matchError(err)) { METHOD_ERR(s) << err.msg; @@ -924,9 +926,9 @@ void XFadeProperty::reset() phase_ = 0; } -bool XFadeProperty::set(const AtomListView& lst) +bool XFadeProperty::set(const AtomListView& lv) { - auto rc = FloatProperty::set(lst); + auto rc = FloatProperty::set(lv); if (rc) calc(sr_, bs_); diff --git a/ceammc/ext/src/fx/fx_looper.h b/ceammc/ext/src/fx/fx_looper.h index 67862bd75d..c028f49539 100644 --- a/ceammc/ext/src/fx/fx_looper.h +++ b/ceammc/ext/src/fx/fx_looper.h @@ -46,7 +46,7 @@ class XFadeProperty : public FloatProperty { size_t samples() const { return length_; } void next() { phase_ += (phase_ < length_); } virtual t_float amp() const = 0; - bool set(const AtomListView& lst) override; + bool set(const AtomListView& lv) override; }; class LinFadeoutProperty : public XFadeProperty { @@ -121,8 +121,8 @@ class FxLooper : public SoundExternal { void m_play(t_symbol*, const AtomListView&); void m_overdub(t_symbol*, const AtomListView&); void m_clear(t_symbol*, const AtomListView&); - void m_adjust(t_symbol*, const AtomListView& lst); - void m_smooth(t_symbol*, const AtomListView& lst); + void m_adjust(t_symbol*, const AtomListView& lv); + void m_smooth(t_symbol*, const AtomListView& lv); // test functions FxLooperState state() const { return state_; } diff --git a/ceammc/ext/src/fx/fx_pitchshift.h b/ceammc/ext/src/fx/fx_pitchshift.h index d64e670f19..73daa10b7d 100644 --- a/ceammc/ext/src/fx/fx_pitchshift.h +++ b/ceammc/ext/src/fx/fx_pitchshift.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.pitchshift" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_pitchshift -scn fx_pitchshift_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_pitchshift_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_pitchshift_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_pitchshift_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_pitchshift_dsp { +class FAUST_API fx_pitchshift_dsp { public: @@ -162,7 +247,7 @@ class fx_pitchshift_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_pitchshift_dsp { +class FAUST_API decorator_dsp : public fx_pitchshift_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_pitchshift_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_pitchshift_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_pitchshift_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_pitchshift : public fx_pitchshift_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_pitchshift #endif @@ -559,12 +636,19 @@ struct fx_pitchshift : public fx_pitchshift_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_pitchshift : public fx_pitchshift_dsp { private: FAUSTFLOAT fCheckbox0; - int IOTA; + int IOTA0; float fVec0[131072]; int fSampleRate; float fConst1; @@ -582,13 +666,14 @@ class fx_pitchshift : public fx_pitchshift_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_pitchshift -scn fx_pitchshift_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_pitchshift.dsp"); @@ -603,7 +688,7 @@ class fx_pitchshift : public fx_pitchshift_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -618,33 +703,33 @@ class fx_pitchshift : public fx_pitchshift_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.00100000005f * fConst0); - fConst4 = (1000.0f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.001f * fConst0; + fConst4 = 1e+03f / fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fVslider0 = FAUSTFLOAT(200.0f); + fVslider0 = FAUSTFLOAT(2e+02f); fVslider1 = FAUSTFLOAT(0.0f); - fVslider2 = FAUSTFLOAT(100.0f); + fVslider2 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 131072); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 131072; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec1[l3] = 0.0f; } } @@ -671,40 +756,39 @@ class fx_pitchshift : public fx_pitchshift_dsp { ui_interface->openVerticalBox("fx.pitchshift"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider2, "unit", "ms"); - ui_interface->addVerticalSlider("fade", &fVslider2, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("pitch", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-38.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addVerticalSlider("fade", &fVslider2, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("pitch", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(-38.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("window", &fVslider0, FAUSTFLOAT(200.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(2000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("window", &fVslider0, FAUSTFLOAT(2e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(2e+03f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst3 * float(fVslider0)); - float fSlow3 = (fConst1 * float(fVslider1)); - float fSlow4 = (fConst4 / float(fVslider2)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst3 * float(fVslider0); + float fSlow3 = fConst1 * float(fVslider1); + float fSlow4 = fConst4 / float(fVslider2); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fVec0[(IOTA & 131071)] = fTemp1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow3 + (fConst2 * fRec2[1])); - fRec1[0] = std::fmod((fSlow2 + (fRec1[1] + (1.0f - std::pow(2.0f, (0.0833333358f * fRec2[0]))))), fSlow2); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fVec0[IOTA0 & 131071] = fTemp1; + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow3 + fConst2 * fRec2[1]; + fRec1[0] = std::fmod(fSlow2 + fRec1[1] + (1.0f - std::pow(2.0f, 0.083333336f * fRec2[0])), fSlow2); int iTemp2 = int(fRec1[0]); float fTemp3 = std::floor(fRec1[0]); - float fTemp4 = (1.0f - fRec1[0]); - float fTemp5 = std::min((fSlow4 * fRec1[0]), 1.0f); - float fTemp6 = (fSlow2 + fRec1[0]); + float fTemp4 = 1.0f - fRec1[0]; + float fTemp5 = std::min(fSlow4 * fRec1[0], 1.0f); + float fTemp6 = fSlow2 + fRec1[0]; int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((((fVec0[((IOTA - std::min(65537, std::max(0, iTemp2))) & 131071)] * (fTemp3 + fTemp4)) + ((fRec1[0] - fTemp3) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp2 + 1)))) & 131071)])) * fTemp5) + (((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * ((fTemp8 + fTemp4) - fSlow2)) + ((fSlow2 + (fRec1[0] - fTemp8)) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])) * (1.0f - fTemp5))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); - IOTA = (IOTA + 1); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * ((fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp2))) & 131071] * (fTemp3 + fTemp4) + (fRec1[0] - fTemp3) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp2 + 1))) & 131071]) * fTemp5 + (fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7))) & 131071] * (fTemp8 + fTemp4 - fSlow2) + (fSlow2 + (fRec1[0] - fTemp8)) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7 + 1))) & 131071]) * (1.0f - fTemp5)))); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/fx/fx_pitchshift_sig.h b/ceammc/ext/src/fx/fx_pitchshift_sig.h index 903b09f834..0015accb72 100644 --- a/ceammc/ext/src/fx/fx_pitchshift_sig.h +++ b/ceammc/ext/src/fx/fx_pitchshift_sig.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.pitchshift" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_pitchshift_sig -scn fx_pitchshift_sig_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_pitchshift_sig_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_pitchshift_sig_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_pitchshift_sig_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_pitchshift_sig_dsp { +class FAUST_API fx_pitchshift_sig_dsp { public: @@ -162,7 +247,7 @@ class fx_pitchshift_sig_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_pitchshift_sig_dsp { +class FAUST_API decorator_dsp : public fx_pitchshift_sig_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_pitchshift_sig_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_pitchshift_sig_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_pitchshift_sig_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_pitchshift_sig : public fx_pitchshift_sig_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_pitchshift_sig #endif @@ -559,12 +636,19 @@ struct fx_pitchshift_sig : public fx_pitchshift_sig_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_pitchshift_sig : public fx_pitchshift_sig_dsp { private: FAUSTFLOAT fCheckbox0; - int IOTA; + int IOTA0; float fVec0[131072]; int fSampleRate; float fConst1; @@ -580,13 +664,14 @@ class fx_pitchshift_sig : public fx_pitchshift_sig_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_pitchshift_sig -scn fx_pitchshift_sig_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_pitchshift_sig.dsp"); @@ -601,7 +686,7 @@ class fx_pitchshift_sig : public fx_pitchshift_sig_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -616,29 +701,29 @@ class fx_pitchshift_sig : public fx_pitchshift_sig_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (0.00100000005f * fConst0); - fConst4 = (1000.0f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 0.001f * fConst0; + fConst4 = 1e+03f / fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fVslider0 = FAUSTFLOAT(200.0f); - fVslider1 = FAUSTFLOAT(100.0f); + fVslider0 = FAUSTFLOAT(2e+02f); + fVslider1 = FAUSTFLOAT(1e+02f); } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 131072); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 131072; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec1[l2] = 0.0f; } } @@ -665,38 +750,37 @@ class fx_pitchshift_sig : public fx_pitchshift_sig_dsp { ui_interface->openVerticalBox("fx.pitchshift"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fVslider1, "unit", "ms"); - ui_interface->addVerticalSlider("fade", &fVslider1, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("fade", &fVslider1, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider0, "unit", "ms"); - ui_interface->addVerticalSlider("window", &fVslider0, FAUSTFLOAT(200.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(2000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("window", &fVslider0, FAUSTFLOAT(2e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(2e+03f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst3 * float(fVslider0)); - float fSlow3 = (fConst4 / float(fVslider1)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst3 * float(fVslider0); + float fSlow3 = fConst4 / float(fVslider1); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fVec0[(IOTA & 131071)] = fTemp1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec1[0] = std::fmod((fSlow2 + (fRec1[1] + (1.0f - std::pow(2.0f, (0.0833333358f * float(input1[i0])))))), fSlow2); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fVec0[IOTA0 & 131071] = fTemp1; + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec1[0] = std::fmod(fSlow2 + fRec1[1] + (1.0f - std::pow(2.0f, 0.083333336f * float(input1[i0]))), fSlow2); int iTemp2 = int(fRec1[0]); float fTemp3 = std::floor(fRec1[0]); - float fTemp4 = (1.0f - fRec1[0]); - float fTemp5 = std::min((fSlow3 * fRec1[0]), 1.0f); - float fTemp6 = (fSlow2 + fRec1[0]); + float fTemp4 = 1.0f - fRec1[0]; + float fTemp5 = std::min(fSlow3 * fRec1[0], 1.0f); + float fTemp6 = fSlow2 + fRec1[0]; int iTemp7 = int(fTemp6); float fTemp8 = std::floor(fTemp6); - float fThen1 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * ((((fVec0[((IOTA - std::min(65537, std::max(0, iTemp2))) & 131071)] * (fTemp3 + fTemp4)) + ((fRec1[0] - fTemp3) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp2 + 1)))) & 131071)])) * fTemp5) + (((fVec0[((IOTA - std::min(65537, std::max(0, iTemp7))) & 131071)] * ((fTemp8 + fTemp4) - fSlow2)) + ((fSlow2 + (fRec1[0] - fTemp8)) * fVec0[((IOTA - std::min(65537, std::max(0, (iTemp7 + 1)))) & 131071)])) * (1.0f - fTemp5))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen1)); - IOTA = (IOTA + 1); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * ((fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp2))) & 131071] * (fTemp3 + fTemp4) + (fRec1[0] - fTemp3) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp2 + 1))) & 131071]) * fTemp5 + (fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7))) & 131071] * (fTemp8 + fTemp4 - fSlow2) + (fSlow2 + (fRec1[0] - fTemp8)) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp7 + 1))) & 131071]) * (1.0f - fTemp5)))); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; } diff --git a/ceammc/ext/src/fx/fx_recho.h b/ceammc/ext/src/fx/fx_recho.h index 913f6d79a6..497340c952 100644 --- a/ceammc/ext/src/fx/fx_recho.h +++ b/ceammc/ext/src/fx/fx_recho.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.recho" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_recho -scn fx_recho_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_recho_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_recho_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_recho_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_recho_dsp { +class FAUST_API fx_recho_dsp { public: @@ -162,7 +247,7 @@ class fx_recho_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_recho_dsp { +class FAUST_API decorator_dsp : public fx_recho_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_recho_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_recho_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_recho_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,6 +627,21 @@ struct fx_recho : public fx_recho_dsp { #include #include +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_recho +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + class fx_rechoSIG0 { private: @@ -567,7 +660,7 @@ class fx_rechoSIG0 { } void fillfx_rechoSIG0(int count, float* table) { - for (int i1 = 0; (i1 < count); i1 = (i1 + 1)) { + for (int i1 = 0; i1 < count; i1 = i1 + 1) { table[i1] = 0.0f; } } @@ -578,18 +671,9 @@ static fx_rechoSIG0* newfx_rechoSIG0() { return (fx_rechoSIG0*)new fx_rechoSIG0( static void deletefx_rechoSIG0(fx_rechoSIG0* dsp) { delete dsp; } static float fx_recho_faustpower2_f(float value) { - return (value * value); + return value * value; } -#ifndef FAUSTCLASS -#define FAUSTCLASS fx_recho -#endif - -#ifdef __APPLE__ -#define exp10f __exp10f -#define exp10 __exp10 -#endif - class fx_recho : public fx_recho_dsp { private: @@ -612,7 +696,6 @@ class fx_recho : public fx_recho_dsp { float fConst6; float fConst7; float fConst8; - float fRec6[2]; float fRec5[2]; float fRec4[2]; float fRec1[2]; @@ -620,15 +703,17 @@ class fx_recho : public fx_recho_dsp { public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_recho -scn fx_recho_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("compressors.lib/compression_gain_mono:author", "Julius O. Smith III"); m->declare("compressors.lib/compression_gain_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compression_gain_mono:license", "MIT-style STK-4.3 license"); @@ -639,7 +724,7 @@ class fx_recho : public fx_recho_dsp { m->declare("compressors.lib/compressor_mono:copyright", "Copyright (C) 2014-2020 by Julius O. Smith III "); m->declare("compressors.lib/compressor_mono:license", "MIT-style STK-4.3 license"); m->declare("compressors.lib/name", "Faust Compressor Effect Library"); - m->declare("compressors.lib/version", "0.1"); + m->declare("compressors.lib/version", "0.4"); m->declare("filename", "fx_recho.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -650,7 +735,9 @@ class fx_recho : public fx_recho_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -665,51 +752,48 @@ class fx_recho : public fx_recho_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; fx_rechoSIG0* sig0 = newfx_rechoSIG0(); sig0->instanceInitfx_rechoSIG0(sample_rate); sig0->fillfx_rechoSIG0(96000, ftbl0); - fConst3 = (0.00100000005f * fConst0); + fConst3 = 0.001f * fConst0; sig0->instanceInitfx_rechoSIG0(sample_rate); sig0->fillfx_rechoSIG0(96000, ftbl1); - fConst4 = (0.000500000024f * fConst0); - fConst5 = std::exp((0.0f - (0.200000003f / fConst0))); - fConst6 = (1.0f - fConst5); - fConst7 = std::exp((0.0f - (0.100000001f / fConst0))); - fConst8 = std::exp((0.0f - (0.0199999996f / fConst0))); + fConst4 = 0.0005f * fConst0; + fConst5 = std::exp(0.0f - 0.2f / fConst0); + fConst6 = 1.0f - fConst5; + fConst7 = std::exp(0.0f - 0.02f / fConst0); + fConst8 = std::exp(0.0f - 0.1f / fConst0); deletefx_rechoSIG0(sig0); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(0.29999999999999999f); - fHslider2 = FAUSTFLOAT(500.0f); + fHslider1 = FAUSTFLOAT(0.3f); + fHslider2 = FAUSTFLOAT(5e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { iRec3[l2] = 0; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec6[l3] = 0.0f; - } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec5[l4] = 0.0f; + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec5[l3] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec4[l5] = 0.0f; + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec4[l4] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { - fRec1[l6] = 0.0f; + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec1[l5] = 0.0f; } } @@ -735,56 +819,49 @@ class fx_recho : public fx_recho_dsp { ui_interface->openVerticalBox("fx.recho"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(500.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(2000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(5e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(2e+03f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.300000012f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.3f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); float fSlow3 = float(fHslider2); - int iSlow4 = int(std::min(96000.0f, (fConst3 * fSlow3))); - int iSlow5 = (2 * iSlow4); - float fSlow6 = (3.14159274f / float(iSlow4)); - int iSlow7 = int((fConst4 * fSlow3)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + int iSlow4 = int(std::min(9.6e+04f, fConst3 * fSlow3)); + int iSlow5 = 2 * iSlow4; + float fSlow6 = 3.1415927f / float(iSlow4); + int iSlow7 = int(fConst4 * fSlow3); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - float fTemp2 = (fTemp1 + (fRec2[0] * fRec1[1])); - iRec3[0] = (iRec3[1] + 1); - int iTemp3 = (iRec3[0] % iSlow5); - int iElse1 = (iSlow5 - iTemp3); - ftbl0[((iTemp3 > iSlow4) ? iElse1 : iTemp3)] = fTemp2; - int iTemp4 = (iRec3[0] + 1); - int iTemp5 = (iTemp4 % iSlow5); - int iElse2 = (iSlow5 - iTemp5); - int iTemp6 = ((iSlow7 + iRec3[0]) % iSlow5); - int iElse3 = (iSlow5 - iTemp6); - ftbl1[((iTemp6 > iSlow4) ? iElse3 : iTemp6)] = fTemp2; - int iTemp7 = (iSlow7 + iTemp4); - int iTemp8 = (iTemp7 % iSlow5); - int iElse4 = (iSlow5 - iTemp8); - float fTemp9 = ((ftbl0[((iTemp5 > iSlow4) ? iElse2 : iTemp5)] * fx_recho_faustpower2_f(std::sin((fSlow6 * float((iTemp4 % iSlow4)))))) + (ftbl1[((iTemp8 > iSlow4) ? iElse4 : iTemp8)] * fx_recho_faustpower2_f(std::sin((fSlow6 * float((iTemp7 % iSlow4))))))); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + float fTemp2 = fTemp1 + fRec2[0] * fRec1[1]; + iRec3[0] = iRec3[1] + 1; + int iTemp3 = iRec3[0] % iSlow5; + ftbl0[((iTemp3 > iSlow4) ? iSlow5 - iTemp3 : iTemp3)] = fTemp2; + int iTemp4 = iRec3[0] + 1; + int iTemp5 = iTemp4 % iSlow5; + int iTemp6 = (iSlow7 + iRec3[0]) % iSlow5; + ftbl1[((iTemp6 > iSlow4) ? iSlow5 - iTemp6 : iTemp6)] = fTemp2; + int iTemp7 = iSlow7 + iTemp4; + int iTemp8 = iTemp7 % iSlow5; + float fTemp9 = ftbl0[((iTemp5 > iSlow4) ? iSlow5 - iTemp5 : iTemp5)] * fx_recho_faustpower2_f(std::sin(fSlow6 * float(iTemp4 % iSlow4))) + ftbl1[((iTemp8 > iSlow4) ? iSlow5 - iTemp8 : iTemp8)] * fx_recho_faustpower2_f(std::sin(fSlow6 * float(iTemp7 % iSlow4))); float fTemp10 = std::fabs(fTemp9); - float fTemp11 = ((fRec5[1] > fTemp10) ? fConst8 : fConst7); - fRec6[0] = ((fRec6[1] * fTemp11) + (fTemp10 * (1.0f - fTemp11))); - fRec5[0] = fRec6[0]; - fRec4[0] = ((fConst5 * fRec4[1]) + (fConst6 * (0.0f - (0.800000012f * std::max(((20.0f * std::log10(std::max(1.17549435e-38f, fRec5[0]))) + 3.0f), 0.0f))))); - fRec1[0] = (fTemp9 * std::pow(10.0f, (0.0500000007f * fRec4[0]))); - float fThen6 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen6)); + float fTemp11 = ((fTemp10 > fRec5[1]) ? fConst8 : fConst7); + fRec5[0] = fTemp10 * (1.0f - fTemp11) + fRec5[1] * fTemp11; + fRec4[0] = fConst6 * (0.0f - 0.8f * std::max(2e+01f * std::log10(std::max(1.1754944e-38f, fRec5[0])) + 3.0f, 0.0f)) + fConst5 * fRec4[1]; + fRec1[0] = fTemp9 * std::pow(1e+01f, 0.05f * fRec4[0]); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * fRec1[0])); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; iRec3[1] = iRec3[0]; - fRec6[1] = fRec6[0]; fRec5[1] = fRec5[0]; fRec4[1] = fRec4[0]; fRec1[1] = fRec1[0]; diff --git a/ceammc/ext/src/fx/fx_room.cpp b/ceammc/ext/src/fx/fx_room.cpp index 97434a4bf2..b1e1a72fa8 100644 --- a/ceammc/ext/src/fx/fx_room.cpp +++ b/ceammc/ext/src/fx/fx_room.cpp @@ -4,11 +4,23 @@ using namespace ceammc; class FxRoom : public faust_fx_room_tilde { + Property* size_; + public: FxRoom(const PdArgs& args) : faust_fx_room_tilde(args) + , size_(nullptr) { bindPositionalArgsToProps({ gensym("@size"), gensym("@fb") }); + createInlet(); + + size_ = property("@size"); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (size_) + size_->set(lv); } }; @@ -16,4 +28,6 @@ void setup_fx_room_tilde() { SoundExternalFactory obj("fx.room~"); obj.addMethod("reset", &FxRoom::m_reset); + + obj.setXletsInfo({ "signal: input", "float: set room size (0..3)" }, { "signal: output" }); } diff --git a/ceammc/ext/src/fx/fx_room.h b/ceammc/ext/src/fx/fx_room.h index b4b975dd40..8b5e119b95 100644 --- a/ceammc/ext/src/fx/fx_room.h +++ b/ceammc/ext/src/fx/fx_room.h @@ -2,8 +2,8 @@ author: "thedrgreenthumb" license: "MIT" name: "fx_room" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_room -scn fx_room_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_room_H__ @@ -16,23 +16,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_room_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_room_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -46,22 +46,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -70,7 +155,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_room_dsp { +class FAUST_API fx_room_dsp { public: @@ -164,7 +249,7 @@ class fx_room_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_room_dsp { +class FAUST_API decorator_dsp : public fx_room_dsp { protected: @@ -197,7 +282,7 @@ class decorator_dsp : public fx_room_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -226,18 +311,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -245,7 +333,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -256,16 +344,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -278,38 +364,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_room_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -324,8 +411,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -355,37 +442,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -396,40 +482,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_room_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -442,14 +528,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -551,10 +629,6 @@ struct fx_room : public fx_room_dsp { #include #include -static float fx_room_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_room #endif @@ -564,6 +638,16 @@ static float fx_room_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_room_faustpower2_f(float value) { + return value * value; +} + class fx_room : public fx_room_dsp { private: @@ -574,128 +658,137 @@ class fx_room : public fx_room_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec0[2]; - int IOTA; + int IOTA0; float fVec0[65536]; FAUSTFLOAT fHslider1; + float fRec1[2]; + float fConst3; + float fRec2[2]; + float fRec3[2]; + FAUSTFLOAT fHslider2; float fConst6; + FAUSTFLOAT fHslider3; float fConst9; float fConst11; - FAUSTFLOAT fHslider2; - FAUSTFLOAT fHslider3; - float fRec19[2]; float fConst12; float fConst13; float fRec18[3]; float fConst14; float fConst15; float fConst16; - float fConst17; float fRec17[3]; + float fRec16[2]; + float fConst19; float fConst20; float fConst21; - float fConst22; FAUSTFLOAT fHslider4; + float fConst22; float fConst23; - float fConst24; - float fRec21[3]; - float fConst25; float fRec20[3]; - float fVec1[2048]; + float fConst24; + float fRec19[3]; + float fVec1[8192]; + int iConst25; + float fVec2[8192]; int iConst26; - float fRec15[2]; - float fVec2[4096]; + float fVec3[8192]; int iConst27; - float fRec13[2]; - float fVec3[4096]; + float fVec4[2048]; int iConst28; - int iConst29; - float fVec4[16384]; - int iConst30; + float fRec14[2]; + float fRec12[2]; + float fRec10[2]; float fVec5[16384]; - int iConst31; - float fRec11[2]; - float fRec9[2]; + int iConst29; float fVec6[8192]; - int iConst32; - int iConst33; - float fVec7[16384]; - int iConst34; - float fVec8[16384]; - int iConst35; - float fVec9[8192]; - int iConst36; - float fRec7[2]; - float fRec5[2]; - float fRec3[2]; - float fRec1[2]; - float fRec38[3]; - float fRec37[3]; - float fRec36[2]; + int iConst30; + float fRec8[2]; + float fRec6[2]; + float fRec4[2]; + float fRec21[2]; + float fConst34; + float fConst37; float fConst39; float fConst40; float fConst41; + float fRec38[3]; float fConst42; - float fRec40[3]; float fConst43; - float fRec39[3]; - float fVec10[8192]; - int iConst44; - float fVec11[2048]; - int iConst45; - float fVec12[8192]; - int iConst46; + float fConst44; + float fRec37[3]; + float fRec36[2]; + float fVec7[8192]; + float fVec8[2048]; + float fVec9[8192]; float fRec34[2]; float fRec32[2]; float fRec30[2]; - float fVec13[1024]; - int iConst47; - float fVec14[8192]; + float fVec10[1024]; + int iConst45; + float fVec11[8192]; float fRec28[2]; - float fVec15[16384]; + float fVec12[16384]; + int iConst46; + int iConst47; + float fVec13[8192]; int iConst48; + float fVec14[2048]; int iConst49; - float fVec16[8192]; - int iConst50; - float fVec17[2048]; - int iConst51; float fRec26[2]; float fRec24[2]; float fRec22[2]; + float fConst50; + float fRec57[2]; + float fRec56[3]; + float fRec55[3]; + float fConst53; float fConst54; + float fConst55; + float fConst56; + float fRec59[3]; float fConst57; - float fConst59; - float fConst60; - float fConst61; - float fRec55[3]; - float fConst62; - float fConst63; - float fConst64; - float fRec54[3]; + float fRec58[3]; + float fVec15[2048]; + int iConst58; float fRec53[2]; - float fVec18[8192]; - int iConst65; - float fVec19[8192]; - float fVec20[8192]; - float fVec21[2048]; + float fVec16[4096]; + int iConst59; float fRec51[2]; + float fVec17[4096]; + int iConst60; + int iConst61; + float fVec18[16384]; + int iConst62; + float fVec19[16384]; + int iConst63; float fRec49[2]; float fRec47[2]; - float fVec22[16384]; + float fVec20[8192]; + int iConst64; + int iConst65; + float fVec21[16384]; int iConst66; + float fVec22[16384]; + int iConst67; float fVec23[8192]; float fRec45[2]; float fRec43[2]; float fRec41[2]; + float fRec39[2]; + float fRec60[2]; + float fRec61[2]; + float fRec62[2]; public: void metadata(Meta* m) { m->declare("author", "thedrgreenthumb"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_room -scn fx_room_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_room.dsp"); @@ -733,8 +826,10 @@ class fx_room : public fx_room_dsp { m->declare("name", "fx_room"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -749,73 +844,74 @@ class fx_room : public fx_room_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - float fConst3 = std::tan((3141.59277f / fConst0)); - float fConst4 = (1.0f / fConst3); - float fConst5 = (((fConst4 + 1.41421354f) / fConst3) + 1.0f); - fConst6 = (1.29900002f / fConst5); - float fConst7 = std::tan((1570.79639f / fConst0)); - float fConst8 = (1.0f / fConst7); - fConst9 = (1.0f / (((fConst8 + 1.41421354f) / fConst7) + 1.0f)); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 2e+01f / fConst0; + float fConst4 = std::tan(5026.5483f / fConst0); + float fConst5 = 1.0f / fConst4; + fConst6 = 1.0f / ((fConst5 + 1.4142135f) / fConst4 + 1.0f); + float fConst7 = std::tan(2513.2742f / fConst0); + float fConst8 = 1.0f / fConst7; + fConst9 = 1.0f / ((fConst8 + 1.4142135f) / fConst7 + 1.0f); float fConst10 = fx_room_faustpower2_f(fConst7); - fConst11 = (1.0f / fConst10); - fConst12 = (((fConst8 + -1.41421354f) / fConst7) + 1.0f); - fConst13 = (2.0f * (1.0f - fConst11)); - fConst14 = (0.0f - (2.0f / fConst10)); - fConst15 = (1.0f / fConst5); - fConst16 = (((fConst4 + -1.41421354f) / fConst3) + 1.0f); - fConst17 = (2.0f * (1.0f - (1.0f / fx_room_faustpower2_f(fConst3)))); - float fConst18 = std::tan((12566.3711f / fConst0)); - float fConst19 = (1.0f / fConst18); - fConst20 = (1.0f / (((fConst19 + 0.765366852f) / fConst18) + 1.0f)); - fConst21 = (1.0f / (((fConst19 + 1.84775901f) / fConst18) + 1.0f)); - fConst22 = (0.00100000005f * fConst0); - fConst23 = (((fConst19 + -1.84775901f) / fConst18) + 1.0f); - fConst24 = (2.0f * (1.0f - (1.0f / fx_room_faustpower2_f(fConst18)))); - fConst25 = (((fConst19 + -0.765366852f) / fConst18) + 1.0f); - iConst26 = int(std::min(8192.0f, std::max(0.0f, ((0.00800000038f * fConst0) + -1.0f)))); - iConst27 = int(std::min(8192.0f, std::max(0.0f, ((0.0120000001f * fConst0) + -1.0f)))); - iConst28 = int((0.00400000019f * fConst0)); - iConst29 = (iConst28 + int((0.0170000009f * fConst0))); - iConst30 = int(std::min(8192.0f, std::max(0.0f, ((0.0869999975f * fConst0) + -1.0f)))); - iConst31 = int(std::min(8192.0f, std::max(0.0f, ((0.061999999f * fConst0) + -1.0f)))); - iConst32 = int((0.0309999995f * fConst0)); - iConst33 = (iConst32 + int((0.00300000003f * fConst0))); - iConst34 = int(std::min(8192.0f, std::max(0.0f, ((0.119999997f * fConst0) + -1.0f)))); - iConst35 = int(std::min(8192.0f, std::max(0.0f, ((0.0759999976f * fConst0) + -1.0f)))); - iConst36 = int(std::min(8192.0f, std::max(0.0f, ((0.0299999993f * fConst0) + -1.0f)))); - float fConst37 = std::tan((18849.5566f / fConst0)); - float fConst38 = (1.0f / fConst37); - fConst39 = (1.0f / (((fConst38 + 0.765366852f) / fConst37) + 1.0f)); - fConst40 = (1.0f / (((fConst38 + 1.84775901f) / fConst37) + 1.0f)); - fConst41 = (((fConst38 + -1.84775901f) / fConst37) + 1.0f); - fConst42 = (2.0f * (1.0f - (1.0f / fx_room_faustpower2_f(fConst37)))); - fConst43 = (((fConst38 + -0.765366852f) / fConst37) + 1.0f); - iConst44 = int(std::min(8192.0f, std::max(0.0f, ((0.0350000001f * fConst0) + -1.0f)))); - iConst45 = int(std::min(8192.0f, std::max(0.0f, ((0.00829999987f * fConst0) + -1.0f)))); - iConst46 = int(std::min(8192.0f, std::max(0.0f, ((0.0219999999f * fConst0) + -1.0f)))); - iConst47 = int((0.00499999989f * fConst0)); - iConst48 = int((0.0670000017f * fConst0)); - iConst49 = (iConst48 + int((0.0149999997f * fConst0))); - iConst50 = int(std::min(8192.0f, std::max(0.0f, ((0.0390000008f * fConst0) + -1.0f)))); - iConst51 = int(std::min(8192.0f, std::max(0.0f, ((0.00980000012f * fConst0) + -1.0f)))); - float fConst52 = std::tan((5026.54834f / fConst0)); - float fConst53 = (1.0f / fConst52); - fConst54 = (1.0f / (((fConst53 + 1.41421354f) / fConst52) + 1.0f)); - float fConst55 = std::tan((2513.27417f / fConst0)); - float fConst56 = (1.0f / fConst55); - fConst57 = (1.0f / (((fConst56 + 1.41421354f) / fConst55) + 1.0f)); - float fConst58 = fx_room_faustpower2_f(fConst55); - fConst59 = (1.0f / fConst58); - fConst60 = (((fConst56 + -1.41421354f) / fConst55) + 1.0f); - fConst61 = (2.0f * (1.0f - fConst59)); - fConst62 = (0.0f - (2.0f / fConst58)); - fConst63 = (((fConst53 + -1.41421354f) / fConst52) + 1.0f); - fConst64 = (2.0f * (1.0f - (1.0f / fx_room_faustpower2_f(fConst52)))); - iConst65 = int((0.0240000002f * fConst0)); - iConst66 = int(std::min(8192.0f, std::max(0.0f, ((0.0659999996f * fConst0) + -1.0f)))); + fConst11 = 1.0f / fConst10; + fConst12 = (fConst8 + -1.4142135f) / fConst7 + 1.0f; + fConst13 = 2.0f * (1.0f - fConst11); + fConst14 = 0.0f - 2.0f / fConst10; + fConst15 = (fConst5 + -1.4142135f) / fConst4 + 1.0f; + fConst16 = 2.0f * (1.0f - 1.0f / fx_room_faustpower2_f(fConst4)); + float fConst17 = std::tan(18849.557f / fConst0); + float fConst18 = 1.0f / fConst17; + fConst19 = 1.0f / ((fConst18 + 0.76536685f) / fConst17 + 1.0f); + fConst20 = 1.0f / ((fConst18 + 1.847759f) / fConst17 + 1.0f); + fConst21 = 0.001f * fConst0; + fConst22 = (fConst18 + -1.847759f) / fConst17 + 1.0f; + fConst23 = 2.0f * (1.0f - 1.0f / fx_room_faustpower2_f(fConst17)); + fConst24 = (fConst18 + -0.76536685f) / fConst17 + 1.0f; + iConst25 = int(0.024f * fConst0); + iConst26 = int(std::min(8192.0f, std::max(0.0f, 0.035f * fConst0 + -1.0f))); + iConst27 = int(std::min(8192.0f, std::max(0.0f, 0.022f * fConst0 + -1.0f))); + iConst28 = int(std::min(8192.0f, std::max(0.0f, 0.0083f * fConst0 + -1.0f))); + iConst29 = int(std::min(8192.0f, std::max(0.0f, 0.066f * fConst0 + -1.0f))); + iConst30 = int(std::min(8192.0f, std::max(0.0f, 0.03f * fConst0 + -1.0f))); + float fConst31 = std::tan(3141.5928f / fConst0); + float fConst32 = 1.0f / fConst31; + float fConst33 = (fConst32 + 1.4142135f) / fConst31 + 1.0f; + fConst34 = 1.0f / fConst33; + float fConst35 = std::tan(1570.7964f / fConst0); + float fConst36 = 1.0f / fConst35; + fConst37 = 1.0f / ((fConst36 + 1.4142135f) / fConst35 + 1.0f); + float fConst38 = fx_room_faustpower2_f(fConst35); + fConst39 = 1.0f / fConst38; + fConst40 = (fConst36 + -1.4142135f) / fConst35 + 1.0f; + fConst41 = 2.0f * (1.0f - fConst39); + fConst42 = 0.0f - 2.0f / fConst38; + fConst43 = (fConst32 + -1.4142135f) / fConst31 + 1.0f; + fConst44 = 2.0f * (1.0f - 1.0f / fx_room_faustpower2_f(fConst31)); + iConst45 = int(0.005f * fConst0); + iConst46 = int(0.067f * fConst0); + iConst47 = iConst46 + int(0.015f * fConst0); + iConst48 = int(std::min(8192.0f, std::max(0.0f, 0.039f * fConst0 + -1.0f))); + iConst49 = int(std::min(8192.0f, std::max(0.0f, 0.0098f * fConst0 + -1.0f))); + fConst50 = 1.299f / fConst33; + float fConst51 = std::tan(12566.371f / fConst0); + float fConst52 = 1.0f / fConst51; + fConst53 = 1.0f / ((fConst52 + 0.76536685f) / fConst51 + 1.0f); + fConst54 = 1.0f / ((fConst52 + 1.847759f) / fConst51 + 1.0f); + fConst55 = (fConst52 + -1.847759f) / fConst51 + 1.0f; + fConst56 = 2.0f * (1.0f - 1.0f / fx_room_faustpower2_f(fConst51)); + fConst57 = (fConst52 + -0.76536685f) / fConst51 + 1.0f; + iConst58 = int(std::min(8192.0f, std::max(0.0f, 0.008f * fConst0 + -1.0f))); + iConst59 = int(std::min(8192.0f, std::max(0.0f, 0.012f * fConst0 + -1.0f))); + iConst60 = int(0.004f * fConst0); + iConst61 = iConst60 + int(0.017f * fConst0); + iConst62 = int(std::min(8192.0f, std::max(0.0f, 0.087f * fConst0 + -1.0f))); + iConst63 = int(std::min(8192.0f, std::max(0.0f, 0.062f * fConst0 + -1.0f))); + iConst64 = int(0.031f * fConst0); + iConst65 = iConst64 + int(0.003f * fConst0); + iConst66 = int(std::min(8192.0f, std::max(0.0f, 0.12f * fConst0 + -1.0f))); + iConst67 = int(std::min(8192.0f, std::max(0.0f, 0.076f * fConst0 + -1.0f))); } virtual void instanceResetUserInterface() { @@ -823,188 +919,209 @@ class fx_room : public fx_room_dsp { fHslider0 = FAUSTFLOAT(0.5f); fHslider1 = FAUSTFLOAT(1.0f); fHslider2 = FAUSTFLOAT(1.0f); - fHslider3 = FAUSTFLOAT(0.29999999999999999f); - fHslider4 = FAUSTFLOAT(20.0f); + fHslider3 = FAUSTFLOAT(0.3f); + fHslider4 = FAUSTFLOAT(2e+01f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - IOTA = 0; - for (int l1 = 0; (l1 < 65536); l1 = (l1 + 1)) { + IOTA0 = 0; + for (int l1 = 0; l1 < 65536; l1 = l1 + 1) { fVec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec19[l2] = 0.0f; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec1[l2] = 0.0f; + } + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec2[l3] = 0.0f; + } + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec3[l4] = 0.0f; + } + for (int l5 = 0; l5 < 3; l5 = l5 + 1) { + fRec18[l5] = 0.0f; } - for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) { - fRec18[l3] = 0.0f; + for (int l6 = 0; l6 < 3; l6 = l6 + 1) { + fRec17[l6] = 0.0f; } - for (int l4 = 0; (l4 < 3); l4 = (l4 + 1)) { - fRec17[l4] = 0.0f; + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { + fRec16[l7] = 0.0f; } - for (int l5 = 0; (l5 < 3); l5 = (l5 + 1)) { - fRec21[l5] = 0.0f; + for (int l8 = 0; l8 < 3; l8 = l8 + 1) { + fRec20[l8] = 0.0f; } - for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { - fRec20[l6] = 0.0f; + for (int l9 = 0; l9 < 3; l9 = l9 + 1) { + fRec19[l9] = 0.0f; } - for (int l7 = 0; (l7 < 2048); l7 = (l7 + 1)) { - fVec1[l7] = 0.0f; + for (int l10 = 0; l10 < 8192; l10 = l10 + 1) { + fVec1[l10] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { - fRec15[l8] = 0.0f; + for (int l11 = 0; l11 < 8192; l11 = l11 + 1) { + fVec2[l11] = 0.0f; } - for (int l9 = 0; (l9 < 4096); l9 = (l9 + 1)) { - fVec2[l9] = 0.0f; + for (int l12 = 0; l12 < 8192; l12 = l12 + 1) { + fVec3[l12] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { - fRec13[l10] = 0.0f; + for (int l13 = 0; l13 < 2048; l13 = l13 + 1) { + fVec4[l13] = 0.0f; } - for (int l11 = 0; (l11 < 4096); l11 = (l11 + 1)) { - fVec3[l11] = 0.0f; + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { + fRec14[l14] = 0.0f; } - for (int l12 = 0; (l12 < 16384); l12 = (l12 + 1)) { - fVec4[l12] = 0.0f; + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { + fRec12[l15] = 0.0f; } - for (int l13 = 0; (l13 < 16384); l13 = (l13 + 1)) { - fVec5[l13] = 0.0f; + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { + fRec10[l16] = 0.0f; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { - fRec11[l14] = 0.0f; + for (int l17 = 0; l17 < 16384; l17 = l17 + 1) { + fVec5[l17] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { - fRec9[l15] = 0.0f; + for (int l18 = 0; l18 < 8192; l18 = l18 + 1) { + fVec6[l18] = 0.0f; } - for (int l16 = 0; (l16 < 8192); l16 = (l16 + 1)) { - fVec6[l16] = 0.0f; + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fRec8[l19] = 0.0f; } - for (int l17 = 0; (l17 < 16384); l17 = (l17 + 1)) { - fVec7[l17] = 0.0f; + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { + fRec6[l20] = 0.0f; } - for (int l18 = 0; (l18 < 16384); l18 = (l18 + 1)) { - fVec8[l18] = 0.0f; + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { + fRec4[l21] = 0.0f; } - for (int l19 = 0; (l19 < 8192); l19 = (l19 + 1)) { - fVec9[l19] = 0.0f; + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { + fRec21[l22] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec7[l20] = 0.0f; + for (int l23 = 0; l23 < 3; l23 = l23 + 1) { + fRec38[l23] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec5[l21] = 0.0f; + for (int l24 = 0; l24 < 3; l24 = l24 + 1) { + fRec37[l24] = 0.0f; } - for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) { - fRec3[l22] = 0.0f; + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { + fRec36[l25] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { - fRec1[l23] = 0.0f; + for (int l26 = 0; l26 < 8192; l26 = l26 + 1) { + fVec7[l26] = 0.0f; } - for (int l24 = 0; (l24 < 3); l24 = (l24 + 1)) { - fRec38[l24] = 0.0f; + for (int l27 = 0; l27 < 2048; l27 = l27 + 1) { + fVec8[l27] = 0.0f; } - for (int l25 = 0; (l25 < 3); l25 = (l25 + 1)) { - fRec37[l25] = 0.0f; + for (int l28 = 0; l28 < 8192; l28 = l28 + 1) { + fVec9[l28] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { - fRec36[l26] = 0.0f; + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { + fRec34[l29] = 0.0f; } - for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec40[l27] = 0.0f; + for (int l30 = 0; l30 < 2; l30 = l30 + 1) { + fRec32[l30] = 0.0f; } - for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) { - fRec39[l28] = 0.0f; + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { + fRec30[l31] = 0.0f; } - for (int l29 = 0; (l29 < 8192); l29 = (l29 + 1)) { - fVec10[l29] = 0.0f; + for (int l32 = 0; l32 < 1024; l32 = l32 + 1) { + fVec10[l32] = 0.0f; } - for (int l30 = 0; (l30 < 2048); l30 = (l30 + 1)) { - fVec11[l30] = 0.0f; + for (int l33 = 0; l33 < 8192; l33 = l33 + 1) { + fVec11[l33] = 0.0f; } - for (int l31 = 0; (l31 < 8192); l31 = (l31 + 1)) { - fVec12[l31] = 0.0f; + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { + fRec28[l34] = 0.0f; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { - fRec34[l32] = 0.0f; + for (int l35 = 0; l35 < 16384; l35 = l35 + 1) { + fVec12[l35] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec32[l33] = 0.0f; + for (int l36 = 0; l36 < 8192; l36 = l36 + 1) { + fVec13[l36] = 0.0f; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { - fRec30[l34] = 0.0f; + for (int l37 = 0; l37 < 2048; l37 = l37 + 1) { + fVec14[l37] = 0.0f; } - for (int l35 = 0; (l35 < 1024); l35 = (l35 + 1)) { - fVec13[l35] = 0.0f; + for (int l38 = 0; l38 < 2; l38 = l38 + 1) { + fRec26[l38] = 0.0f; } - for (int l36 = 0; (l36 < 8192); l36 = (l36 + 1)) { - fVec14[l36] = 0.0f; + for (int l39 = 0; l39 < 2; l39 = l39 + 1) { + fRec24[l39] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec28[l37] = 0.0f; + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { + fRec22[l40] = 0.0f; } - for (int l38 = 0; (l38 < 16384); l38 = (l38 + 1)) { - fVec15[l38] = 0.0f; + for (int l41 = 0; l41 < 2; l41 = l41 + 1) { + fRec57[l41] = 0.0f; } - for (int l39 = 0; (l39 < 8192); l39 = (l39 + 1)) { - fVec16[l39] = 0.0f; + for (int l42 = 0; l42 < 3; l42 = l42 + 1) { + fRec56[l42] = 0.0f; } - for (int l40 = 0; (l40 < 2048); l40 = (l40 + 1)) { - fVec17[l40] = 0.0f; + for (int l43 = 0; l43 < 3; l43 = l43 + 1) { + fRec55[l43] = 0.0f; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec26[l41] = 0.0f; + for (int l44 = 0; l44 < 3; l44 = l44 + 1) { + fRec59[l44] = 0.0f; } - for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) { - fRec24[l42] = 0.0f; + for (int l45 = 0; l45 < 3; l45 = l45 + 1) { + fRec58[l45] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { - fRec22[l43] = 0.0f; + for (int l46 = 0; l46 < 2048; l46 = l46 + 1) { + fVec15[l46] = 0.0f; } - for (int l44 = 0; (l44 < 3); l44 = (l44 + 1)) { - fRec55[l44] = 0.0f; + for (int l47 = 0; l47 < 2; l47 = l47 + 1) { + fRec53[l47] = 0.0f; } - for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { - fRec54[l45] = 0.0f; + for (int l48 = 0; l48 < 4096; l48 = l48 + 1) { + fVec16[l48] = 0.0f; } - for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) { - fRec53[l46] = 0.0f; + for (int l49 = 0; l49 < 2; l49 = l49 + 1) { + fRec51[l49] = 0.0f; } - for (int l47 = 0; (l47 < 8192); l47 = (l47 + 1)) { - fVec18[l47] = 0.0f; + for (int l50 = 0; l50 < 4096; l50 = l50 + 1) { + fVec17[l50] = 0.0f; } - for (int l48 = 0; (l48 < 8192); l48 = (l48 + 1)) { - fVec19[l48] = 0.0f; + for (int l51 = 0; l51 < 16384; l51 = l51 + 1) { + fVec18[l51] = 0.0f; } - for (int l49 = 0; (l49 < 8192); l49 = (l49 + 1)) { - fVec20[l49] = 0.0f; + for (int l52 = 0; l52 < 16384; l52 = l52 + 1) { + fVec19[l52] = 0.0f; } - for (int l50 = 0; (l50 < 2048); l50 = (l50 + 1)) { - fVec21[l50] = 0.0f; + for (int l53 = 0; l53 < 2; l53 = l53 + 1) { + fRec49[l53] = 0.0f; } - for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { - fRec51[l51] = 0.0f; + for (int l54 = 0; l54 < 2; l54 = l54 + 1) { + fRec47[l54] = 0.0f; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec49[l52] = 0.0f; + for (int l55 = 0; l55 < 8192; l55 = l55 + 1) { + fVec20[l55] = 0.0f; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec47[l53] = 0.0f; + for (int l56 = 0; l56 < 16384; l56 = l56 + 1) { + fVec21[l56] = 0.0f; } - for (int l54 = 0; (l54 < 16384); l54 = (l54 + 1)) { - fVec22[l54] = 0.0f; + for (int l57 = 0; l57 < 16384; l57 = l57 + 1) { + fVec22[l57] = 0.0f; } - for (int l55 = 0; (l55 < 8192); l55 = (l55 + 1)) { - fVec23[l55] = 0.0f; + for (int l58 = 0; l58 < 8192; l58 = l58 + 1) { + fVec23[l58] = 0.0f; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { - fRec45[l56] = 0.0f; + for (int l59 = 0; l59 < 2; l59 = l59 + 1) { + fRec45[l59] = 0.0f; } - for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec43[l57] = 0.0f; + for (int l60 = 0; l60 < 2; l60 = l60 + 1) { + fRec43[l60] = 0.0f; } - for (int l58 = 0; (l58 < 2); l58 = (l58 + 1)) { - fRec41[l58] = 0.0f; + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { + fRec41[l61] = 0.0f; + } + for (int l62 = 0; l62 < 2; l62 = l62 + 1) { + fRec39[l62] = 0.0f; + } + for (int l63 = 0; l63 < 2; l63 = l63 + 1) { + fRec60[l63] = 0.0f; + } + for (int l64 = 0; l64 < 2; l64 = l64 + 1) { + fRec61[l64] = 0.0f; + } + for (int l65 = 0; l65 < 2; l65 = l65 + 1) { + fRec62[l65] = 0.0f; } } @@ -1030,186 +1147,199 @@ class fx_room : public fx_room_dsp { ui_interface->openVerticalBox("fx_room"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("fb", &fHslider3, FAUSTFLOAT(0.300000012f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0500000007f)); - ui_interface->addHorizontalSlider("hfdamp", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("fb", &fHslider3, FAUSTFLOAT(0.3f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.05f)); + ui_interface->addHorizontalSlider("hfdamp", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.05f)); ui_interface->declare(&fHslider4, "unit", "ms"); - ui_interface->addHorizontalSlider("predelay", &fHslider4, FAUSTFLOAT(20.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(200.0f), FAUSTFLOAT(1.0f)); - ui_interface->addHorizontalSlider("size", &fHslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(3.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("predelay", &fHslider4, FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(2e+02f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("size", &fHslider1, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(3.0f), FAUSTFLOAT(0.05f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); + float fSlow1 = fConst1 * float(fHslider0); float fSlow2 = float(fHslider1); - float fSlow3 = std::floor(fSlow2); - float fSlow4 = (fSlow3 + (1.0f - fSlow2)); - int iSlow5 = int(fSlow2); - int iSlow6 = (iSlow5 == 0); - int iSlow7 = (iSlow5 == 1); - float fSlow8 = (1.0f - float(fHslider2)); - float fSlow9 = float(fHslider3); - float fSlow10 = (0.5f * fSlow9); - float fSlow11 = (fConst22 * float(fHslider4)); - float fSlow12 = std::floor(fSlow11); - float fSlow13 = (fSlow12 + (1.0f - fSlow11)); - int iSlow14 = int(fSlow11); - int iSlow15 = std::min(65537, std::max(0, iSlow14)); - float fSlow16 = (fSlow11 - fSlow12); - int iSlow17 = std::min(65537, std::max(0, (iSlow14 + 1))); - float fSlow18 = (0.400000006f * fSlow9); - float fSlow19 = (1.29900002f * fSlow9); - float fSlow20 = (fConst54 * fSlow9); - float fSlow21 = (fSlow2 - fSlow3); - int iSlow22 = int((fSlow2 + 1.0f)); - int iSlow23 = (iSlow22 == 0); - int iSlow24 = (iSlow22 == 1); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); + float fSlow3 = fConst1 * (fSlow2 - std::floor(fSlow2)); + float fSlow4 = float(fSlow2 >= 1.0f); + float fSlow5 = float(fSlow2 >= 2.0f); + float fSlow6 = 1.0f - float(fHslider2); + float fSlow7 = float(fHslider3); + float fSlow8 = fConst6 * fSlow7; + float fSlow9 = fConst21 * float(fHslider4); + float fSlow10 = std::floor(fSlow9); + float fSlow11 = fSlow10 + (1.0f - fSlow9); + int iSlow12 = int(fSlow9); + int iSlow13 = std::min(65537, std::max(0, iSlow12)); + float fSlow14 = fSlow9 - fSlow10; + int iSlow15 = std::min(65537, std::max(0, iSlow12 + 1)); + float fSlow16 = float(fSlow2 >= 3.0f); + float fSlow17 = 0.4f * fSlow7; + float fSlow18 = 1.299f * fSlow7; + float fSlow19 = 0.5f * fSlow7; + float fSlow20 = fSlow2 + 1.0f; + float fSlow21 = float(fSlow20 >= 1.0f); + float fSlow22 = float(fSlow20 >= 2.0f); + float fSlow23 = float(fSlow20 >= 3.0f); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fVec0[(IOTA & 65535)] = fTemp1; - fRec19[0] = ((fSlow8 * fRec19[1]) + (fSlow10 * fRec1[1])); - fRec18[0] = (fRec19[0] - (fConst9 * ((fConst12 * fRec18[2]) + (fConst13 * fRec18[1])))); - fRec17[0] = ((fConst9 * (((fConst11 * fRec18[0]) + (fConst14 * fRec18[1])) + (fConst11 * fRec18[2]))) - (fConst15 * ((fConst16 * fRec17[2]) + (fConst17 * fRec17[1])))); - float fTemp2 = ((fSlow13 * fVec0[((IOTA - iSlow15) & 65535)]) + (fSlow16 * fVec0[((IOTA - iSlow17) & 65535)])); - fRec21[0] = (fTemp2 - (fConst21 * ((fConst23 * fRec21[2]) + (fConst24 * fRec21[1])))); - fRec20[0] = ((fConst21 * (fRec21[2] + (fRec21[0] + (2.0f * fRec21[1])))) - (fConst20 * ((fConst25 * fRec20[2]) + (fConst24 * fRec20[1])))); - float fTemp3 = (((fConst6 * (fRec17[2] + (fRec17[0] + (2.0f * fRec17[1])))) + (fConst20 * (fRec20[2] + (fRec20[0] + (2.0f * fRec20[1]))))) - (0.300000012f * fRec15[1])); - fVec1[(IOTA & 2047)] = fTemp3; - fRec15[0] = fVec1[((IOTA - iConst26) & 2047)]; - float fRec16 = (0.300000012f * fTemp3); - float fTemp4 = ((fRec16 + fRec15[1]) - (0.300000012f * fRec13[1])); - fVec2[(IOTA & 4095)] = fTemp4; - fRec13[0] = fVec2[((IOTA - iConst27) & 4095)]; - float fRec14 = (0.300000012f * fTemp4); - float fTemp5 = (fRec14 + fRec13[1]); - fVec3[(IOTA & 4095)] = fTemp5; - float fTemp6 = (fVec3[((IOTA - iConst29) & 4095)] - (0.5f * fRec9[1])); - fVec4[(IOTA & 16383)] = fTemp6; - float fTemp7 = (fVec4[((IOTA - iConst30) & 16383)] - (0.25f * fRec11[1])); - fVec5[(IOTA & 16383)] = fTemp7; - fRec11[0] = fVec5[((IOTA - iConst31) & 16383)]; - float fRec12 = (0.25f * fTemp7); - fRec9[0] = (fRec12 + fRec11[1]); - float fRec10 = (0.5f * fTemp6); - float fTemp8 = (fRec10 + fRec9[1]); - fVec6[(IOTA & 8191)] = fTemp8; - float fTemp9 = (fVec6[((IOTA - iConst33) & 8191)] - (0.5f * fRec3[1])); - fVec7[(IOTA & 16383)] = fTemp9; - float fTemp10 = (fVec7[((IOTA - iConst34) & 16383)] - (0.25f * fRec5[1])); - fVec8[(IOTA & 16383)] = fTemp10; - float fTemp11 = (fVec8[((IOTA - iConst35) & 16383)] - (0.25f * fRec7[1])); - fVec9[(IOTA & 8191)] = fTemp11; - fRec7[0] = fVec9[((IOTA - iConst36) & 8191)]; - float fRec8 = (0.25f * fTemp11); - fRec5[0] = (fRec8 + fRec7[1]); - float fRec6 = (0.25f * fTemp10); - fRec3[0] = (fRec6 + fRec5[1]); - float fRec4 = (0.5f * fTemp9); - fRec1[0] = (fRec4 + fRec3[1]); - float fRec2 = ((0.800000012f * fVec6[((IOTA - iConst32) & 8191)]) + (1.5f * fVec3[((IOTA - iConst28) & 4095)])); - float fTemp12 = (fRec1[0] + (0.800000012f * fRec2)); - fRec38[0] = (fRec22[1] - (fConst9 * ((fConst12 * fRec38[2]) + (fConst13 * fRec38[1])))); - fRec37[0] = ((fConst9 * (((fConst11 * fRec38[0]) + (fConst14 * fRec38[1])) + (fConst11 * fRec38[2]))) - (fConst15 * ((fConst16 * fRec37[2]) + (fConst17 * fRec37[1])))); - fRec36[0] = ((fSlow8 * fRec36[1]) + (fConst15 * (fRec37[2] + (fRec37[0] + (2.0f * fRec37[1]))))); - fRec40[0] = (fTemp2 - (fConst40 * ((fConst41 * fRec40[2]) + (fConst42 * fRec40[1])))); - fRec39[0] = ((fConst40 * (fRec40[2] + (fRec40[0] + (2.0f * fRec40[1])))) - (fConst39 * ((fConst43 * fRec39[2]) + (fConst42 * fRec39[1])))); - float fTemp13 = (fConst39 * (fRec39[2] + (fRec39[0] + (2.0f * fRec39[1])))); - float fTemp14 = (((fSlow19 * fRec36[0]) + fTemp13) - (0.25f * fRec30[1])); - fVec10[(IOTA & 8191)] = fTemp14; - float fTemp15 = (fVec10[((IOTA - iConst44) & 8191)] - (0.349999994f * fRec32[1])); - fVec11[(IOTA & 2047)] = fTemp15; - float fTemp16 = (fVec11[((IOTA - iConst45) & 2047)] - (0.449999988f * fRec34[1])); - fVec12[(IOTA & 8191)] = fTemp16; - fRec34[0] = fVec12[((IOTA - iConst46) & 8191)]; - float fRec35 = (0.449999988f * fTemp16); - fRec32[0] = (fRec35 + fRec34[1]); - float fRec33 = (0.349999994f * fTemp15); - fRec30[0] = (fRec33 + fRec32[1]); - float fRec31 = (0.25f * fTemp14); - float fTemp17 = (fRec31 + fRec30[1]); - fVec13[(IOTA & 1023)] = fTemp17; - float fTemp18 = (fVec13[((IOTA - iConst47) & 1023)] - (0.449999988f * fRec28[1])); - fVec14[(IOTA & 8191)] = fTemp18; - fRec28[0] = fVec14[((IOTA - iConst36) & 8191)]; - float fRec29 = (0.449999988f * fTemp18); - float fTemp19 = (fRec29 + fRec28[1]); - fVec15[(IOTA & 16383)] = fTemp19; - float fTemp20 = ((fTemp2 + (fSlow18 * fVec15[((IOTA - iConst49) & 16383)])) - (0.25f * fRec24[1])); - fVec16[(IOTA & 8191)] = fTemp20; - float fTemp21 = (fVec16[((IOTA - iConst50) & 8191)] - (0.349999994f * fRec26[1])); - fVec17[(IOTA & 2047)] = fTemp21; - fRec26[0] = fVec17[((IOTA - iConst51) & 2047)]; - float fRec27 = (0.349999994f * fTemp21); - fRec24[0] = (fRec27 + fRec26[1]); - float fRec25 = (0.25f * fTemp20); - fRec22[0] = (fRec25 + fRec24[1]); - float fRec23 = (0.5f * (fTemp17 + fVec15[((IOTA - iConst48) & 16383)])); - float fTemp22 = (fRec23 + (0.5f * fRec22[0])); - fRec55[0] = ((0.99000001f * fRec41[1]) - (fConst57 * ((fConst60 * fRec55[2]) + (fConst61 * fRec55[1])))); - fRec54[0] = ((fConst57 * (((fConst59 * fRec55[0]) + (fConst62 * fRec55[1])) + (fConst59 * fRec55[2]))) - (fConst54 * ((fConst63 * fRec54[2]) + (fConst64 * fRec54[1])))); - fRec53[0] = ((fSlow8 * fRec53[1]) + (fSlow20 * (fRec54[2] + (fRec54[0] + (2.0f * fRec54[1]))))); - fVec18[(IOTA & 8191)] = (fRec53[0] + fTemp13); - float fTemp23 = (fVec18[((IOTA - iConst65) & 8191)] - (0.150000006f * fRec47[1])); - fVec19[(IOTA & 8191)] = fTemp23; - float fTemp24 = (fVec19[((IOTA - iConst44) & 8191)] - (0.25f * fRec49[1])); - fVec20[(IOTA & 8191)] = fTemp24; - float fTemp25 = (fVec20[((IOTA - iConst46) & 8191)] - (0.300000012f * fRec51[1])); - fVec21[(IOTA & 2047)] = fTemp25; - fRec51[0] = fVec21[((IOTA - iConst45) & 2047)]; - float fRec52 = (0.300000012f * fTemp25); - fRec49[0] = (fRec52 + fRec51[1]); - float fRec50 = (0.25f * fTemp24); - fRec47[0] = (fRec50 + fRec49[1]); - float fRec48 = (0.150000006f * fTemp23); - float fTemp26 = (fRec48 + fRec47[1]); - float fTemp27 = (fTemp26 - (0.0799999982f * fRec43[1])); - fVec22[(IOTA & 16383)] = fTemp27; - float fTemp28 = (fVec22[((IOTA - iConst66) & 16383)] - (0.300000012f * fRec45[1])); - fVec23[(IOTA & 8191)] = fTemp28; - fRec45[0] = fVec23[((IOTA - iConst36) & 8191)]; - float fRec46 = (0.300000012f * fTemp28); - fRec43[0] = (fRec46 + fRec45[1]); - float fRec44 = (0.0799999982f * fTemp27); - fRec41[0] = (fRec44 + fRec43[1]); - float fRec42 = fTemp26; - float fTemp29 = (0.5f * (fRec41[0] + fRec42)); - float fThen2 = (iSlow7 ? fTemp22 : fTemp12); - float fThen4 = (iSlow24 ? fTemp22 : fTemp12); - float fThen5 = (((1.0f - fRec0[0]) * fTemp1) + (fRec0[0] * ((fSlow4 * (iSlow6 ? fTemp29 : fThen2)) + (fSlow21 * (iSlow23 ? fTemp29 : fThen4))))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen5)); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fVec0[IOTA0 & 65535] = fTemp1; + fRec1[0] = fSlow3 + fConst2 * fRec1[1]; + float fTemp2 = fConst3 + fRec2[1]; + float fTemp3 = fRec2[1] - fConst3; + fRec2[0] = ((fTemp2 < fSlow4) ? fTemp2 : ((fTemp3 > fSlow4) ? fTemp3 : fSlow4)); + float fTemp4 = fConst3 + fRec3[1]; + float fTemp5 = fRec3[1] - fConst3; + fRec3[0] = ((fTemp4 < fSlow5) ? fTemp4 : ((fTemp5 > fSlow5) ? fTemp5 : fSlow5)); + fRec18[0] = 0.99f * fRec4[1] - fConst9 * (fConst12 * fRec18[2] + fConst13 * fRec18[1]); + fRec17[0] = fConst9 * (fConst11 * fRec18[0] + fConst14 * fRec18[1] + fConst11 * fRec18[2]) - fConst6 * (fConst15 * fRec17[2] + fConst16 * fRec17[1]); + fRec16[0] = fSlow6 * fRec16[1] + fSlow8 * (fRec17[2] + fRec17[0] + 2.0f * fRec17[1]); + float fTemp6 = fSlow11 * fVec0[(IOTA0 - iSlow13) & 65535] + fSlow14 * fVec0[(IOTA0 - iSlow15) & 65535]; + fRec20[0] = fTemp6 - fConst20 * (fConst22 * fRec20[2] + fConst23 * fRec20[1]); + fRec19[0] = fConst20 * (fRec20[2] + fRec20[0] + 2.0f * fRec20[1]) - fConst19 * (fConst24 * fRec19[2] + fConst23 * fRec19[1]); + float fTemp7 = fConst19 * (fRec19[2] + fRec19[0] + 2.0f * fRec19[1]); + fVec1[IOTA0 & 8191] = fRec16[0] + fTemp7; + float fTemp8 = fVec1[(IOTA0 - iConst25) & 8191] - 0.15f * fRec10[1]; + fVec2[IOTA0 & 8191] = fTemp8; + float fTemp9 = fVec2[(IOTA0 - iConst26) & 8191] - 0.25f * fRec12[1]; + fVec3[IOTA0 & 8191] = fTemp9; + float fTemp10 = fVec3[(IOTA0 - iConst27) & 8191] - 0.3f * fRec14[1]; + fVec4[IOTA0 & 2047] = fTemp10; + fRec14[0] = fVec4[(IOTA0 - iConst28) & 2047]; + float fRec15 = 0.3f * fTemp10; + fRec12[0] = fRec15 + fRec14[1]; + float fRec13 = 0.25f * fTemp9; + fRec10[0] = fRec13 + fRec12[1]; + float fRec11 = 0.15f * fTemp8; + float fTemp11 = fRec11 + fRec10[1]; + float fTemp12 = fTemp11 - 0.08f * fRec6[1]; + fVec5[IOTA0 & 16383] = fTemp12; + float fTemp13 = fVec5[(IOTA0 - iConst29) & 16383] - 0.3f * fRec8[1]; + fVec6[IOTA0 & 8191] = fTemp13; + fRec8[0] = fVec6[(IOTA0 - iConst30) & 8191]; + float fRec9 = 0.3f * fTemp13; + fRec6[0] = fRec9 + fRec8[1]; + float fRec7 = 0.08f * fTemp12; + fRec4[0] = fRec7 + fRec6[1]; + float fRec5 = fTemp11; + float fTemp14 = fRec4[0] + fRec5; + float fTemp15 = fConst3 + fRec21[1]; + float fTemp16 = fRec21[1] - fConst3; + fRec21[0] = ((fTemp15 < fSlow16) ? fTemp15 : ((fTemp16 > fSlow16) ? fTemp16 : fSlow16)); + fRec38[0] = fRec22[1] - fConst37 * (fConst40 * fRec38[2] + fConst41 * fRec38[1]); + fRec37[0] = fConst37 * (fConst39 * fRec38[0] + fConst42 * fRec38[1] + fConst39 * fRec38[2]) - fConst34 * (fConst43 * fRec37[2] + fConst44 * fRec37[1]); + fRec36[0] = fSlow6 * fRec36[1] + fConst34 * (fRec37[2] + fRec37[0] + 2.0f * fRec37[1]); + float fTemp17 = fTemp7 + fSlow18 * fRec36[0] - 0.25f * fRec30[1]; + fVec7[IOTA0 & 8191] = fTemp17; + float fTemp18 = fVec7[(IOTA0 - iConst26) & 8191] - 0.35f * fRec32[1]; + fVec8[IOTA0 & 2047] = fTemp18; + float fTemp19 = fVec8[(IOTA0 - iConst28) & 2047] - 0.45f * fRec34[1]; + fVec9[IOTA0 & 8191] = fTemp19; + fRec34[0] = fVec9[(IOTA0 - iConst27) & 8191]; + float fRec35 = 0.45f * fTemp19; + fRec32[0] = fRec35 + fRec34[1]; + float fRec33 = 0.35f * fTemp18; + fRec30[0] = fRec33 + fRec32[1]; + float fRec31 = 0.25f * fTemp17; + float fTemp20 = fRec31 + fRec30[1]; + fVec10[IOTA0 & 1023] = fTemp20; + float fTemp21 = fVec10[(IOTA0 - iConst45) & 1023] - 0.45f * fRec28[1]; + fVec11[IOTA0 & 8191] = fTemp21; + fRec28[0] = fVec11[(IOTA0 - iConst30) & 8191]; + float fRec29 = 0.45f * fTemp21; + float fTemp22 = fRec29 + fRec28[1]; + fVec12[IOTA0 & 16383] = fTemp22; + float fTemp23 = fTemp6 + fSlow17 * fVec12[(IOTA0 - iConst47) & 16383] - 0.25f * fRec24[1]; + fVec13[IOTA0 & 8191] = fTemp23; + float fTemp24 = fVec13[(IOTA0 - iConst48) & 8191] - 0.35f * fRec26[1]; + fVec14[IOTA0 & 2047] = fTemp24; + fRec26[0] = fVec14[(IOTA0 - iConst49) & 2047]; + float fRec27 = 0.35f * fTemp24; + fRec24[0] = fRec27 + fRec26[1]; + float fRec25 = 0.25f * fTemp23; + fRec22[0] = fRec25 + fRec24[1]; + float fRec23 = 0.5f * (fTemp20 + fVec12[(IOTA0 - iConst46) & 16383]); + float fTemp25 = fRec23 + 0.5f * fRec22[0]; + fRec57[0] = fSlow6 * fRec57[1] + fSlow19 * fRec39[1]; + fRec56[0] = fRec57[0] - fConst37 * (fConst40 * fRec56[2] + fConst41 * fRec56[1]); + fRec55[0] = fConst37 * (fConst39 * fRec56[0] + fConst42 * fRec56[1] + fConst39 * fRec56[2]) - fConst34 * (fConst43 * fRec55[2] + fConst44 * fRec55[1]); + fRec59[0] = fTemp6 - fConst54 * (fConst55 * fRec59[2] + fConst56 * fRec59[1]); + fRec58[0] = fConst54 * (fRec59[2] + fRec59[0] + 2.0f * fRec59[1]) - fConst53 * (fConst57 * fRec58[2] + fConst56 * fRec58[1]); + float fTemp26 = fConst50 * (fRec55[2] + fRec55[0] + 2.0f * fRec55[1]) + fConst53 * (fRec58[2] + fRec58[0] + 2.0f * fRec58[1]) - 0.3f * fRec53[1]; + fVec15[IOTA0 & 2047] = fTemp26; + fRec53[0] = fVec15[(IOTA0 - iConst58) & 2047]; + float fRec54 = 0.3f * fTemp26; + float fTemp27 = fRec54 + fRec53[1] - 0.3f * fRec51[1]; + fVec16[IOTA0 & 4095] = fTemp27; + fRec51[0] = fVec16[(IOTA0 - iConst59) & 4095]; + float fRec52 = 0.3f * fTemp27; + float fTemp28 = fRec52 + fRec51[1]; + fVec17[IOTA0 & 4095] = fTemp28; + float fTemp29 = fVec17[(IOTA0 - iConst61) & 4095] - 0.5f * fRec47[1]; + fVec18[IOTA0 & 16383] = fTemp29; + float fTemp30 = fVec18[(IOTA0 - iConst62) & 16383] - 0.25f * fRec49[1]; + fVec19[IOTA0 & 16383] = fTemp30; + fRec49[0] = fVec19[(IOTA0 - iConst63) & 16383]; + float fRec50 = 0.25f * fTemp30; + fRec47[0] = fRec50 + fRec49[1]; + float fRec48 = 0.5f * fTemp29; + float fTemp31 = fRec48 + fRec47[1]; + fVec20[IOTA0 & 8191] = fTemp31; + float fTemp32 = fVec20[(IOTA0 - iConst65) & 8191] - 0.5f * fRec41[1]; + fVec21[IOTA0 & 16383] = fTemp32; + float fTemp33 = fVec21[(IOTA0 - iConst66) & 16383] - 0.25f * fRec43[1]; + fVec22[IOTA0 & 16383] = fTemp33; + float fTemp34 = fVec22[(IOTA0 - iConst67) & 16383] - 0.25f * fRec45[1]; + fVec23[IOTA0 & 8191] = fTemp34; + fRec45[0] = fVec23[(IOTA0 - iConst30) & 8191]; + float fRec46 = 0.25f * fTemp34; + fRec43[0] = fRec46 + fRec45[1]; + float fRec44 = 0.25f * fTemp33; + fRec41[0] = fRec44 + fRec43[1]; + float fRec42 = 0.5f * fTemp32; + fRec39[0] = fRec42 + fRec41[1]; + float fRec40 = 0.8f * fVec20[(IOTA0 - iConst64) & 8191] + 1.5f * fVec17[(IOTA0 - iConst60) & 4095]; + float fTemp35 = fRec39[0] + 0.8f * fRec40; + float fTemp36 = fConst3 + fRec60[1]; + float fTemp37 = fRec60[1] - fConst3; + fRec60[0] = ((fTemp36 < fSlow21) ? fTemp36 : ((fTemp37 > fSlow21) ? fTemp37 : fSlow21)); + float fTemp38 = fConst3 + fRec61[1]; + float fTemp39 = fRec61[1] - fConst3; + fRec61[0] = ((fTemp38 < fSlow22) ? fTemp38 : ((fTemp39 > fSlow22) ? fTemp39 : fSlow22)); + float fTemp40 = fConst3 + fRec62[1]; + float fTemp41 = fRec62[1] - fConst3; + fRec62[0] = ((fTemp40 < fSlow23) ? fTemp40 : ((fTemp41 > fSlow23) ? fTemp41 : fSlow23)); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : (1.0f - fRec0[0]) * fTemp1 + fRec0[0] * ((1.0f - fRec1[0]) * (0.5f * fRec2[0] * (1.0f - fRec3[0]) * fTemp14 + fRec3[0] * ((1.0f - fRec21[0]) * fTemp25 + fRec21[0] * fTemp35)) + fRec1[0] * (0.5f * fRec60[0] * (1.0f - fRec61[0]) * fTemp14 + fRec61[0] * ((1.0f - fRec62[0]) * fTemp25 + fRec62[0] * fTemp35))))); fRec0[1] = fRec0[0]; - IOTA = (IOTA + 1); - fRec19[1] = fRec19[0]; + IOTA0 = IOTA0 + 1; + fRec1[1] = fRec1[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; fRec18[2] = fRec18[1]; fRec18[1] = fRec18[0]; fRec17[2] = fRec17[1]; fRec17[1] = fRec17[0]; - fRec21[2] = fRec21[1]; - fRec21[1] = fRec21[0]; + fRec16[1] = fRec16[0]; fRec20[2] = fRec20[1]; fRec20[1] = fRec20[0]; - fRec15[1] = fRec15[0]; - fRec13[1] = fRec13[0]; - fRec11[1] = fRec11[0]; - fRec9[1] = fRec9[0]; - fRec7[1] = fRec7[0]; - fRec5[1] = fRec5[0]; - fRec3[1] = fRec3[0]; - fRec1[1] = fRec1[0]; + fRec19[2] = fRec19[1]; + fRec19[1] = fRec19[0]; + fRec14[1] = fRec14[0]; + fRec12[1] = fRec12[0]; + fRec10[1] = fRec10[0]; + fRec8[1] = fRec8[0]; + fRec6[1] = fRec6[0]; + fRec4[1] = fRec4[0]; + fRec21[1] = fRec21[0]; fRec38[2] = fRec38[1]; fRec38[1] = fRec38[0]; fRec37[2] = fRec37[1]; fRec37[1] = fRec37[0]; fRec36[1] = fRec36[0]; - fRec40[2] = fRec40[1]; - fRec40[1] = fRec40[0]; - fRec39[2] = fRec39[1]; - fRec39[1] = fRec39[0]; fRec34[1] = fRec34[0]; fRec32[1] = fRec32[0]; fRec30[1] = fRec30[0]; @@ -1217,10 +1347,15 @@ class fx_room : public fx_room_dsp { fRec26[1] = fRec26[0]; fRec24[1] = fRec24[0]; fRec22[1] = fRec22[0]; + fRec57[1] = fRec57[0]; + fRec56[2] = fRec56[1]; + fRec56[1] = fRec56[0]; fRec55[2] = fRec55[1]; fRec55[1] = fRec55[0]; - fRec54[2] = fRec54[1]; - fRec54[1] = fRec54[0]; + fRec59[2] = fRec59[1]; + fRec59[1] = fRec59[0]; + fRec58[2] = fRec58[1]; + fRec58[1] = fRec58[0]; fRec53[1] = fRec53[0]; fRec51[1] = fRec51[0]; fRec49[1] = fRec49[0]; @@ -1228,6 +1363,10 @@ class fx_room : public fx_room_dsp { fRec45[1] = fRec45[0]; fRec43[1] = fRec43[0]; fRec41[1] = fRec41[0]; + fRec39[1] = fRec39[0]; + fRec60[1] = fRec60[0]; + fRec61[1] = fRec61[0]; + fRec62[1] = fRec62[0]; } } diff --git a/ceammc/ext/src/fx/fx_satrev.cpp b/ceammc/ext/src/fx/fx_satrev.cpp new file mode 100644 index 0000000000..b50001fdad --- /dev/null +++ b/ceammc/ext/src/fx/fx_satrev.cpp @@ -0,0 +1,33 @@ +#include "fx_satrev.h" +#include "ceammc_factory.h" + +using namespace ceammc; + +class FxSatReverb : public faust_fx_satrev_tilde { + Property* drywet_; + +public: + FxSatReverb(const PdArgs& args) + : faust_fx_satrev_tilde(args) + , drywet_(property("@drywet")) + { + if (drywet_) + drywet_->setArgIndex(0); + + createInlet(); + } + + void onInlet(size_t n, const AtomListView& lv) + { + if (drywet_) + drywet_->set(lv); + } +}; + +void setup_fx_satrev_tilde() +{ + SoundExternalFactory obj("fx.satrev~"); + obj.addMethod("reset", &FxSatReverb::m_reset); + + obj.setXletsInfo({ "signal: input", "float: drywet mix" }, { "signal: left output", "signal: right output" }); +} diff --git a/ceammc/ext/src/fx/fx_satrev.h b/ceammc/ext/src/fx/fx_satrev.h new file mode 100644 index 0000000000..e19dd25833 --- /dev/null +++ b/ceammc/ext/src/fx/fx_satrev.h @@ -0,0 +1,913 @@ +/* ------------------------------------------------------------ +name: "fx.satrev" +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_satrev -scn fx_satrev_dsp -es 1 -mcd 16 -single -ftz 0 +------------------------------------------------------------ */ + +#ifndef __fx_satrev_H__ +#define __fx_satrev_H__ + +// FAUST Architecture File for ceammc::SoundExternal class +#include +#include +#include +#include +#include + +/************************** BEGIN fx_satrev_dsp.h ******************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __dsp__ +#define __dsp__ + +#include +#include + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +struct FAUST_API UI; +struct FAUST_API Meta; + +/** + * DSP memory manager. + */ + +struct FAUST_API dsp_memory_manager { + + virtual ~dsp_memory_manager() {} + + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ + virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ + virtual void destroy(void* ptr) = 0; + +}; + +/** +* Signal processor definition. +*/ + +class FAUST_API fx_satrev_dsp { + + public: + + fx_satrev_dsp() {} + virtual ~fx_satrev_dsp() {} + + /* Return instance number of audio inputs */ + virtual int getNumInputs() = 0; + + /* Return instance number of audio outputs */ + virtual int getNumOutputs() = 0; + + /** + * Trigger the ui_interface parameter with instance specific calls + * to 'openTabBox', 'addButton', 'addVerticalSlider'... in order to build the UI. + * + * @param ui_interface - the user interface builder + */ + virtual void buildUserInterface(UI* ui_interface) = 0; + + /* Return the sample rate currently used by the instance */ + virtual int getSampleRate() = 0; + + /** + * Global init, calls the following methods: + * - static class 'classInit': static tables initialization + * - 'instanceInit': constants and instance state initialization + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void init(int sample_rate) = 0; + + /** + * Init instance state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceInit(int sample_rate) = 0; + + /** + * Init instance constant state + * + * @param sample_rate - the sampling rate in Hz + */ + virtual void instanceConstants(int sample_rate) = 0; + + /* Init default control parameters values */ + virtual void instanceResetUserInterface() = 0; + + /* Init instance state (like delay lines...) but keep the control parameter values */ + virtual void instanceClear() = 0; + + /** + * Return a clone of the instance. + * + * @return a copy of the instance on success, otherwise a null pointer. + */ + virtual fx_satrev_dsp* clone() = 0; + + /** + * Trigger the Meta* parameter with instance specific calls to 'declare' (key, value) metadata. + * + * @param m - the Meta* meta user + */ + virtual void metadata(Meta* m) = 0; + + /** + * DSP instance computation, to be called with successive in/out audio buffers. + * + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (eiher float, double or quad) + * + */ + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) = 0; + + /** + * DSP instance computation: alternative method to be used by subclasses. + * + * @param date_usec - the timestamp in microsec given by audio driver. + * @param count - the number of frames to compute + * @param inputs - the input audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * @param outputs - the output audio buffers as an array of non-interleaved FAUSTFLOAT samples (either float, double or quad) + * + */ + virtual void compute(double /*date_usec*/, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { compute(count, inputs, outputs); } + +}; + +/** + * Generic DSP decorator. + */ + +class FAUST_API decorator_dsp : public fx_satrev_dsp { + + protected: + + fx_satrev_dsp* fDSP; + + public: + + decorator_dsp(fx_satrev_dsp* fx_satrev_dsp = nullptr):fDSP(fx_satrev_dsp) {} + virtual ~decorator_dsp() { delete fDSP; } + + virtual int getNumInputs() { return fDSP->getNumInputs(); } + virtual int getNumOutputs() { return fDSP->getNumOutputs(); } + virtual void buildUserInterface(UI* ui_interface) { fDSP->buildUserInterface(ui_interface); } + virtual int getSampleRate() { return fDSP->getSampleRate(); } + virtual void init(int sample_rate) { fDSP->init(sample_rate); } + virtual void instanceInit(int sample_rate) { fDSP->instanceInit(sample_rate); } + virtual void instanceConstants(int sample_rate) { fDSP->instanceConstants(sample_rate); } + virtual void instanceResetUserInterface() { fDSP->instanceResetUserInterface(); } + virtual void instanceClear() { fDSP->instanceClear(); } + virtual decorator_dsp* clone() { return new decorator_dsp(fDSP->clone()); } + virtual void metadata(Meta* m) { fDSP->metadata(m); } + // Beware: subclasses usually have to overload the two 'compute' methods + virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(count, inputs, outputs); } + virtual void compute(double date_usec, int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { fDSP->compute(date_usec, count, inputs, outputs); } + +}; + +/** + * DSP factory class, used with LLVM and Interpreter backends + * to create DSP instances from a compiled DSP program. + */ + +class FAUST_API dsp_factory { + + protected: + + // So that to force sub-classes to use deleteDSPFactory(dsp_factory* factory); + virtual ~dsp_factory() {} + + public: + + virtual std::string getName() = 0; + virtual std::string getSHAKey() = 0; + virtual std::string getDSPCode() = 0; + virtual std::string getCompileOptions() = 0; + virtual std::vector getLibraryList() = 0; + virtual std::vector getIncludePathnames() = 0; + + virtual fx_satrev_dsp* createDSPInstance() = 0; + + virtual void setMemoryManager(dsp_memory_manager* manager) = 0; + virtual dsp_memory_manager* getMemoryManager() = 0; + +}; + +// Denormal handling + +#if defined (__SSE__) +#include +#endif + +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + +#endif + +/************************** END fx_satrev_dsp.h **************************/ +/************************** BEGIN UI.h ***************************** + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ********************************************************************/ + +#ifndef __UI_H__ +#define __UI_H__ + + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +/******************************************************************************* + * UI : Faust DSP User Interface + * User Interface as expected by the buildUserInterface() method of a DSP. + * This abstract class contains only the method that the Faust compiler can + * generate to describe a DSP user interface. + ******************************************************************************/ + +struct Soundfile; + +template +struct FAUST_API UIReal { + + UIReal() {} + virtual ~UIReal() {} + + // -- widget's layouts + + virtual void openTabBox(const char* label) = 0; + virtual void openHorizontalBox(const char* label) = 0; + virtual void openVerticalBox(const char* label) = 0; + virtual void closeBox() = 0; + + // -- active widgets + + virtual void addButton(const char* label, REAL* zone) = 0; + virtual void addCheckButton(const char* label, REAL* zone) = 0; + virtual void addVerticalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addHorizontalSlider(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + virtual void addNumEntry(const char* label, REAL* zone, REAL init, REAL min, REAL max, REAL step) = 0; + + // -- passive widgets + + virtual void addHorizontalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + virtual void addVerticalBargraph(const char* label, REAL* zone, REAL min, REAL max) = 0; + + // -- soundfiles + + virtual void addSoundfile(const char* label, const char* filename, Soundfile** sf_zone) = 0; + + // -- metadata declarations + + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + + // To be used by LLVM client + virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } +}; + +struct FAUST_API UI : public UIReal { + UI() {} + virtual ~UI() {} +}; + +#endif +/************************** END UI.h **************************/ +/************************** BEGIN meta.h ******************************* + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ************************************************************************/ + +#ifndef __meta__ +#define __meta__ + + +/** + The base class of Meta handler to be used in fx_satrev_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. + */ +struct FAUST_API Meta { + virtual ~Meta() {} + virtual void declare(const char* key, const char* value) = 0; +}; + +#endif +/************************** END meta.h **************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ + +#ifndef __misc__ +#define __misc__ + +#include +#include +#include +#include +#include +#include + + +struct MY_Meta : Meta, std::map +{ + void declare(const char* key, const char* value) { (*this)[key] = value; } +}; + +static int lsr(int x, int n) { return int(((unsigned int)x) >> n); } + +static int int2pow2(int x) { int r = 0; while ((1< +#include +#include +#include + +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_satrev +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + +class fx_satrev : public fx_satrev_dsp { + + private: + + FAUSTFLOAT fCheckbox0; + int fSampleRate; + float fConst0; + FAUSTFLOAT fHslider0; + float fConst1; + float fRec0[2]; + int IOTA0; + float fVec0[2048]; + float fRec7[2]; + float fRec8[2]; + float fVec1[1024]; + float fRec9[2]; + float fRec10[2]; + float fVec2[1024]; + float fRec11[2]; + float fRec12[2]; + float fVec3[1024]; + float fRec13[2]; + float fRec14[2]; + float fVec4[128]; + float fRec5[2]; + float fVec5[64]; + float fRec3[2]; + float fVec6[12]; + float fRec1[2]; + + public: + + void metadata(Meta* m) { + m->declare("basics.lib/bypass2:author", "Julius Smith"); + m->declare("basics.lib/name", "Faust Basic Element Library"); + m->declare("basics.lib/version", "0.8"); + m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); + m->declare("ceammc.lib/version", "0.1.2"); + m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); + m->declare("ceammc_ui.lib/version", "0.1.2"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_satrev -scn fx_satrev_dsp -es 1 -mcd 16 -single -ftz 0"); + m->declare("delays.lib/name", "Faust Delay Library"); + m->declare("delays.lib/version", "0.1"); + m->declare("filename", "fx_satrev.dsp"); + m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/fb_comb:author", "Julius O. Smith III"); + m->declare("filters.lib/fb_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/fb_comb:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/name", "Faust Filters Library"); + m->declare("filters.lib/rev1:author", "Julius O. Smith III"); + m->declare("filters.lib/rev1:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/rev1:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/rev2:author", "Julius O. Smith III"); + m->declare("filters.lib/rev2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/rev2:license", "MIT-style STK-4.3 license"); + m->declare("filters.lib/version", "0.3"); + m->declare("maths.lib/author", "GRAME"); + m->declare("maths.lib/copyright", "GRAME"); + m->declare("maths.lib/license", "LGPL with exception"); + m->declare("maths.lib/name", "Faust Math Library"); + m->declare("maths.lib/version", "2.5"); + m->declare("name", "fx.satrev"); + m->declare("platform.lib/name", "Generic Platform Library"); + m->declare("platform.lib/version", "0.2"); + m->declare("reverbs.lib/name", "Faust Reverb Library"); + m->declare("reverbs.lib/version", "0.2"); + m->declare("routes.lib/name", "Faust Signal Routing Library"); + m->declare("routes.lib/version", "0.2"); + m->declare("signals.lib/name", "Faust Signal Routing Library"); + m->declare("signals.lib/version", "0.3"); + } + + virtual int getNumInputs() { + return 1; + } + virtual int getNumOutputs() { + return 2; + } + + static void classInit(int sample_rate) { + } + + virtual void instanceConstants(int sample_rate) { + fSampleRate = sample_rate; + fConst0 = 44.1f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 1.0f - fConst0; + } + + virtual void instanceResetUserInterface() { + fCheckbox0 = FAUSTFLOAT(0.0f); + fHslider0 = FAUSTFLOAT(0.25f); + } + + virtual void instanceClear() { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { + fRec0[l0] = 0.0f; + } + IOTA0 = 0; + for (int l1 = 0; l1 < 2048; l1 = l1 + 1) { + fVec0[l1] = 0.0f; + } + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec7[l2] = 0.0f; + } + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec8[l3] = 0.0f; + } + for (int l4 = 0; l4 < 1024; l4 = l4 + 1) { + fVec1[l4] = 0.0f; + } + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { + fRec9[l5] = 0.0f; + } + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { + fRec10[l6] = 0.0f; + } + for (int l7 = 0; l7 < 1024; l7 = l7 + 1) { + fVec2[l7] = 0.0f; + } + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { + fRec11[l8] = 0.0f; + } + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { + fRec12[l9] = 0.0f; + } + for (int l10 = 0; l10 < 1024; l10 = l10 + 1) { + fVec3[l10] = 0.0f; + } + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { + fRec13[l11] = 0.0f; + } + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { + fRec14[l12] = 0.0f; + } + for (int l13 = 0; l13 < 128; l13 = l13 + 1) { + fVec4[l13] = 0.0f; + } + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { + fRec5[l14] = 0.0f; + } + for (int l15 = 0; l15 < 64; l15 = l15 + 1) { + fVec5[l15] = 0.0f; + } + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { + fRec3[l16] = 0.0f; + } + for (int l17 = 0; l17 < 12; l17 = l17 + 1) { + fVec6[l17] = 0.0f; + } + for (int l18 = 0; l18 < 2; l18 = l18 + 1) { + fRec1[l18] = 0.0f; + } + } + + virtual void init(int sample_rate) { + classInit(sample_rate); + instanceInit(sample_rate); + } + virtual void instanceInit(int sample_rate) { + instanceConstants(sample_rate); + instanceResetUserInterface(); + instanceClear(); + } + + virtual fx_satrev* clone() { + return new fx_satrev(); + } + + virtual int getSampleRate() { + return fSampleRate; + } + + virtual void buildUserInterface(UI* ui_interface) { + ui_interface->openVerticalBox("fx.satrev"); + ui_interface->addCheckButton("bypass", &fCheckbox0); + ui_interface->declare(&fHslider0, "style", "knob"); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.25f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->closeBox(); + } + + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { + FAUSTFLOAT* input0 = inputs[0]; + FAUSTFLOAT* output0 = outputs[0]; + FAUSTFLOAT* output1 = outputs[1]; + int iSlow0 = int(float(fCheckbox0)); + float fSlow1 = fConst0 * float(fHslider0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = float(input0[i0]); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst1 * fRec0[1]; + float fTemp2 = fTemp1 * (1.0f - fRec0[0]); + float fTemp3 = 0.2f * fTemp1; + float fTemp4 = fTemp3 + 0.764f * fRec7[1]; + fVec0[IOTA0 & 2047] = fTemp4; + fRec7[0] = fVec0[(IOTA0 - 1122) & 2047]; + fRec8[0] = fTemp4; + float fTemp5 = fTemp3 + 0.783f * fRec9[1]; + fVec1[IOTA0 & 1023] = fTemp5; + fRec9[0] = fVec1[(IOTA0 - 1010) & 1023]; + fRec10[0] = fTemp5; + float fTemp6 = fTemp3 + 0.805f * fRec11[1]; + fVec2[IOTA0 & 1023] = fTemp6; + fRec11[0] = fVec2[(IOTA0 - 900) & 1023]; + fRec12[0] = fTemp6; + float fTemp7 = 0.827f * fRec13[1] + fTemp3; + fVec3[IOTA0 & 1023] = fTemp7; + fRec13[0] = fVec3[(IOTA0 - 777) & 1023]; + fRec14[0] = fTemp7; + float fTemp8 = fRec8[1] + fRec10[1] + fRec12[1] + 0.7f * fRec5[1] + fRec14[1]; + fVec4[IOTA0 & 127] = fTemp8; + fRec5[0] = fVec4[(IOTA0 - 124) & 127]; + float fRec6 = 0.0f - 0.7f * fTemp8; + float fTemp9 = fRec6 + 0.7f * fRec3[1] + fRec5[1]; + fVec5[IOTA0 & 63] = fTemp9; + fRec3[0] = fVec5[(IOTA0 - 41) & 63]; + float fRec4 = 0.0f - 0.7f * fTemp9; + float fTemp10 = fRec4 + 0.7f * fRec1[1] + fRec3[1]; + fVec6[0] = fTemp10; + fRec1[0] = fVec6[11]; + float fRec2 = 0.0f - 0.7f * fTemp10; + float fTemp11 = fRec2 + fRec1[1]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp2 + fRec0[0] * fTemp11)); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp2 + fRec0[0] * (0.0f - fTemp11))); + fRec0[1] = fRec0[0]; + IOTA0 = IOTA0 + 1; + fRec7[1] = fRec7[0]; + fRec8[1] = fRec8[0]; + fRec9[1] = fRec9[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec12[1] = fRec12[0]; + fRec13[1] = fRec13[0]; + fRec14[1] = fRec14[0]; + fRec5[1] = fRec5[0]; + fRec3[1] = fRec3[0]; + for (int j0 = 11; j0 > 0; j0 = j0 - 1) { + fVec6[j0] = fVec6[j0 - 1]; + } + fRec1[1] = fRec1[0]; + } + } + +}; +// clang-format on +#endif + + template + struct _fx_satrev_UI : public UI { + static std::string name; +}; + +template +std::string _fx_satrev_UI::name(sym(fx_satrev)); + +typedef _fx_satrev_UI fx_satrev_UI; + +class faust_fx_satrev_tilde : public FaustExternal { +public: + faust_fx_satrev_tilde(const ceammc::PdArgs& args) + : FaustExternal(args) + { + } +}; + +#endif diff --git a/ceammc/ext/src/fx/fx_sdelay.h b/ceammc/ext/src/fx/fx_sdelay.h index 893cacf612..cb2af331a2 100644 --- a/ceammc/ext/src/fx/fx_sdelay.h +++ b/ceammc/ext/src/fx/fx_sdelay.h @@ -4,8 +4,8 @@ copyright: "Grame" license: "STK-4.3" name: "fx.sdelay" version: "1.0" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_sdelay -scn fx_sdelay_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_sdelay_H__ @@ -18,23 +18,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_sdelay_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_sdelay_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -48,22 +48,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -72,7 +157,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_sdelay_dsp { +class FAUST_API fx_sdelay_dsp { public: @@ -166,7 +251,7 @@ class fx_sdelay_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_sdelay_dsp { +class FAUST_API decorator_dsp : public fx_sdelay_dsp { protected: @@ -199,7 +284,7 @@ class decorator_dsp : public fx_sdelay_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -228,18 +313,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -247,7 +335,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -258,16 +346,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -280,38 +366,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_sdelay_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -326,8 +413,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -357,37 +444,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -398,40 +484,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_sdelay_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -444,14 +530,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -553,7 +631,6 @@ struct fx_sdelay : public fx_sdelay_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_sdelay #endif @@ -563,6 +640,13 @@ struct fx_sdelay : public fx_sdelay_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_sdelay : public fx_sdelay_dsp { private: @@ -574,9 +658,9 @@ class fx_sdelay : public fx_sdelay_dsp { float fConst2; float fRec0[2]; FAUSTFLOAT fHslider1; - int IOTA; + int IOTA0; float fVec0[2097152]; - int iConst3; + float fConst3; float fConst4; FAUSTFLOAT fHslider2; float fRec6[2]; @@ -592,13 +676,14 @@ class fx_sdelay : public fx_sdelay_dsp { void metadata(Meta* m) { m->declare("author", "Yann Orlarey"); + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_sdelay -scn fx_sdelay_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "Grame"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); @@ -613,7 +698,7 @@ class fx_sdelay : public fx_sdelay_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "1.0"); } @@ -629,12 +714,12 @@ class fx_sdelay : public fx_sdelay_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - iConst3 = int((6.0f * fConst0)); - fConst4 = (9.99999997e-07f * fConst0); - fConst5 = (1000.0f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = float(int(6.0f * fConst0)); + fConst4 = 1e-06f * fConst0; + fConst5 = 1e+03f / fConst0; } virtual void instanceResetUserInterface() { @@ -642,33 +727,33 @@ class fx_sdelay : public fx_sdelay_dsp { fHslider0 = FAUSTFLOAT(1.0f); fHslider1 = FAUSTFLOAT(0.0f); fHslider2 = FAUSTFLOAT(1.0f); - fHslider3 = FAUSTFLOAT(20.0f); + fHslider3 = FAUSTFLOAT(2e+01f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - IOTA = 0; - for (int l1 = 0; (l1 < 2097152); l1 = (l1 + 1)) { + IOTA0 = 0; + for (int l1 = 0; l1 < 2097152; l1 = l1 + 1) { fVec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec6[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec2[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec3[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec4[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec5[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec1[l7] = 0.0f; } } @@ -695,45 +780,41 @@ class fx_sdelay : public fx_sdelay_dsp { ui_interface->openVerticalBox("fx.sdelay"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(6000.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(6e+03f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider3, "unit", "ms"); - ui_interface->addHorizontalSlider("interpolation", &fHslider3, FAUSTFLOAT(20.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(200.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("interpolation", &fHslider3, FAUSTFLOAT(2e+01f), FAUSTFLOAT(1.0f), FAUSTFLOAT(2e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); + float fSlow1 = fConst1 * float(fHslider0); float fSlow2 = float(fHslider1); - float fSlow3 = (fConst4 * float(fHslider2)); - float fSlow4 = (fConst5 / float(fHslider3)); - float fSlow5 = (0.0f - fSlow4); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow3 = fConst4 * float(fHslider2); + float fSlow4 = fConst5 / float(fHslider3); + float fSlow5 = 0.0f - fSlow4; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - float fTemp2 = (fTemp1 + (fSlow2 * fRec1[1])); - fVec0[(IOTA & 2097151)] = fTemp2; - fRec6[0] = (fSlow3 + (0.999000013f * fRec6[1])); - float fThen2 = (((fRec3[1] == 1.0f) & (fRec6[0] != fRec5[1])) ? fSlow5 : 0.0f); - float fThen4 = (((fRec3[1] == 0.0f) & (fRec6[0] != fRec4[1])) ? fSlow4 : fThen2); - float fElse4 = (((fRec3[1] > 0.0f) & (fRec3[1] < 1.0f)) ? fRec2[1] : 0.0f); - float fTemp3 = ((fRec2[1] != 0.0f) ? fElse4 : fThen4); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = fTemp1 + fSlow2 * fRec1[1]; + fVec0[IOTA0 & 2097151] = fTemp2; + fRec6[0] = fSlow3 + 0.999f * fRec6[1]; + float fTemp3 = ((fRec2[1] != 0.0f) ? (((fRec3[1] > 0.0f) & (fRec3[1] < 1.0f)) ? fRec2[1] : 0.0f) : (((fRec3[1] == 0.0f) & (fRec6[0] != fRec4[1])) ? fSlow4 : (((fRec3[1] == 1.0f) & (fRec6[0] != fRec5[1])) ? fSlow5 : 0.0f))); fRec2[0] = fTemp3; - fRec3[0] = std::max(0.0f, std::min(1.0f, (fRec3[1] + fTemp3))); + fRec3[0] = std::max(0.0f, std::min(1.0f, fRec3[1] + fTemp3)); fRec4[0] = (((fRec3[1] >= 1.0f) & (fRec5[1] != fRec6[0])) ? fRec6[0] : fRec4[1]); fRec5[0] = (((fRec3[1] <= 0.0f) & (fRec4[1] != fRec6[0])) ? fRec6[0] : fRec5[1]); - float fTemp4 = fVec0[((IOTA - int(std::min(float(iConst3), std::max(0.0f, fRec4[0])))) & 2097151)]; - fRec1[0] = (fTemp4 + (fRec3[0] * (fVec0[((IOTA - int(std::min(float(iConst3), std::max(0.0f, fRec5[0])))) & 2097151)] - fTemp4))); - float fThen7 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[0])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen7)); + float fTemp4 = fVec0[(IOTA0 - int(std::min(fConst3, std::max(0.0f, fRec4[0])))) & 2097151]; + fRec1[0] = fTemp4 + fRec3[0] * (fVec0[(IOTA0 - int(std::min(fConst3, std::max(0.0f, fRec5[0])))) & 2097151] - fTemp4); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * fRec1[0])); fRec0[1] = fRec0[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec6[1] = fRec6[0]; fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; diff --git a/ceammc/ext/src/fx/fx_secho.h b/ceammc/ext/src/fx/fx_secho.h index b0cc09fce3..c7e5e4ba53 100644 --- a/ceammc/ext/src/fx/fx_secho.h +++ b/ceammc/ext/src/fx/fx_secho.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.secho" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_secho -scn fx_secho_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_secho_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_secho_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_secho_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_secho_dsp { +class FAUST_API fx_secho_dsp { public: @@ -162,7 +247,7 @@ class fx_secho_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_secho_dsp { +class FAUST_API decorator_dsp : public fx_secho_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_secho_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_secho_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_secho_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct fx_secho : public fx_secho_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_secho #endif @@ -559,6 +636,13 @@ struct fx_secho : public fx_secho_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_secho : public fx_secho_dsp { private: @@ -571,6 +655,7 @@ class fx_secho : public fx_secho_dsp { float fRec0[2]; FAUSTFLOAT fHslider1; float fRec2[2]; + int IOTA0; float fConst3; float fConst4; FAUSTFLOAT fHslider2; @@ -578,19 +663,19 @@ class fx_secho : public fx_secho_dsp { float fRec4[2]; float fRec5[2]; float fRec6[2]; - int IOTA; float fRec1[2097152]; public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_secho -scn fx_secho_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_secho.dsp"); @@ -603,7 +688,7 @@ class fx_secho : public fx_secho_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -618,41 +703,41 @@ class fx_secho : public fx_secho_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (10.0f * fConst0); - fConst4 = (0.00100000005f * fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + fConst3 = 1e+01f * fConst0; + fConst4 = 0.001f * fConst0; } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(0.29999999999999999f); - fHslider2 = FAUSTFLOAT(500.0f); + fHslider1 = FAUSTFLOAT(0.3f); + fHslider2 = FAUSTFLOAT(5e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + IOTA0 = 0; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec3[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec4[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec5[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec6[l5] = 0.0f; } - IOTA = 0; - for (int l6 = 0; (l6 < 2097152); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2097152; l6 = l6 + 1) { fRec1[l6] = 0.0f; } } @@ -679,44 +764,40 @@ class fx_secho : public fx_secho_dsp { ui_interface->openVerticalBox("fx.secho"); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(500.0f), FAUSTFLOAT(10.0f), FAUSTFLOAT(10000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("delay", &fHslider2, FAUSTFLOAT(5e+02f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(1e+04f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.300000012f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99000001f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("feedback", &fHslider1, FAUSTFLOAT(0.3f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.99f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = (fConst1 * float(fHslider1)); - float fSlow3 = (fConst4 * std::min(10000.0f, std::max(10.0f, float(fHslider2)))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst1 * float(fHslider0); + float fSlow2 = fConst1 * float(fHslider1); + float fSlow3 = fConst4 * std::min(1e+04f, std::max(1e+01f, float(fHslider2))); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - fRec2[0] = (fSlow2 + (fConst2 * fRec2[1])); - float fThen2 = (((fRec4[1] == 1.0f) & (fSlow3 != fRec6[1])) ? -0.0009765625f : 0.0f); - float fThen4 = (((fRec4[1] == 0.0f) & (fSlow3 != fRec5[1])) ? 0.0009765625f : fThen2); - float fElse4 = (((fRec4[1] > 0.0f) & (fRec4[1] < 1.0f)) ? fRec3[1] : 0.0f); - float fTemp2 = ((fRec3[1] != 0.0f) ? fElse4 : fThen4); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + fRec2[0] = fSlow2 + fConst2 * fRec2[1]; + float fTemp2 = ((fRec3[1] != 0.0f) ? (((fRec4[1] > 0.0f) & (fRec4[1] < 1.0f)) ? fRec3[1] : 0.0f) : (((fRec4[1] == 0.0f) & (fSlow3 != fRec5[1])) ? 0.0009765625f : (((fRec4[1] == 1.0f) & (fSlow3 != fRec6[1])) ? -0.0009765625f : 0.0f))); fRec3[0] = fTemp2; - fRec4[0] = std::max(0.0f, std::min(1.0f, (fRec4[1] + fTemp2))); + fRec4[0] = std::max(0.0f, std::min(1.0f, fRec4[1] + fTemp2)); fRec5[0] = (((fRec4[1] >= 1.0f) & (fRec6[1] != fSlow3)) ? fSlow3 : fRec5[1]); fRec6[0] = (((fRec4[1] <= 0.0f) & (fRec5[1] != fSlow3)) ? fSlow3 : fRec6[1]); - float fTemp3 = fRec1[((IOTA - (int(std::min(fConst3, std::max(0.0f, fRec5[0]))) + 1)) & 2097151)]; - fRec1[(IOTA & 2097151)] = (fTemp1 + (fRec2[0] * (fTemp3 + (fRec4[0] * (fRec1[((IOTA - (int(std::min(fConst3, std::max(0.0f, fRec6[0]))) + 1)) & 2097151)] - fTemp3))))); - float fThen7 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * fRec1[((IOTA - 0) & 2097151)])); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen7)); + float fTemp3 = fRec1[(IOTA0 - (int(std::min(fConst3, std::max(0.0f, fRec5[0]))) + 1)) & 2097151]; + fRec1[IOTA0 & 2097151] = fTemp1 + fRec2[0] * (fTemp3 + fRec4[0] * (fRec1[(IOTA0 - (int(std::min(fConst3, std::max(0.0f, fRec6[0]))) + 1)) & 2097151] - fTemp3)); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * fRec1[IOTA0 & 2097151])); fRec0[1] = fRec0[0]; fRec2[1] = fRec2[0]; + IOTA0 = IOTA0 + 1; fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; fRec5[1] = fRec5[0]; fRec6[1] = fRec6[0]; - IOTA = (IOTA + 1); } } diff --git a/ceammc/ext/src/fx/fx_shimmer.h b/ceammc/ext/src/fx/fx_shimmer.h index 1492f4140f..dbe2e6f121 100644 --- a/ceammc/ext/src/fx/fx_shimmer.h +++ b/ceammc/ext/src/fx/fx_shimmer.h @@ -2,8 +2,8 @@ author: "thedrgreenthumb" license: "MIT" name: "fx_shimmer" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_shimmer -scn fx_shimmer_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_shimmer_H__ @@ -16,23 +16,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_shimmer_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_shimmer_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -46,22 +46,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -70,7 +155,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_shimmer_dsp { +class FAUST_API fx_shimmer_dsp { public: @@ -164,7 +249,7 @@ class fx_shimmer_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_shimmer_dsp { +class FAUST_API decorator_dsp : public fx_shimmer_dsp { protected: @@ -197,7 +282,7 @@ class decorator_dsp : public fx_shimmer_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -220,51 +305,98 @@ class dsp_factory { }; -/** - * On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) - * flags to avoid costly denormals. - */ +// Denormal handling -#ifdef __SSE__ - #include - #ifdef __SSE2__ - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) - #else - #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) - #endif -#else - #define AVOIDDENORMALS +#if defined (__SSE__) +#include #endif +class FAUST_API ScopedNoDenormals { + + private: + + intptr_t fpsr = 0; + + void setFpStatusRegister(intptr_t fpsr_aux) noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + #elif defined (__SSE__) + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); + #endif + } + + void getFpStatusRegister() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + asm volatile("mrs %0, fpcr" : "=r" (fpsr)); + #elif defined (__SSE__) + fpsr = static_cast(_mm_getcsr()); + #endif + } + + public: + + ScopedNoDenormals() noexcept + { + #if defined (__arm64__) || defined (__aarch64__) + intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; + #endif + getFpStatusRegister(); + setFpStatusRegister(fpsr | mask); + } + + ~ScopedNoDenormals() noexcept + { + setFpStatusRegister(fpsr); + } + +}; + +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; + #endif + /************************** END fx_shimmer_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -279,8 +411,8 @@ class dsp_factory { struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -310,37 +442,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -351,40 +482,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_shimmer_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -397,14 +528,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -506,6 +629,21 @@ struct fx_shimmer : public fx_shimmer_dsp { #include #include +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_shimmer +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + class fx_shimmerSIG0 { private: @@ -523,19 +661,19 @@ class fx_shimmerSIG0 { } void instanceInitfx_shimmerSIG0(int sample_rate) { - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { iVec1[l4] = 0; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { iRec14[l5] = 0; } } void fillfx_shimmerSIG0(int count, float* table) { - for (int i1 = 0; (i1 < count); i1 = (i1 + 1)) { + for (int i1 = 0; i1 < count; i1 = i1 + 1) { iVec1[0] = 1; - iRec14[0] = ((iVec1[1] + iRec14[1]) % 65536); - table[i1] = std::sin((9.58738019e-05f * float(iRec14[0]))); + iRec14[0] = (iVec1[1] + iRec14[1]) % 65536; + table[i1] = std::sin(9.58738e-05f * float(iRec14[0])); iVec1[1] = iVec1[0]; iRec14[1] = iRec14[0]; } @@ -547,19 +685,10 @@ static fx_shimmerSIG0* newfx_shimmerSIG0() { return (fx_shimmerSIG0*)new fx_shim static void deletefx_shimmerSIG0(fx_shimmerSIG0* dsp) { delete dsp; } static float fx_shimmer_faustpower2_f(float value) { - return (value * value); + return value * value; } static float ftbl0fx_shimmerSIG0[65536]; -#ifndef FAUSTCLASS -#define FAUSTCLASS fx_shimmer -#endif - -#ifdef __APPLE__ -#define exp10f __exp10f -#define exp10 __exp10 -#endif - class fx_shimmer : public fx_shimmer_dsp { private: @@ -580,7 +709,7 @@ class fx_shimmer : public fx_shimmer_dsp { FAUSTFLOAT fHslider5; float fRec12[2]; float fRec11[2]; - int IOTA; + int IOTA0; float fVec0[131072]; FAUSTFLOAT fHslider6; FAUSTFLOAT fHslider7; @@ -594,7 +723,7 @@ class fx_shimmer : public fx_shimmer_dsp { float fRec13[2]; float fVec2[65536]; int iConst9; - float fVec3[8192]; + float fVec3[4096]; int iConst10; float fRec9[2]; float fConst12; @@ -614,9 +743,9 @@ class fx_shimmer : public fx_shimmer_dsp { float fVec7[131072]; float fRec28[2]; float fRec27[2]; - float fVec8[65536]; + float fVec8[32768]; int iConst19; - float fVec9[4096]; + float fVec9[8192]; int iConst20; float fRec23[2]; float fConst22; @@ -627,7 +756,7 @@ class fx_shimmer : public fx_shimmer_dsp { float fRec33[2]; float fVec11[32768]; int iConst24; - float fVec12[4096]; + float fVec12[8192]; int iConst25; float fRec29[2]; float fConst27; @@ -647,7 +776,7 @@ class fx_shimmer : public fx_shimmer_dsp { float fVec16[131072]; float fRec46[2]; float fRec45[2]; - float fVec17[32768]; + float fVec17[65536]; int iConst34; float fVec18[8192]; int iConst35; @@ -671,7 +800,7 @@ class fx_shimmer : public fx_shimmer_dsp { float fRec57[2]; float fVec23[32768]; int iConst44; - float fVec24[8192]; + float fVec24[4096]; int iConst45; float fRec53[2]; float fRec1[3]; @@ -687,20 +816,21 @@ class fx_shimmer : public fx_shimmer_dsp { void metadata(Meta* m) { m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("author", "thedrgreenthumb"); + m->declare("basics.lib/bypass2:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.1"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_shimmer -scn fx_shimmer_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_shimmer.dsp"); m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); + m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -719,16 +849,17 @@ class fx_shimmer : public fx_shimmer_dsp { m->declare("maths.lib/copyright", "GRAME"); m->declare("maths.lib/license", "LGPL with exception"); m->declare("maths.lib/name", "Faust Math Library"); - m->declare("maths.lib/version", "2.3"); + m->declare("maths.lib/version", "2.5"); m->declare("name", "fx_shimmer"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.1"); + m->declare("oscillators.lib/version", "0.3"); m->declare("platform.lib/name", "Generic Platform Library"); - m->declare("platform.lib/version", "0.1"); + m->declare("platform.lib/version", "0.2"); + m->declare("routes.lib/hadamard:author", "Remy Muller, revised by Romain Michon"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.0"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -747,52 +878,52 @@ class fx_shimmer : public fx_shimmer_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - float fConst3 = std::floor(((0.256891012f * fConst0) + 0.5f)); - fConst4 = ((0.0f - (6.90775537f * fConst3)) / fConst0); - fConst5 = (6.28318548f / fConst0); - fConst6 = (3.14159274f / fConst0); - fConst7 = (1.0f / fConst0); - float fConst8 = std::floor(((0.0273330007f * fConst0) + 0.5f)); - iConst9 = int(std::min(32768.0f, std::max(0.0f, (fConst3 - fConst8)))); - iConst10 = int(std::min(4096.0f, std::max(0.0f, (fConst8 + -1.0f)))); - float fConst11 = std::floor(((0.210389003f * fConst0) + 0.5f)); - fConst12 = ((0.0f - (6.90775537f * fConst11)) / fConst0); - float fConst13 = std::floor(((0.0244210009f * fConst0) + 0.5f)); - iConst14 = int(std::min(32768.0f, std::max(0.0f, (fConst11 - fConst13)))); - iConst15 = int(std::min(4096.0f, std::max(0.0f, (fConst13 + -1.0f)))); - float fConst16 = std::floor(((0.219990999f * fConst0) + 0.5f)); - fConst17 = ((0.0f - (6.90775537f * fConst16)) / fConst0); - float fConst18 = std::floor(((0.0191229992f * fConst0) + 0.5f)); - iConst19 = int(std::min(32768.0f, std::max(0.0f, (fConst16 - fConst18)))); - iConst20 = int(std::min(2048.0f, std::max(0.0f, (fConst18 + -1.0f)))); - float fConst21 = std::floor(((0.125f * fConst0) + 0.5f)); - fConst22 = ((0.0f - (6.90775537f * fConst21)) / fConst0); - float fConst23 = std::floor(((0.0134579996f * fConst0) + 0.5f)); - iConst24 = int(std::min(16384.0f, std::max(0.0f, (fConst21 - fConst23)))); - iConst25 = int(std::min(2048.0f, std::max(0.0f, (fConst23 + -1.0f)))); - float fConst26 = std::floor(((0.127837002f * fConst0) + 0.5f)); - fConst27 = ((0.0f - (6.90775537f * fConst26)) / fConst0); - float fConst28 = std::floor(((0.0316039994f * fConst0) + 0.5f)); - iConst29 = int(std::min(16384.0f, std::max(0.0f, (fConst26 - fConst28)))); - iConst30 = int(std::min(4096.0f, std::max(0.0f, (fConst28 + -1.0f)))); - float fConst31 = std::floor(((0.174713001f * fConst0) + 0.5f)); - fConst32 = ((0.0f - (6.90775537f * fConst31)) / fConst0); - float fConst33 = std::floor(((0.0229039993f * fConst0) + 0.5f)); - iConst34 = int(std::min(16384.0f, std::max(0.0f, (fConst31 - fConst33)))); - iConst35 = int(std::min(4096.0f, std::max(0.0f, (fConst33 + -1.0f)))); - float fConst36 = std::floor(((0.153128996f * fConst0) + 0.5f)); - fConst37 = ((0.0f - (6.90775537f * fConst36)) / fConst0); - float fConst38 = std::floor(((0.0203460008f * fConst0) + 0.5f)); - iConst39 = int(std::min(16384.0f, std::max(0.0f, (fConst36 - fConst38)))); - iConst40 = int(std::min(2048.0f, std::max(0.0f, (fConst38 + -1.0f)))); - float fConst41 = std::floor(((0.192303002f * fConst0) + 0.5f)); - fConst42 = ((0.0f - (6.90775537f * fConst41)) / fConst0); - float fConst43 = std::floor(((0.0292910002f * fConst0) + 0.5f)); - iConst44 = int(std::min(16384.0f, std::max(0.0f, (fConst41 - fConst43)))); - iConst45 = int(std::min(4096.0f, std::max(0.0f, (fConst43 + -1.0f)))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + float fConst3 = std::floor(0.219991f * fConst0 + 0.5f); + fConst4 = (0.0f - 6.9077554f * fConst3) / fConst0; + fConst5 = 6.2831855f / fConst0; + fConst6 = 3.1415927f / fConst0; + fConst7 = 1.0f / fConst0; + float fConst8 = std::floor(0.019123f * fConst0 + 0.5f); + iConst9 = int(std::min(32768.0f, std::max(0.0f, fConst3 - fConst8))); + iConst10 = int(std::min(2048.0f, std::max(0.0f, fConst8 + -1.0f))); + float fConst11 = std::floor(0.256891f * fConst0 + 0.5f); + fConst12 = (0.0f - 6.9077554f * fConst11) / fConst0; + float fConst13 = std::floor(0.027333f * fConst0 + 0.5f); + iConst14 = int(std::min(32768.0f, std::max(0.0f, fConst11 - fConst13))); + iConst15 = int(std::min(4096.0f, std::max(0.0f, fConst13 + -1.0f))); + float fConst16 = std::floor(0.192303f * fConst0 + 0.5f); + fConst17 = (0.0f - 6.9077554f * fConst16) / fConst0; + float fConst18 = std::floor(0.029291f * fConst0 + 0.5f); + iConst19 = int(std::min(16384.0f, std::max(0.0f, fConst16 - fConst18))); + iConst20 = int(std::min(4096.0f, std::max(0.0f, fConst18 + -1.0f))); + float fConst21 = std::floor(0.127837f * fConst0 + 0.5f); + fConst22 = (0.0f - 6.9077554f * fConst21) / fConst0; + float fConst23 = std::floor(0.031604f * fConst0 + 0.5f); + iConst24 = int(std::min(16384.0f, std::max(0.0f, fConst21 - fConst23))); + iConst25 = int(std::min(4096.0f, std::max(0.0f, fConst23 + -1.0f))); + float fConst26 = std::floor(0.174713f * fConst0 + 0.5f); + fConst27 = (0.0f - 6.9077554f * fConst26) / fConst0; + float fConst28 = std::floor(0.022904f * fConst0 + 0.5f); + iConst29 = int(std::min(16384.0f, std::max(0.0f, fConst26 - fConst28))); + iConst30 = int(std::min(4096.0f, std::max(0.0f, fConst28 + -1.0f))); + float fConst31 = std::floor(0.210389f * fConst0 + 0.5f); + fConst32 = (0.0f - 6.9077554f * fConst31) / fConst0; + float fConst33 = std::floor(0.024421f * fConst0 + 0.5f); + iConst34 = int(std::min(32768.0f, std::max(0.0f, fConst31 - fConst33))); + iConst35 = int(std::min(4096.0f, std::max(0.0f, fConst33 + -1.0f))); + float fConst36 = std::floor(0.125f * fConst0 + 0.5f); + fConst37 = (0.0f - 6.9077554f * fConst36) / fConst0; + float fConst38 = std::floor(0.013458f * fConst0 + 0.5f); + iConst39 = int(std::min(16384.0f, std::max(0.0f, fConst36 - fConst38))); + iConst40 = int(std::min(2048.0f, std::max(0.0f, fConst38 + -1.0f))); + float fConst41 = std::floor(0.153129f * fConst0 + 0.5f); + fConst42 = (0.0f - 6.9077554f * fConst41) / fConst0; + float fConst43 = std::floor(0.020346f * fConst0 + 0.5f); + iConst44 = int(std::min(16384.0f, std::max(0.0f, fConst41 - fConst43))); + iConst45 = int(std::min(2048.0f, std::max(0.0f, fConst43 + -1.0f))); } virtual void instanceResetUserInterface() { @@ -800,239 +931,239 @@ class fx_shimmer : public fx_shimmer_dsp { fHslider0 = FAUSTFLOAT(0.5f); fHslider1 = FAUSTFLOAT(0.5f); fHslider2 = FAUSTFLOAT(2.0f); - fHslider3 = FAUSTFLOAT(6000.0f); + fHslider3 = FAUSTFLOAT(6e+03f); fHslider4 = FAUSTFLOAT(3.0f); - fHslider5 = FAUSTFLOAT(200.0f); + fHslider5 = FAUSTFLOAT(2e+02f); fHslider6 = FAUSTFLOAT(12.0f); fHslider7 = FAUSTFLOAT(0.0f); fHslider8 = FAUSTFLOAT(0.0f); fHslider9 = FAUSTFLOAT(0.5f); - fHslider10 = FAUSTFLOAT(0.10000000000000001f); + fHslider10 = FAUSTFLOAT(0.1f); fHslider11 = FAUSTFLOAT(1.0f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec12[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec11[l2] = 0.0f; } - IOTA = 0; - for (int l3 = 0; (l3 < 131072); l3 = (l3 + 1)) { + IOTA0 = 0; + for (int l3 = 0; l3 < 131072; l3 = l3 + 1) { fVec0[l3] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec15[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec16[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec13[l8] = 0.0f; } - for (int l9 = 0; (l9 < 65536); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 65536; l9 = l9 + 1) { fVec2[l9] = 0.0f; } - for (int l10 = 0; (l10 < 8192); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 4096; l10 = l10 + 1) { fVec3[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec9[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 2; l12 = l12 + 1) { fRec20[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { fRec19[l13] = 0.0f; } - for (int l14 = 0; (l14 < 131072); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 131072; l14 = l14 + 1) { fVec4[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { fRec22[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { fRec21[l16] = 0.0f; } - for (int l17 = 0; (l17 < 65536); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 65536; l17 = l17 + 1) { fVec5[l17] = 0.0f; } - for (int l18 = 0; (l18 < 8192); l18 = (l18 + 1)) { + for (int l18 = 0; l18 < 8192; l18 = l18 + 1) { fVec6[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { fRec17[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { fRec26[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { fRec25[l21] = 0.0f; } - for (int l22 = 0; (l22 < 131072); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 131072; l22 = l22 + 1) { fVec7[l22] = 0.0f; } - for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 2; l23 = l23 + 1) { fRec28[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { fRec27[l24] = 0.0f; } - for (int l25 = 0; (l25 < 65536); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 32768; l25 = l25 + 1) { fVec8[l25] = 0.0f; } - for (int l26 = 0; (l26 < 4096); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 8192; l26 = l26 + 1) { fVec9[l26] = 0.0f; } - for (int l27 = 0; (l27 < 2); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 2; l27 = l27 + 1) { fRec23[l27] = 0.0f; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { fRec32[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { fRec31[l29] = 0.0f; } - for (int l30 = 0; (l30 < 131072); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 131072; l30 = l30 + 1) { fVec10[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec34[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 2; l32 = l32 + 1) { fRec33[l32] = 0.0f; } - for (int l33 = 0; (l33 < 32768); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 32768; l33 = l33 + 1) { fVec11[l33] = 0.0f; } - for (int l34 = 0; (l34 < 4096); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 8192; l34 = l34 + 1) { fVec12[l34] = 0.0f; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { fRec29[l35] = 0.0f; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 2; l36 = l36 + 1) { fRec38[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { fRec37[l37] = 0.0f; } - for (int l38 = 0; (l38 < 131072); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 131072; l38 = l38 + 1) { fVec13[l38] = 0.0f; } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 2; l39 = l39 + 1) { fRec40[l39] = 0.0f; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { fRec39[l40] = 0.0f; } - for (int l41 = 0; (l41 < 32768); l41 = (l41 + 1)) { + for (int l41 = 0; l41 < 32768; l41 = l41 + 1) { fVec14[l41] = 0.0f; } - for (int l42 = 0; (l42 < 8192); l42 = (l42 + 1)) { + for (int l42 = 0; l42 < 8192; l42 = l42 + 1) { fVec15[l42] = 0.0f; } - for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) { + for (int l43 = 0; l43 < 2; l43 = l43 + 1) { fRec35[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 2; l44 = l44 + 1) { fRec44[l44] = 0.0f; } - for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { + for (int l45 = 0; l45 < 2; l45 = l45 + 1) { fRec43[l45] = 0.0f; } - for (int l46 = 0; (l46 < 131072); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 131072; l46 = l46 + 1) { fVec16[l46] = 0.0f; } - for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 2; l47 = l47 + 1) { fRec46[l47] = 0.0f; } - for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 2; l48 = l48 + 1) { fRec45[l48] = 0.0f; } - for (int l49 = 0; (l49 < 32768); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 65536; l49 = l49 + 1) { fVec17[l49] = 0.0f; } - for (int l50 = 0; (l50 < 8192); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 8192; l50 = l50 + 1) { fVec18[l50] = 0.0f; } - for (int l51 = 0; (l51 < 2); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 2; l51 = l51 + 1) { fRec41[l51] = 0.0f; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 2; l52 = l52 + 1) { fRec50[l52] = 0.0f; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { + for (int l53 = 0; l53 < 2; l53 = l53 + 1) { fRec49[l53] = 0.0f; } - for (int l54 = 0; (l54 < 131072); l54 = (l54 + 1)) { + for (int l54 = 0; l54 < 131072; l54 = l54 + 1) { fVec19[l54] = 0.0f; } - for (int l55 = 0; (l55 < 2); l55 = (l55 + 1)) { + for (int l55 = 0; l55 < 2; l55 = l55 + 1) { fRec52[l55] = 0.0f; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + for (int l56 = 0; l56 < 2; l56 = l56 + 1) { fRec51[l56] = 0.0f; } - for (int l57 = 0; (l57 < 32768); l57 = (l57 + 1)) { + for (int l57 = 0; l57 < 32768; l57 = l57 + 1) { fVec20[l57] = 0.0f; } - for (int l58 = 0; (l58 < 4096); l58 = (l58 + 1)) { + for (int l58 = 0; l58 < 4096; l58 = l58 + 1) { fVec21[l58] = 0.0f; } - for (int l59 = 0; (l59 < 2); l59 = (l59 + 1)) { + for (int l59 = 0; l59 < 2; l59 = l59 + 1) { fRec47[l59] = 0.0f; } - for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { + for (int l60 = 0; l60 < 2; l60 = l60 + 1) { fRec56[l60] = 0.0f; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { fRec55[l61] = 0.0f; } - for (int l62 = 0; (l62 < 131072); l62 = (l62 + 1)) { + for (int l62 = 0; l62 < 131072; l62 = l62 + 1) { fVec22[l62] = 0.0f; } - for (int l63 = 0; (l63 < 2); l63 = (l63 + 1)) { + for (int l63 = 0; l63 < 2; l63 = l63 + 1) { fRec58[l63] = 0.0f; } - for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { + for (int l64 = 0; l64 < 2; l64 = l64 + 1) { fRec57[l64] = 0.0f; } - for (int l65 = 0; (l65 < 32768); l65 = (l65 + 1)) { + for (int l65 = 0; l65 < 32768; l65 = l65 + 1) { fVec23[l65] = 0.0f; } - for (int l66 = 0; (l66 < 8192); l66 = (l66 + 1)) { + for (int l66 = 0; l66 < 4096; l66 = l66 + 1) { fVec24[l66] = 0.0f; } - for (int l67 = 0; (l67 < 2); l67 = (l67 + 1)) { + for (int l67 = 0; l67 < 2; l67 = l67 + 1) { fRec53[l67] = 0.0f; } - for (int l68 = 0; (l68 < 3); l68 = (l68 + 1)) { + for (int l68 = 0; l68 < 3; l68 = l68 + 1) { fRec1[l68] = 0.0f; } - for (int l69 = 0; (l69 < 3); l69 = (l69 + 1)) { + for (int l69 = 0; l69 < 3; l69 = l69 + 1) { fRec2[l69] = 0.0f; } - for (int l70 = 0; (l70 < 3); l70 = (l70 + 1)) { + for (int l70 = 0; l70 < 3; l70 = l70 + 1) { fRec3[l70] = 0.0f; } - for (int l71 = 0; (l71 < 3); l71 = (l71 + 1)) { + for (int l71 = 0; l71 < 3; l71 = l71 + 1) { fRec4[l71] = 0.0f; } - for (int l72 = 0; (l72 < 3); l72 = (l72 + 1)) { + for (int l72 = 0; l72 < 3; l72 = l72 + 1) { fRec5[l72] = 0.0f; } - for (int l73 = 0; (l73 < 3); l73 = (l73 + 1)) { + for (int l73 = 0; l73 < 3; l73 = l73 + 1) { fRec6[l73] = 0.0f; } - for (int l74 = 0; (l74 < 3); l74 = (l74 + 1)) { + for (int l74 = 0; l74 < 3; l74 = l74 + 1) { fRec7[l74] = 0.0f; } - for (int l75 = 0; (l75 < 3); l75 = (l75 + 1)) { + for (int l75 = 0; l75 < 3; l75 = l75 + 1) { fRec8[l75] = 0.0f; } } @@ -1058,318 +1189,318 @@ class fx_shimmer : public fx_shimmer_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx_shimmer"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->addHorizontalSlider("control", &fHslider9, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("control", &fHslider9, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.05f)); ui_interface->declare(&fHslider3, "unit", "Hz"); - ui_interface->addHorizontalSlider("damp_hf", &fHslider3, FAUSTFLOAT(6000.0f), FAUSTFLOAT(1500.0f), FAUSTFLOAT(47040.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("damp_hf", &fHslider3, FAUSTFLOAT(6e+03f), FAUSTFLOAT(1.5e+03f), FAUSTFLOAT(4.704e+04f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider4, "unit", "sec"); - ui_interface->addHorizontalSlider("decay_low", &fHslider4, FAUSTFLOAT(3.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(8.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("decay_low", &fHslider4, FAUSTFLOAT(3.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(8.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider2, "unit", "sec"); - ui_interface->addHorizontalSlider("decay_mid", &fHslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(8.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addHorizontalSlider("depth", &fHslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("decay_mid", &fHslider2, FAUSTFLOAT(2.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(8.0f), FAUSTFLOAT(0.1f)); + ui_interface->addHorizontalSlider("depth", &fHslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.05f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider11, "unit", "sec"); - ui_interface->addHorizontalSlider("envelope", &fHslider11, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(3.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("envelope", &fHslider11, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f), FAUSTFLOAT(3.0f), FAUSTFLOAT(0.05f)); ui_interface->declare(&fHslider5, "unit", "Hz"); - ui_interface->addHorizontalSlider("freq_low", &fHslider5, FAUSTFLOAT(200.0f), FAUSTFLOAT(50.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addHorizontalSlider("freq_low", &fHslider5, FAUSTFLOAT(2e+02f), FAUSTFLOAT(5e+01f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fHslider7, "type", "int"); ui_interface->addHorizontalSlider("mode", &fHslider7, FAUSTFLOAT(0.0f), FAUSTFLOAT(-3.0f), FAUSTFLOAT(3.0f), FAUSTFLOAT(1.0f)); - ui_interface->addHorizontalSlider("ps_drywet", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("ps_drywet", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.05f)); ui_interface->declare(&fHslider6, "unit", "semitone"); - ui_interface->addHorizontalSlider("shift", &fHslider6, FAUSTFLOAT(12.0f), FAUSTFLOAT(-12.0f), FAUSTFLOAT(12.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("shift", &fHslider6, FAUSTFLOAT(12.0f), FAUSTFLOAT(-12.0f), FAUSTFLOAT(12.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider10, "unit", "Hz"); - ui_interface->addHorizontalSlider("speed", &fHslider10, FAUSTFLOAT(0.100000001f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(10.0f), FAUSTFLOAT(0.0500000007f)); + ui_interface->addHorizontalSlider("speed", &fHslider10, FAUSTFLOAT(0.1f), FAUSTFLOAT(0.1f), FAUSTFLOAT(1e+01f), FAUSTFLOAT(0.05f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); + float fSlow1 = fConst1 * float(fHslider0); float fSlow2 = float(fHslider1); - float fSlow3 = (1.0f - fSlow2); + float fSlow3 = 1.0f - fSlow2; float fSlow4 = float(fHslider2); - float fSlow5 = std::exp((fConst4 / fSlow4)); - float fSlow6 = fx_shimmer_faustpower2_f(fSlow5); - float fSlow7 = std::cos((fConst5 * float(fHslider3))); - float fSlow8 = (1.0f - (fSlow6 * fSlow7)); - float fSlow9 = (1.0f - fSlow6); - float fSlow10 = (fSlow8 / fSlow9); - float fSlow11 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow8) / fx_shimmer_faustpower2_f(fSlow9)) + -1.0f))); - float fSlow12 = (fSlow10 - fSlow11); - float fSlow13 = (fSlow5 * (fSlow11 + (1.0f - fSlow10))); - float fSlow14 = float(fHslider4); - float fSlow15 = ((std::exp((fConst4 / fSlow14)) / fSlow5) + -1.0f); - float fSlow16 = (1.0f / std::tan((fConst6 * float(fHslider5)))); - float fSlow17 = (1.0f / (fSlow16 + 1.0f)); - float fSlow18 = (1.0f - fSlow16); + float fSlow5 = std::exp(fConst4 / fSlow4); + float fSlow6 = std::cos(fConst5 * float(fHslider3)); + float fSlow7 = fx_shimmer_faustpower2_f(fSlow5); + float fSlow8 = 1.0f - fSlow6 * fSlow7; + float fSlow9 = 1.0f - fSlow7; + float fSlow10 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow8) / fx_shimmer_faustpower2_f(fSlow9) + -1.0f)); + float fSlow11 = fSlow8 / fSlow9; + float fSlow12 = fSlow5 * (fSlow10 + (1.0f - fSlow11)); + float fSlow13 = float(fHslider4); + float fSlow14 = std::exp(fConst4 / fSlow13) / fSlow5 + -1.0f; + float fSlow15 = 1.0f / std::tan(fConst6 * float(fHslider5)); + float fSlow16 = 1.0f / (fSlow15 + 1.0f); + float fSlow17 = 1.0f - fSlow15; + float fSlow18 = fSlow11 - fSlow10; float fSlow19 = float(fHslider6); float fSlow20 = float(fHslider7); - float fSlow21 = float((fSlow20 < 0.0f)); - float fSlow22 = (fSlow21 * (2.0f - fSlow20)); - float fSlow23 = float((fSlow20 >= 0.0f)); - float fSlow24 = (0.0833333358f * (fSlow19 * (fSlow22 + (fSlow23 * ((0.5f * fSlow20) + 2.0f))))); - float fSlow25 = float(fHslider8); - float fSlow26 = float(fHslider9); - float fSlow27 = (0.5f * fSlow26); - float fSlow28 = (fConst7 * float(fHslider10)); - float fSlow29 = (6.0f * (1.0f - fSlow26)); - float fSlow30 = float(fHslider11); - int iSlow31 = (std::fabs(fSlow30) < 1.1920929e-07f); - float fThen2 = std::exp((0.0f - (fConst7 / (iSlow31 ? 1.0f : fSlow30)))); - float fSlow32 = (iSlow31 ? 0.0f : fThen2); - float fSlow33 = (1.0f - fSlow32); - float fSlow34 = std::exp((fConst12 / fSlow4)); - float fSlow35 = fx_shimmer_faustpower2_f(fSlow34); - float fSlow36 = (1.0f - (fSlow35 * fSlow7)); - float fSlow37 = (1.0f - fSlow35); - float fSlow38 = (fSlow36 / fSlow37); - float fSlow39 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow36) / fx_shimmer_faustpower2_f(fSlow37)) + -1.0f))); - float fSlow40 = (fSlow38 - fSlow39); - float fSlow41 = (fSlow34 * (fSlow39 + (1.0f - fSlow38))); - float fSlow42 = ((std::exp((fConst12 / fSlow14)) / fSlow34) + -1.0f); - float fSlow43 = (0.666666687f * fSlow20); - float fSlow44 = (fSlow43 + 2.0f); - float fSlow45 = (fSlow23 * fSlow44); - float fSlow46 = (0.0833333358f * (fSlow19 * (fSlow45 + fSlow22))); - float fSlow47 = std::exp((fConst17 / fSlow4)); - float fSlow48 = fx_shimmer_faustpower2_f(fSlow47); - float fSlow49 = (1.0f - (fSlow48 * fSlow7)); - float fSlow50 = (1.0f - fSlow48); - float fSlow51 = (fSlow49 / fSlow50); - float fSlow52 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow49) / fx_shimmer_faustpower2_f(fSlow50)) + -1.0f))); - float fSlow53 = (fSlow51 - fSlow52); - float fSlow54 = (fSlow47 * (fSlow52 + (1.0f - fSlow51))); - float fSlow55 = ((std::exp((fConst17 / fSlow14)) / fSlow47) + -1.0f); - float fSlow56 = (fSlow20 + 2.0f); - float fSlow57 = (0.0833333358f * (fSlow19 * (fSlow45 + (fSlow21 * fSlow56)))); - float fSlow58 = std::exp((fConst22 / fSlow4)); + float fSlow21 = float(fSlow20 >= 0.0f); + float fSlow22 = 0.6666667f * fSlow20; + float fSlow23 = fSlow22 + 2.0f; + float fSlow24 = fSlow21 * fSlow23; + float fSlow25 = float(fSlow20 < 0.0f); + float fSlow26 = fSlow20 + 2.0f; + float fSlow27 = 0.083333336f * fSlow19 * (fSlow24 + fSlow25 * fSlow26); + float fSlow28 = float(fHslider8); + float fSlow29 = float(fHslider9); + float fSlow30 = 0.5f * fSlow29; + float fSlow31 = fConst7 * float(fHslider10); + float fSlow32 = 6.0f * (1.0f - fSlow29); + float fSlow33 = float(fHslider11); + int iSlow34 = std::fabs(fSlow33) < 1.1920929e-07f; + float fSlow35 = ((iSlow34) ? 0.0f : std::exp(0.0f - fConst7 / ((iSlow34) ? 1.0f : fSlow33))); + float fSlow36 = 1.0f - fSlow35; + float fSlow37 = std::exp(fConst12 / fSlow4); + float fSlow38 = fx_shimmer_faustpower2_f(fSlow37); + float fSlow39 = 1.0f - fSlow6 * fSlow38; + float fSlow40 = 1.0f - fSlow38; + float fSlow41 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow39) / fx_shimmer_faustpower2_f(fSlow40) + -1.0f)); + float fSlow42 = fSlow39 / fSlow40; + float fSlow43 = fSlow37 * (fSlow41 + (1.0f - fSlow42)); + float fSlow44 = std::exp(fConst12 / fSlow13) / fSlow37 + -1.0f; + float fSlow45 = fSlow42 - fSlow41; + float fSlow46 = fSlow25 * (2.0f - fSlow20); + float fSlow47 = 0.083333336f * fSlow19 * (fSlow46 + fSlow21 * (0.5f * fSlow20 + 2.0f)); + float fSlow48 = std::exp(fConst17 / fSlow4); + float fSlow49 = fx_shimmer_faustpower2_f(fSlow48); + float fSlow50 = 1.0f - fSlow6 * fSlow49; + float fSlow51 = 1.0f - fSlow49; + float fSlow52 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow50) / fx_shimmer_faustpower2_f(fSlow51) + -1.0f)); + float fSlow53 = fSlow50 / fSlow51; + float fSlow54 = fSlow48 * (fSlow52 + (1.0f - fSlow53)); + float fSlow55 = std::exp(fConst17 / fSlow13) / fSlow48 + -1.0f; + float fSlow56 = fSlow53 - fSlow52; + float fSlow57 = 0.083333336f * fSlow19 * (fSlow21 * (0.25f * fSlow20 + 2.0f) + fSlow25 * (2.0f - fSlow22)); + float fSlow58 = std::exp(fConst22 / fSlow4); float fSlow59 = fx_shimmer_faustpower2_f(fSlow58); - float fSlow60 = (1.0f - (fSlow59 * fSlow7)); - float fSlow61 = (1.0f - fSlow59); - float fSlow62 = (fSlow60 / fSlow61); - float fSlow63 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow60) / fx_shimmer_faustpower2_f(fSlow61)) + -1.0f))); - float fSlow64 = (fSlow62 - fSlow63); - float fSlow65 = (fSlow58 * (fSlow63 + (1.0f - fSlow62))); - float fSlow66 = ((std::exp((fConst22 / fSlow14)) / fSlow58) + -1.0f); - float fSlow67 = (fSlow23 * fSlow56); - float fSlow68 = (0.0833333358f * (fSlow19 * (fSlow67 + (fSlow21 * fSlow44)))); - float fSlow69 = std::exp((fConst27 / fSlow4)); + float fSlow60 = 1.0f - fSlow6 * fSlow59; + float fSlow61 = 1.0f - fSlow59; + float fSlow62 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow60) / fx_shimmer_faustpower2_f(fSlow61) + -1.0f)); + float fSlow63 = fSlow60 / fSlow61; + float fSlow64 = fSlow58 * (fSlow62 + (1.0f - fSlow63)); + float fSlow65 = std::exp(fConst22 / fSlow13) / fSlow58 + -1.0f; + float fSlow66 = fSlow63 - fSlow62; + float fSlow67 = fSlow21 * fSlow26; + float fSlow68 = 0.083333336f * fSlow19 * (fSlow67 + fSlow25 * fSlow23); + float fSlow69 = std::exp(fConst27 / fSlow4); float fSlow70 = fx_shimmer_faustpower2_f(fSlow69); - float fSlow71 = (1.0f - (fSlow70 * fSlow7)); - float fSlow72 = (1.0f - fSlow70); - float fSlow73 = (fSlow71 / fSlow72); - float fSlow74 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow71) / fx_shimmer_faustpower2_f(fSlow72)) + -1.0f))); - float fSlow75 = (fSlow73 - fSlow74); - float fSlow76 = (fSlow69 * (fSlow74 + (1.0f - fSlow73))); - float fSlow77 = ((std::exp((fConst27 / fSlow14)) / fSlow69) + -1.0f); - float fSlow78 = std::exp((fConst32 / fSlow4)); - float fSlow79 = fx_shimmer_faustpower2_f(fSlow78); - float fSlow80 = (1.0f - (fSlow79 * fSlow7)); - float fSlow81 = (1.0f - fSlow79); - float fSlow82 = (fSlow80 / fSlow81); - float fSlow83 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow80) / fx_shimmer_faustpower2_f(fSlow81)) + -1.0f))); - float fSlow84 = (fSlow82 - fSlow83); - float fSlow85 = (fSlow78 * (fSlow83 + (1.0f - fSlow82))); - float fSlow86 = ((std::exp((fConst32 / fSlow14)) / fSlow78) + -1.0f); - float fSlow87 = (0.0833333358f * (fSlow19 * (fSlow67 + (fSlow21 * ((0.333333343f * fSlow20) + 2.0f))))); - float fSlow88 = std::exp((fConst37 / fSlow4)); - float fSlow89 = fx_shimmer_faustpower2_f(fSlow88); - float fSlow90 = (1.0f - (fSlow89 * fSlow7)); - float fSlow91 = (1.0f - fSlow89); - float fSlow92 = (fSlow90 / fSlow91); - float fSlow93 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow90) / fx_shimmer_faustpower2_f(fSlow91)) + -1.0f))); - float fSlow94 = (fSlow92 - fSlow93); - float fSlow95 = (fSlow88 * (fSlow93 + (1.0f - fSlow92))); - float fSlow96 = ((std::exp((fConst37 / fSlow14)) / fSlow88) + -1.0f); - float fSlow97 = (0.0833333358f * (fSlow19 * (fSlow67 + (fSlow21 * ((0.400000006f * fSlow20) + 2.0f))))); - float fSlow98 = std::exp((fConst42 / fSlow4)); + float fSlow71 = 1.0f - fSlow6 * fSlow70; + float fSlow72 = 1.0f - fSlow70; + float fSlow73 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow71) / fx_shimmer_faustpower2_f(fSlow72) + -1.0f)); + float fSlow74 = fSlow71 / fSlow72; + float fSlow75 = fSlow69 * (fSlow73 + (1.0f - fSlow74)); + float fSlow76 = std::exp(fConst27 / fSlow13) / fSlow69 + -1.0f; + float fSlow77 = fSlow74 - fSlow73; + float fSlow78 = 0.083333336f * fSlow19 * (fSlow67 + fSlow25 * (0.33333334f * fSlow20 + 2.0f)); + float fSlow79 = std::exp(fConst32 / fSlow4); + float fSlow80 = fx_shimmer_faustpower2_f(fSlow79); + float fSlow81 = 1.0f - fSlow6 * fSlow80; + float fSlow82 = 1.0f - fSlow80; + float fSlow83 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow81) / fx_shimmer_faustpower2_f(fSlow82) + -1.0f)); + float fSlow84 = fSlow81 / fSlow82; + float fSlow85 = fSlow79 * (fSlow83 + (1.0f - fSlow84)); + float fSlow86 = std::exp(fConst32 / fSlow13) / fSlow79 + -1.0f; + float fSlow87 = fSlow84 - fSlow83; + float fSlow88 = 0.083333336f * fSlow19 * (fSlow24 + fSlow46); + float fSlow89 = std::exp(fConst37 / fSlow4); + float fSlow90 = fx_shimmer_faustpower2_f(fSlow89); + float fSlow91 = 1.0f - fSlow6 * fSlow90; + float fSlow92 = 1.0f - fSlow90; + float fSlow93 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow91) / fx_shimmer_faustpower2_f(fSlow92) + -1.0f)); + float fSlow94 = fSlow91 / fSlow92; + float fSlow95 = fSlow89 * (fSlow93 + (1.0f - fSlow94)); + float fSlow96 = std::exp(fConst37 / fSlow13) / fSlow89 + -1.0f; + float fSlow97 = fSlow94 - fSlow93; + float fSlow98 = std::exp(fConst42 / fSlow4); float fSlow99 = fx_shimmer_faustpower2_f(fSlow98); - float fSlow100 = (1.0f - (fSlow99 * fSlow7)); - float fSlow101 = (1.0f - fSlow99); - float fSlow102 = (fSlow100 / fSlow101); - float fSlow103 = std::sqrt(std::max(0.0f, ((fx_shimmer_faustpower2_f(fSlow100) / fx_shimmer_faustpower2_f(fSlow101)) + -1.0f))); - float fSlow104 = (fSlow102 - fSlow103); - float fSlow105 = (fSlow98 * (fSlow103 + (1.0f - fSlow102))); - float fSlow106 = ((std::exp((fConst42 / fSlow14)) / fSlow98) + -1.0f); - float fSlow107 = (0.0833333358f * (fSlow19 * ((fSlow23 * ((0.25f * fSlow20) + 2.0f)) + (fSlow21 * (2.0f - fSlow43))))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); + float fSlow100 = 1.0f - fSlow99 * fSlow6; + float fSlow101 = 1.0f - fSlow99; + float fSlow102 = std::sqrt(std::max(0.0f, fx_shimmer_faustpower2_f(fSlow100) / fx_shimmer_faustpower2_f(fSlow101) + -1.0f)); + float fSlow103 = fSlow100 / fSlow101; + float fSlow104 = fSlow98 * (fSlow102 + (1.0f - fSlow103)); + float fSlow105 = std::exp(fConst42 / fSlow13) / fSlow98 + -1.0f; + float fSlow106 = fSlow103 - fSlow102; + float fSlow107 = 0.083333336f * fSlow19 * (fSlow67 + fSlow25 * (0.4f * fSlow20 + 2.0f)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; float fTemp0 = float(input1[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec12[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec12[1]) - (fRec4[1] + fRec4[2])))); - fRec11[0] = ((fSlow12 * fRec11[1]) + (fSlow13 * (fRec4[1] + (fSlow15 * fRec12[0])))); - float fTemp2 = ((0.353553385f * fRec11[0]) + 9.99999968e-21f); - fVec0[(IOTA & 131071)] = fTemp2; - fRec15[0] = (fSlow28 + (fRec15[1] - std::floor((fSlow28 + fRec15[1])))); - float fTemp3 = (fSlow27 * ftbl0fx_shimmerSIG0[int((65536.0f * fRec15[0]))]); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec12[0] = 0.0f - fSlow16 * (fSlow17 * fRec12[1] - (fRec8[1] + fRec8[2])); + fRec11[0] = fSlow12 * (fRec8[1] + fSlow14 * fRec12[0]) + fSlow18 * fRec11[1]; + float fTemp2 = 0.35355338f * fRec11[0] + 1e-20f; + fVec0[IOTA0 & 131071] = fTemp2; + fRec15[0] = fSlow31 + (fRec15[1] - std::floor(fSlow31 + fRec15[1])); + float fTemp3 = fSlow30 * ftbl0fx_shimmerSIG0[int(65536.0f * fRec15[0])]; float fTemp4 = std::fabs(fTemp2); - fRec16[0] = std::max(fTemp4, ((fSlow32 * fRec16[1]) + (fSlow33 * fTemp4))); - fRec13[0] = std::fmod((fRec13[1] + (2049.0f - std::pow(2.0f, (fSlow24 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec16[0]))) + 0.5f))))), 2048.0f); + fRec16[0] = std::max(fTemp4, fSlow35 * fRec16[1] + fSlow36 * fTemp4); + fRec13[0] = std::fmod(fRec13[1] + (2049.0f - std::pow(2.0f, fSlow27 * (fSlow28 * (fTemp3 + fSlow32 * fRec16[0]) + 0.5f))), 2048.0f); int iTemp5 = int(fRec13[0]); float fTemp6 = std::floor(fRec13[0]); - float fTemp7 = std::min((0.0009765625f * fRec13[0]), 1.0f); - float fTemp8 = (fRec13[0] + 2048.0f); + float fTemp7 = std::min(0.0009765625f * fRec13[0], 1.0f); + float fTemp8 = fRec13[0] + 2048.0f; int iTemp9 = int(fTemp8); float fTemp10 = std::floor(fTemp8); - fVec2[(IOTA & 65535)] = ((fSlow3 * fTemp2) + (fSlow2 * ((((fVec0[((IOTA - std::min(65537, int(std::max(0, int(iTemp5))))) & 131071)] * (fTemp6 + (1.0f - fRec13[0]))) + ((fRec13[0] - fTemp6) * fVec0[((IOTA - std::min(65537, int(std::max(0, int((iTemp5 + 1)))))) & 131071)])) * fTemp7) + (((fVec0[((IOTA - std::min(65537, int(std::max(0, int(iTemp9))))) & 131071)] * (fTemp10 + (-2047.0f - fRec13[0]))) + ((fRec13[0] + (2048.0f - fTemp10)) * fVec0[((IOTA - std::min(65537, int(std::max(0, int((iTemp9 + 1)))))) & 131071)])) * (1.0f - fTemp7))))); - float fTemp11 = ((0.600000024f * fRec9[1]) + (fTemp1 + fVec2[((IOTA - iConst9) & 65535)])); - fVec3[(IOTA & 8191)] = fTemp11; - fRec9[0] = fVec3[((IOTA - iConst10) & 8191)]; - float fRec10 = (0.0f - (0.600000024f * fTemp11)); - fRec20[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec20[1]) - (fRec2[1] + fRec2[2])))); - fRec19[0] = ((fSlow40 * fRec19[1]) + (fSlow41 * (fRec2[1] + (fSlow42 * fRec20[0])))); - float fTemp12 = ((0.353553385f * fRec19[0]) + 9.99999968e-21f); - fVec4[(IOTA & 131071)] = fTemp12; + fVec2[IOTA0 & 65535] = fSlow3 * fTemp2 + fSlow2 * ((fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp5))) & 131071] * (fTemp6 + (1.0f - fRec13[0])) + (fRec13[0] - fTemp6) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp5 + 1))) & 131071]) * fTemp7 + (fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp9))) & 131071] * (fTemp10 + (-2047.0f - fRec13[0])) + (fRec13[0] + (2048.0f - fTemp10)) * fVec0[(IOTA0 - std::min(65537, std::max(0, iTemp9 + 1))) & 131071]) * (1.0f - fTemp7)); + float fTemp11 = 0.6f * fRec9[1] + fTemp1 + fVec2[(IOTA0 - iConst9) & 65535]; + fVec3[IOTA0 & 4095] = fTemp11; + fRec9[0] = fVec3[(IOTA0 - iConst10) & 4095]; + float fRec10 = 0.0f - 0.6f * fTemp11; + fRec20[0] = 0.0f - fSlow16 * (fSlow17 * fRec20[1] - (fRec4[1] + fRec4[2])); + fRec19[0] = fSlow43 * (fRec4[1] + fSlow44 * fRec20[0]) + fSlow45 * fRec19[1]; + float fTemp12 = 0.35355338f * fRec19[0] + 1e-20f; + fVec4[IOTA0 & 131071] = fTemp12; float fTemp13 = std::fabs(fTemp12); - fRec22[0] = std::max(fTemp13, ((fSlow32 * fRec22[1]) + (fSlow33 * fTemp13))); - fRec21[0] = std::fmod((fRec21[1] + (2049.0f - std::pow(2.0f, (fSlow46 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec22[0]))) + 0.5f))))), 2048.0f); + fRec22[0] = std::max(fTemp13, fSlow35 * fRec22[1] + fSlow36 * fTemp13); + fRec21[0] = std::fmod(fRec21[1] + (2049.0f - std::pow(2.0f, fSlow47 * (fSlow28 * (fTemp3 + fSlow32 * fRec22[0]) + 0.5f))), 2048.0f); int iTemp14 = int(fRec21[0]); float fTemp15 = std::floor(fRec21[0]); - float fTemp16 = std::min((0.0009765625f * fRec21[0]), 1.0f); - float fTemp17 = (fRec21[0] + 2048.0f); + float fTemp16 = std::min(0.0009765625f * fRec21[0], 1.0f); + float fTemp17 = fRec21[0] + 2048.0f; int iTemp18 = int(fTemp17); float fTemp19 = std::floor(fTemp17); - fVec5[(IOTA & 65535)] = ((fSlow3 * fTemp12) + (fSlow2 * ((((fVec4[((IOTA - std::min(65537, int(std::max(0, int(iTemp14))))) & 131071)] * (fTemp15 + (1.0f - fRec21[0]))) + ((fRec21[0] - fTemp15) * fVec4[((IOTA - std::min(65537, int(std::max(0, int((iTemp14 + 1)))))) & 131071)])) * fTemp16) + (((fVec4[((IOTA - std::min(65537, int(std::max(0, int(iTemp18))))) & 131071)] * (fTemp19 + (-2047.0f - fRec21[0]))) + ((fRec21[0] + (2048.0f - fTemp19)) * fVec4[((IOTA - std::min(65537, int(std::max(0, int((iTemp18 + 1)))))) & 131071)])) * (1.0f - fTemp16))))); - float fTemp20 = ((0.600000024f * fRec17[1]) + (fTemp1 + fVec5[((IOTA - iConst14) & 65535)])); - fVec6[(IOTA & 8191)] = fTemp20; - fRec17[0] = fVec6[((IOTA - iConst15) & 8191)]; - float fRec18 = (0.0f - (0.600000024f * fTemp20)); - fRec26[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec26[1]) - (fRec8[1] + fRec8[2])))); - fRec25[0] = ((fSlow53 * fRec25[1]) + (fSlow54 * (fRec8[1] + (fSlow55 * fRec26[0])))); - float fTemp21 = ((0.353553385f * fRec25[0]) + 9.99999968e-21f); - fVec7[(IOTA & 131071)] = fTemp21; + fVec5[IOTA0 & 65535] = fSlow3 * fTemp12 + fSlow2 * ((fVec4[(IOTA0 - std::min(65537, std::max(0, iTemp14))) & 131071] * (fTemp15 + (1.0f - fRec21[0])) + (fRec21[0] - fTemp15) * fVec4[(IOTA0 - std::min(65537, std::max(0, iTemp14 + 1))) & 131071]) * fTemp16 + (fVec4[(IOTA0 - std::min(65537, std::max(0, iTemp18))) & 131071] * (fTemp19 + (-2047.0f - fRec21[0])) + (fRec21[0] + (2048.0f - fTemp19)) * fVec4[(IOTA0 - std::min(65537, std::max(0, iTemp18 + 1))) & 131071]) * (1.0f - fTemp16)); + float fTemp20 = fVec5[(IOTA0 - iConst14) & 65535] + fTemp1 + 0.6f * fRec17[1]; + fVec6[IOTA0 & 8191] = fTemp20; + fRec17[0] = fVec6[(IOTA0 - iConst15) & 8191]; + float fRec18 = 0.0f - 0.6f * fTemp20; + fRec26[0] = fSlow16 * (fRec6[1] + fRec6[2] - fSlow17 * fRec26[1]); + fRec25[0] = fSlow54 * (fRec6[1] + fSlow55 * fRec26[0]) + fSlow56 * fRec25[1]; + float fTemp21 = 0.35355338f * fRec25[0] + 1e-20f; + fVec7[IOTA0 & 131071] = fTemp21; float fTemp22 = std::fabs(fTemp21); - fRec28[0] = std::max(fTemp22, ((fSlow32 * fRec28[1]) + (fSlow33 * fTemp22))); - fRec27[0] = std::fmod((fRec27[1] + (2049.0f - std::pow(2.0f, (fSlow57 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec28[0]))) + 0.5f))))), 2048.0f); + fRec28[0] = std::max(fTemp22, fSlow35 * fRec28[1] + fSlow36 * fTemp22); + fRec27[0] = std::fmod(fRec27[1] + (2049.0f - std::pow(2.0f, fSlow57 * (fSlow28 * (fTemp3 + fSlow32 * fRec28[0]) + 0.5f))), 2048.0f); int iTemp23 = int(fRec27[0]); float fTemp24 = std::floor(fRec27[0]); - float fTemp25 = std::min((0.0009765625f * fRec27[0]), 1.0f); - float fTemp26 = (fRec27[0] + 2048.0f); + float fTemp25 = std::min(0.0009765625f * fRec27[0], 1.0f); + float fTemp26 = fRec27[0] + 2048.0f; int iTemp27 = int(fTemp26); float fTemp28 = std::floor(fTemp26); - fVec8[(IOTA & 65535)] = ((fSlow3 * fTemp21) + (fSlow2 * ((((fVec7[((IOTA - std::min(65537, int(std::max(0, int(iTemp23))))) & 131071)] * (fTemp24 + (1.0f - fRec27[0]))) + ((fRec27[0] - fTemp24) * fVec7[((IOTA - std::min(65537, int(std::max(0, int((iTemp23 + 1)))))) & 131071)])) * fTemp25) + (((fVec7[((IOTA - std::min(65537, int(std::max(0, int(iTemp27))))) & 131071)] * (fTemp28 + (-2047.0f - fRec27[0]))) + ((fRec27[0] + (2048.0f - fTemp28)) * fVec7[((IOTA - std::min(65537, int(std::max(0, int((iTemp27 + 1)))))) & 131071)])) * (1.0f - fTemp25))))); - float fTemp29 = (fVec8[((IOTA - iConst19) & 65535)] + (fTemp1 + (0.600000024f * fRec23[1]))); - fVec9[(IOTA & 4095)] = fTemp29; - fRec23[0] = fVec9[((IOTA - iConst20) & 4095)]; - float fRec24 = (0.0f - (0.600000024f * fTemp29)); + fVec8[IOTA0 & 32767] = fSlow3 * fTemp21 + fSlow2 * ((fVec7[(IOTA0 - std::min(65537, std::max(0, iTemp23))) & 131071] * (fTemp24 + (1.0f - fRec27[0])) + (fRec27[0] - fTemp24) * fVec7[(IOTA0 - std::min(65537, std::max(0, iTemp23 + 1))) & 131071]) * fTemp25 + (fVec7[(IOTA0 - std::min(65537, std::max(0, iTemp27))) & 131071] * (fTemp28 + (-2047.0f - fRec27[0])) + (fRec27[0] + (2048.0f - fTemp28)) * fVec7[(IOTA0 - std::min(65537, std::max(0, iTemp27 + 1))) & 131071]) * (1.0f - fTemp25)); + float fTemp29 = fVec8[(IOTA0 - iConst19) & 32767] + fTemp1 + 0.6f * fRec23[1]; + fVec9[IOTA0 & 8191] = fTemp29; + fRec23[0] = fVec9[(IOTA0 - iConst20) & 8191]; + float fRec24 = 0.0f - 0.6f * fTemp29; float fTemp30 = float(input0[i0]); - float fTemp31 = (iSlow0 ? 0.0f : fTemp30); - fRec32[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec32[1]) - (fRec7[1] + fRec7[2])))); - fRec31[0] = ((fSlow64 * fRec31[1]) + (fSlow65 * (fRec7[1] + (fSlow66 * fRec32[0])))); - float fTemp32 = ((0.353553385f * fRec31[0]) + 9.99999968e-21f); - fVec10[(IOTA & 131071)] = fTemp32; + float fTemp31 = ((iSlow0) ? 0.0f : fTemp30); + fRec32[0] = 0.0f - fSlow16 * (fSlow17 * fRec32[1] - (fRec3[1] + fRec3[2])); + fRec31[0] = fSlow64 * (fRec3[1] + fSlow65 * fRec32[0]) + fSlow66 * fRec31[1]; + float fTemp32 = 0.35355338f * fRec31[0] + 1e-20f; + fVec10[IOTA0 & 131071] = fTemp32; float fTemp33 = std::fabs(fTemp32); - fRec34[0] = std::max(fTemp33, ((fSlow32 * fRec34[1]) + (fSlow33 * fTemp33))); - fRec33[0] = std::fmod((fRec33[1] + (2049.0f - std::pow(2.0f, (fSlow68 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec34[0]))) + 0.5f))))), 2048.0f); + fRec34[0] = std::max(fTemp33, fSlow35 * fRec34[1] + fSlow36 * fTemp33); + fRec33[0] = std::fmod(fRec33[1] + (2049.0f - std::pow(2.0f, fSlow68 * (fSlow28 * (fTemp3 + fSlow32 * fRec34[0]) + 0.5f))), 2048.0f); int iTemp34 = int(fRec33[0]); float fTemp35 = std::floor(fRec33[0]); - float fTemp36 = std::min((0.0009765625f * fRec33[0]), 1.0f); - float fTemp37 = (fRec33[0] + 2048.0f); + float fTemp36 = std::min(0.0009765625f * fRec33[0], 1.0f); + float fTemp37 = fRec33[0] + 2048.0f; int iTemp38 = int(fTemp37); float fTemp39 = std::floor(fTemp37); - fVec11[(IOTA & 32767)] = ((fSlow3 * fTemp32) + (fSlow2 * ((((fVec10[((IOTA - std::min(65537, int(std::max(0, int(iTemp34))))) & 131071)] * (fTemp35 + (1.0f - fRec33[0]))) + ((fRec33[0] - fTemp35) * fVec10[((IOTA - std::min(65537, int(std::max(0, int((iTemp34 + 1)))))) & 131071)])) * fTemp36) + (((fVec10[((IOTA - std::min(65537, int(std::max(0, int(iTemp38))))) & 131071)] * (fTemp39 + (-2047.0f - fRec33[0]))) + ((fRec33[0] + (2048.0f - fTemp39)) * fVec10[((IOTA - std::min(65537, int(std::max(0, int((iTemp38 + 1)))))) & 131071)])) * (1.0f - fTemp36))))); - float fTemp40 = ((fTemp31 + fVec11[((IOTA - iConst24) & 32767)]) - (0.600000024f * fRec29[1])); - fVec12[(IOTA & 4095)] = fTemp40; - fRec29[0] = fVec12[((IOTA - iConst25) & 4095)]; - float fRec30 = (0.600000024f * fTemp40); - fRec38[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec38[1]) - (fRec3[1] + fRec3[2])))); - fRec37[0] = ((fSlow75 * fRec37[1]) + (fSlow76 * (fRec3[1] + (fSlow77 * fRec38[0])))); - float fTemp41 = ((0.353553385f * fRec37[0]) + 9.99999968e-21f); - fVec13[(IOTA & 131071)] = fTemp41; + fVec11[IOTA0 & 32767] = fSlow3 * fTemp32 + fSlow2 * ((fVec10[(IOTA0 - std::min(65537, std::max(0, iTemp34))) & 131071] * (fTemp35 + (1.0f - fRec33[0])) + (fRec33[0] - fTemp35) * fVec10[(IOTA0 - std::min(65537, std::max(0, iTemp34 + 1))) & 131071]) * fTemp36 + (fVec10[(IOTA0 - std::min(65537, std::max(0, iTemp38))) & 131071] * (fTemp39 + (-2047.0f - fRec33[0])) + (fRec33[0] + (2048.0f - fTemp39)) * fVec10[(IOTA0 - std::min(65537, std::max(0, iTemp38 + 1))) & 131071]) * (1.0f - fTemp36)); + float fTemp40 = fTemp31 + fVec11[(IOTA0 - iConst24) & 32767] - 0.6f * fRec29[1]; + fVec12[IOTA0 & 8191] = fTemp40; + fRec29[0] = fVec12[(IOTA0 - iConst25) & 8191]; + float fRec30 = 0.6f * fTemp40; + fRec38[0] = fSlow16 * (fRec5[1] + fRec5[2] - fSlow17 * fRec38[1]); + fRec37[0] = fSlow75 * (fRec5[1] + fSlow76 * fRec38[0]) + fSlow77 * fRec37[1]; + float fTemp41 = 0.35355338f * fRec37[0] + 1e-20f; + fVec13[IOTA0 & 131071] = fTemp41; float fTemp42 = std::fabs(fTemp41); - fRec40[0] = std::max(fTemp42, ((fSlow32 * fRec40[1]) + (fSlow33 * fTemp42))); - fRec39[0] = std::fmod((fRec39[1] + (2049.0f - std::pow(2.0f, (fSlow68 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec40[0]))) + 0.5f))))), 2048.0f); + fRec40[0] = std::max(fTemp42, fSlow35 * fRec40[1] + fSlow36 * fTemp42); + fRec39[0] = std::fmod(fRec39[1] + (2049.0f - std::pow(2.0f, fSlow78 * (fSlow28 * (fTemp3 + fSlow32 * fRec40[0]) + 0.5f))), 2048.0f); int iTemp43 = int(fRec39[0]); float fTemp44 = std::floor(fRec39[0]); - float fTemp45 = std::min((0.0009765625f * fRec39[0]), 1.0f); - float fTemp46 = (fRec39[0] + 2048.0f); + float fTemp45 = std::min(0.0009765625f * fRec39[0], 1.0f); + float fTemp46 = fRec39[0] + 2048.0f; int iTemp47 = int(fTemp46); float fTemp48 = std::floor(fTemp46); - fVec14[(IOTA & 32767)] = ((fSlow3 * fTemp41) + (fSlow2 * ((((fVec13[((IOTA - std::min(65537, int(std::max(0, int(iTemp43))))) & 131071)] * (fTemp44 + (1.0f - fRec39[0]))) + ((fRec39[0] - fTemp44) * fVec13[((IOTA - std::min(65537, int(std::max(0, int((iTemp43 + 1)))))) & 131071)])) * fTemp45) + (((fVec13[((IOTA - std::min(65537, int(std::max(0, int(iTemp47))))) & 131071)] * (fTemp48 + (-2047.0f - fRec39[0]))) + ((fRec39[0] + (2048.0f - fTemp48)) * fVec13[((IOTA - std::min(65537, int(std::max(0, int((iTemp47 + 1)))))) & 131071)])) * (1.0f - fTemp45))))); - float fTemp49 = ((fTemp31 + fVec14[((IOTA - iConst29) & 32767)]) - (0.600000024f * fRec35[1])); - fVec15[(IOTA & 8191)] = fTemp49; - fRec35[0] = fVec15[((IOTA - iConst30) & 8191)]; - float fRec36 = (0.600000024f * fTemp49); - fRec44[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec44[1]) - (fRec5[1] + fRec5[2])))); - fRec43[0] = ((fSlow84 * fRec43[1]) + (fSlow85 * (fRec5[1] + (fSlow86 * fRec44[0])))); - float fTemp50 = ((0.353553385f * fRec43[0]) + 9.99999968e-21f); - fVec16[(IOTA & 131071)] = fTemp50; + fVec14[IOTA0 & 32767] = fSlow3 * fTemp41 + fSlow2 * ((fVec13[(IOTA0 - std::min(65537, std::max(0, iTemp43))) & 131071] * (fTemp44 + (1.0f - fRec39[0])) + (fRec39[0] - fTemp44) * fVec13[(IOTA0 - std::min(65537, std::max(0, iTemp43 + 1))) & 131071]) * fTemp45 + (fVec13[(IOTA0 - std::min(65537, std::max(0, iTemp47))) & 131071] * (fTemp48 + (-2047.0f - fRec39[0])) + (fRec39[0] + (2048.0f - fTemp48)) * fVec13[(IOTA0 - std::min(65537, std::max(0, iTemp47 + 1))) & 131071]) * (1.0f - fTemp45)); + float fTemp49 = fTemp31 + fVec14[(IOTA0 - iConst29) & 32767] - 0.6f * fRec35[1]; + fVec15[IOTA0 & 8191] = fTemp49; + fRec35[0] = fVec15[(IOTA0 - iConst30) & 8191]; + float fRec36 = 0.6f * fTemp49; + fRec44[0] = 0.0f - fSlow16 * (fSlow17 * fRec44[1] - (fRec2[1] + fRec2[2])); + fRec43[0] = fSlow85 * (fRec2[1] + fSlow86 * fRec44[0]) + fSlow87 * fRec43[1]; + float fTemp50 = 0.35355338f * fRec43[0] + 1e-20f; + fVec16[IOTA0 & 131071] = fTemp50; float fTemp51 = std::fabs(fTemp50); - fRec46[0] = std::max(fTemp51, ((fSlow32 * fRec46[1]) + (fSlow33 * fTemp51))); - fRec45[0] = std::fmod((fRec45[1] + (2049.0f - std::pow(2.0f, (fSlow87 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec46[0]))) + 0.5f))))), 2048.0f); + fRec46[0] = std::max(fTemp51, fSlow35 * fRec46[1] + fSlow36 * fTemp51); + fRec45[0] = std::fmod(fRec45[1] + (2049.0f - std::pow(2.0f, fSlow88 * (fSlow28 * (fTemp3 + fSlow32 * fRec46[0]) + 0.5f))), 2048.0f); int iTemp52 = int(fRec45[0]); float fTemp53 = std::floor(fRec45[0]); - float fTemp54 = std::min((0.0009765625f * fRec45[0]), 1.0f); - float fTemp55 = (fRec45[0] + 2048.0f); + float fTemp54 = std::min(0.0009765625f * fRec45[0], 1.0f); + float fTemp55 = fRec45[0] + 2048.0f; int iTemp56 = int(fTemp55); float fTemp57 = std::floor(fTemp55); - fVec17[(IOTA & 32767)] = ((fSlow3 * fTemp50) + (fSlow2 * ((((fVec16[((IOTA - std::min(65537, int(std::max(0, int(iTemp52))))) & 131071)] * (fTemp53 + (1.0f - fRec45[0]))) + ((fRec45[0] - fTemp53) * fVec16[((IOTA - std::min(65537, int(std::max(0, int((iTemp52 + 1)))))) & 131071)])) * fTemp54) + (((fVec16[((IOTA - std::min(65537, int(std::max(0, int(iTemp56))))) & 131071)] * (fTemp57 + (-2047.0f - fRec45[0]))) + ((fRec45[0] + (2048.0f - fTemp57)) * fVec16[((IOTA - std::min(65537, int(std::max(0, int((iTemp56 + 1)))))) & 131071)])) * (1.0f - fTemp54))))); - float fTemp58 = ((fTemp31 + fVec17[((IOTA - iConst34) & 32767)]) - (0.600000024f * fRec41[1])); - fVec18[(IOTA & 8191)] = fTemp58; - fRec41[0] = fVec18[((IOTA - iConst35) & 8191)]; - float fRec42 = (0.600000024f * fTemp58); - fRec50[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec50[1]) - (fRec1[1] + fRec1[2])))); - fRec49[0] = ((fSlow94 * fRec49[1]) + (fSlow95 * (fRec1[1] + (fSlow96 * fRec50[0])))); - float fTemp59 = ((0.353553385f * fRec49[0]) + 9.99999968e-21f); - fVec19[(IOTA & 131071)] = fTemp59; + fVec17[IOTA0 & 65535] = fSlow3 * fTemp50 + fSlow2 * ((fVec16[(IOTA0 - std::min(65537, std::max(0, iTemp52))) & 131071] * (fTemp53 + (1.0f - fRec45[0])) + (fRec45[0] - fTemp53) * fVec16[(IOTA0 - std::min(65537, std::max(0, iTemp52 + 1))) & 131071]) * fTemp54 + (fVec16[(IOTA0 - std::min(65537, std::max(0, iTemp56))) & 131071] * (fTemp57 + (-2047.0f - fRec45[0])) + (fRec45[0] + (2048.0f - fTemp57)) * fVec16[(IOTA0 - std::min(65537, std::max(0, iTemp56 + 1))) & 131071]) * (1.0f - fTemp54)); + float fTemp58 = fVec17[(IOTA0 - iConst34) & 65535] + fTemp1 + 0.6f * fRec41[1]; + fVec18[IOTA0 & 8191] = fTemp58; + fRec41[0] = fVec18[(IOTA0 - iConst35) & 8191]; + float fRec42 = 0.0f - 0.6f * fTemp58; + fRec50[0] = 0.0f - fSlow16 * (fSlow17 * fRec50[1] - (fRec7[1] + fRec7[2])); + fRec49[0] = fSlow95 * (fRec7[1] + fSlow96 * fRec50[0]) + fSlow97 * fRec49[1]; + float fTemp59 = 0.35355338f * fRec49[0] + 1e-20f; + fVec19[IOTA0 & 131071] = fTemp59; float fTemp60 = std::fabs(fTemp59); - fRec52[0] = std::max(fTemp60, ((fRec52[1] * fSlow32) + (fTemp60 * fSlow33))); - fRec51[0] = std::fmod((fRec51[1] + (2049.0f - std::pow(2.0f, (fSlow97 * ((fSlow25 * ((fSlow29 * fRec52[0]) + fTemp3)) + 0.5f))))), 2048.0f); + fRec52[0] = std::max(fTemp60, fSlow35 * fRec52[1] + fSlow36 * fTemp60); + fRec51[0] = std::fmod(fRec51[1] + (2049.0f - std::pow(2.0f, fSlow68 * (fSlow28 * (fTemp3 + fSlow32 * fRec52[0]) + 0.5f))), 2048.0f); int iTemp61 = int(fRec51[0]); float fTemp62 = std::floor(fRec51[0]); - float fTemp63 = std::min((0.0009765625f * fRec51[0]), 1.0f); - float fTemp64 = (fRec51[0] + 2048.0f); + float fTemp63 = std::min(0.0009765625f * fRec51[0], 1.0f); + float fTemp64 = fRec51[0] + 2048.0f; int iTemp65 = int(fTemp64); float fTemp66 = std::floor(fTemp64); - fVec20[(IOTA & 32767)] = ((fSlow3 * fTemp59) + (fSlow2 * ((((fVec19[((IOTA - std::min(65537, int(std::max(0, int(iTemp61))))) & 131071)] * (fTemp62 + (1.0f - fRec51[0]))) + ((fRec51[0] - fTemp62) * fVec19[((IOTA - std::min(65537, int(std::max(0, int((iTemp61 + 1)))))) & 131071)])) * fTemp63) + (((fVec19[((IOTA - std::min(65537, int(std::max(0, int(iTemp65))))) & 131071)] * (fTemp66 + (-2047.0f - fRec51[0]))) + ((fRec51[0] + (2048.0f - fTemp66)) * fVec19[((IOTA - std::min(65537, int(std::max(0, int((iTemp65 + 1)))))) & 131071)])) * (1.0f - fTemp63))))); - float fTemp67 = ((fTemp31 + fVec20[((IOTA - iConst39) & 32767)]) - (0.600000024f * fRec47[1])); - fVec21[(IOTA & 4095)] = fTemp67; - fRec47[0] = fVec21[((IOTA - iConst40) & 4095)]; - float fRec48 = (0.600000024f * fTemp67); - fRec56[0] = (0.0f - (fSlow17 * ((fSlow18 * fRec56[1]) - (fRec6[1] + fRec6[2])))); - fRec55[0] = ((fSlow104 * fRec55[1]) + (fSlow105 * (fRec6[1] + (fSlow106 * fRec56[0])))); - float fTemp68 = ((0.353553385f * fRec55[0]) + 9.99999968e-21f); - fVec22[(IOTA & 131071)] = fTemp68; + fVec20[IOTA0 & 32767] = fSlow3 * fTemp59 + fSlow2 * ((fVec19[(IOTA0 - std::min(65537, std::max(0, iTemp61))) & 131071] * (fTemp62 + (1.0f - fRec51[0])) + (fRec51[0] - fTemp62) * fVec19[(IOTA0 - std::min(65537, std::max(0, iTemp61 + 1))) & 131071]) * fTemp63 + (fVec19[(IOTA0 - std::min(65537, std::max(0, iTemp65))) & 131071] * (fTemp66 + (-2047.0f - fRec51[0])) + (fRec51[0] + (2048.0f - fTemp66)) * fVec19[(IOTA0 - std::min(65537, std::max(0, iTemp65 + 1))) & 131071]) * (1.0f - fTemp63)); + float fTemp67 = fTemp31 + fVec20[(IOTA0 - iConst39) & 32767] - 0.6f * fRec47[1]; + fVec21[IOTA0 & 4095] = fTemp67; + fRec47[0] = fVec21[(IOTA0 - iConst40) & 4095]; + float fRec48 = 0.6f * fTemp67; + fRec56[0] = 0.0f - fSlow16 * (fSlow17 * fRec56[1] - (fRec1[1] + fRec1[2])); + fRec55[0] = fSlow104 * (fRec1[1] + fSlow105 * fRec56[0]) + fSlow106 * fRec55[1]; + float fTemp68 = 0.35355338f * fRec55[0] + 1e-20f; + fVec22[IOTA0 & 131071] = fTemp68; float fTemp69 = std::fabs(fTemp68); - fRec58[0] = std::max(fTemp69, ((fSlow32 * fRec58[1]) + (fSlow33 * fTemp69))); - fRec57[0] = std::fmod((fRec57[1] + (2049.0f - std::pow(2.0f, (fSlow107 * ((fSlow25 * (fTemp3 + (fSlow29 * fRec58[0]))) + 0.5f))))), 2048.0f); + fRec58[0] = std::max(fTemp69, fRec58[1] * fSlow35 + fTemp69 * fSlow36); + fRec57[0] = std::fmod(fRec57[1] + (2049.0f - std::pow(2.0f, fSlow107 * (fSlow28 * (fSlow32 * fRec58[0] + fTemp3) + 0.5f))), 2048.0f); int iTemp70 = int(fRec57[0]); float fTemp71 = std::floor(fRec57[0]); - float fTemp72 = std::min((0.0009765625f * fRec57[0]), 1.0f); - float fTemp73 = (fRec57[0] + 2048.0f); + float fTemp72 = std::min(0.0009765625f * fRec57[0], 1.0f); + float fTemp73 = fRec57[0] + 2048.0f; int iTemp74 = int(fTemp73); float fTemp75 = std::floor(fTemp73); - fVec23[(IOTA & 32767)] = ((fSlow3 * fTemp68) + (fSlow2 * ((((fVec22[((IOTA - std::min(65537, int(std::max(0, int(iTemp70))))) & 131071)] * (fTemp71 + (1.0f - fRec57[0]))) + ((fRec57[0] - fTemp71) * fVec22[((IOTA - std::min(65537, int(std::max(0, int((iTemp70 + 1)))))) & 131071)])) * fTemp72) + (((fVec22[((IOTA - std::min(65537, int(std::max(0, int(iTemp74))))) & 131071)] * (fTemp75 + (-2047.0f - fRec57[0]))) + ((fRec57[0] + (2048.0f - fTemp75)) * fVec22[((IOTA - std::min(65537, int(std::max(0, int((iTemp74 + 1)))))) & 131071)])) * (1.0f - fTemp72))))); - float fTemp76 = (fVec23[((IOTA - iConst44) & 32767)] + (fTemp1 + (0.600000024f * fRec53[1]))); - fVec24[(IOTA & 8191)] = fTemp76; - fRec53[0] = fVec24[((IOTA - iConst45) & 8191)]; - float fRec54 = (0.0f - (0.600000024f * fTemp76)); - float fTemp77 = (fRec54 + (fRec35[1] + fRec53[1])); - float fTemp78 = (fRec10 + fTemp77); - fRec1[0] = (fRec9[1] + (fRec17[1] + (fRec23[1] + (fRec29[1] + (fRec18 + (fRec30 + (fRec36 + (fRec42 + (fRec48 + (fRec41[1] + (fRec47[1] + (fRec24 + fTemp78)))))))))))); - float fTemp79 = (fRec54 + fRec53[1]); - float fTemp80 = (fRec10 + fTemp79); - fRec2[0] = ((fRec29[1] + (fRec30 + (fRec36 + (fRec42 + (fRec48 + (fRec41[1] + (fRec47[1] + fRec35[1]))))))) - (fRec9[1] + (fRec17[1] + (fRec23[1] + (fRec18 + (fRec24 + fTemp80)))))); - float fTemp81 = (fRec10 + fRec35[1]); - fRec3[0] = ((fRec17[1] + (fRec18 + (fRec42 + (fRec48 + (fRec41[1] + (fRec47[1] + fTemp79)))))) - (fRec9[1] + (fRec23[1] + (fRec29[1] + (fRec30 + (fRec36 + (fRec24 + fTemp81))))))); - fRec4[0] = ((fRec9[1] + (fRec23[1] + (fRec42 + (fRec48 + (fRec41[1] + (fRec47[1] + (fRec10 + fRec24))))))) - (fRec17[1] + (fRec29[1] + (fRec18 + (fRec30 + (fRec36 + fTemp77)))))); - fRec5[0] = ((fRec9[1] + (fRec17[1] + (fRec18 + (fRec36 + (fRec48 + (fRec47[1] + fTemp81)))))) - (fRec23[1] + (fRec29[1] + (fRec30 + (fRec42 + (fRec41[1] + (fRec24 + fTemp79))))))); - fRec6[0] = ((fRec23[1] + (fRec36 + (fRec48 + (fRec47[1] + (fRec24 + fTemp77))))) - (fRec9[1] + (fRec17[1] + (fRec29[1] + (fRec18 + (fRec30 + (fRec42 + (fRec10 + fRec41[1])))))))); - fRec7[0] = ((fRec17[1] + (fRec23[1] + (fRec29[1] + (fRec18 + (fRec30 + (fRec48 + (fRec24 + fRec47[1]))))))) - (fRec9[1] + (fRec36 + (fRec42 + (fRec41[1] + fTemp78))))); - fRec8[0] = ((fRec9[1] + (fRec29[1] + (fRec30 + (fRec48 + (fRec47[1] + fTemp80))))) - (fRec17[1] + (fRec23[1] + (fRec18 + (fRec36 + (fRec42 + (fRec41[1] + (fRec24 + fRec35[1])))))))); - float fTemp82 = (1.0f - fRec0[0]); - float fThen4 = ((fRec0[0] * (((fRec1[0] + fRec3[0]) + fRec5[0]) + fRec7[0])) + (fTemp82 * fTemp31)); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp30 : fThen4)); - float fThen5 = ((fTemp82 * fTemp1) + (fRec0[0] * (((fRec2[0] + fRec4[0]) + fRec6[0]) + fRec8[0]))); - output1[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen5)); + fVec23[IOTA0 & 32767] = fSlow3 * fTemp68 + fSlow2 * ((fVec22[(IOTA0 - std::min(65537, std::max(0, iTemp70))) & 131071] * (fTemp71 + (1.0f - fRec57[0])) + (fRec57[0] - fTemp71) * fVec22[(IOTA0 - std::min(65537, std::max(0, iTemp70 + 1))) & 131071]) * fTemp72 + (fVec22[(IOTA0 - std::min(65537, std::max(0, iTemp74))) & 131071] * (fTemp75 + (-2047.0f - fRec57[0])) + (fRec57[0] + (2048.0f - fTemp75)) * fVec22[(IOTA0 - std::min(65537, std::max(0, iTemp74 + 1))) & 131071]) * (1.0f - fTemp72)); + float fTemp76 = fTemp31 + fVec23[(IOTA0 - iConst44) & 32767] - 0.6f * fRec53[1]; + fVec24[IOTA0 & 4095] = fTemp76; + fRec53[0] = fVec24[(IOTA0 - iConst45) & 4095]; + float fRec54 = 0.6f * fTemp76; + float fTemp77 = fRec54 + fRec53[1]; + float fTemp78 = fRec36 + fTemp77; + float fTemp79 = fRec48 + fRec30 + fTemp78; + fRec1[0] = fRec9[1] + fRec17[1] + fRec23[1] + fRec29[1] + fRec35[1] + fRec41[1] + fRec47[1] + fRec10 + fRec18 + fRec24 + fRec42 + fTemp79; + fRec2[0] = fRec29[1] + fRec35[1] + fRec47[1] + fTemp79 - (fRec9[1] + fRec17[1] + fRec23[1] + fRec41[1] + fRec10 + fRec18 + fRec42 + fRec24); + float fTemp80 = fRec30 + fRec48; + fRec3[0] = fRec23[1] + fRec35[1] + fRec41[1] + fRec24 + fRec42 + fTemp78 - (fRec9[1] + fRec17[1] + fRec29[1] + fRec47[1] + fRec10 + fRec18 + fTemp80); + fRec4[0] = fRec9[1] + fRec17[1] + fRec35[1] + fRec10 + fRec18 + fTemp78 - (fRec23[1] + fRec29[1] + fRec41[1] + fRec47[1] + fRec24 + fRec42 + fTemp80); + float fTemp81 = fRec30 + fTemp77; + float fTemp82 = fRec36 + fRec48; + fRec5[0] = fRec17[1] + fRec29[1] + fRec41[1] + fRec18 + fRec42 + fTemp81 - (fRec9[1] + fRec23[1] + fRec35[1] + fRec47[1] + fRec10 + fRec24 + fTemp82); + fRec6[0] = fRec9[1] + fRec23[1] + fRec29[1] + fRec10 + fRec24 + fTemp81 - (fRec17[1] + fRec35[1] + fRec41[1] + fRec47[1] + fRec18 + fRec42 + fTemp82); + float fTemp83 = fRec48 + fTemp77; + float fTemp84 = fRec36 + fRec30; + fRec7[0] = fRec9[1] + fRec41[1] + fRec47[1] + fRec10 + fRec42 + fTemp83 - (fRec17[1] + fRec23[1] + fRec29[1] + fRec35[1] + fRec18 + fRec24 + fTemp84); + fRec8[0] = fRec17[1] + fRec23[1] + fRec47[1] + fRec18 + fRec24 + fTemp83 - (fRec9[1] + fRec29[1] + fRec35[1] + fRec41[1] + fRec10 + fRec42 + fTemp84); + float fTemp85 = 1.0f - fRec0[0]; + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp30 : fRec0[0] * (fRec1[0] + fRec3[0] + fRec5[0] + fRec7[0]) + fTemp85 * fTemp31)); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp85 * fTemp1 + fRec0[0] * (fRec2[0] + fRec4[0] + fRec6[0] + fRec8[0]))); fRec0[1] = fRec0[0]; fRec12[1] = fRec12[0]; fRec11[1] = fRec11[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec15[1] = fRec15[0]; fRec16[1] = fRec16[0]; fRec13[1] = fRec13[0]; diff --git a/ceammc/ext/src/fx/fx_stutter.cpp b/ceammc/ext/src/fx/fx_stutter.cpp new file mode 100644 index 0000000000..b25182fba2 --- /dev/null +++ b/ceammc/ext/src/fx/fx_stutter.cpp @@ -0,0 +1,248 @@ +#include "fx_stutter.h" +#include "ceammc_crc32.h" +#include "ceammc_factory.h" +#include "ceammc_signal.h" + +constexpr auto PROP_MAXSIZE_MIN = 1; +constexpr auto PROP_MAXSIZE_DEF = 1000; +constexpr auto PROP_MAXSIZE_MAX = 10000; +constexpr auto PROP_T_MIN = PROP_MAXSIZE_MIN; +constexpr auto PROP_T_DEF = 50; +constexpr auto PROP_T_MAX = PROP_MAXSIZE_MAX; + +CEAMMC_DEFINE_HASH(fwd); +CEAMMC_DEFINE_HASH(back); +CEAMMC_DEFINE_HASH(tri); + +namespace { +size_t ms2samp(t_sample ms, t_sample sr) +{ + return ms * sr * 0.001; +} + +t_sample frac_part(t_sample f) +{ + t_sample ip; + return std::modf(f, &ip); +} + +} + +FxStutter::FxStutter(const PdArgs& args) + : SoundExternal(args) + , state_(ST_PASS) + , max_size_(nullptr) + , t_(nullptr) + , mode_(nullptr) + , speed_(nullptr) + , clock_([this]() { + state_ = ST_FROM_FX; + }) +{ + createInlet(); + + createSignalOutlet(); + + max_size_ = new FloatProperty("@maxsize", PROP_MAXSIZE_DEF); + max_size_->setUnits(PropValueUnits::MSEC); + max_size_->checkClosedRange(PROP_MAXSIZE_MIN, PROP_MAXSIZE_MAX); + max_size_->setInitOnly(); + addProperty(max_size_); + + t_ = new FloatProperty("@t", PROP_T_DEF); + t_->checkClosedRange(PROP_T_MIN, PROP_T_MAX); + t_->setArgIndex(0); + t_->setUnits(PropValueUnits::MSEC); + addProperty(t_); + + mode_ = new SymbolEnumProperty("@mode", { str_fwd, str_back, str_tri }); + addProperty(mode_); + + speed_ = new FloatProperty("@speed", 1); + speed_->checkClosedRange(0.25, 4); + addProperty(speed_); +} + +void FxStutter::initDone() +{ + adjustBufferSize(); + t_->checkClosedRange(PROP_T_MIN, max_size_->value()); +} + +void FxStutter::onInlet(size_t n, const AtomListView& lv) +{ + if (lv.empty()) { + state_ = ST_TO_FX; + clock_.delay(t_->value() * 2); + } else { + clock_.unset(); + const bool on = lv.boolAt(0, false); + switch (state_) { + case ST_TO_FX: + if (!on) + state_ = ST_FROM_FX; + break; + case ST_FROM_FX: + if (on) + state_ = ST_TO_FX; + break; + case ST_FX: + if (!on) + state_ = ST_FROM_FX; + break; + case ST_PASS: + default: + if (on) + state_ = ST_TO_FX; + break; + } + } +} + +void FxStutter::setupDSP(t_signal** sig) +{ + SoundExternal::setupDSP(sig); + + adjustBufferSize(); + buf_phase_ = 0; +} + +void FxStutter::processBlock(const t_sample** in, t_sample** out) +{ + const auto bs = blockSize(); + const size_t n = std::min(buffer_.size(), ms2samp(t_->value(), samplerate())); + + if (n < 2) + return; + + switch (state_) { + case ST_PASS: + + for (size_t i = 0; i < bs; i++) { + out[0][i] = in[0][i]; + + buffer_[buf_phase_] = in[0][i]; + buf_phase_ = (buf_phase_ + 1) % n; + } + + break; + case ST_TO_FX: + + for (size_t i = 0; i < bs; i++) { + const auto xin = in[0][i]; + const auto k = t_sample(i) / (bs - 1); + out[0][i] = (1 - k) * xin; // fade out input + + buffer_[buf_phase_] = k * xin; // fade in record + buf_phase_ = (buf_phase_ + 1) % n; + } + + state_ = ST_FX; + play_phase_ = 0; + + break; + case ST_FROM_FX: + + for (size_t i = 0; i < bs; i++) { + const auto xin = in[0][i]; + const auto k = t_sample(i) / (bs - 1); + + out[0][i] = k * xin; // fade in input + buffer_[buf_phase_] = (1 - k) * xin; // fade out record + + buf_phase_ = (buf_phase_ + 1) % n; + } + + state_ = ST_PASS; + play_phase_ = 0; + + break; + case ST_FX: { + const auto speed = speed_->value(); + switch (crc32_hash(mode_->value())) { + case hash_back: + if (speed == 1) { + for (size_t i = 0; i < bs; i++) { + auto phase = (buf_phase_ + ((n - 1) - play_phase_++)) % n; + out[0][i] = buffer_[phase]; + } + } else { + for (size_t i = 0; i < bs; i++) { + auto phase = (buf_phase_ + ((n - 1) - (play_phase_++ * speed))); + auto p0 = size_t(std::ceil(phase)) % n; + auto p1 = (n + p0 - 1) % n; + auto x0 = buffer_[p0]; + auto x1 = buffer_[p1]; + out[0][i] = interpolate::linear(x0, x1, frac_part(phase)); + } + } + + // adjust phase + play_phase_ %= n; + + break; + case hash_tri: + + if (speed == 1) { + for (size_t i = 0; i < bs; i++) { + auto phase = n - std::abs(std::int64_t((buf_phase_ + play_phase_++) % (2 * n)) - std::int64_t(n)); + out[0][i] = buffer_[phase]; + } + } else { + for (size_t i = 0; i < bs; i++) { + auto phase = n - std::abs(std::int64_t(std::fmod(buf_phase_ + (play_phase_++ * speed), (2 * n))) - std::int64_t(n)); + auto p0 = size_t(std::ceil(phase)) % n; + auto p1 = (n + p0 - 1) % n; + auto x0 = buffer_[p0]; + auto x1 = buffer_[p1]; + out[0][i] = interpolate::linear(x0, x1, frac_part(phase)); + } + } + + // adjust phase + play_phase_ %= (2 * n); + + break; + case hash_fwd: + default: + if (speed == 1) { + for (size_t i = 0; i < bs; i++) { + auto phase = (buf_phase_ + play_phase_++) % n; + out[0][i] = buffer_[phase]; + } + } else { + for (size_t i = 0; i < bs; i++) { + auto phase = (buf_phase_ + (play_phase_++ * speed)); + auto p0 = size_t(phase) % n; + auto p1 = (p0 + 1) % n; + auto x0 = buffer_[p0]; + auto x1 = buffer_[p1]; + out[0][i] = interpolate::linear(x0, x1, frac_part(phase)); + } + } + + // adjust phase + play_phase_ %= n; + + break; + } + + } break; + } +} + +void FxStutter::adjustBufferSize() +{ + const size_t N = ms2samp(max_size_->value(), samplerate()); + if (buffer_.size() != N) + buffer_.assign(N, 0); +} + +void setup_fx_stutter_tilde() +{ + SoundExternalFactory obj("fx.stutter~"); + obj.setXletsInfo( + { "signal: input", "1|0: turn fx on/off\n" + "bang: run fx twice" }, + { "signal: output" }); +} diff --git a/ceammc/ext/src/fx/fx_stutter.h b/ceammc/ext/src/fx/fx_stutter.h new file mode 100644 index 0000000000..4aac7d3253 --- /dev/null +++ b/ceammc/ext/src/fx/fx_stutter.h @@ -0,0 +1,42 @@ +#ifndef FX_STUTTER_H +#define FX_STUTTER_H + +#include "ceammc_clock.h" +#include "ceammc_property_enum.h" +#include "ceammc_sound_external.h" +using namespace ceammc; + +class FxStutter : public SoundExternal { + enum State { + ST_PASS, + ST_FX, + ST_TO_FX, + ST_FROM_FX, + }; + + State state_; + FloatProperty* max_size_; + FloatProperty* t_; + SymbolEnumProperty* mode_; + FloatProperty* speed_; + std::vector buffer_; + size_t buf_phase_; + size_t play_phase_; + ClockLambdaFunction clock_; + +public: + FxStutter(const PdArgs& args); + + void initDone() final; + void onInlet(size_t n, const AtomListView& lv); + + void setupDSP(t_signal** sig) final; + void processBlock(const t_sample** in, t_sample** out) final; + +private: + void adjustBufferSize(); +}; + +void setup_fx_stutter_tilde(); + +#endif // FX_STUTTER_H diff --git a/ceammc/ext/src/fx/fx_tapiir.cpp b/ceammc/ext/src/fx/fx_tapiir.cpp index 1575113a69..5b609cf873 100644 --- a/ceammc/ext/src/fx/fx_tapiir.cpp +++ b/ceammc/ext/src/fx/fx_tapiir.cpp @@ -1,9 +1,8 @@ #include "fx_tapiir.h" -#include "ceammc_args.h" +#include "ceammc_convert.h" +#include "ceammc_crc32.h" #include "ceammc_factory.h" -#include "ceammc_units.h" #include "fx_tapiir_priv.h" -#include "lex/parser_music.h" #include #include @@ -11,6 +10,12 @@ #include #include +CEAMMC_DEFINE_HASH(delays) +CEAMMC_DEFINE_HASH(fb) +CEAMMC_DEFINE_HASH(gains) +CEAMMC_DEFINE_HASH(inputs) +CEAMMC_DEFINE_HASH(outputs) + using namespace ceammc; static bool is_tap_delay_prop(const char* str) @@ -100,10 +105,10 @@ FxTapiir::FxTapiir(const PdArgs& args) for (size_t i = 0; i < NUM_TAPS; i++) res.append(tap_outputs_[i]->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_outputs_[i]->set(l.view(i, 1))) + if (!tap_outputs_[i]->set(lv.subView(i, 1))) return false; } return true; @@ -117,10 +122,10 @@ FxTapiir::FxTapiir(const PdArgs& args) for (size_t i = 0; i < NUM_TAPS; i++) res.append(tap_outputs_[NUM_TAPS + i]->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_outputs_[NUM_TAPS + i]->set(l.view(i, 1))) + if (!tap_outputs_[NUM_TAPS + i]->set(lv.subView(i, 1))) return false; } return true; @@ -134,10 +139,10 @@ FxTapiir::FxTapiir(const PdArgs& args) for (size_t i = 0; i < NUM_TAPS; i++) res.append(tap_inputs_[i]->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_inputs_[i]->set(l.view(i, 1))) + if (!tap_inputs_[i]->set(lv.subView(i, 1))) return false; } return true; @@ -151,10 +156,10 @@ FxTapiir::FxTapiir(const PdArgs& args) for (size_t i = 0; i < NUM_TAPS; i++) res.append(tap_inputs_[NUM_TAPS + i]->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_inputs_[NUM_TAPS + i]->set(l.view(i, 1))) + if (!tap_inputs_[NUM_TAPS + i]->set(lv.subView(i, 1))) return false; } return true; @@ -168,10 +173,10 @@ FxTapiir::FxTapiir(const PdArgs& args) res.append(d->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_delays_[i]->set(l.view(i, 1))) + if (!tap_delays_[i]->set(lv.subView(i, 1))) return false; } return true; @@ -185,10 +190,10 @@ FxTapiir::FxTapiir(const PdArgs& args) for(auto& d: tap_gains_) res.append(d->value()); return res; }, - [this](const AtomList& l) -> bool { - const size_t N = std::min(NUM_TAPS, l.size()); + [this](const AtomListView& lv) -> bool { + const size_t N = std::min(NUM_TAPS, lv.size()); for (size_t i = 0; i < N; i++) { - if (!tap_gains_[i]->set(l.view(i, 1))) + if (!tap_gains_[i]->set(lv.subView(i, 1))) return false; } return true; @@ -203,6 +208,131 @@ FxTapiir::FxTapiir(const PdArgs& args) createTapFbProp<5>(); } +void FxTapiir::m_random(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_SYMBOL, ARG_FLOAT, ARG_FLOAT)) { + METHOD_ERR(s) << "expected: fb|gains|inputs|outputs|delays MIN MAX"; + return; + } + + std::mt19937 dev(time(nullptr)); + auto sel = crc32_hash(lv[0].asSymbol()); + + using UFloat = std::uniform_real_distribution; + + if (sel == hash_delays) { + auto min = clip_min(lv[1].asFloat(), 0); + auto max = clip_min(lv[2].asFloat(), 0); + + UFloat dist(min, max); + for (auto p : tap_delays_) + p->setValue(dist(dev), true); + } else if (sel == hash_fb) { + auto min = clip(lv[1].asFloat(), 0, 0.999); + auto max = clip(lv[2].asFloat(), 0, 0.999); + + UFloat dist(min, max); + for (auto p : tap_fb_) + p->setValue(dist(dev), true); + } else if (sel == hash_inputs) { + auto min = clip(lv[1].asFloat(), 0, 0.999); + auto max = clip(lv[2].asFloat(), 0, 0.999); + + UFloat dist(min, max); + for (auto p : tap_inputs_) + p->setValue(dist(dev), true); + } else if (sel == hash_gains) { + auto min = clip(lv[1].asFloat(), -60, 0); + auto max = clip(lv[2].asFloat(), -60, 0); + + UFloat dist(min, max); + for (auto p : tap_gains_) + p->setValue(dist(dev), true); + } else if (sel == hash_outputs) { + auto min = clip(lv[1].asFloat(), 0, 0.999); + auto max = clip(lv[2].asFloat(), 0, 0.999); + + UFloat dist(min, max); + for (auto p : tap_outputs_) + p->setValue(dist(dev), true); + } +} + +void FxTapiir::m_pingpong(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_FLOAT, ARG_FLOAT)) { + METHOD_ERR(s) << "usage: DELAY FEEDBACK" << lv; + return; + } + + const auto ms = lv[0].asT(); + if (ms < 0) { + METHOD_ERR(s) << "invalid delays value: " << ms; + return; + } + + const auto fb = lv[1].asT(); + if (fb < 0 || fb > 1) { + METHOD_ERR(s) << "invalid feedback value: " << fb; + return; + } + + // set delays + for (auto p : tap_delays_) + p->setValue(0); + + tap_delays_[0]->setValue(ms); + tap_delays_[1]->setValue(ms); + + // set inputs + for (size_t i = 0; i < NUM_CHAN; i++) { + for (size_t t = 0; t < NUM_TAPS; t++) { + auto idx = i * NUM_TAPS + t; // see initTapGroupProps() + if (idx > tap_inputs_.size()) + continue; + + if (t == 0 && i == 0) + tap_inputs_[idx]->setValue(1); + else if (t == 1 && i == 1) + tap_inputs_[idx]->setValue(1); + else + tap_inputs_[idx]->setValue(0); + } + } + + // set feedbacks + for (size_t fbi = 0; fbi < NUM_TAPS; fbi++) { + for (size_t ti = 0; ti < NUM_TAPS; ti++) { + auto idx = ti * NUM_TAPS + fbi; // see initTapGroupProps() + if (idx > tap_fb_.size()) + continue; + + if (ti == 0 && fbi == 1) + tap_fb_[idx]->setValue(fb); + else if (ti == 1 && fbi == 0) + tap_fb_[idx]->setValue(fb); + else + tap_fb_[idx]->setValue(0); + } + } + + // set outputs + for (size_t oi = 0; oi < NUM_CHAN; oi++) { + for (size_t ti = 0; ti < NUM_TAPS; ti++) { + auto idx = oi * NUM_TAPS + ti; // see initTapGroupProps() + if (idx > tap_outputs_.size()) + continue; + + if (ti == 0 && oi == 0) + tap_outputs_[idx]->setValue(1); + else if (ti == 1 && oi == 1) + tap_outputs_[idx]->setValue(1); + else + tap_outputs_[idx]->setValue(0); + } + } +} + void FxTapiir::getTapFb(size_t tapn, AtomList& res) { for (size_t i = 0; i < std::min(tap_fb_.size(), NUM_TAPS); i++) { @@ -254,4 +384,6 @@ void setup_fx_tapiir_tilde() { SoundExternalFactory obj("fx.tapiir~"); obj.addMethod("reset", &FxTapiir::m_reset); + obj.addMethod("random", &FxTapiir::m_random); + obj.addMethod("pingpong", &FxTapiir::m_pingpong); } diff --git a/ceammc/ext/src/fx/fx_tapiir.h b/ceammc/ext/src/fx/fx_tapiir.h index 02ab4a3b88..a5e15fd25a 100644 --- a/ceammc/ext/src/fx/fx_tapiir.h +++ b/ceammc/ext/src/fx/fx_tapiir.h @@ -4,8 +4,8 @@ copyright: "(c)GRAME 2006" license: "BSD" name: "fx.tapiir" version: "1.0" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_tapiir -scn fx_tapiir_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_tapiir_H__ @@ -18,23 +18,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_tapiir_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_tapiir_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -48,22 +48,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -72,7 +157,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_tapiir_dsp { +class FAUST_API fx_tapiir_dsp { public: @@ -166,7 +251,7 @@ class fx_tapiir_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_tapiir_dsp { +class FAUST_API decorator_dsp : public fx_tapiir_dsp { protected: @@ -199,7 +284,7 @@ class decorator_dsp : public fx_tapiir_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -228,18 +313,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -247,7 +335,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -258,16 +346,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -280,38 +366,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_tapiir_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -326,8 +413,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -357,37 +444,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -398,40 +484,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_tapiir_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -444,14 +530,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -553,7 +631,6 @@ struct fx_tapiir : public fx_tapiir_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS fx_tapiir #endif @@ -563,6 +640,13 @@ struct fx_tapiir : public fx_tapiir_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class fx_tapiir : public fx_tapiir_dsp { private: @@ -581,7 +665,7 @@ class fx_tapiir : public fx_tapiir_dsp { FAUSTFLOAT fVslider9; FAUSTFLOAT fVslider10; FAUSTFLOAT fVslider11; - int IOTA; + int IOTA0; float fVec0[1048576]; float fConst2; float fRec0[2]; @@ -667,10 +751,10 @@ class fx_tapiir : public fx_tapiir_dsp { void metadata(Meta* m) { m->declare("author", "Grame"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_tapiir -scn fx_tapiir_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("copyright", "(c)GRAME 2006"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); @@ -685,7 +769,7 @@ class fx_tapiir : public fx_tapiir_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("version", "1.0"); } @@ -701,9 +785,9 @@ class fx_tapiir : public fx_tapiir_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (0.00100000005f * fConst0); - fConst2 = ((5.0f * fConst0) + 1.0f); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 0.001f * fConst0; + fConst2 = 5.0f * fConst0 + 1.0f; } virtual void instanceResetUserInterface() { @@ -761,13 +845,13 @@ class fx_tapiir : public fx_tapiir_dsp { fVslider51 = FAUSTFLOAT(1.0f); fVslider52 = FAUSTFLOAT(0.0f); fVslider53 = FAUSTFLOAT(0.0f); - fVslider54 = FAUSTFLOAT(0.0f); + fVslider54 = FAUSTFLOAT(1.0f); fVslider55 = FAUSTFLOAT(0.0f); fVslider56 = FAUSTFLOAT(0.0f); fVslider57 = FAUSTFLOAT(0.0f); fVslider58 = FAUSTFLOAT(0.0f); fVslider59 = FAUSTFLOAT(0.0f); - fVslider60 = FAUSTFLOAT(1.0f); + fVslider60 = FAUSTFLOAT(0.0f); fVslider61 = FAUSTFLOAT(1.0f); fVslider62 = FAUSTFLOAT(0.0f); fVslider63 = FAUSTFLOAT(0.0f); @@ -788,41 +872,41 @@ class fx_tapiir : public fx_tapiir_dsp { } virtual void instanceClear() { - IOTA = 0; - for (int l0 = 0; (l0 < 1048576); l0 = (l0 + 1)) { + IOTA0 = 0; + for (int l0 = 0; l0 < 1048576; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 1048576); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 1048576; l2 = l2 + 1) { fVec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec1[l3] = 0.0f; } - for (int l4 = 0; (l4 < 1048576); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 1048576; l4 = l4 + 1) { fVec2[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec2[l5] = 0.0f; } - for (int l6 = 0; (l6 < 1048576); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 1048576; l6 = l6 + 1) { fVec3[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec3[l7] = 0.0f; } - for (int l8 = 0; (l8 < 1048576); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 1048576; l8 = l8 + 1) { fVec4[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec4[l9] = 0.0f; } - for (int l10 = 0; (l10 < 1048576); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 1048576; l10 = l10 + 1) { fVec5[l10] = 0.0f; } - for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 2; l11 = l11 + 1) { fRec5[l11] = 0.0f; } } @@ -849,112 +933,112 @@ class fx_tapiir : public fx_tapiir_dsp { ui_interface->openVerticalBox("fx.tapiir"); ui_interface->openTabBox("0x00"); ui_interface->declare(&fVslider2, "unit", "ms"); - ui_interface->addVerticalSlider("tap0.delay", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap0.fb0", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.fb1", &fVslider5, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.fb2", &fVslider6, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.fb3", &fVslider7, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.fb4", &fVslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.fb5", &fVslider9, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap0.delay", &fVslider2, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap0.fb0", &fVslider9, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.fb1", &fVslider8, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.fb2", &fVslider7, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.fb3", &fVslider6, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.fb4", &fVslider5, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.fb5", &fVslider4, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider3, "unit", "db"); - ui_interface->addVerticalSlider("tap0.gain", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.in0", &fVslider10, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap0.in1", &fVslider11, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap0.gain", &fVslider3, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.in0", &fVslider10, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap0.in1", &fVslider11, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider12, "unit", "ms"); - ui_interface->addVerticalSlider("tap1.delay", &fVslider12, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap1.fb0", &fVslider14, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.fb1", &fVslider15, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.fb2", &fVslider16, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.fb3", &fVslider17, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.fb4", &fVslider18, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.fb5", &fVslider19, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap1.delay", &fVslider12, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap1.fb0", &fVslider18, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.fb1", &fVslider17, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.fb2", &fVslider16, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.fb3", &fVslider15, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.fb4", &fVslider14, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.fb5", &fVslider19, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider13, "unit", "db"); - ui_interface->addVerticalSlider("tap1.gain", &fVslider13, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.in0", &fVslider20, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap1.in1", &fVslider21, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap1.gain", &fVslider13, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.in0", &fVslider20, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap1.in1", &fVslider21, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider22, "unit", "ms"); - ui_interface->addVerticalSlider("tap2.delay", &fVslider22, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap2.fb0", &fVslider24, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.fb1", &fVslider25, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.fb2", &fVslider26, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.fb3", &fVslider27, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.fb4", &fVslider28, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.fb5", &fVslider29, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap2.delay", &fVslider22, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap2.fb0", &fVslider24, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.fb1", &fVslider25, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.fb2", &fVslider26, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.fb3", &fVslider27, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.fb4", &fVslider28, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.fb5", &fVslider29, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider23, "unit", "db"); - ui_interface->addVerticalSlider("tap2.gain", &fVslider23, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.in0", &fVslider30, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap2.in1", &fVslider31, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap2.gain", &fVslider23, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.in0", &fVslider30, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap2.in1", &fVslider31, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider32, "unit", "ms"); - ui_interface->addVerticalSlider("tap3.delay", &fVslider32, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap3.fb0", &fVslider34, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.fb1", &fVslider35, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.fb2", &fVslider36, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.fb3", &fVslider37, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.fb4", &fVslider38, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.fb5", &fVslider39, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap3.delay", &fVslider32, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap3.fb0", &fVslider34, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.fb1", &fVslider35, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.fb2", &fVslider36, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.fb3", &fVslider37, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.fb4", &fVslider38, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.fb5", &fVslider39, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider33, "unit", "db"); - ui_interface->addVerticalSlider("tap3.gain", &fVslider33, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.in0", &fVslider40, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap3.in1", &fVslider41, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap3.gain", &fVslider33, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.in0", &fVslider40, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap3.in1", &fVslider41, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider42, "unit", "ms"); - ui_interface->addVerticalSlider("tap4.delay", &fVslider42, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap4.fb0", &fVslider44, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.fb1", &fVslider45, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.fb2", &fVslider46, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.fb3", &fVslider47, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.fb4", &fVslider48, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.fb5", &fVslider49, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap4.delay", &fVslider42, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap4.fb0", &fVslider49, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.fb1", &fVslider48, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.fb2", &fVslider47, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.fb3", &fVslider46, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.fb4", &fVslider45, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.fb5", &fVslider44, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider43, "unit", "db"); - ui_interface->addVerticalSlider("tap4.gain", &fVslider43, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.in0", &fVslider50, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap4.in1", &fVslider51, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap4.gain", &fVslider43, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.in0", &fVslider50, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap4.in1", &fVslider51, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider52, "unit", "ms"); - ui_interface->addVerticalSlider("tap5.delay", &fVslider52, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5000.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addVerticalSlider("tap5.fb0", &fVslider54, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.fb1", &fVslider55, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.fb2", &fVslider56, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.fb3", &fVslider57, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.fb4", &fVslider58, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.fb5", &fVslider59, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap5.delay", &fVslider52, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(5e+03f), FAUSTFLOAT(0.01f)); + ui_interface->addVerticalSlider("tap5.fb0", &fVslider56, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.fb1", &fVslider57, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.fb2", &fVslider58, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.fb3", &fVslider59, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.fb4", &fVslider60, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.fb5", &fVslider55, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider53, "unit", "db"); - ui_interface->addVerticalSlider("tap5.gain", &fVslider53, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.in0", &fVslider60, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("tap5.in1", &fVslider61, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("tap5.gain", &fVslider53, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.in0", &fVslider54, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("tap5.in1", &fVslider61, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); ui_interface->declare(&fVslider0, "unit", "db"); - ui_interface->addVerticalSlider("out0.gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.in0", &fVslider67, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.in1", &fVslider68, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap0", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap1", &fVslider62, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap2", &fVslider63, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap3", &fVslider64, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap4", &fVslider65, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out0.tap5", &fVslider66, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("out0.gain", &fVslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.in0", &fVslider67, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.in1", &fVslider68, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap0", &fVslider1, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap1", &fVslider62, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap2", &fVslider63, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap3", &fVslider64, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap4", &fVslider65, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out0.tap5", &fVslider66, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fVslider69, "unit", "db"); - ui_interface->addVerticalSlider("out1.gain", &fVslider69, FAUSTFLOAT(0.0f), FAUSTFLOAT(-60.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.in0", &fVslider76, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.in1", &fVslider77, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap0", &fVslider70, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap1", &fVslider71, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap2", &fVslider72, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap3", &fVslider73, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap4", &fVslider74, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->addVerticalSlider("out1.tap5", &fVslider75, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addVerticalSlider("out1.gain", &fVslider69, FAUSTFLOAT(0.0f), FAUSTFLOAT(-6e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.in0", &fVslider76, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.in1", &fVslider77, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap0", &fVslider70, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap1", &fVslider71, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap2", &fVslider72, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap3", &fVslider73, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap4", &fVslider74, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); + ui_interface->addVerticalSlider("out1.tap5", &fVslider75, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; - float fSlow0 = std::pow(10.0f, (0.0500000007f * float(fVslider0))); + float fSlow0 = std::pow(1e+01f, 0.05f * float(fVslider0)); float fSlow1 = float(fVslider1); - float fSlow2 = (fConst1 * float(fVslider2)); + float fSlow2 = fConst1 * float(fVslider2); float fSlow3 = std::floor(fSlow2); - float fSlow4 = (fSlow3 + (1.0f - fSlow2)); - float fSlow5 = std::pow(10.0f, (0.0500000007f * float(fVslider3))); + float fSlow4 = fSlow3 + (1.0f - fSlow2); + float fSlow5 = std::pow(1e+01f, 0.05f * float(fVslider3)); float fSlow6 = float(fVslider4); float fSlow7 = float(fVslider5); float fSlow8 = float(fVslider6); @@ -965,12 +1049,12 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow13 = float(fVslider11); int iSlow14 = int(fSlow2); int iSlow15 = int(std::min(fConst2, float(std::max(0, iSlow14)))); - float fSlow16 = (fSlow2 - fSlow3); - int iSlow17 = int(std::min(fConst2, float(std::max(0, (iSlow14 + 1))))); - float fSlow18 = (fConst1 * float(fVslider12)); + float fSlow16 = fSlow2 - fSlow3; + int iSlow17 = int(std::min(fConst2, float(std::max(0, iSlow14 + 1)))); + float fSlow18 = fConst1 * float(fVslider12); float fSlow19 = std::floor(fSlow18); - float fSlow20 = (fSlow19 + (1.0f - fSlow18)); - float fSlow21 = std::pow(10.0f, (0.0500000007f * float(fVslider13))); + float fSlow20 = fSlow19 + (1.0f - fSlow18); + float fSlow21 = std::pow(1e+01f, 0.05f * float(fVslider13)); float fSlow22 = float(fVslider14); float fSlow23 = float(fVslider15); float fSlow24 = float(fVslider16); @@ -981,12 +1065,12 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow29 = float(fVslider21); int iSlow30 = int(fSlow18); int iSlow31 = int(std::min(fConst2, float(std::max(0, iSlow30)))); - float fSlow32 = (fSlow18 - fSlow19); - int iSlow33 = int(std::min(fConst2, float(std::max(0, (iSlow30 + 1))))); - float fSlow34 = (fConst1 * float(fVslider22)); + float fSlow32 = fSlow18 - fSlow19; + int iSlow33 = int(std::min(fConst2, float(std::max(0, iSlow30 + 1)))); + float fSlow34 = fConst1 * float(fVslider22); float fSlow35 = std::floor(fSlow34); - float fSlow36 = (fSlow35 + (1.0f - fSlow34)); - float fSlow37 = std::pow(10.0f, (0.0500000007f * float(fVslider23))); + float fSlow36 = fSlow35 + (1.0f - fSlow34); + float fSlow37 = std::pow(1e+01f, 0.05f * float(fVslider23)); float fSlow38 = float(fVslider24); float fSlow39 = float(fVslider25); float fSlow40 = float(fVslider26); @@ -997,12 +1081,12 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow45 = float(fVslider31); int iSlow46 = int(fSlow34); int iSlow47 = int(std::min(fConst2, float(std::max(0, iSlow46)))); - float fSlow48 = (fSlow34 - fSlow35); - int iSlow49 = int(std::min(fConst2, float(std::max(0, (iSlow46 + 1))))); - float fSlow50 = (fConst1 * float(fVslider32)); + float fSlow48 = fSlow34 - fSlow35; + int iSlow49 = int(std::min(fConst2, float(std::max(0, iSlow46 + 1)))); + float fSlow50 = fConst1 * float(fVslider32); float fSlow51 = std::floor(fSlow50); - float fSlow52 = (fSlow51 + (1.0f - fSlow50)); - float fSlow53 = std::pow(10.0f, (0.0500000007f * float(fVslider33))); + float fSlow52 = fSlow51 + (1.0f - fSlow50); + float fSlow53 = std::pow(1e+01f, 0.05f * float(fVslider33)); float fSlow54 = float(fVslider34); float fSlow55 = float(fVslider35); float fSlow56 = float(fVslider36); @@ -1013,12 +1097,12 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow61 = float(fVslider41); int iSlow62 = int(fSlow50); int iSlow63 = int(std::min(fConst2, float(std::max(0, iSlow62)))); - float fSlow64 = (fSlow50 - fSlow51); - int iSlow65 = int(std::min(fConst2, float(std::max(0, (iSlow62 + 1))))); - float fSlow66 = (fConst1 * float(fVslider42)); + float fSlow64 = fSlow50 - fSlow51; + int iSlow65 = int(std::min(fConst2, float(std::max(0, iSlow62 + 1)))); + float fSlow66 = fConst1 * float(fVslider42); float fSlow67 = std::floor(fSlow66); - float fSlow68 = (fSlow67 + (1.0f - fSlow66)); - float fSlow69 = std::pow(10.0f, (0.0500000007f * float(fVslider43))); + float fSlow68 = fSlow67 + (1.0f - fSlow66); + float fSlow69 = std::pow(1e+01f, 0.05f * float(fVslider43)); float fSlow70 = float(fVslider44); float fSlow71 = float(fVslider45); float fSlow72 = float(fVslider46); @@ -1029,12 +1113,12 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow77 = float(fVslider51); int iSlow78 = int(fSlow66); int iSlow79 = int(std::min(fConst2, float(std::max(0, iSlow78)))); - float fSlow80 = (fSlow66 - fSlow67); - int iSlow81 = int(std::min(fConst2, float(std::max(0, (iSlow78 + 1))))); - float fSlow82 = (fConst1 * float(fVslider52)); + float fSlow80 = fSlow66 - fSlow67; + int iSlow81 = int(std::min(fConst2, float(std::max(0, iSlow78 + 1)))); + float fSlow82 = fConst1 * float(fVslider52); float fSlow83 = std::floor(fSlow82); - float fSlow84 = (fSlow83 + (1.0f - fSlow82)); - float fSlow85 = std::pow(10.0f, (0.0500000007f * float(fVslider53))); + float fSlow84 = fSlow83 + (1.0f - fSlow82); + float fSlow85 = std::pow(1e+01f, 0.05f * float(fVslider53)); float fSlow86 = float(fVslider54); float fSlow87 = float(fVslider55); float fSlow88 = float(fVslider56); @@ -1045,8 +1129,8 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow93 = float(fVslider61); int iSlow94 = int(fSlow82); int iSlow95 = int(std::min(fConst2, float(std::max(0, iSlow94)))); - float fSlow96 = (fSlow82 - fSlow83); - int iSlow97 = int(std::min(fConst2, float(std::max(0, (iSlow94 + 1))))); + float fSlow96 = fSlow82 - fSlow83; + int iSlow97 = int(std::min(fConst2, float(std::max(0, iSlow94 + 1)))); float fSlow98 = float(fVslider62); float fSlow99 = float(fVslider63); float fSlow100 = float(fVslider64); @@ -1054,7 +1138,7 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow102 = float(fVslider66); float fSlow103 = float(fVslider67); float fSlow104 = float(fVslider68); - float fSlow105 = std::pow(10.0f, (0.0500000007f * float(fVslider69))); + float fSlow105 = std::pow(1e+01f, 0.05f * float(fVslider69)); float fSlow106 = float(fVslider70); float fSlow107 = float(fVslider71); float fSlow108 = float(fVslider72); @@ -1063,30 +1147,30 @@ class fx_tapiir : public fx_tapiir_dsp { float fSlow111 = float(fVslider75); float fSlow112 = float(fVslider76); float fSlow113 = float(fVslider77); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); float fTemp1 = float(input1[i0]); - float fTemp2 = (fSlow5 * ((((((((fSlow6 * fRec0[1]) + (fSlow7 * fRec1[1])) + (fSlow8 * fRec2[1])) + (fSlow9 * fRec3[1])) + (fSlow10 * fRec4[1])) + (fSlow11 * fRec5[1])) + (fSlow12 * fTemp0)) + (fSlow13 * fTemp1))); - fVec0[(IOTA & 1048575)] = fTemp2; - fRec0[0] = ((fSlow4 * fVec0[((IOTA - iSlow15) & 1048575)]) + (fSlow16 * fVec0[((IOTA - iSlow17) & 1048575)])); - float fTemp3 = (fSlow21 * ((((((((fSlow22 * fRec0[1]) + (fSlow23 * fRec1[1])) + (fSlow24 * fRec2[1])) + (fSlow25 * fRec3[1])) + (fSlow26 * fRec4[1])) + (fSlow27 * fRec5[1])) + (fSlow28 * fTemp0)) + (fSlow29 * fTemp1))); - fVec1[(IOTA & 1048575)] = fTemp3; - fRec1[0] = ((fSlow20 * fVec1[((IOTA - iSlow31) & 1048575)]) + (fSlow32 * fVec1[((IOTA - iSlow33) & 1048575)])); - float fTemp4 = (fSlow37 * ((((((((fSlow38 * fRec0[1]) + (fSlow39 * fRec1[1])) + (fSlow40 * fRec2[1])) + (fSlow41 * fRec3[1])) + (fSlow42 * fRec4[1])) + (fSlow43 * fRec5[1])) + (fSlow44 * fTemp0)) + (fSlow45 * fTemp1))); - fVec2[(IOTA & 1048575)] = fTemp4; - fRec2[0] = ((fSlow36 * fVec2[((IOTA - iSlow47) & 1048575)]) + (fSlow48 * fVec2[((IOTA - iSlow49) & 1048575)])); - float fTemp5 = (fSlow53 * ((((((((fSlow54 * fRec0[1]) + (fSlow55 * fRec1[1])) + (fSlow56 * fRec2[1])) + (fSlow57 * fRec3[1])) + (fSlow58 * fRec4[1])) + (fSlow59 * fRec5[1])) + (fSlow60 * fTemp0)) + (fSlow61 * fTemp1))); - fVec3[(IOTA & 1048575)] = fTemp5; - fRec3[0] = ((fSlow52 * fVec3[((IOTA - iSlow63) & 1048575)]) + (fSlow64 * fVec3[((IOTA - iSlow65) & 1048575)])); - float fTemp6 = (fSlow69 * ((((((((fSlow70 * fRec0[1]) + (fSlow71 * fRec1[1])) + (fSlow72 * fRec2[1])) + (fSlow73 * fRec3[1])) + (fSlow74 * fRec4[1])) + (fSlow75 * fRec5[1])) + (fSlow76 * fTemp0)) + (fSlow77 * fTemp1))); - fVec4[(IOTA & 1048575)] = fTemp6; - fRec4[0] = ((fSlow68 * fVec4[((IOTA - iSlow79) & 1048575)]) + (fSlow80 * fVec4[((IOTA - iSlow81) & 1048575)])); - float fTemp7 = (fSlow85 * ((((((((fSlow86 * fRec0[1]) + (fSlow87 * fRec1[1])) + (fSlow88 * fRec2[1])) + (fSlow89 * fRec3[1])) + (fSlow90 * fRec4[1])) + (fSlow91 * fRec5[1])) + (fSlow92 * fTemp0)) + (fSlow93 * fTemp1))); - fVec5[(IOTA & 1048575)] = fTemp7; - fRec5[0] = ((fSlow84 * fVec5[((IOTA - iSlow95) & 1048575)]) + (fSlow96 * fVec5[((IOTA - iSlow97) & 1048575)])); - output0[i0] = FAUSTFLOAT((fSlow0 * ((((((((fSlow1 * fRec0[0]) + (fSlow98 * fRec1[0])) + (fSlow99 * fRec2[0])) + (fSlow100 * fRec3[0])) + (fSlow101 * fRec4[0])) + (fSlow102 * fRec5[0])) + (fSlow103 * fTemp0)) + (fSlow104 * fTemp1)))); - output1[i0] = FAUSTFLOAT((fSlow105 * ((((((((fSlow106 * fRec0[0]) + (fSlow107 * fRec1[0])) + (fSlow108 * fRec2[0])) + (fSlow109 * fRec3[0])) + (fSlow110 * fRec4[0])) + (fSlow111 * fRec5[0])) + (fSlow112 * fTemp0)) + (fSlow113 * fTemp1)))); - IOTA = (IOTA + 1); + float fTemp2 = fSlow5 * (fSlow6 * fRec5[1] + fSlow7 * fRec4[1] + fSlow8 * fRec3[1] + fSlow9 * fRec2[1] + fSlow10 * fRec1[1] + fSlow11 * fRec0[1] + fSlow12 * fTemp0 + fSlow13 * fTemp1); + fVec0[IOTA0 & 1048575] = fTemp2; + fRec0[0] = fSlow4 * fVec0[(IOTA0 - iSlow15) & 1048575] + fSlow16 * fVec0[(IOTA0 - iSlow17) & 1048575]; + float fTemp3 = fSlow21 * (fSlow22 * fRec4[1] + fSlow23 * fRec3[1] + fSlow24 * fRec2[1] + fSlow25 * fRec1[1] + fSlow26 * fRec0[1] + fSlow27 * fRec5[1] + fSlow28 * fTemp0 + fSlow29 * fTemp1); + fVec1[IOTA0 & 1048575] = fTemp3; + fRec1[0] = fSlow20 * fVec1[(IOTA0 - iSlow31) & 1048575] + fSlow32 * fVec1[(IOTA0 - iSlow33) & 1048575]; + float fTemp4 = fSlow37 * (fSlow38 * fRec0[1] + fSlow39 * fRec1[1] + fSlow40 * fRec2[1] + fSlow41 * fRec3[1] + fSlow42 * fRec4[1] + fSlow43 * fRec5[1] + fSlow44 * fTemp0 + fSlow45 * fTemp1); + fVec2[IOTA0 & 1048575] = fTemp4; + fRec2[0] = fSlow36 * fVec2[(IOTA0 - iSlow47) & 1048575] + fSlow48 * fVec2[(IOTA0 - iSlow49) & 1048575]; + float fTemp5 = fSlow53 * (fSlow54 * fRec0[1] + fSlow55 * fRec1[1] + fSlow56 * fRec2[1] + fSlow57 * fRec3[1] + fSlow58 * fRec4[1] + fSlow59 * fRec5[1] + fSlow60 * fTemp0 + fSlow61 * fTemp1); + fVec3[IOTA0 & 1048575] = fTemp5; + fRec3[0] = fSlow52 * fVec3[(IOTA0 - iSlow63) & 1048575] + fSlow64 * fVec3[(IOTA0 - iSlow65) & 1048575]; + float fTemp6 = fSlow69 * (fSlow70 * fRec5[1] + fSlow71 * fRec4[1] + fSlow72 * fRec3[1] + fSlow73 * fRec2[1] + fSlow74 * fRec1[1] + fSlow75 * fRec0[1] + fSlow76 * fTemp0 + fSlow77 * fTemp1); + fVec4[IOTA0 & 1048575] = fTemp6; + fRec4[0] = fSlow68 * fVec4[(IOTA0 - iSlow79) & 1048575] + fSlow80 * fVec4[(IOTA0 - iSlow81) & 1048575]; + float fTemp7 = fSlow85 * (fSlow86 * fTemp0 + fSlow87 * fRec5[1] + fSlow88 * fRec0[1] + fSlow89 * fRec1[1] + fSlow90 * fRec2[1] + fSlow91 * fRec3[1] + fSlow92 * fRec4[1] + fSlow93 * fTemp1); + fVec5[IOTA0 & 1048575] = fTemp7; + fRec5[0] = fSlow84 * fVec5[(IOTA0 - iSlow95) & 1048575] + fSlow96 * fVec5[(IOTA0 - iSlow97) & 1048575]; + output0[i0] = FAUSTFLOAT(fSlow0 * (fSlow1 * fRec0[0] + fSlow98 * fRec1[0] + fSlow99 * fRec2[0] + fSlow100 * fRec3[0] + fSlow101 * fRec4[0] + fSlow102 * fRec5[0] + fSlow103 * fTemp0 + fSlow104 * fTemp1)); + output1[i0] = FAUSTFLOAT(fSlow105 * (fSlow106 * fRec0[0] + fSlow107 * fRec1[0] + fSlow108 * fRec2[0] + fSlow109 * fRec3[0] + fSlow110 * fRec4[0] + fSlow111 * fRec5[0] + fSlow112 * fTemp0 + fSlow113 * fTemp1)); + IOTA0 = IOTA0 + 1; fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/fx/fx_tapiir_priv.h b/ceammc/ext/src/fx/fx_tapiir_priv.h index 95c3127372..e06b562c88 100644 --- a/ceammc/ext/src/fx/fx_tapiir_priv.h +++ b/ceammc/ext/src/fx/fx_tapiir_priv.h @@ -36,6 +36,9 @@ class FxTapiir : public faust_fx_tapiir_tilde { public: FxTapiir(const PdArgs& args); + void m_random(t_symbol* s, const AtomListView& lv); + void m_pingpong(t_symbol* s, const AtomListView& lv); + private: void initTapGroupProps(); @@ -53,8 +56,8 @@ class FxTapiir : public faust_fx_tapiir_tilde { AtomList res; getTapFb(N, res); return res; }, - [this](const AtomList& l) -> bool { - return setTapFb(N, l); + [this](const AtomListView& lv) -> bool { + return setTapFb(N, lv); }); } }; diff --git a/ceammc/ext/src/fx/fx_vocoder.h b/ceammc/ext/src/fx/fx_vocoder.h index b82e325733..2b8bd55e32 100644 --- a/ceammc/ext/src/fx/fx_vocoder.h +++ b/ceammc/ext/src/fx/fx_vocoder.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.vocoder" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_vocoder -scn fx_vocoder_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_vocoder_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_vocoder_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_vocoder_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_vocoder_dsp { +class FAUST_API fx_vocoder_dsp { public: @@ -162,7 +247,7 @@ class fx_vocoder_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_vocoder_dsp { +class FAUST_API decorator_dsp : public fx_vocoder_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_vocoder_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_vocoder_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_vocoder_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct fx_vocoder : public fx_vocoder_dsp { #include #include -static float fx_vocoder_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_vocoder #endif @@ -562,6 +636,16 @@ static float fx_vocoder_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_vocoder_faustpower2_f(float value) { + return value * value; +} + class fx_vocoder : public fx_vocoder_dsp { private: @@ -571,213 +655,182 @@ class fx_vocoder : public fx_vocoder_dsp { FAUSTFLOAT fHslider0; float fConst3; float fRec0[3]; - float fRec3[3]; + float fRec2[3]; float fConst4; FAUSTFLOAT fHslider1; float fConst5; - float fRec4[2]; + float fRec3[2]; float fConst6; FAUSTFLOAT fHslider2; - float fRec5[2]; - float fRec2[2]; + float fRec4[2]; float fRec1[2]; float fConst8; float fConst9; - float fRec6[3]; - float fRec9[3]; - float fRec8[2]; - float fRec7[2]; + float fRec5[3]; + float fRec7[3]; + float fRec6[2]; float fConst11; float fConst12; + float fRec8[3]; float fRec10[3]; - float fRec13[3]; - float fRec12[2]; - float fRec11[2]; + float fRec9[2]; float fConst14; float fConst15; - float fRec14[3]; - float fRec17[3]; - float fRec16[2]; - float fRec15[2]; + float fRec11[3]; + float fRec13[3]; + float fRec12[2]; float fConst17; float fConst18; - float fRec18[3]; - float fRec21[3]; - float fRec20[2]; - float fRec19[2]; + float fRec14[3]; + float fRec16[3]; + float fRec15[2]; float fConst20; float fConst21; - float fRec22[3]; - float fRec25[3]; - float fRec24[2]; - float fRec23[2]; + float fRec17[3]; + float fRec19[3]; + float fRec18[2]; float fConst23; float fConst24; - float fRec26[3]; - float fRec29[3]; - float fRec28[2]; - float fRec27[2]; + float fRec20[3]; + float fRec22[3]; + float fRec21[2]; float fConst26; float fConst27; - float fRec30[3]; - float fRec33[3]; - float fRec32[2]; - float fRec31[2]; + float fRec23[3]; + float fRec25[3]; + float fRec24[2]; float fConst29; float fConst30; - float fRec34[3]; - float fRec37[3]; - float fRec36[2]; - float fRec35[2]; + float fRec26[3]; + float fRec28[3]; + float fRec27[2]; float fConst32; float fConst33; - float fRec38[3]; - float fRec41[3]; - float fRec40[2]; - float fRec39[2]; + float fRec29[3]; + float fRec31[3]; + float fRec30[2]; float fConst35; float fConst36; - float fRec42[3]; - float fRec45[3]; - float fRec44[2]; - float fRec43[2]; + float fRec32[3]; + float fRec34[3]; + float fRec33[2]; float fConst38; float fConst39; - float fRec46[3]; - float fRec49[3]; - float fRec48[2]; - float fRec47[2]; + float fRec35[3]; + float fRec37[3]; + float fRec36[2]; float fConst41; float fConst42; - float fRec50[3]; - float fRec53[3]; - float fRec52[2]; - float fRec51[2]; + float fRec38[3]; + float fRec40[3]; + float fRec39[2]; float fConst44; float fConst45; - float fRec54[3]; - float fRec57[3]; - float fRec56[2]; - float fRec55[2]; + float fRec41[3]; + float fRec43[3]; + float fRec42[2]; float fConst47; float fConst48; - float fRec58[3]; - float fRec61[3]; - float fRec60[2]; - float fRec59[2]; + float fRec44[3]; + float fRec46[3]; + float fRec45[2]; float fConst50; float fConst51; - float fRec62[3]; - float fRec65[3]; - float fRec64[2]; - float fRec63[2]; + float fRec47[3]; + float fRec49[3]; + float fRec48[2]; float fConst53; float fConst54; - float fRec66[3]; - float fRec69[3]; - float fRec68[2]; - float fRec67[2]; + float fRec50[3]; + float fRec52[3]; + float fRec51[2]; float fConst56; float fConst57; - float fRec70[3]; - float fRec73[3]; - float fRec72[2]; - float fRec71[2]; + float fRec53[3]; + float fRec55[3]; + float fRec54[2]; float fConst59; float fConst60; - float fRec74[3]; - float fRec77[3]; - float fRec76[2]; - float fRec75[2]; + float fRec56[3]; + float fRec58[3]; + float fRec57[2]; float fConst62; float fConst63; - float fRec78[3]; - float fRec81[3]; - float fRec80[2]; - float fRec79[2]; + float fRec59[3]; + float fRec61[3]; + float fRec60[2]; float fConst65; float fConst66; - float fRec82[3]; - float fRec85[3]; - float fRec84[2]; - float fRec83[2]; + float fRec62[3]; + float fRec64[3]; + float fRec63[2]; float fConst68; float fConst69; - float fRec86[3]; - float fRec89[3]; - float fRec88[2]; - float fRec87[2]; + float fRec65[3]; + float fRec67[3]; + float fRec66[2]; float fConst71; float fConst72; - float fRec90[3]; - float fRec93[3]; - float fRec92[2]; - float fRec91[2]; + float fRec68[3]; + float fRec70[3]; + float fRec69[2]; float fConst74; float fConst75; - float fRec94[3]; - float fRec97[3]; - float fRec96[2]; - float fRec95[2]; + float fRec71[3]; + float fRec73[3]; + float fRec72[2]; float fConst77; float fConst78; - float fRec98[3]; - float fRec101[3]; - float fRec100[2]; - float fRec99[2]; + float fRec74[3]; + float fRec76[3]; + float fRec75[2]; float fConst80; float fConst81; - float fRec102[3]; - float fRec105[3]; - float fRec104[2]; - float fRec103[2]; + float fRec77[3]; + float fRec79[3]; + float fRec78[2]; float fConst83; float fConst84; - float fRec106[3]; - float fRec109[3]; - float fRec108[2]; - float fRec107[2]; + float fRec80[3]; + float fRec82[3]; + float fRec81[2]; float fConst86; float fConst87; - float fRec110[3]; - float fRec113[3]; - float fRec112[2]; - float fRec111[2]; + float fRec83[3]; + float fRec85[3]; + float fRec84[2]; float fConst89; float fConst90; - float fRec114[3]; - float fRec117[3]; - float fRec116[2]; - float fRec115[2]; + float fRec86[3]; + float fRec88[3]; + float fRec87[2]; float fConst92; float fConst93; - float fRec118[3]; - float fRec121[3]; - float fRec120[2]; - float fRec119[2]; + float fRec89[3]; + float fRec91[3]; + float fRec90[2]; float fConst95; float fConst96; - float fRec122[3]; - float fRec125[3]; - float fRec124[2]; - float fRec123[2]; + float fRec92[3]; + float fRec94[3]; + float fRec93[2]; float fConst98; float fConst99; - float fRec126[3]; - float fRec129[3]; - float fRec128[2]; - float fRec127[2]; + float fRec95[3]; + float fRec97[3]; + float fRec96[2]; public: void metadata(Meta* m) { + m->declare("analyzers.lib/amp_follower_ar:author", "Jonatan Liljedahl, revised by Romain Michon"); m->declare("analyzers.lib/name", "Faust Analyzer Library"); - m->declare("analyzers.lib/version", "0.1"); + m->declare("analyzers.lib/version", "0.2"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_vocoder -scn fx_vocoder_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_vocoder.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -806,8 +859,11 @@ class fx_vocoder : public fx_vocoder_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/onePoleSwitching:author", "Jonatan Liljedahl, revised by Dario Sanfilippo"); + m->declare("signals.lib/onePoleSwitching:licence", "STK-4.3"); + m->declare("signals.lib/version", "0.3"); m->declare("vaeffects.lib/name", "Faust Virtual Analog Filter Effect Library"); + m->declare("vaeffects.lib/oneVocoderBand:author", "Romain Michon"); m->declare("vaeffects.lib/version", "0.2"); } @@ -823,106 +879,106 @@ class fx_vocoder : public fx_vocoder_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - float fConst1 = std::tan((40212.3867f / fConst0)); - fConst2 = (1.0f / fConst1); - fConst3 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst1)))); - fConst4 = (0.0441000015f / fConst0); - fConst5 = (1.0f - (44.0999985f / fConst0)); - fConst6 = (1.0f / fConst0); - float fConst7 = std::tan((33089.8789f / fConst0)); - fConst8 = (1.0f / fConst7); - fConst9 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst7)))); - float fConst10 = std::tan((27228.9238f / fConst0)); - fConst11 = (1.0f / fConst10); - fConst12 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst10)))); - float fConst13 = std::tan((18437.4609f / fConst0)); - fConst14 = (1.0f / fConst13); - fConst15 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst13)))); - float fConst16 = std::tan((15171.7754f / fConst0)); - fConst17 = (1.0f / fConst16); - fConst18 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst16)))); - float fConst19 = std::tan((12484.5166f / fConst0)); - fConst20 = (1.0f / fConst19); - fConst21 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst19)))); - float fConst22 = std::tan((10273.2305f / fConst0)); - fConst23 = (1.0f / fConst22); - fConst24 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst22)))); - float fConst25 = std::tan((8453.61328f / fConst0)); - fConst26 = (1.0f / fConst25); - fConst27 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst25)))); - float fConst28 = std::tan((6956.28955f / fConst0)); - fConst29 = (1.0f / fConst28); - fConst30 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst28)))); - float fConst31 = std::tan((4710.29688f / fConst0)); - fConst32 = (1.0f / fConst31); - fConst33 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst31)))); - float fConst34 = std::tan((3875.99854f / fConst0)); - fConst35 = (1.0f / fConst34); - fConst36 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst34)))); - float fConst37 = std::tan((3189.4729f / fConst0)); - fConst38 = (1.0f / fConst37); - fConst39 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst37)))); - float fConst40 = std::tan((2624.54639f / fConst0)); - fConst41 = (1.0f / fConst40); - fConst42 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst40)))); - float fConst43 = std::tan((2159.68066f / fConst0)); - fConst44 = (1.0f / fConst43); - fConst45 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst43)))); - float fConst46 = std::tan((1777.1532f / fConst0)); - fConst47 = (1.0f / fConst46); - fConst48 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst46)))); - float fConst49 = std::tan((1462.37976f / fConst0)); - fConst50 = (1.0f / fConst49); - fConst51 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst49)))); - float fConst52 = std::tan((171.296555f / fConst0)); - fConst53 = (1.0f / fConst52); - fConst54 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst52)))); - float fConst55 = std::tan((140.956116f / fConst0)); - fConst56 = (1.0f / fConst55); - fConst57 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst55)))); - float fConst58 = std::tan((115.989655f / fConst0)); - fConst59 = (1.0f / fConst58); - fConst60 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst58)))); - float fConst61 = std::tan((95.4453049f / fConst0)); - fConst62 = (1.0f / fConst61); - fConst63 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst61)))); - float fConst64 = std::tan((22406.0742f / fConst0)); - fConst65 = (1.0f / fConst64); - fConst66 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst64)))); - float fConst67 = std::tan((5724.17578f / fConst0)); - fConst68 = (1.0f / fConst67); - fConst69 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst67)))); - float fConst70 = std::tan((1203.35974f / fConst0)); - fConst71 = (1.0f / fConst70); - fConst72 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst70)))); - float fConst73 = std::tan((990.217957f / fConst0)); - fConst74 = (1.0f / fConst73); - fConst75 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst73)))); - float fConst76 = std::tan((814.828308f / fConst0)); - fConst77 = (1.0f / fConst76); - fConst78 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst76)))); - float fConst79 = std::tan((670.504089f / fConst0)); - fConst80 = (1.0f / fConst79); - fConst81 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst79)))); - float fConst82 = std::tan((551.742859f / fConst0)); - fConst83 = (1.0f / fConst82); - fConst84 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst82)))); - float fConst85 = std::tan((454.016937f / fConst0)); - fConst86 = (1.0f / fConst85); - fConst87 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst85)))); - float fConst88 = std::tan((373.600433f / fConst0)); - fConst89 = (1.0f / fConst88); - fConst90 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst88)))); - float fConst91 = std::tan((307.42749f / fConst0)); - fConst92 = (1.0f / fConst91); - fConst93 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst91)))); - float fConst94 = std::tan((252.975235f / fConst0)); - fConst95 = (1.0f / fConst94); - fConst96 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst94)))); - float fConst97 = std::tan((208.167679f / fConst0)); - fConst98 = (1.0f / fConst97); - fConst99 = (2.0f * (1.0f - (1.0f / fx_vocoder_faustpower2_f(fConst97)))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + float fConst1 = std::tan(33089.88f / fConst0); + fConst2 = 1.0f / fConst1; + fConst3 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst1)); + fConst4 = 0.0441f / fConst0; + fConst5 = 1.0f - 44.1f / fConst0; + fConst6 = 1.0f / fConst0; + float fConst7 = std::tan(27228.924f / fConst0); + fConst8 = 1.0f / fConst7; + fConst9 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst7)); + float fConst10 = std::tan(4710.297f / fConst0); + fConst11 = 1.0f / fConst10; + fConst12 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst10)); + float fConst13 = std::tan(1462.3798f / fConst0); + fConst14 = 1.0f / fConst13; + fConst15 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst13)); + float fConst16 = std::tan(1203.3597f / fConst0); + fConst17 = 1.0f / fConst16; + fConst18 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst16)); + float fConst19 = std::tan(990.21796f / fConst0); + fConst20 = 1.0f / fConst19; + fConst21 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst19)); + float fConst22 = std::tan(22406.074f / fConst0); + fConst23 = 1.0f / fConst22; + fConst24 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst22)); + float fConst25 = std::tan(18437.46f / fConst0); + fConst26 = 1.0f / fConst25; + fConst27 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst25)); + float fConst28 = std::tan(10273.23f / fConst0); + fConst29 = 1.0f / fConst28; + fConst30 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst28)); + float fConst31 = std::tan(6956.2896f / fConst0); + fConst32 = 1.0f / fConst31; + fConst33 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst31)); + float fConst34 = std::tan(5724.176f / fConst0); + fConst35 = 1.0f / fConst34; + fConst36 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst34)); + float fConst37 = std::tan(2624.5464f / fConst0); + fConst38 = 1.0f / fConst37; + fConst39 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst37)); + float fConst40 = std::tan(2159.6807f / fConst0); + fConst41 = 1.0f / fConst40; + fConst42 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst40)); + float fConst43 = std::tan(1777.1532f / fConst0); + fConst44 = 1.0f / fConst43; + fConst45 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst43)); + float fConst46 = std::tan(454.01694f / fConst0); + fConst47 = 1.0f / fConst46; + fConst48 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst46)); + float fConst49 = std::tan(208.16768f / fConst0); + fConst50 = 1.0f / fConst49; + fConst51 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst49)); + float fConst52 = std::tan(171.29655f / fConst0); + fConst53 = 1.0f / fConst52; + fConst54 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst52)); + float fConst55 = std::tan(140.95612f / fConst0); + fConst56 = 1.0f / fConst55; + fConst57 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst55)); + float fConst58 = std::tan(115.989655f / fConst0); + fConst59 = 1.0f / fConst58; + fConst60 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst58)); + float fConst61 = std::tan(95.445305f / fConst0); + fConst62 = 1.0f / fConst61; + fConst63 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst61)); + float fConst64 = std::tan(814.8283f / fConst0); + fConst65 = 1.0f / fConst64; + fConst66 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst64)); + float fConst67 = std::tan(670.5041f / fConst0); + fConst68 = 1.0f / fConst67; + fConst69 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst67)); + float fConst70 = std::tan(551.74286f / fConst0); + fConst71 = 1.0f / fConst70; + fConst72 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst70)); + float fConst73 = std::tan(373.60043f / fConst0); + fConst74 = 1.0f / fConst73; + fConst75 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst73)); + float fConst76 = std::tan(40212.387f / fConst0); + fConst77 = 1.0f / fConst76; + fConst78 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst76)); + float fConst79 = std::tan(12484.517f / fConst0); + fConst80 = 1.0f / fConst79; + fConst81 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst79)); + float fConst82 = std::tan(8453.613f / fConst0); + fConst83 = 1.0f / fConst82; + fConst84 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst82)); + float fConst85 = std::tan(3875.9985f / fConst0); + fConst86 = 1.0f / fConst85; + fConst87 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst85)); + float fConst88 = std::tan(3189.473f / fConst0); + fConst89 = 1.0f / fConst88; + fConst90 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst88)); + float fConst91 = std::tan(15171.775f / fConst0); + fConst92 = 1.0f / fConst91; + fConst93 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst91)); + float fConst94 = std::tan(307.4275f / fConst0); + fConst95 = 1.0f / fConst94; + fConst96 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst94)); + float fConst97 = std::tan(252.97523f / fConst0); + fConst98 = 1.0f / fConst97; + fConst99 = 2.0f * (1.0f - 1.0f / fx_vocoder_faustpower2_f(fConst97)); } virtual void instanceResetUserInterface() { @@ -932,395 +988,299 @@ class fx_vocoder : public fx_vocoder_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 3; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) { - fRec3[l1] = 0.0f; + for (int l1 = 0; l1 < 3; l1 = l1 + 1) { + fRec2[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { - fRec4[l2] = 0.0f; + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { + fRec3[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { - fRec5[l3] = 0.0f; + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { + fRec4[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { - fRec2[l4] = 0.0f; + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { + fRec1[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { - fRec1[l5] = 0.0f; + for (int l5 = 0; l5 < 3; l5 = l5 + 1) { + fRec5[l5] = 0.0f; } - for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) { - fRec6[l6] = 0.0f; + for (int l6 = 0; l6 < 3; l6 = l6 + 1) { + fRec7[l6] = 0.0f; } - for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) { - fRec9[l7] = 0.0f; + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { + fRec6[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 3; l8 = l8 + 1) { fRec8[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { - fRec7[l9] = 0.0f; + for (int l9 = 0; l9 < 3; l9 = l9 + 1) { + fRec10[l9] = 0.0f; } - for (int l10 = 0; (l10 < 3); l10 = (l10 + 1)) { - fRec10[l10] = 0.0f; + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { + fRec9[l10] = 0.0f; } - for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { - fRec13[l11] = 0.0f; + for (int l11 = 0; l11 < 3; l11 = l11 + 1) { + fRec11[l11] = 0.0f; } - for (int l12 = 0; (l12 < 2); l12 = (l12 + 1)) { - fRec12[l12] = 0.0f; + for (int l12 = 0; l12 < 3; l12 = l12 + 1) { + fRec13[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { - fRec11[l13] = 0.0f; + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { + fRec12[l13] = 0.0f; } - for (int l14 = 0; (l14 < 3); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 3; l14 = l14 + 1) { fRec14[l14] = 0.0f; } - for (int l15 = 0; (l15 < 3); l15 = (l15 + 1)) { - fRec17[l15] = 0.0f; + for (int l15 = 0; l15 < 3; l15 = l15 + 1) { + fRec16[l15] = 0.0f; } - for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) { - fRec16[l16] = 0.0f; + for (int l16 = 0; l16 < 2; l16 = l16 + 1) { + fRec15[l16] = 0.0f; } - for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) { - fRec15[l17] = 0.0f; + for (int l17 = 0; l17 < 3; l17 = l17 + 1) { + fRec17[l17] = 0.0f; } - for (int l18 = 0; (l18 < 3); l18 = (l18 + 1)) { - fRec18[l18] = 0.0f; + for (int l18 = 0; l18 < 3; l18 = l18 + 1) { + fRec19[l18] = 0.0f; } - for (int l19 = 0; (l19 < 3); l19 = (l19 + 1)) { - fRec21[l19] = 0.0f; + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fRec18[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { + for (int l20 = 0; l20 < 3; l20 = l20 + 1) { fRec20[l20] = 0.0f; } - for (int l21 = 0; (l21 < 2); l21 = (l21 + 1)) { - fRec19[l21] = 0.0f; + for (int l21 = 0; l21 < 3; l21 = l21 + 1) { + fRec22[l21] = 0.0f; } - for (int l22 = 0; (l22 < 3); l22 = (l22 + 1)) { - fRec22[l22] = 0.0f; + for (int l22 = 0; l22 < 2; l22 = l22 + 1) { + fRec21[l22] = 0.0f; } - for (int l23 = 0; (l23 < 3); l23 = (l23 + 1)) { - fRec25[l23] = 0.0f; + for (int l23 = 0; l23 < 3; l23 = l23 + 1) { + fRec23[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { - fRec24[l24] = 0.0f; + for (int l24 = 0; l24 < 3; l24 = l24 + 1) { + fRec25[l24] = 0.0f; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { - fRec23[l25] = 0.0f; + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { + fRec24[l25] = 0.0f; } - for (int l26 = 0; (l26 < 3); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 3; l26 = l26 + 1) { fRec26[l26] = 0.0f; } - for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) { - fRec29[l27] = 0.0f; + for (int l27 = 0; l27 < 3; l27 = l27 + 1) { + fRec28[l27] = 0.0f; } - for (int l28 = 0; (l28 < 2); l28 = (l28 + 1)) { - fRec28[l28] = 0.0f; + for (int l28 = 0; l28 < 2; l28 = l28 + 1) { + fRec27[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { - fRec27[l29] = 0.0f; + for (int l29 = 0; l29 < 3; l29 = l29 + 1) { + fRec29[l29] = 0.0f; } - for (int l30 = 0; (l30 < 3); l30 = (l30 + 1)) { - fRec30[l30] = 0.0f; + for (int l30 = 0; l30 < 3; l30 = l30 + 1) { + fRec31[l30] = 0.0f; } - for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) { - fRec33[l31] = 0.0f; + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { + fRec30[l31] = 0.0f; } - for (int l32 = 0; (l32 < 2); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 3; l32 = l32 + 1) { fRec32[l32] = 0.0f; } - for (int l33 = 0; (l33 < 2); l33 = (l33 + 1)) { - fRec31[l33] = 0.0f; + for (int l33 = 0; l33 < 3; l33 = l33 + 1) { + fRec34[l33] = 0.0f; } - for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) { - fRec34[l34] = 0.0f; + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { + fRec33[l34] = 0.0f; } - for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) { - fRec37[l35] = 0.0f; + for (int l35 = 0; l35 < 3; l35 = l35 + 1) { + fRec35[l35] = 0.0f; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { - fRec36[l36] = 0.0f; + for (int l36 = 0; l36 < 3; l36 = l36 + 1) { + fRec37[l36] = 0.0f; } - for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) { - fRec35[l37] = 0.0f; + for (int l37 = 0; l37 < 2; l37 = l37 + 1) { + fRec36[l37] = 0.0f; } - for (int l38 = 0; (l38 < 3); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 3; l38 = l38 + 1) { fRec38[l38] = 0.0f; } - for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) { - fRec41[l39] = 0.0f; + for (int l39 = 0; l39 < 3; l39 = l39 + 1) { + fRec40[l39] = 0.0f; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { - fRec40[l40] = 0.0f; + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { + fRec39[l40] = 0.0f; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { - fRec39[l41] = 0.0f; + for (int l41 = 0; l41 < 3; l41 = l41 + 1) { + fRec41[l41] = 0.0f; } - for (int l42 = 0; (l42 < 3); l42 = (l42 + 1)) { - fRec42[l42] = 0.0f; + for (int l42 = 0; l42 < 3; l42 = l42 + 1) { + fRec43[l42] = 0.0f; } - for (int l43 = 0; (l43 < 3); l43 = (l43 + 1)) { - fRec45[l43] = 0.0f; + for (int l43 = 0; l43 < 2; l43 = l43 + 1) { + fRec42[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 3; l44 = l44 + 1) { fRec44[l44] = 0.0f; } - for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) { - fRec43[l45] = 0.0f; + for (int l45 = 0; l45 < 3; l45 = l45 + 1) { + fRec46[l45] = 0.0f; } - for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { - fRec46[l46] = 0.0f; + for (int l46 = 0; l46 < 2; l46 = l46 + 1) { + fRec45[l46] = 0.0f; } - for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { - fRec49[l47] = 0.0f; + for (int l47 = 0; l47 < 3; l47 = l47 + 1) { + fRec47[l47] = 0.0f; } - for (int l48 = 0; (l48 < 2); l48 = (l48 + 1)) { - fRec48[l48] = 0.0f; + for (int l48 = 0; l48 < 3; l48 = l48 + 1) { + fRec49[l48] = 0.0f; } - for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) { - fRec47[l49] = 0.0f; + for (int l49 = 0; l49 < 2; l49 = l49 + 1) { + fRec48[l49] = 0.0f; } - for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 3; l50 = l50 + 1) { fRec50[l50] = 0.0f; } - for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { - fRec53[l51] = 0.0f; + for (int l51 = 0; l51 < 3; l51 = l51 + 1) { + fRec52[l51] = 0.0f; } - for (int l52 = 0; (l52 < 2); l52 = (l52 + 1)) { - fRec52[l52] = 0.0f; + for (int l52 = 0; l52 < 2; l52 = l52 + 1) { + fRec51[l52] = 0.0f; } - for (int l53 = 0; (l53 < 2); l53 = (l53 + 1)) { - fRec51[l53] = 0.0f; + for (int l53 = 0; l53 < 3; l53 = l53 + 1) { + fRec53[l53] = 0.0f; } - for (int l54 = 0; (l54 < 3); l54 = (l54 + 1)) { - fRec54[l54] = 0.0f; + for (int l54 = 0; l54 < 3; l54 = l54 + 1) { + fRec55[l54] = 0.0f; } - for (int l55 = 0; (l55 < 3); l55 = (l55 + 1)) { - fRec57[l55] = 0.0f; + for (int l55 = 0; l55 < 2; l55 = l55 + 1) { + fRec54[l55] = 0.0f; } - for (int l56 = 0; (l56 < 2); l56 = (l56 + 1)) { + for (int l56 = 0; l56 < 3; l56 = l56 + 1) { fRec56[l56] = 0.0f; } - for (int l57 = 0; (l57 < 2); l57 = (l57 + 1)) { - fRec55[l57] = 0.0f; + for (int l57 = 0; l57 < 3; l57 = l57 + 1) { + fRec58[l57] = 0.0f; } - for (int l58 = 0; (l58 < 3); l58 = (l58 + 1)) { - fRec58[l58] = 0.0f; + for (int l58 = 0; l58 < 2; l58 = l58 + 1) { + fRec57[l58] = 0.0f; } - for (int l59 = 0; (l59 < 3); l59 = (l59 + 1)) { - fRec61[l59] = 0.0f; + for (int l59 = 0; l59 < 3; l59 = l59 + 1) { + fRec59[l59] = 0.0f; } - for (int l60 = 0; (l60 < 2); l60 = (l60 + 1)) { - fRec60[l60] = 0.0f; + for (int l60 = 0; l60 < 3; l60 = l60 + 1) { + fRec61[l60] = 0.0f; } - for (int l61 = 0; (l61 < 2); l61 = (l61 + 1)) { - fRec59[l61] = 0.0f; + for (int l61 = 0; l61 < 2; l61 = l61 + 1) { + fRec60[l61] = 0.0f; } - for (int l62 = 0; (l62 < 3); l62 = (l62 + 1)) { + for (int l62 = 0; l62 < 3; l62 = l62 + 1) { fRec62[l62] = 0.0f; } - for (int l63 = 0; (l63 < 3); l63 = (l63 + 1)) { - fRec65[l63] = 0.0f; + for (int l63 = 0; l63 < 3; l63 = l63 + 1) { + fRec64[l63] = 0.0f; } - for (int l64 = 0; (l64 < 2); l64 = (l64 + 1)) { - fRec64[l64] = 0.0f; + for (int l64 = 0; l64 < 2; l64 = l64 + 1) { + fRec63[l64] = 0.0f; } - for (int l65 = 0; (l65 < 2); l65 = (l65 + 1)) { - fRec63[l65] = 0.0f; + for (int l65 = 0; l65 < 3; l65 = l65 + 1) { + fRec65[l65] = 0.0f; } - for (int l66 = 0; (l66 < 3); l66 = (l66 + 1)) { - fRec66[l66] = 0.0f; + for (int l66 = 0; l66 < 3; l66 = l66 + 1) { + fRec67[l66] = 0.0f; } - for (int l67 = 0; (l67 < 3); l67 = (l67 + 1)) { - fRec69[l67] = 0.0f; + for (int l67 = 0; l67 < 2; l67 = l67 + 1) { + fRec66[l67] = 0.0f; } - for (int l68 = 0; (l68 < 2); l68 = (l68 + 1)) { + for (int l68 = 0; l68 < 3; l68 = l68 + 1) { fRec68[l68] = 0.0f; } - for (int l69 = 0; (l69 < 2); l69 = (l69 + 1)) { - fRec67[l69] = 0.0f; + for (int l69 = 0; l69 < 3; l69 = l69 + 1) { + fRec70[l69] = 0.0f; } - for (int l70 = 0; (l70 < 3); l70 = (l70 + 1)) { - fRec70[l70] = 0.0f; + for (int l70 = 0; l70 < 2; l70 = l70 + 1) { + fRec69[l70] = 0.0f; } - for (int l71 = 0; (l71 < 3); l71 = (l71 + 1)) { - fRec73[l71] = 0.0f; + for (int l71 = 0; l71 < 3; l71 = l71 + 1) { + fRec71[l71] = 0.0f; } - for (int l72 = 0; (l72 < 2); l72 = (l72 + 1)) { - fRec72[l72] = 0.0f; + for (int l72 = 0; l72 < 3; l72 = l72 + 1) { + fRec73[l72] = 0.0f; } - for (int l73 = 0; (l73 < 2); l73 = (l73 + 1)) { - fRec71[l73] = 0.0f; + for (int l73 = 0; l73 < 2; l73 = l73 + 1) { + fRec72[l73] = 0.0f; } - for (int l74 = 0; (l74 < 3); l74 = (l74 + 1)) { + for (int l74 = 0; l74 < 3; l74 = l74 + 1) { fRec74[l74] = 0.0f; } - for (int l75 = 0; (l75 < 3); l75 = (l75 + 1)) { - fRec77[l75] = 0.0f; + for (int l75 = 0; l75 < 3; l75 = l75 + 1) { + fRec76[l75] = 0.0f; } - for (int l76 = 0; (l76 < 2); l76 = (l76 + 1)) { - fRec76[l76] = 0.0f; + for (int l76 = 0; l76 < 2; l76 = l76 + 1) { + fRec75[l76] = 0.0f; } - for (int l77 = 0; (l77 < 2); l77 = (l77 + 1)) { - fRec75[l77] = 0.0f; + for (int l77 = 0; l77 < 3; l77 = l77 + 1) { + fRec77[l77] = 0.0f; } - for (int l78 = 0; (l78 < 3); l78 = (l78 + 1)) { - fRec78[l78] = 0.0f; + for (int l78 = 0; l78 < 3; l78 = l78 + 1) { + fRec79[l78] = 0.0f; } - for (int l79 = 0; (l79 < 3); l79 = (l79 + 1)) { - fRec81[l79] = 0.0f; + for (int l79 = 0; l79 < 2; l79 = l79 + 1) { + fRec78[l79] = 0.0f; } - for (int l80 = 0; (l80 < 2); l80 = (l80 + 1)) { + for (int l80 = 0; l80 < 3; l80 = l80 + 1) { fRec80[l80] = 0.0f; } - for (int l81 = 0; (l81 < 2); l81 = (l81 + 1)) { - fRec79[l81] = 0.0f; + for (int l81 = 0; l81 < 3; l81 = l81 + 1) { + fRec82[l81] = 0.0f; } - for (int l82 = 0; (l82 < 3); l82 = (l82 + 1)) { - fRec82[l82] = 0.0f; + for (int l82 = 0; l82 < 2; l82 = l82 + 1) { + fRec81[l82] = 0.0f; } - for (int l83 = 0; (l83 < 3); l83 = (l83 + 1)) { - fRec85[l83] = 0.0f; + for (int l83 = 0; l83 < 3; l83 = l83 + 1) { + fRec83[l83] = 0.0f; } - for (int l84 = 0; (l84 < 2); l84 = (l84 + 1)) { - fRec84[l84] = 0.0f; + for (int l84 = 0; l84 < 3; l84 = l84 + 1) { + fRec85[l84] = 0.0f; } - for (int l85 = 0; (l85 < 2); l85 = (l85 + 1)) { - fRec83[l85] = 0.0f; + for (int l85 = 0; l85 < 2; l85 = l85 + 1) { + fRec84[l85] = 0.0f; } - for (int l86 = 0; (l86 < 3); l86 = (l86 + 1)) { + for (int l86 = 0; l86 < 3; l86 = l86 + 1) { fRec86[l86] = 0.0f; } - for (int l87 = 0; (l87 < 3); l87 = (l87 + 1)) { - fRec89[l87] = 0.0f; + for (int l87 = 0; l87 < 3; l87 = l87 + 1) { + fRec88[l87] = 0.0f; } - for (int l88 = 0; (l88 < 2); l88 = (l88 + 1)) { - fRec88[l88] = 0.0f; + for (int l88 = 0; l88 < 2; l88 = l88 + 1) { + fRec87[l88] = 0.0f; } - for (int l89 = 0; (l89 < 2); l89 = (l89 + 1)) { - fRec87[l89] = 0.0f; + for (int l89 = 0; l89 < 3; l89 = l89 + 1) { + fRec89[l89] = 0.0f; } - for (int l90 = 0; (l90 < 3); l90 = (l90 + 1)) { - fRec90[l90] = 0.0f; + for (int l90 = 0; l90 < 3; l90 = l90 + 1) { + fRec91[l90] = 0.0f; } - for (int l91 = 0; (l91 < 3); l91 = (l91 + 1)) { - fRec93[l91] = 0.0f; + for (int l91 = 0; l91 < 2; l91 = l91 + 1) { + fRec90[l91] = 0.0f; } - for (int l92 = 0; (l92 < 2); l92 = (l92 + 1)) { + for (int l92 = 0; l92 < 3; l92 = l92 + 1) { fRec92[l92] = 0.0f; } - for (int l93 = 0; (l93 < 2); l93 = (l93 + 1)) { - fRec91[l93] = 0.0f; - } - for (int l94 = 0; (l94 < 3); l94 = (l94 + 1)) { - fRec94[l94] = 0.0f; - } - for (int l95 = 0; (l95 < 3); l95 = (l95 + 1)) { - fRec97[l95] = 0.0f; - } - for (int l96 = 0; (l96 < 2); l96 = (l96 + 1)) { - fRec96[l96] = 0.0f; - } - for (int l97 = 0; (l97 < 2); l97 = (l97 + 1)) { - fRec95[l97] = 0.0f; - } - for (int l98 = 0; (l98 < 3); l98 = (l98 + 1)) { - fRec98[l98] = 0.0f; - } - for (int l99 = 0; (l99 < 3); l99 = (l99 + 1)) { - fRec101[l99] = 0.0f; - } - for (int l100 = 0; (l100 < 2); l100 = (l100 + 1)) { - fRec100[l100] = 0.0f; - } - for (int l101 = 0; (l101 < 2); l101 = (l101 + 1)) { - fRec99[l101] = 0.0f; - } - for (int l102 = 0; (l102 < 3); l102 = (l102 + 1)) { - fRec102[l102] = 0.0f; - } - for (int l103 = 0; (l103 < 3); l103 = (l103 + 1)) { - fRec105[l103] = 0.0f; - } - for (int l104 = 0; (l104 < 2); l104 = (l104 + 1)) { - fRec104[l104] = 0.0f; - } - for (int l105 = 0; (l105 < 2); l105 = (l105 + 1)) { - fRec103[l105] = 0.0f; - } - for (int l106 = 0; (l106 < 3); l106 = (l106 + 1)) { - fRec106[l106] = 0.0f; - } - for (int l107 = 0; (l107 < 3); l107 = (l107 + 1)) { - fRec109[l107] = 0.0f; - } - for (int l108 = 0; (l108 < 2); l108 = (l108 + 1)) { - fRec108[l108] = 0.0f; + for (int l93 = 0; l93 < 3; l93 = l93 + 1) { + fRec94[l93] = 0.0f; } - for (int l109 = 0; (l109 < 2); l109 = (l109 + 1)) { - fRec107[l109] = 0.0f; + for (int l94 = 0; l94 < 2; l94 = l94 + 1) { + fRec93[l94] = 0.0f; } - for (int l110 = 0; (l110 < 3); l110 = (l110 + 1)) { - fRec110[l110] = 0.0f; + for (int l95 = 0; l95 < 3; l95 = l95 + 1) { + fRec95[l95] = 0.0f; } - for (int l111 = 0; (l111 < 3); l111 = (l111 + 1)) { - fRec113[l111] = 0.0f; + for (int l96 = 0; l96 < 3; l96 = l96 + 1) { + fRec97[l96] = 0.0f; } - for (int l112 = 0; (l112 < 2); l112 = (l112 + 1)) { - fRec112[l112] = 0.0f; - } - for (int l113 = 0; (l113 < 2); l113 = (l113 + 1)) { - fRec111[l113] = 0.0f; - } - for (int l114 = 0; (l114 < 3); l114 = (l114 + 1)) { - fRec114[l114] = 0.0f; - } - for (int l115 = 0; (l115 < 3); l115 = (l115 + 1)) { - fRec117[l115] = 0.0f; - } - for (int l116 = 0; (l116 < 2); l116 = (l116 + 1)) { - fRec116[l116] = 0.0f; - } - for (int l117 = 0; (l117 < 2); l117 = (l117 + 1)) { - fRec115[l117] = 0.0f; - } - for (int l118 = 0; (l118 < 3); l118 = (l118 + 1)) { - fRec118[l118] = 0.0f; - } - for (int l119 = 0; (l119 < 3); l119 = (l119 + 1)) { - fRec121[l119] = 0.0f; - } - for (int l120 = 0; (l120 < 2); l120 = (l120 + 1)) { - fRec120[l120] = 0.0f; - } - for (int l121 = 0; (l121 < 2); l121 = (l121 + 1)) { - fRec119[l121] = 0.0f; - } - for (int l122 = 0; (l122 < 3); l122 = (l122 + 1)) { - fRec122[l122] = 0.0f; - } - for (int l123 = 0; (l123 < 3); l123 = (l123 + 1)) { - fRec125[l123] = 0.0f; - } - for (int l124 = 0; (l124 < 2); l124 = (l124 + 1)) { - fRec124[l124] = 0.0f; - } - for (int l125 = 0; (l125 < 2); l125 = (l125 + 1)) { - fRec123[l125] = 0.0f; - } - for (int l126 = 0; (l126 < 3); l126 = (l126 + 1)) { - fRec126[l126] = 0.0f; - } - for (int l127 = 0; (l127 < 3); l127 = (l127 + 1)) { - fRec129[l127] = 0.0f; - } - for (int l128 = 0; (l128 < 2); l128 = (l128 + 1)) { - fRec128[l128] = 0.0f; - } - for (int l129 = 0; (l129 < 2); l129 = (l129 + 1)) { - fRec127[l129] = 0.0f; + for (int l97 = 0; l97 < 2; l97 = l97 + 1) { + fRec96[l97] = 0.0f; } } @@ -1344,592 +1304,526 @@ class fx_vocoder : public fx_vocoder_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.vocoder"); - ui_interface->declare(&fHslider1, "unit", "ms"); - ui_interface->addHorizontalSlider("attack", &fHslider1, FAUSTFLOAT(5.0f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.00999999978f)); - ui_interface->addHorizontalSlider("bwratio", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.00999999978f)); ui_interface->declare(&fHslider2, "unit", "ms"); - ui_interface->addHorizontalSlider("release", &fHslider2, FAUSTFLOAT(5.0f), FAUSTFLOAT(0.100000001f), FAUSTFLOAT(100.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("attack", &fHslider2, FAUSTFLOAT(5.0f), FAUSTFLOAT(0.1f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.01f)); + ui_interface->addHorizontalSlider("bwratio", &fHslider0, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.1f), FAUSTFLOAT(2.0f), FAUSTFLOAT(0.01f)); + ui_interface->declare(&fHslider1, "unit", "ms"); + ui_interface->addHorizontalSlider("release", &fHslider1, FAUSTFLOAT(5.0f), FAUSTFLOAT(0.1f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.01f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (0.177122265f * fSlow0); - float fSlow2 = ((fConst2 * (fConst2 + fSlow1)) + 1.0f); - float fSlow3 = (1.0f / fSlow2); - float fSlow4 = ((fConst2 * (fConst2 - fSlow1)) + 1.0f); - float fSlow5 = (fConst2 / fSlow2); - float fSlow6 = (0.0f - fSlow5); - float fSlow7 = (fConst4 * float(fHslider1)); - float fSlow8 = (fConst4 * float(fHslider2)); - float fSlow9 = (0.177122265f * fSlow0); - float fSlow10 = ((fConst8 * (fConst8 + fSlow9)) + 1.0f); - float fSlow11 = (1.0f / fSlow10); - float fSlow12 = ((fConst8 * (fConst8 - fSlow9)) + 1.0f); - float fSlow13 = (fConst8 / fSlow10); - float fSlow14 = (0.0f - fSlow13); - float fSlow15 = (0.177122265f * fSlow0); - float fSlow16 = ((fConst11 * (fConst11 + fSlow15)) + 1.0f); - float fSlow17 = (1.0f / fSlow16); - float fSlow18 = ((fConst11 * (fConst11 - fSlow15)) + 1.0f); - float fSlow19 = (fConst11 / fSlow16); - float fSlow20 = (0.0f - fSlow19); - float fSlow21 = (0.177122265f * fSlow0); - float fSlow22 = ((fConst14 * (fConst14 + fSlow21)) + 1.0f); - float fSlow23 = (1.0f / fSlow22); - float fSlow24 = ((fConst14 * (fConst14 - fSlow21)) + 1.0f); - float fSlow25 = (fConst14 / fSlow22); - float fSlow26 = (0.0f - fSlow25); - float fSlow27 = (0.177122265f * fSlow0); - float fSlow28 = ((fConst17 * (fConst17 + fSlow27)) + 1.0f); - float fSlow29 = (1.0f / fSlow28); - float fSlow30 = ((fConst17 * (fConst17 - fSlow27)) + 1.0f); - float fSlow31 = (fConst17 / fSlow28); - float fSlow32 = (0.0f - fSlow31); - float fSlow33 = (0.177122265f * fSlow0); - float fSlow34 = ((fConst20 * (fConst20 + fSlow33)) + 1.0f); - float fSlow35 = (1.0f / fSlow34); - float fSlow36 = ((fConst20 * (fConst20 - fSlow33)) + 1.0f); - float fSlow37 = (fConst20 / fSlow34); - float fSlow38 = (0.0f - fSlow37); - float fSlow39 = (0.177122265f * fSlow0); - float fSlow40 = ((fConst23 * (fConst23 + fSlow39)) + 1.0f); - float fSlow41 = (1.0f / fSlow40); - float fSlow42 = ((fConst23 * (fConst23 - fSlow39)) + 1.0f); - float fSlow43 = (fConst23 / fSlow40); - float fSlow44 = (0.0f - fSlow43); - float fSlow45 = ((fConst26 * (fConst26 + fSlow1)) + 1.0f); - float fSlow46 = (1.0f / fSlow45); - float fSlow47 = ((fConst26 * (fConst26 - fSlow1)) + 1.0f); - float fSlow48 = (fConst26 / fSlow45); - float fSlow49 = (0.0f - fSlow48); - float fSlow50 = (0.177122265f * fSlow0); - float fSlow51 = ((fConst29 * (fConst29 + fSlow50)) + 1.0f); - float fSlow52 = (1.0f / fSlow51); - float fSlow53 = ((fConst29 * (fConst29 - fSlow50)) + 1.0f); - float fSlow54 = (fConst29 / fSlow51); - float fSlow55 = (0.0f - fSlow54); - float fSlow56 = ((fConst32 * (fConst32 + fSlow50)) + 1.0f); - float fSlow57 = (1.0f / fSlow56); - float fSlow58 = ((fConst32 * (fConst32 - fSlow50)) + 1.0f); - float fSlow59 = (fConst32 / fSlow56); - float fSlow60 = (0.0f - fSlow59); - float fSlow61 = ((fConst35 * (fConst35 + fSlow15)) + 1.0f); - float fSlow62 = (1.0f / fSlow61); - float fSlow63 = ((fConst35 * (fConst35 - fSlow15)) + 1.0f); - float fSlow64 = (fConst35 / fSlow61); - float fSlow65 = (0.0f - fSlow64); - float fSlow66 = (0.177122265f * fSlow0); - float fSlow67 = ((fConst38 * (fConst38 + fSlow66)) + 1.0f); - float fSlow68 = (1.0f / fSlow67); - float fSlow69 = ((fConst38 * (fConst38 - fSlow66)) + 1.0f); - float fSlow70 = (fConst38 / fSlow67); - float fSlow71 = (0.0f - fSlow70); - float fSlow72 = (0.177122265f * fSlow0); - float fSlow73 = ((fConst41 * (fConst41 + fSlow72)) + 1.0f); - float fSlow74 = (1.0f / fSlow73); - float fSlow75 = ((fConst41 * (fConst41 - fSlow72)) + 1.0f); - float fSlow76 = (fConst41 / fSlow73); - float fSlow77 = (0.0f - fSlow76); - float fSlow78 = (0.177122265f * fSlow0); - float fSlow79 = ((fConst44 * (fConst44 + fSlow78)) + 1.0f); - float fSlow80 = (1.0f / fSlow79); - float fSlow81 = ((fConst44 * (fConst44 - fSlow78)) + 1.0f); - float fSlow82 = (fConst44 / fSlow79); - float fSlow83 = (0.0f - fSlow82); - float fSlow84 = ((fConst47 * (fConst47 + fSlow39)) + 1.0f); - float fSlow85 = (1.0f / fSlow84); - float fSlow86 = ((fConst47 * (fConst47 - fSlow39)) + 1.0f); - float fSlow87 = (fConst47 / fSlow84); - float fSlow88 = (0.0f - fSlow87); - float fSlow89 = ((fConst50 * (fConst50 + fSlow39)) + 1.0f); - float fSlow90 = (1.0f / fSlow89); - float fSlow91 = ((fConst50 * (fConst50 - fSlow39)) + 1.0f); - float fSlow92 = (fConst50 / fSlow89); - float fSlow93 = (0.0f - fSlow92); - float fSlow94 = ((fConst53 * (fConst53 + fSlow39)) + 1.0f); - float fSlow95 = (1.0f / fSlow94); - float fSlow96 = ((fConst53 * (fConst53 - fSlow39)) + 1.0f); - float fSlow97 = (fConst53 / fSlow94); - float fSlow98 = (0.0f - fSlow97); - float fSlow99 = ((fConst56 * (fConst56 + fSlow33)) + 1.0f); - float fSlow100 = (1.0f / fSlow99); - float fSlow101 = ((fConst56 * (fConst56 - fSlow33)) + 1.0f); - float fSlow102 = (fConst56 / fSlow99); - float fSlow103 = (0.0f - fSlow102); - float fSlow104 = ((fConst59 * (fConst59 + fSlow78)) + 1.0f); - float fSlow105 = (1.0f / fSlow104); - float fSlow106 = ((fConst59 * (fConst59 - fSlow78)) + 1.0f); - float fSlow107 = (fConst59 / fSlow104); - float fSlow108 = (0.0f - fSlow107); - float fSlow109 = ((fConst62 * (fConst62 + fSlow33)) + 1.0f); - float fSlow110 = (1.0f / fSlow109); - float fSlow111 = ((fConst62 * (fConst62 - fSlow33)) + 1.0f); - float fSlow112 = (fConst62 / fSlow109); - float fSlow113 = (0.0f - fSlow112); - float fSlow114 = ((fConst65 * (fConst65 + fSlow33)) + 1.0f); - float fSlow115 = (1.0f / fSlow114); - float fSlow116 = ((fConst65 * (fConst65 - fSlow33)) + 1.0f); - float fSlow117 = (fConst65 / fSlow114); - float fSlow118 = (0.0f - fSlow117); - float fSlow119 = ((fConst68 * (fConst68 + fSlow15)) + 1.0f); - float fSlow120 = (1.0f / fSlow119); - float fSlow121 = ((fConst68 * (fConst68 - fSlow15)) + 1.0f); - float fSlow122 = (fConst68 / fSlow119); - float fSlow123 = (0.0f - fSlow122); - float fSlow124 = ((fConst71 * (fConst71 + fSlow15)) + 1.0f); - float fSlow125 = (1.0f / fSlow124); - float fSlow126 = ((fConst71 * (fConst71 - fSlow15)) + 1.0f); - float fSlow127 = (fConst71 / fSlow124); - float fSlow128 = (0.0f - fSlow127); - float fSlow129 = ((fConst74 * (fConst74 + fSlow27)) + 1.0f); - float fSlow130 = (1.0f / fSlow129); - float fSlow131 = ((fConst74 * (fConst74 - fSlow27)) + 1.0f); - float fSlow132 = (fConst74 / fSlow129); - float fSlow133 = (0.0f - fSlow132); - float fSlow134 = (0.177122265f * fSlow0); - float fSlow135 = ((fConst77 * (fConst77 + fSlow134)) + 1.0f); - float fSlow136 = (1.0f / fSlow135); - float fSlow137 = ((fConst77 * (fConst77 - fSlow134)) + 1.0f); - float fSlow138 = (fConst77 / fSlow135); - float fSlow139 = (0.0f - fSlow138); - float fSlow140 = ((fConst80 * (fConst80 + fSlow27)) + 1.0f); - float fSlow141 = (1.0f / fSlow140); - float fSlow142 = ((fConst80 * (fConst80 - fSlow27)) + 1.0f); - float fSlow143 = (fConst80 / fSlow140); - float fSlow144 = (0.0f - fSlow143); - float fSlow145 = ((fConst83 * (fConst83 + fSlow78)) + 1.0f); - float fSlow146 = (1.0f / fSlow145); - float fSlow147 = ((fConst83 * (fConst83 - fSlow78)) + 1.0f); - float fSlow148 = (fConst83 / fSlow145); - float fSlow149 = (0.0f - fSlow148); - float fSlow150 = ((fConst86 * (fConst86 + fSlow66)) + 1.0f); - float fSlow151 = (1.0f / fSlow150); - float fSlow152 = ((fConst86 * (fConst86 - fSlow66)) + 1.0f); - float fSlow153 = (fConst86 / fSlow150); - float fSlow154 = (0.0f - fSlow153); - float fSlow155 = ((fConst89 * (fConst89 + fSlow33)) + 1.0f); - float fSlow156 = (1.0f / fSlow155); - float fSlow157 = ((fConst89 * (fConst89 - fSlow33)) + 1.0f); - float fSlow158 = (fConst89 / fSlow155); - float fSlow159 = (0.0f - fSlow158); - float fSlow160 = ((fConst92 * (fConst92 + fSlow50)) + 1.0f); - float fSlow161 = (1.0f / fSlow160); - float fSlow162 = ((fConst92 * (fConst92 - fSlow50)) + 1.0f); - float fSlow163 = (fConst92 / fSlow160); - float fSlow164 = (0.0f - fSlow163); - float fSlow165 = (0.177122265f * fSlow0); - float fSlow166 = ((fConst95 * (fConst95 + fSlow165)) + 1.0f); - float fSlow167 = (1.0f / fSlow166); - float fSlow168 = ((fConst95 * (fConst95 - fSlow165)) + 1.0f); - float fSlow169 = (fConst95 / fSlow166); - float fSlow170 = (0.0f - fSlow169); - float fSlow171 = ((fConst98 * (fConst98 + fSlow66)) + 1.0f); - float fSlow172 = (fConst98 / fSlow171); - float fSlow173 = (1.0f / fSlow171); - float fSlow174 = ((fConst98 * (fConst98 - fSlow66)) + 1.0f); - float fSlow175 = (0.0f - fSlow172); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = 0.17712227f * fSlow0; + float fSlow2 = fConst2 * (fConst2 + fSlow1) + 1.0f; + float fSlow3 = 1.0f / fSlow2; + float fSlow4 = fConst2 * (fConst2 - fSlow1) + 1.0f; + float fSlow5 = fConst2 / fSlow2; + float fSlow6 = 0.0f - fSlow5; + float fSlow7 = fConst4 * float(fHslider1); + float fSlow8 = fConst4 * float(fHslider2); + float fSlow9 = 0.17712227f * fSlow0; + float fSlow10 = fConst8 * (fConst8 + fSlow9) + 1.0f; + float fSlow11 = 1.0f / fSlow10; + float fSlow12 = fConst8 * (fConst8 - fSlow9) + 1.0f; + float fSlow13 = fConst8 / fSlow10; + float fSlow14 = 0.0f - fSlow13; + float fSlow15 = 0.17712227f * fSlow0; + float fSlow16 = fConst11 * (fConst11 + fSlow15) + 1.0f; + float fSlow17 = 1.0f / fSlow16; + float fSlow18 = fConst11 * (fConst11 - fSlow15) + 1.0f; + float fSlow19 = fConst11 / fSlow16; + float fSlow20 = 0.0f - fSlow19; + float fSlow21 = 0.17712227f * fSlow0; + float fSlow22 = fConst14 * (fConst14 + fSlow21) + 1.0f; + float fSlow23 = 1.0f / fSlow22; + float fSlow24 = fConst14 * (fConst14 - fSlow21) + 1.0f; + float fSlow25 = fConst14 / fSlow22; + float fSlow26 = 0.0f - fSlow25; + float fSlow27 = fConst17 * (fConst17 + fSlow9) + 1.0f; + float fSlow28 = 1.0f / fSlow27; + float fSlow29 = fConst17 * (fConst17 - fSlow9) + 1.0f; + float fSlow30 = fConst17 / fSlow27; + float fSlow31 = 0.0f - fSlow30; + float fSlow32 = 0.17712227f * fSlow0; + float fSlow33 = fConst20 * (fConst20 + fSlow32) + 1.0f; + float fSlow34 = 1.0f / fSlow33; + float fSlow35 = fConst20 * (fConst20 - fSlow32) + 1.0f; + float fSlow36 = fConst20 / fSlow33; + float fSlow37 = 0.0f - fSlow36; + float fSlow38 = 0.17712227f * fSlow0; + float fSlow39 = fConst23 * (fConst23 + fSlow38) + 1.0f; + float fSlow40 = 1.0f / fSlow39; + float fSlow41 = fConst23 * (fConst23 - fSlow38) + 1.0f; + float fSlow42 = fConst23 / fSlow39; + float fSlow43 = 0.0f - fSlow42; + float fSlow44 = 0.17712227f * fSlow0; + float fSlow45 = fConst26 * (fConst26 + fSlow44) + 1.0f; + float fSlow46 = 1.0f / fSlow45; + float fSlow47 = fConst26 * (fConst26 - fSlow44) + 1.0f; + float fSlow48 = fConst26 / fSlow45; + float fSlow49 = 0.0f - fSlow48; + float fSlow50 = fConst29 * (fConst29 + fSlow21) + 1.0f; + float fSlow51 = fConst29 / fSlow50; + float fSlow52 = 1.0f / fSlow50; + float fSlow53 = fConst29 * (fConst29 - fSlow21) + 1.0f; + float fSlow54 = 0.0f - fSlow51; + float fSlow55 = fConst32 * (fConst32 + fSlow15) + 1.0f; + float fSlow56 = 1.0f / fSlow55; + float fSlow57 = fConst32 * (fConst32 - fSlow15) + 1.0f; + float fSlow58 = fConst32 / fSlow55; + float fSlow59 = 0.0f - fSlow58; + float fSlow60 = fConst35 * (fConst35 + fSlow9) + 1.0f; + float fSlow61 = 1.0f / fSlow60; + float fSlow62 = fConst35 * (fConst35 - fSlow9) + 1.0f; + float fSlow63 = fConst35 / fSlow60; + float fSlow64 = 0.0f - fSlow63; + float fSlow65 = 0.17712227f * fSlow0; + float fSlow66 = fConst38 * (fConst38 + fSlow65) + 1.0f; + float fSlow67 = 1.0f / fSlow66; + float fSlow68 = fConst38 * (fConst38 - fSlow65) + 1.0f; + float fSlow69 = fConst38 / fSlow66; + float fSlow70 = 0.0f - fSlow69; + float fSlow71 = 0.17712227f * fSlow0; + float fSlow72 = fConst41 * (fConst41 + fSlow71) + 1.0f; + float fSlow73 = 1.0f / fSlow72; + float fSlow74 = fConst41 * (fConst41 - fSlow71) + 1.0f; + float fSlow75 = fConst41 / fSlow72; + float fSlow76 = 0.0f - fSlow75; + float fSlow77 = fConst44 * (fConst44 + fSlow21) + 1.0f; + float fSlow78 = fConst44 / fSlow77; + float fSlow79 = 1.0f / fSlow77; + float fSlow80 = fConst44 * (fConst44 - fSlow21) + 1.0f; + float fSlow81 = 0.0f - fSlow78; + float fSlow82 = 0.17712227f * fSlow0; + float fSlow83 = fConst47 * (fConst47 + fSlow82) + 1.0f; + float fSlow84 = 1.0f / fSlow83; + float fSlow85 = fConst47 * (fConst47 - fSlow82) + 1.0f; + float fSlow86 = fConst47 / fSlow83; + float fSlow87 = 0.0f - fSlow86; + float fSlow88 = fConst50 * (fConst50 + fSlow82) + 1.0f; + float fSlow89 = 1.0f / fSlow88; + float fSlow90 = fConst50 * (fConst50 - fSlow82) + 1.0f; + float fSlow91 = fConst50 / fSlow88; + float fSlow92 = 0.0f - fSlow91; + float fSlow93 = fConst53 * (fConst53 + fSlow21) + 1.0f; + float fSlow94 = fConst53 / fSlow93; + float fSlow95 = 1.0f / fSlow93; + float fSlow96 = fConst53 * (fConst53 - fSlow21) + 1.0f; + float fSlow97 = 0.0f - fSlow94; + float fSlow98 = fConst56 * (fConst56 + fSlow38) + 1.0f; + float fSlow99 = 1.0f / fSlow98; + float fSlow100 = fConst56 * (fConst56 - fSlow38) + 1.0f; + float fSlow101 = fConst56 / fSlow98; + float fSlow102 = 0.0f - fSlow101; + float fSlow103 = fConst59 * (fConst59 + fSlow71) + 1.0f; + float fSlow104 = 1.0f / fSlow103; + float fSlow105 = fConst59 * (fConst59 - fSlow71) + 1.0f; + float fSlow106 = fConst59 / fSlow103; + float fSlow107 = 0.0f - fSlow106; + float fSlow108 = fConst62 * (fConst62 + fSlow38) + 1.0f; + float fSlow109 = 1.0f / fSlow108; + float fSlow110 = fConst62 * (fConst62 - fSlow38) + 1.0f; + float fSlow111 = fConst62 / fSlow108; + float fSlow112 = 0.0f - fSlow111; + float fSlow113 = 0.17712227f * fSlow0; + float fSlow114 = fConst65 * (fConst65 + fSlow113) + 1.0f; + float fSlow115 = 1.0f / fSlow114; + float fSlow116 = fConst65 * (fConst65 - fSlow113) + 1.0f; + float fSlow117 = fConst65 / fSlow114; + float fSlow118 = 0.0f - fSlow117; + float fSlow119 = fConst68 * (fConst68 + fSlow32) + 1.0f; + float fSlow120 = 1.0f / fSlow119; + float fSlow121 = fConst68 * (fConst68 - fSlow32) + 1.0f; + float fSlow122 = fConst68 / fSlow119; + float fSlow123 = 0.0f - fSlow122; + float fSlow124 = fConst71 * (fConst71 + fSlow71) + 1.0f; + float fSlow125 = 1.0f / fSlow124; + float fSlow126 = fConst71 * (fConst71 - fSlow71) + 1.0f; + float fSlow127 = fConst71 / fSlow124; + float fSlow128 = 0.0f - fSlow127; + float fSlow129 = fConst74 * (fConst74 + fSlow38) + 1.0f; + float fSlow130 = 1.0f / fSlow129; + float fSlow131 = fConst74 * (fConst74 - fSlow38) + 1.0f; + float fSlow132 = fConst74 / fSlow129; + float fSlow133 = 0.0f - fSlow132; + float fSlow134 = 0.17712227f * fSlow0; + float fSlow135 = fConst77 * (fConst77 + fSlow134) + 1.0f; + float fSlow136 = 1.0f / fSlow135; + float fSlow137 = fConst77 * (fConst77 - fSlow134) + 1.0f; + float fSlow138 = fConst77 / fSlow135; + float fSlow139 = 0.0f - fSlow138; + float fSlow140 = fConst80 * (fConst80 + fSlow38) + 1.0f; + float fSlow141 = 1.0f / fSlow140; + float fSlow142 = fConst80 * (fConst80 - fSlow38) + 1.0f; + float fSlow143 = fConst80 / fSlow140; + float fSlow144 = 0.0f - fSlow143; + float fSlow145 = fConst83 * (fConst83 + fSlow134) + 1.0f; + float fSlow146 = 1.0f / fSlow145; + float fSlow147 = fConst83 * (fConst83 - fSlow134) + 1.0f; + float fSlow148 = fConst83 / fSlow145; + float fSlow149 = 0.0f - fSlow148; + float fSlow150 = fConst86 * (fConst86 + fSlow9) + 1.0f; + float fSlow151 = 1.0f / fSlow150; + float fSlow152 = fConst86 * (fConst86 - fSlow9) + 1.0f; + float fSlow153 = fConst86 / fSlow150; + float fSlow154 = 0.0f - fSlow153; + float fSlow155 = fConst89 * (fConst89 + fSlow82) + 1.0f; + float fSlow156 = 1.0f / fSlow155; + float fSlow157 = fConst89 * (fConst89 - fSlow82) + 1.0f; + float fSlow158 = fConst89 / fSlow155; + float fSlow159 = 0.0f - fSlow158; + float fSlow160 = fConst92 * (fConst92 + fSlow32) + 1.0f; + float fSlow161 = 1.0f / fSlow160; + float fSlow162 = fConst92 * (fConst92 - fSlow32) + 1.0f; + float fSlow163 = fConst92 / fSlow160; + float fSlow164 = 0.0f - fSlow163; + float fSlow165 = fConst95 * (fConst95 + fSlow15) + 1.0f; + float fSlow166 = 1.0f / fSlow165; + float fSlow167 = fConst95 * (fConst95 - fSlow15) + 1.0f; + float fSlow168 = fConst95 / fSlow165; + float fSlow169 = 0.0f - fSlow168; + float fSlow170 = 0.17712227f * fSlow0; + float fSlow171 = fConst98 * (fConst98 + fSlow170) + 1.0f; + float fSlow172 = fConst98 / fSlow171; + float fSlow173 = 1.0f / fSlow171; + float fSlow174 = fConst98 * (fConst98 - fSlow170) + 1.0f; + float fSlow175 = 0.0f - fSlow172; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input1[i0]); - fRec0[0] = (fTemp0 - (fSlow3 * ((fSlow4 * fRec0[2]) + (fConst3 * fRec0[1])))); + fRec0[0] = fTemp0 - fSlow3 * (fSlow4 * fRec0[2] + fConst3 * fRec0[1]); float fTemp1 = float(input0[i0]); - fRec3[0] = (fTemp1 - (fSlow3 * ((fSlow4 * fRec3[2]) + (fConst3 * fRec3[1])))); - float fTemp2 = std::fabs(((fSlow5 * fRec3[0]) + (fSlow6 * fRec3[2]))); - fRec4[0] = (fSlow7 + (fConst5 * fRec4[1])); - int iTemp3 = (std::fabs(fRec4[0]) < 1.1920929e-07f); - float fThen1 = std::exp((0.0f - (fConst6 / (iTemp3 ? 1.0f : fRec4[0])))); - float fTemp4 = (iTemp3 ? 0.0f : fThen1); - fRec5[0] = (fSlow8 + (fConst5 * fRec5[1])); - int iTemp5 = (std::fabs(fRec5[0]) < 1.1920929e-07f); - float fThen3 = std::exp((0.0f - (fConst6 / (iTemp5 ? 1.0f : fRec5[0])))); - float fTemp6 = (iTemp5 ? 0.0f : fThen3); - float fTemp7 = ((fRec1[1] > fTemp2) ? fTemp6 : fTemp4); - fRec2[0] = ((fRec2[1] * fTemp7) + (fTemp2 * (1.0f - fTemp7))); - fRec1[0] = fRec2[0]; - fRec6[0] = (fTemp0 - (fSlow11 * ((fSlow12 * fRec6[2]) + (fConst9 * fRec6[1])))); - fRec9[0] = (fTemp1 - (fSlow11 * ((fSlow12 * fRec9[2]) + (fConst9 * fRec9[1])))); - float fTemp8 = std::fabs(((fSlow13 * fRec9[0]) + (fSlow14 * fRec9[2]))); - float fTemp9 = ((fRec7[1] > fTemp8) ? fTemp6 : fTemp4); - fRec8[0] = ((fRec8[1] * fTemp9) + (fTemp8 * (1.0f - fTemp9))); - fRec7[0] = fRec8[0]; - fRec10[0] = (fTemp0 - (fSlow17 * ((fSlow18 * fRec10[2]) + (fConst12 * fRec10[1])))); - fRec13[0] = (fTemp1 - (fSlow17 * ((fSlow18 * fRec13[2]) + (fConst12 * fRec13[1])))); - float fTemp10 = std::fabs(((fSlow19 * fRec13[0]) + (fSlow20 * fRec13[2]))); - float fTemp11 = ((fRec11[1] > fTemp10) ? fTemp6 : fTemp4); - fRec12[0] = ((fRec12[1] * fTemp11) + (fTemp10 * (1.0f - fTemp11))); - fRec11[0] = fRec12[0]; - fRec14[0] = (fTemp0 - (fSlow23 * ((fSlow24 * fRec14[2]) + (fConst15 * fRec14[1])))); - fRec17[0] = (fTemp1 - (fSlow23 * ((fSlow24 * fRec17[2]) + (fConst15 * fRec17[1])))); - float fTemp12 = std::fabs(((fSlow25 * fRec17[0]) + (fSlow26 * fRec17[2]))); - float fTemp13 = ((fRec15[1] > fTemp12) ? fTemp6 : fTemp4); - fRec16[0] = ((fRec16[1] * fTemp13) + (fTemp12 * (1.0f - fTemp13))); - fRec15[0] = fRec16[0]; - fRec18[0] = (fTemp0 - (fSlow29 * ((fSlow30 * fRec18[2]) + (fConst18 * fRec18[1])))); - fRec21[0] = (fTemp1 - (fSlow29 * ((fSlow30 * fRec21[2]) + (fConst18 * fRec21[1])))); - float fTemp14 = std::fabs(((fSlow31 * fRec21[0]) + (fSlow32 * fRec21[2]))); - float fTemp15 = ((fRec19[1] > fTemp14) ? fTemp6 : fTemp4); - fRec20[0] = ((fRec20[1] * fTemp15) + (fTemp14 * (1.0f - fTemp15))); - fRec19[0] = fRec20[0]; - fRec22[0] = (fTemp0 - (fSlow35 * ((fSlow36 * fRec22[2]) + (fConst21 * fRec22[1])))); - fRec25[0] = (fTemp1 - (fSlow35 * ((fSlow36 * fRec25[2]) + (fConst21 * fRec25[1])))); - float fTemp16 = std::fabs(((fSlow37 * fRec25[0]) + (fSlow38 * fRec25[2]))); - float fTemp17 = ((fRec23[1] > fTemp16) ? fTemp6 : fTemp4); - fRec24[0] = ((fRec24[1] * fTemp17) + (fTemp16 * (1.0f - fTemp17))); - fRec23[0] = fRec24[0]; - fRec26[0] = (fTemp0 - (fSlow41 * ((fSlow42 * fRec26[2]) + (fConst24 * fRec26[1])))); - fRec29[0] = (fTemp1 - (fSlow41 * ((fSlow42 * fRec29[2]) + (fConst24 * fRec29[1])))); - float fTemp18 = std::fabs(((fSlow43 * fRec29[0]) + (fSlow44 * fRec29[2]))); - float fTemp19 = ((fRec27[1] > fTemp18) ? fTemp6 : fTemp4); - fRec28[0] = ((fRec28[1] * fTemp19) + (fTemp18 * (1.0f - fTemp19))); - fRec27[0] = fRec28[0]; - fRec30[0] = (fTemp0 - (fSlow46 * ((fSlow47 * fRec30[2]) + (fConst27 * fRec30[1])))); - fRec33[0] = (fTemp1 - (fSlow46 * ((fSlow47 * fRec33[2]) + (fConst27 * fRec33[1])))); - float fTemp20 = std::fabs(((fSlow48 * fRec33[0]) + (fSlow49 * fRec33[2]))); - float fTemp21 = ((fRec31[1] > fTemp20) ? fTemp6 : fTemp4); - fRec32[0] = ((fRec32[1] * fTemp21) + (fTemp20 * (1.0f - fTemp21))); - fRec31[0] = fRec32[0]; - fRec34[0] = (fTemp0 - (fSlow52 * ((fSlow53 * fRec34[2]) + (fConst30 * fRec34[1])))); - fRec37[0] = (fTemp1 - (fSlow52 * ((fSlow53 * fRec37[2]) + (fConst30 * fRec37[1])))); - float fTemp22 = std::fabs(((fSlow54 * fRec37[0]) + (fSlow55 * fRec37[2]))); - float fTemp23 = ((fRec35[1] > fTemp22) ? fTemp6 : fTemp4); - fRec36[0] = ((fRec36[1] * fTemp23) + (fTemp22 * (1.0f - fTemp23))); - fRec35[0] = fRec36[0]; - fRec38[0] = (fTemp0 - (fSlow57 * ((fSlow58 * fRec38[2]) + (fConst33 * fRec38[1])))); - fRec41[0] = (fTemp1 - (fSlow57 * ((fSlow58 * fRec41[2]) + (fConst33 * fRec41[1])))); - float fTemp24 = std::fabs(((fSlow59 * fRec41[0]) + (fSlow60 * fRec41[2]))); - float fTemp25 = ((fRec39[1] > fTemp24) ? fTemp6 : fTemp4); - fRec40[0] = ((fRec40[1] * fTemp25) + (fTemp24 * (1.0f - fTemp25))); - fRec39[0] = fRec40[0]; - fRec42[0] = (fTemp0 - (fSlow62 * ((fSlow63 * fRec42[2]) + (fConst36 * fRec42[1])))); - fRec45[0] = (fTemp1 - (fSlow62 * ((fSlow63 * fRec45[2]) + (fConst36 * fRec45[1])))); - float fTemp26 = std::fabs(((fSlow64 * fRec45[0]) + (fSlow65 * fRec45[2]))); - float fTemp27 = ((fRec43[1] > fTemp26) ? fTemp6 : fTemp4); - fRec44[0] = ((fRec44[1] * fTemp27) + (fTemp26 * (1.0f - fTemp27))); - fRec43[0] = fRec44[0]; - fRec46[0] = (fTemp0 - (fSlow68 * ((fSlow69 * fRec46[2]) + (fConst39 * fRec46[1])))); - fRec49[0] = (fTemp1 - (fSlow68 * ((fSlow69 * fRec49[2]) + (fConst39 * fRec49[1])))); - float fTemp28 = std::fabs(((fSlow70 * fRec49[0]) + (fSlow71 * fRec49[2]))); - float fTemp29 = ((fRec47[1] > fTemp28) ? fTemp6 : fTemp4); - fRec48[0] = ((fRec48[1] * fTemp29) + (fTemp28 * (1.0f - fTemp29))); - fRec47[0] = fRec48[0]; - fRec50[0] = (fTemp0 - (fSlow74 * ((fSlow75 * fRec50[2]) + (fConst42 * fRec50[1])))); - fRec53[0] = (fTemp1 - (fSlow74 * ((fSlow75 * fRec53[2]) + (fConst42 * fRec53[1])))); - float fTemp30 = std::fabs(((fSlow76 * fRec53[0]) + (fSlow77 * fRec53[2]))); - float fTemp31 = ((fRec51[1] > fTemp30) ? fTemp6 : fTemp4); - fRec52[0] = ((fRec52[1] * fTemp31) + (fTemp30 * (1.0f - fTemp31))); - fRec51[0] = fRec52[0]; - fRec54[0] = (fTemp0 - (fSlow80 * ((fSlow81 * fRec54[2]) + (fConst45 * fRec54[1])))); - fRec57[0] = (fTemp1 - (fSlow80 * ((fSlow81 * fRec57[2]) + (fConst45 * fRec57[1])))); - float fTemp32 = std::fabs(((fSlow82 * fRec57[0]) + (fSlow83 * fRec57[2]))); - float fTemp33 = ((fRec55[1] > fTemp32) ? fTemp6 : fTemp4); - fRec56[0] = ((fRec56[1] * fTemp33) + (fTemp32 * (1.0f - fTemp33))); - fRec55[0] = fRec56[0]; - fRec58[0] = (fTemp0 - (fSlow85 * ((fSlow86 * fRec58[2]) + (fConst48 * fRec58[1])))); - fRec61[0] = (fTemp1 - (fSlow85 * ((fSlow86 * fRec61[2]) + (fConst48 * fRec61[1])))); - float fTemp34 = std::fabs(((fSlow87 * fRec61[0]) + (fSlow88 * fRec61[2]))); - float fTemp35 = ((fRec59[1] > fTemp34) ? fTemp6 : fTemp4); - fRec60[0] = ((fRec60[1] * fTemp35) + (fTemp34 * (1.0f - fTemp35))); - fRec59[0] = fRec60[0]; - fRec62[0] = (fTemp0 - (fSlow90 * ((fSlow91 * fRec62[2]) + (fConst51 * fRec62[1])))); - fRec65[0] = (fTemp1 - (fSlow90 * ((fSlow91 * fRec65[2]) + (fConst51 * fRec65[1])))); - float fTemp36 = std::fabs(((fSlow92 * fRec65[0]) + (fSlow93 * fRec65[2]))); - float fTemp37 = ((fRec63[1] > fTemp36) ? fTemp6 : fTemp4); - fRec64[0] = ((fRec64[1] * fTemp37) + (fTemp36 * (1.0f - fTemp37))); - fRec63[0] = fRec64[0]; - fRec66[0] = (fTemp0 - (fSlow95 * ((fSlow96 * fRec66[2]) + (fConst54 * fRec66[1])))); - fRec69[0] = (fTemp1 - (fSlow95 * ((fSlow96 * fRec69[2]) + (fConst54 * fRec69[1])))); - float fTemp38 = std::fabs(((fSlow97 * fRec69[0]) + (fSlow98 * fRec69[2]))); - float fTemp39 = ((fRec67[1] > fTemp38) ? fTemp6 : fTemp4); - fRec68[0] = ((fRec68[1] * fTemp39) + (fTemp38 * (1.0f - fTemp39))); - fRec67[0] = fRec68[0]; - fRec70[0] = (fTemp0 - (fSlow100 * ((fSlow101 * fRec70[2]) + (fConst57 * fRec70[1])))); - fRec73[0] = (fTemp1 - (fSlow100 * ((fSlow101 * fRec73[2]) + (fConst57 * fRec73[1])))); - float fTemp40 = std::fabs(((fSlow102 * fRec73[0]) + (fSlow103 * fRec73[2]))); - float fTemp41 = ((fRec71[1] > fTemp40) ? fTemp6 : fTemp4); - fRec72[0] = ((fRec72[1] * fTemp41) + (fTemp40 * (1.0f - fTemp41))); - fRec71[0] = fRec72[0]; - fRec74[0] = (fTemp0 - (fSlow105 * ((fSlow106 * fRec74[2]) + (fConst60 * fRec74[1])))); - fRec77[0] = (fTemp1 - (fSlow105 * ((fSlow106 * fRec77[2]) + (fConst60 * fRec77[1])))); - float fTemp42 = std::fabs(((fSlow107 * fRec77[0]) + (fSlow108 * fRec77[2]))); - float fTemp43 = ((fRec75[1] > fTemp42) ? fTemp6 : fTemp4); - fRec76[0] = ((fRec76[1] * fTemp43) + (fTemp42 * (1.0f - fTemp43))); - fRec75[0] = fRec76[0]; - fRec78[0] = (fTemp0 - (fSlow110 * ((fSlow111 * fRec78[2]) + (fConst63 * fRec78[1])))); - fRec81[0] = (fTemp1 - (fSlow110 * ((fSlow111 * fRec81[2]) + (fConst63 * fRec81[1])))); - float fTemp44 = std::fabs(((fSlow112 * fRec81[0]) + (fSlow113 * fRec81[2]))); - float fTemp45 = ((fRec79[1] > fTemp44) ? fTemp6 : fTemp4); - fRec80[0] = ((fRec80[1] * fTemp45) + (fTemp44 * (1.0f - fTemp45))); - fRec79[0] = fRec80[0]; - fRec82[0] = (fTemp0 - (fSlow115 * ((fSlow116 * fRec82[2]) + (fConst66 * fRec82[1])))); - fRec85[0] = (fTemp1 - (fSlow115 * ((fSlow116 * fRec85[2]) + (fConst66 * fRec85[1])))); - float fTemp46 = std::fabs(((fSlow117 * fRec85[0]) + (fSlow118 * fRec85[2]))); - float fTemp47 = ((fRec83[1] > fTemp46) ? fTemp6 : fTemp4); - fRec84[0] = ((fRec84[1] * fTemp47) + (fTemp46 * (1.0f - fTemp47))); - fRec83[0] = fRec84[0]; - fRec86[0] = (fTemp0 - (fSlow120 * ((fSlow121 * fRec86[2]) + (fConst69 * fRec86[1])))); - fRec89[0] = (fTemp1 - (fSlow120 * ((fSlow121 * fRec89[2]) + (fConst69 * fRec89[1])))); - float fTemp48 = std::fabs(((fSlow122 * fRec89[0]) + (fSlow123 * fRec89[2]))); - float fTemp49 = ((fRec87[1] > fTemp48) ? fTemp6 : fTemp4); - fRec88[0] = ((fRec88[1] * fTemp49) + (fTemp48 * (1.0f - fTemp49))); - fRec87[0] = fRec88[0]; - fRec90[0] = (fTemp0 - (fSlow125 * ((fSlow126 * fRec90[2]) + (fConst72 * fRec90[1])))); - fRec93[0] = (fTemp1 - (fSlow125 * ((fSlow126 * fRec93[2]) + (fConst72 * fRec93[1])))); - float fTemp50 = std::fabs(((fSlow127 * fRec93[0]) + (fSlow128 * fRec93[2]))); - float fTemp51 = ((fRec91[1] > fTemp50) ? fTemp6 : fTemp4); - fRec92[0] = ((fRec92[1] * fTemp51) + (fTemp50 * (1.0f - fTemp51))); - fRec91[0] = fRec92[0]; - fRec94[0] = (fTemp0 - (fSlow130 * ((fSlow131 * fRec94[2]) + (fConst75 * fRec94[1])))); - fRec97[0] = (fTemp1 - (fSlow130 * ((fSlow131 * fRec97[2]) + (fConst75 * fRec97[1])))); - float fTemp52 = std::fabs(((fSlow132 * fRec97[0]) + (fSlow133 * fRec97[2]))); - float fTemp53 = ((fRec95[1] > fTemp52) ? fTemp6 : fTemp4); - fRec96[0] = ((fRec96[1] * fTemp53) + (fTemp52 * (1.0f - fTemp53))); - fRec95[0] = fRec96[0]; - fRec98[0] = (fTemp0 - (fSlow136 * ((fSlow137 * fRec98[2]) + (fConst78 * fRec98[1])))); - fRec101[0] = (fTemp1 - (fSlow136 * ((fSlow137 * fRec101[2]) + (fConst78 * fRec101[1])))); - float fTemp54 = std::fabs(((fSlow138 * fRec101[0]) + (fSlow139 * fRec101[2]))); - float fTemp55 = ((fRec99[1] > fTemp54) ? fTemp6 : fTemp4); - fRec100[0] = ((fRec100[1] * fTemp55) + (fTemp54 * (1.0f - fTemp55))); - fRec99[0] = fRec100[0]; - fRec102[0] = (fTemp0 - (fSlow141 * ((fSlow142 * fRec102[2]) + (fConst81 * fRec102[1])))); - fRec105[0] = (fTemp1 - (fSlow141 * ((fSlow142 * fRec105[2]) + (fConst81 * fRec105[1])))); - float fTemp56 = std::fabs(((fSlow143 * fRec105[0]) + (fSlow144 * fRec105[2]))); - float fTemp57 = ((fRec103[1] > fTemp56) ? fTemp6 : fTemp4); - fRec104[0] = ((fRec104[1] * fTemp57) + (fTemp56 * (1.0f - fTemp57))); - fRec103[0] = fRec104[0]; - fRec106[0] = (fTemp0 - (fSlow146 * ((fSlow147 * fRec106[2]) + (fConst84 * fRec106[1])))); - fRec109[0] = (fTemp1 - (fSlow146 * ((fSlow147 * fRec109[2]) + (fConst84 * fRec109[1])))); - float fTemp58 = std::fabs(((fSlow148 * fRec109[0]) + (fSlow149 * fRec109[2]))); - float fTemp59 = ((fRec107[1] > fTemp58) ? fTemp6 : fTemp4); - fRec108[0] = ((fRec108[1] * fTemp59) + (fTemp58 * (1.0f - fTemp59))); - fRec107[0] = fRec108[0]; - fRec110[0] = (fTemp0 - (fSlow151 * ((fSlow152 * fRec110[2]) + (fConst87 * fRec110[1])))); - fRec113[0] = (fTemp1 - (fSlow151 * ((fSlow152 * fRec113[2]) + (fConst87 * fRec113[1])))); - float fTemp60 = std::fabs(((fSlow153 * fRec113[0]) + (fSlow154 * fRec113[2]))); - float fTemp61 = ((fRec111[1] > fTemp60) ? fTemp6 : fTemp4); - fRec112[0] = ((fRec112[1] * fTemp61) + (fTemp60 * (1.0f - fTemp61))); - fRec111[0] = fRec112[0]; - fRec114[0] = (fTemp0 - (fSlow156 * ((fSlow157 * fRec114[2]) + (fConst90 * fRec114[1])))); - fRec117[0] = (fTemp1 - (fSlow156 * ((fSlow157 * fRec117[2]) + (fConst90 * fRec117[1])))); - float fTemp62 = std::fabs(((fSlow158 * fRec117[0]) + (fSlow159 * fRec117[2]))); - float fTemp63 = ((fRec115[1] > fTemp62) ? fTemp6 : fTemp4); - fRec116[0] = ((fRec116[1] * fTemp63) + (fTemp62 * (1.0f - fTemp63))); - fRec115[0] = fRec116[0]; - fRec118[0] = (fTemp0 - (fSlow161 * ((fSlow162 * fRec118[2]) + (fConst93 * fRec118[1])))); - fRec121[0] = (fTemp1 - (fSlow161 * ((fSlow162 * fRec121[2]) + (fConst93 * fRec121[1])))); - float fTemp64 = std::fabs(((fSlow163 * fRec121[0]) + (fSlow164 * fRec121[2]))); - float fTemp65 = ((fRec119[1] > fTemp64) ? fTemp6 : fTemp4); - fRec120[0] = ((fRec120[1] * fTemp65) + (fTemp64 * (1.0f - fTemp65))); - fRec119[0] = fRec120[0]; - fRec122[0] = (fTemp0 - (fSlow167 * ((fSlow168 * fRec122[2]) + (fConst96 * fRec122[1])))); - fRec125[0] = (fTemp1 - (fSlow167 * ((fSlow168 * fRec125[2]) + (fConst96 * fRec125[1])))); - float fTemp66 = std::fabs(((fSlow169 * fRec125[0]) + (fSlow170 * fRec125[2]))); - float fTemp67 = ((fRec123[1] > fTemp66) ? fTemp6 : fTemp4); - fRec124[0] = ((fRec124[1] * fTemp67) + (fTemp66 * (1.0f - fTemp67))); - fRec123[0] = fRec124[0]; - fRec126[0] = (fTemp0 - (fSlow173 * ((fSlow174 * fRec126[2]) + (fConst99 * fRec126[1])))); - fRec129[0] = (fTemp1 - (fSlow173 * ((fSlow174 * fRec129[2]) + (fConst99 * fRec129[1])))); - float fTemp68 = std::fabs(((fSlow172 * fRec129[0]) + (fSlow175 * fRec129[2]))); - float fTemp69 = ((fRec127[1] > fTemp68) ? fTemp6 : fTemp4); - fRec128[0] = ((fRec128[1] * fTemp69) + (fTemp68 * (1.0f - fTemp69))); - fRec127[0] = fRec128[0]; - output0[i0] = FAUSTFLOAT(((fRec0[2] * (0.0f - (fSlow5 * fRec1[0]))) + ((fRec6[2] * (0.0f - (fSlow13 * fRec7[0]))) + ((fSlow13 * (fRec6[0] * fRec7[0])) + ((fRec10[2] * (0.0f - (fSlow19 * fRec11[0]))) + ((fSlow19 * (fRec10[0] * fRec11[0])) + ((fRec14[2] * (0.0f - (fSlow25 * fRec15[0]))) + ((fSlow25 * (fRec14[0] * fRec15[0])) + ((fRec18[2] * (0.0f - (fSlow31 * fRec19[0]))) + ((fSlow31 * (fRec18[0] * fRec19[0])) + ((fRec22[2] * (0.0f - (fSlow37 * fRec23[0]))) + ((fSlow37 * (fRec22[0] * fRec23[0])) + ((fRec26[2] * (0.0f - (fSlow43 * fRec27[0]))) + ((fSlow43 * (fRec26[0] * fRec27[0])) + ((fRec30[2] * (0.0f - (fSlow48 * fRec31[0]))) + ((fSlow48 * (fRec30[0] * fRec31[0])) + ((fRec34[2] * (0.0f - (fSlow54 * fRec35[0]))) + ((fSlow54 * (fRec34[0] * fRec35[0])) + ((fRec38[2] * (0.0f - (fSlow59 * fRec39[0]))) + ((fSlow59 * (fRec38[0] * fRec39[0])) + ((fRec42[2] * (0.0f - (fSlow64 * fRec43[0]))) + ((fSlow64 * (fRec42[0] * fRec43[0])) + ((fRec46[2] * (0.0f - (fSlow70 * fRec47[0]))) + ((fSlow70 * (fRec46[0] * fRec47[0])) + ((fRec50[2] * (0.0f - (fSlow76 * fRec51[0]))) + ((fSlow76 * (fRec50[0] * fRec51[0])) + ((fRec54[2] * (0.0f - (fSlow82 * fRec55[0]))) + ((fSlow82 * (fRec54[0] * fRec55[0])) + ((fRec58[2] * (0.0f - (fSlow87 * fRec59[0]))) + ((fSlow87 * (fRec58[0] * fRec59[0])) + ((fRec62[2] * (0.0f - (fSlow92 * fRec63[0]))) + ((fSlow92 * (fRec62[0] * fRec63[0])) + ((fRec66[2] * (0.0f - (fSlow97 * fRec67[0]))) + ((fSlow97 * (fRec66[0] * fRec67[0])) + ((fRec70[2] * (0.0f - (fSlow102 * fRec71[0]))) + ((fSlow102 * (fRec70[0] * fRec71[0])) + ((fRec74[2] * (0.0f - (fSlow107 * fRec75[0]))) + ((fSlow107 * (fRec74[0] * fRec75[0])) + ((fRec78[2] * (0.0f - (fSlow112 * fRec79[0]))) + ((fSlow112 * (fRec78[0] * fRec79[0])) + (((fRec82[2] * (0.0f - (fSlow117 * fRec83[0]))) + (((fRec86[2] * (0.0f - (fSlow122 * fRec87[0]))) + (((fRec90[2] * (0.0f - (fSlow127 * fRec91[0]))) + (((fRec94[2] * (0.0f - (fSlow132 * fRec95[0]))) + (((fRec98[2] * (0.0f - (fSlow138 * fRec99[0]))) + (((fRec102[2] * (0.0f - (fSlow143 * fRec103[0]))) + (((fRec106[2] * (0.0f - (fSlow148 * fRec107[0]))) + (((fRec110[2] * (0.0f - (fSlow153 * fRec111[0]))) + (((fRec114[2] * (0.0f - (fSlow158 * fRec115[0]))) + (((fRec118[2] * (0.0f - (fSlow163 * fRec119[0]))) + (((fRec122[2] * (0.0f - (fSlow169 * fRec123[0]))) + (((fSlow172 * (fRec126[0] * fRec127[0])) + (fRec126[2] * (0.0f - (fSlow172 * fRec127[0])))) + (fSlow169 * (fRec122[0] * fRec123[0])))) + (fSlow163 * (fRec118[0] * fRec119[0])))) + (fSlow158 * (fRec114[0] * fRec115[0])))) + (fSlow153 * (fRec110[0] * fRec111[0])))) + (fSlow148 * (fRec106[0] * fRec107[0])))) + (fSlow143 * (fRec102[0] * fRec103[0])))) + (fSlow138 * (fRec98[0] * fRec99[0])))) + (fSlow132 * (fRec94[0] * fRec95[0])))) + (fSlow127 * (fRec90[0] * fRec91[0])))) + (fSlow122 * (fRec86[0] * fRec87[0])))) + (fSlow117 * (fRec82[0] * fRec83[0])))) + (fSlow5 * (fRec0[0] * fRec1[0]))))))))))))))))))))))))))))))))))))))))))); + fRec2[0] = fTemp1 - fSlow3 * (fSlow4 * fRec2[2] + fConst3 * fRec2[1]); + float fTemp2 = std::fabs(fSlow5 * fRec2[0] + fSlow6 * fRec2[2]); + fRec3[0] = fSlow7 + fConst5 * fRec3[1]; + int iTemp3 = std::fabs(fRec3[0]) < 1.1920929e-07f; + float fTemp4 = ((iTemp3) ? 0.0f : std::exp(0.0f - fConst6 / ((iTemp3) ? 1.0f : fRec3[0]))); + fRec4[0] = fSlow8 + fConst5 * fRec4[1]; + int iTemp5 = std::fabs(fRec4[0]) < 1.1920929e-07f; + float fTemp6 = ((iTemp5) ? 0.0f : std::exp(0.0f - fConst6 / ((iTemp5) ? 1.0f : fRec4[0]))); + float fTemp7 = ((fTemp2 > fRec1[1]) ? fTemp6 : fTemp4); + fRec1[0] = fTemp2 * (1.0f - fTemp7) + fRec1[1] * fTemp7; + fRec5[0] = fTemp0 - fSlow11 * (fSlow12 * fRec5[2] + fConst9 * fRec5[1]); + fRec7[0] = fTemp1 - fSlow11 * (fSlow12 * fRec7[2] + fConst9 * fRec7[1]); + float fTemp8 = std::fabs(fSlow13 * fRec7[0] + fSlow14 * fRec7[2]); + float fTemp9 = ((fTemp8 > fRec6[1]) ? fTemp6 : fTemp4); + fRec6[0] = fTemp8 * (1.0f - fTemp9) + fRec6[1] * fTemp9; + fRec8[0] = fTemp0 - fSlow17 * (fSlow18 * fRec8[2] + fConst12 * fRec8[1]); + fRec10[0] = fTemp1 - fSlow17 * (fSlow18 * fRec10[2] + fConst12 * fRec10[1]); + float fTemp10 = std::fabs(fSlow19 * fRec10[0] + fSlow20 * fRec10[2]); + float fTemp11 = ((fTemp10 > fRec9[1]) ? fTemp6 : fTemp4); + fRec9[0] = fTemp10 * (1.0f - fTemp11) + fRec9[1] * fTemp11; + fRec11[0] = fTemp0 - fSlow23 * (fSlow24 * fRec11[2] + fConst15 * fRec11[1]); + fRec13[0] = fTemp1 - fSlow23 * (fSlow24 * fRec13[2] + fConst15 * fRec13[1]); + float fTemp12 = std::fabs(fSlow25 * fRec13[0] + fSlow26 * fRec13[2]); + float fTemp13 = ((fTemp12 > fRec12[1]) ? fTemp6 : fTemp4); + fRec12[0] = fTemp12 * (1.0f - fTemp13) + fRec12[1] * fTemp13; + fRec14[0] = fTemp0 - fSlow28 * (fSlow29 * fRec14[2] + fConst18 * fRec14[1]); + fRec16[0] = fTemp1 - fSlow28 * (fSlow29 * fRec16[2] + fConst18 * fRec16[1]); + float fTemp14 = std::fabs(fSlow30 * fRec16[0] + fSlow31 * fRec16[2]); + float fTemp15 = ((fTemp14 > fRec15[1]) ? fTemp6 : fTemp4); + fRec15[0] = fTemp14 * (1.0f - fTemp15) + fRec15[1] * fTemp15; + fRec17[0] = fTemp0 - fSlow34 * (fSlow35 * fRec17[2] + fConst21 * fRec17[1]); + fRec19[0] = fTemp1 - fSlow34 * (fSlow35 * fRec19[2] + fConst21 * fRec19[1]); + float fTemp16 = std::fabs(fSlow36 * fRec19[0] + fSlow37 * fRec19[2]); + float fTemp17 = ((fTemp16 > fRec18[1]) ? fTemp6 : fTemp4); + fRec18[0] = fTemp16 * (1.0f - fTemp17) + fRec18[1] * fTemp17; + fRec20[0] = fTemp0 - fSlow40 * (fSlow41 * fRec20[2] + fConst24 * fRec20[1]); + fRec22[0] = fTemp1 - fSlow40 * (fSlow41 * fRec22[2] + fConst24 * fRec22[1]); + float fTemp18 = std::fabs(fSlow42 * fRec22[0] + fSlow43 * fRec22[2]); + float fTemp19 = ((fTemp18 > fRec21[1]) ? fTemp6 : fTemp4); + fRec21[0] = fTemp18 * (1.0f - fTemp19) + fRec21[1] * fTemp19; + fRec23[0] = fTemp0 - fSlow46 * (fSlow47 * fRec23[2] + fConst27 * fRec23[1]); + fRec25[0] = fTemp1 - fSlow46 * (fSlow47 * fRec25[2] + fConst27 * fRec25[1]); + float fTemp20 = std::fabs(fSlow48 * fRec25[0] + fSlow49 * fRec25[2]); + float fTemp21 = ((fTemp20 > fRec24[1]) ? fTemp6 : fTemp4); + fRec24[0] = fTemp20 * (1.0f - fTemp21) + fRec24[1] * fTemp21; + fRec26[0] = fTemp0 - fSlow52 * (fSlow53 * fRec26[2] + fConst30 * fRec26[1]); + fRec28[0] = fTemp1 - fSlow52 * (fSlow53 * fRec28[2] + fConst30 * fRec28[1]); + float fTemp22 = std::fabs(fSlow51 * fRec28[0] + fSlow54 * fRec28[2]); + float fTemp23 = ((fTemp22 > fRec27[1]) ? fTemp6 : fTemp4); + fRec27[0] = fTemp22 * (1.0f - fTemp23) + fRec27[1] * fTemp23; + fRec29[0] = fTemp0 - fSlow56 * (fSlow57 * fRec29[2] + fConst33 * fRec29[1]); + fRec31[0] = fTemp1 - fSlow56 * (fSlow57 * fRec31[2] + fConst33 * fRec31[1]); + float fTemp24 = std::fabs(fSlow58 * fRec31[0] + fSlow59 * fRec31[2]); + float fTemp25 = ((fTemp24 > fRec30[1]) ? fTemp6 : fTemp4); + fRec30[0] = fTemp24 * (1.0f - fTemp25) + fRec30[1] * fTemp25; + fRec32[0] = fTemp0 - fSlow61 * (fSlow62 * fRec32[2] + fConst36 * fRec32[1]); + fRec34[0] = fTemp1 - fSlow61 * (fSlow62 * fRec34[2] + fConst36 * fRec34[1]); + float fTemp26 = std::fabs(fSlow63 * fRec34[0] + fSlow64 * fRec34[2]); + float fTemp27 = ((fTemp26 > fRec33[1]) ? fTemp6 : fTemp4); + fRec33[0] = fTemp26 * (1.0f - fTemp27) + fRec33[1] * fTemp27; + fRec35[0] = fTemp0 - fSlow67 * (fSlow68 * fRec35[2] + fConst39 * fRec35[1]); + fRec37[0] = fTemp1 - fSlow67 * (fSlow68 * fRec37[2] + fConst39 * fRec37[1]); + float fTemp28 = std::fabs(fSlow69 * fRec37[0] + fSlow70 * fRec37[2]); + float fTemp29 = ((fTemp28 > fRec36[1]) ? fTemp6 : fTemp4); + fRec36[0] = fTemp28 * (1.0f - fTemp29) + fRec36[1] * fTemp29; + fRec38[0] = fTemp0 - fSlow73 * (fSlow74 * fRec38[2] + fConst42 * fRec38[1]); + fRec40[0] = fTemp1 - fSlow73 * (fSlow74 * fRec40[2] + fConst42 * fRec40[1]); + float fTemp30 = std::fabs(fSlow75 * fRec40[0] + fSlow76 * fRec40[2]); + float fTemp31 = ((fTemp30 > fRec39[1]) ? fTemp6 : fTemp4); + fRec39[0] = fTemp30 * (1.0f - fTemp31) + fRec39[1] * fTemp31; + fRec41[0] = fTemp0 - fSlow79 * (fSlow80 * fRec41[2] + fConst45 * fRec41[1]); + fRec43[0] = fTemp1 - fSlow79 * (fSlow80 * fRec43[2] + fConst45 * fRec43[1]); + float fTemp32 = std::fabs(fSlow78 * fRec43[0] + fSlow81 * fRec43[2]); + float fTemp33 = ((fTemp32 > fRec42[1]) ? fTemp6 : fTemp4); + fRec42[0] = fTemp32 * (1.0f - fTemp33) + fRec42[1] * fTemp33; + fRec44[0] = fTemp0 - fSlow84 * (fSlow85 * fRec44[2] + fConst48 * fRec44[1]); + fRec46[0] = fTemp1 - fSlow84 * (fSlow85 * fRec46[2] + fConst48 * fRec46[1]); + float fTemp34 = std::fabs(fSlow86 * fRec46[0] + fSlow87 * fRec46[2]); + float fTemp35 = ((fTemp34 > fRec45[1]) ? fTemp6 : fTemp4); + fRec45[0] = fTemp34 * (1.0f - fTemp35) + fRec45[1] * fTemp35; + fRec47[0] = fTemp0 - fSlow89 * (fSlow90 * fRec47[2] + fConst51 * fRec47[1]); + fRec49[0] = fTemp1 - fSlow89 * (fSlow90 * fRec49[2] + fConst51 * fRec49[1]); + float fTemp36 = std::fabs(fSlow91 * fRec49[0] + fSlow92 * fRec49[2]); + float fTemp37 = ((fTemp36 > fRec48[1]) ? fTemp6 : fTemp4); + fRec48[0] = fTemp36 * (1.0f - fTemp37) + fRec48[1] * fTemp37; + fRec50[0] = fTemp0 - fSlow95 * (fSlow96 * fRec50[2] + fConst54 * fRec50[1]); + fRec52[0] = fTemp1 - fSlow95 * (fSlow96 * fRec52[2] + fConst54 * fRec52[1]); + float fTemp38 = std::fabs(fSlow94 * fRec52[0] + fSlow97 * fRec52[2]); + float fTemp39 = ((fTemp38 > fRec51[1]) ? fTemp6 : fTemp4); + fRec51[0] = fTemp38 * (1.0f - fTemp39) + fRec51[1] * fTemp39; + fRec53[0] = fTemp0 - fSlow99 * (fSlow100 * fRec53[2] + fConst57 * fRec53[1]); + fRec55[0] = fTemp1 - fSlow99 * (fSlow100 * fRec55[2] + fConst57 * fRec55[1]); + float fTemp40 = std::fabs(fSlow101 * fRec55[0] + fSlow102 * fRec55[2]); + float fTemp41 = ((fTemp40 > fRec54[1]) ? fTemp6 : fTemp4); + fRec54[0] = fTemp40 * (1.0f - fTemp41) + fRec54[1] * fTemp41; + fRec56[0] = fTemp0 - fSlow104 * (fSlow105 * fRec56[2] + fConst60 * fRec56[1]); + fRec58[0] = fTemp1 - fSlow104 * (fSlow105 * fRec58[2] + fConst60 * fRec58[1]); + float fTemp42 = std::fabs(fSlow106 * fRec58[0] + fSlow107 * fRec58[2]); + float fTemp43 = ((fTemp42 > fRec57[1]) ? fTemp6 : fTemp4); + fRec57[0] = fTemp42 * (1.0f - fTemp43) + fRec57[1] * fTemp43; + fRec59[0] = fTemp0 - fSlow109 * (fSlow110 * fRec59[2] + fConst63 * fRec59[1]); + fRec61[0] = fTemp1 - fSlow109 * (fSlow110 * fRec61[2] + fConst63 * fRec61[1]); + float fTemp44 = std::fabs(fSlow111 * fRec61[0] + fSlow112 * fRec61[2]); + float fTemp45 = ((fTemp44 > fRec60[1]) ? fTemp6 : fTemp4); + fRec60[0] = fTemp44 * (1.0f - fTemp45) + fRec60[1] * fTemp45; + fRec62[0] = fTemp0 - fSlow115 * (fSlow116 * fRec62[2] + fConst66 * fRec62[1]); + fRec64[0] = fTemp1 - fSlow115 * (fSlow116 * fRec64[2] + fConst66 * fRec64[1]); + float fTemp46 = std::fabs(fSlow117 * fRec64[0] + fSlow118 * fRec64[2]); + float fTemp47 = ((fTemp46 > fRec63[1]) ? fTemp6 : fTemp4); + fRec63[0] = fTemp46 * (1.0f - fTemp47) + fRec63[1] * fTemp47; + fRec65[0] = fTemp0 - fSlow120 * (fSlow121 * fRec65[2] + fConst69 * fRec65[1]); + fRec67[0] = fTemp1 - fSlow120 * (fSlow121 * fRec67[2] + fConst69 * fRec67[1]); + float fTemp48 = std::fabs(fSlow122 * fRec67[0] + fSlow123 * fRec67[2]); + float fTemp49 = ((fTemp48 > fRec66[1]) ? fTemp6 : fTemp4); + fRec66[0] = fTemp48 * (1.0f - fTemp49) + fRec66[1] * fTemp49; + fRec68[0] = fTemp0 - fSlow125 * (fSlow126 * fRec68[2] + fConst72 * fRec68[1]); + fRec70[0] = fTemp1 - fSlow125 * (fSlow126 * fRec70[2] + fConst72 * fRec70[1]); + float fTemp50 = std::fabs(fSlow127 * fRec70[0] + fSlow128 * fRec70[2]); + float fTemp51 = ((fTemp50 > fRec69[1]) ? fTemp6 : fTemp4); + fRec69[0] = fTemp50 * (1.0f - fTemp51) + fRec69[1] * fTemp51; + fRec71[0] = fTemp0 - fSlow130 * (fSlow131 * fRec71[2] + fConst75 * fRec71[1]); + fRec73[0] = fTemp1 - fSlow130 * (fSlow131 * fRec73[2] + fConst75 * fRec73[1]); + float fTemp52 = std::fabs(fSlow132 * fRec73[0] + fSlow133 * fRec73[2]); + float fTemp53 = ((fTemp52 > fRec72[1]) ? fTemp6 : fTemp4); + fRec72[0] = fTemp52 * (1.0f - fTemp53) + fRec72[1] * fTemp53; + fRec74[0] = fTemp0 - fSlow136 * (fSlow137 * fRec74[2] + fConst78 * fRec74[1]); + fRec76[0] = fTemp1 - fSlow136 * (fSlow137 * fRec76[2] + fConst78 * fRec76[1]); + float fTemp54 = std::fabs(fSlow138 * fRec76[0] + fSlow139 * fRec76[2]); + float fTemp55 = ((fTemp54 > fRec75[1]) ? fTemp6 : fTemp4); + fRec75[0] = fTemp54 * (1.0f - fTemp55) + fRec75[1] * fTemp55; + fRec77[0] = fTemp0 - fSlow141 * (fSlow142 * fRec77[2] + fConst81 * fRec77[1]); + fRec79[0] = fTemp1 - fSlow141 * (fSlow142 * fRec79[2] + fConst81 * fRec79[1]); + float fTemp56 = std::fabs(fSlow143 * fRec79[0] + fSlow144 * fRec79[2]); + float fTemp57 = ((fTemp56 > fRec78[1]) ? fTemp6 : fTemp4); + fRec78[0] = fTemp56 * (1.0f - fTemp57) + fRec78[1] * fTemp57; + fRec80[0] = fTemp0 - fSlow146 * (fSlow147 * fRec80[2] + fConst84 * fRec80[1]); + fRec82[0] = fTemp1 - fSlow146 * (fSlow147 * fRec82[2] + fConst84 * fRec82[1]); + float fTemp58 = std::fabs(fSlow148 * fRec82[0] + fSlow149 * fRec82[2]); + float fTemp59 = ((fTemp58 > fRec81[1]) ? fTemp6 : fTemp4); + fRec81[0] = fTemp58 * (1.0f - fTemp59) + fRec81[1] * fTemp59; + fRec83[0] = fTemp0 - fSlow151 * (fSlow152 * fRec83[2] + fConst87 * fRec83[1]); + fRec85[0] = fTemp1 - fSlow151 * (fSlow152 * fRec85[2] + fConst87 * fRec85[1]); + float fTemp60 = std::fabs(fSlow153 * fRec85[0] + fSlow154 * fRec85[2]); + float fTemp61 = ((fTemp60 > fRec84[1]) ? fTemp6 : fTemp4); + fRec84[0] = fTemp60 * (1.0f - fTemp61) + fRec84[1] * fTemp61; + fRec86[0] = fTemp0 - fSlow156 * (fSlow157 * fRec86[2] + fConst90 * fRec86[1]); + fRec88[0] = fTemp1 - fSlow156 * (fSlow157 * fRec88[2] + fConst90 * fRec88[1]); + float fTemp62 = std::fabs(fSlow158 * fRec88[0] + fSlow159 * fRec88[2]); + float fTemp63 = ((fTemp62 > fRec87[1]) ? fTemp6 : fTemp4); + fRec87[0] = fTemp62 * (1.0f - fTemp63) + fRec87[1] * fTemp63; + fRec89[0] = fTemp0 - fSlow161 * (fSlow162 * fRec89[2] + fConst93 * fRec89[1]); + fRec91[0] = fTemp1 - fSlow161 * (fSlow162 * fRec91[2] + fConst93 * fRec91[1]); + float fTemp64 = std::fabs(fSlow163 * fRec91[0] + fSlow164 * fRec91[2]); + float fTemp65 = ((fTemp64 > fRec90[1]) ? fTemp6 : fTemp4); + fRec90[0] = fTemp64 * (1.0f - fTemp65) + fRec90[1] * fTemp65; + fRec92[0] = fTemp0 - fSlow166 * (fSlow167 * fRec92[2] + fConst96 * fRec92[1]); + fRec94[0] = fTemp1 - fSlow166 * (fSlow167 * fRec94[2] + fConst96 * fRec94[1]); + float fTemp66 = std::fabs(fSlow168 * fRec94[0] + fSlow169 * fRec94[2]); + float fTemp67 = ((fTemp66 > fRec93[1]) ? fTemp6 : fTemp4); + fRec93[0] = fTemp66 * (1.0f - fTemp67) + fRec93[1] * fTemp67; + fRec95[0] = fTemp0 - fSlow173 * (fSlow174 * fRec95[2] + fConst99 * fRec95[1]); + fRec97[0] = fTemp1 - fSlow173 * (fSlow174 * fRec97[2] + fConst99 * fRec97[1]); + float fTemp68 = std::fabs(fSlow172 * fRec97[0] + fSlow175 * fRec97[2]); + float fTemp69 = ((fTemp68 > fRec96[1]) ? fTemp6 : fTemp4); + fRec96[0] = fTemp68 * (1.0f - fTemp69) + fRec96[1] * fTemp69; + output0[i0] = FAUSTFLOAT(fRec0[2] * (0.0f - fSlow5 * fRec1[0]) + fSlow5 * fRec0[0] * fRec1[0] + fRec5[2] * (0.0f - fSlow13 * fRec6[0]) + fSlow13 * fRec5[0] * fRec6[0] + fRec8[2] * (0.0f - fSlow19 * fRec9[0]) + fSlow19 * fRec8[0] * fRec9[0] + fRec11[2] * (0.0f - fSlow25 * fRec12[0]) + fSlow25 * fRec11[0] * fRec12[0] + fRec14[2] * (0.0f - fSlow30 * fRec15[0]) + fSlow30 * fRec14[0] * fRec15[0] + fRec17[2] * (0.0f - fSlow36 * fRec18[0]) + fSlow36 * fRec17[0] * fRec18[0] + fRec20[2] * (0.0f - fSlow42 * fRec21[0]) + fRec23[2] * (0.0f - fSlow48 * fRec24[0]) + fSlow48 * fRec23[0] * fRec24[0] + fSlow51 * fRec26[0] * fRec27[0] + fRec29[2] * (0.0f - fSlow58 * fRec30[0]) + fSlow58 * fRec29[0] * fRec30[0] + fRec32[2] * (0.0f - fSlow63 * fRec33[0]) + fSlow63 * fRec32[0] * fRec33[0] + fRec35[2] * (0.0f - fSlow69 * fRec36[0]) + fRec38[2] * (0.0f - fSlow75 * fRec39[0]) + fSlow78 * fRec41[0] * fRec42[0] + fRec44[2] * (0.0f - fSlow86 * fRec45[0]) + fSlow86 * fRec44[0] * fRec45[0] + fRec47[2] * (0.0f - fSlow91 * fRec48[0]) + fSlow91 * fRec47[0] * fRec48[0] + fSlow94 * fRec50[0] * fRec51[0] + fRec53[2] * (0.0f - fSlow101 * fRec54[0]) + fSlow101 * fRec53[0] * fRec54[0] + fRec56[2] * (0.0f - fSlow106 * fRec57[0]) + fSlow106 * fRec56[0] * fRec57[0] + fRec59[2] * (0.0f - fSlow111 * fRec60[0]) + fSlow111 * fRec59[0] * fRec60[0] + fRec62[2] * (0.0f - fSlow117 * fRec63[0]) + fSlow117 * fRec62[0] * fRec63[0] + fRec65[2] * (0.0f - fSlow122 * fRec66[0]) + fSlow122 * fRec65[0] * fRec66[0] + fRec68[2] * (0.0f - fSlow127 * fRec69[0]) + fSlow127 * fRec68[0] * fRec69[0] + fRec71[2] * (0.0f - fSlow132 * fRec72[0]) + fSlow132 * fRec71[0] * fRec72[0] + fRec74[2] * (0.0f - fSlow138 * fRec75[0]) + fRec77[2] * (0.0f - fSlow143 * fRec78[0]) + fSlow143 * fRec77[0] * fRec78[0] + fRec26[2] * (0.0f - fSlow51 * fRec27[0]) + fRec80[2] * (0.0f - fSlow148 * fRec81[0]) + fSlow148 * fRec80[0] * fRec81[0] + fRec83[2] * (0.0f - fSlow153 * fRec84[0]) + fSlow153 * fRec83[0] * fRec84[0] + fRec86[2] * (0.0f - fSlow158 * fRec87[0]) + fSlow158 * fRec86[0] * fRec87[0] + fSlow69 * fRec35[0] * fRec36[0] + fRec41[2] * (0.0f - fSlow78 * fRec42[0]) + fRec50[2] * (0.0f - fSlow94 * fRec51[0]) + fRec89[2] * (0.0f - fSlow163 * fRec90[0]) + fRec92[2] * (0.0f - fSlow168 * fRec93[0]) + fSlow172 * fRec95[0] * fRec96[0] + fRec95[2] * (0.0f - fSlow172 * fRec96[0]) + fSlow168 * fRec92[0] * fRec93[0] + fSlow75 * fRec38[0] * fRec39[0] + fSlow163 * fRec89[0] * fRec90[0] + fSlow42 * fRec20[0] * fRec21[0] + fSlow138 * fRec74[0] * fRec75[0]); fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; - fRec3[2] = fRec3[1]; + fRec2[2] = fRec2[1]; + fRec2[1] = fRec2[0]; fRec3[1] = fRec3[0]; fRec4[1] = fRec4[0]; - fRec5[1] = fRec5[0]; - fRec2[1] = fRec2[0]; fRec1[1] = fRec1[0]; - fRec6[2] = fRec6[1]; + fRec5[2] = fRec5[1]; + fRec5[1] = fRec5[0]; + fRec7[2] = fRec7[1]; + fRec7[1] = fRec7[0]; fRec6[1] = fRec6[0]; - fRec9[2] = fRec9[1]; - fRec9[1] = fRec9[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; - fRec7[1] = fRec7[0]; fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec9[1] = fRec9[0]; + fRec11[2] = fRec11[1]; + fRec11[1] = fRec11[0]; fRec13[2] = fRec13[1]; fRec13[1] = fRec13[0]; fRec12[1] = fRec12[0]; - fRec11[1] = fRec11[0]; fRec14[2] = fRec14[1]; fRec14[1] = fRec14[0]; - fRec17[2] = fRec17[1]; - fRec17[1] = fRec17[0]; + fRec16[2] = fRec16[1]; fRec16[1] = fRec16[0]; fRec15[1] = fRec15[0]; - fRec18[2] = fRec18[1]; + fRec17[2] = fRec17[1]; + fRec17[1] = fRec17[0]; + fRec19[2] = fRec19[1]; + fRec19[1] = fRec19[0]; fRec18[1] = fRec18[0]; - fRec21[2] = fRec21[1]; - fRec21[1] = fRec21[0]; + fRec20[2] = fRec20[1]; fRec20[1] = fRec20[0]; - fRec19[1] = fRec19[0]; fRec22[2] = fRec22[1]; fRec22[1] = fRec22[0]; + fRec21[1] = fRec21[0]; + fRec23[2] = fRec23[1]; + fRec23[1] = fRec23[0]; fRec25[2] = fRec25[1]; fRec25[1] = fRec25[0]; fRec24[1] = fRec24[0]; - fRec23[1] = fRec23[0]; fRec26[2] = fRec26[1]; fRec26[1] = fRec26[0]; - fRec29[2] = fRec29[1]; - fRec29[1] = fRec29[0]; + fRec28[2] = fRec28[1]; fRec28[1] = fRec28[0]; fRec27[1] = fRec27[0]; - fRec30[2] = fRec30[1]; + fRec29[2] = fRec29[1]; + fRec29[1] = fRec29[0]; + fRec31[2] = fRec31[1]; + fRec31[1] = fRec31[0]; fRec30[1] = fRec30[0]; - fRec33[2] = fRec33[1]; - fRec33[1] = fRec33[0]; + fRec32[2] = fRec32[1]; fRec32[1] = fRec32[0]; - fRec31[1] = fRec31[0]; fRec34[2] = fRec34[1]; fRec34[1] = fRec34[0]; + fRec33[1] = fRec33[0]; + fRec35[2] = fRec35[1]; + fRec35[1] = fRec35[0]; fRec37[2] = fRec37[1]; fRec37[1] = fRec37[0]; fRec36[1] = fRec36[0]; - fRec35[1] = fRec35[0]; fRec38[2] = fRec38[1]; fRec38[1] = fRec38[0]; - fRec41[2] = fRec41[1]; - fRec41[1] = fRec41[0]; + fRec40[2] = fRec40[1]; fRec40[1] = fRec40[0]; fRec39[1] = fRec39[0]; - fRec42[2] = fRec42[1]; + fRec41[2] = fRec41[1]; + fRec41[1] = fRec41[0]; + fRec43[2] = fRec43[1]; + fRec43[1] = fRec43[0]; fRec42[1] = fRec42[0]; - fRec45[2] = fRec45[1]; - fRec45[1] = fRec45[0]; + fRec44[2] = fRec44[1]; fRec44[1] = fRec44[0]; - fRec43[1] = fRec43[0]; fRec46[2] = fRec46[1]; fRec46[1] = fRec46[0]; + fRec45[1] = fRec45[0]; + fRec47[2] = fRec47[1]; + fRec47[1] = fRec47[0]; fRec49[2] = fRec49[1]; fRec49[1] = fRec49[0]; fRec48[1] = fRec48[0]; - fRec47[1] = fRec47[0]; fRec50[2] = fRec50[1]; fRec50[1] = fRec50[0]; - fRec53[2] = fRec53[1]; - fRec53[1] = fRec53[0]; + fRec52[2] = fRec52[1]; fRec52[1] = fRec52[0]; fRec51[1] = fRec51[0]; - fRec54[2] = fRec54[1]; + fRec53[2] = fRec53[1]; + fRec53[1] = fRec53[0]; + fRec55[2] = fRec55[1]; + fRec55[1] = fRec55[0]; fRec54[1] = fRec54[0]; - fRec57[2] = fRec57[1]; - fRec57[1] = fRec57[0]; + fRec56[2] = fRec56[1]; fRec56[1] = fRec56[0]; - fRec55[1] = fRec55[0]; fRec58[2] = fRec58[1]; fRec58[1] = fRec58[0]; + fRec57[1] = fRec57[0]; + fRec59[2] = fRec59[1]; + fRec59[1] = fRec59[0]; fRec61[2] = fRec61[1]; fRec61[1] = fRec61[0]; fRec60[1] = fRec60[0]; - fRec59[1] = fRec59[0]; fRec62[2] = fRec62[1]; fRec62[1] = fRec62[0]; - fRec65[2] = fRec65[1]; - fRec65[1] = fRec65[0]; + fRec64[2] = fRec64[1]; fRec64[1] = fRec64[0]; fRec63[1] = fRec63[0]; - fRec66[2] = fRec66[1]; + fRec65[2] = fRec65[1]; + fRec65[1] = fRec65[0]; + fRec67[2] = fRec67[1]; + fRec67[1] = fRec67[0]; fRec66[1] = fRec66[0]; - fRec69[2] = fRec69[1]; - fRec69[1] = fRec69[0]; + fRec68[2] = fRec68[1]; fRec68[1] = fRec68[0]; - fRec67[1] = fRec67[0]; fRec70[2] = fRec70[1]; fRec70[1] = fRec70[0]; + fRec69[1] = fRec69[0]; + fRec71[2] = fRec71[1]; + fRec71[1] = fRec71[0]; fRec73[2] = fRec73[1]; fRec73[1] = fRec73[0]; fRec72[1] = fRec72[0]; - fRec71[1] = fRec71[0]; fRec74[2] = fRec74[1]; fRec74[1] = fRec74[0]; - fRec77[2] = fRec77[1]; - fRec77[1] = fRec77[0]; + fRec76[2] = fRec76[1]; fRec76[1] = fRec76[0]; fRec75[1] = fRec75[0]; - fRec78[2] = fRec78[1]; + fRec77[2] = fRec77[1]; + fRec77[1] = fRec77[0]; + fRec79[2] = fRec79[1]; + fRec79[1] = fRec79[0]; fRec78[1] = fRec78[0]; - fRec81[2] = fRec81[1]; - fRec81[1] = fRec81[0]; + fRec80[2] = fRec80[1]; fRec80[1] = fRec80[0]; - fRec79[1] = fRec79[0]; fRec82[2] = fRec82[1]; fRec82[1] = fRec82[0]; + fRec81[1] = fRec81[0]; + fRec83[2] = fRec83[1]; + fRec83[1] = fRec83[0]; fRec85[2] = fRec85[1]; fRec85[1] = fRec85[0]; fRec84[1] = fRec84[0]; - fRec83[1] = fRec83[0]; fRec86[2] = fRec86[1]; fRec86[1] = fRec86[0]; - fRec89[2] = fRec89[1]; - fRec89[1] = fRec89[0]; + fRec88[2] = fRec88[1]; fRec88[1] = fRec88[0]; fRec87[1] = fRec87[0]; - fRec90[2] = fRec90[1]; + fRec89[2] = fRec89[1]; + fRec89[1] = fRec89[0]; + fRec91[2] = fRec91[1]; + fRec91[1] = fRec91[0]; fRec90[1] = fRec90[0]; - fRec93[2] = fRec93[1]; - fRec93[1] = fRec93[0]; + fRec92[2] = fRec92[1]; fRec92[1] = fRec92[0]; - fRec91[1] = fRec91[0]; fRec94[2] = fRec94[1]; fRec94[1] = fRec94[0]; + fRec93[1] = fRec93[0]; + fRec95[2] = fRec95[1]; + fRec95[1] = fRec95[0]; fRec97[2] = fRec97[1]; fRec97[1] = fRec97[0]; fRec96[1] = fRec96[0]; - fRec95[1] = fRec95[0]; - fRec98[2] = fRec98[1]; - fRec98[1] = fRec98[0]; - fRec101[2] = fRec101[1]; - fRec101[1] = fRec101[0]; - fRec100[1] = fRec100[0]; - fRec99[1] = fRec99[0]; - fRec102[2] = fRec102[1]; - fRec102[1] = fRec102[0]; - fRec105[2] = fRec105[1]; - fRec105[1] = fRec105[0]; - fRec104[1] = fRec104[0]; - fRec103[1] = fRec103[0]; - fRec106[2] = fRec106[1]; - fRec106[1] = fRec106[0]; - fRec109[2] = fRec109[1]; - fRec109[1] = fRec109[0]; - fRec108[1] = fRec108[0]; - fRec107[1] = fRec107[0]; - fRec110[2] = fRec110[1]; - fRec110[1] = fRec110[0]; - fRec113[2] = fRec113[1]; - fRec113[1] = fRec113[0]; - fRec112[1] = fRec112[0]; - fRec111[1] = fRec111[0]; - fRec114[2] = fRec114[1]; - fRec114[1] = fRec114[0]; - fRec117[2] = fRec117[1]; - fRec117[1] = fRec117[0]; - fRec116[1] = fRec116[0]; - fRec115[1] = fRec115[0]; - fRec118[2] = fRec118[1]; - fRec118[1] = fRec118[0]; - fRec121[2] = fRec121[1]; - fRec121[1] = fRec121[0]; - fRec120[1] = fRec120[0]; - fRec119[1] = fRec119[0]; - fRec122[2] = fRec122[1]; - fRec122[1] = fRec122[0]; - fRec125[2] = fRec125[1]; - fRec125[1] = fRec125[0]; - fRec124[1] = fRec124[0]; - fRec123[1] = fRec123[0]; - fRec126[2] = fRec126[1]; - fRec126[1] = fRec126[0]; - fRec129[2] = fRec129[1]; - fRec129[1] = fRec129[0]; - fRec128[1] = fRec128[0]; - fRec127[1] = fRec127[0]; } } diff --git a/ceammc/ext/src/fx/fx_wahwah.h b/ceammc/ext/src/fx/fx_wahwah.h index 499d02476d..4754a260e8 100644 --- a/ceammc/ext/src/fx/fx_wahwah.h +++ b/ceammc/ext/src/fx/fx_wahwah.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.wahwah" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_wahwah -scn fx_wahwah_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_wahwah_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_wahwah_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_wahwah_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_wahwah_dsp { +class FAUST_API fx_wahwah_dsp { public: @@ -162,7 +247,7 @@ class fx_wahwah_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_wahwah_dsp { +class FAUST_API decorator_dsp : public fx_wahwah_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_wahwah_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_wahwah_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_wahwah_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,6 +627,21 @@ struct fx_wahwah : public fx_wahwah_dsp { #include #include +#ifndef FAUSTCLASS +#define FAUSTCLASS fx_wahwah +#endif + +#ifdef __APPLE__ +#define exp10f __exp10f +#define exp10 __exp10 +#endif + +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + class fx_wahwahSIG0 { private: @@ -567,7 +660,7 @@ class fx_wahwahSIG0 { } void fillfx_wahwahSIG0(int count, float* table) { - for (int i1 = 0; (i1 < count); i1 = (i1 + 1)) { + for (int i1 = 0; i1 < count; i1 = i1 + 1) { table[i1] = 0.0f; } } @@ -578,18 +671,9 @@ static fx_wahwahSIG0* newfx_wahwahSIG0() { return (fx_wahwahSIG0*)new fx_wahwahS static void deletefx_wahwahSIG0(fx_wahwahSIG0* dsp) { delete dsp; } static float fx_wahwah_faustpower2_f(float value) { - return (value * value); + return value * value; } -#ifndef FAUSTCLASS -#define FAUSTCLASS fx_wahwah -#endif - -#ifdef __APPLE__ -#define exp10f __exp10f -#define exp10 __exp10 -#endif - class fx_wahwah : public fx_wahwah_dsp { private: @@ -621,13 +705,14 @@ class fx_wahwah : public fx_wahwah_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass1:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_wahwah -scn fx_wahwah_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "fx_wahwah.dsp"); m->declare("filters.lib/fir:author", "Julius O. Smith III"); m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -635,7 +720,7 @@ class fx_wahwah : public fx_wahwah_dsp { m->declare("filters.lib/iir:author", "Julius O. Smith III"); m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/name", "Faust Filters Library"); m->declare("filters.lib/tf2:author", "Julius O. Smith III"); m->declare("filters.lib/tf2:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -650,7 +735,7 @@ class fx_wahwah : public fx_wahwah_dsp { m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); m->declare("vaeffects.lib/name", "Faust Virtual Analog Filter Effect Library"); m->declare("vaeffects.lib/version", "0.2"); } @@ -667,60 +752,60 @@ class fx_wahwah : public fx_wahwah_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; fx_wahwahSIG0* sig0 = newfx_wahwahSIG0(); sig0->instanceInitfx_wahwahSIG0(sample_rate); sig0->fillfx_wahwahSIG0(16, ftbl0); - fConst3 = (60.0f * fConst0); - fConst4 = (1413.71667f / fConst0); - fConst5 = (2827.43335f / fConst0); + fConst3 = 6e+01f * fConst0; + fConst4 = 1413.7167f / fConst0; + fConst5 = 2827.4333f / fConst0; deletefx_wahwahSIG0(sig0); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fHslider1 = FAUSTFLOAT(0.59999999999999998f); - fHslider2 = FAUSTFLOAT(540.0f); + fHslider1 = FAUSTFLOAT(0.6f); + fHslider2 = FAUSTFLOAT(5.4e+02f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { iVec0[l0] = 0; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fVec1[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec4[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { iRec3[l4] = 0; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { iVec2[l5] = 0; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec5[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { iRec6[l7] = 0; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec2[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec7[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fRec8[l10] = 0.0f; } - for (int l11 = 0; (l11 < 3); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 3; l11 = l11 + 1) { fRec1[l11] = 0.0f; } } @@ -745,46 +830,44 @@ class fx_wahwah : public fx_wahwah_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.wahwah"); - ui_interface->addHorizontalSlider("angle", &fHslider1, FAUSTFLOAT(0.600000024f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("angle", &fHslider1, FAUSTFLOAT(0.6f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->addCheckButton("bypass", &fCheckbox0); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider2, "unit", "bpm"); - ui_interface->addHorizontalSlider("speed", &fHslider2, FAUSTFLOAT(540.0f), FAUSTFLOAT(360.0f), FAUSTFLOAT(780.0f), FAUSTFLOAT(0.100000001f)); + ui_interface->addHorizontalSlider("speed", &fHslider2, FAUSTFLOAT(5.4e+02f), FAUSTFLOAT(3.6e+02f), FAUSTFLOAT(7.8e+02f), FAUSTFLOAT(0.1f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); + float fSlow1 = fConst1 * float(fHslider0); float fSlow2 = float(fHslider1); - float fSlow3 = (fConst1 * float(fHslider2)); - int iSlow4 = (fSlow2 <= 0.0f); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow3 = fConst1 * float(fHslider2); + int iSlow4 = fSlow2 <= 0.0f; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); iVec0[0] = 1; - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; fVec1[0] = fSlow2; - fRec4[0] = (fSlow3 + (fConst2 * fRec4[1])); - iRec3[0] = ((iVec0[1] + iRec3[1]) % int((fConst3 / float(int(fRec4[0]))))); - int iTemp2 = (iRec3[0] <= iRec3[1]); + fRec4[0] = fSlow3 + fConst2 * fRec4[1]; + iRec3[0] = (iVec0[1] + iRec3[1]) % int(fConst3 / float(int(fRec4[0]))); + int iTemp2 = iRec3[0] <= iRec3[1]; iVec2[0] = iTemp2; - float fThen1 = (std::fabs((fSlow2 - fVec1[1])) + fRec5[1]); - fRec5[0] = (iVec2[1] ? 0.0f : fThen1); - iRec6[0] = ((iTemp2 + iRec6[1]) % 15); + fRec5[0] = ((iVec2[1]) ? 0.0f : std::fabs(fSlow2 - fVec1[1]) + fRec5[1]); + iRec6[0] = (iTemp2 + iRec6[1]) % 15; ftbl0[((iTemp2 & ((fRec5[0] > 0.0f) | iSlow4)) ? iRec6[0] : 15)] = fSlow2; float fTemp3 = ftbl0[iRec6[0]]; - fRec2[0] = ((0.999000013f * fRec2[1]) + (9.99999975e-05f * std::pow(4.0f, fTemp3))); - float fTemp4 = std::pow(2.0f, (2.29999995f * fTemp3)); - float fTemp5 = (1.0f - (fConst4 * (fTemp4 / std::pow(2.0f, ((2.0f * (1.0f - fTemp3)) + 1.0f))))); - fRec7[0] = ((0.999000013f * fRec7[1]) - (0.00200000009f * (fTemp5 * std::cos((fConst5 * fTemp4))))); - fRec8[0] = ((0.999000013f * fRec8[1]) + (0.00100000005f * fx_wahwah_faustpower2_f(fTemp5))); - fRec1[0] = ((fRec2[0] * fTemp1) - ((fRec7[0] * fRec1[1]) + (fRec8[0] * fRec1[2]))); - float fThen3 = ((fTemp1 * (1.0f - fRec0[0])) + (fRec0[0] * (fRec1[0] - fRec1[1]))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen3)); + fRec2[0] = 0.0001f * std::pow(4.0f, fTemp3) + 0.999f * fRec2[1]; + float fTemp4 = std::pow(2.0f, 2.3f * fTemp3); + float fTemp5 = 1.0f - fConst4 * (fTemp4 / std::pow(2.0f, 2.0f * (1.0f - fTemp3) + 1.0f)); + fRec7[0] = 0.999f * fRec7[1] - 0.002f * fTemp5 * std::cos(fConst5 * fTemp4); + fRec8[0] = 0.001f * fx_wahwah_faustpower2_f(fTemp5) + 0.999f * fRec8[1]; + fRec1[0] = fRec2[0] * fTemp1 - (fRec7[0] * fRec1[1] + fRec8[0] * fRec1[2]); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * (1.0f - fRec0[0]) + fRec0[0] * (fRec1[0] - fRec1[1]))); iVec0[1] = iVec0[0]; fRec0[1] = fRec0[0]; fVec1[1] = fVec1[0]; diff --git a/ceammc/ext/src/fx/fx_zita_rev1.cpp b/ceammc/ext/src/fx/fx_zita_rev1.cpp index fbe24dbe58..eb26fc7f82 100644 --- a/ceammc/ext/src/fx/fx_zita_rev1.cpp +++ b/ceammc/ext/src/fx/fx_zita_rev1.cpp @@ -8,10 +8,7 @@ class FxZitaRev1 : public faust_fx_zita_rev1_tilde { FxZitaRev1(const PdArgs& args) : faust_fx_zita_rev1_tilde(args) { - static t_symbol* SYM_PROP_DECAY_LOW = gensym("@decay_low"); - static t_symbol* SYM_PROP_DECAY_MID = gensym("@decay_mid"); - - bindPositionalArgsToProps({ SYM_PROP_DECAY_LOW, SYM_PROP_DECAY_MID }); + bindPositionalArgsToProps({ gensym("@decay_low"), gensym("@decay_mid"), gensym("@drywet") }); } }; diff --git a/ceammc/ext/src/fx/fx_zita_rev1.h b/ceammc/ext/src/fx/fx_zita_rev1.h index 84c65468c6..af4f25b21a 100644 --- a/ceammc/ext/src/fx/fx_zita_rev1.h +++ b/ceammc/ext/src/fx/fx_zita_rev1.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "fx.zita_rev1" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_zita_rev1 -scn fx_zita_rev1_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __fx_zita_rev1_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN fx_zita_rev1_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN fx_zita_rev1_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class fx_zita_rev1_dsp { +class FAUST_API fx_zita_rev1_dsp { public: @@ -162,7 +247,7 @@ class fx_zita_rev1_dsp { * Generic DSP decorator. */ -class decorator_dsp : public fx_zita_rev1_dsp { +class FAUST_API decorator_dsp : public fx_zita_rev1_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public fx_zita_rev1_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; + #else + intptr_t mask = 0x8000; + #endif #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END fx_zita_rev1_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in fx_zita_rev1_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,10 +627,6 @@ struct fx_zita_rev1 : public fx_zita_rev1_dsp { #include #include -static float fx_zita_rev1_faustpower2_f(float value) { - return (value * value); -} - #ifndef FAUSTCLASS #define FAUSTCLASS fx_zita_rev1 #endif @@ -562,6 +636,16 @@ static float fx_zita_rev1_faustpower2_f(float value) { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + +static float fx_zita_rev1_faustpower2_f(float value) { + return value * value; +} + class fx_zita_rev1 : public fx_zita_rev1_dsp { private: @@ -572,20 +656,20 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { FAUSTFLOAT fHslider0; float fConst2; float fRec0[2]; - float fConst3; + float fConst4; + FAUSTFLOAT fCheckbox1; FAUSTFLOAT fVslider0; + FAUSTFLOAT fHslider1; float fConst5; - FAUSTFLOAT fCheckbox1; FAUSTFLOAT fVslider1; - FAUSTFLOAT fHslider1; float fConst6; FAUSTFLOAT fVslider2; float fRec12[2]; FAUSTFLOAT fVslider3; FAUSTFLOAT fHslider2; float fRec11[2]; - int IOTA; - float fVec0[65536]; + int IOTA0; + float fVec0[32768]; int iConst8; FAUSTFLOAT fHslider3; float fConst9; @@ -594,13 +678,13 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { float fConst10; FAUSTFLOAT fVslider4; float fRec14[2]; - float fVec2[4096]; + float fVec2[8192]; int iConst11; float fRec9[2]; float fConst13; float fRec18[2]; float fRec17[2]; - float fVec3[65536]; + float fVec3[32768]; int iConst15; float fVec4[8192]; int iConst16; @@ -608,18 +692,18 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { float fConst18; float fRec22[2]; float fRec21[2]; - float fVec5[32768]; + float fVec5[65536]; int iConst20; - float fVec6[8192]; + float fVec6[16384]; + float fVec7[8192]; int iConst21; float fRec19[2]; float fConst23; float fRec26[2]; float fRec25[2]; - float fVec7[32768]; + float fVec8[32768]; int iConst25; - float fVec8[16384]; - float fVec9[8192]; + float fVec9[4096]; int iConst26; float fRec23[2]; float fConst28; @@ -627,21 +711,21 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { float fRec29[2]; float fVec10[32768]; int iConst30; - float fVec11[8192]; + float fVec11[4096]; int iConst31; float fRec27[2]; float fConst33; float fRec34[2]; float fRec33[2]; - float fVec12[32768]; + float fVec12[65536]; int iConst35; - float fVec13[4096]; + float fVec13[8192]; int iConst36; float fRec31[2]; float fConst38; float fRec38[2]; float fRec37[2]; - float fVec14[65536]; + float fVec14[32768]; int iConst40; float fVec15[8192]; int iConst41; @@ -649,7 +733,7 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { float fConst43; float fRec42[2]; float fRec41[2]; - float fVec16[32768]; + float fVec16[65536]; int iConst45; float fVec17[4096]; int iConst46; @@ -666,20 +750,21 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { public: void metadata(Meta* m) { + m->declare("basics.lib/bypass2:author", "Julius Smith"); m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc.lib/name", "Ceammc PureData misc utils"); m->declare("ceammc.lib/version", "0.1.2"); m->declare("ceammc_ui.lib/name", "CEAMMC faust default UI elements"); m->declare("ceammc_ui.lib/version", "0.1.2"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn fx_zita_rev1 -scn fx_zita_rev1_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("delays.lib/name", "Faust Delay Library"); m->declare("delays.lib/version", "0.1"); m->declare("filename", "fx_zita_rev1.dsp"); m->declare("filters.lib/allpass_comb:author", "Julius O. Smith III"); m->declare("filters.lib/allpass_comb:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/allpass_comb:license", "MIT-style STK-4.3 license"); - m->declare("filters.lib/lowpass0_highpass1", "MIT-style STK-4.3 license"); + m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III "); m->declare("filters.lib/lowpass0_highpass1:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:author", "Julius O. Smith III"); m->declare("filters.lib/lowpass:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III "); @@ -702,10 +787,11 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { m->declare("platform.lib/version", "0.2"); m->declare("reverbs.lib/name", "Faust Reverb Library"); m->declare("reverbs.lib/version", "0.2"); + m->declare("routes.lib/hadamard:author", "Remy Muller, revised by Romain Michon"); m->declare("routes.lib/name", "Faust Signal Routing Library"); m->declare("routes.lib/version", "0.2"); m->declare("signals.lib/name", "Faust Signal Routing Library"); - m->declare("signals.lib/version", "0.1"); + m->declare("signals.lib/version", "0.3"); } virtual int getNumInputs() { @@ -720,228 +806,228 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (44.0999985f / fConst0); - fConst2 = (1.0f - fConst1); - fConst3 = (6.28318548f / fConst0); - float fConst4 = std::floor(((0.219990999f * fConst0) + 0.5f)); - fConst5 = ((0.0f - (6.90775537f * fConst4)) / fConst0); - fConst6 = (3.14159274f / fConst0); - float fConst7 = std::floor(((0.0191229992f * fConst0) + 0.5f)); - iConst8 = int(std::min(32768.0f, std::max(0.0f, (fConst4 - fConst7)))); - fConst9 = (1.0f / fConst0); - fConst10 = (0.00100000005f * fConst0); - iConst11 = int(std::min(2048.0f, std::max(0.0f, (fConst7 + -1.0f)))); - float fConst12 = std::floor(((0.256891012f * fConst0) + 0.5f)); - fConst13 = ((0.0f - (6.90775537f * fConst12)) / fConst0); - float fConst14 = std::floor(((0.0273330007f * fConst0) + 0.5f)); - iConst15 = int(std::min(32768.0f, std::max(0.0f, (fConst12 - fConst14)))); - iConst16 = int(std::min(4096.0f, std::max(0.0f, (fConst14 + -1.0f)))); - float fConst17 = std::floor(((0.192303002f * fConst0) + 0.5f)); - fConst18 = ((0.0f - (6.90775537f * fConst17)) / fConst0); - float fConst19 = std::floor(((0.0292910002f * fConst0) + 0.5f)); - iConst20 = int(std::min(16384.0f, std::max(0.0f, (fConst17 - fConst19)))); - iConst21 = int(std::min(4096.0f, std::max(0.0f, (fConst19 + -1.0f)))); - float fConst22 = std::floor(((0.127837002f * fConst0) + 0.5f)); - fConst23 = ((0.0f - (6.90775537f * fConst22)) / fConst0); - float fConst24 = std::floor(((0.0316039994f * fConst0) + 0.5f)); - iConst25 = int(std::min(16384.0f, std::max(0.0f, (fConst22 - fConst24)))); - iConst26 = int(std::min(4096.0f, std::max(0.0f, (fConst24 + -1.0f)))); - float fConst27 = std::floor(((0.174713001f * fConst0) + 0.5f)); - fConst28 = ((0.0f - (6.90775537f * fConst27)) / fConst0); - float fConst29 = std::floor(((0.0229039993f * fConst0) + 0.5f)); - iConst30 = int(std::min(16384.0f, std::max(0.0f, (fConst27 - fConst29)))); - iConst31 = int(std::min(4096.0f, std::max(0.0f, (fConst29 + -1.0f)))); - float fConst32 = std::floor(((0.153128996f * fConst0) + 0.5f)); - fConst33 = ((0.0f - (6.90775537f * fConst32)) / fConst0); - float fConst34 = std::floor(((0.0203460008f * fConst0) + 0.5f)); - iConst35 = int(std::min(16384.0f, std::max(0.0f, (fConst32 - fConst34)))); - iConst36 = int(std::min(2048.0f, std::max(0.0f, (fConst34 + -1.0f)))); - float fConst37 = std::floor(((0.210389003f * fConst0) + 0.5f)); - fConst38 = ((0.0f - (6.90775537f * fConst37)) / fConst0); - float fConst39 = std::floor(((0.0244210009f * fConst0) + 0.5f)); - iConst40 = int(std::min(32768.0f, std::max(0.0f, (fConst37 - fConst39)))); - iConst41 = int(std::min(4096.0f, std::max(0.0f, (fConst39 + -1.0f)))); - float fConst42 = std::floor(((0.125f * fConst0) + 0.5f)); - fConst43 = ((0.0f - (6.90775537f * fConst42)) / fConst0); - float fConst44 = std::floor(((0.0134579996f * fConst0) + 0.5f)); - iConst45 = int(std::min(16384.0f, std::max(0.0f, (fConst42 - fConst44)))); - iConst46 = int(std::min(2048.0f, std::max(0.0f, (fConst44 + -1.0f)))); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 44.1f / fConst0; + fConst2 = 1.0f - fConst1; + float fConst3 = std::floor(0.127837f * fConst0 + 0.5f); + fConst4 = (0.0f - 6.9077554f * fConst3) / fConst0; + fConst5 = 6.2831855f / fConst0; + fConst6 = 3.1415927f / fConst0; + float fConst7 = std::floor(0.031604f * fConst0 + 0.5f); + iConst8 = int(std::min(16384.0f, std::max(0.0f, fConst3 - fConst7))); + fConst9 = 1.0f / fConst0; + fConst10 = 0.001f * fConst0; + iConst11 = int(std::min(4096.0f, std::max(0.0f, fConst7 + -1.0f))); + float fConst12 = std::floor(0.174713f * fConst0 + 0.5f); + fConst13 = (0.0f - 6.9077554f * fConst12) / fConst0; + float fConst14 = std::floor(0.022904f * fConst0 + 0.5f); + iConst15 = int(std::min(16384.0f, std::max(0.0f, fConst12 - fConst14))); + iConst16 = int(std::min(4096.0f, std::max(0.0f, fConst14 + -1.0f))); + float fConst17 = std::floor(0.210389f * fConst0 + 0.5f); + fConst18 = (0.0f - 6.9077554f * fConst17) / fConst0; + float fConst19 = std::floor(0.024421f * fConst0 + 0.5f); + iConst20 = int(std::min(32768.0f, std::max(0.0f, fConst17 - fConst19))); + iConst21 = int(std::min(4096.0f, std::max(0.0f, fConst19 + -1.0f))); + float fConst22 = std::floor(0.125f * fConst0 + 0.5f); + fConst23 = (0.0f - 6.9077554f * fConst22) / fConst0; + float fConst24 = std::floor(0.013458f * fConst0 + 0.5f); + iConst25 = int(std::min(16384.0f, std::max(0.0f, fConst22 - fConst24))); + iConst26 = int(std::min(2048.0f, std::max(0.0f, fConst24 + -1.0f))); + float fConst27 = std::floor(0.153129f * fConst0 + 0.5f); + fConst28 = (0.0f - 6.9077554f * fConst27) / fConst0; + float fConst29 = std::floor(0.020346f * fConst0 + 0.5f); + iConst30 = int(std::min(16384.0f, std::max(0.0f, fConst27 - fConst29))); + iConst31 = int(std::min(2048.0f, std::max(0.0f, fConst29 + -1.0f))); + float fConst32 = std::floor(0.256891f * fConst0 + 0.5f); + fConst33 = (0.0f - 6.9077554f * fConst32) / fConst0; + float fConst34 = std::floor(0.027333f * fConst0 + 0.5f); + iConst35 = int(std::min(32768.0f, std::max(0.0f, fConst32 - fConst34))); + iConst36 = int(std::min(4096.0f, std::max(0.0f, fConst34 + -1.0f))); + float fConst37 = std::floor(0.192303f * fConst0 + 0.5f); + fConst38 = (0.0f - 6.9077554f * fConst37) / fConst0; + float fConst39 = std::floor(0.029291f * fConst0 + 0.5f); + iConst40 = int(std::min(16384.0f, std::max(0.0f, fConst37 - fConst39))); + iConst41 = int(std::min(4096.0f, std::max(0.0f, fConst39 + -1.0f))); + float fConst42 = std::floor(0.219991f * fConst0 + 0.5f); + fConst43 = (0.0f - 6.9077554f * fConst42) / fConst0; + float fConst44 = std::floor(0.019123f * fConst0 + 0.5f); + iConst45 = int(std::min(32768.0f, std::max(0.0f, fConst42 - fConst44))); + iConst46 = int(std::min(2048.0f, std::max(0.0f, fConst44 + -1.0f))); } virtual void instanceResetUserInterface() { fCheckbox0 = FAUSTFLOAT(0.0f); fHslider0 = FAUSTFLOAT(1.0f); - fVslider0 = FAUSTFLOAT(6000.0f); fCheckbox1 = FAUSTFLOAT(0.0f); - fVslider1 = FAUSTFLOAT(2.0f); - fHslider1 = FAUSTFLOAT(40.0f); - fVslider2 = FAUSTFLOAT(200.0f); + fVslider0 = FAUSTFLOAT(2.0f); + fHslider1 = FAUSTFLOAT(4e+01f); + fVslider1 = FAUSTFLOAT(6e+03f); + fVslider2 = FAUSTFLOAT(2e+02f); fVslider3 = FAUSTFLOAT(3.0f); - fHslider2 = FAUSTFLOAT(40.0f); - fHslider3 = FAUSTFLOAT(100.0f); - fVslider4 = FAUSTFLOAT(60.0f); + fHslider2 = FAUSTFLOAT(4e+01f); + fHslider3 = FAUSTFLOAT(1e+02f); + fVslider4 = FAUSTFLOAT(4e+01f); } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec12[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec11[l2] = 0.0f; } - IOTA = 0; - for (int l3 = 0; (l3 < 65536); l3 = (l3 + 1)) { + IOTA0 = 0; + for (int l3 = 0; l3 < 32768; l3 = l3 + 1) { fVec0[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fRec13[l4] = 0.0f; } - for (int l5 = 0; (l5 < 16384); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 16384; l5 = l5 + 1) { fVec1[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec14[l6] = 0.0f; } - for (int l7 = 0; (l7 < 4096); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 8192; l7 = l7 + 1) { fVec2[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec9[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec18[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fRec17[l10] = 0.0f; } - for (int l11 = 0; (l11 < 65536); l11 = (l11 + 1)) { + for (int l11 = 0; l11 < 32768; l11 = l11 + 1) { fVec3[l11] = 0.0f; } - for (int l12 = 0; (l12 < 8192); l12 = (l12 + 1)) { + for (int l12 = 0; l12 < 8192; l12 = l12 + 1) { fVec4[l12] = 0.0f; } - for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) { + for (int l13 = 0; l13 < 2; l13 = l13 + 1) { fRec15[l13] = 0.0f; } - for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) { + for (int l14 = 0; l14 < 2; l14 = l14 + 1) { fRec22[l14] = 0.0f; } - for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) { + for (int l15 = 0; l15 < 2; l15 = l15 + 1) { fRec21[l15] = 0.0f; } - for (int l16 = 0; (l16 < 32768); l16 = (l16 + 1)) { + for (int l16 = 0; l16 < 65536; l16 = l16 + 1) { fVec5[l16] = 0.0f; } - for (int l17 = 0; (l17 < 8192); l17 = (l17 + 1)) { + for (int l17 = 0; l17 < 16384; l17 = l17 + 1) { fVec6[l17] = 0.0f; } - for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) { - fRec19[l18] = 0.0f; + for (int l18 = 0; l18 < 8192; l18 = l18 + 1) { + fVec7[l18] = 0.0f; } - for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) { - fRec26[l19] = 0.0f; + for (int l19 = 0; l19 < 2; l19 = l19 + 1) { + fRec19[l19] = 0.0f; } - for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) { - fRec25[l20] = 0.0f; + for (int l20 = 0; l20 < 2; l20 = l20 + 1) { + fRec26[l20] = 0.0f; } - for (int l21 = 0; (l21 < 32768); l21 = (l21 + 1)) { - fVec7[l21] = 0.0f; + for (int l21 = 0; l21 < 2; l21 = l21 + 1) { + fRec25[l21] = 0.0f; } - for (int l22 = 0; (l22 < 16384); l22 = (l22 + 1)) { + for (int l22 = 0; l22 < 32768; l22 = l22 + 1) { fVec8[l22] = 0.0f; } - for (int l23 = 0; (l23 < 8192); l23 = (l23 + 1)) { + for (int l23 = 0; l23 < 4096; l23 = l23 + 1) { fVec9[l23] = 0.0f; } - for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) { + for (int l24 = 0; l24 < 2; l24 = l24 + 1) { fRec23[l24] = 0.0f; } - for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) { + for (int l25 = 0; l25 < 2; l25 = l25 + 1) { fRec30[l25] = 0.0f; } - for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) { + for (int l26 = 0; l26 < 2; l26 = l26 + 1) { fRec29[l26] = 0.0f; } - for (int l27 = 0; (l27 < 32768); l27 = (l27 + 1)) { + for (int l27 = 0; l27 < 32768; l27 = l27 + 1) { fVec10[l27] = 0.0f; } - for (int l28 = 0; (l28 < 8192); l28 = (l28 + 1)) { + for (int l28 = 0; l28 < 4096; l28 = l28 + 1) { fVec11[l28] = 0.0f; } - for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) { + for (int l29 = 0; l29 < 2; l29 = l29 + 1) { fRec27[l29] = 0.0f; } - for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) { + for (int l30 = 0; l30 < 2; l30 = l30 + 1) { fRec34[l30] = 0.0f; } - for (int l31 = 0; (l31 < 2); l31 = (l31 + 1)) { + for (int l31 = 0; l31 < 2; l31 = l31 + 1) { fRec33[l31] = 0.0f; } - for (int l32 = 0; (l32 < 32768); l32 = (l32 + 1)) { + for (int l32 = 0; l32 < 65536; l32 = l32 + 1) { fVec12[l32] = 0.0f; } - for (int l33 = 0; (l33 < 4096); l33 = (l33 + 1)) { + for (int l33 = 0; l33 < 8192; l33 = l33 + 1) { fVec13[l33] = 0.0f; } - for (int l34 = 0; (l34 < 2); l34 = (l34 + 1)) { + for (int l34 = 0; l34 < 2; l34 = l34 + 1) { fRec31[l34] = 0.0f; } - for (int l35 = 0; (l35 < 2); l35 = (l35 + 1)) { + for (int l35 = 0; l35 < 2; l35 = l35 + 1) { fRec38[l35] = 0.0f; } - for (int l36 = 0; (l36 < 2); l36 = (l36 + 1)) { + for (int l36 = 0; l36 < 2; l36 = l36 + 1) { fRec37[l36] = 0.0f; } - for (int l37 = 0; (l37 < 65536); l37 = (l37 + 1)) { + for (int l37 = 0; l37 < 32768; l37 = l37 + 1) { fVec14[l37] = 0.0f; } - for (int l38 = 0; (l38 < 8192); l38 = (l38 + 1)) { + for (int l38 = 0; l38 < 8192; l38 = l38 + 1) { fVec15[l38] = 0.0f; } - for (int l39 = 0; (l39 < 2); l39 = (l39 + 1)) { + for (int l39 = 0; l39 < 2; l39 = l39 + 1) { fRec35[l39] = 0.0f; } - for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) { + for (int l40 = 0; l40 < 2; l40 = l40 + 1) { fRec42[l40] = 0.0f; } - for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) { + for (int l41 = 0; l41 < 2; l41 = l41 + 1) { fRec41[l41] = 0.0f; } - for (int l42 = 0; (l42 < 32768); l42 = (l42 + 1)) { + for (int l42 = 0; l42 < 65536; l42 = l42 + 1) { fVec16[l42] = 0.0f; } - for (int l43 = 0; (l43 < 4096); l43 = (l43 + 1)) { + for (int l43 = 0; l43 < 4096; l43 = l43 + 1) { fVec17[l43] = 0.0f; } - for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) { + for (int l44 = 0; l44 < 2; l44 = l44 + 1) { fRec39[l44] = 0.0f; } - for (int l45 = 0; (l45 < 3); l45 = (l45 + 1)) { + for (int l45 = 0; l45 < 3; l45 = l45 + 1) { fRec1[l45] = 0.0f; } - for (int l46 = 0; (l46 < 3); l46 = (l46 + 1)) { + for (int l46 = 0; l46 < 3; l46 = l46 + 1) { fRec2[l46] = 0.0f; } - for (int l47 = 0; (l47 < 3); l47 = (l47 + 1)) { + for (int l47 = 0; l47 < 3; l47 = l47 + 1) { fRec3[l47] = 0.0f; } - for (int l48 = 0; (l48 < 3); l48 = (l48 + 1)) { + for (int l48 = 0; l48 < 3; l48 = l48 + 1) { fRec4[l48] = 0.0f; } - for (int l49 = 0; (l49 < 3); l49 = (l49 + 1)) { + for (int l49 = 0; l49 < 3; l49 = l49 + 1) { fRec5[l49] = 0.0f; } - for (int l50 = 0; (l50 < 3); l50 = (l50 + 1)) { + for (int l50 = 0; l50 < 3; l50 = l50 + 1) { fRec6[l50] = 0.0f; } - for (int l51 = 0; (l51 < 3); l51 = (l51 + 1)) { + for (int l51 = 0; l51 < 3; l51 = l51 + 1) { fRec7[l51] = 0.0f; } - for (int l52 = 0; (l52 < 3); l52 = (l52 + 1)) { + for (int l52 = 0; l52 < 3; l52 = l52 + 1) { fRec8[l52] = 0.0f; } } @@ -967,227 +1053,223 @@ class fx_zita_rev1 : public fx_zita_rev1_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("fx.zita_rev1"); ui_interface->addCheckButton("bypass", &fCheckbox0); - ui_interface->declare(&fVslider0, "scale", "log"); - ui_interface->declare(&fVslider0, "style", "knob"); - ui_interface->declare(&fVslider0, "unit", "Hz"); - ui_interface->addVerticalSlider("damp_hf", &fVslider0, FAUSTFLOAT(6000.0f), FAUSTFLOAT(1500.0f), FAUSTFLOAT(47040.0f), FAUSTFLOAT(1.0f)); + ui_interface->declare(&fVslider1, "scale", "log"); + ui_interface->declare(&fVslider1, "style", "knob"); + ui_interface->declare(&fVslider1, "unit", "Hz"); + ui_interface->addVerticalSlider("damp_hf", &fVslider1, FAUSTFLOAT(6e+03f), FAUSTFLOAT(1.5e+03f), FAUSTFLOAT(4.704e+04f), FAUSTFLOAT(1.0f)); ui_interface->declare(&fVslider3, "scale", "log"); ui_interface->declare(&fVslider3, "style", "knob"); ui_interface->declare(&fVslider3, "unit", "sec"); - ui_interface->addVerticalSlider("decay_low", &fVslider3, FAUSTFLOAT(3.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider1, "scale", "log"); - ui_interface->declare(&fVslider1, "style", "knob"); - ui_interface->declare(&fVslider1, "unit", "sec"); - ui_interface->addVerticalSlider("decay_mid", &fVslider1, FAUSTFLOAT(2.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.100000001f)); - ui_interface->declare(&fVslider4, "style", "knob"); - ui_interface->declare(&fVslider4, "unit", "ms"); - ui_interface->addVerticalSlider("delay", &fVslider4, FAUSTFLOAT(60.0f), FAUSTFLOAT(20.0f), FAUSTFLOAT(100.0f), FAUSTFLOAT(1.0f)); + ui_interface->addVerticalSlider("decay_low", &fVslider3, FAUSTFLOAT(3.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.1f)); + ui_interface->declare(&fVslider0, "scale", "log"); + ui_interface->declare(&fVslider0, "style", "knob"); + ui_interface->declare(&fVslider0, "unit", "sec"); + ui_interface->addVerticalSlider("decay_mid", &fVslider0, FAUSTFLOAT(2.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.1f)); ui_interface->declare(&fHslider0, "style", "knob"); - ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("drywet", &fHslider0, FAUSTFLOAT(1.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->declare(&fHslider2, "style", "knob"); ui_interface->declare(&fHslider2, "unit", "sec"); - ui_interface->addHorizontalSlider("fr_ldecay", &fHslider2, FAUSTFLOAT(40.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("fr_ldecay", &fHslider2, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider1, "style", "knob"); ui_interface->declare(&fHslider1, "unit", "sec"); - ui_interface->addHorizontalSlider("fr_mdecay", &fHslider1, FAUSTFLOAT(40.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(60.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("fr_mdecay", &fHslider1, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(6e+01f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fHslider3, "style", "knob"); ui_interface->declare(&fHslider3, "unit", "ms"); - ui_interface->addHorizontalSlider("fr_time", &fHslider3, FAUSTFLOAT(100.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("fr_time", &fHslider3, FAUSTFLOAT(1e+02f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fCheckbox1, "type", "bool"); ui_interface->addCheckButton("freeze", &fCheckbox1); ui_interface->declare(&fVslider2, "scale", "log"); ui_interface->declare(&fVslider2, "style", "knob"); ui_interface->declare(&fVslider2, "unit", "Hz"); - ui_interface->addVerticalSlider("freq_low", &fVslider2, FAUSTFLOAT(200.0f), FAUSTFLOAT(50.0f), FAUSTFLOAT(1000.0f), FAUSTFLOAT(1.0f)); + ui_interface->addVerticalSlider("freq_low", &fVslider2, FAUSTFLOAT(2e+02f), FAUSTFLOAT(5e+01f), FAUSTFLOAT(1e+03f), FAUSTFLOAT(1.0f)); + ui_interface->declare(&fVslider4, "style", "knob"); + ui_interface->declare(&fVslider4, "unit", "ms"); + ui_interface->addVerticalSlider("predelay", &fVslider4, FAUSTFLOAT(4e+01f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1e+02f), FAUSTFLOAT(1.0f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* input1 = inputs[1]; FAUSTFLOAT* output0 = outputs[0]; FAUSTFLOAT* output1 = outputs[1]; int iSlow0 = int(float(fCheckbox0)); - float fSlow1 = (fConst1 * float(fHslider0)); - float fSlow2 = std::cos((fConst3 * float(fVslider0))); - int iSlow3 = int(float(fCheckbox1)); - float fThen1 = float(fVslider1); - float fElse1 = float(fHslider1); - float fSlow4 = (iSlow3 ? fElse1 : fThen1); - float fSlow5 = std::exp((fConst5 / fSlow4)); - float fSlow6 = fx_zita_rev1_faustpower2_f(fSlow5); - float fSlow7 = (1.0f - (fSlow2 * fSlow6)); - float fSlow8 = (1.0f - fSlow6); - float fSlow9 = (fSlow7 / fSlow8); - float fSlow10 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow7) / fx_zita_rev1_faustpower2_f(fSlow8)) + -1.0f))); - float fSlow11 = (fSlow9 - fSlow10); - float fSlow12 = (1.0f / std::tan((fConst6 * float(fVslider2)))); - float fSlow13 = (1.0f / (fSlow12 + 1.0f)); - float fSlow14 = (1.0f - fSlow12); - float fThen2 = float(fVslider3); - float fElse2 = float(fHslider2); - float fSlow15 = (iSlow3 ? fElse2 : fThen2); - float fSlow16 = ((std::exp((fConst5 / fSlow15)) / fSlow5) + -1.0f); - float fSlow17 = (fSlow10 + (1.0f - fSlow9)); - float fSlow18 = (0.00100000005f * float(fHslider3)); - int iSlow19 = (std::fabs(fSlow18) < 1.1920929e-07f); - float fThen4 = std::exp((0.0f - (fConst9 / (iSlow19 ? 1.0f : fSlow18)))); - float fSlow20 = (iSlow19 ? 0.0f : fThen4); - float fSlow21 = (float((1 - iSlow3)) * (1.0f - fSlow20)); - float fSlow22 = (fConst1 * float(fVslider4)); - float fSlow23 = std::exp((fConst13 / fSlow4)); + float fSlow1 = fConst1 * float(fHslider0); + int iSlow2 = int(float(fCheckbox1)); + float fSlow3 = ((iSlow2) ? float(fHslider1) : float(fVslider0)); + float fSlow4 = std::exp(fConst4 / fSlow3); + float fSlow5 = std::cos(fConst5 * float(fVslider1)); + float fSlow6 = fx_zita_rev1_faustpower2_f(fSlow4); + float fSlow7 = 1.0f - fSlow5 * fSlow6; + float fSlow8 = 1.0f - fSlow6; + float fSlow9 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow7) / fx_zita_rev1_faustpower2_f(fSlow8) + -1.0f)); + float fSlow10 = fSlow7 / fSlow8; + float fSlow11 = fSlow4 * (fSlow9 + (1.0f - fSlow10)); + float fSlow12 = 1.0f / std::tan(fConst6 * float(fVslider2)); + float fSlow13 = 1.0f / (fSlow12 + 1.0f); + float fSlow14 = 1.0f - fSlow12; + float fSlow15 = ((iSlow2) ? float(fHslider2) : float(fVslider3)); + float fSlow16 = std::exp(fConst4 / fSlow15) / fSlow4 + -1.0f; + float fSlow17 = fSlow10 - fSlow9; + float fSlow18 = 0.001f * float(fHslider3); + int iSlow19 = std::fabs(fSlow18) < 1.1920929e-07f; + float fSlow20 = ((iSlow19) ? 0.0f : std::exp(0.0f - fConst9 / ((iSlow19) ? 1.0f : fSlow18))); + float fSlow21 = float(1 - iSlow2) * (1.0f - fSlow20); + float fSlow22 = fConst1 * float(fVslider4); + float fSlow23 = std::exp(fConst13 / fSlow3); float fSlow24 = fx_zita_rev1_faustpower2_f(fSlow23); - float fSlow25 = (1.0f - (fSlow2 * fSlow24)); - float fSlow26 = (1.0f - fSlow24); - float fSlow27 = (fSlow25 / fSlow26); - float fSlow28 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow25) / fx_zita_rev1_faustpower2_f(fSlow26)) + -1.0f))); - float fSlow29 = (fSlow27 - fSlow28); - float fSlow30 = ((std::exp((fConst13 / fSlow15)) / fSlow23) + -1.0f); - float fSlow31 = (fSlow28 + (1.0f - fSlow27)); - float fSlow32 = std::exp((fConst18 / fSlow4)); + float fSlow25 = 1.0f - fSlow5 * fSlow24; + float fSlow26 = 1.0f - fSlow24; + float fSlow27 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow25) / fx_zita_rev1_faustpower2_f(fSlow26) + -1.0f)); + float fSlow28 = fSlow25 / fSlow26; + float fSlow29 = fSlow23 * (fSlow27 + (1.0f - fSlow28)); + float fSlow30 = std::exp(fConst13 / fSlow15) / fSlow23 + -1.0f; + float fSlow31 = fSlow28 - fSlow27; + float fSlow32 = std::exp(fConst18 / fSlow3); float fSlow33 = fx_zita_rev1_faustpower2_f(fSlow32); - float fSlow34 = (1.0f - (fSlow2 * fSlow33)); - float fSlow35 = (1.0f - fSlow33); - float fSlow36 = (fSlow34 / fSlow35); - float fSlow37 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow34) / fx_zita_rev1_faustpower2_f(fSlow35)) + -1.0f))); - float fSlow38 = (fSlow36 - fSlow37); - float fSlow39 = ((std::exp((fConst18 / fSlow15)) / fSlow32) + -1.0f); - float fSlow40 = (fSlow37 + (1.0f - fSlow36)); - float fSlow41 = std::exp((fConst23 / fSlow4)); + float fSlow34 = 1.0f - fSlow5 * fSlow33; + float fSlow35 = 1.0f - fSlow33; + float fSlow36 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow34) / fx_zita_rev1_faustpower2_f(fSlow35) + -1.0f)); + float fSlow37 = fSlow34 / fSlow35; + float fSlow38 = fSlow32 * (fSlow36 + (1.0f - fSlow37)); + float fSlow39 = std::exp(fConst18 / fSlow15) / fSlow32 + -1.0f; + float fSlow40 = fSlow37 - fSlow36; + float fSlow41 = std::exp(fConst23 / fSlow3); float fSlow42 = fx_zita_rev1_faustpower2_f(fSlow41); - float fSlow43 = (1.0f - (fSlow2 * fSlow42)); - float fSlow44 = (1.0f - fSlow42); - float fSlow45 = (fSlow43 / fSlow44); - float fSlow46 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow43) / fx_zita_rev1_faustpower2_f(fSlow44)) + -1.0f))); - float fSlow47 = (fSlow45 - fSlow46); - float fSlow48 = ((std::exp((fConst23 / fSlow15)) / fSlow41) + -1.0f); - float fSlow49 = (fSlow46 + (1.0f - fSlow45)); - float fSlow50 = std::exp((fConst28 / fSlow4)); + float fSlow43 = 1.0f - fSlow5 * fSlow42; + float fSlow44 = 1.0f - fSlow42; + float fSlow45 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow43) / fx_zita_rev1_faustpower2_f(fSlow44) + -1.0f)); + float fSlow46 = fSlow43 / fSlow44; + float fSlow47 = fSlow41 * (fSlow45 + (1.0f - fSlow46)); + float fSlow48 = std::exp(fConst23 / fSlow15) / fSlow41 + -1.0f; + float fSlow49 = fSlow46 - fSlow45; + float fSlow50 = std::exp(fConst28 / fSlow3); float fSlow51 = fx_zita_rev1_faustpower2_f(fSlow50); - float fSlow52 = (1.0f - (fSlow2 * fSlow51)); - float fSlow53 = (1.0f - fSlow51); - float fSlow54 = (fSlow52 / fSlow53); - float fSlow55 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow52) / fx_zita_rev1_faustpower2_f(fSlow53)) + -1.0f))); - float fSlow56 = (fSlow54 - fSlow55); - float fSlow57 = ((std::exp((fConst28 / fSlow15)) / fSlow50) + -1.0f); - float fSlow58 = (fSlow55 + (1.0f - fSlow54)); - float fSlow59 = std::exp((fConst33 / fSlow4)); + float fSlow52 = 1.0f - fSlow5 * fSlow51; + float fSlow53 = 1.0f - fSlow51; + float fSlow54 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow52) / fx_zita_rev1_faustpower2_f(fSlow53) + -1.0f)); + float fSlow55 = fSlow52 / fSlow53; + float fSlow56 = fSlow50 * (fSlow54 + (1.0f - fSlow55)); + float fSlow57 = std::exp(fConst28 / fSlow15) / fSlow50 + -1.0f; + float fSlow58 = fSlow55 - fSlow54; + float fSlow59 = std::exp(fConst33 / fSlow3); float fSlow60 = fx_zita_rev1_faustpower2_f(fSlow59); - float fSlow61 = (1.0f - (fSlow2 * fSlow60)); - float fSlow62 = (1.0f - fSlow60); - float fSlow63 = (fSlow61 / fSlow62); - float fSlow64 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow61) / fx_zita_rev1_faustpower2_f(fSlow62)) + -1.0f))); - float fSlow65 = (fSlow63 - fSlow64); - float fSlow66 = ((std::exp((fConst33 / fSlow15)) / fSlow59) + -1.0f); - float fSlow67 = (fSlow64 + (1.0f - fSlow63)); - float fSlow68 = std::exp((fConst38 / fSlow4)); + float fSlow61 = 1.0f - fSlow5 * fSlow60; + float fSlow62 = 1.0f - fSlow60; + float fSlow63 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow61) / fx_zita_rev1_faustpower2_f(fSlow62) + -1.0f)); + float fSlow64 = fSlow61 / fSlow62; + float fSlow65 = fSlow59 * (fSlow63 + (1.0f - fSlow64)); + float fSlow66 = std::exp(fConst33 / fSlow15) / fSlow59 + -1.0f; + float fSlow67 = fSlow64 - fSlow63; + float fSlow68 = std::exp(fConst38 / fSlow3); float fSlow69 = fx_zita_rev1_faustpower2_f(fSlow68); - float fSlow70 = (1.0f - (fSlow2 * fSlow69)); - float fSlow71 = (1.0f - fSlow69); - float fSlow72 = (fSlow70 / fSlow71); - float fSlow73 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow70) / fx_zita_rev1_faustpower2_f(fSlow71)) + -1.0f))); - float fSlow74 = (fSlow72 - fSlow73); - float fSlow75 = ((std::exp((fConst38 / fSlow15)) / fSlow68) + -1.0f); - float fSlow76 = (fSlow73 + (1.0f - fSlow72)); - float fSlow77 = std::exp((fConst43 / fSlow4)); + float fSlow70 = 1.0f - fSlow5 * fSlow69; + float fSlow71 = 1.0f - fSlow69; + float fSlow72 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow70) / fx_zita_rev1_faustpower2_f(fSlow71) + -1.0f)); + float fSlow73 = fSlow70 / fSlow71; + float fSlow74 = fSlow68 * (fSlow72 + (1.0f - fSlow73)); + float fSlow75 = std::exp(fConst38 / fSlow15) / fSlow68 + -1.0f; + float fSlow76 = fSlow73 - fSlow72; + float fSlow77 = std::exp(fConst43 / fSlow3); float fSlow78 = fx_zita_rev1_faustpower2_f(fSlow77); - float fSlow79 = (1.0f - (fSlow2 * fSlow78)); - float fSlow80 = (1.0f - fSlow78); - float fSlow81 = (fSlow79 / fSlow80); - float fSlow82 = std::sqrt(std::max(0.0f, ((fx_zita_rev1_faustpower2_f(fSlow79) / fx_zita_rev1_faustpower2_f(fSlow80)) + -1.0f))); - float fSlow83 = (fSlow81 - fSlow82); - float fSlow84 = ((std::exp((fConst43 / fSlow15)) / fSlow77) + -1.0f); - float fSlow85 = (fSlow82 + (1.0f - fSlow81)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow79 = 1.0f - fSlow5 * fSlow78; + float fSlow80 = 1.0f - fSlow78; + float fSlow81 = std::sqrt(std::max(0.0f, fx_zita_rev1_faustpower2_f(fSlow79) / fx_zita_rev1_faustpower2_f(fSlow80) + -1.0f)); + float fSlow82 = fSlow79 / fSlow80; + float fSlow83 = fSlow77 * (fSlow81 + (1.0f - fSlow82)); + float fSlow84 = std::exp(fConst43 / fSlow15) / fSlow77 + -1.0f; + float fSlow85 = fSlow82 - fSlow81; + for (int i0 = 0; i0 < count; i0 = i0 + 1) { float fTemp0 = float(input0[i0]); - float fTemp1 = (iSlow0 ? 0.0f : fTemp0); - fRec0[0] = (fSlow1 + (fConst2 * fRec0[1])); - float fTemp2 = (1.0f - fRec0[0]); - fRec12[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec12[1]) - (fRec8[1] + fRec8[2])))); - fRec11[0] = ((fRec11[1] * fSlow11) + ((fSlow5 * (fRec8[1] + (fRec12[0] * fSlow16))) * fSlow17)); - fVec0[(IOTA & 65535)] = ((0.353553385f * fRec11[0]) + 9.99999968e-21f); - fRec13[0] = ((fRec13[1] * fSlow20) + fSlow21); - float fTemp3 = float(input1[i0]); - float fTemp4 = (iSlow0 ? 0.0f : fTemp3); - fVec1[(IOTA & 16383)] = (fRec13[0] * fTemp4); - fRec14[0] = (fSlow22 + (fConst2 * fRec14[1])); - int iTemp5 = int(std::min(8192.0f, std::max(0.0f, (fConst10 * fRec14[0])))); - float fTemp6 = (0.300000012f * fVec1[((IOTA - iTemp5) & 16383)]); - float fTemp7 = (((0.600000024f * fRec9[1]) + fVec0[((IOTA - iConst8) & 65535)]) - fTemp6); - fVec2[(IOTA & 4095)] = fTemp7; - fRec9[0] = fVec2[((IOTA - iConst11) & 4095)]; - float fRec10 = (0.0f - (0.600000024f * fTemp7)); - fRec18[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec18[1]) - (fRec4[1] + fRec4[2])))); - fRec17[0] = ((fRec17[1] * fSlow29) + ((fSlow23 * (fRec4[1] + (fRec18[0] * fSlow30))) * fSlow31)); - fVec3[(IOTA & 65535)] = ((0.353553385f * fRec17[0]) + 9.99999968e-21f); - float fTemp8 = (((0.600000024f * fRec15[1]) + fVec3[((IOTA - iConst15) & 65535)]) - fTemp6); - fVec4[(IOTA & 8191)] = fTemp8; - fRec15[0] = fVec4[((IOTA - iConst16) & 8191)]; - float fRec16 = (0.0f - (0.600000024f * fTemp8)); - fRec22[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec22[1]) - (fRec6[1] + fRec6[2])))); - fRec21[0] = ((fRec21[1] * fSlow38) + ((fSlow32 * (fRec6[1] + (fRec22[0] * fSlow39))) * fSlow40)); - fVec5[(IOTA & 32767)] = ((0.353553385f * fRec21[0]) + 9.99999968e-21f); - float fTemp9 = (fVec5[((IOTA - iConst20) & 32767)] + (fTemp6 + (0.600000024f * fRec19[1]))); - fVec6[(IOTA & 8191)] = fTemp9; - fRec19[0] = fVec6[((IOTA - iConst21) & 8191)]; - float fRec20 = (0.0f - (0.600000024f * fTemp9)); - fRec26[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec26[1]) - (fRec3[1] + fRec3[2])))); - fRec25[0] = ((fRec25[1] * fSlow47) + ((fSlow41 * (fRec3[1] + (fRec26[0] * fSlow48))) * fSlow49)); - fVec7[(IOTA & 32767)] = ((0.353553385f * fRec25[0]) + 9.99999968e-21f); - fVec8[(IOTA & 16383)] = (fRec13[0] * fTemp1); - float fTemp10 = (0.300000012f * fVec8[((IOTA - iTemp5) & 16383)]); - float fTemp11 = (fVec7[((IOTA - iConst25) & 32767)] - (fTemp10 + (0.600000024f * fRec23[1]))); - fVec9[(IOTA & 8191)] = fTemp11; - fRec23[0] = fVec9[((IOTA - iConst26) & 8191)]; - float fRec24 = (0.600000024f * fTemp11); - fRec30[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec30[1]) - (fRec5[1] + fRec5[2])))); - fRec29[0] = ((fRec29[1] * fSlow56) + ((fSlow50 * (fRec5[1] + (fRec30[0] * fSlow57))) * fSlow58)); - fVec10[(IOTA & 32767)] = ((0.353553385f * fRec29[0]) + 9.99999968e-21f); - float fTemp12 = ((fTemp10 + fVec10[((IOTA - iConst30) & 32767)]) - (0.600000024f * fRec27[1])); - fVec11[(IOTA & 8191)] = fTemp12; - fRec27[0] = fVec11[((IOTA - iConst31) & 8191)]; - float fRec28 = (0.600000024f * fTemp12); - fRec34[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec34[1]) - (fRec1[1] + fRec1[2])))); - fRec33[0] = ((fRec33[1] * fSlow65) + ((fSlow59 * (fRec1[1] + (fRec34[0] * fSlow66))) * fSlow67)); - fVec12[(IOTA & 32767)] = ((0.353553385f * fRec33[0]) + 9.99999968e-21f); - float fTemp13 = ((fVec12[((IOTA - iConst35) & 32767)] + fTemp10) - (0.600000024f * fRec31[1])); - fVec13[(IOTA & 4095)] = fTemp13; - fRec31[0] = fVec13[((IOTA - iConst36) & 4095)]; - float fRec32 = (0.600000024f * fTemp13); - fRec38[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec38[1]) - (fRec2[1] + fRec2[2])))); - fRec37[0] = ((fRec37[1] * fSlow74) + ((fSlow68 * (fRec2[1] + (fRec38[0] * fSlow75))) * fSlow76)); - fVec14[(IOTA & 65535)] = ((0.353553385f * fRec37[0]) + 9.99999968e-21f); - float fTemp14 = (fTemp6 + ((0.600000024f * fRec35[1]) + fVec14[((IOTA - iConst40) & 65535)])); - fVec15[(IOTA & 8191)] = fTemp14; - fRec35[0] = fVec15[((IOTA - iConst41) & 8191)]; - float fRec36 = (0.0f - (0.600000024f * fTemp14)); - fRec42[0] = (0.0f - (fSlow13 * ((fSlow14 * fRec42[1]) - (fRec7[1] + fRec7[2])))); - fRec41[0] = ((fRec41[1] * fSlow83) + ((fSlow77 * (fRec7[1] + (fRec42[0] * fSlow84))) * fSlow85)); - fVec16[(IOTA & 32767)] = ((0.353553385f * fRec41[0]) + 9.99999968e-21f); - float fTemp15 = (fVec16[((IOTA - iConst45) & 32767)] - (fTemp10 + (0.600000024f * fRec39[1]))); - fVec17[(IOTA & 4095)] = fTemp15; - fRec39[0] = fVec17[((IOTA - iConst46) & 4095)]; - float fRec40 = (0.600000024f * fTemp15); - float fTemp16 = (fRec40 + fRec31[1]); - float fTemp17 = (fRec36 + fTemp16); - fRec1[0] = (fRec9[1] + (fRec15[1] + (fRec19[1] + (fRec24 + (fRec28 + (fRec32 + (fRec35[1] + (fRec39[1] + (fRec23[1] + (fRec27[1] + (fRec10 + (fRec16 + (fRec20 + fTemp17))))))))))))); - fRec2[0] = ((fRec24 + (fRec28 + (fRec32 + (fRec39[1] + (fRec23[1] + (fRec27[1] + fTemp16)))))) - (fRec9[1] + (fRec15[1] + (fRec19[1] + (fRec35[1] + (fRec10 + (fRec16 + (fRec36 + fRec20)))))))); - float fTemp18 = (fRec36 + fRec31[1]); - fRec3[0] = ((fRec19[1] + (fRec28 + (fRec32 + (fRec35[1] + (fRec27[1] + (fRec20 + fTemp18)))))) - (fRec9[1] + (fRec15[1] + (fRec24 + (fRec39[1] + (fRec23[1] + (fRec10 + (fRec40 + fRec16)))))))); - float fTemp19 = (fRec40 + fRec36); - fRec4[0] = ((fRec9[1] + (fRec15[1] + (fRec28 + (fRec32 + (fRec27[1] + (fRec10 + (fRec16 + fRec31[1]))))))) - (fRec19[1] + (fRec24 + (fRec35[1] + (fRec39[1] + (fRec23[1] + (fRec20 + fTemp19))))))); - fRec5[0] = ((fRec15[1] + (fRec24 + (fRec32 + (fRec35[1] + (fRec23[1] + (fRec16 + fTemp18)))))) - (fRec9[1] + (fRec19[1] + (fRec28 + (fRec39[1] + (fRec27[1] + (fRec10 + (fRec40 + fRec20)))))))); - fRec6[0] = ((fRec9[1] + (fRec19[1] + (fRec24 + (fRec32 + (fRec23[1] + (fRec10 + (fRec20 + fRec31[1]))))))) - (fRec15[1] + (fRec28 + (fRec35[1] + (fRec39[1] + (fRec27[1] + (fRec16 + fTemp19))))))); - fRec7[0] = ((fRec9[1] + (fRec32 + (fRec35[1] + (fRec39[1] + (fRec10 + fTemp17))))) - (fRec15[1] + (fRec19[1] + (fRec24 + (fRec28 + (fRec23[1] + (fRec27[1] + (fRec20 + fRec16)))))))); - fRec8[0] = ((fRec15[1] + (fRec19[1] + (fRec32 + (fRec39[1] + (fRec16 + (fRec20 + fTemp16)))))) - (fRec9[1] + (fRec24 + (fRec28 + (fRec35[1] + (fRec23[1] + (fRec27[1] + (fRec36 + fRec10)))))))); - float fThen6 = ((fTemp1 * fTemp2) + (0.370000005f * (fRec0[0] * (fRec2[0] + fRec3[0])))); - output0[i0] = FAUSTFLOAT((iSlow0 ? fTemp0 : fThen6)); - float fThen7 = ((fTemp2 * fTemp4) + (0.370000005f * (fRec0[0] * (fRec2[0] - fRec3[0])))); - output1[i0] = FAUSTFLOAT((iSlow0 ? fTemp3 : fThen7)); + float fTemp1 = ((iSlow0) ? 0.0f : fTemp0); + fRec0[0] = fSlow1 + fConst2 * fRec0[1]; + float fTemp2 = 1.0f - fRec0[0]; + fRec12[0] = 0.0f - fSlow13 * (fSlow14 * fRec12[1] - (fRec3[1] + fRec3[2])); + fRec11[0] = fSlow11 * (fRec3[1] + fRec12[0] * fSlow16) + fSlow17 * fRec11[1]; + fVec0[IOTA0 & 32767] = 0.35355338f * fRec11[0] + 1e-20f; + fRec13[0] = fSlow21 + fSlow20 * fRec13[1]; + fVec1[IOTA0 & 16383] = fRec13[0] * fTemp1; + fRec14[0] = fSlow22 + fConst2 * fRec14[1]; + int iTemp3 = int(std::min(8192.0f, std::max(0.0f, fConst10 * fRec14[0]))); + float fTemp4 = 0.3f * fVec1[(IOTA0 - iTemp3) & 16383]; + float fTemp5 = fVec0[(IOTA0 - iConst8) & 32767] - (fTemp4 + 0.6f * fRec9[1]); + fVec2[IOTA0 & 8191] = fTemp5; + fRec9[0] = fVec2[(IOTA0 - iConst11) & 8191]; + float fRec10 = 0.6f * fTemp5; + fRec18[0] = 0.0f - fSlow13 * (fSlow14 * fRec18[1] - (fRec5[1] + fRec5[2])); + fRec17[0] = fSlow29 * (fRec5[1] + fRec18[0] * fSlow30) + fSlow31 * fRec17[1]; + fVec3[IOTA0 & 32767] = 0.35355338f * fRec17[0] + 1e-20f; + float fTemp6 = fTemp4 + fVec3[(IOTA0 - iConst15) & 32767] - 0.6f * fRec15[1]; + fVec4[IOTA0 & 8191] = fTemp6; + fRec15[0] = fVec4[(IOTA0 - iConst16) & 8191]; + float fRec16 = 0.6f * fTemp6; + fRec22[0] = 0.0f - fSlow13 * (fSlow14 * fRec22[1] - (fRec2[1] + fRec2[2])); + fRec21[0] = fSlow38 * (fRec2[1] + fRec22[0] * fSlow39) + fSlow40 * fRec21[1]; + fVec5[IOTA0 & 65535] = 0.35355338f * fRec21[0] + 1e-20f; + float fTemp7 = float(input1[i0]); + float fTemp8 = ((iSlow0) ? 0.0f : fTemp7); + fVec6[IOTA0 & 16383] = fRec13[0] * fTemp8; + float fTemp9 = 0.3f * fVec6[(IOTA0 - iTemp3) & 16383]; + float fTemp10 = 0.6f * fRec19[1] + fVec5[(IOTA0 - iConst20) & 65535] + fTemp9; + fVec7[IOTA0 & 8191] = fTemp10; + fRec19[0] = fVec7[(IOTA0 - iConst21) & 8191]; + float fRec20 = 0.0f - 0.6f * fTemp10; + fRec26[0] = 0.0f - fSlow13 * (fSlow14 * fRec26[1] - (fRec7[1] + fRec7[2])); + fRec25[0] = fSlow47 * (fRec7[1] + fRec26[0] * fSlow48) + fSlow49 * fRec25[1]; + fVec8[IOTA0 & 32767] = 0.35355338f * fRec25[0] + 1e-20f; + float fTemp11 = fVec8[(IOTA0 - iConst25) & 32767] - (fTemp4 + 0.6f * fRec23[1]); + fVec9[IOTA0 & 4095] = fTemp11; + fRec23[0] = fVec9[(IOTA0 - iConst26) & 4095]; + float fRec24 = 0.6f * fTemp11; + fRec30[0] = 0.0f - fSlow13 * (fSlow14 * fRec30[1] - (fRec1[1] + fRec1[2])); + fRec29[0] = fSlow56 * (fRec1[1] + fRec30[0] * fSlow57) + fSlow58 * fRec29[1]; + fVec10[IOTA0 & 32767] = 0.35355338f * fRec29[0] + 1e-20f; + float fTemp12 = fVec10[(IOTA0 - iConst30) & 32767] + fTemp4 - 0.6f * fRec27[1]; + fVec11[IOTA0 & 4095] = fTemp12; + fRec27[0] = fVec11[(IOTA0 - iConst31) & 4095]; + float fRec28 = 0.6f * fTemp12; + fRec34[0] = 0.0f - fSlow13 * (fSlow14 * fRec34[1] - (fRec4[1] + fRec4[2])); + fRec33[0] = fSlow65 * (fRec4[1] + fRec34[0] * fSlow66) + fSlow67 * fRec33[1]; + fVec12[IOTA0 & 65535] = 0.35355338f * fRec33[0] + 1e-20f; + float fTemp13 = 0.6f * fRec31[1] + fVec12[(IOTA0 - iConst35) & 65535] - fTemp9; + fVec13[IOTA0 & 8191] = fTemp13; + fRec31[0] = fVec13[(IOTA0 - iConst36) & 8191]; + float fRec32 = 0.0f - 0.6f * fTemp13; + fRec38[0] = 0.0f - fSlow13 * (fSlow14 * fRec38[1] - (fRec6[1] + fRec6[2])); + fRec37[0] = fSlow74 * (fRec6[1] + fRec38[0] * fSlow75) + fSlow76 * fRec37[1]; + fVec14[IOTA0 & 32767] = 0.35355338f * fRec37[0] + 1e-20f; + float fTemp14 = fVec14[(IOTA0 - iConst40) & 32767] + fTemp9 + 0.6f * fRec35[1]; + fVec15[IOTA0 & 8191] = fTemp14; + fRec35[0] = fVec15[(IOTA0 - iConst41) & 8191]; + float fRec36 = 0.0f - 0.6f * fTemp14; + fRec42[0] = 0.0f - fSlow13 * (fSlow14 * fRec42[1] - (fRec8[1] + fRec8[2])); + fRec41[0] = fSlow83 * (fRec8[1] + fRec42[0] * fSlow84) + fSlow85 * fRec41[1]; + fVec16[IOTA0 & 65535] = 0.35355338f * fRec41[0] + 1e-20f; + float fTemp15 = 0.6f * fRec39[1] + fVec16[(IOTA0 - iConst45) & 65535] - fTemp9; + fVec17[IOTA0 & 4095] = fTemp15; + fRec39[0] = fVec17[(IOTA0 - iConst46) & 4095]; + float fRec40 = 0.0f - 0.6f * fTemp15; + float fTemp16 = fRec19[1] + fRec35[1]; + float fTemp17 = fRec31[1] + fTemp16 + fRec39[1]; + fRec1[0] = fRec10 + fRec16 + fRec20 + fRec24 + fRec28 + fRec32 + fRec36 + fRec40 + fRec9[1] + fRec23[1] + fRec27[1] + fRec15[1] + fTemp17; + fRec2[0] = fRec10 + fRec16 + fRec24 + fRec28 + fRec9[1] + fRec27[1] + fRec15[1] + fRec23[1] - (fRec20 + fRec32 + fRec36 + fRec40 + fTemp17); + float fTemp18 = fRec31[1] + fRec39[1]; + fRec3[0] = fRec16 + fRec20 + fRec28 + fRec36 + fRec27[1] + fRec15[1] + fTemp16 - (fRec10 + fRec24 + fRec32 + fRec40 + fRec9[1] + fRec23[1] + fTemp18); + fRec4[0] = fRec16 + fRec28 + fRec32 + fRec40 + fRec27[1] + fRec15[1] + fTemp18 - (fRec10 + fRec20 + fRec24 + fRec36 + fRec9[1] + fRec23[1] + fTemp16); + float fTemp19 = fRec19[1] + fRec31[1]; + float fTemp20 = fRec35[1] + fRec39[1]; + fRec5[0] = fRec10 + fRec20 + fRec28 + fRec32 + fRec9[1] + fRec27[1] + fTemp19 - (fRec16 + fRec24 + fRec36 + fRec40 + fRec23[1] + fRec15[1] + fTemp20); + fRec6[0] = fRec10 + fRec28 + fRec36 + fRec40 + fRec9[1] + fRec27[1] + fTemp20 - (fRec16 + fRec20 + fRec24 + fRec32 + fRec23[1] + fRec15[1] + fTemp19); + float fTemp21 = fRec19[1] + fRec39[1]; + float fTemp22 = fRec35[1] + fRec31[1]; + fRec7[0] = fRec20 + fRec24 + fRec28 + fRec40 + fRec23[1] + fRec27[1] + fTemp21 - (fRec10 + fRec16 + fRec32 + fRec36 + fRec9[1] + fRec15[1] + fTemp22); + fRec8[0] = fRec24 + fRec28 + fRec32 + fRec36 + fRec23[1] + fRec27[1] + fTemp22 - (fRec10 + fRec16 + fRec20 + fRec40 + fRec9[1] + fRec15[1] + fTemp21); + output0[i0] = FAUSTFLOAT(((iSlow0) ? fTemp0 : fTemp1 * fTemp2 + 0.37f * fRec0[0] * (fRec2[0] + fRec3[0]))); + output1[i0] = FAUSTFLOAT(((iSlow0) ? fTemp7 : fTemp2 * fTemp8 + 0.37f * fRec0[0] * (fRec2[0] - fRec3[0]))); fRec0[1] = fRec0[0]; fRec12[1] = fRec12[0]; fRec11[1] = fRec11[0]; - IOTA = (IOTA + 1); + IOTA0 = IOTA0 + 1; fRec13[1] = fRec13[0]; fRec14[1] = fRec14[0]; fRec9[1] = fRec9[0]; diff --git a/ceammc/ext/src/fx/mod_fx.cpp b/ceammc/ext/src/fx/mod_fx.cpp index deccf2fd13..257bd75793 100644 --- a/ceammc/ext/src/fx/mod_fx.cpp +++ b/ceammc/ext/src/fx/mod_fx.cpp @@ -3,6 +3,7 @@ void setup_fx_bitdown_tilde(); void setup_fx_chorus_tilde(); +void setup_fx_dattorro_tilde(); void setup_fx_distortion1_tilde(); void setup_fx_distortion2_tilde(); void setup_fx_distortion3_tilde(); @@ -19,9 +20,11 @@ void setup_fx_granulator_tilde(); void setup_fx_greyhole_tilde(); void setup_fx_pitchshift_tilde(); void setup_fx_infrev_tilde(); +void setup_fx_jcrev_tilde(); void setup_fx_pitchshift_sig_tilde(); void setup_fx_recho_tilde(); void setup_fx_room_tilde(); +void setup_fx_satrev_tilde(); void setup_fx_sdelay_tilde(); void setup_fx_secho_tilde(); void setup_fx_shimmer_tilde(); @@ -29,19 +32,21 @@ void setup_fx_vocoder_tilde(); void setup_fx_wahwah_tilde(); void setup_fx_zita_rev1_tilde(); void setup_fx_tapiir_tilde(); +void setup_fx_stutter_tilde(); void ceammc_fx_setup() { setup_fx_bitdown_tilde(); setup_fx_chorus_tilde(); + setup_fx_dattorro_tilde(); setup_fx_distortion1_tilde(); setup_fx_distortion2_tilde(); setup_fx_distortion3_tilde(); setup_fx_distortion_tilde(); setup_fx_drive_tilde(); setup_fx_drone_box_tilde(); - setup_fx_echo_tilde(); setup_fx_echo2_tilde(); + setup_fx_echo_tilde(); setup_fx_flanger_tilde(); setup_fx_freeverb2_tilde(); setup_fx_freeverb_tilde(); @@ -49,13 +54,16 @@ void ceammc_fx_setup() setup_fx_granulator_tilde(); setup_fx_greyhole_tilde(); setup_fx_infrev_tilde(); + setup_fx_jcrev_tilde(); setup_fx_looper(); setup_fx_pitchshift_sig_tilde(); setup_fx_pitchshift_tilde(); setup_fx_recho_tilde(); setup_fx_room_tilde(); + setup_fx_satrev_tilde(); setup_fx_sdelay_tilde(); setup_fx_secho_tilde(); + setup_fx_stutter_tilde(); setup_fx_vocoder_tilde(); setup_fx_wahwah_tilde(); setup_fx_zita_rev1_tilde(); diff --git a/ceammc/ext/src/hw/CMakeLists.txt b/ceammc/ext/src/hw/CMakeLists.txt index 854a060bcb..a67b929f7c 100644 --- a/ceammc/ext/src/hw/CMakeLists.txt +++ b/ceammc/ext/src/hw/CMakeLists.txt @@ -1,24 +1,20 @@ add_subdirectory(arduino) -include_directories(${PROJECT_BINARY_DIR}/ceammc/extra/libusb) -include_directories(${CMAKE_SOURCE_DIR}/ceammc/extra/serial/serial/include) -include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra/SMSLib) -include_directories(${PROJECT_SOURCE_DIR}/ceammc/extra) # for readerwriterqueue -macro(ceammc_hw_external name) - list(APPEND HW_SOURCES "hw_${name}.cpp") -endmacro() +add_library(ceammc_hw STATIC mod_hw.cpp) -set(HW_LINK_LIBRARIES) +function(ceammc_hw_external name) + target_sources(ceammc_hw PRIVATE "hw_${name}.cpp") +endfunction() # Sudden motion sensor on macbook's if(APPLE) add_compile_definitions(WITH_SMS) add_compile_definitions(WITH_SMC) add_compile_definitions(WITH_IODISPLAY) - list(APPEND HW_SOURCES apple/suddenmotionsensor.cpp) - list(APPEND HW_SOURCES apple/smc.cpp) - list(APPEND HW_SOURCES apple/fn_strings.cpp) - list(APPEND HW_SOURCES apple/iodisplay.cpp) + target_sources(ceammc_hw PRIVATE apple/suddenmotionsensor.cpp) + target_sources(ceammc_hw PRIVATE apple/smc.cpp) + target_sources(ceammc_hw PRIVATE apple/fn_strings.cpp) + target_sources(ceammc_hw PRIVATE apple/iodisplay.cpp) elseif(UNIX AND NOT APPLE) # find_package(XCB) # if(XCB_FOUND AND XCB_RANDR_FOUND AND XCB_UTIL_FOUND) @@ -35,6 +31,7 @@ ceammc_hw_external(arduino) ceammc_hw_external(cpu_temp) ceammc_hw_external(display) ceammc_hw_external(kbd_light) +ceammc_hw_external(motu_avb) ceammc_hw_external(serial) #if(LIBUSB_1_FOUND) @@ -45,11 +42,18 @@ ceammc_hw_external(serial) # list(APPEND HW_SOURCES usb/libusb_wrapper.cpp) #endif() -add_library(ceammc_hw STATIC mod_hw.cpp ${HW_SOURCES}) -target_link_libraries(ceammc_hw hw_arduino ${HW_LINK_LIBRARIES}) target_include_directories(ceammc_hw PRIVATE ${PROJECT_BINARY_DIR} # for config.h + "$" +) + +target_link_libraries(ceammc_hw + PRIVATE + serial + readerwriterqueue + hw_arduino + http_lib ) #if(WITH_EXPERIMENTAL) diff --git a/ceammc/ext/src/hw/arduino/CMakeLists.txt b/ceammc/ext/src/hw/arduino/CMakeLists.txt index e3e50b0c17..dd0fe7d116 100644 --- a/ceammc/ext/src/hw/arduino/CMakeLists.txt +++ b/ceammc/ext/src/hw/arduino/CMakeLists.txt @@ -7,10 +7,14 @@ set(ARDUINO_SOURCES add_library(hw_arduino STATIC ${ARDUINO_SOURCES}) -target_link_libraries(hw_arduino serial ceammc_core) target_include_directories(hw_arduino PRIVATE - ${CMAKE_SOURCE_DIR}/ceammc/extra/serial/serial/include - ${PROJECT_SOURCE_DIR}/ceammc/extra # for readerwriterqueue ${PROJECT_BINARY_DIR} # for config.h ) + +target_link_libraries(hw_arduino + PRIVATE + serial + readerwriterqueue +) + diff --git a/ceammc/ext/src/hw/arduino/arduino.cpp b/ceammc/ext/src/hw/arduino/arduino.cpp index 22b6f4b524..8e6f67d93e 100644 --- a/ceammc/ext/src/hw/arduino/arduino.cpp +++ b/ceammc/ext/src/hw/arduino/arduino.cpp @@ -19,6 +19,8 @@ using namespace ceammc::thread; +using Lock = std::unique_lock; + namespace ceammc { namespace hw { @@ -38,18 +40,11 @@ namespace hw { , vendor_id_(vendorId) , product_id_(productId) { - int status = 0; - - status = pthread_mutex_init(&mutex_, 0); - ARDUINO_THREAD_CHECK(status, "can't init mutex"); } Arduino::~Arduino() { stop(); - - int err = pthread_mutex_destroy(&mutex_); - ARDUINO_THREAD_CHECK(err, "can't destroy mutex"); } std::string Arduino::usbSerial() const diff --git a/ceammc/ext/src/hw/arduino/arduino.h b/ceammc/ext/src/hw/arduino/arduino.h index 5e4f60530f..a278790b00 100644 --- a/ceammc/ext/src/hw/arduino/arduino.h +++ b/ceammc/ext/src/hw/arduino/arduino.h @@ -1,13 +1,15 @@ #ifndef ARDUINO_H #define ARDUINO_H -#include -#include +#include +#include #include #include #include +#include + namespace ceammc { namespace hw { @@ -34,7 +36,7 @@ namespace hw { volatile bool is_running_; volatile bool reconnect_; pthread_t thread_; - mutable pthread_mutex_t mutex_; + mutable std::mutex mutex_; int baud_rate_; int vendor_id_; int product_id_; diff --git a/ceammc/ext/src/hw/arduino/arduino_connection_storage.cpp b/ceammc/ext/src/hw/arduino/arduino_connection_storage.cpp index b1fac386c8..f3663cdd29 100644 --- a/ceammc/ext/src/hw/arduino/arduino_connection_storage.cpp +++ b/ceammc/ext/src/hw/arduino/arduino_connection_storage.cpp @@ -5,23 +5,18 @@ using namespace ceammc::thread; +using Lock = std::unique_lock; + namespace ceammc { namespace hw { - ConnectionStorage* ConnectionStorage::instance_ = 0; - pthread_mutex_t ConnectionStorage::mutex_; - bool ConnectionStorage::init_ = ConnectionStorage::initMutex(); + ConnectionStorage* ConnectionStorage::instance_ = nullptr; + std::mutex ConnectionStorage::mutex_; ConnectionStorage::ConnectionStorage() {} ConnectionStorage::~ConnectionStorage() {} - bool ConnectionStorage::initMutex() - { - pthread_mutex_init(&mutex_, 0); - return true; - } - ConnectionStorage& ConnectionStorage::instance() { if (instance_ == 0) { diff --git a/ceammc/ext/src/hw/arduino/arduino_connection_storage.h b/ceammc/ext/src/hw/arduino/arduino_connection_storage.h index 4167c55b72..1b4554fab0 100644 --- a/ceammc/ext/src/hw/arduino/arduino_connection_storage.h +++ b/ceammc/ext/src/hw/arduino/arduino_connection_storage.h @@ -1,11 +1,10 @@ #ifndef ARDUINO_CONNECTION_STORAGE_H #define ARDUINO_CONNECTION_STORAGE_H +#include #include #include -#include - namespace ceammc { namespace hw { @@ -15,10 +14,8 @@ namespace hw { ~ConnectionStorage(); ConnectionStorage(const ConnectionStorage&); void operator=(const ConnectionStorage&); - static pthread_mutex_t mutex_; + static std::mutex mutex_; static ConnectionStorage* instance_; - static bool init_; - static bool initMutex(); public: /** diff --git a/ceammc/ext/src/hw/arduino/arduino_thread.cpp b/ceammc/ext/src/hw/arduino/arduino_thread.cpp index 0a9b69e7ef..fdcd2a6120 100644 --- a/ceammc/ext/src/hw/arduino/arduino_thread.cpp +++ b/ceammc/ext/src/hw/arduino/arduino_thread.cpp @@ -6,24 +6,28 @@ #include #include -#include -#include +#include #include #include #include +#include #include #include #include -#include #include using namespace ceammc::platform; +using namespace boost::placeholders; + +#ifndef NDEBUG +#define DEBUG +#endif namespace ceammc { namespace hw { - static const int DEFAULT_TIMEOUT = 10; + constexpr const int DEFAULT_TIMEOUT = 10; static std::chrono::milliseconds RECONNECT_TIME_MS(1000); struct usb_info { @@ -38,12 +42,16 @@ namespace hw { ThreadTracker(Arduino* a) : a_(a) { +#ifdef DEBUG std::cerr << "[arduino_thread] " << pthread_self() << " started\n"; +#endif } ~ThreadTracker() { +#ifdef DEBUG std::cerr << "[arduino_thread] " << pthread_self() << " finished\n"; +#endif a_->threadFinished(); } }; @@ -80,7 +88,7 @@ namespace hw { serial::PortInfo ArduinoThread::findDeviceById(const PortList& lst, int vendorId, int productId) { - PortList::const_iterator it = std::find_if(lst.begin(), lst.end(), + auto it = std::find_if(lst.begin(), lst.end(), boost::bind(hasVendorAndProduct, _1, vendorId, productId)); return it == lst.end() ? serial::PortInfo() : *it; @@ -88,7 +96,7 @@ namespace hw { serial::PortInfo ArduinoThread::findDeviceByVendorId(const PortList& lst, int id) { - PortList::const_iterator it = std::find_if(lst.begin(), lst.end(), + auto it = std::find_if(lst.begin(), lst.end(), boost::bind(hasVendor, _1, id)); return it == lst.end() ? serial::PortInfo() : *it; @@ -96,7 +104,7 @@ namespace hw { serial::PortInfo ArduinoThread::findDeviceBySerialNo(const PortList& lst, const std::string& serialNo) { - PortList::const_iterator it = std::find_if(lst.begin(), lst.end(), + auto it = std::find_if(lst.begin(), lst.end(), boost::bind(hasSerial, _1, serialNo)); return it == lst.end() ? serial::PortInfo() : *it; @@ -150,7 +158,7 @@ namespace hw { { assert(arduino); - serial::PortInfo dev = pred(lsfn()); + auto dev = pred(lsfn()); while (dev.port.empty()) { if (arduino->shouldStopThread()) @@ -303,11 +311,15 @@ namespace hw { // can't open if (!serial.isOpen()) { +#ifdef DEBUG std::cerr << "[arduino_thread] can't connect to device: " << port_info.port << " at baudrate " << baudRate << "\n"; +#endif if (arduino->reconnect()) { +#ifdef DEBUG std::cerr << "[arduino_thread] reconnecting...\n"; +#endif std::this_thread::sleep_for(RECONNECT_TIME_MS); // try again continue; @@ -315,9 +327,11 @@ namespace hw { return 0; } +#ifdef DEBUG // connection is ok - std::cout << "[arduino_thread] connected to device: " + std::cerr << "[arduino_thread] connected to device: " << port_info.port << " with baudrate: " << baudRate << "\n"; +#endif serial.setDTR(false); serial.setStopbits(stopbits_one); @@ -339,7 +353,9 @@ namespace hw { // reconnect on error if (arduino->reconnect()) { +#ifdef DEBUG std::cerr << "[arduino_thread] reconnecting...\n"; +#endif std::this_thread::sleep_for(RECONNECT_TIME_MS); continue; } else @@ -352,9 +368,16 @@ namespace hw { } while (true); } catch (std::exception& e) { +#ifdef DEBUG std::cerr << "[arduino_thread] exception: " << e.what() << "\n"; +#endif + return 0; + } +#if defined(__APPLE__) && defined(__arm64__) + catch (...) { return 0; } +#endif return 0; } @@ -383,7 +406,11 @@ namespace hw { { static usb_info const info[] = { // CP2102 USB to UART Bridge Controller - { 0x10c4, /*(Silicon Laboratories, Inc.)*/ 0xea60 } + { + 0x10c4, + /*(Silicon Laboratories, Inc.)*/ + 0xea60, + } }; using namespace boost::algorithm; @@ -396,7 +423,7 @@ namespace hw { if (!parseArduinoId(p.hardware_id, vid, pid, serial)) return false; - BOOST_FOREACH (const usb_info& i, info) { + for (const usb_info& i : info) { if (i.vid == vid && i.pid == pid) return true; } diff --git a/ceammc/ext/src/hw/hw_apple_smc.cpp b/ceammc/ext/src/hw/hw_apple_smc.cpp index c21e6941c3..99442e84a2 100644 --- a/ceammc/ext/src/hw/hw_apple_smc.cpp +++ b/ceammc/ext/src/hw/hw_apple_smc.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "hw_apple_smc.h" #include "ceammc_factory.h" +#include "ceammc_stub.h" HwAppleSMC::HwAppleSMC(const PdArgs& args) : BaseObject(args) @@ -53,8 +54,13 @@ void HwAppleSMC::m_read(t_symbol* s, const AtomListView& l) #endif } -void setup_hw_apple_smc() +#if !defined(__arm64__) && defined(WITH_SMC) +extern "C" void setup_hw_apple_smc() { ObjectFactory obj("hw.apple_smc"); obj.addMethod("read", &HwAppleSMC::m_read); } +#else +CONTROL_OBJECT_STUB(1, 1, "not supported on this platform"); +OBJECT_STUB_SETUP("hw.apple_smc", hw_apple_smc); +#endif diff --git a/ceammc/ext/src/hw/hw_apple_smc.h b/ceammc/ext/src/hw/hw_apple_smc.h index 5b6ab04922..fa229093b8 100644 --- a/ceammc/ext/src/hw/hw_apple_smc.h +++ b/ceammc/ext/src/hw/hw_apple_smc.h @@ -34,6 +34,6 @@ class HwAppleSMC : public BaseObject { void m_read(t_symbol* s, const AtomListView& l); }; -void setup_hw_apple_smc(); +extern "C" void setup_hw_apple_smc(); #endif // HW_APPLE_SMC_H diff --git a/ceammc/ext/src/hw/hw_apple_sms.cpp b/ceammc/ext/src/hw/hw_apple_sms.cpp index 2fc51e38c9..1cf2b3f521 100644 --- a/ceammc/ext/src/hw/hw_apple_sms.cpp +++ b/ceammc/ext/src/hw/hw_apple_sms.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "hw_apple_sms.h" #include "ceammc_factory.h" +#include "ceammc_stub.h" HwAppleSMS::HwAppleSMS(const PdArgs& args) : BaseObject(args) @@ -59,7 +60,12 @@ AtomList HwAppleSMS::getXYZ() const #endif } -void setup_hw_apple_sms() +#if !defined(__arm64__) && defined(WITH_SMS) +extern "C" void setup_hw_apple_sms() { ObjectFactory obj("hw.apple_sms"); } +#else +CONTROL_OBJECT_STUB(1, 1, "not supported on this platform"); +OBJECT_STUB_SETUP("hw.apple_sms", hw_apple_sms); +#endif diff --git a/ceammc/ext/src/hw/hw_apple_sms.h b/ceammc/ext/src/hw/hw_apple_sms.h index b59961adc4..316f4e9e2f 100644 --- a/ceammc/ext/src/hw/hw_apple_sms.h +++ b/ceammc/ext/src/hw/hw_apple_sms.h @@ -38,6 +38,6 @@ class HwAppleSMS : public BaseObject { AtomList getXYZ() const; }; -void setup_hw_apple_sms(); +extern "C" void setup_hw_apple_sms(); #endif // HW_APPLE_SMS_H diff --git a/ceammc/ext/src/hw/hw_arduino.cpp b/ceammc/ext/src/hw/hw_arduino.cpp index 95794d25a9..1e6cd024ef 100644 --- a/ceammc/ext/src/hw/hw_arduino.cpp +++ b/ceammc/ext/src/hw/hw_arduino.cpp @@ -43,7 +43,23 @@ ArduinoExternal::ArduinoExternal(const PdArgs& args) on_connect_ = new SymbolProperty("@on_connect", &s_); addProperty(on_connect_); - baud_rate_ = new IntEnumProperty("@rate", { 57600, 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 115200, 128000, 256000 }); + baud_rate_ = new IntEnumProperty("@rate", { + 57600, + 110, + 300, + 600, + 1200, + 2400, + 4800, + 9600, + 14400, + 19200, + 38400, + 56000, + 115200, + 128000, + 256000, + }); baud_rate_->setArgIndex(1); addProperty(baud_rate_); @@ -90,13 +106,13 @@ void ArduinoExternal::onFloat(t_float f) OBJ_ERR << "can't send data: device is not connected"; } -void ArduinoExternal::onList(const AtomList& lst) +void ArduinoExternal::onList(const AtomListView& lv) { std::string data; - data.reserve(lst.size()); + data.reserve(lv.size()); - for (size_t i = 0; i < lst.size(); i++) { - const Atom& a = lst[i]; + for (size_t i = 0; i < lv.size(); i++) { + const Atom& a = lv[i]; t_float f = 0; if (!a.getFloat(&f)) { diff --git a/ceammc/ext/src/hw/hw_arduino.h b/ceammc/ext/src/hw/hw_arduino.h index 2ed68a8f4d..ea689f39f2 100644 --- a/ceammc/ext/src/hw/hw_arduino.h +++ b/ceammc/ext/src/hw/hw_arduino.h @@ -30,7 +30,7 @@ class ArduinoExternal : public BaseObject { ArduinoExternal(const PdArgs& args); ~ArduinoExternal(); void onFloat(t_float f) override; - void onList(const AtomList& lst) override; + void onList(const AtomListView& lv) override; void initDone() override; void tick(); diff --git a/ceammc/ext/src/hw/hw_display.cpp b/ceammc/ext/src/hw/hw_display.cpp index 417e4a35f6..a745cc0604 100644 --- a/ceammc/ext/src/hw/hw_display.cpp +++ b/ceammc/ext/src/hw/hw_display.cpp @@ -13,6 +13,7 @@ *****************************************************************************/ #include "hw_display.h" #include "ceammc_factory.h" +#include "ceammc_stub.h" HwDisplay::HwDisplay(const PdArgs& args) : BaseObject(args) @@ -66,7 +67,12 @@ bool HwDisplay::setPropBrightness(t_float v) return false; } -void setup_hw_display() +#if (!defined(__arm64__) && defined(WITH_IODISPLAY)) || defined(WITH_X11DISPLAY) +extern "C" void setup_hw_display() { ObjectFactory obj("hw.display"); } +#else +CONTROL_OBJECT_STUB(1, 1, "not supported on this platform"); +OBJECT_STUB_SETUP("hw.display", hw_display); +#endif diff --git a/ceammc/ext/src/hw/hw_display.h b/ceammc/ext/src/hw/hw_display.h index 0dcaddea8c..a39074669c 100644 --- a/ceammc/ext/src/hw/hw_display.h +++ b/ceammc/ext/src/hw/hw_display.h @@ -39,6 +39,6 @@ class HwDisplay : public BaseObject { bool setPropBrightness(t_float v); }; -void setup_hw_display(); +extern "C" void setup_hw_display(); #endif // HW_DISPLAY_H diff --git a/ceammc/ext/src/hw/hw_kbd_light.cpp b/ceammc/ext/src/hw/hw_kbd_light.cpp index 48578f8fdc..a6942842c9 100644 --- a/ceammc/ext/src/hw/hw_kbd_light.cpp +++ b/ceammc/ext/src/hw/hw_kbd_light.cpp @@ -40,6 +40,7 @@ #include "hw_kbd_light.h" #include "ceammc_convert.h" #include "ceammc_factory.h" +#include "ceammc_stub.h" #ifdef __APPLE__ #include @@ -188,7 +189,12 @@ bool HwKeyboardLight::setLevel(t_float v) #endif } -void setup_hw_keyboard_light() +#if !defined(__arm64__) && defined(__APPLE__) +extern "C" void setup_hw_keyboard_light() { ObjectFactory obj("hw.kbd_light"); } +#else +CONTROL_OBJECT_STUB(1, 1, "not supported on this platform"); +OBJECT_STUB_SETUP("hw.kbd_light", hw_keyboard_light); +#endif diff --git a/ceammc/ext/src/hw/hw_kbd_light.h b/ceammc/ext/src/hw/hw_kbd_light.h index e1fb1de7d0..811af66d75 100644 --- a/ceammc/ext/src/hw/hw_kbd_light.h +++ b/ceammc/ext/src/hw/hw_kbd_light.h @@ -37,6 +37,6 @@ class HwKeyboardLight : public BaseObject { bool setLevel(t_float v); }; -void setup_hw_keyboard_light(); +extern "C" void setup_hw_keyboard_light(); #endif // HW_KBD_LIGHT_H diff --git a/ceammc/ext/src/hw/hw_motu_avb.cpp b/ceammc/ext/src/hw/hw_motu_avb.cpp new file mode 100644 index 0000000000..4d03d5ff7a --- /dev/null +++ b/ceammc/ext/src/hw/hw_motu_avb.cpp @@ -0,0 +1,613 @@ +#include "hw_motu_avb.h" +#include "args/argcheck2.h" +#include "ceammc_factory.h" +#include "ceammc_format.h" + +#include "fmt/core.h" +#include "httplib.h" + +#ifdef NDEBUG +#define TDBG(...) +#define TDBG_FMT(...) +#else +#define TDBG(msg) \ + do { \ + logger_.debug(msg); \ + } while (0) + +#define TDBG_FMT(msg, ...) \ + do { \ + logger_.debug(fmt::format(msg, __VA_ARGS__)); \ + } while (0) +#endif + +#define TERR(msg) \ + do { \ + logger_.error(msg); \ + } while (0) + +#define TERR_FMT(msg, ...) \ + do { \ + logger_.error(fmt::format(msg, __VA_ARGS__)); \ + } while (0) + +constexpr size_t KEY_MAX_LENGTH = 32; +constexpr const char* KEY_PHANTOM = "k:phantom-ch"; +constexpr const char* KEY_MIC_GAIN = "k:mic-gain"; +constexpr const char* KEY_MIC_PAD = "k:mic-pad"; +constexpr const char* KEY_MIC_PHASE = "k:mic-phase"; +constexpr const char* KEY_MIC_NAME = "k:mic-name"; +constexpr const char* KEY_MIC_TO_OUTPUT = "k:mic->out"; +constexpr const char* KEY_MIC_TO_COMPUTER = "k:mic->comp"; +constexpr const char* KEY_MIC_TO_MIXER = "k:mic->mix"; +constexpr const char* KEY_GUITAR_TO_OUTPUT = "k:guitar->out"; +constexpr const char* KEY_GUITAR_TO_COMPUTER = "k:guitar->comp"; +constexpr const char* KEY_GUITAR_TO_MIXER = "k:guitar->mix"; +constexpr const char* KEY_GUITAR_GAIN = "k:guitar-gain"; +constexpr const char* KEY_GUITAR_PHASE = "k:guitar-phase"; +constexpr const char* KEY_GUITAR_NAME = "k:guitar-name"; +constexpr const char* KEY_INPUT_GAIN = "k:input-gain"; +constexpr const char* KEY_INPUT_NAME = "k:input-name"; +constexpr const char* KEY_INPUT_COMP_NAME = "k:input-cname"; +constexpr const char* KEY_MAIN_GAIN = "k:main-gain"; +constexpr const char* KEY_PHONES_GAIN = "k:phones-gain"; +constexpr const char* KEY_OUTPUT_GAIN = "k:output-gain"; +constexpr const char* KEY_INPUT_TO_OUTPUT = "k:in->out"; +constexpr const char* KEY_INPUT_TO_COMPUTER = "k:in->comp"; +constexpr const char* KEY_INPUT_TO_MIXER = "k:in->mix"; + +constexpr int MOTU_DEFAULT_HTTP_PORT = 1280; + +constexpr int GROUP_INPUT_MIC = 0; +constexpr int GROUP_INPUT_GUITAR = 1; +constexpr int GROUP_INPUT_ANALOG = 2; +constexpr int GROUP_INPUT_TOSLINK = 3; +constexpr int GROUP_INPUT_COMPUTER = 4; +constexpr int GROUP_INPUT_MIX_IN = 9; +constexpr int GROUP_INPUT_MIX_REVERB = 10; +constexpr int GROUP_INPUT_MIX_GROUP = 11; +constexpr int GROUP_INPUT_MIX_MAIN = 12; +constexpr int GROUP_INPUT_MIX_AUX = 13; +constexpr int GROUP_INPUT_MIX_MONITOR = 14; + +constexpr int GROUP_OUTPUT_PHONES = 0; +constexpr int GROUP_OUTPUT_MAIN = 1; +constexpr int GROUP_OUTPUT_ANALOG = 2; +constexpr int GROUP_OUTPUT_TOSLINK = 3; +constexpr int GROUP_OUTPUT_COMPUTER = 4; +constexpr int GROUP_OUTPUT_MIXER = 9; + +namespace { + +enum RequestType { + REQ_SYNC = 1, + REQ_SET, +}; + +constexpr const char* STR_INPUT_PATTERN = "/{{}}/datastore/ext/ibank/{}/ch/{{}}"; +const std::string STR_INPUT_MIC = fmt::format(STR_INPUT_PATTERN, GROUP_INPUT_MIC); +const std::string STR_INPUT_GUITAR = fmt::format(STR_INPUT_PATTERN, GROUP_INPUT_GUITAR); +const std::string STR_INPUT_ANALOG = fmt::format(STR_INPUT_PATTERN, GROUP_INPUT_ANALOG); +const std::string STR_INPUT_TOSLINK = fmt::format(STR_INPUT_PATTERN, GROUP_INPUT_TOSLINK); +const std::string STR_INPUT_COMPUTER = fmt::format(STR_INPUT_PATTERN, GROUP_INPUT_COMPUTER); + +constexpr const char* STR_OUT_PATTERN = "/{{}}/datastore/ext/obank/{}/ch/{{}}"; +const std::string STR_OUTPUT_PHONES = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_PHONES); +const std::string STR_OUTPUT_MAIN = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_MAIN); +const std::string STR_OUTPUT_ANALOG = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_ANALOG); +const std::string STR_OUTPUT_TOSLINK = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_TOSLINK); +const std::string STR_OUTPUT_COMPUTER = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_COMPUTER); +const std::string STR_OUTPUT_MIXER = fmt::format(STR_OUT_PATTERN, GROUP_OUTPUT_MIXER); + +const std::unordered_map UrlMap = { + // mic + { KEY_PHANTOM, STR_INPUT_MIC + "/48V" }, + { KEY_MIC_GAIN, STR_INPUT_MIC + "/trim" }, + { KEY_MIC_PAD, STR_INPUT_MIC + "/pad" }, + { KEY_MIC_PHASE, STR_INPUT_MIC + "/phase" }, + { KEY_MIC_NAME, STR_INPUT_MIC + "/name" }, + // guitar + { KEY_GUITAR_GAIN, STR_INPUT_GUITAR + "/trim" }, + { KEY_GUITAR_PHASE, STR_INPUT_GUITAR + "/phase" }, + { KEY_GUITAR_NAME, STR_INPUT_GUITAR + "/name" }, + // analog in + { KEY_INPUT_GAIN, STR_INPUT_ANALOG + "/trim" }, + { KEY_INPUT_NAME, STR_INPUT_ANALOG + "/name" }, + // comp im + { KEY_INPUT_COMP_NAME, STR_INPUT_COMPUTER + "/name" }, + // routing + { KEY_MIC_TO_OUTPUT, STR_OUTPUT_ANALOG + "/src" }, + { KEY_MIC_TO_COMPUTER, STR_OUTPUT_COMPUTER + "/src" }, + { KEY_MIC_TO_MIXER, STR_OUTPUT_MIXER + "/src" }, + { KEY_GUITAR_TO_OUTPUT, STR_OUTPUT_ANALOG + "/src" }, + { KEY_GUITAR_TO_COMPUTER, STR_OUTPUT_COMPUTER + "/src" }, + { KEY_GUITAR_TO_MIXER, STR_OUTPUT_MIXER + "/src" }, + { KEY_INPUT_TO_OUTPUT, STR_OUTPUT_ANALOG + "/src" }, + { KEY_INPUT_TO_COMPUTER, STR_OUTPUT_COMPUTER + "/src" }, + { KEY_INPUT_TO_MIXER, STR_OUTPUT_MIXER + "/src" }, + // output + { KEY_MAIN_GAIN, STR_OUTPUT_MAIN + "/stereoTrim" }, + { KEY_PHONES_GAIN, STR_OUTPUT_PHONES + "/stereoTrim" }, + { KEY_OUTPUT_GAIN, STR_OUTPUT_ANALOG + "/trim" }, +}; + +void makeKeyChan(const char* key, char* dest, size_t max_size) +{ + strncpy(dest, key, max_size); + dest[max_size - 1] = '\0'; + dest[0] = 'c'; +} + +bool getRequestKey(const DataTypeDict& dict, const char* key, int& val) +{ + auto it = dict.find(key); + if (it == dict.end() || it->second.size() != 1 || !it->second[0].isInteger()) + return false; + + val = static_cast(it->second[0].asInt()); + return true; +} + +bool getRequestKey(const DataTypeDict& dict, const char* key, std::string& val) +{ + auto it = dict.find(key); + if (it == dict.end() || it->second.size() != 1 || !it->second[0].isSymbol()) + return false; + + val = it->second[0].asSymbol()->s_name; + return true; +} + +httplib::Client make_http_cli(const std::string& host, int http_port) +{ + httplib::Client cli(host, http_port); + cli.set_connection_timeout(1); + cli.set_tcp_nodelay(true); + return cli; +} + +bool setSingleValue(httplib::Client& cli, + const std::string& device, + const char* key, + const MotuAvbRequest& req, + ThreadPdLogger& log) +{ + if (!req.data.contains(key)) + return false; + + char key_chan[KEY_MAX_LENGTH]; + makeKeyChan(key, key_chan, KEY_MAX_LENGTH - 1); + + if (!req.data.contains(key_chan)) + return false; + + auto it = UrlMap.find(key); + if (it == UrlMap.end()) { + log.error(fmt::format("key not found: '{}'", key)); + return false; + } + + auto chan = req.data.at(key_chan).intAt(0, 0); + auto path_pattern = it->second; + auto path = fmt::format(path_pattern, device, chan); + + auto val = to_string(req.data.at(key)); + auto json = fmt::format("json={{\"value\":\"{}\"}}", val); + auto res = cli.Patch(path.c_str(), json.c_str(), "application/x-www-form-urlencoded"); + + log.debug(fmt::format("url: {}, json: {}", path, json)); + + if (res) { + if (res->status != 200 && res->status != 204) { + log.error(fmt::format("http error status: '{}'", res->status)); + return false; + } else + return true; + } else { + log.error(fmt::format("http request error: '{}'", to_string(res.error()))); + return false; + } +} + +} + +HwMotuAvb::HwMotuAvb(const PdArgs& args) + : MotuAvbBase(args) + , device_(nullptr) + , host_(nullptr) + , port_(nullptr) + , logger_() + , req_timer_([this]() { + scheduleTask(req_set_); + req_set_.data.clear(); + }) +{ + createOutlet(); + + device_ = new SymbolProperty("@dev", &s_); + device_->setArgIndex(0); + addProperty(device_); + + host_ = new SymbolProperty("@host", gensym("localhost")); + addProperty(host_); + + port_ = new IntProperty("@port", MOTU_DEFAULT_HTTP_PORT); + addProperty(port_); + + Dispatcher::instance().subscribe(this, subscriberId()); +} + +HwMotuAvb::Future HwMotuAvb::createTask() +{ + return std::async(std::launch::async, [this]() { + MotuAvbRequest req; + + try { + auto http_cli = make_http_cli(req.host, req.port); + + while (inPipe().try_dequeue(req)) { + switch (req.type) { + case REQ_SYNC: { + + auto url = fmt::format("/{}/datastore", req.device); + auto res = http_cli.Get(url.c_str()); + if (res) { + if (res->status == 200) { + DataTypeDict resp; + if (resp.fromJSON(res->body)) { + outPipe().enqueue(resp); + TDBG("HTTP ok"); + } else { + TERR("JSON parse error"); + } + } else { + TERR_FMT("http error status: '{}'", res->status); + TDBG_FMT("{}", res->body); + for (auto& kv : res->headers) { + TDBG_FMT("{}: {}", kv.first, kv.second); + } + } + } else { + TERR_FMT("http request error: '{}'", to_string(res.error())); + } + } break; + case REQ_SET: { + for (auto& kv : UrlMap) + setSingleValue(http_cli, req.device, kv.first, req, logger_); + } break; + default: + TERR_FMT("unknown request type: {}", req.type); + break; + } + + Dispatcher::instance().send({ subscriberId(), NOTIFY_UPDATE }); + } + } catch (std::exception& e) { + TERR_FMT("run thread exception: {}", e.what()); + } + }); +} + +void HwMotuAvb::processMessage(const DataTypeDict& msg) +{ + req_set_.data.clear(); +} + +void HwMotuAvb::scheduleTask(const MotuAvbRequest& req) +{ + if (!inPipe().enqueue(req)) { + OBJ_ERR << "can't make request: command queue is full"; + return; + } + + if (taskState() != TASK_RUNNING) + runTask(); +} + +void HwMotuAvb::m_set_single(t_symbol* s, const char* key, int ch, const Atom& val) +{ + if (!updateRequest(s, req_set_, REQ_SET)) + return; + + char key_chan[KEY_MAX_LENGTH]; + makeKeyChan(key, key_chan, KEY_MAX_LENGTH - 1); + + req_set_.data.insert(key, val); + req_set_.data.insert(key_chan, ch); + req_timer_.delay(100); +} + +void HwMotuAvb::routeEnable(t_symbol* s, int in_group, int in_channel, const char* out_key, int out_channel, bool val) +{ + if (val) { + auto msg = fmt::format("{}:{}", in_group, in_channel); + m_set_single(s, out_key, out_channel, gensym(msg.c_str())); + } else + m_set_single(s, out_key, out_channel, &s_); +} + +void HwMotuAvb::m_sync(t_symbol* s, const AtomListView& lv) +{ + MotuAvbRequest req; + if (!updateRequest(s, req, REQ_SYNC)) + return; + + scheduleTask(req); +} + +void HwMotuAvb::m_phantom(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_BOOL)) + return; + + m_set_single(s, KEY_PHANTOM, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_mic_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_FLOAT)) + return; + + m_set_single(s, KEY_MIC_GAIN, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_guitar_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_FLOAT)) + return; + + m_set_single(s, KEY_GUITAR_GAIN, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_guitar_phase(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_FLOAT)) + return; + + m_set_single(s, KEY_GUITAR_PHASE, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_guitar_name(t_symbol* s, const AtomListView& lv) +{ + static const args::ArgChecker chk("i>=0 s?"); + + if (!chk.check(lv, this)) + return chk.usage(this, s); + + m_set_single(s, KEY_GUITAR_NAME, lv.intAt(0, 0), lv.symbolAt(1, &s_)); +} + +void HwMotuAvb::m_input_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_FLOAT)) + return; + + m_set_single(s, KEY_INPUT_GAIN, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_input_name(t_symbol* s, const AtomListView& lv) +{ + static const args::ArgChecker chk("i>=0 s?"); + + if (!chk.check(lv, this)) + return chk.usage(this, s); + + m_set_single(s, KEY_INPUT_NAME, lv.intAt(0, 0), lv.symbolAt(1, &s_)); +} + +void HwMotuAvb::m_mic_pad(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_BOOL)) + return; + + m_set_single(s, KEY_MIC_PAD, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_mic_phase(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_BOOL)) + return; + + m_set_single(s, KEY_MIC_PHASE, lv.intAt(0, 0), lv.at(1)); +} + +void HwMotuAvb::m_mic_name(t_symbol* s, const AtomListView& lv) +{ + static const args::ArgChecker chk("i>=0 s?"); + + if (!chk.check(lv, this)) + return chk.usage(this, s); + + m_set_single(s, KEY_MIC_NAME, lv.intAt(0, 0), lv.symbolAt(1, &s_)); +} + +void HwMotuAvb::m_mic_to_output(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto mic_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_MIC, mic_idx, KEY_MIC_TO_OUTPUT, out_idx, state); +} + +void HwMotuAvb::m_mic_to_computer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto mic_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_MIC, mic_idx, KEY_MIC_TO_COMPUTER, out_idx, state); +} + +void HwMotuAvb::m_mic_to_mixer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto mic_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_MIC, mic_idx, KEY_MIC_TO_MIXER, out_idx, state); +} + +void HwMotuAvb::m_guitar_to_output(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_GUITAR, guitar_idx, KEY_GUITAR_TO_OUTPUT, out_idx, state); +} + +void HwMotuAvb::m_guitar_to_computer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_GUITAR, guitar_idx, KEY_GUITAR_TO_COMPUTER, out_idx, state); +} + +void HwMotuAvb::m_guitar_to_mixer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_GUITAR, guitar_idx, KEY_GUITAR_TO_MIXER, out_idx, state); +} + +void HwMotuAvb::m_input_to_output(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_ANALOG, guitar_idx, KEY_INPUT_TO_OUTPUT, out_idx, state); +} + +void HwMotuAvb::m_input_to_computer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_ANALOG, guitar_idx, KEY_INPUT_TO_COMPUTER, out_idx, state); +} + +void HwMotuAvb::m_input_to_mixer(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_INT, ARG_BOOL)) + return; + + auto guitar_idx = lv.intAt(0, 0); + auto out_idx = lv.intAt(1, 0); + auto state = lv.boolAt(2, false); + + routeEnable(s, GROUP_INPUT_ANALOG, guitar_idx, KEY_INPUT_TO_MIXER, out_idx, state); +} + +void HwMotuAvb::m_comp_input_name(t_symbol* s, const AtomListView& lv) +{ + static const args::ArgChecker chk("i>=0 s?"); + + if (!chk.check(lv, this)) + return chk.usage(this, s); + + m_set_single(s, KEY_INPUT_COMP_NAME, lv.intAt(0, 0), lv.symbolAt(1, &s_)); +} + +void HwMotuAvb::m_main_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_FLOAT)) + return; + + m_set_single(s, KEY_MAIN_GAIN, 0, lv.at(0)); +} + +void HwMotuAvb::m_phones_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_FLOAT)) + return; + + m_set_single(s, KEY_PHONES_GAIN, 0, lv.at(0)); +} + +void HwMotuAvb::m_output_gain(t_symbol* s, const AtomListView& lv) +{ + if (!checkArgs(lv, ARG_INT, ARG_FLOAT)) + return; + + m_set_single(s, KEY_OUTPUT_GAIN, lv.intAt(0, 0), lv.at(1)); +} + +bool HwMotuAvb::updateRequest(t_symbol* s, MotuAvbRequest& req, int type) const +{ + if (device_->value() == &s_) { + METHOD_ERR(s) << "empty device id"; + return false; + } + + req.host = host_->value()->s_name; + req.device = device_->value()->s_name; + req.type = type; + req.port = port_->value(); + return true; +} + +void setup_hw_motu_avb() +{ + ObjectFactory obj("hw.motu.avb"); + obj.addMethod("sync", &HwMotuAvb::m_sync); + + obj.addMethod("phantom", &HwMotuAvb::m_phantom); + obj.addMethod("mic_gain", &HwMotuAvb::m_mic_gain); + obj.addMethod("mic_pad", &HwMotuAvb::m_mic_pad); + obj.addMethod("mic_phase", &HwMotuAvb::m_mic_phase); + obj.addMethod("mic_name", &HwMotuAvb::m_mic_name); + obj.addMethod("mic->output", &HwMotuAvb::m_mic_to_output); + obj.addMethod("mic->comp", &HwMotuAvb::m_mic_to_computer); + obj.addMethod("mic->mix", &HwMotuAvb::m_mic_to_mixer); + + obj.addMethod("guitar_gain", &HwMotuAvb::m_guitar_gain); + obj.addMethod("guitar_phase", &HwMotuAvb::m_guitar_phase); + obj.addMethod("guitar_name", &HwMotuAvb::m_guitar_name); + obj.addMethod("guitar->output", &HwMotuAvb::m_guitar_to_output); + obj.addMethod("guitar->comp", &HwMotuAvb::m_guitar_to_computer); + obj.addMethod("guitar->mix", &HwMotuAvb::m_guitar_to_mixer); + + obj.addMethod("main_gain", &HwMotuAvb::m_main_gain); + obj.addMethod("phones_gain", &HwMotuAvb::m_phones_gain); + + obj.addMethod("input_gain", &HwMotuAvb::m_input_gain); + obj.addMethod("input_name", &HwMotuAvb::m_input_name); + obj.addMethod("input->output", &HwMotuAvb::m_input_to_output); + obj.addMethod("input->comp", &HwMotuAvb::m_input_to_computer); + obj.addMethod("input->mix", &HwMotuAvb::m_input_to_mixer); + + obj.addMethod("comp_input_name", &HwMotuAvb::m_comp_input_name); + + obj.addMethod("output_gain", &HwMotuAvb::m_output_gain); +} diff --git a/ceammc/ext/src/hw/hw_motu_avb.h b/ceammc/ext/src/hw/hw_motu_avb.h new file mode 100644 index 0000000000..504eb7783f --- /dev/null +++ b/ceammc/ext/src/hw/hw_motu_avb.h @@ -0,0 +1,73 @@ +#ifndef HW_MOTU_AVB_H +#define HW_MOTU_AVB_H + +#include "ceammc_clock.h" +#include "ceammc_pollthread_object.h" +#include "ceammc_thread.h" +#include "datatype_dict.h" +using namespace ceammc; + +struct MotuAvbRequest { + DataTypeDict data; + std::string host; + std::string device; + int port; + int type; +}; + +using MotuAvbBase = PollThreadQueueObject; + +class HwMotuAvb : public MotuAvbBase { + SymbolProperty* device_; + SymbolProperty* host_; + IntProperty* port_; + ThreadPdLogger logger_; + MotuAvbRequest req_set_; + ClockLambdaFunction req_timer_; + +public: + HwMotuAvb(const PdArgs& args); + + Future createTask() final; + void processMessage(const DataTypeDict& msg) final; + + void m_sync(t_symbol* s, const AtomListView& lv); + + void m_phantom(t_symbol* s, const AtomListView& lv); + void m_mic_gain(t_symbol* s, const AtomListView& lv); + void m_mic_pad(t_symbol* s, const AtomListView& lv); + void m_mic_phase(t_symbol* s, const AtomListView& lv); + void m_mic_name(t_symbol* s, const AtomListView& lv); + void m_mic_to_output(t_symbol* s, const AtomListView& lv); + void m_mic_to_computer(t_symbol* s, const AtomListView& lv); + void m_mic_to_mixer(t_symbol* s, const AtomListView& lv); + + void m_guitar_gain(t_symbol* s, const AtomListView& lv); + void m_guitar_phase(t_symbol* s, const AtomListView& lv); + void m_guitar_name(t_symbol* s, const AtomListView& lv); + void m_guitar_to_output(t_symbol* s, const AtomListView& lv); + void m_guitar_to_computer(t_symbol* s, const AtomListView& lv); + void m_guitar_to_mixer(t_symbol* s, const AtomListView& lv); + + void m_input_gain(t_symbol* s, const AtomListView& lv); + void m_input_name(t_symbol* s, const AtomListView& lv); + void m_input_to_output(t_symbol* s, const AtomListView& lv); + void m_input_to_computer(t_symbol* s, const AtomListView& lv); + void m_input_to_mixer(t_symbol* s, const AtomListView& lv); + + void m_comp_input_name(t_symbol* s, const AtomListView& lv); + + void m_main_gain(t_symbol* s, const AtomListView& lv); + void m_phones_gain(t_symbol* s, const AtomListView& lv); + void m_output_gain(t_symbol* s, const AtomListView& lv); + +private: + bool updateRequest(t_symbol* s, MotuAvbRequest& req, int type) const; + void scheduleTask(const MotuAvbRequest& req); + void m_set_single(t_symbol* s, const char* key, int ch, const Atom& val); + void routeEnable(t_symbol* s, int in_group, int in_channel, const char* out_key, int out_channel, bool val); +}; + +void setup_hw_motu_avb(); + +#endif // HW_MOTU_AVB_H diff --git a/ceammc/ext/src/hw/hw_serial.cpp b/ceammc/ext/src/hw/hw_serial.cpp index a915b7c08c..9100e1ea58 100644 --- a/ceammc/ext/src/hw/hw_serial.cpp +++ b/ceammc/ext/src/hw/hw_serial.cpp @@ -194,7 +194,23 @@ SerialPort::SerialPort(const PdArgs& args) port_->setArgIndex(1); addProperty(port_); - baud_rate_ = new IntEnumProperty("@rate", { 57600, 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 115200, 128000, 256000 }); + baud_rate_ = new IntEnumProperty("@rate", { + 57600, + 110, + 300, + 600, + 1200, + 2400, + 4800, + 9600, + 14400, + 19200, + 38400, + 56000, + 115200, + 128000, + 256000, + }); baud_rate_->setArgIndex(0); addProperty(baud_rate_); @@ -214,10 +230,10 @@ void SerialPort::onFloat(t_float f) pipe_in_->enqueue(static_cast(f)); } -void SerialPort::onList(const AtomList& l) +void SerialPort::onList(const AtomListView& lv) { // TODO check for connected - for (auto& a : l) + for (auto& a : lv) pipe_in_->enqueue(a.asFloat()); } diff --git a/ceammc/ext/src/hw/hw_serial.h b/ceammc/ext/src/hw/hw_serial.h index ed7514e05f..0074391a37 100644 --- a/ceammc/ext/src/hw/hw_serial.h +++ b/ceammc/ext/src/hw/hw_serial.h @@ -37,7 +37,7 @@ class SerialPort : public ThreadExternal { ~SerialPort(); void onFloat(t_float f) override; - void onList(const AtomList& l) override; + void onList(const AtomListView& lv) override; void onThreadDone(int rc) override; bool onThreadCommand(int code) override; diff --git a/ceammc/ext/src/hw/hw_udmx.cpp b/ceammc/ext/src/hw/hw_udmx.cpp index e613992ca8..4e7a25edfc 100644 --- a/ceammc/ext/src/hw/hw_udmx.cpp +++ b/ceammc/ext/src/hw/hw_udmx.cpp @@ -39,31 +39,31 @@ void uDMX::onFloat(t_float f) return; } -void uDMX::onList(const AtomList& lst) +void uDMX::onList(const AtomListView& lv) { std::vector data; - std::transform(lst.begin(), lst.end(), std::back_inserter(data), [](const Atom& a) { return a.asFloat(0); }); + std::transform(lv.begin(), lv.end(), std::back_inserter(data), [](const Atom& a) { return a.asFloat(0); }); udmx_->send(data, channel_->value()); } -void uDMX::onInlet(size_t n, const AtomListView& lst) +void uDMX::onInlet(size_t n, const AtomListView& lv) { - channel_->set(lst); + channel_->set(lv); } -void uDMX::m_open(t_symbol* s, const AtomList& lst) +void uDMX::m_open(t_symbol* s, const AtomList&) { if (!udmx_->open()) OBJ_ERR << "can't connect to uDMX device"; } -void uDMX::m_close(t_symbol* s, const AtomList& lst) +void uDMX::m_close(t_symbol* s, const AtomList&) { if (!udmx_->close()) OBJ_ERR << "can't close uDMX device"; } -void uDMX::m_find(t_symbol* s, const AtomList& lst) +void uDMX::m_find(t_symbol* s, const AtomList&) { udmx_->findDevice(); } diff --git a/ceammc/ext/src/hw/hw_udmx.h b/ceammc/ext/src/hw/hw_udmx.h index e66393ebc4..6cb63491f9 100644 --- a/ceammc/ext/src/hw/hw_udmx.h +++ b/ceammc/ext/src/hw/hw_udmx.h @@ -29,12 +29,12 @@ class uDMX : public BaseObject { ~uDMX(); void onFloat(t_float f) override; - void onList(const AtomList& lst) override; - void onInlet(size_t n, const AtomListView& lst) override; + void onList(const AtomListView& lv) override; + void onInlet(size_t n, const AtomListView& lv) override; - void m_open(t_symbol* s, const AtomList& lst); - void m_close(t_symbol* s, const AtomList& lst); - void m_find(t_symbol* s, const AtomList& lst); + void m_open(t_symbol* s, const AtomList&); + void m_close(t_symbol* s, const AtomList&); + void m_find(t_symbol* s, const AtomList&); }; void setup_hw_udmx(); diff --git a/ceammc/ext/src/hw/mod_hw.cpp b/ceammc/ext/src/hw/mod_hw.cpp index ec1da6f0f6..0690c61cf9 100644 --- a/ceammc/ext/src/hw/mod_hw.cpp +++ b/ceammc/ext/src/hw/mod_hw.cpp @@ -1,14 +1,21 @@ #include "mod_hw.h" +#include "hw_apple_smc.h" +#include "hw_apple_sms.h" #include "hw_arduino.h" +#include "hw_display.h" +#include "hw_kbd_light.h" #include "hw_serial.h" + +#ifdef WITH_LIBUSB_01 #include "hw_udmx.h" +#endif + +#ifdef WITH_LIBUSB_1 #include "hw_usb.h" +#endif -void setup_hw_apple_smc(); -void setup_hw_apple_sms(); void setup_hw_cpu_temp(); -void setup_hw_display(); -void setup_hw_keyboard_light(); +void setup_hw_motu_avb(); void ceammc_hw_setup() { @@ -19,6 +26,7 @@ void ceammc_hw_setup() setup_hw_cpu_temp(); setup_hw_display(); setup_hw_keyboard_light(); + setup_hw_motu_avb(); #ifdef WITH_LIBUSB_01 setup_hw_udmx(); diff --git a/ceammc/ext/src/lang/CMakeLists.txt b/ceammc/ext/src/lang/CMakeLists.txt index 5a9d4421b3..9cb2f79342 100644 --- a/ceammc/ext/src/lang/CMakeLists.txt +++ b/ceammc/ext/src/lang/CMakeLists.txt @@ -1,44 +1,73 @@ add_library(ceammc_lang STATIC mod_lang.cpp) target_include_directories(ceammc_lang - PRIVATE "$") + PRIVATE "$" + ${PROJECT_BINARY_DIR}) + +set(FAUST_SEPARATE_EXTERNAL OFF) +if(APPLE) + if(CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64") + set(FAUST_SEPARATE_EXTERNAL ON) + endif() +endif() if(WITH_FAUST) - pd_add_external(NAME "lang.faust~" - FILES lang_faust_tilde.cpp - INTERNAL True - LIBRARY ceammc - LINK ceammc ceammc_faust ceammc_core) - target_compile_definitions(lang.faust_tilde PRIVATE WITH_FAUST) - target_include_directories(lang.faust_tilde - PRIVATE - "$" - ${PROJECT_BINARY_DIR} # for config.h - ${PROJECT_SOURCE_DIR}/ceammc/extra/faust - ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/faust/architecture) - - pd_add_external(NAME "ui.faust~" - FILES lang_faust_ui_tilde.cpp lang_faust_tilde.cpp - INTERNAL True - LIBRARY ceammc - LINK ceammc lang.faust_tilde ceammc_faust ceammc_nui ceammc_core) - target_compile_definitions(ui.faust_tilde PRIVATE WITH_FAUST) - target_include_directories(ui.faust_tilde - PRIVATE - "$" - ${PROJECT_BINARY_DIR} # for config.h - ${PROJECT_SOURCE_DIR}/ceammc/extra/faust - ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/faust/architecture) + if(FAUST_SEPARATE_EXTERNAL) + target_compile_definitions(ceammc_lang PRIVATE -DFAUST_SEPARATE_EXTERNAL) + + pd_add_external(NAME "lang.faust~" + FILES lang_faust_tilde.cpp + INTERNAL True + LIBRARY ceammc + LINK ceammc ceammc_faust ceammc_core) + target_compile_definitions(lang.faust_tilde PRIVATE WITH_FAUST) + target_include_directories(lang.faust_tilde + PRIVATE + "$" + ${PROJECT_BINARY_DIR} # for config.h + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/faust/architecture) + + pd_add_external(NAME "ui.faust~" + FILES lang_faust_ui_tilde.cpp lang_faust_tilde.cpp + INTERNAL True + LIBRARY ceammc + LINK ceammc lang.faust_tilde ceammc_faust ceammc_nui ceammc_core) + target_compile_definitions(ui.faust_tilde PRIVATE WITH_FAUST) + target_include_directories(ui.faust_tilde + PRIVATE + "$" + ${PROJECT_BINARY_DIR} # for config.h + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/faust/architecture) + else() + target_include_directories(ceammc_lang + PRIVATE + "$" + ${PROJECT_BINARY_DIR} # for config.h + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust + ${PROJECT_SOURCE_DIR}/ceammc/extra/faust/faust/architecture) + target_sources(ceammc_lang PRIVATE lang_faust_tilde.cpp lang_faust_ui_tilde.cpp) + target_link_libraries(ceammc_lang PUBLIC ceammc_faust ceammc_nui) + endif() else() - pd_add_external(NAME "lang.faust~" - FILES lang_faust_tilde_stub.cpp - INTERNAL True - LIBRARY ceammc - LINK ceammc_core) - - pd_add_external(NAME "ui.faust~" - FILES lang_faust_ui_tilde_stub.cpp - INTERNAL True - LIBRARY ceammc - LINK ceammc_core) + target_sources(ceammc_lang PRIVATE lang_faust_tilde.cpp lang_faust_ui_tilde_stub.cpp) +endif() + +if(WITH_LUAJIT) + pkg_search_module(LUAJIT luajit luajit-5.1 REQUIRED) +endif() + +if(WITH_LUAJIT AND LUAJIT_FOUND) + target_sources(ceammc_lang PRIVATE lang_luajit.cpp lua_cmd.cpp lua_func.cpp lua_interp.cpp) + target_include_directories(ceammc_lang BEFORE PUBLIC ${LUAJIT_INCLUDE_DIRS}) + + target_link_libraries(ceammc_lang PUBLIC ${LUAJIT_LINK_LIBRARIES} readerwriterqueue) + target_compile_options(ceammc_lang PRIVATE ${LUAJIT_CFLAGS_OTHER}) + target_compile_definitions(ceammc_lang PRIVATE WITH_LUA) + + if(APPLE) + target_link_options(ceammc_lang + PRIVATE -pagezero_size 10000 -image_base 100000000) + endif() endif() diff --git a/ceammc/ext/src/lang/lang_faust_tilde.cpp b/ceammc/ext/src/lang/lang_faust_tilde.cpp index 796575973f..4308c62df0 100644 --- a/ceammc/ext/src/lang/lang_faust_tilde.cpp +++ b/ceammc/ext/src/lang/lang_faust_tilde.cpp @@ -487,24 +487,22 @@ std::string LangFaustTilde::canvasDir() const return cnv ? canvas_getdir(cnv)->s_name : std::string(); } -#ifdef _WIN32 -#define EXPORT extern "C" __declspec(dllexport) -#else -#define EXPORT extern "C" -#endif - -EXPORT void setup_lang0x2efaust_tilde() +void setup_lang0x2efaust_tilde() { if (!ceammc_init_done()) ceammc_setup(); + setup_lang_faust_non_external(); +} + +void setup_lang_faust_non_external() +{ SoundExternalFactory obj("lang.faust~", OBJECT_FACTORY_DEFAULT); obj.addMethod("reset", &LangFaustTilde::m_reset); obj.addMethod("open", &LangFaustTilde::m_open); obj.addMethod("update", &LangFaustTilde::m_update); obj.useClick(); - obj.classPointer(); std::string path = class_gethelpdir(obj.classPointer()); path += "/faust"; LangFaustTilde::addIncludePath(path); diff --git a/ceammc/ext/src/lang/lang_faust_tilde.h b/ceammc/ext/src/lang/lang_faust_tilde.h index 91ebf42c11..68dd033766 100644 --- a/ceammc/ext/src/lang/lang_faust_tilde.h +++ b/ceammc/ext/src/lang/lang_faust_tilde.h @@ -90,4 +90,14 @@ class LangFaustTilde : public SoundExternal { static faust::FaustConfig& faust_config_base(); }; +#ifdef _WIN32 +#define FAUST_LANG_EXPORT extern "C" __declspec(dllexport) +#else +#define FAUST_LANG_EXPORT extern "C" +#endif + +FAUST_LANG_EXPORT void setup_lang0x2efaust_tilde(); + +void setup_lang_faust_non_external(); + #endif // LANG_FAUST_TILDE_H diff --git a/ceammc/ext/src/lang/lang_faust_tilde_stub.cpp b/ceammc/ext/src/lang/lang_faust_tilde_stub.cpp index de71abdf37..a7d441099f 100644 --- a/ceammc/ext/src/lang/lang_faust_tilde_stub.cpp +++ b/ceammc/ext/src/lang/lang_faust_tilde_stub.cpp @@ -11,20 +11,7 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ -#include "ceammc_factory.h" +#include "ceammc_stub.h" -using namespace ceammc; - -class LangFaustStub : public BaseObject { -public: - LangFaustStub(const PdArgs& args) - : BaseObject(args) - { - createOutlet(); - } -}; - -extern "C" void setup_lang0x2efaust_tilde() -{ - ObjectFactory obj("lang.faust~"); -} +AUDIO_OBJECT_STUB(1, 1, 1, 0, "compiled without Faust support"); +OBJECT_STUB_SETUP("lang.faust~", lang0x2efaust_tilde); diff --git a/ceammc/ext/src/lang/lang_faust_ui_tilde.cpp b/ceammc/ext/src/lang/lang_faust_ui_tilde.cpp index 91851afff2..e2b1f3ee21 100644 --- a/ceammc/ext/src/lang/lang_faust_ui_tilde.cpp +++ b/ceammc/ext/src/lang/lang_faust_ui_tilde.cpp @@ -15,8 +15,12 @@ #include "ceammc_factory.h" #include "ceammc_platform.h" -#include "fmt/format.h" +#include "fmt/core.h" +#include "nui/button_view.h" #include "nui/factory.h" +#include "nui/label_view.h" +#include "nui/slider_view.h" +#include "nui/tk_view_impl.h" extern "C" { int ceammc_init_done(); @@ -46,7 +50,7 @@ void initFaustStyle() const HexColor PALLETE1 = 0x457b9d; const HexColor PALLETE2 = 0xa8dadc; const HexColor PALLETE3 = 0xf1faee; - const HexColor PALLETE4 = 0xe63946; //e63946 + const HexColor PALLETE4 = 0xe63946; // e63946 st.insertColor("box:fill_color"_hash, PALLETE0); st.insertColor("label:color"_hash, PALLETE3); @@ -437,17 +441,22 @@ void FaustMasterView::createButtonEntry(faust::UIProperty* p) vgroup->appendChild(std::move(hgroup)); } -#ifdef _WIN32 -#define EXPORT extern "C" __declspec(dllexport) -#else -#define EXPORT extern "C" -#endif - -EXPORT void setup_ui0x2efaust_tilde() +void setup_ui0x2efaust_tilde() { if (!ceammc_init_done()) ceammc_setup(); + auto cls = setup_ui_faust_non_external(); + + std::string path = class_gethelpdir(cls); + path += "/faust"; + LangFaustUiTilde::addIncludePath(path); +} + +t_class* setup_ui_faust_non_external() +{ + tcl_nui_init(); + ui::UIFactory obj("ui.faust~"); obj.useMouseEnter(); obj.useMouseLeave(); @@ -462,8 +471,5 @@ EXPORT void setup_ui0x2efaust_tilde() initFaustStyle(); - obj.classPointer(); - std::string path = class_gethelpdir(obj.classPointer()); - path += "/faust"; - LangFaustUiTilde::addIncludePath(path); + return obj.classPointer(); } diff --git a/ceammc/ext/src/lang/lang_faust_ui_tilde.h b/ceammc/ext/src/lang/lang_faust_ui_tilde.h index 7aae8c254e..22e0389f95 100644 --- a/ceammc/ext/src/lang/lang_faust_ui_tilde.h +++ b/ceammc/ext/src/lang/lang_faust_ui_tilde.h @@ -15,15 +15,11 @@ #define LANG_FAUST_UI_TILDE_H #include "ceammc_clock.h" -#include "ceammc_sound_external.h" #include "lang_faust_tilde.h" -#include "nui/button_view.h" -#include "nui/label_view.h" -#include "nui/nui.h" +#include "nui/button_model.h" +#include "nui/label_model.h" #include "nui/property.h" -#include "nui/rect.h" -#include "nui/slider_view.h" -#include "nui/tk_view_impl.h" +#include "nui/slider_model.h" #include "nui/view.h" #include "nui/widget.h" @@ -121,4 +117,14 @@ class LangFaustUiTilde : public ui::Widget { void createCustomUI() override; }; +#ifdef _WIN32 +#define FAUST_UI_EXPORT extern "C" __declspec(dllexport) +#else +#define FAUST_UI_EXPORT extern "C" +#endif + +FAUST_UI_EXPORT void setup_ui0x2efaust_tilde(); + +t_class* setup_ui_faust_non_external(); + #endif // LANG_FAUST_UI_TILDE_H diff --git a/ceammc/ext/src/lang/lang_faust_ui_tilde_stub.cpp b/ceammc/ext/src/lang/lang_faust_ui_tilde_stub.cpp index ae53f68f1d..fe397512f8 100644 --- a/ceammc/ext/src/lang/lang_faust_ui_tilde_stub.cpp +++ b/ceammc/ext/src/lang/lang_faust_ui_tilde_stub.cpp @@ -11,20 +11,7 @@ * contact the author of this file, or the owner of the project in which * this file belongs to. *****************************************************************************/ -#include "ceammc_factory.h" +#include "ceammc_stub.h" -using namespace ceammc; - -class FaustUiStub : public BaseObject { -public: - FaustUiStub(const PdArgs& args) - : BaseObject(args) - { - createOutlet(); - } -}; - -extern "C" void setup_ui0x2efaust_tilde() -{ - ObjectFactory obj("ui.faust~"); -} +AUDIO_OBJECT_STUB(1, 1, 1, 0, "compiled without Faust support"); +OBJECT_STUB_SETUP("ui.faust~", ui0x2efaust_tilde); diff --git a/ceammc/ext/src/lang/lang_luajit.cpp b/ceammc/ext/src/lang/lang_luajit.cpp new file mode 100644 index 0000000000..021a87c16c --- /dev/null +++ b/ceammc/ext/src/lang/lang_luajit.cpp @@ -0,0 +1,577 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "lang_luajit.h" +#include "ceammc_factory.h" +#include "ceammc_format.h" +#include "ceammc_platform.h" +#include "lua_interp.h" + +#include +#include + +extern "C" { +#include "luajit.h" +} + +namespace { + +class AtomLuaVisitor : public boost::static_visitor { +public: + Atom operator()(lua::LuaInt i) const + { + return i; + } + + Atom operator()(lua::LuaDouble f) const + { + return f; + } + + Atom operator()(const lua::LuaString& str) const + { + return gensym(str.c_str()); + } +}; +} + +LangLuaJit::LangLuaJit(const PdArgs& args) + : LangLuaBase(args) + , interp_(&outPipe(), subscriberId(), &quit()) + , nin_(nullptr) + , nout_(nullptr) +{ + nin_ = new IntProperty("@in", 1, PropValueAccess::INITONLY); + nin_->checkClosedRange(1, 16); + nin_->setArgIndex(0); + addProperty(nin_); + + nout_ = new IntProperty("@out", 1, PropValueAccess::INITONLY); + nout_->checkClosedRange(1, 16); + nout_->setArgIndex(1); + addProperty(nout_); + + Dispatcher::instance().subscribe(this, subscriberId()); + + if (!runTask()) + OBJ_ERR << "can't start LUA event loop"; + + setHighlightSyntax(EDITOR_SYNTAX_LUA); + setSpecialSymbolEscape(EDITOR_ESC_MODE_LUA); +} + +LangLuaJit::~LangLuaJit() +{ + finish(); +} + +void LangLuaJit::initDone() +{ + // inlets_.reserve(nin_->value() - 1); + for (int i = 1; i < nin_->value(); i++) + inlets_.emplace_back(this, i); + + for (auto& i : inlets_) + inlet_new(owner(), i.target(), nullptr, nullptr); + + for (int i = 0; i < nout_->value(); i++) + createOutlet(); +} + +void LangLuaJit::onBang() +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_BANG, LuaInt(0) })) { + OBJ_ERR << "can't send command to LUA interpreter: bang"; + return; + } + + notify_.notifyOne(); +} + +void LangLuaJit::onFloat(t_float f) +{ + using namespace lua; + + if (!inPipe().emplace(LUA_INTERP_FLOAT, LuaAtomList { LuaAtom(LuaInt(0)), LuaAtom(f) })) + OBJ_ERR << "can't send command to LUA interpreter: float"; + + notify_.notifyOne(); +} + +void LangLuaJit::onSymbol(t_symbol* s) +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_SYMBOL, LuaAtomList { LuaAtom(LuaInt(0)), LuaAtom(s) } })) + OBJ_ERR << "can't send command to LUA interpreter: float"; + + notify_.notifyOne(); +} + +void LangLuaJit::onList(const AtomListView& lv) +{ + using namespace lua; + + LuaAtomList args; + args.reserve(lv.size() + 1); + args.emplace_back(LuaInt(0)); + for (size_t i = 0; i < lv.size(); i++) { + const auto& a = lv[i]; + if (a.isFloat()) + args.emplace_back(LuaDouble(a.asT())); + else if (a.isSymbol()) + args.emplace_back(a.asT()); + } + + if (!inPipe().enqueue({ LUA_INTERP_LIST, args })) + OBJ_ERR << "can't send command to LUA interpreter: list"; + + notify_.notifyOne(); +} + +void LangLuaJit::onAny(t_symbol* sel, const AtomListView& lv) +{ + using namespace lua; + + LuaAtomList args; + args.reserve(lv.size() + 1); + args.emplace_back(sel); + for (size_t i = 0; i < lv.size(); i++) { + const auto& a = lv[i]; + if (a.isFloat()) + args.emplace_back(LuaDouble(a.asT())); + else if (a.isSymbol()) + args.emplace_back(a.asT()); + } + + if (!inPipe().enqueue({ LUA_INTERP_ANY, args })) + OBJ_ERR << "can't send command to LUA interpreter: any"; + + notify_.notifyOne(); +} + +void LangLuaJit::dump() const +{ + LangLuaBase::dump(); + + Debug os(this); + os << "source code: \n"; + for (auto& l : src_) + os << l.view() << "\n"; +} + +LangLuaJit::Future LangLuaJit::createTask() +{ + setQuit(false); + + return std::async( + std::launch::async, + [this]() { + lua::LuaCmd in_cmd; + + while (!quit()) { + try { + + while (inPipe().try_dequeue(in_cmd)) { + interp_.run(in_cmd); + + if (quit()) + return; + } + + notify_.waitFor(100); + + } catch (std::exception& e) { + std::cerr << "lua thread exception: " << e.what(); + return; + } + } + + return; + }); +} + +void LangLuaJit::processTask(NotifyEventType) +{ + lua::LuaCmd msg; + while (this->outPipe().try_dequeue(msg)) + processMessage(msg); +} + +void LangLuaJit::processMessage(const lua::LuaCmd& msg) +{ + using namespace lua; + + switch (msg.cmd) { + case LUA_CMD_BANG_TO: { + const int n = msg.args.empty() ? 0 : msg.args[0].getInt(); + bangTo(n); + } break; + case LUA_CMD_FLOAT_TO: { + const int n = (msg.args.size() < 1) ? 0 : msg.args[0].getInt(); + const t_float f = (msg.args.size() < 2) ? 0 : msg.args[1].getDouble(); + floatTo(n, f); + } break; + case LUA_CMD_SYMBOL_TO: { + const int n = (msg.args.size() < 1) ? 0 : msg.args[0].getInt(); + const auto str = (msg.args.size() < 2) ? LuaString() : msg.args[1].getString(); + symbolTo(n, gensym(str.c_str())); + } break; + case LUA_CMD_LIST_TO: { + const int n = (msg.args.size() < 1) ? 0 : msg.args[0].getInt(); + AtomList res; + res.reserve(msg.args.size()); + + for (auto& a : msg.args) + res.append(a.applyVisitor()); + + listTo(n, res.view(1)); + } break; + case LUA_CMD_ANY_TO: { + const int n = (msg.args.size() < 1) ? 0 : msg.args[0].getInt(); + const auto sel = (msg.args.size() < 2) ? LuaString("?") : msg.args[1].getString(); + + AtomList res; + res.reserve(msg.args.size()); + for (size_t i = 2; i < msg.args.size(); i++) + res.append(msg.args[i].applyVisitor()); + + anyTo(n, gensym(sel.c_str()), res); + break; + } break; + case LUA_CMD_POST: + if (msg.args.size() == 1 && msg.args[0].isString()) + OBJ_POST << msg.args[0].getString(); + + break; + case LUA_CMD_ERROR: + if (msg.args.size() == 1 && msg.args[0].isString()) + OBJ_ERR << msg.args[0].getString(); + + break; + case LUA_CMD_LOG: + if (msg.args.size() == 1 && msg.args[0].isString()) + OBJ_LOG << msg.args[0].getString(); + + break; + case LUA_CMD_SEND_BANG: { + const auto sel = (msg.args.size() < 1) ? LuaString("?") : msg.args[0].getString(); + auto sym = gensym(sel.c_str()); + if (sym->s_thing) + pd_bang(sym->s_thing); + else + OBJ_DBG << "send_bang() target not found: " << sym; + } break; + case LUA_CMD_SEND_FLOAT: { + const auto sel = (msg.args.size() < 1) ? LuaString("?") : msg.args[0].getString(); + const auto val = (msg.args.size() < 2) ? 0 : msg.args[1].getDouble(); + + auto sym = gensym(sel.c_str()); + if (sym->s_thing) + pd_float(sym->s_thing, val); + else + OBJ_DBG << "send_float() target not found: " << sym; + } break; + case LUA_CMD_SEND_SYMBOL: { + const auto sel = (msg.args.size() < 1) ? LuaString("?") : msg.args[0].getString(); + const auto val = (msg.args.size() < 2) ? "" : msg.args[1].getString(); + + auto sym = gensym(sel.c_str()); + if (sym->s_thing) + pd_symbol(sym->s_thing, gensym(val.c_str())); + else + OBJ_DBG << "send_symbol() target not found: " << sym; + } break; + case LUA_CMD_SEND_LIST: { + const auto sel = (msg.args.size() < 1) ? LuaString("?") : msg.args[0].getString(); + + auto sym = gensym(sel.c_str()); + if (sym->s_thing) { + const auto N = msg.args.size(); + if (N < 1) + return; + + AtomList res; + res.reserve(N - 1); + for (size_t i = 1; i < N; i++) + res.append(msg.args[i].applyVisitor()); + + pd_list(sym->s_thing, &s_list, res.size(), res.view().toPdData()); + } else + OBJ_DBG << "send_list() target not found: " << sym; + } break; + default: + OBJ_ERR << "unknown command code: " << msg.cmd; + break; + } +} + +void LangLuaJit::m_load(t_symbol* s, const AtomListView& lv) +{ + std::string path = to_string(lv); + const auto full_path = findInStdPaths(path.c_str()); + if (full_path.empty()) { + METHOD_ERR(s) << "can't find file: '" << path << "'"; + return; + } + + using namespace lua; + + std::ifstream ifs(full_path.c_str()); + std::string line; + src_.clear(); + constexpr int indent = 4; + while (std::getline(ifs, line)) { + // seems the only way to save formatting + // replace + auto start = line.find_first_not_of(' '); + if (start != std::string::npos) { + line.erase(0, start); + line.insert(0, start / indent, '\t'); + } + + editorAddLine(&s_, AtomList(gensym(line.c_str()))); + } + + if (!inPipe().enqueue({ LUA_INTERP_LOAD, full_path })) + METHOD_ERR(s) << "can't send command to LUA interpreter: load"; + + notify_.notifyOne(); +} + +void LangLuaJit::m_eval(t_symbol* s, const AtomListView& lv) +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_EVAL, to_string(lv) })) + METHOD_ERR(s) << "can't send command to LUA interpreter: eval"; + + notify_.notifyOne(); +} + +void LangLuaJit::m_call(t_symbol* s, const AtomListView& lv) +{ + using namespace lua; + + const bool ok = lv.size() > 0 && lv[0].isSymbol(); + if (!ok) { + METHOD_ERR(s) << "usage: method args???"; + return; + } + + lua::LuaCmd cmd(LUA_INTERP_CALL); + for (auto& a : lv) { + if (a.isFloat()) + cmd.appendArg(LuaAtom(a.asT())); + else if (a.isSymbol()) + cmd.appendArg(LuaAtom(a.asT())); + else + OBJ_ERR << "unknown atom type: " << (int)a.type(); + } + + if (!inPipe().enqueue(cmd)) + METHOD_ERR(s) << "can't send command to LUA interpreter: call"; + + notify_.notifyOne(); +} + +void LangLuaJit::onRestore(const AtomListView& lv) +{ + if (lv.empty()) { + updateInterpSource(); + } else { + src_.push_back({}); + auto& back = src_.back(); + + for (auto& a : lv) + back.push_back(a); + } +} + +void LangLuaJit::saveUser(t_binbuf* b) +{ + auto symA = gensym("#A"); + auto symR = gensym(restoreSymbol); + + for (auto& l : src_) { + if (l.empty()) + continue; + + binbuf_addv(b, "ss", symA, symR); + binbuf_add(b, l.size(), &l.front().atom()); + binbuf_addsemi(b); + } + + binbuf_addv(b, "ss", symA, symR); + binbuf_addsemi(b); +} + +void LangLuaJit::editorClear() +{ + src_.clear(); +} + +void LangLuaJit::editorAddLine(t_symbol* sel, const AtomListView& lv) +{ + src_.push_back({}); + auto& b = src_.back(); + + for (auto& a : lv) + b.push_back(a); +} + +EditorLineList LangLuaJit::getContentForEditor() const +{ + EditorLineList res; + for (auto& l : src_) { + if (l.empty()) + continue; + + auto str = EditorStringPool::pool().allocate(); + str->append(l.view()); + res.push_back(str); + } + + return res; +} + +void LangLuaJit::editorSync() +{ + LangLuaBase::editorSync(); + updateInterpSource(); +} + +void LangLuaJit::updateInterpSource() +{ + using namespace lua; + try { + if (!inPipe().enqueue(LUA_INTERP_EVAL_BEGIN)) + return; + + auto str = EditorStringPool::pool().allocate(); + + for (auto& l : src_) { + str->clear(); + str->append(l.view()); + if (!inPipe().enqueue({ LUA_INTERP_EVAL_APPEND, str->c_str() })) + break; + } + + if (!inPipe().enqueue(LUA_INTERP_EVAL_END)) + return; + + notify_.notifyOne(); + + } catch (...) { + OBJ_ERR << "error"; + } +} + +void LangLuaJit::inletBang(int id) +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_BANG, LuaAtomList { LuaAtom(LuaInt(id)) } })) + OBJ_ERR << "can't send command to LUA interpreter: bang"; + + notify_.notifyOne(); +} + +void LangLuaJit::inletFloat(int id, t_float f) +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_FLOAT, LuaAtomList { LuaAtom(LuaInt(id)), LuaAtom(f) } })) + OBJ_ERR << "can't send command to LUA interpreter: float"; + + notify_.notifyOne(); +} + +void LangLuaJit::inletSymbol(int id, t_symbol* s) +{ + using namespace lua; + + if (!inPipe().enqueue({ LUA_INTERP_SYMBOL, LuaAtomList { LuaAtom(LuaInt(id)), LuaAtom(s) } })) + OBJ_ERR << "can't send command to LUA interpreter: symbol"; + + notify_.notifyOne(); +} + +void LangLuaJit::inletList(int id, const AtomListView& lv) +{ + using namespace lua; + + const auto N = lv.size(); + LuaAtomList args; + args.reserve(N + 1); + args.emplace_back(LuaInt(id)); + + for (auto& a : lv) { + if (a.isFloat()) + args.emplace_back(LuaDouble(a.asT())); + else if (a.isSymbol()) + args.emplace_back(a.asT()); + } + + if (!inPipe().enqueue({ LUA_INTERP_LIST, args })) + OBJ_ERR << "can't send command to LUA interpreter: list"; + + notify_.notifyOne(); +} + +void LangLuaJit::inletAny(int id, t_symbol* s, const AtomListView& lv) +{ + using namespace lua; + + const auto N = lv.size(); + LuaAtomList args; + args.reserve(N + 2); + args.emplace_back(LuaInt(id)); + args.emplace_back(s); + + for (auto& a : lv) { + if (a.isFloat()) + args.emplace_back(LuaDouble(a.asT())); + else if (a.isSymbol()) + args.emplace_back(a.asT()); + } + + if (!inPipe().enqueue({ LUA_INTERP_ANY, args })) + OBJ_ERR << "can't send command to LUA interpreter: any"; + + notify_.notifyOne(); +} + +void setup_lang_luajit() +{ + LIB_DBG << LUAJIT_VERSION; + + Dispatcher::instance(); + SaveObjectFactory obj("lang.lua"); + + obj.addMethod("load", &LangLuaJit::m_load); + obj.addMethod("eval", &LangLuaJit::m_eval); + obj.addMethod("call", &LangLuaJit::m_call); + obj.addMethod("quit", &LangLuaJit::m_quit); + + LangLuaJit::registerMethods(obj); + + InletProxy::init(); + InletProxy::set_bang_callback(&LangLuaJit::inletBang); + InletProxy::set_float_callback(&LangLuaJit::inletFloat); + InletProxy::set_symbol_callback(&LangLuaJit::inletSymbol); + InletProxy::set_list_callback(&LangLuaJit::inletList); + InletProxy::set_any_callback(&LangLuaJit::inletAny); +} diff --git a/ceammc/ext/src/lang/lang_luajit.h b/ceammc/ext/src/lang/lang_luajit.h new file mode 100644 index 0000000000..02ec864f6f --- /dev/null +++ b/ceammc/ext/src/lang/lang_luajit.h @@ -0,0 +1,97 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef LANG_LUAJIT_H +#define LANG_LUAJIT_H + +#include "ceammc_containers.h" +#include "ceammc_editor_object.h" +#include "ceammc_proxy.h" +#include "ceammc_save_object.h" +#include "ceammc_thread.h" +#include "lua_cmd.h" +#include "lua_interp.h" + +#include + +using namespace ceammc; + +using LangLuaBase = SaveObject< + EditorObject< + PollThreadTaskObject< + PollThreadQueue, lua::LuaCommandQueue>>>; + +class LangLuaJit : public LangLuaBase { +public: + using FixedAtomList = SmallAtomListN<8>; + using FixedEditorList = boost::container::small_vector; + using Inlet = InletProxy; + +private: + lua::LuaInterp interp_; + FixedEditorList src_; + IntProperty* nin_; + IntProperty* nout_; + std::vector inlets_; + ThreadNotify notify_; + +public: + LangLuaJit(const PdArgs& args); + ~LangLuaJit() override; + + void initDone() override; + + void onBang() override; + void onFloat(t_float f) override; + void onSymbol(t_symbol* s) override; + void onList(const AtomListView& lv) override; + void onAny(t_symbol* sel, const AtomListView& lv) override; + + void dump() const override; + + Future createTask() override; + void processTask(NotifyEventType) override; + void processMessage(const lua::LuaCmd& msg); + + void m_load(t_symbol* s, const AtomListView& lv); + void m_eval(t_symbol* s, const AtomListView& lv); + void m_call(t_symbol* s, const AtomListView& lv); + + // save/restore + void onRestore(const AtomListView& lv) final; + void saveUser(t_binbuf* b) final; + +public: + void editorClear() final; + void editorAddLine(t_symbol* sel, const AtomListView& lv) final; + EditorLineList getContentForEditor() const final; + EditorTitleString editorTitle() const final { return "Lua"; } + void editorSync() final; + +public: + lua::LuaInterp& interp() { return interp_; } + +public: + void inletBang(int id); + void inletFloat(int id, t_float f); + void inletSymbol(int id, t_symbol* s); + void inletList(int id, const AtomListView& lv); + void inletAny(int id, t_symbol* s, const AtomListView& lv); + +private: + void updateInterpSource(); +}; + +void setup_lang_luajit(); + +#endif // LANG_LUAJIT_H diff --git a/ceammc/ext/src/lang/lua_cmd.cpp b/ceammc/ext/src/lang/lua_cmd.cpp new file mode 100644 index 0000000000..0883949e9c --- /dev/null +++ b/ceammc/ext/src/lang/lua_cmd.cpp @@ -0,0 +1,90 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "lua_cmd.h" + +namespace ceammc { +namespace lua { + LuaCmd::LuaCmd() + : cmd(LUA_CMD_NOP) + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_) + : cmd(cmd_) + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, const LuaString& s) + : cmd(cmd_) + , args { LuaAtom { s } } + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, LuaString&& s) + : cmd(cmd_) + , args { LuaAtom { s } } + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, std::initializer_list& a) + : cmd(cmd_) + , args { a } + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, const LuaAtomList& args_) + : cmd(cmd_) + , args(args_) + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, LuaAtomList&& args_) + : cmd(cmd_) + , args(std::move(args_)) + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, LuaDouble d) + : cmd(cmd_) + , args { LuaAtom { d } } + { + } + + LuaCmd::LuaCmd(LuaCmdEnum cmd_, LuaInt i) + : cmd(cmd_) + , args { LuaAtom { i } } + { + } + + void LuaCommandQueue::pushError(SubscriberId id, const std::string& str) + { + using namespace ceammc::lua; + + if (!try_enqueue({ LUA_CMD_ERROR, str })) + return; + + Dispatcher::instance().send({ id, NOTIFY_UPDATE }); + } + + void LuaCommandQueue::pushLog(SubscriberId id, const std::string& str) + { + using namespace ceammc::lua; + + if (!try_enqueue({ LUA_CMD_LOG, str })) + return; + + Dispatcher::instance().send({ id, NOTIFY_UPDATE }); + } +} +} diff --git a/ceammc/ext/src/lang/lua_cmd.h b/ceammc/ext/src/lang/lua_cmd.h new file mode 100644 index 0000000000..ea29bdc136 --- /dev/null +++ b/ceammc/ext/src/lang/lua_cmd.h @@ -0,0 +1,143 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef LUA_CMD_H +#define LUA_CMD_H + +#include "ceammc_poll_dispatcher.h" +#include "ceammc_pollthread_object.h" + +#include +#include +#include +#include + +namespace ceammc { +namespace lua { + enum LuaCmdEnum { + LUA_CMD_NOP = 0, + LUA_CMD_ERROR, + LUA_CMD_POST, + LUA_CMD_LOG, + LUA_CMD_BANG_TO, + LUA_CMD_FLOAT_TO, + LUA_CMD_SYMBOL_TO, + LUA_CMD_LIST_TO, + LUA_CMD_ANY_TO, + LUA_CMD_SEND, + LUA_CMD_SEND_BANG, + LUA_CMD_SEND_FLOAT, + LUA_CMD_SEND_SYMBOL, + LUA_CMD_SEND_LIST, + LUA_CMD_SEND_ANY, + LUA_INTERP_EVAL, + LUA_INTERP_LOAD, + LUA_INTERP_BANG, + LUA_INTERP_FLOAT, + LUA_INTERP_SYMBOL, + LUA_INTERP_LIST, + LUA_INTERP_ANY, + LUA_INTERP_CALL, + LUA_INTERP_PROPERTY, + LUA_INTERP_EVAL_BEGIN, + LUA_INTERP_EVAL_APPEND, + LUA_INTERP_EVAL_END + }; + + using LuaInt = int64_t; + using LuaDouble = double; + using LuaString = std::string; + + class LuaAtom { + boost::variant val_; + + public: + LuaAtom() + : val_(LuaInt(0)) + { + } + + explicit LuaAtom(bool b) + : val_(LuaInt(b ? 1 : 0)) + { + } + + explicit LuaAtom(LuaInt i) + : val_(i) + { + } + + explicit LuaAtom(LuaDouble d) + : val_(d) + { + } + + explicit LuaAtom(const LuaString& str) + : val_(str) + { + } + + explicit LuaAtom(const char* str) + : val_(str) + { + } + + explicit LuaAtom(t_symbol* s) + : val_(s->s_name) + { + } + + bool isInt() const { return val_.which() == 0; } + bool isDouble() const { return val_.which() == 1; } + bool isString() const { return val_.which() == 2; } + + LuaInt getInt() const { return boost::get(val_); } + LuaDouble getDouble() const { return boost::get(val_); } + const LuaString& getString() const { return boost::get(val_); } + + template + typename V::result_type applyVisitor() const { return boost::apply_visitor(V(), val_); } + }; + + using LuaAtomList = std::vector; + + class LuaCmd { + public: + LuaCmd(); + LuaCmd(LuaCmdEnum cmd_); + LuaCmd(LuaCmdEnum cmd_, LuaDouble d); + LuaCmd(LuaCmdEnum cmd_, LuaInt i); + LuaCmd(LuaCmdEnum cmd_, LuaString&& s); + LuaCmd(LuaCmdEnum cmd_, const LuaString& s); + LuaCmd(LuaCmdEnum cmd_, std::initializer_list& a); + LuaCmd(LuaCmdEnum cmd_, const LuaAtomList& args); + LuaCmd(LuaCmdEnum cmd_, LuaAtomList&& args); + + void appendArg(LuaAtom&& a) + { + args.push_back(a); + } + + LuaCmdEnum cmd { LUA_CMD_NOP }; + LuaAtomList args; + }; + + class LuaCommandQueue : public PollThreadQueue { + public: + void pushError(SubscriberId id, const std::string& str); + void pushLog(SubscriberId id, const std::string& str); + }; +} +} + +#endif // LUA_CMD_H diff --git a/ceammc/ext/src/lang/lua_func.cpp b/ceammc/ext/src/lang/lua_func.cpp new file mode 100644 index 0000000000..dd9dba4ae8 --- /dev/null +++ b/ceammc/ext/src/lang/lua_func.cpp @@ -0,0 +1,769 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "lua_func.h" +#include "ceammc_convert.h" +#include "fmt/core.h" +#include "lua_cmd.h" +#include "lua_stack_guard.h" + +#include +#include +#include + +constexpr size_t MAX_TABLE_LEN = 256; + +namespace ceammc { +namespace lua { + + struct Context { + LuaCommandQueue* pipe; + SubscriberId id; + }; + + static const char* type_to_string(int t) + { + switch (t) { + case LUA_TNONE: + return "none"; + case LUA_TNIL: + return "nil"; + case LUA_TBOOLEAN: + return "boolean"; + case LUA_TLIGHTUSERDATA: + return "lightuserdata"; + case LUA_TNUMBER: + return "number"; + case LUA_TSTRING: + return "string"; + case LUA_TTABLE: + return "table"; + case LUA_TFUNCTION: + return "function"; + case LUA_TUSERDATA: + return "userdata"; + case LUA_TTHREAD: + return "thread"; + default: + return "unknown"; + } + } + + static void check_arg_type(const Context& ctx, const char* name, int expected_type, lua_State* lua, int idx) + { + auto real_type = lua_type(lua, idx); + if (real_type != expected_type && ctx.pipe) { + ctx.pipe->try_enqueue({ LUA_CMD_ERROR, + fmt::format("'{}' expected to be '{}', got '{}'", name, type_to_string(expected_type), type_to_string(real_type)) }); + } + } + + int lua_mtof(lua_State* L) + { + const auto m = luaL_checknumber(L, 1); + const auto baseA = luaL_optnumber(L, 2, 440); + const auto freq = convert::midi2freq(m, baseA); + lua_pushnumber(L, freq); + + return 1; + } + + int lua_pd_post(lua_State* L) + { + const char* str = luaL_checkstring(L, 1); + + lua_getglobal(L, "_obj"); + if (lua_islightuserdata(L, -1) != 1) + return 0; + + auto* pipe = static_cast(lua_touserdata(L, -1)); + if (!pipe) + return 0; + + lua_getglobal(L, "_id"); + SubscriberId id = luaL_checkinteger(L, -1); + + if (!pipe->try_enqueue({ LUA_CMD_POST, str })) + return 0; + + if (!Dispatcher::instance().send({ id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_pd_error(lua_State* L) + { + const char* str = luaL_checkstring(L, 1); + + lua_getglobal(L, "_obj"); + if (lua_islightuserdata(L, -1) != 1) + return 0; + + auto* pipe = static_cast(lua_touserdata(L, -1)); + if (!pipe) + return 0; + + lua_getglobal(L, "_id"); + SubscriberId id = luaL_checkinteger(L, -1); + + if (!pipe->try_enqueue({ LUA_CMD_ERROR, str })) + return 0; + + if (!Dispatcher::instance().send({ id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + void lua_post_stack_idx(lua_State* L, LuaCommandQueue* pipe, SubscriberId id, int i) + { + char buf[96]; + snprintf(buf, sizeof(buf), "- %d %s\t", i, luaL_typename(L, i)); + switch (lua_type(L, i)) { + case LUA_TNUMBER: + snprintf(buf, sizeof(buf), "%g", lua_tonumber(L, i)); + break; + case LUA_TSTRING: + snprintf(buf, sizeof(buf), "%s", lua_tostring(L, i)); + break; + case LUA_TBOOLEAN: + snprintf(buf, sizeof(buf), "%s", (lua_toboolean(L, i) ? "true" : "false")); + break; + case LUA_TNIL: + snprintf(buf, sizeof(buf), "%s", "nil"); + break; + default: + snprintf(buf, sizeof(buf), "#%" PRIx64, (uint64_t)lua_topointer(L, i)); + break; + } + + pipe->try_enqueue({ LUA_CMD_POST, buf }); + } + + Context get_ctx(lua_State* L) + { + LuaStackGuard sg(L); + + Context ctx; + lua_getglobal(L, "_obj"); + ctx.pipe = static_cast(lua_touserdata(L, -1)); + + lua_getglobal(L, "_id"); + ctx.id = lua_tointeger(L, -1); + + return ctx; + } + + int lua_stack_dump(lua_State* L) + { + LuaStackGuard sg(L); + + auto ctx = get_ctx(L); + const int top = lua_gettop(L); + + for (int i = 1; i <= top; i++) + lua_post_stack_idx(L, ctx.pipe, ctx.id, i); + + return 1; + } + + bool lua_get_atom(lua_State* L, int i, LuaAtom& a) + { + switch (lua_type(L, i)) { + case LUA_TNUMBER: + a = LuaAtom(lua_tonumber(L, i)); + return true; + case LUA_TSTRING: + a = LuaAtom(lua_tostring(L, i)); + return true; + case LUA_TBOOLEAN: + a = LuaAtom(lua_toboolean(L, i) ? true : false); + return true; + default: + return false; + } + } + + LuaAtomList lua_get_args(lua_State* L) + { + const int nargs = lua_gettop(L); + LuaAtomList res; + res.reserve(nargs); + + for (int i = 1; i <= nargs; i++) { + LuaAtom a; + if (lua_get_atom(L, i, a)) + res.push_back(a); + } + + return res; + } + + int lua_pd_send(lua_State* L) + { + const auto ctx = get_ctx(L); + const int nargs = lua_gettop(L); + + if (nargs == 0) { + ctx.pipe->pushError(ctx.id, "empty string, usage: pd_send DEST ..."); + return 0; + } + + const LuaAtomList args = lua_get_args(L); + if (!ctx.pipe->try_enqueue({ LUA_CMD_SEND, args })) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + static LuaAtomList get_list_table(lua_State* L, int i) + { + LuaStackGuard sg(L); + LuaAtomList res; + + lua_pushnil(L); /* first key */ + while (lua_next(L, i) != 0) { + /* removes 'value'; keeps 'key' for next iteration */ + LuaAtom a; + if (lua_get_atom(L, -1, a)) + res.push_back(a); + + lua_pop(L, 1); + } + + return res; + } + + static LuaAtomList get_param_as_list(lua_State* L, int i) + { + LuaStackGuard sg(L); + LuaAtomList data; + + switch (lua_type(L, i)) { + case LUA_TNUMBER: + data.emplace_back(lua_tonumber(L, i)); + break; + case LUA_TBOOLEAN: + data.emplace_back(lua_toboolean(L, i) ? true : false); + break; + case LUA_TSTRING: + data.emplace_back(lua_tostring(L, i)); + break; + case LUA_TTABLE: { + auto tab = get_list_table(L, i); + data.insert(data.end(), tab.begin(), tab.end()); + } break; + default: + return data; + } + + return data; + } + + int lua_bang_to(lua_State* L) + { + const auto ctx = get_ctx(L); + const auto nargs = lua_gettop(L); + + LuaStackGuard sg(L); + + if (nargs != 1) { + ctx.pipe->pushError(ctx.id, "usage: bang_to(outlet)"); + return 0; + } + + const LuaInt n = luaL_optinteger(L, 1, 0); + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_BANG_TO, n))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_float_to(lua_State* L) + { + const auto ctx = get_ctx(L); + const auto nargs = lua_gettop(L); + + if (nargs != 2) { + ctx.pipe->pushError(ctx.id, "usage: float_to(outlet, value)"); + return 0; + } + + LuaStackGuard sg(L); + + const LuaInt n = luaL_optinteger(L, 1, 0); + const LuaDouble f = luaL_optnumber(L, 2, 0); + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_FLOAT_TO, LuaAtomList { LuaAtom { n }, LuaAtom { f } }))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_symbol_to(lua_State* L) + { + const auto ctx = get_ctx(L); + const auto nargs = lua_gettop(L); + + if (nargs != 2) { + ctx.pipe->pushError(ctx.id, "usage: symbol_to(outlet, value)"); + return 0; + } + + LuaStackGuard sg(L); + + const LuaInt n = luaL_optinteger(L, 1, 0); + const char* str = luaL_optstring(L, 2, ""); + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_SYMBOL_TO, LuaAtomList { LuaAtom { n }, LuaAtom { str } }))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_list_to(lua_State* L) + { + const auto ctx = get_ctx(L); + const auto nargs = lua_gettop(L); + const auto targ2 = lua_type(L, 2); + + const bool is_list_arg = (nargs == 2 && targ2 == LUA_TTABLE); + const bool is_tuple_arg = (nargs >= 2 && targ2 != LUA_TTABLE); + + if (!is_list_arg && !is_tuple_arg) { + ctx.pipe->pushError(ctx.id, "usage: list_to(outlet, list? or values?)"); + return 0; + } + + LuaStackGuard sg(L); + + const LuaInt n = luaL_optinteger(L, 1, 0); + LuaAtomList data; + data.reserve(nargs); + data.emplace_back(n); + + if (is_list_arg) { + auto tab = get_list_table(L, 2); + data.insert(data.end(), tab.begin(), tab.end()); + } else if (is_tuple_arg) { + for (int i = 2; i <= nargs; i++) { + switch (lua_type(L, i)) { + case LUA_TNUMBER: + data.emplace_back(lua_tonumber(L, i)); + break; + case LUA_TBOOLEAN: + data.emplace_back(lua_toboolean(L, i) ? true : false); + break; + case LUA_TSTRING: + data.emplace_back(lua_tostring(L, i)); + break; + default: + continue; + } + } + } + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_LIST_TO, data))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_any_to(lua_State* L) + { + const auto ctx = get_ctx(L); + const int nargs = lua_gettop(L); + const auto targ3 = lua_type(L, 3); + + LuaStackGuard sg(L); + + const bool is_list_arg = (nargs == 3 && targ3 == LUA_TTABLE); + const bool is_tuple_arg = (nargs >= 2 && targ3 != LUA_TTABLE); + + if (!is_list_arg && !is_tuple_arg) { + ctx.pipe->pushError(ctx.id, "usage: any_to(outlet, sel, list? or values?)"); + return 0; + } + + // target outlet + LuaInt n = luaL_optinteger(L, 1, 0); + + LuaAtomList data; + data.reserve(nargs); + data.emplace_back(n); + + // message selector + if (!lua_isstring(L, 2)) { + ctx.pipe->pushError(ctx.id, "selector should be the string"); + return 0; + } + data.emplace_back(lua_tostring(L, 2)); + + // message arguments + if (is_list_arg) { + auto tab = get_list_table(L, 3); + data.insert(data.end(), tab.begin(), tab.end()); + } else if (is_tuple_arg) { + for (int i = 3; i <= nargs; i++) { + switch (lua_type(L, i)) { + case LUA_TNUMBER: + data.emplace_back(lua_tonumber(L, i)); + break; + case LUA_TBOOLEAN: + data.emplace_back(lua_toboolean(L, i) ? true : false); + break; + case LUA_TSTRING: + data.emplace_back(lua_tostring(L, i)); + break; + default: + continue; + } + } + } + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_ANY_TO, data))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_send_bang(lua_State* L) + { + const auto ctx = get_ctx(L); + + LuaStackGuard sg(L); + + if (!lua_isstring(L, 1)) { + check_arg_type(ctx, "dest", LUA_TSTRING, L, 1); + ctx.pipe->pushError(ctx.id, "usage: send_bang(dest)"); + return 0; + } + + // destination + LuaString dest = luaL_optstring(L, 1, ""); + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_SEND_BANG, dest))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_send_float(lua_State* L) + { + const auto ctx = get_ctx(L); + const int nargs = lua_gettop(L); + + LuaStackGuard sg(L); + + if (!(nargs == 2 && lua_isstring(L, 1) && lua_isnumber(L, 2))) { + check_arg_type(ctx, "dest", LUA_TSTRING, L, 1); + check_arg_type(ctx, "val", LUA_TNUMBER, L, 2); + + ctx.pipe->pushError(ctx.id, "usage: send_float(dest, val)"); + return 0; + } + + // destination + auto dest = LuaAtom(luaL_optstring(L, 1, "")); + auto val = LuaAtom(luaL_optnumber(L, 2, 0)); + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_SEND_FLOAT, LuaAtomList { dest, val }))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_send_symbol(lua_State* L) + { + const auto ctx = get_ctx(L); + const int nargs = lua_gettop(L); + + LuaStackGuard sg(L); + + if (!(nargs == 2 && lua_isstring(L, 1) && lua_isstring(L, 2))) { + check_arg_type(ctx, "dest", LUA_TSTRING, L, 1); + check_arg_type(ctx, "val", LUA_TSTRING, L, 2); + + ctx.pipe->pushError(ctx.id, "usage: send_symbol(dest, val)"); + return 0; + } + + // destination + auto dest = LuaAtom(luaL_optstring(L, 1, "")); + auto val = LuaAtom(luaL_optstring(L, 2, "")); + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_SEND_SYMBOL, LuaAtomList { dest, val }))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_send_list(lua_State* L) + { + const auto ctx = get_ctx(L); + const auto nargs = lua_gettop(L); + const auto targ2 = lua_type(L, 2); + + const bool is_list_arg = (nargs == 2 && targ2 == LUA_TTABLE); + const bool is_tuple_arg = (nargs >= 2 && targ2 != LUA_TTABLE); + + LuaStackGuard sg(L); + + if (!is_list_arg && !is_tuple_arg) { + ctx.pipe->pushError(ctx.id, "usage: send_list(dest, list? or values?)"); + return 0; + } + + // destination + auto dest = LuaAtom(luaL_optstring(L, 1, "")); + + LuaAtomList data; + data.reserve(nargs); + data.emplace_back(dest); + + if (is_list_arg) { + auto tab = get_list_table(L, 2); + data.insert(data.end(), tab.begin(), tab.end()); + } else if (is_tuple_arg) { + for (int i = 2; i <= nargs; i++) { + switch (lua_type(L, i)) { + case LUA_TNUMBER: + data.emplace_back(lua_tonumber(L, i)); + break; + case LUA_TBOOLEAN: + data.emplace_back(lua_toboolean(L, i) ? true : false); + break; + case LUA_TSTRING: + data.emplace_back(lua_tostring(L, i)); + break; + default: + continue; + } + } + } + + if (!ctx.pipe->try_enqueue(LuaCmd(LUA_CMD_SEND_LIST, data))) + return 0; + + if (!Dispatcher::instance().send({ ctx.id, NOTIFY_UPDATE })) + return 0; + + return 1; + } + + int lua_sleep(lua_State* L) + { + auto n = luaL_checkinteger(L, 1); + if (n < 1) + return 0; + + std::this_thread::sleep_for(std::chrono::milliseconds(n)); + return 1; + } + + FunctionCall::FunctionCall(lua_State* L, int8_t nargs, const std::string& name) + : lua_(L) + , nargs_(nargs) + , npushed_(0) + , name_(name) + { + if (!lua_checkstack(lua_, nargs + 1)) { + std::cerr << "no space on stack before calling \"" << name_ << '"' << std::endl; + lua_ = nullptr; + return; + } + + lua_getglobal(L, name_.c_str()); + if (!lua_isfunction(L, -1)) { + std::cerr << "function '" << name_ << "' is undefined" << std::endl; + lua_pop(L, 1); + lua_ = nullptr; + return; + } + } + + bool FunctionCall::checkArgs() const + { + if (npushed_ > nargs_) { + std::cerr << "too many arguments, expected: " << nargs_ << std::endl; + return false; + } + + return true; + } + + bool FunctionCall::isDefined() const + { + if (!lua_) { + std::cerr << "undefined function: " << name_ << std::endl; + return false; + } + + return true; + } + + FunctionCall& FunctionCall::operator<<(bool v) + { + if (!isDefined() || !checkArgs()) + return *this; + + lua_pushboolean(lua_, v); + npushed_++; + + return *this; + } + + FunctionCall& FunctionCall::operator<<(double v) + { + if (!isDefined() || !checkArgs()) + return *this; + + lua_pushnumber(lua_, v); + npushed_++; + + return *this; + } + + FunctionCall& FunctionCall::operator<<(int64_t v) + { + if (!isDefined() || !checkArgs()) + return *this; + + lua_pushinteger(lua_, v); + npushed_++; + + return *this; + } + + FunctionCall& FunctionCall::operator<<(const char* s) + { + if (!isDefined() || !checkArgs()) + return *this; + + lua_pushstring(lua_, s); + npushed_++; + + return *this; + } + + FunctionCall& FunctionCall::operator<<(const LuaAtom& a) + { + if (a.isDouble()) + return this->operator<<(a.getDouble()); + else if (a.isInt()) + return this->operator<<(a.getInt()); + else if (a.isString()) + return this->operator<<(a.getString().c_str()); + else { + std::cerr << "unsupported LuaAtom type" << std::endl; + return *this; + } + } + + FunctionCall& FunctionCall::pushTable(size_t argc, const LuaAtom* argv) + { + if (!isDefined()) + return *this; + + if (argc > MAX_TABLE_LEN) { + std::cerr << "list is too long: " << argc << ", max allowed length is: " << MAX_TABLE_LEN << std::endl; + return *this; + } + + if (!lua_checkstack(lua_, argc)) { + std::cerr << "no space for " << argc << " element left on the stack" << std::endl; + return *this; + } + + // push new table + lua_createtable(lua_, argc, 0); + + for (size_t i = 0; i < argc; i++) { + // push insert index + lua_pushinteger(lua_, i + 1); + + const LuaAtom& a = argv[i]; + + if (a.isDouble()) + lua_pushnumber(lua_, a.getDouble()); + else if (a.isInt()) + lua_pushnumber(lua_, a.getInt()); + else if (a.isString()) + lua_pushstring(lua_, a.getString().c_str()); + else { + // pop index + lua_pop(lua_, 1); + continue; + } + + lua_settable(lua_, -3); + } + + npushed_++; + + return *this; + } + + bool FunctionCall::operator()() + { + if (!isDefined()) + return false; + + if (npushed_ < nargs_) { + std::cerr << "not all arguments pushed for function " << name_ << ". " << nargs_ << " expected, got: " << npushed_ << std::endl; + return false; + } else if (npushed_ > nargs_) { + std::cerr << "too many arguments pushed for function " << name_ << ". " << nargs_ << " expected, got: " << npushed_ << std::endl; + return false; + } + + if (lua_pcall(lua_, nargs_, 0, 0) != LUA_OK) { + if (lua_isstring(lua_, 1)) + std::cerr << "error: " << lua_tostring(lua_, -1); + + lua_pop(lua_, 1); + return false; + } + + return true; + } +} +} diff --git a/ceammc/ext/src/lang/lua_func.h b/ceammc/ext/src/lang/lua_func.h new file mode 100644 index 0000000000..b915b22b2d --- /dev/null +++ b/ceammc/ext/src/lang/lua_func.h @@ -0,0 +1,73 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef LUA_FUNC_H +#define LUA_FUNC_H + +#include "lua.hpp" +#include "lua_cmd.h" + +#include +#include + +namespace ceammc { +namespace lua { + int lua_mtof(lua_State* L); + int lua_pd_error(lua_State* L); + int lua_pd_post(lua_State* L); + int lua_pd_send(lua_State* L); + int lua_stack_dump(lua_State* L); + int lua_sleep(lua_State* L); + // output + int lua_any_to(lua_State* L); + int lua_bang_to(lua_State* L); + int lua_float_to(lua_State* L); + int lua_symbol_to(lua_State* L); + int lua_list_to(lua_State* L); + // send + int lua_send_bang(lua_State* L); + int lua_send_float(lua_State* L); + int lua_send_symbol(lua_State* L); + int lua_send_list(lua_State* L); + + class FunctionCall { + lua_State* lua_; + const int16_t nargs_; + int16_t npushed_; + std::string name_; + + public: + FunctionCall(lua_State* L, int8_t nargs, const std::string& name); + + FunctionCall& operator<<(bool v); + FunctionCall& operator<<(float v) { return this->operator<<(double(v)); } + FunctionCall& operator<<(double v); + FunctionCall& operator<<(int32_t v) { return this->operator<<(int64_t(v)); } + FunctionCall& operator<<(int64_t v); + FunctionCall& operator<<(const char* s); + FunctionCall& operator<<(const std::string& s) { return this->operator<<(s.c_str()); } + FunctionCall& operator<<(const LuaAtom& a); + + FunctionCall& pushTable(size_t argc, const LuaAtom* argv); + + operator bool() const { return lua_ != nullptr; } + bool operator()(); + + private: + bool checkArgs() const; + bool isDefined() const; + }; +} +} + +#endif // LUA_FUNC_H diff --git a/ceammc/ext/src/lang/lua_interp.cpp b/ceammc/ext/src/lang/lua_interp.cpp new file mode 100644 index 0000000000..7071228ea6 --- /dev/null +++ b/ceammc/ext/src/lang/lua_interp.cpp @@ -0,0 +1,306 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "lua_interp.h" +#include "fmt/format.h" +#include "lua_func.h" +#include "lua_stack_guard.h" + +#include "lua.hpp" + +#include + +namespace ceammc { + +namespace lua { + + static void line_hook_fn(lua_State* L, lua_Debug* ar) + { + if (ar->event == LUA_HOOKLINE) { + lua_getglobal(L, "_quit"); + if (lua_islightuserdata(L, -1) != 1) + return; + + auto pquit = static_cast(lua_touserdata(L, -1)); + if (pquit && *pquit && **pquit) + luaL_error(L, "QUIT"); + } + } + + LuaInterp::LuaInterp(LuaCommandQueue* pipe, SubscriberId id, const std::atomic_bool* quit) + : lua_(nullptr) + , pipe_(pipe) + , quit_(quit) + , id_(id) + { + /* initialize Lua */ + lua_ = luaL_newstate(); + if (!lua_) { + LIB_ERR << "can't allocate lua interperter"; + return; + } + + luaopen_base(lua_); + luaopen_math(lua_); + luaopen_string(lua_); + luaopen_table(lua_); + + luaopen_bit(lua_); + luaopen_jit(lua_); + // luaopen_io(lua_); + // luaopen_os(lua_); + // luaopen_package(lua_); + // luaopen_debug(lua_); + // luaopen_ffi(lua_); + + lua_pushcfunction(lua_, lua_pd_post); + lua_setglobal(lua_, "pd_post"); + + lua_pushcfunction(lua_, lua_pd_error); + lua_setglobal(lua_, "pd_error"); + + // output + lua_pushcfunction(lua_, lua_bang_to); + lua_setglobal(lua_, "bang_to"); + lua_pushcfunction(lua_, lua_float_to); + lua_setglobal(lua_, "float_to"); + lua_pushcfunction(lua_, lua_symbol_to); + lua_setglobal(lua_, "symbol_to"); + lua_pushcfunction(lua_, lua_list_to); + lua_setglobal(lua_, "list_to"); + lua_pushcfunction(lua_, lua_any_to); + lua_setglobal(lua_, "any_to"); + + // send + lua_pushcfunction(lua_, lua_send_bang); + lua_setglobal(lua_, "send_bang"); + lua_pushcfunction(lua_, lua_send_float); + lua_setglobal(lua_, "send_float"); + lua_pushcfunction(lua_, lua_send_symbol); + lua_setglobal(lua_, "send_symbol"); + lua_pushcfunction(lua_, lua_send_list); + lua_setglobal(lua_, "send_list"); + + lua_pushcfunction(lua_, lua_sleep); + lua_setglobal(lua_, "sleep"); + + lua_pushcfunction(lua_, lua_mtof); + lua_setglobal(lua_, "mtof"); + + lua_pushcfunction(lua_, lua_pd_send); + lua_setglobal(lua_, "pd_send"); + + lua_pushcfunction(lua_, lua_stack_dump); + lua_setglobal(lua_, "stack_dump"); + + lua_pushlightuserdata(lua_, pipe); + lua_setglobal(lua_, "_obj"); + + lua_pushinteger(lua_, id); + lua_setglobal(lua_, "_id"); + + // note: pointer to pointer + // lua_pushlightuserdata(lua_, &quit_); + // lua_setglobal(lua_, "_quit"); + + // Initialisation code + lua_sethook(lua_, &line_hook_fn, LUA_MASKLINE, 0); + + luaL_dostring(lua_, R"( +-- convert list to string +function str(var, delim) + if type(var) ~= "table" then + return tostring(var) + end + + if delim == nil then delim = " " end + local res = "" + for i=1,#var do + if i ~= 1 then + res = res .. delim + end + + res = res .. var[i] + end + + return res +end +)"); + } + + LuaInterp::~LuaInterp() + { + if (lua_) + lua_close(lua_); + } + + void LuaInterp::run(const LuaCmd& cmd) + { + if (quit_ && *quit_) + return; + + try { + lua::LuaStackGuard sg(lua_, true); + + switch (cmd.cmd) { + case LUA_INTERP_EVAL: { + if (cmd.args.size() == 1 && cmd.args[0].isString()) { + const auto str = cmd.args[0].getString(); + + if (luaL_dostring(lua_, str.c_str()) != LUA_OK) { + error(fmt::format("eval error:\n\t{}", lua_tostring(lua_, lua_gettop(lua_)))); + lua_pop(lua_, lua_gettop(lua_)); + } else + log(fmt::format("eval: '{}'", str)); + } + } break; + case LUA_INTERP_LOAD: { + if (cmd.args.size() == 1 && cmd.args[0].isString()) { + const auto str = cmd.args[0].getString(); + + if (luaL_dofile(lua_, str.c_str()) != LUA_OK) { + error(fmt::format("eval error:\n\t{}", lua_tostring(lua_, lua_gettop(lua_)))); + lua_pop(lua_, lua_gettop(lua_)); + } else + log(fmt::format("load file: '{}'", str)); + } else + error("invalid arguments: path expected"); + } break; + case LUA_INTERP_BANG: { + if (cmd.args.size() == 1 && cmd.args[0].isInt()) { + FunctionCall fn(lua_, 1, "on_bang"); + if (!fn) + return; + + fn << cmd.args[0]; + + fn(); + } + } break; + case LUA_INTERP_FLOAT: { + // args: INLET_IDX FLOAT + if (cmd.args.size() == 2 && cmd.args[0].isInt() && cmd.args[1].isDouble()) { + FunctionCall fn(lua_, 2, "on_float"); + if (!fn) + return; + + fn << cmd.args[0]; + fn << cmd.args[1]; + + fn(); + } + } break; + case LUA_INTERP_SYMBOL: { + // args: INLET_IDX SYMBOL + if (cmd.args.size() == 2 && cmd.args[0].isInt() && cmd.args[1].isString()) { + FunctionCall fn(lua_, 2, "on_symbol"); + if (!fn) + return; + + fn << cmd.args[0]; + fn << cmd.args[1]; + + fn(); + } + } break; + case LUA_INTERP_LIST: { + // args: INLET_IDX VALUES?... + if (cmd.args.size() > 1 && cmd.args[0].isInt()) { + FunctionCall fn(lua_, 2, "on_list"); + if (!fn) + return; + + fn << cmd.args[0]; + fn.pushTable(cmd.args.size() - 1, cmd.args.data() + 1); + + fn(); + } + } break; + case LUA_INTERP_ANY: { + // args: SELECTOR VALUES?... + if (cmd.args.size() >= 1 && cmd.args[0].isString()) { + FunctionCall fn(lua_, 2, "on_any"); + if (!fn) + return; + + fn << cmd.args[0]; + fn.pushTable(cmd.args.size() - 1, cmd.args.data() + 1); + + fn(); + } else { + } + } break; + case LUA_INTERP_CALL: { + // args: METHOD ARGS?... + if (cmd.args.size() >= 1 && cmd.args[0].isString()) { + FunctionCall fn(lua_, cmd.args.size() - 1, cmd.args[0].getString()); + if (!fn) + return; + + for (size_t i = 1; i < cmd.args.size(); i++) + fn << cmd.args[i]; + + fn(); + } else { + } + } break; + case LUA_INTERP_EVAL_BEGIN: { + eval_string_.clear(); + } break; + case LUA_INTERP_EVAL_APPEND: { + if (cmd.args.size() == 1 && cmd.args[0].isString()) { + auto str = cmd.args[0].getString(); + boost::replace_all(str, "\\x09", "\t"); + boost::replace_all(str, "\\x2c", ","); + boost::replace_all(str, "\\x7b", "{"); + boost::replace_all(str, "\\x7d", "}"); + boost::replace_all(str, "\\x3b", ";"); + boost::replace_all(str, "\\x5c", "\\"); + + eval_string_.append(str); + eval_string_.append("\n"); + } + } break; + case LUA_INTERP_EVAL_END: { + if (!eval_string_.empty()) { + if (luaL_dostring(lua_, eval_string_.c_str()) != LUA_OK) { + error(fmt::format("source error:\n\t{}", lua_tostring(lua_, lua_gettop(lua_)))); + lua_pop(lua_, lua_gettop(lua_)); + } + } else + error("empty eval string"); + } break; + case LUA_CMD_NOP: // ignore silently + break; + default: + error(fmt::format("unsupported command: {}", cmd.cmd)); + break; + } + } catch (std::exception& e) { + error(fmt::format("exception: {}", e.what())); + } + } + + void LuaInterp::error(const std::string& str) + { + std::cerr << str << std::endl; + pipe_->pushError(id_, str); + } + + void LuaInterp::log(const std::string& str) + { + std::cerr << "[debug] " << str << std::endl; + pipe_->pushLog(id_, str); + } +} +} diff --git a/ceammc/ext/src/lang/lua_interp.h b/ceammc/ext/src/lang/lua_interp.h new file mode 100644 index 0000000000..5a09516cdf --- /dev/null +++ b/ceammc/ext/src/lang/lua_interp.h @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef LUA_INTERP_H +#define LUA_INTERP_H + +#include "ceammc_pollthread_object.h" +#include "lua_cmd.h" + +extern "C" { +#include "lua.h" +} + +#include + +namespace ceammc { + +namespace lua { + class LuaInterp { + private: + lua_State* lua_; + LuaCommandQueue* pipe_ { nullptr }; + const std::atomic_bool* quit_; + SubscriberId id_ { 0 }; + std::string eval_string_; + + LuaInterp(const LuaInterp&) = delete; + LuaInterp& operator=(const LuaInterp&) = delete; + + public: + LuaInterp(LuaCommandQueue* pipe, SubscriberId id, const std::atomic_bool* quit); + virtual ~LuaInterp(); + + void run(const LuaCmd& cmd); + + private: + void error(const std::string& str); + void log(const std::string& str); + }; + +} +} + +#endif // LUA_INTERP_H diff --git a/ceammc/ext/src/lang/lua_stack_guard.h b/ceammc/ext/src/lang/lua_stack_guard.h new file mode 100644 index 0000000000..8f85faf589 --- /dev/null +++ b/ceammc/ext/src/lang/lua_stack_guard.h @@ -0,0 +1,57 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef LUA_STACK_GUARD_H +#define LUA_STACK_GUARD_H + +#include "lua.hpp" + +#include + +namespace ceammc { +namespace lua { + + class LuaStackGuard { + lua_State* state_; + int top_; + bool debug_; + + public: + LuaStackGuard(lua_State* l, bool debug = false) + : state_(l) + , top_(lua_gettop(l)) + , debug_(debug) + { + if (debug_) + std::cerr << "[ LuaStackGuard] stack size: " << top_ << std::endl; + } + + ~LuaStackGuard() + { + if (debug_) + std::cerr << "[~LuaStackGuard] stack size: " << top_ << std::endl; + + if (!state_) + return; + + auto current_top = lua_gettop(state_); + if (current_top > top_) { + lua_pop(state_, current_top - top_); + } + } + }; + +} +} + +#endif // LUA_STACK_GUARD_H diff --git a/ceammc/ext/src/lang/mod_lang.cpp b/ceammc/ext/src/lang/mod_lang.cpp index 6dd097cbfb..e9134fa161 100644 --- a/ceammc/ext/src/lang/mod_lang.cpp +++ b/ceammc/ext/src/lang/mod_lang.cpp @@ -1,5 +1,22 @@ #include "mod_lang.h" +#ifdef WITH_LUA +#include "lang_luajit.h" +#endif + +#ifndef FAUST_SEPARATE_EXTERNAL +#include "lang_faust_tilde.h" +#include "lang_faust_ui_tilde.h" +#endif + void ceammc_lang_setup() { +#ifdef WITH_LUA + setup_lang_luajit(); +#endif + +#ifndef FAUST_SEPARATE_EXTERNAL + setup_lang_faust_non_external(); + setup_ui_faust_non_external(); +#endif } diff --git a/ceammc/ext/src/lfo/lfo_impulse.h b/ceammc/ext/src/lfo/lfo_impulse.h index 244e0bb622..1d1a4581d9 100644 --- a/ceammc/ext/src/lfo/lfo_impulse.h +++ b/ceammc/ext/src/lfo/lfo_impulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo_impulse" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_impulse -scn lfo_impulse_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_impulse_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_impulse_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_impulse_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_impulse_dsp { +class FAUST_API lfo_impulse_dsp { public: @@ -162,7 +247,7 @@ class lfo_impulse_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_impulse_dsp { +class FAUST_API decorator_dsp : public lfo_impulse_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_impulse_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_impulse_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_impulse_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_impulse : public lfo_impulse_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_impulse #endif @@ -559,6 +636,13 @@ struct lfo_impulse : public lfo_impulse_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_impulse : public lfo_impulse_dsp { private: @@ -570,7 +654,7 @@ class lfo_impulse : public lfo_impulse_dsp { public: void metadata(Meta* m) { - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_impulse -scn lfo_impulse_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_impulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -578,8 +662,10 @@ class lfo_impulse : public lfo_impulse_dsp { m->declare("maths.lib/name", "Faust Math Library"); m->declare("maths.lib/version", "2.5"); m->declare("name", "lfo_impulse"); + m->declare("oscillators.lib/lf_sawpos:author", "Bart Brouns, revised by Stéphane Letz"); + m->declare("oscillators.lib/lf_sawpos:licence", "STK-4.3"); m->declare("oscillators.lib/name", "Faust Oscillator Library"); - m->declare("oscillators.lib/version", "0.1"); + m->declare("oscillators.lib/version", "0.3"); m->declare("platform.lib/name", "Generic Platform Library"); m->declare("platform.lib/version", "0.2"); } @@ -596,14 +682,14 @@ class lfo_impulse : public lfo_impulse_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } } @@ -631,13 +717,13 @@ class lfo_impulse : public lfo_impulse_dsp { ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - float fTemp0 = (fRec0[1] + (fConst0 * std::fabs(float(input0[i0])))); - fRec0[0] = (fTemp0 - std::floor(fTemp0)); - output0[i0] = FAUSTFLOAT(((fRec0[0] - fRec0[1]) < 0.0f)); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = fRec0[1] + fConst0 * std::fabs(float(input0[i0])); + fRec0[0] = fTemp0 - std::floor(fTemp0); + output0[i0] = FAUSTFLOAT((fRec0[0] - fRec0[1]) < 0.0f); fRec0[1] = fRec0[0]; } } diff --git a/ceammc/ext/src/lfo/lfo_mosc.h b/ceammc/ext/src/lfo/lfo_mosc.h index cd81b15871..2d1f3bb8a3 100644 --- a/ceammc/ext/src/lfo/lfo_mosc.h +++ b/ceammc/ext/src/lfo/lfo_mosc.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.mosc" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_mosc -scn lfo_mosc_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_mosc_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_mosc_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_mosc_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_mosc_dsp { +class FAUST_API lfo_mosc_dsp { public: @@ -162,7 +247,7 @@ class lfo_mosc_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_mosc_dsp { +class FAUST_API decorator_dsp : public lfo_mosc_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_mosc_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_mosc_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_mosc_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_mosc : public lfo_mosc_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_mosc #endif @@ -559,6 +636,13 @@ struct lfo_mosc : public lfo_mosc_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_mosc : public lfo_mosc_dsp { private: @@ -586,10 +670,10 @@ class lfo_mosc : public lfo_mosc_dsp { void metadata(Meta* m) { m->declare("basics.lib/name", "Faust Basic Element Library"); - m->declare("basics.lib/version", "0.2"); + m->declare("basics.lib/version", "0.8"); m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_mosc -scn lfo_mosc_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_mosc.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -615,9 +699,9 @@ class lfo_mosc : public lfo_mosc_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - float fConst0 = std::min(192000.0f, std::max(1.0f, float(fSampleRate))); - fConst1 = (20.0f / fConst0); - fConst2 = (1.0f / fConst0); + float fConst0 = std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); + fConst1 = 2e+01f / fConst0; + fConst2 = 1.0f / fConst0; } virtual void instanceResetUserInterface() { @@ -628,37 +712,37 @@ class lfo_mosc : public lfo_mosc_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fRec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec1[l1] = 0.0f; } - for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) { + for (int l2 = 0; l2 < 2; l2 = l2 + 1) { fRec2[l2] = 0.0f; } - for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) { + for (int l3 = 0; l3 < 2; l3 = l3 + 1) { fRec3[l3] = 0.0f; } - for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) { + for (int l4 = 0; l4 < 2; l4 = l4 + 1) { fVec0[l4] = 0.0f; } - for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) { + for (int l5 = 0; l5 < 2; l5 = l5 + 1) { fRec4[l5] = 0.0f; } - for (int l6 = 0; (l6 < 2); l6 = (l6 + 1)) { + for (int l6 = 0; l6 < 2; l6 = l6 + 1) { fRec5[l6] = 0.0f; } - for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) { + for (int l7 = 0; l7 < 2; l7 = l7 + 1) { fRec6[l7] = 0.0f; } - for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) { + for (int l8 = 0; l8 < 2; l8 = l8 + 1) { fRec7[l8] = 0.0f; } - for (int l9 = 0; (l9 < 2); l9 = (l9 + 1)) { + for (int l9 = 0; l9 < 2; l9 = l9 + 1) { fRec8[l9] = 0.0f; } - for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) { + for (int l10 = 0; l10 < 2; l10 = l10 + 1) { fRec9[l10] = 0.0f; } } @@ -683,76 +767,67 @@ class lfo_mosc : public lfo_mosc_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.mosc"); - ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->declare(&fEntry0, "type", "int"); ui_interface->addNumEntry("windex", &fEntry0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(9.0f), FAUSTFLOAT(1.0f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fEntry0); - float fSlow1 = float((fSlow0 >= 5.0f)); - float fSlow2 = float((fSlow0 >= 3.0f)); - float fSlow3 = float((fSlow0 >= 2.0f)); - float fSlow4 = float((fSlow0 >= 1.0f)); + float fSlow1 = float(fSlow0 >= 5.0f); + float fSlow2 = float(fSlow0 >= 3.0f); + float fSlow3 = float(fSlow0 >= 2.0f); + float fSlow4 = float(fSlow0 >= 1.0f); float fSlow5 = float(fHslider0); - float fSlow6 = (fConst2 * float(((float(fCheckbox0) > 0.5f) == 0))); - float fSlow7 = float((fSlow0 >= 4.0f)); + float fSlow6 = fConst2 * float((float(fCheckbox0) > 0.5f) == 0); + float fSlow7 = float(fSlow0 >= 4.0f); float fSlow8 = float(fHslider1); - float fSlow9 = float((fSlow0 >= 8.0f)); - float fSlow10 = float((fSlow0 >= 7.0f)); - float fSlow11 = float((fSlow0 >= 6.0f)); - float fSlow12 = float((fSlow0 >= 9.0f)); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { - float fTemp0 = (fConst1 + fRec0[1]); - float fTemp1 = (fRec0[1] - fConst1); - float fThen1 = ((fTemp1 > fSlow1) ? fTemp1 : fSlow1); - fRec0[0] = ((fTemp0 < fSlow1) ? fTemp0 : fThen1); - float fTemp2 = (fConst1 + fRec1[1]); - float fTemp3 = (fRec1[1] - fConst1); - float fThen3 = ((fTemp3 > fSlow2) ? fTemp3 : fSlow2); - fRec1[0] = ((fTemp2 < fSlow2) ? fTemp2 : fThen3); - float fTemp4 = (fConst1 + fRec2[1]); - float fTemp5 = (fRec2[1] - fConst1); - float fThen5 = ((fTemp5 > fSlow3) ? fTemp5 : fSlow3); - fRec2[0] = ((fTemp4 < fSlow3) ? fTemp4 : fThen5); - float fTemp6 = (fConst1 + fRec3[1]); - float fTemp7 = (fRec3[1] - fConst1); - float fThen7 = ((fTemp7 > fSlow4) ? fTemp7 : fSlow4); - fRec3[0] = ((fTemp6 < fSlow4) ? fTemp6 : fThen7); + float fSlow9 = float(fSlow0 >= 8.0f); + float fSlow10 = float(fSlow0 >= 7.0f); + float fSlow11 = float(fSlow0 >= 6.0f); + float fSlow12 = float(fSlow0 >= 9.0f); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { + float fTemp0 = fConst1 + fRec0[1]; + float fTemp1 = fRec0[1] - fConst1; + fRec0[0] = ((fTemp0 < fSlow1) ? fTemp0 : ((fTemp1 > fSlow1) ? fTemp1 : fSlow1)); + float fTemp2 = fConst1 + fRec1[1]; + float fTemp3 = fRec1[1] - fConst1; + fRec1[0] = ((fTemp2 < fSlow2) ? fTemp2 : ((fTemp3 > fSlow2) ? fTemp3 : fSlow2)); + float fTemp4 = fConst1 + fRec2[1]; + float fTemp5 = fRec2[1] - fConst1; + fRec2[0] = ((fTemp4 < fSlow3) ? fTemp4 : ((fTemp5 > fSlow3) ? fTemp5 : fSlow3)); + float fTemp6 = fConst1 + fRec3[1]; + float fTemp7 = fRec3[1] - fConst1; + fRec3[0] = ((fTemp6 < fSlow4) ? fTemp6 : ((fTemp7 > fSlow4) ? fTemp7 : fSlow4)); fVec0[0] = fSlow5; - float fTemp8 = (fRec4[1] + (fSlow6 * float(input0[i0]))); - fRec4[0] = (fSlow5 + (fTemp8 - (fVec0[1] + std::floor((fSlow5 + (fTemp8 - fVec0[1])))))); - float fTemp9 = std::sin((6.28318548f * fRec4[0])); - float fTemp10 = ((2.0f * fRec4[0]) + -1.0f); - float fTemp11 = (1.0f - std::fabs(fTemp10)); - float fTemp12 = (fConst1 + fRec5[1]); - float fTemp13 = (fRec5[1] - fConst1); - float fThen9 = ((fTemp13 > fSlow7) ? fTemp13 : fSlow7); - fRec5[0] = ((fTemp12 < fSlow7) ? fTemp12 : fThen9); - float fTemp14 = float((fRec4[0] <= 0.5f)); - float fTemp15 = float((fRec4[0] <= fSlow8)); - float fTemp16 = (fConst1 + fRec6[1]); - float fTemp17 = (fRec6[1] - fConst1); - float fThen11 = ((fTemp17 > fSlow9) ? fTemp17 : fSlow9); - fRec6[0] = ((fTemp16 < fSlow9) ? fTemp16 : fThen11); - float fTemp18 = (fConst1 + fRec7[1]); - float fTemp19 = (fRec7[1] - fConst1); - float fThen13 = ((fTemp19 > fSlow10) ? fTemp19 : fSlow10); - fRec7[0] = ((fTemp18 < fSlow10) ? fTemp18 : fThen13); - float fTemp20 = (fConst1 + fRec8[1]); - float fTemp21 = (fRec8[1] - fConst1); - float fThen15 = ((fTemp21 > fSlow11) ? fTemp21 : fSlow11); - fRec8[0] = ((fTemp20 < fSlow11) ? fTemp20 : fThen15); - float fTemp22 = (fConst1 + fRec9[1]); - float fTemp23 = (fRec9[1] - fConst1); - float fThen17 = ((fTemp23 > fSlow12) ? fTemp23 : fSlow12); - fRec9[0] = ((fTemp22 < fSlow12) ? fTemp22 : fThen17); - output0[i0] = FAUSTFLOAT((((1.0f - fRec0[0]) * (((1.0f - fRec1[0]) * (((1.0f - fRec2[0]) * (((1.0f - fRec3[0]) * fTemp9) + (fRec3[0] * fTemp10))) + (fRec2[0] * ((2.0f * fTemp11) + -1.0f)))) + (fRec1[0] * (((1.0f - fRec5[0]) * ((2.0f * fTemp14) + -1.0f)) + (fRec5[0] * ((2.0f * fTemp15) + -1.0f)))))) + (fRec0[0] * (((1.0f - fRec6[0]) * (((1.0f - fRec7[0]) * ((0.5f * ((1.0f - fRec8[0]) * (fTemp9 + 1.0f))) + (fRec4[0] * fRec8[0]))) + (fRec7[0] * fTemp11))) + (fRec6[0] * ((fTemp14 * (1.0f - fRec9[0])) + (fTemp15 * fRec9[0]))))))); + float fTemp8 = fRec4[1] + fSlow6 * float(input0[i0]); + fRec4[0] = fSlow5 + (fTemp8 - (fVec0[1] + std::floor(fSlow5 + (fTemp8 - fVec0[1])))); + float fTemp9 = std::sin(6.2831855f * fRec4[0]); + float fTemp10 = 2.0f * fRec4[0] + -1.0f; + float fTemp11 = 1.0f - std::fabs(fTemp10); + float fTemp12 = fConst1 + fRec5[1]; + float fTemp13 = fRec5[1] - fConst1; + fRec5[0] = ((fTemp12 < fSlow7) ? fTemp12 : ((fTemp13 > fSlow7) ? fTemp13 : fSlow7)); + float fTemp14 = float(fRec4[0] <= 0.5f); + float fTemp15 = float(fRec4[0] <= fSlow8); + float fTemp16 = fConst1 + fRec6[1]; + float fTemp17 = fRec6[1] - fConst1; + fRec6[0] = ((fTemp16 < fSlow9) ? fTemp16 : ((fTemp17 > fSlow9) ? fTemp17 : fSlow9)); + float fTemp18 = fConst1 + fRec7[1]; + float fTemp19 = fRec7[1] - fConst1; + fRec7[0] = ((fTemp18 < fSlow10) ? fTemp18 : ((fTemp19 > fSlow10) ? fTemp19 : fSlow10)); + float fTemp20 = fConst1 + fRec8[1]; + float fTemp21 = fRec8[1] - fConst1; + fRec8[0] = ((fTemp20 < fSlow11) ? fTemp20 : ((fTemp21 > fSlow11) ? fTemp21 : fSlow11)); + float fTemp22 = fConst1 + fRec9[1]; + float fTemp23 = fRec9[1] - fConst1; + fRec9[0] = ((fTemp22 < fSlow12) ? fTemp22 : ((fTemp23 > fSlow12) ? fTemp23 : fSlow12)); + output0[i0] = FAUSTFLOAT((1.0f - fRec0[0]) * ((1.0f - fRec1[0]) * ((1.0f - fRec2[0]) * ((1.0f - fRec3[0]) * fTemp9 + fRec3[0] * fTemp10) + fRec2[0] * (2.0f * fTemp11 + -1.0f)) + fRec1[0] * ((1.0f - fRec5[0]) * (2.0f * fTemp14 + -1.0f) + fRec5[0] * (2.0f * fTemp15 + -1.0f))) + fRec0[0] * ((1.0f - fRec6[0]) * ((1.0f - fRec7[0]) * (0.5f * (1.0f - fRec8[0]) * (fTemp9 + 1.0f) + fRec4[0] * fRec8[0]) + fRec7[0] * fTemp11) + fRec6[0] * (fTemp14 * (1.0f - fRec9[0]) + fTemp15 * fRec9[0]))); fRec0[1] = fRec0[0]; fRec1[1] = fRec1[0]; fRec2[1] = fRec2[0]; diff --git a/ceammc/ext/src/lfo/lfo_pulse.cpp b/ceammc/ext/src/lfo/lfo_pulse.cpp index 1b54ae3ac2..b850fd021f 100644 --- a/ceammc/ext/src/lfo/lfo_pulse.cpp +++ b/ceammc/ext/src/lfo/lfo_pulse.cpp @@ -3,15 +3,22 @@ using namespace ceammc; class LfoPulse : public faust_lfo_pulse_tilde { + FloatProperty* freq_; + public: LfoPulse(const PdArgs& args) : faust_lfo_pulse_tilde(args) + , freq_(nullptr) { - static t_symbol* SYM_PROP_DUTY = gensym("@duty"); - createInlet(); - setInitSignalValue(parsedPosArgs().floatAt(0, 0)); - bindPositionalArgToProperty(1, SYM_PROP_DUTY); + + freq_ = new FloatProperty("@initfreq", 0); + freq_->setInitOnly(); + freq_->setUnitsHz(); + freq_->setSuccessFn([this](Property*) { setInitSignalValue(freq_->value()); }); + addProperty(freq_); + + bindPositionalArgsToProps({ gensym("@initfreq"), gensym("@duty") }); } void onInlet(size_t n, const AtomListView&) override diff --git a/ceammc/ext/src/lfo/lfo_pulse.h b/ceammc/ext/src/lfo/lfo_pulse.h index 8986aa1794..c18b45348e 100644 --- a/ceammc/ext/src/lfo/lfo_pulse.h +++ b/ceammc/ext/src/lfo/lfo_pulse.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.pulse" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_pulse -scn lfo_pulse_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_pulse_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_pulse_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_pulse_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_pulse_dsp { +class FAUST_API lfo_pulse_dsp { public: @@ -162,7 +247,7 @@ class lfo_pulse_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_pulse_dsp { +class FAUST_API decorator_dsp : public lfo_pulse_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_pulse_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_pulse_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_pulse_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_pulse : public lfo_pulse_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_pulse #endif @@ -559,6 +636,13 @@ struct lfo_pulse : public lfo_pulse_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_pulse : public lfo_pulse_dsp { private: @@ -576,7 +660,7 @@ class lfo_pulse : public lfo_pulse_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_pulse -scn lfo_pulse_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_pulse.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -600,7 +684,7 @@ class lfo_pulse : public lfo_pulse_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -610,10 +694,10 @@ class lfo_pulse : public lfo_pulse_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -638,23 +722,23 @@ class lfo_pulse : public lfo_pulse_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.pulse"); - ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); float fSlow2 = float(fHslider1); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT(((2.0f * float((fRec0[0] <= fSlow2))) + -1.0f)); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(2.0f * float(fRec0[0] <= fSlow2) + -1.0f); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_pulse_pos.cpp b/ceammc/ext/src/lfo/lfo_pulse_pos.cpp index cd41dd690d..8ab7c4c773 100644 --- a/ceammc/ext/src/lfo/lfo_pulse_pos.cpp +++ b/ceammc/ext/src/lfo/lfo_pulse_pos.cpp @@ -7,11 +7,9 @@ class LfoPulsePos : public faust_lfo_pulse_pos_tilde { LfoPulsePos(const PdArgs& args) : faust_lfo_pulse_pos_tilde(args) { - static t_symbol* SYM_PROP_DUTY = gensym("@duty"); - createInlet(); setInitSignalValue(parsedPosArgs().floatAt(0, 0)); - bindPositionalArgToProperty(1, SYM_PROP_DUTY); + bindPositionalArgToProperty(1, gensym("@duty")); } void onInlet(size_t n, const AtomListView&) override diff --git a/ceammc/ext/src/lfo/lfo_pulse_pos.h b/ceammc/ext/src/lfo/lfo_pulse_pos.h index aa93f92ac2..4439821d07 100644 --- a/ceammc/ext/src/lfo/lfo_pulse_pos.h +++ b/ceammc/ext/src/lfo/lfo_pulse_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.pulse_pos" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_pulse_pos -scn lfo_pulse_pos_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_pulse_pos_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_pulse_pos_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_pulse_pos_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_pulse_pos_dsp { +class FAUST_API lfo_pulse_pos_dsp { public: @@ -162,7 +247,7 @@ class lfo_pulse_pos_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_pulse_pos_dsp { +class FAUST_API decorator_dsp : public lfo_pulse_pos_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_pulse_pos_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_pulse_pos_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_pulse_pos_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_pulse_pos : public lfo_pulse_pos_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_pulse_pos #endif @@ -559,6 +636,13 @@ struct lfo_pulse_pos : public lfo_pulse_pos_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_pulse_pos : public lfo_pulse_pos_dsp { private: @@ -576,7 +660,7 @@ class lfo_pulse_pos : public lfo_pulse_pos_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_pulse_pos -scn lfo_pulse_pos_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_pulse_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -600,7 +684,7 @@ class lfo_pulse_pos : public lfo_pulse_pos_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -610,10 +694,10 @@ class lfo_pulse_pos : public lfo_pulse_pos_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -638,23 +722,23 @@ class lfo_pulse_pos : public lfo_pulse_pos_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.pulse_pos"); - ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00999999978f)); + ui_interface->addHorizontalSlider("duty", &fHslider1, FAUSTFLOAT(0.5f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.01f)); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); float fSlow2 = float(fHslider1); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT(float((fRec0[0] <= fSlow2))); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(float(fRec0[0] <= fSlow2)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_saw.h b/ceammc/ext/src/lfo/lfo_saw.h index c95abbdc20..aaf242c4c2 100644 --- a/ceammc/ext/src/lfo/lfo_saw.h +++ b/ceammc/ext/src/lfo/lfo_saw.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.saw" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_saw -scn lfo_saw_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_saw_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_saw_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_saw_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_saw_dsp { +class FAUST_API lfo_saw_dsp { public: @@ -162,7 +247,7 @@ class lfo_saw_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_saw_dsp { +class FAUST_API decorator_dsp : public lfo_saw_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_saw_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_saw_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_saw_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_saw : public lfo_saw_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_saw #endif @@ -559,6 +636,13 @@ struct lfo_saw : public lfo_saw_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_saw : public lfo_saw_dsp { private: @@ -576,7 +660,7 @@ class lfo_saw : public lfo_saw_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_saw -scn lfo_saw_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_saw.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -600,7 +684,7 @@ class lfo_saw : public lfo_saw_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -610,10 +694,10 @@ class lfo_saw : public lfo_saw_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -640,21 +724,21 @@ class lfo_saw : public lfo_saw_dsp { ui_interface->openVerticalBox("lfo.saw"); ui_interface->addCheckButton("invert", &fCheckbox0); ui_interface->addCheckButton("pause", &fCheckbox1); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - float fSlow0 = float(((2 * ((float(fCheckbox0) > 0.5f) == 0)) + -1)); + float fSlow0 = float(2 * ((float(fCheckbox0) > 0.5f) == 0) + -1); float fSlow1 = float(fHslider0); - float fSlow2 = (fConst0 * float(((float(fCheckbox1) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow2 = fConst0 * float((float(fCheckbox1) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow1; - float fTemp0 = (fRec0[1] + (fSlow2 * float(input0[i0]))); - fRec0[0] = (fSlow1 + (fTemp0 - (fVec0[1] + std::floor((fSlow1 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT((fSlow0 * ((2.0f * fRec0[0]) + -1.0f))); + float fTemp0 = fRec0[1] + fSlow2 * float(input0[i0]); + fRec0[0] = fSlow1 + (fTemp0 - (fVec0[1] + std::floor(fSlow1 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(fSlow0 * (2.0f * fRec0[0] + -1.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_saw_pos.cpp b/ceammc/ext/src/lfo/lfo_saw_pos.cpp index 53db62d10a..22b8aa3dcd 100644 --- a/ceammc/ext/src/lfo/lfo_saw_pos.cpp +++ b/ceammc/ext/src/lfo/lfo_saw_pos.cpp @@ -7,11 +7,9 @@ class LfoSawPos : public faust_lfo_saw_pos_tilde { LfoSawPos(const PdArgs& args) : faust_lfo_saw_pos_tilde(args) { - static t_symbol* SYM_PROP_INVERT = gensym("@invert"); - createInlet(); setInitSignalValue(parsedPosArgs().floatAt(0, 0)); - bindPositionalArgToProperty(1, SYM_PROP_INVERT); + bindPositionalArgToProperty(1, gensym("@invert")); } void onInlet(size_t n, const AtomListView&) override diff --git a/ceammc/ext/src/lfo/lfo_saw_pos.h b/ceammc/ext/src/lfo/lfo_saw_pos.h index 51a4b5d66a..2e74f124e4 100644 --- a/ceammc/ext/src/lfo/lfo_saw_pos.h +++ b/ceammc/ext/src/lfo/lfo_saw_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.saw_pos" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_saw_pos -scn lfo_saw_pos_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_saw_pos_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_saw_pos_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_saw_pos_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_saw_pos_dsp { +class FAUST_API lfo_saw_pos_dsp { public: @@ -162,7 +247,7 @@ class lfo_saw_pos_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_saw_pos_dsp { +class FAUST_API decorator_dsp : public lfo_saw_pos_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_saw_pos_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_saw_pos_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_saw_pos_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_saw_pos : public lfo_saw_pos_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_saw_pos #endif @@ -559,6 +636,13 @@ struct lfo_saw_pos : public lfo_saw_pos_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_saw_pos : public lfo_saw_pos_dsp { private: @@ -576,7 +660,7 @@ class lfo_saw_pos : public lfo_saw_pos_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_saw_pos -scn lfo_saw_pos_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_saw_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -600,7 +684,7 @@ class lfo_saw_pos : public lfo_saw_pos_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -610,10 +694,10 @@ class lfo_saw_pos : public lfo_saw_pos_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -640,23 +724,23 @@ class lfo_saw_pos : public lfo_saw_pos_dsp { ui_interface->openVerticalBox("lfo.saw_pos"); ui_interface->addCheckButton("invert", &fCheckbox0); ui_interface->addCheckButton("pause", &fCheckbox1); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; - int iSlow0 = (float(fCheckbox0) > 0.5f); - float fSlow1 = float((iSlow0 == 1)); - float fSlow2 = float(((2 * (iSlow0 == 0)) + -1)); + int iSlow0 = float(fCheckbox0) > 0.5f; + float fSlow1 = float(iSlow0 == 1); + float fSlow2 = float(2 * (iSlow0 == 0) + -1); float fSlow3 = float(fHslider0); - float fSlow4 = (fConst0 * float(((float(fCheckbox1) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow4 = fConst0 * float((float(fCheckbox1) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow3; - float fTemp0 = (fRec0[1] + (fSlow4 * float(input0[i0]))); - fRec0[0] = (fSlow3 + (fTemp0 - (fVec0[1] + std::floor((fSlow3 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT((fSlow1 + (fSlow2 * fRec0[0]))); + float fTemp0 = fRec0[1] + fSlow4 * float(input0[i0]); + fRec0[0] = fSlow3 + (fTemp0 - (fVec0[1] + std::floor(fSlow3 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(fSlow1 + fSlow2 * fRec0[0]); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_square.h b/ceammc/ext/src/lfo/lfo_square.h index 6367c27fe7..f2f48e729d 100644 --- a/ceammc/ext/src/lfo/lfo_square.h +++ b/ceammc/ext/src/lfo/lfo_square.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.square" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_square -scn lfo_square_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_square_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_square_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_square_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_square_dsp { +class FAUST_API lfo_square_dsp { public: @@ -162,7 +247,7 @@ class lfo_square_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_square_dsp { +class FAUST_API decorator_dsp : public lfo_square_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_square_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_square_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_square_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_square : public lfo_square_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_square #endif @@ -559,6 +636,13 @@ struct lfo_square : public lfo_square_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_square : public lfo_square_dsp { private: @@ -575,7 +659,7 @@ class lfo_square : public lfo_square_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_square -scn lfo_square_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_square.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -599,7 +683,7 @@ class lfo_square : public lfo_square_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -608,10 +692,10 @@ class lfo_square : public lfo_square_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -637,20 +721,20 @@ class lfo_square : public lfo_square_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.square"); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT(((2.0f * float((fRec0[0] <= 0.5f))) + -1.0f)); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(2.0f * float(fRec0[0] <= 0.5f) + -1.0f); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_square_pos.h b/ceammc/ext/src/lfo/lfo_square_pos.h index 141c98bffc..a118f7b2de 100644 --- a/ceammc/ext/src/lfo/lfo_square_pos.h +++ b/ceammc/ext/src/lfo/lfo_square_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.square_pos" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_square_pos -scn lfo_square_pos_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_square_pos_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_square_pos_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_square_pos_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_square_pos_dsp { +class FAUST_API lfo_square_pos_dsp { public: @@ -162,7 +247,7 @@ class lfo_square_pos_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_square_pos_dsp { +class FAUST_API decorator_dsp : public lfo_square_pos_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_square_pos_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_square_pos_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_square_pos_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_square_pos : public lfo_square_pos_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_square_pos #endif @@ -559,6 +636,13 @@ struct lfo_square_pos : public lfo_square_pos_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_square_pos : public lfo_square_pos_dsp { private: @@ -575,7 +659,7 @@ class lfo_square_pos : public lfo_square_pos_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_square_pos -scn lfo_square_pos_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_square_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -599,7 +683,7 @@ class lfo_square_pos : public lfo_square_pos_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -608,10 +692,10 @@ class lfo_square_pos : public lfo_square_pos_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -637,20 +721,20 @@ class lfo_square_pos : public lfo_square_pos_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.square_pos"); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT(float((fRec0[0] <= 0.5f))); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(float(fRec0[0] <= 0.5f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_tri.h b/ceammc/ext/src/lfo/lfo_tri.h index 743720bb40..10b571a801 100644 --- a/ceammc/ext/src/lfo/lfo_tri.h +++ b/ceammc/ext/src/lfo/lfo_tri.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.tri" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_tri -scn lfo_tri_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_tri_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_tri_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_tri_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_tri_dsp { +class FAUST_API lfo_tri_dsp { public: @@ -162,7 +247,7 @@ class lfo_tri_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_tri_dsp { +class FAUST_API decorator_dsp : public lfo_tri_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_tri_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_tri_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_tri_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_tri : public lfo_tri_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_tri #endif @@ -559,6 +636,13 @@ struct lfo_tri : public lfo_tri_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_tri : public lfo_tri_dsp { private: @@ -575,7 +659,7 @@ class lfo_tri : public lfo_tri_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_tri -scn lfo_tri_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_tri.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -599,7 +683,7 @@ class lfo_tri : public lfo_tri_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -608,10 +692,10 @@ class lfo_tri : public lfo_tri_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -637,20 +721,20 @@ class lfo_tri : public lfo_tri_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.tri"); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT(((2.0f * (1.0f - std::fabs(((2.0f * fRec0[0]) + -1.0f)))) + -1.0f)); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(2.0f * (1.0f - std::fabs(2.0f * fRec0[0] + -1.0f)) + -1.0f); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lfo/lfo_tri_pos.h b/ceammc/ext/src/lfo/lfo_tri_pos.h index f1ac72c8b6..1153983090 100644 --- a/ceammc/ext/src/lfo/lfo_tri_pos.h +++ b/ceammc/ext/src/lfo/lfo_tri_pos.h @@ -1,7 +1,7 @@ /* ------------------------------------------------------------ name: "lfo.tri_pos" -Code generated with Faust 2.37.3 (https://faust.grame.fr) -Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0 +Code generated with Faust 2.53.1 (https://faust.grame.fr) +Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_tri_pos -scn lfo_tri_pos_dsp -es 1 -mcd 16 -single -ftz 0 ------------------------------------------------------------ */ #ifndef __lfo_tri_pos_H__ @@ -14,23 +14,23 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include -/************************** BEGIN lfo_tri_pos_dsp.h **************************/ -/************************************************************************ +/************************** BEGIN lfo_tri_pos_dsp.h ******************************** FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -44,22 +44,107 @@ Compilation options: -a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_ds #include #include +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + ***************************************************************************/ + +#ifndef __export__ +#define __export__ + +#define FAUSTVERSION "2.53.1" + +// Use FAUST_API for code that is part of the external API but is also compiled in faust and libfaust +// Use LIBFAUST_API for code that is compiled in faust and libfaust + +#ifdef _WIN32 + #pragma warning (disable: 4251) + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #elif FAUST_LIB + #define FAUST_API __declspec(dllexport) + #define LIBFAUST_API __declspec(dllexport) + #else + #define FAUST_API + #define LIBFAUST_API + #endif +#else + #ifdef FAUST_EXE + #define FAUST_API + #define LIBFAUST_API + #else + #define FAUST_API __attribute__((visibility("default"))) + #define LIBFAUST_API __attribute__((visibility("default"))) + #endif +#endif + +#endif + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif -struct UI; -struct Meta; +struct FAUST_API UI; +struct FAUST_API Meta; /** * DSP memory manager. */ -struct dsp_memory_manager { +struct FAUST_API dsp_memory_manager { virtual ~dsp_memory_manager() {} + /** + * Inform the Memory Manager with the number of expected memory zones. + * @param count - the number of expected memory zones + */ + virtual void begin(size_t /*count*/) {} + + /** + * Give the Memory Manager information on a given memory zone. + * @param size - the size in bytes of the memory zone + * @param reads - the number of Read access to the zone used to compute one frame + * @param writes - the number of Write access to the zone used to compute one frame + */ + virtual void info(size_t /*size*/, size_t /*reads*/, size_t /*writes*/) {} + + /** + * Inform the Memory Manager that all memory zones have been described, + * to possibly start a 'compute the best allocation strategy' step. + */ + virtual void end() {} + + /** + * Allocate a memory zone. + * @param size - the memory zone size in bytes + */ virtual void* allocate(size_t size) = 0; + + /** + * Destroy a memory zone. + * @param ptr - the memory zone pointer to be deallocated + */ virtual void destroy(void* ptr) = 0; }; @@ -68,7 +153,7 @@ struct dsp_memory_manager { * Signal processor definition. */ -class lfo_tri_pos_dsp { +class FAUST_API lfo_tri_pos_dsp { public: @@ -162,7 +247,7 @@ class lfo_tri_pos_dsp { * Generic DSP decorator. */ -class decorator_dsp : public lfo_tri_pos_dsp { +class FAUST_API decorator_dsp : public lfo_tri_pos_dsp { protected: @@ -195,7 +280,7 @@ class decorator_dsp : public lfo_tri_pos_dsp { * to create DSP instances from a compiled DSP program. */ -class dsp_factory { +class FAUST_API dsp_factory { protected: @@ -224,18 +309,21 @@ class dsp_factory { #include #endif -class ScopedNoDenormals -{ +class FAUST_API ScopedNoDenormals { + private: - intptr_t fpsr; + intptr_t fpsr = 0; void setFpStatusRegister(intptr_t fpsr_aux) noexcept { #if defined (__arm64__) || defined (__aarch64__) - asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); + asm volatile("msr fpcr, %0" : : "ri" (fpsr_aux)); #elif defined (__SSE__) - _mm_setcsr(static_cast(fpsr_aux)); + // The volatile keyword here is needed to workaround a bug in AppleClang 13.0 + // which aggressively optimises away the variable otherwise + volatile uint32_t fpsr_w = static_cast(fpsr_aux); + _mm_setcsr(fpsr_w); #endif } @@ -243,7 +331,7 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) asm volatile("mrs %0, fpcr" : "=r" (fpsr)); - #elif defined ( __SSE__) + #elif defined (__SSE__) fpsr = static_cast(_mm_getcsr()); #endif } @@ -254,16 +342,14 @@ class ScopedNoDenormals { #if defined (__arm64__) || defined (__aarch64__) intptr_t mask = (1 << 24 /* FZ */); + #elif defined (__SSE__) + #if defined (__SSE2__) + intptr_t mask = 0x8040; #else - #if defined(__SSE__) - #if defined(__SSE2__) - intptr_t mask = 0x8040; - #else - intptr_t mask = 0x8000; - #endif - #else - intptr_t mask = 0x0000; - #endif + intptr_t mask = 0x8000; + #endif + #else + intptr_t mask = 0x0000; #endif getFpStatusRegister(); setFpStatusRegister(fpsr | mask); @@ -276,38 +362,39 @@ class ScopedNoDenormals }; -#define AVOIDDENORMALS ScopedNoDenormals(); +#define AVOIDDENORMALS ScopedNoDenormals ftz_scope; #endif /************************** END lfo_tri_pos_dsp.h **************************/ -/************************** BEGIN UI.h **************************/ -/************************************************************************ +/************************** BEGIN UI.h ***************************** FAUST Architecture File - Copyright (C) 2003-2020 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute that work under terms of your choice, so long as this FAUST architecture section is not modified. - ************************************************************************/ + ********************************************************************/ #ifndef __UI_H__ #define __UI_H__ + #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif @@ -322,8 +409,8 @@ class ScopedNoDenormals struct Soundfile; template -struct UIReal -{ +struct FAUST_API UIReal { + UIReal() {} virtual ~UIReal() {} @@ -353,37 +440,36 @@ struct UIReal // -- metadata declarations - virtual void declare(REAL* zone, const char* key, const char* val) {} - + virtual void declare(REAL* /*zone*/, const char* /*key*/, const char* /*val*/) {} + // To be used by LLVM client virtual int sizeOfFAUSTFLOAT() { return sizeof(FAUSTFLOAT); } }; -struct UI : public UIReal -{ +struct FAUST_API UI : public UIReal { UI() {} virtual ~UI() {} }; #endif /************************** END UI.h **************************/ -/************************** BEGIN meta.h **************************/ -/************************************************************************ +/************************** BEGIN meta.h ******************************* FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale + Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; If not, see . + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. EXCEPTION : As a special exception, you may create a larger work that contains this FAUST architecture section and distribute @@ -394,40 +480,40 @@ struct UI : public UIReal #ifndef __meta__ #define __meta__ + /** The base class of Meta handler to be used in lfo_tri_pos_dsp::metadata(Meta* m) method to retrieve (key, value) metadata. */ -struct Meta -{ - virtual ~Meta() {}; +struct FAUST_API Meta { + virtual ~Meta() {} virtual void declare(const char* key, const char* value) = 0; }; #endif /************************** END meta.h **************************/ -/************************** BEGIN misc.h **************************/ -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2017 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3 of - the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - ************************************************************************/ +/************************** BEGIN misc.h ******************************* +FAUST Architecture File +Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale +--------------------------------------------------------------------- +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXCEPTION : As a special exception, you may create a larger work +that contains this FAUST architecture section and distribute +that work under terms of your choice, so long as this FAUST +architecture section is not modified. +***************************************************************************/ #ifndef __misc__ #define __misc__ @@ -440,14 +526,6 @@ struct Meta #include -using std::max; -using std::min; - -struct XXXX_Meta : std::map -{ - void declare(const char* key, const char* value) { (*this)[key] = value; } -}; - struct MY_Meta : Meta, std::map { void declare(const char* key, const char* value) { (*this)[key] = value; } @@ -549,7 +627,6 @@ struct lfo_tri_pos : public lfo_tri_pos_dsp { #include #include - #ifndef FAUSTCLASS #define FAUSTCLASS lfo_tri_pos #endif @@ -559,6 +636,13 @@ struct lfo_tri_pos : public lfo_tri_pos_dsp { #define exp10 __exp10 #endif +#if defined(_WIN32) +#define RESTRICT __restrict +#else +#define RESTRICT __restrict__ +#endif + + class lfo_tri_pos : public lfo_tri_pos_dsp { private: @@ -575,7 +659,7 @@ class lfo_tri_pos : public lfo_tri_pos_dsp { void metadata(Meta* m) { m->declare("ceammc_osc.lib/name", "CEAMMC faust oscillators"); m->declare("ceammc_osc.lib/version", "0.1"); - m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -es 1 -single -ftz 0"); + m->declare("compile_options", "-a /Users/serge/work/music/pure-data/ceammc/faust/ceammc_dsp_ext.cpp -lang cpp -i -cn lfo_tri_pos -scn lfo_tri_pos_dsp -es 1 -mcd 16 -single -ftz 0"); m->declare("filename", "lfo_tri_pos.dsp"); m->declare("maths.lib/author", "GRAME"); m->declare("maths.lib/copyright", "GRAME"); @@ -599,7 +683,7 @@ class lfo_tri_pos : public lfo_tri_pos_dsp { virtual void instanceConstants(int sample_rate) { fSampleRate = sample_rate; - fConst0 = (1.0f / std::min(192000.0f, std::max(1.0f, float(fSampleRate)))); + fConst0 = 1.0f / std::min(1.92e+05f, std::max(1.0f, float(fSampleRate))); } virtual void instanceResetUserInterface() { @@ -608,10 +692,10 @@ class lfo_tri_pos : public lfo_tri_pos_dsp { } virtual void instanceClear() { - for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) { + for (int l0 = 0; l0 < 2; l0 = l0 + 1) { fVec0[l0] = 0.0f; } - for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) { + for (int l1 = 0; l1 < 2; l1 = l1 + 1) { fRec0[l1] = 0.0f; } } @@ -637,20 +721,20 @@ class lfo_tri_pos : public lfo_tri_pos_dsp { virtual void buildUserInterface(UI* ui_interface) { ui_interface->openVerticalBox("lfo.tri_pos"); ui_interface->addCheckButton("pause", &fCheckbox0); - ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.00100000005f)); + ui_interface->addHorizontalSlider("phase", &fHslider0, FAUSTFLOAT(0.0f), FAUSTFLOAT(0.0f), FAUSTFLOAT(1.0f), FAUSTFLOAT(0.001f)); ui_interface->closeBox(); } - virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) { + virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs, FAUSTFLOAT** RESTRICT outputs) { FAUSTFLOAT* input0 = inputs[0]; FAUSTFLOAT* output0 = outputs[0]; float fSlow0 = float(fHslider0); - float fSlow1 = (fConst0 * float(((float(fCheckbox0) > 0.5f) == 0))); - for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) { + float fSlow1 = fConst0 * float((float(fCheckbox0) > 0.5f) == 0); + for (int i0 = 0; i0 < count; i0 = i0 + 1) { fVec0[0] = fSlow0; - float fTemp0 = (fRec0[1] + (fSlow1 * float(input0[i0]))); - fRec0[0] = (fSlow0 + (fTemp0 - (fVec0[1] + std::floor((fSlow0 + (fTemp0 - fVec0[1])))))); - output0[i0] = FAUSTFLOAT((1.0f - std::fabs(((2.0f * fRec0[0]) + -1.0f)))); + float fTemp0 = fRec0[1] + fSlow1 * float(input0[i0]); + fRec0[0] = fSlow0 + (fTemp0 - (fVec0[1] + std::floor(fSlow0 + (fTemp0 - fVec0[1])))); + output0[i0] = FAUSTFLOAT(1.0f - std::fabs(2.0f * fRec0[0] + -1.0f)); fVec0[1] = fVec0[0]; fRec0[1] = fRec0[0]; } diff --git a/ceammc/ext/src/lib/CMakeLists.txt b/ceammc/ext/src/lib/CMakeLists.txt index 1a5c562fe5..508dd7cd45 100644 --- a/ceammc/ext/src/lib/CMakeLists.txt +++ b/ceammc/ext/src/lib/CMakeLists.txt @@ -3,11 +3,12 @@ add_library(ceammc_core SHARED ceammc.cpp) target_include_directories(ceammc_core PRIVATE ${CMAKE_BINARY_DIR}) # for config.h target_include_directories(ceammc_core PRIVATE ${PROJECT_SOURCE_DIR}/src # m_pd.h - ${PROJECT_SOURCE_DIR}/ceammc/extra ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/utf8rewind ) +add_executable(lemon lex/lemon.c) + set(UTF8REWIND_SOURCES utf8rewind/utf8rewind.c utf8rewind/unicodedatabase.c @@ -21,6 +22,9 @@ set(UTF8REWIND_SOURCES ) target_sources(ceammc_core PRIVATE ${UTF8REWIND_SOURCES}) +# tcl stuff +add_subdirectory(tcl) + set(CEAMMC_LIB_SOURCES ceammc.h ceammc_abstractdata.cpp @@ -38,19 +42,22 @@ set(CEAMMC_LIB_SOURCES args/arg_is_float.cpp args/arg_is_int.cpp args/arg_is_symbol.cpp - lex/data_string.lexer.cpp - lex/data_string.parser.cpp - lex/quoted_string.parser.cpp + args/argcheck2.cpp + tcl/ceammc_texteditor.h + tcl/ceammc_tcl.cpp ceammc_array.cpp ceammc_atom.cpp ceammc_atomlist.cpp ceammc_atomlist_view.cpp + ceammc_base64.cpp ceammc_canvas.cpp ceammc_control.cpp ceammc_convert.cpp ceammc_convert_pitch.cpp ceammc_data.cpp ceammc_datastorage.cpp + ceammc_deprecated.cpp + ceammc_dsp.cpp ceammc_externals.cpp ceammc_factory.h ceammc_faust.cpp @@ -58,6 +65,8 @@ set(CEAMMC_LIB_SOURCES ceammc_format.cpp ceammc_function.cpp ceammc_impl.cpp + ceammc_inlet.cpp + ceammc_outlet.cpp ceammc_json.h ceammc_json.cpp ceammc_log.cpp @@ -69,29 +78,37 @@ set(CEAMMC_LIB_SOURCES ceammc_music_theory_pitch_class.cpp ceammc_node_external.cpp ceammc_numeric.h + ceammc_editor_object.cpp ceammc_object.cpp ceammc_object_info.cpp ceammc_output.cpp ceammc_pd.cpp ceammc_platform.cpp + ceammc_pipe_dispatcher.cpp + ceammc_poll_dispatcher.cpp + ceammc_socket_dispatcher.cpp ceammc_preset.cpp ceammc_property.cpp ceammc_property_callback.cpp ceammc_property_enum.cpp ceammc_property_info.cpp + ceammc_random.cpp ceammc_regexp.cpp ceammc_rtree.cpp ceammc_score.cpp ceammc_sound_external.cpp ceammc_string.cpp + ceammc_string_split.cpp ceammc_thread.cpp ceammc_timeline.cpp ceammc_transport.cpp ceammc_units.cpp ceammc_window.cpp + datatype_json.cpp datatype_dict.cpp datatype_mlist.cpp datatype_property.cpp + datatype_set.cpp datatype_string.cpp ) @@ -128,33 +145,62 @@ find_package(RAGEL 6.6) if(RAGEL_FOUND) RAGEL_TARGET(parser_numeric - lex/parser_numeric.rl ${CMAKE_CURRENT_SOURCE_DIR}/lex/parser_numeric.cpp + lex/parser_numeric.rl lex/parser_numeric.cpp COMPILE_FLAGS "-G2 -s") RAGEL_TARGET(parser_color - lex/parser_color.rl ${CMAKE_CURRENT_SOURCE_DIR}/lex/parser_color.cpp + lex/parser_color.rl lex/parser_color.cpp COMPILE_FLAGS "-G2 -s") RAGEL_TARGET(parser_music - lex/parser_music.rl ${CMAKE_CURRENT_SOURCE_DIR}/lex/parser_music.cpp + lex/parser_music.rl lex/parser_music.cpp COMPILE_FLAGS "-G2 -s") RAGEL_TARGET(parser_units - lex/parser_units.rl ${CMAKE_CURRENT_SOURCE_DIR}/lex/parser_units.cpp + lex/parser_units.rl lex/parser_units.cpp COMPILE_FLAGS "-G2 -s") RAGEL_TARGET(parser_props - lex/parser_props.rl ${CMAKE_CURRENT_SOURCE_DIR}/lex/parser_props.cpp + lex/parser_props.rl lex/parser_props.cpp + COMPILE_FLAGS "-G2 -s") + RAGEL_TARGET(parser_clone + lex/parser_clone.rl lex/parser_clone.cpp + COMPILE_FLAGS "-G2 -s") + RAGEL_TARGET(parser_strings + lex/parser_strings.rl lex/parser_strings.cpp COMPILE_FLAGS "-G2 -s") + RAGEL_TARGET(lemon_data_string_parser + lex/lemon_data_string_parser.rl lex/lemon_data_string_parser.cpp + COMPILE_FLAGS "-G2 -s") + RAGEL_TARGET(parser_argcheck + args/argcheck2.rl args/argcheck2.cpp + COMPILE_FLAGS "-G2 -s") + + add_custom_target(lemon_data_parser + COMMAND $ -s -q lemon_data_string.y + COMMAND mv lemon_data_string.c lemon_data_parser_impl.cpp + SOURCES lex/lemon_data_string.y + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lex + ) endif() # ragel generated sources target_sources(ceammc_core PRIVATE + lex/parser_clone.cpp lex/parser_color.cpp lex/parser_music.cpp lex/parser_numeric.cpp - lex/parser_units.cpp lex/parser_props.cpp lex/parser_props_details.cpp + lex/parser_units.cpp + lex/parser_strings.cpp + lex/lemon_data_parser_impl.h + lex/lemon_data_parser_impl.cpp + lex/lemon_data_string_parser.h + lex/lemon_data_string_parser.cpp ) +# ragel files +file(GLOB RAGEL_SOURCES lex/*.rl) +add_custom_target(lex_ragel_sources SOURCES ${RAGEL_SOURCES} args/argcheck2.rl) + if(BISON_FOUND AND FLEX_FOUND) add_custom_target(ceammc_argcheck_gen COMMAND $ argcheck.l @@ -162,15 +208,6 @@ if(BISON_FOUND AND FLEX_FOUND) SOURCES args/argcheck.l args/argcheck.yy WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/args) - add_custom_target(ceammc_parser_gen - COMMAND $ data_string.l - COMMAND ${BISON_EXECUTABLE} data_string.y - COMMAND ${BISON_EXECUTABLE} quoted_string.y - SOURCES lex/data_string.l - lex/data_string.y - lex/quoted_string.y - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lex) - add_custom_target(ceammc_arrayloader_gen COMMAND $ array_loader.l COMMAND ${BISON_EXECUTABLE} array_loader.y @@ -199,9 +236,20 @@ else() target_link_libraries(ceammc_core PRIVATE fmt soxr) endif() +if(WITH_LIBSAMPLERATE) + find_package(LibSamplerate) + if(NOT LIBSAMPLERATE_FOUND) + message(FATAL "libsamplerate not found") + endif() + target_include_directories(ceammc_core PRIVATE ${LIBSAMPLERATE_INCLUDE_DIR}>) + target_link_libraries(ceammc_core PRIVATE ${LIBSAMPLERATE_LIBRARY}) + target_compile_definitions(ceammc_core PRIVATE WITH_LIBSAMPLERATE) +endif() + target_link_libraries(ceammc_core PRIVATE re2) target_link_libraries(ceammc_core PRIVATE reflex) target_link_libraries(ceammc_core PRIVATE muparser) +target_link_libraries(ceammc_core PRIVATE readerwriterqueue) #target_link_libraries(ceammc_core PRIVATE ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}) #target_link_libraries(ceammc_core PRIVATE puredata-core) @@ -261,12 +309,14 @@ if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") ceammc_loader_coreaudio.cpp ceammc_loader_coreaudio_impl.m) - find_library(FOUNDATION_LIBRARY Foundation) - find_library(AUDIOTOOLBOX_LIBRARY AudioToolBox) - find_library(QUICKTIME_LIBRARY QuickTime) - find_library(APP_SERVICES_LIBRARY ApplicationServices) + # find_library(QUICKTIME_LIBRARY QuickTime) + # find_library(APP_SERVICES_LIBRARY ApplicationServices) + + find_library(FOUNDATION_LIBRARY Foundation REQUIRED) + target_link_libraries(ceammc_core PRIVATE ${FOUNDATION_LIBRARY}) - target_link_libraries(ceammc_core PRIVATE ${FOUNDATION_LIBRARY} ${AUDIOTOOLBOX_LIBRARY}) + find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox REQUIRED) + target_link_libraries(ceammc_core PRIVATE ${AUDIOTOOLBOX_LIBRARY}) endif() # install diff --git a/ceammc/ext/src/lib/args/argcheck2.cpp b/ceammc/ext/src/lib/args/argcheck2.cpp new file mode 100644 index 0000000000..0194480beb --- /dev/null +++ b/ceammc/ext/src/lib/args/argcheck2.cpp @@ -0,0 +1,4477 @@ +#line 1 "args/argcheck2.rl" +# include "argcheck2.h" +# include "ceammc_string.h" +# include "ceammc_object.h" +# include "ceammc_crc32.h" +# include "fmt/core.h" +# include "ceammc_datatypes.h" + +# include +# include +# include +# include +# include +# include +# include + +// #define ARG_DEBUG + +#ifdef ARG_DEBUG +#define debug(prefix, arg) std::cerr << " - " << prefix << ": " << arg << std::endl; +#else +#define debug(prefix, arg) +#endif + +// keep in sync with typeNames values! +enum CheckType : int8_t { + CHECK_NONE, + CHECK_ATOM, + CHECK_BOOL, + CHECK_BYTE, + CHECK_INT, + CHECK_FLOAT, + CHECK_SYMBOL, + CHECK_TIME, +}; + +enum CompareType : int8_t { + CMP_NONE, + CMP_LESS, + CMP_LESS_EQ, + CMP_GREATER, + CMP_GREATER_EQ, + CMP_EQUAL, + CMP_NOT_EQUAL, + CMP_MODULE, + CMP_POWER2, + CMP_RANGE_CLOSED, + CMP_RANGE_SEMIOPEN, + CMP_APPROX, +}; + +namespace { + constexpr int16_t REPEAT_INF = -1; + + // keep in sync with CheckType values! + const char* typeNames[] = { + "", + "atom", + "bool", + "byte", + "int", + "float", + "symbol", + "time", + }; + + std::string atom_to_string(const ceammc::Atom& a) { + ceammc::string::SmallString buf; + if (ceammc::string::atom_to_string(a, buf)) + return { buf.data(), buf.size() }; + else + return "?"; + } + + std::string list_to_string(const ceammc::AtomListView& lv) { + ceammc::string::MediumString buf; + if (ceammc::string::list_to_string(lv, buf)) + return { buf.data(), buf.size() }; + else + return "?"; + } + + + using ArgString = std::pair, uint32_t>; + using ArgName = ceammc::BoostStaticString<10>; + using ArgValue = boost::variant; + using ArgList = boost::container::small_vector; + + class ArgStringVisitor : public boost::static_visitor + { + public: + std::string operator()(const double& d) const { return fmt::format("{}", d); } + std::string operator()(const int64_t& i) const { return fmt::format("{}", i); } + std::string operator()(const ArgString& s) const { + std::string res; + res.reserve(s.first.size() + 2); + res += '\''; + res.append(s.first.data(), s.first.size()); + res += '\''; + return res; + } + }; + + inline std::string arg_to_string(const ArgValue& v) + { + return boost::apply_visitor(ArgStringVisitor(), v); + } + + inline std::string arg_to_string(const ArgList& v, const char* delim = ", ") + { + ceammc::string::SmallString res; + ArgStringVisitor visitor; + for (auto& a: v) { + if (&a != &v[0]) { + res.insert(res.end(), delim, delim + strlen(delim)); + } + fmt::format_to(std::back_inserter(res), boost::apply_visitor(visitor, a)); + } + + return { res.data(), res.size() }; + } + + inline bool approx_equal(double a, double b, double e = 0.00001) + { + return std::fabs(a - b) <= e; + } +} + +struct Check { + ArgList values; + ArgName name; + CheckType type { CHECK_NONE }; + CompareType cmp { CMP_NONE }; + int8_t rmin { 0 }; + int8_t rmax { 0 }; + + inline int repeatMin() const { return rmin; } + inline int repeatMax() const { return (rmax == REPEAT_INF) ? std::numeric_limits::max() : rmax; } + inline void setRepeats(int min, int max) { rmin = min; rmax = max; } + + inline static bool isEqual(const ArgValue& v, int64_t i) + { + auto int_ptr = boost::get(&v); + return (int_ptr && i == *int_ptr); + } + + inline static bool isEqual(const ArgValue& v, double d) + { + auto dbl_ptr = boost::get(&v); + return (dbl_ptr && d == *dbl_ptr); + } + + inline static bool isApproxEqual(const ArgValue& v, double d) + { + auto dbl_ptr = boost::get(&v); + return dbl_ptr && approx_equal(d, *dbl_ptr); + } + + inline static bool isEqualHash(const ArgValue& v, uint32_t hash) + { + auto str_ptr = boost::get(&v); + return (str_ptr && str_ptr->second == hash); + } + + inline std::string argName() const { + if (name.empty()) + return typeNames[type]; + else + return { name.data(), name.size() }; + } + + inline std::string checkInfo() const { + switch (cmp) { + case CMP_MODULE: + return fmt::format("check: %{}==0", arg_to_string(values)); + case CMP_LESS: + return fmt::format("check: <{}", arg_to_string(values)); + case CMP_LESS_EQ: + return fmt::format("check: <={}", arg_to_string(values)); + case CMP_GREATER: + return fmt::format("check: >{}", arg_to_string(values)); + case CMP_GREATER_EQ: + return fmt::format("check: >={}", arg_to_string(values)); + case CMP_RANGE_CLOSED: + return fmt::format("range: [{}]", arg_to_string(values, ",")); + case CMP_RANGE_SEMIOPEN: + return fmt::format("range: [{})", arg_to_string(values, ",")); + case CMP_EQUAL: + if (values.size() == 1) + return fmt::format("check: ={}", arg_to_string(values)); + else + return fmt::format("enum: {}", arg_to_string(values, "|")); + case CMP_APPROX: + if (values.size() == 1) + return fmt::format("check: ~{}", arg_to_string(values)); + else + return fmt::format("enum: ~{}", arg_to_string(values, "|")); + default: + return {}; + } + } + + inline std::string argInfo() const { + if (name.empty()) + return fmt::format("{:10s} [{}]{}", typeNames[type], checkInfo(), helpRepeats()); + else + return fmt::format("{:10s} [type: {} {}]{}", name.data(), typeNames[type], checkInfo(), helpRepeats()); + } + + inline std::string helpRepeats() const { + if (rmin == 1 && rmax == 1) return {}; + if (rmin == 0 && rmax == 1) return { '?', 1 }; + if (rmin == 0 && rmax == REPEAT_INF) return { '*', 1 }; + if (rmin == 1 && rmax == REPEAT_INF) return { '+', 1 }; + if (rmin == rmax) + return fmt::format("{{{}}}", (int)rmin); + if (rmax != REPEAT_INF) + return fmt::format("{{{},{}}}", (int)rmin, (int)rmax); + else + return fmt::format("{{{},}}", (int)rmin); + } +}; + + +#line 226 "args/argcheck2.cpp" +static const int time_check_start = 1; +static const int time_check_first_final = 13; +static const int time_check_error = 0; + +static const int time_check_en_main = 1; + + +#line 232 "args/argcheck2.rl" + + +namespace { + + bool check_time_unit(t_symbol* sym) + { + if (!sym) return false; + + int cs = 0; + const char* p = sym->s_name; + + +#line 247 "args/argcheck2.cpp" + { + cs = (int)time_check_start; + } + +#line 243 "args/argcheck2.rl" + + +#line 255 "args/argcheck2.cpp" + { + switch ( cs ) { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 13: + goto st_case_13; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + } + p+= 1; + st_case_1: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _st2; + } + goto _st0; + _st0: + st_case_0: + goto _out0; + _st2: + p+= 1; + st_case_2: + switch( ( (*( p))) ) { + case 46: { + goto _st3; + } + case 95: { + goto _st5; + } + case 109: { + goto _st6; + } + case 115: { + goto _st10; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _st2; + } + goto _st0; + _st3: + p+= 1; + st_case_3: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _st4; + } + goto _st0; + _st4: + p+= 1; + st_case_4: + switch( ( (*( p))) ) { + case 95: { + goto _st5; + } + case 109: { + goto _st6; + } + case 115: { + goto _st10; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _st4; + } + goto _st0; + _st5: + p+= 1; + st_case_5: + switch( ( (*( p))) ) { + case 109: { + goto _st6; + } + case 115: { + goto _st10; + } + } + goto _st0; + _st6: + p+= 1; + st_case_6: + if ( ( (*( p))) == 115 ) { + goto _st7; + } + goto _st0; + _st7: + p+= 1; + st_case_7: + switch( ( (*( p))) ) { + case 0: { + goto _ctr9; + } + case 101: { + goto _st8; + } + } + goto _st0; + _ctr9: + { +#line 229 "args/argcheck2.rl" + {p+= 1; cs = 13; goto _out;} } + +#line 378 "args/argcheck2.cpp" + + goto _st13; + _st13: + p+= 1; + st_case_13: + goto _st0; + _st8: + p+= 1; + st_case_8: + if ( ( (*( p))) == 99 ) { + goto _st9; + } + goto _st0; + _st9: + p+= 1; + st_case_9: + if ( ( (*( p))) == 0 ) { + goto _ctr9; + } + goto _st0; + _st10: + p+= 1; + st_case_10: + switch( ( (*( p))) ) { + case 0: { + goto _ctr9; + } + case 97: { + goto _st11; + } + case 101: { + goto _st8; + } + } + goto _st0; + _st11: + p+= 1; + st_case_11: + if ( ( (*( p))) == 109 ) { + goto _st12; + } + goto _st0; + _st12: + p+= 1; + st_case_12: + if ( ( (*( p))) == 112 ) { + goto _st9; + } + goto _st0; + _out1: cs = 1; goto _out; + _out0: cs = 0; goto _out; + _out2: cs = 2; goto _out; + _out3: cs = 3; goto _out; + _out4: cs = 4; goto _out; + _out5: cs = 5; goto _out; + _out6: cs = 6; goto _out; + _out7: cs = 7; goto _out; + _out13: cs = 13; goto _out; + _out8: cs = 8; goto _out; + _out9: cs = 9; goto _out; + _out10: cs = 10; goto _out; + _out11: cs = 11; goto _out; + _out12: cs = 12; goto _out; + _out: {} + } + +#line 244 "args/argcheck2.rl" + + + return (cs >= +#line 449 "args/argcheck2.cpp" + 13 +#line 246 "args/argcheck2.rl" + ); + } + +} + + +#line 458 "args/argcheck2.cpp" +static const int arg_check2_start = 1; +static const int arg_check2_first_final = 69; +static const int arg_check2_error = 0; + +static const int arg_check2_en_main = 1; + + +#line 424 "args/argcheck2.rl" + + +namespace ceammc { + namespace args { + + namespace { + + bool checkAtom(const Check& c, const Atom& a, int i, const void* x, bool pErr) { + switch (c.type) { + case CHECK_ATOM: + debug("atom", "Ok"); + break; + case CHECK_BOOL: + if (a.isBool()) { + debug("book", "Ok"); + i++; + } else { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + break; + case CHECK_BYTE: + if (!a.isInteger() || a.asT() < 0 || a.asT() > 255) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } else { + debug("byte", "Ok"); + } + break; + case CHECK_TIME: + if (a.isFloat()) { + auto f = a.asT(); + if (f < 0) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}', expected to be >= 0", c.argName(), i, f)); + return false; + } + } else if (a.isSymbol()) { + if (!check_time_unit(a.asT())) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}', time value expected", c.argName(), i, atom_to_string(a))); + return false; + } + } else { + if (pErr) + pdError(x, fmt::format("invalid {} value type at [{}]: '{}', expected float or symbol", c.argName(), i, atom_to_string(a))); + return false; + } + debug("time", "Ok"); + break; + case CHECK_INT: + if (!a.isInteger()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } else { + const int64_t val = a.asT(); + const int64_t arg = (c.values.size() >= 1 && boost::get(&c.values[0])) + ? *boost::get(&c.values[0]) + : -999999999; + + switch (c.cmp) { + case CMP_LESS: + if (!(val < arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_LESS_EQ: + if (!(val <= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER: + if (!(val > arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER_EQ: + if (!(val >= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_EQUAL: + if (c.values.size() == 1) { + if (val != arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be = {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + case CMP_NOT_EQUAL: + if (val == arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be !={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_MODULE: + if (val % arg != 0) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be multiple of {}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_POWER2: { + bool rc = (val > 0 && ((val & (val - 1)) == 0)); + if (!rc) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be power of 2, got: {}", c.argName(), i, val)); + return false; + } + } + break; + case CMP_RANGE_SEMIOPEN: + case CMP_RANGE_CLOSED: { + if (c.values.size() != 2) { + pdError(x, "internal arg error"); + return false; + } + + if (!boost::get(&c.values[0]) || !boost::get(&c.values[1])) { + pdError(x, "internal arg error"); + return false; + } + + const auto a = *boost::get(&c.values[0]); + const auto b = *boost::get(&c.values[1]); + + if (c.cmp == CMP_RANGE_CLOSED && !(a <= val && val <= b)) { + if (pErr) + pdError(x, fmt::format("{} value at [{}] expected to be in [{},{}] range, got: {}", c.argName(), i, a, b, val)); + return false; + } + + if (c.cmp == CMP_RANGE_SEMIOPEN && !(a <= val && val < b)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be in [{},{}) range, got: {}", c.argName(), i, a, b, val)); + return false; + } + } + break; + default: + break; + } + debug("int", "Ok"); + } + break; + case CHECK_SYMBOL: { + if (!a.isSymbol()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + + auto val = a.asT()->s_name; + auto hash = crc32_hash(val); + + switch(c.cmp) { + case CMP_EQUAL: { + bool found = false; + for (auto& v: c.values) { + if (c.isEqualHash(v, hash)) { found = true; break; } + } + if (!found) { + if (pErr) { + if (c.values.size() == 1) + pdError(x, fmt::format("{} at [{}] expected to be {}, got: '{}'", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + else + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: '{}'", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + } + return false; + } + } + break; + default: + break; + } + debug("symbol", "Ok"); + } + break; + case CHECK_FLOAT: { + if (!a.isFloat()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + + auto val = a.asT(); + const t_float arg = (c.values.size() == 1 && boost::get(&c.values[0])) + ? *boost::strict_get(&c.values[0]) + : -999999999; + + switch (c.cmp) { + case CMP_LESS: + if (!(val < arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_LESS_EQ: + if (!(val <= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER: + if (!(val > arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER_EQ: + if (!(val >= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_RANGE_SEMIOPEN: + case CMP_RANGE_CLOSED: { + if (c.values.size() != 2) { + pdError(x, fmt::format("internal arg error, invalid arg count: {}", c.values.size())); + return false; + } + + if (!boost::get(&c.values[0]) || !boost::get(&c.values[1])) { + pdError(x, "internal arg error"); + return false; + } + + const auto a = *boost::get(&c.values[0]); + const auto b = *boost::get(&c.values[1]); + + if (c.cmp == CMP_RANGE_CLOSED && !(a <= val && val <= b)) { + if (pErr) + pdError(x, fmt::format("{} value at [{}] expected to be in [{},{}] range, got: {}", c.argName(), i, a, b, val)); + return false; + } + + if (c.cmp == CMP_RANGE_SEMIOPEN && !(a <= val && val < b)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be in [{},{}) range, got: {}", c.argName(), i, a, b, val)); + return false; + } + } + break; + case CMP_EQUAL: + if (c.values.size() == 1) { + if (val != arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be = {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + case CMP_NOT_EQUAL: + if (val == arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be !={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_APPROX: + if (c.values.size() == 1) { + if (!approx_equal(val, arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be ~ {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isApproxEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be aprrox of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + default: + break; + } + debug("float", "Ok"); + } break; + default: + break; + } + + return true; + } + } + + struct ArgCheckImp : boost::container::small_vector { + public: + std::string helpBrief() const { + string::MediumString str; + auto bs = std::back_inserter(str); + fmt::format_to(bs, "usage: "); + for (auto& c: *this) { + fmt::format_to(bs, "{}{} ", c.argName(), c.helpRepeats()); + } + return { str.data(), str.size() }; + } + + std::string help() const { + string::MediumString str; + auto bs = std::back_inserter(str); + fmt::format_to(bs, "usage: "); + for (auto& c: *this) + fmt::format_to(bs, "{}{} ", c.argName(), c.helpRepeats()); + + str.push_back('\n'); + for (auto& c: *this) { + fmt::format_to(bs, " - {}\n", c.argInfo()); + } + + if (str.size() > 0 && str.back() == '\n') + str.pop_back(); + + return { str.data(), str.size() }; + } + }; + + ArgChecker::~ArgChecker() = default; + + bool ArgChecker::check(const AtomListView& lv, BaseObject* obj, ArgMatchList* matches) const + { + if (!chk_) + return false; + + ArgMatchList m; + const void* x = obj ? obj->owner() : nullptr; + + const int N = lv.size(); + int atom_idx = 0; + + for (int i = 0; i < chk_->size(); i++) { + auto& check = (*chk_)[i]; + auto cur = atom_idx + (check.rmin - 1); + auto match_pos = atom_idx; + + for (int k = 0; k < check.rmin; k++, atom_idx++) { + if (atom_idx >= N) { + pdError(x, fmt::format("{} expected at [{}]", check.argName(), atom_idx)); + return false; + } + if (!checkAtom(check, lv[atom_idx], atom_idx, x, true)) + return false; + } + + for (int k = check.rmin; k < check.repeatMax(); k++, atom_idx++) { + if (atom_idx >= N) + break; + + if (!checkAtom(check, lv[atom_idx], atom_idx, x, false)) + break; + } + + m.push_back(lv.subView(match_pos, atom_idx - match_pos)); + } + + if (atom_idx < N) { + pdError(x, fmt::format("extra arguments left, starting from [{}]: {}", atom_idx, list_to_string(lv.subView(atom_idx)))); + return false; + } + + if (matches) + *matches = m; + + return true; + } + + ArgChecker::ArgChecker(const char* str) + : chk_(new ArgCheckImp) + { + int ca = 0; + int cs = 0; + const char* p = str; + int64_t rl_num = 0; + int64_t rl_den = 0; + int64_t rl_den_cnt = 0; + int rl_sign = 0; + Check rl_chk; + const char* rl_sym_start = 0; + + +#line 897 "args/argcheck2.cpp" + { + cs = (int)arg_check2_start; + } + +#line 902 "args/argcheck2.cpp" + { + switch ( cs ) { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 69: + goto st_case_69; + case 12: + goto st_case_12; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 23: + goto st_case_23; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 26: + goto st_case_26; + case 27: + goto st_case_27; + case 28: + goto st_case_28; + case 29: + goto st_case_29; + case 30: + goto st_case_30; + case 31: + goto st_case_31; + case 32: + goto st_case_32; + case 33: + goto st_case_33; + case 34: + goto st_case_34; + case 35: + goto st_case_35; + case 36: + goto st_case_36; + case 37: + goto st_case_37; + case 38: + goto st_case_38; + case 39: + goto st_case_39; + case 40: + goto st_case_40; + case 41: + goto st_case_41; + case 42: + goto st_case_42; + case 43: + goto st_case_43; + case 44: + goto st_case_44; + case 45: + goto st_case_45; + case 46: + goto st_case_46; + case 47: + goto st_case_47; + case 48: + goto st_case_48; + case 49: + goto st_case_49; + case 50: + goto st_case_50; + case 51: + goto st_case_51; + case 52: + goto st_case_52; + case 53: + goto st_case_53; + case 54: + goto st_case_54; + case 55: + goto st_case_55; + case 56: + goto st_case_56; + case 57: + goto st_case_57; + case 58: + goto st_case_58; + case 59: + goto st_case_59; + case 60: + goto st_case_60; + case 61: + goto st_case_61; + case 62: + goto st_case_62; + case 63: + goto st_case_63; + case 64: + goto st_case_64; + case 65: + goto st_case_65; + case 66: + goto st_case_66; + case 67: + goto st_case_67; + case 68: + goto st_case_68; + } + _ctr29: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1051 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1066 "args/argcheck2.cpp" + + goto _st1; + _ctr36: + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1083 "args/argcheck2.cpp" + + goto _st1; + _ctr66: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1097 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1103 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1118 "args/argcheck2.cpp" + + goto _st1; + _ctr136: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 1128 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1134 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1149 "args/argcheck2.cpp" + + goto _st1; + _ctr179: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 1157 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1163 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1178 "args/argcheck2.cpp" + + goto _st1; + _ctr186: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 1186 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1192 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1207 "args/argcheck2.cpp" + + goto _st1; + _ctr198: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 1224 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1230 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1245 "args/argcheck2.cpp" + + goto _st1; + _st1: + p+= 1; + st_case_1: + switch( ( (*( p))) ) { + case 66: { + goto _ctr3; + } + case 95: { + goto _ctr2; + } + case 97: { + goto _ctr4; + } + case 98: { + goto _ctr5; + } + case 102: { + goto _ctr6; + } + case 105: { + goto _ctr7; + } + case 115: { + goto _ctr8; + } + case 116: { + goto _ctr9; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr2; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr2; + } + goto _st0; + _st0: + st_case_0: + goto _out0; + _ctr2: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.clear(); } + +#line 1293 "args/argcheck2.cpp" + + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1299 "args/argcheck2.cpp" + + goto _st2; + _st2: + p+= 1; + st_case_2: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr11; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr11; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr11; + } + goto _st0; + _ctr11: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1326 "args/argcheck2.cpp" + + goto _st3; + _st3: + p+= 1; + st_case_3: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr14; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr14; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr14; + } + goto _st0; + _ctr14: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1353 "args/argcheck2.cpp" + + goto _st4; + _st4: + p+= 1; + st_case_4: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr16; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr16; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr16; + } + goto _st0; + _ctr16: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1380 "args/argcheck2.cpp" + + goto _st5; + _st5: + p+= 1; + st_case_5: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr18; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr18; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr18; + } + goto _st0; + _ctr18: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1407 "args/argcheck2.cpp" + + goto _st6; + _st6: + p+= 1; + st_case_6: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr20; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr20; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr20; + } + goto _st0; + _ctr20: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1434 "args/argcheck2.cpp" + + goto _st7; + _st7: + p+= 1; + st_case_7: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr22; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr22; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr22; + } + goto _st0; + _ctr22: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1461 "args/argcheck2.cpp" + + goto _st8; + _st8: + p+= 1; + st_case_8: + switch( ( (*( p))) ) { + case 58: { + goto _st10; + } + case 95: { + goto _ctr24; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr24; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr24; + } + goto _st0; + _ctr24: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 1488 "args/argcheck2.cpp" + + goto _st9; + _st9: + p+= 1; + st_case_9: + if ( ( (*( p))) == 58 ) { + goto _st10; + } + goto _st0; + _st10: + p+= 1; + st_case_10: + switch( ( (*( p))) ) { + case 66: { + goto _ctr26; + } + case 97: { + goto _ctr4; + } + case 98: { + goto _ctr5; + } + case 102: { + goto _ctr6; + } + case 105: { + goto _ctr7; + } + case 115: { + goto _ctr8; + } + case 116: { + goto _ctr9; + } + } + goto _st0; + _ctr4: + { +#line 392 "args/argcheck2.rl" + rl_chk.type = CHECK_ATOM; } + +#line 1530 "args/argcheck2.cpp" + + goto _st11; + _ctr5: + { +#line 394 "args/argcheck2.rl" + rl_chk.type = CHECK_BYTE; } + +#line 1538 "args/argcheck2.cpp" + + goto _st11; + _ctr9: + { +#line 398 "args/argcheck2.rl" + rl_chk.type = CHECK_TIME; } + +#line 1546 "args/argcheck2.cpp" + + goto _st11; + _ctr26: + { +#line 393 "args/argcheck2.rl" + rl_chk.type = CHECK_BOOL; } + +#line 1554 "args/argcheck2.cpp" + + goto _st11; + _ctr109: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1568 "args/argcheck2.cpp" + + { +#line 367 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 1574 "args/argcheck2.cpp" + + goto _st11; + _ctr112: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1588 "args/argcheck2.cpp" + + { +#line 367 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 1594 "args/argcheck2.cpp" + + goto _st11; + _ctr191: + { +#line 342 "args/argcheck2.rl" + rl_chk.cmp = CMP_POWER2; } + +#line 1602 "args/argcheck2.cpp" + + goto _st11; + _st11: + p+= 1; + st_case_11: + switch( ( (*( p))) ) { + case 0: { + goto _ctr28; + } + case 32: { + goto _ctr29; + } + case 42: { + goto _ctr30; + } + case 43: { + goto _ctr31; + } + case 63: { + goto _ctr32; + } + case 123: { + goto _ctr33; + } + } + goto _st0; + _ctr28: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1634 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1649 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1655 "args/argcheck2.cpp" + + goto _st69; + _ctr35: + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1672 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1678 "args/argcheck2.cpp" + + goto _st69; + _ctr65: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1692 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1698 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1713 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1719 "args/argcheck2.cpp" + + goto _st69; + _ctr135: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 1729 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1735 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1750 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1756 "args/argcheck2.cpp" + + goto _st69; + _ctr178: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 1764 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1770 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1785 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1791 "args/argcheck2.cpp" + + goto _st69; + _ctr185: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 1799 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1805 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1820 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1826 "args/argcheck2.cpp" + + goto _st69; + _ctr197: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 1843 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1849 "args/argcheck2.cpp" + + { +#line 254 "args/argcheck2.rl" + + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; + } + +#line 1864 "args/argcheck2.cpp" + + { +#line 420 "args/argcheck2.rl" + {p+= 1; cs = 69; goto _out;} } + +#line 1870 "args/argcheck2.cpp" + + goto _st69; + _st69: + p+= 1; + st_case_69: + goto _st0; + _ctr30: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1882 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 1888 "args/argcheck2.cpp" + + goto _st12; + _ctr31: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1896 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 1902 "args/argcheck2.cpp" + + goto _st12; + _ctr32: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1910 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 1916 "args/argcheck2.cpp" + + goto _st12; + _ctr42: + { +#line 293 "args/argcheck2.rl" + rl_chk.rmax = rl_chk.rmin; } + +#line 1924 "args/argcheck2.cpp" + + goto _st12; + _ctr67: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1938 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1944 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 1950 "args/argcheck2.cpp" + + goto _st12; + _ctr68: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1964 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1970 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 1976 "args/argcheck2.cpp" + + goto _st12; + _ctr71: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 1990 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 1996 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 2002 "args/argcheck2.cpp" + + goto _st12; + _ctr137: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 2012 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2018 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 2024 "args/argcheck2.cpp" + + goto _st12; + _ctr138: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 2034 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2040 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 2046 "args/argcheck2.cpp" + + goto _st12; + _ctr140: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 2056 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2062 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 2068 "args/argcheck2.cpp" + + goto _st12; + _ctr180: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 2076 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2082 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 2088 "args/argcheck2.cpp" + + goto _st12; + _ctr181: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 2096 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2102 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 2108 "args/argcheck2.cpp" + + goto _st12; + _ctr182: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 2116 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2122 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 2128 "args/argcheck2.cpp" + + goto _st12; + _ctr187: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 2136 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2142 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 2148 "args/argcheck2.cpp" + + goto _st12; + _ctr188: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 2156 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2162 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 2168 "args/argcheck2.cpp" + + goto _st12; + _ctr189: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 2176 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2182 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 2188 "args/argcheck2.cpp" + + goto _st12; + _ctr199: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 2205 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2211 "args/argcheck2.cpp" + + { +#line 401 "args/argcheck2.rl" + rl_chk.setRepeats(0, REPEAT_INF); } + +#line 2217 "args/argcheck2.cpp" + + goto _st12; + _ctr200: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 2234 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2240 "args/argcheck2.cpp" + + { +#line 400 "args/argcheck2.rl" + rl_chk.setRepeats(1, REPEAT_INF); } + +#line 2246 "args/argcheck2.cpp" + + goto _st12; + _ctr201: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 2263 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2269 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 2275 "args/argcheck2.cpp" + + goto _st12; + _st12: + p+= 1; + st_case_12: + switch( ( (*( p))) ) { + case 0: { + goto _ctr35; + } + case 32: { + goto _ctr36; + } + } + goto _st0; + _ctr33: + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2295 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2301 "args/argcheck2.cpp" + + goto _st13; + _ctr72: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 2315 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2321 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2327 "args/argcheck2.cpp" + + goto _st13; + _ctr141: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 2337 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2343 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2349 "args/argcheck2.cpp" + + goto _st13; + _ctr183: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_SEMIOPEN; } + +#line 2357 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2363 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2369 "args/argcheck2.cpp" + + goto _st13; + _ctr190: + { +#line 317 "args/argcheck2.rl" + rl_chk.cmp = CMP_RANGE_CLOSED; } + +#line 2377 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2383 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2389 "args/argcheck2.cpp" + + goto _st13; + _ctr202: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 2406 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 2412 "args/argcheck2.cpp" + + { +#line 294 "args/argcheck2.rl" + rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; } + +#line 2418 "args/argcheck2.cpp" + + goto _st13; + _st13: + p+= 1; + st_case_13: + if ( ( (*( p))) == 48 ) { + goto _ctr38; + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr39; + } + goto _st0; + _ctr38: + { +#line 291 "args/argcheck2.rl" + rl_chk.rmin = 0; } + +#line 2436 "args/argcheck2.cpp" + + goto _st14; + _st14: + p+= 1; + st_case_14: + switch( ( (*( p))) ) { + case 44: { + goto _st15; + } + case 125: { + goto _ctr42; + } + } + goto _st0; + _st15: + p+= 1; + st_case_15: + switch( ( (*( p))) ) { + case 48: { + goto _ctr43; + } + case 125: { + goto _st12; + } + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr44; + } + goto _st0; + _ctr43: + { +#line 292 "args/argcheck2.rl" + rl_chk.rmax = 0; } + +#line 2471 "args/argcheck2.cpp" + + goto _st16; + _st16: + p+= 1; + st_case_16: + if ( ( (*( p))) == 125 ) { + goto _st12; + } + goto _st0; + _ctr44: + { +#line 292 "args/argcheck2.rl" + rl_chk.rmax = (( (*( p))))-'0'; } + +#line 2486 "args/argcheck2.cpp" + + goto _st17; + _ctr47: + { +#line 292 "args/argcheck2.rl" + (rl_chk.rmax *= 10) += ((( (*( p)))) - '0'); } + +#line 2494 "args/argcheck2.cpp" + + goto _st17; + _st17: + p+= 1; + st_case_17: + if ( ( (*( p))) == 125 ) { + goto _st12; + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr47; + } + goto _st0; + _ctr39: + { +#line 291 "args/argcheck2.rl" + rl_chk.rmin = (( (*( p))))-'0'; } + +#line 2512 "args/argcheck2.cpp" + + goto _st18; + _ctr49: + { +#line 291 "args/argcheck2.rl" + (rl_chk.rmin *= 10) += ((( (*( p)))) - '0'); } + +#line 2520 "args/argcheck2.cpp" + + goto _st18; + _st18: + p+= 1; + st_case_18: + switch( ( (*( p))) ) { + case 44: { + goto _st15; + } + case 125: { + goto _ctr42; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr49; + } + goto _st0; + _ctr6: + { +#line 397 "args/argcheck2.rl" + rl_chk.type = CHECK_FLOAT; } + +#line 2543 "args/argcheck2.cpp" + + goto _st19; + _st19: + p+= 1; + st_case_19: + switch( ( (*( p))) ) { + case 0: { + goto _ctr28; + } + case 32: { + goto _ctr29; + } + case 33: { + goto _st20; + } + case 42: { + goto _ctr30; + } + case 43: { + goto _ctr31; + } + case 60: { + goto _ctr52; + } + case 61: { + goto _ctr53; + } + case 62: { + goto _ctr54; + } + case 63: { + goto _ctr32; + } + case 91: { + goto _st33; + } + case 123: { + goto _ctr33; + } + case 126: { + goto _ctr56; + } + } + goto _st0; + _st20: + p+= 1; + st_case_20: + if ( ( (*( p))) == 61 ) { + goto _ctr57; + } + goto _st0; + _ctr57: + { +#line 330 "args/argcheck2.rl" + rl_chk.cmp = CMP_NOT_EQUAL; } + +#line 2600 "args/argcheck2.cpp" + + goto _st21; + _ctr77: + { +#line 329 "args/argcheck2.rl" + rl_chk.cmp = CMP_LESS_EQ; } + +#line 2608 "args/argcheck2.cpp" + + goto _st21; + _ctr92: + { +#line 328 "args/argcheck2.rl" + rl_chk.cmp = CMP_GREATER_EQ; } + +#line 2616 "args/argcheck2.cpp" + + goto _st21; + _st21: + p+= 1; + st_case_21: + switch( ( (*( p))) ) { + case 43: { + goto _ctr59; + } + case 45: { + goto _ctr60; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr61; + } + goto _st0; + _ctr59: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2639 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2645 "args/argcheck2.cpp" + + goto _st22; + _ctr60: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2653 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 2659 "args/argcheck2.cpp" + + goto _st22; + _st22: + p+= 1; + st_case_22: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr63; + } + goto _st0; + _ctr61: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2674 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 2680 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2686 "args/argcheck2.cpp" + + goto _st23; + _ctr63: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 2694 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2700 "args/argcheck2.cpp" + + goto _st23; + _ctr70: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2708 "args/argcheck2.cpp" + + goto _st23; + _st23: + p+= 1; + st_case_23: + switch( ( (*( p))) ) { + case 0: { + goto _ctr65; + } + case 32: { + goto _ctr66; + } + case 42: { + goto _ctr67; + } + case 43: { + goto _ctr68; + } + case 46: { + goto _st24; + } + case 63: { + goto _ctr71; + } + case 123: { + goto _ctr72; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr70; + } + goto _st0; + _st24: + p+= 1; + st_case_24: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr73; + } + goto _st0; + _ctr73: + { +#line 300 "args/argcheck2.rl" + rl_den = 0; rl_den_cnt = 1; } + +#line 2753 "args/argcheck2.cpp" + + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 2759 "args/argcheck2.cpp" + + goto _st25; + _ctr75: + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 2767 "args/argcheck2.cpp" + + goto _st25; + _st25: + p+= 1; + st_case_25: + switch( ( (*( p))) ) { + case 0: { + goto _ctr65; + } + case 32: { + goto _ctr66; + } + case 42: { + goto _ctr67; + } + case 43: { + goto _ctr68; + } + case 63: { + goto _ctr71; + } + case 123: { + goto _ctr72; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr75; + } + goto _st0; + _ctr52: + { +#line 329 "args/argcheck2.rl" + rl_chk.cmp = CMP_LESS; } + +#line 2802 "args/argcheck2.cpp" + + goto _st26; + _st26: + p+= 1; + st_case_26: + switch( ( (*( p))) ) { + case 43: { + goto _ctr59; + } + case 45: { + goto _ctr60; + } + case 61: { + goto _ctr77; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr61; + } + goto _st0; + _ctr53: + { +#line 375 "args/argcheck2.rl" + rl_chk.cmp = CMP_EQUAL; } + +#line 2828 "args/argcheck2.cpp" + + goto _st27; + _ctr56: + { +#line 383 "args/argcheck2.rl" + rl_chk.cmp = CMP_APPROX; } + +#line 2836 "args/argcheck2.cpp" + + goto _st27; + _ctr87: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 2850 "args/argcheck2.cpp" + + goto _st27; + _st27: + p+= 1; + st_case_27: + switch( ( (*( p))) ) { + case 43: { + goto _ctr79; + } + case 45: { + goto _ctr80; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr81; + } + goto _st0; + _ctr79: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2873 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2879 "args/argcheck2.cpp" + + goto _st28; + _ctr80: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2887 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 2893 "args/argcheck2.cpp" + + goto _st28; + _st28: + p+= 1; + st_case_28: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr83; + } + goto _st0; + _ctr81: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 2908 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 2914 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2920 "args/argcheck2.cpp" + + goto _st29; + _ctr83: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 2928 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2934 "args/argcheck2.cpp" + + goto _st29; + _ctr86: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 2942 "args/argcheck2.cpp" + + goto _st29; + _st29: + p+= 1; + st_case_29: + switch( ( (*( p))) ) { + case 0: { + goto _ctr65; + } + case 32: { + goto _ctr66; + } + case 42: { + goto _ctr67; + } + case 43: { + goto _ctr68; + } + case 46: { + goto _st30; + } + case 63: { + goto _ctr71; + } + case 123: { + goto _ctr72; + } + case 124: { + goto _ctr87; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr86; + } + goto _st0; + _st30: + p+= 1; + st_case_30: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr88; + } + goto _st0; + _ctr88: + { +#line 300 "args/argcheck2.rl" + rl_den = 0; rl_den_cnt = 1; } + +#line 2990 "args/argcheck2.cpp" + + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 2996 "args/argcheck2.cpp" + + goto _st31; + _ctr90: + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 3004 "args/argcheck2.cpp" + + goto _st31; + _st31: + p+= 1; + st_case_31: + switch( ( (*( p))) ) { + case 0: { + goto _ctr65; + } + case 32: { + goto _ctr66; + } + case 42: { + goto _ctr67; + } + case 43: { + goto _ctr68; + } + case 63: { + goto _ctr71; + } + case 123: { + goto _ctr72; + } + case 124: { + goto _ctr87; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr90; + } + goto _st0; + _ctr54: + { +#line 328 "args/argcheck2.rl" + rl_chk.cmp = CMP_GREATER; } + +#line 3042 "args/argcheck2.cpp" + + goto _st32; + _st32: + p+= 1; + st_case_32: + switch( ( (*( p))) ) { + case 43: { + goto _ctr59; + } + case 45: { + goto _ctr60; + } + case 61: { + goto _ctr92; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr61; + } + goto _st0; + _st33: + p+= 1; + st_case_33: + switch( ( (*( p))) ) { + case 43: { + goto _ctr93; + } + case 45: { + goto _ctr94; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr95; + } + goto _st0; + _ctr93: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3083 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3089 "args/argcheck2.cpp" + + goto _st34; + _ctr94: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3097 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3103 "args/argcheck2.cpp" + + goto _st34; + _st34: + p+= 1; + st_case_34: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr97; + } + goto _st0; + _ctr95: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3118 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3124 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3130 "args/argcheck2.cpp" + + goto _st35; + _ctr97: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3138 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3144 "args/argcheck2.cpp" + + goto _st35; + _ctr101: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3152 "args/argcheck2.cpp" + + goto _st35; + _st35: + p+= 1; + st_case_35: + switch( ( (*( p))) ) { + case 44: { + goto _ctr99; + } + case 46: { + goto _st41; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr101; + } + goto _st0; + _ctr99: + { +#line 269 "args/argcheck2.rl" + + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); + } + +#line 3181 "args/argcheck2.cpp" + + goto _st36; + _st36: + p+= 1; + st_case_36: + switch( ( (*( p))) ) { + case 43: { + goto _ctr103; + } + case 45: { + goto _ctr104; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr105; + } + goto _st0; + _ctr103: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3204 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3210 "args/argcheck2.cpp" + + goto _st37; + _ctr104: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3218 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3224 "args/argcheck2.cpp" + + goto _st37; + _st37: + p+= 1; + st_case_37: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr107; + } + goto _st0; + _ctr105: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3239 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3245 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3251 "args/argcheck2.cpp" + + goto _st38; + _ctr107: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3259 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3265 "args/argcheck2.cpp" + + goto _st38; + _ctr111: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3273 "args/argcheck2.cpp" + + goto _st38; + _st38: + p+= 1; + st_case_38: + switch( ( (*( p))) ) { + case 41: { + goto _ctr109; + } + case 46: { + goto _st39; + } + case 93: { + goto _ctr112; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr111; + } + goto _st0; + _st39: + p+= 1; + st_case_39: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr113; + } + goto _st0; + _ctr113: + { +#line 300 "args/argcheck2.rl" + rl_den = 0; rl_den_cnt = 1; } + +#line 3306 "args/argcheck2.cpp" + + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 3312 "args/argcheck2.cpp" + + goto _st40; + _ctr115: + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 3320 "args/argcheck2.cpp" + + goto _st40; + _st40: + p+= 1; + st_case_40: + switch( ( (*( p))) ) { + case 41: { + goto _ctr109; + } + case 93: { + goto _ctr112; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr115; + } + goto _st0; + _st41: + p+= 1; + st_case_41: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr116; + } + goto _st0; + _ctr116: + { +#line 300 "args/argcheck2.rl" + rl_den = 0; rl_den_cnt = 1; } + +#line 3350 "args/argcheck2.cpp" + + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 3356 "args/argcheck2.cpp" + + goto _st42; + _ctr118: + { +#line 300 "args/argcheck2.rl" + (rl_den *= 10) += ((( (*( p)))) - '0'); rl_den_cnt *= 10; } + +#line 3364 "args/argcheck2.cpp" + + goto _st42; + _st42: + p+= 1; + st_case_42: + if ( ( (*( p))) == 44 ) { + goto _ctr99; + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr118; + } + goto _st0; + _ctr7: + { +#line 395 "args/argcheck2.rl" + rl_chk.type = CHECK_INT; } + +#line 3382 "args/argcheck2.cpp" + + goto _st43; + _st43: + p+= 1; + st_case_43: + switch( ( (*( p))) ) { + case 0: { + goto _ctr28; + } + case 32: { + goto _ctr29; + } + case 33: { + goto _st44; + } + case 37: { + goto _ctr121; + } + case 42: { + goto _ctr30; + } + case 43: { + goto _ctr31; + } + case 60: { + goto _ctr122; + } + case 61: { + goto _ctr123; + } + case 62: { + goto _ctr124; + } + case 63: { + goto _ctr32; + } + case 91: { + goto _st55; + } + case 94: { + goto _st63; + } + case 123: { + goto _ctr33; + } + } + goto _st0; + _st44: + p+= 1; + st_case_44: + if ( ( (*( p))) == 61 ) { + goto _ctr127; + } + goto _st0; + _ctr127: + { +#line 330 "args/argcheck2.rl" + rl_chk.cmp = CMP_NOT_EQUAL; } + +#line 3442 "args/argcheck2.cpp" + + goto _st45; + _ctr147: + { +#line 329 "args/argcheck2.rl" + rl_chk.cmp = CMP_LESS_EQ; } + +#line 3450 "args/argcheck2.cpp" + + goto _st45; + _ctr158: + { +#line 328 "args/argcheck2.rl" + rl_chk.cmp = CMP_GREATER_EQ; } + +#line 3458 "args/argcheck2.cpp" + + goto _st45; + _st45: + p+= 1; + st_case_45: + switch( ( (*( p))) ) { + case 43: { + goto _ctr129; + } + case 45: { + goto _ctr130; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr131; + } + goto _st0; + _ctr129: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3481 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3487 "args/argcheck2.cpp" + + goto _st46; + _ctr130: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3495 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3501 "args/argcheck2.cpp" + + goto _st46; + _st46: + p+= 1; + st_case_46: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr133; + } + goto _st0; + _ctr131: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3516 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3522 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3528 "args/argcheck2.cpp" + + goto _st47; + _ctr133: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3536 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3542 "args/argcheck2.cpp" + + goto _st47; + _ctr139: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3550 "args/argcheck2.cpp" + + goto _st47; + _st47: + p+= 1; + st_case_47: + switch( ( (*( p))) ) { + case 0: { + goto _ctr135; + } + case 32: { + goto _ctr136; + } + case 42: { + goto _ctr137; + } + case 43: { + goto _ctr138; + } + case 63: { + goto _ctr140; + } + case 123: { + goto _ctr141; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr139; + } + goto _st0; + _ctr121: + { +#line 335 "args/argcheck2.rl" + rl_chk.cmp = CMP_MODULE; } + +#line 3585 "args/argcheck2.cpp" + + goto _st48; + _st48: + p+= 1; + st_case_48: + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr143; + } + goto _st0; + _ctr143: + { +#line 336 "args/argcheck2.rl" + rl_sign = 1; rl_num = 0; } + +#line 3600 "args/argcheck2.cpp" + + { +#line 336 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3606 "args/argcheck2.cpp" + + goto _st49; + _ctr145: + { +#line 336 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3614 "args/argcheck2.cpp" + + goto _st49; + _st49: + p+= 1; + st_case_49: + switch( ( (*( p))) ) { + case 0: { + goto _ctr135; + } + case 32: { + goto _ctr136; + } + case 42: { + goto _ctr137; + } + case 43: { + goto _ctr138; + } + case 63: { + goto _ctr140; + } + case 123: { + goto _ctr141; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr145; + } + goto _st0; + _ctr122: + { +#line 329 "args/argcheck2.rl" + rl_chk.cmp = CMP_LESS; } + +#line 3649 "args/argcheck2.cpp" + + goto _st50; + _st50: + p+= 1; + st_case_50: + switch( ( (*( p))) ) { + case 43: { + goto _ctr129; + } + case 45: { + goto _ctr130; + } + case 61: { + goto _ctr147; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr131; + } + goto _st0; + _ctr123: + { +#line 325 "args/argcheck2.rl" + rl_chk.cmp = CMP_EQUAL; } + +#line 3675 "args/argcheck2.cpp" + + goto _st51; + _ctr156: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 3685 "args/argcheck2.cpp" + + goto _st51; + _st51: + p+= 1; + st_case_51: + switch( ( (*( p))) ) { + case 43: { + goto _ctr149; + } + case 45: { + goto _ctr150; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr151; + } + goto _st0; + _ctr149: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3708 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3714 "args/argcheck2.cpp" + + goto _st52; + _ctr150: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3722 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3728 "args/argcheck2.cpp" + + goto _st52; + _st52: + p+= 1; + st_case_52: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr153; + } + goto _st0; + _ctr151: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3743 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3749 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3755 "args/argcheck2.cpp" + + goto _st53; + _ctr153: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3763 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3769 "args/argcheck2.cpp" + + goto _st53; + _ctr155: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3777 "args/argcheck2.cpp" + + goto _st53; + _st53: + p+= 1; + st_case_53: + switch( ( (*( p))) ) { + case 0: { + goto _ctr135; + } + case 32: { + goto _ctr136; + } + case 42: { + goto _ctr137; + } + case 43: { + goto _ctr138; + } + case 63: { + goto _ctr140; + } + case 123: { + goto _ctr141; + } + case 124: { + goto _ctr156; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr155; + } + goto _st0; + _ctr124: + { +#line 328 "args/argcheck2.rl" + rl_chk.cmp = CMP_GREATER; } + +#line 3815 "args/argcheck2.cpp" + + goto _st54; + _st54: + p+= 1; + st_case_54: + switch( ( (*( p))) ) { + case 43: { + goto _ctr129; + } + case 45: { + goto _ctr130; + } + case 61: { + goto _ctr158; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr131; + } + goto _st0; + _st55: + p+= 1; + st_case_55: + switch( ( (*( p))) ) { + case 43: { + goto _ctr159; + } + case 45: { + goto _ctr160; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr161; + } + goto _st0; + _ctr159: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3856 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3862 "args/argcheck2.cpp" + + goto _st56; + _ctr160: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3870 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3876 "args/argcheck2.cpp" + + goto _st56; + _st56: + p+= 1; + st_case_56: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr163; + } + goto _st0; + _ctr161: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3891 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3897 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3903 "args/argcheck2.cpp" + + goto _st57; + _ctr163: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 3911 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3917 "args/argcheck2.cpp" + + goto _st57; + _ctr166: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 3925 "args/argcheck2.cpp" + + goto _st57; + _st57: + p+= 1; + st_case_57: + if ( ( (*( p))) == 44 ) { + goto _ctr165; + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr166; + } + goto _st0; + _ctr165: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 3945 "args/argcheck2.cpp" + + goto _st58; + _st58: + p+= 1; + st_case_58: + switch( ( (*( p))) ) { + case 43: { + goto _ctr168; + } + case 45: { + goto _ctr169; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr170; + } + goto _st0; + _ctr168: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3968 "args/argcheck2.cpp" + + { +#line 296 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3974 "args/argcheck2.cpp" + + goto _st59; + _ctr169: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 3982 "args/argcheck2.cpp" + + { +#line 297 "args/argcheck2.rl" + rl_sign = -1; } + +#line 3988 "args/argcheck2.cpp" + + goto _st59; + _st59: + p+= 1; + st_case_59: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr172; + } + goto _st0; + _ctr170: + { +#line 305 "args/argcheck2.rl" + rl_sign = 1; } + +#line 4003 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 4009 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 4015 "args/argcheck2.cpp" + + goto _st60; + _ctr172: + { +#line 299 "args/argcheck2.rl" + rl_num = 0; } + +#line 4023 "args/argcheck2.cpp" + + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 4029 "args/argcheck2.cpp" + + goto _st60; + _ctr175: + { +#line 299 "args/argcheck2.rl" + (rl_num *= 10) += ((( (*( p)))) - '0'); } + +#line 4037 "args/argcheck2.cpp" + + goto _st60; + _st60: + p+= 1; + st_case_60: + switch( ( (*( p))) ) { + case 41: { + goto _ctr174; + } + case 93: { + goto _ctr176; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto _ctr175; + } + goto _st0; + _ctr174: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 4062 "args/argcheck2.cpp" + + goto _st61; + _st61: + p+= 1; + st_case_61: + switch( ( (*( p))) ) { + case 0: { + goto _ctr178; + } + case 32: { + goto _ctr179; + } + case 42: { + goto _ctr180; + } + case 43: { + goto _ctr181; + } + case 63: { + goto _ctr182; + } + case 123: { + goto _ctr183; + } + } + goto _st0; + _ctr176: + { +#line 265 "args/argcheck2.rl" + + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); + } + +#line 4096 "args/argcheck2.cpp" + + goto _st62; + _st62: + p+= 1; + st_case_62: + switch( ( (*( p))) ) { + case 0: { + goto _ctr185; + } + case 32: { + goto _ctr186; + } + case 42: { + goto _ctr187; + } + case 43: { + goto _ctr188; + } + case 63: { + goto _ctr189; + } + case 123: { + goto _ctr190; + } + } + goto _st0; + _st63: + p+= 1; + st_case_63: + if ( ( (*( p))) == 50 ) { + goto _ctr191; + } + goto _st0; + _ctr8: + { +#line 396 "args/argcheck2.rl" + rl_chk.type = CHECK_SYMBOL; } + +#line 4135 "args/argcheck2.cpp" + + goto _st64; + _st64: + p+= 1; + st_case_64: + switch( ( (*( p))) ) { + case 0: { + goto _ctr28; + } + case 32: { + goto _ctr29; + } + case 42: { + goto _ctr30; + } + case 43: { + goto _ctr31; + } + case 61: { + goto _ctr193; + } + case 63: { + goto _ctr32; + } + case 123: { + goto _ctr33; + } + } + goto _st0; + _ctr193: + { +#line 358 "args/argcheck2.rl" + rl_chk.cmp = CMP_EQUAL; } + +#line 4170 "args/argcheck2.cpp" + + goto _st65; + _ctr203: + { +#line 277 "args/argcheck2.rl" + + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, p - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } + } + +#line 4187 "args/argcheck2.cpp" + + goto _st65; + _st65: + p+= 1; + st_case_65: + switch( ( (*( p))) ) { + case 35: { + goto _ctr195; + } + case 45: { + goto _ctr195; + } + case 95: { + goto _ctr195; + } + } + if ( ( (*( p))) < 64 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 58 ) { + goto _ctr195; + } + } else if ( ( (*( p))) > 90 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 122 ) { + goto _ctr195; + } + } else { + goto _ctr195; + } + goto _st0; + _ctr195: + { +#line 351 "args/argcheck2.rl" + rl_sym_start = p; } + +#line 4221 "args/argcheck2.cpp" + + goto _st66; + _st66: + p+= 1; + st_case_66: + switch( ( (*( p))) ) { + case 0: { + goto _ctr197; + } + case 32: { + goto _ctr198; + } + case 35: { + goto _st66; + } + case 42: { + goto _ctr199; + } + case 43: { + goto _ctr200; + } + case 45: { + goto _st66; + } + case 63: { + goto _ctr201; + } + case 95: { + goto _st66; + } + case 123: { + goto _ctr202; + } + case 124: { + goto _ctr203; + } + } + if ( ( (*( p))) < 64 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 58 ) { + goto _st66; + } + } else if ( ( (*( p))) > 90 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 122 ) { + goto _st66; + } + } else { + goto _st66; + } + goto _st0; + _ctr3: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.clear(); } + +#line 4276 "args/argcheck2.cpp" + + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 4282 "args/argcheck2.cpp" + + { +#line 393 "args/argcheck2.rl" + rl_chk.type = CHECK_BOOL; } + +#line 4288 "args/argcheck2.cpp" + + goto _st67; + _st67: + p+= 1; + st_case_67: + switch( ( (*( p))) ) { + case 0: { + goto _ctr28; + } + case 32: { + goto _ctr29; + } + case 42: { + goto _ctr30; + } + case 43: { + goto _ctr31; + } + case 58: { + goto _st10; + } + case 63: { + goto _ctr205; + } + case 95: { + goto _ctr11; + } + case 123: { + goto _ctr33; + } + } + if ( ( (*( p))) > 57 ) { + if ( 64 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr11; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr11; + } + goto _st0; + _ctr205: + { +#line 405 "args/argcheck2.rl" + rl_chk.name.push_back((( (*( p))))); } + +#line 4333 "args/argcheck2.cpp" + + { +#line 415 "args/argcheck2.rl" + rl_chk.rmin = 1; rl_chk.rmax = 1; } + +#line 4339 "args/argcheck2.cpp" + + { +#line 399 "args/argcheck2.rl" + rl_chk.setRepeats(0, 1); } + +#line 4345 "args/argcheck2.cpp" + + goto _st68; + _st68: + p+= 1; + st_case_68: + switch( ( (*( p))) ) { + case 0: { + goto _ctr35; + } + case 32: { + goto _ctr36; + } + case 58: { + goto _st10; + } + case 95: { + goto _ctr14; + } + } + if ( ( (*( p))) > 57 ) { + if ( 63 <= ( (*( p))) && ( (*( p))) <= 90 ) { + goto _ctr14; + } + } else if ( ( (*( p))) >= 48 ) { + goto _ctr14; + } + goto _st0; + _out1: cs = 1; goto _out; + _out0: cs = 0; goto _out; + _out2: cs = 2; goto _out; + _out3: cs = 3; goto _out; + _out4: cs = 4; goto _out; + _out5: cs = 5; goto _out; + _out6: cs = 6; goto _out; + _out7: cs = 7; goto _out; + _out8: cs = 8; goto _out; + _out9: cs = 9; goto _out; + _out10: cs = 10; goto _out; + _out11: cs = 11; goto _out; + _out69: cs = 69; goto _out; + _out12: cs = 12; goto _out; + _out13: cs = 13; goto _out; + _out14: cs = 14; goto _out; + _out15: cs = 15; goto _out; + _out16: cs = 16; goto _out; + _out17: cs = 17; goto _out; + _out18: cs = 18; goto _out; + _out19: cs = 19; goto _out; + _out20: cs = 20; goto _out; + _out21: cs = 21; goto _out; + _out22: cs = 22; goto _out; + _out23: cs = 23; goto _out; + _out24: cs = 24; goto _out; + _out25: cs = 25; goto _out; + _out26: cs = 26; goto _out; + _out27: cs = 27; goto _out; + _out28: cs = 28; goto _out; + _out29: cs = 29; goto _out; + _out30: cs = 30; goto _out; + _out31: cs = 31; goto _out; + _out32: cs = 32; goto _out; + _out33: cs = 33; goto _out; + _out34: cs = 34; goto _out; + _out35: cs = 35; goto _out; + _out36: cs = 36; goto _out; + _out37: cs = 37; goto _out; + _out38: cs = 38; goto _out; + _out39: cs = 39; goto _out; + _out40: cs = 40; goto _out; + _out41: cs = 41; goto _out; + _out42: cs = 42; goto _out; + _out43: cs = 43; goto _out; + _out44: cs = 44; goto _out; + _out45: cs = 45; goto _out; + _out46: cs = 46; goto _out; + _out47: cs = 47; goto _out; + _out48: cs = 48; goto _out; + _out49: cs = 49; goto _out; + _out50: cs = 50; goto _out; + _out51: cs = 51; goto _out; + _out52: cs = 52; goto _out; + _out53: cs = 53; goto _out; + _out54: cs = 54; goto _out; + _out55: cs = 55; goto _out; + _out56: cs = 56; goto _out; + _out57: cs = 57; goto _out; + _out58: cs = 58; goto _out; + _out59: cs = 59; goto _out; + _out60: cs = 60; goto _out; + _out61: cs = 61; goto _out; + _out62: cs = 62; goto _out; + _out63: cs = 63; goto _out; + _out64: cs = 64; goto _out; + _out65: cs = 65; goto _out; + _out66: cs = 66; goto _out; + _out67: cs = 67; goto _out; + _out68: cs = 68; goto _out; + _out: {} + } + +#line 856 "args/argcheck2.rl" + + + if (cs < +#line 4450 "args/argcheck2.cpp" + 69 +#line 858 "args/argcheck2.rl" + ) { + LIB_ERR << fmt::format("invalid format string: '{}'", str); + chk_.reset(); + } + } + + void ArgChecker::usage(BaseObject* obj, t_symbol* m) const + { + if (!chk_) + return; + + Error err(obj); + if (m) + err << '[' << m->s_name << "( "; + + err << chk_->help(); + } + + bool check_args(const char* arg_string, const AtomListView& lv, BaseObject* obj, ArgMatchList* matches) + { + ArgChecker chk(arg_string); + return chk.check(lv, obj, matches); + } + + } +} diff --git a/ceammc/ext/src/lib/args/argcheck2.h b/ceammc/ext/src/lib/args/argcheck2.h new file mode 100644 index 0000000000..4e57ea425e --- /dev/null +++ b/ceammc/ext/src/lib/args/argcheck2.h @@ -0,0 +1,57 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavski. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef ARCHECK2_H +#define ARCHECK2_H + +#include "ceammc_atomlist_view.h" + +#include +#include + +#include + +namespace ceammc { + +class BaseObject; + +namespace args { + + class ArgCheckImp; + + using ArgMatchList = boost::container::small_vector; + + class ArgChecker { + std::unique_ptr chk_; + + public: + ArgChecker(const char* str); + ~ArgChecker(); + + /** + * Check specified list + * @param lv - argument list + * @param obj - pointer to parent object (can be nullptr) + * @param matches - pointer to write matched items + * @return true on success, false on error + */ + bool check(const AtomListView& lv, BaseObject* obj, ArgMatchList* matches = nullptr) const; + void usage(BaseObject* obj = nullptr, t_symbol* m = nullptr) const; + }; + + bool check_args(const char* arg_string, const AtomListView& lv, BaseObject* obj = nullptr, ArgMatchList* matches = nullptr); + +} +} + +#endif // ARCHECK2_H diff --git a/ceammc/ext/src/lib/args/argcheck2.rl b/ceammc/ext/src/lib/args/argcheck2.rl new file mode 100644 index 0000000000..90b61868e4 --- /dev/null +++ b/ceammc/ext/src/lib/args/argcheck2.rl @@ -0,0 +1,883 @@ +# include "argcheck2.h" +# include "ceammc_string.h" +# include "ceammc_object.h" +# include "ceammc_crc32.h" +# include "fmt/core.h" +# include "ceammc_datatypes.h" + +# include +# include +# include +# include +# include +# include +# include + +// #define ARG_DEBUG + +#ifdef ARG_DEBUG +#define debug(prefix, arg) std::cerr << " - " << prefix << ": " << arg << std::endl; +#else +#define debug(prefix, arg) +#endif + +// keep in sync with typeNames values! +enum CheckType : int8_t { + CHECK_NONE, + CHECK_ATOM, + CHECK_BOOL, + CHECK_BYTE, + CHECK_INT, + CHECK_FLOAT, + CHECK_SYMBOL, + CHECK_TIME, +}; + +enum CompareType : int8_t { + CMP_NONE, + CMP_LESS, + CMP_LESS_EQ, + CMP_GREATER, + CMP_GREATER_EQ, + CMP_EQUAL, + CMP_NOT_EQUAL, + CMP_MODULE, + CMP_POWER2, + CMP_RANGE_CLOSED, + CMP_RANGE_SEMIOPEN, + CMP_APPROX, +}; + +namespace { + constexpr int16_t REPEAT_INF = -1; + + // keep in sync with CheckType values! + const char* typeNames[] = { + "", + "atom", + "bool", + "byte", + "int", + "float", + "symbol", + "time", + }; + + std::string atom_to_string(const ceammc::Atom& a) { + ceammc::string::SmallString buf; + if (ceammc::string::atom_to_string(a, buf)) + return { buf.data(), buf.size() }; + else + return "?"; + } + + std::string list_to_string(const ceammc::AtomListView& lv) { + ceammc::string::MediumString buf; + if (ceammc::string::list_to_string(lv, buf)) + return { buf.data(), buf.size() }; + else + return "?"; + } + + + using ArgString = std::pair, uint32_t>; + using ArgName = ceammc::BoostStaticString<10>; + using ArgValue = boost::variant; + using ArgList = boost::container::small_vector; + + class ArgStringVisitor : public boost::static_visitor + { + public: + std::string operator()(const double& d) const { return fmt::format("{}", d); } + std::string operator()(const int64_t& i) const { return fmt::format("{}", i); } + std::string operator()(const ArgString& s) const { + std::string res; + res.reserve(s.first.size() + 2); + res += '\''; + res.append(s.first.data(), s.first.size()); + res += '\''; + return res; + } + }; + + inline std::string arg_to_string(const ArgValue& v) + { + return boost::apply_visitor(ArgStringVisitor(), v); + } + + inline std::string arg_to_string(const ArgList& v, const char* delim = ", ") + { + ceammc::string::SmallString res; + ArgStringVisitor visitor; + for (auto& a: v) { + if (&a != &v[0]) { + res.insert(res.end(), delim, delim + strlen(delim)); + } + fmt::format_to(std::back_inserter(res), boost::apply_visitor(visitor, a)); + } + + return { res.data(), res.size() }; + } + + inline bool approx_equal(double a, double b, double e = 0.00001) + { + return std::fabs(a - b) <= e; + } +} + +struct Check { + ArgList values; + ArgName name; + CheckType type { CHECK_NONE }; + CompareType cmp { CMP_NONE }; + int8_t rmin { 0 }; + int8_t rmax { 0 }; + + inline int repeatMin() const { return rmin; } + inline int repeatMax() const { return (rmax == REPEAT_INF) ? std::numeric_limits::max() : rmax; } + inline void setRepeats(int min, int max) { rmin = min; rmax = max; } + + inline static bool isEqual(const ArgValue& v, int64_t i) + { + auto int_ptr = boost::get(&v); + return (int_ptr && i == *int_ptr); + } + + inline static bool isEqual(const ArgValue& v, double d) + { + auto dbl_ptr = boost::get(&v); + return (dbl_ptr && d == *dbl_ptr); + } + + inline static bool isApproxEqual(const ArgValue& v, double d) + { + auto dbl_ptr = boost::get(&v); + return dbl_ptr && approx_equal(d, *dbl_ptr); + } + + inline static bool isEqualHash(const ArgValue& v, uint32_t hash) + { + auto str_ptr = boost::get(&v); + return (str_ptr && str_ptr->second == hash); + } + + inline std::string argName() const { + if (name.empty()) + return typeNames[type]; + else + return { name.data(), name.size() }; + } + + inline std::string checkInfo() const { + switch (cmp) { + case CMP_MODULE: + return fmt::format("check: %{}==0", arg_to_string(values)); + case CMP_LESS: + return fmt::format("check: <{}", arg_to_string(values)); + case CMP_LESS_EQ: + return fmt::format("check: <={}", arg_to_string(values)); + case CMP_GREATER: + return fmt::format("check: >{}", arg_to_string(values)); + case CMP_GREATER_EQ: + return fmt::format("check: >={}", arg_to_string(values)); + case CMP_RANGE_CLOSED: + return fmt::format("range: [{}]", arg_to_string(values, ",")); + case CMP_RANGE_SEMIOPEN: + return fmt::format("range: [{})", arg_to_string(values, ",")); + case CMP_EQUAL: + if (values.size() == 1) + return fmt::format("check: ={}", arg_to_string(values)); + else + return fmt::format("enum: {}", arg_to_string(values, "|")); + case CMP_APPROX: + if (values.size() == 1) + return fmt::format("check: ~{}", arg_to_string(values)); + else + return fmt::format("enum: ~{}", arg_to_string(values, "|")); + default: + return {}; + } + } + + inline std::string argInfo() const { + if (name.empty()) + return fmt::format("{:10s} [{}]{}", typeNames[type], checkInfo(), helpRepeats()); + else + return fmt::format("{:10s} [type: {} {}]{}", name.data(), typeNames[type], checkInfo(), helpRepeats()); + } + + inline std::string helpRepeats() const { + if (rmin == 1 && rmax == 1) return {}; + if (rmin == 0 && rmax == 1) return { '?', 1 }; + if (rmin == 0 && rmax == REPEAT_INF) return { '*', 1 }; + if (rmin == 1 && rmax == REPEAT_INF) return { '+', 1 }; + if (rmin == rmax) + return fmt::format("{{{}}}", (int)rmin); + if (rmax != REPEAT_INF) + return fmt::format("{{{},{}}}", (int)rmin, (int)rmax); + else + return fmt::format("{{{},}}", (int)rmin); + } +}; + +%%{ +machine time_check; + +num = [0-9]+ ('.' [0-9]+)?; +suffix = '_'? ('samp'|'msec'|'ms'|'sec'|'s'); + +main := num suffix 0 @{ fbreak; }; + +write data; +}%% + +namespace { + +bool check_time_unit(t_symbol* sym) +{ + if (!sym) return false; + + int cs = 0; + const char* p = sym->s_name; + + %% write init; + %% write exec noend; + + return (cs >= %%{ write first_final; }%%); +} + +} + +%%{ +machine arg_check2; + +action do_check { + if (chk_) + chk_->push_back(rl_chk); + + rl_num = 0; + rl_den = 0; + rl_sign = 0; + rl_den_cnt = 0; + rl_chk = {}; +} + +action append_opt_int { + rl_chk.values.push_back((int64_t)(rl_sign * rl_num)); +} + +action append_opt_real { + double real = rl_num; + if (rl_den_cnt) + real += rl_den / double(rl_den_cnt); + + rl_chk.values.push_back(rl_sign * real); +} + +action append_opt_sym { + try { + ArgString str{ {}, 0 }; + str.first.assign(rl_sym_start, fpc - rl_sym_start); + str.second = crc32_hash(str.first.data()); + rl_chk.values.push_back(str); + } catch(std::exception& e) { + LIB_ERR << "exception: " << e.what(); + } +} + +##################### +# repeats: {INT}, {INT,} or {INT,INT} +##################### +rep_min = '0' @{ rl_chk.rmin = 0; } | ([1-9] @{ rl_chk.rmin = fc-'0'; } [0-9]* ${ (rl_chk.rmin *= 10) += (fc - '0'); }); +rep_max = '0' @{ rl_chk.rmax = 0; } | ([1-9] @{ rl_chk.rmax = fc-'0'; } [0-9]* ${ (rl_chk.rmax *= 10) += (fc - '0'); }); +rep_num = '{' rep_min '}' @{ rl_chk.rmax = rl_chk.rmin; }; +rep_range = ('{' rep_min ',' rep_max? '}') >{ rl_chk.rmin = 0; rl_chk.rmax = REPEAT_INF; }; + +num_sign = '+' @{ rl_sign = 1; } + | '-' @{ rl_sign = -1; }; + +num_num = [0-9]+ >{ rl_num = 0; } ${ (rl_num *= 10) += (fc - '0'); }; +num_den = [0-9]+ >{ rl_den = 0; rl_den_cnt = 1; } ${ (rl_den *= 10) += (fc - '0'); rl_den_cnt *= 10; }; + +##################### +# int: (+-)?INT +##################### +num_int = num_sign? >{ rl_sign = 1; } num_num; + +##################### +# float: (+-)?INT.FRAC +##################### +num_real = num_int ('.' num_den)?; + +##################### +# closed int range: [INT,INT] or [INT,INT) +##################### +cmp_range_int = ('[' + num_int %append_opt_int ',' num_int %append_opt_int + (']' %{ rl_chk.cmp = CMP_RANGE_CLOSED; } | ')' %{ rl_chk.cmp = CMP_RANGE_SEMIOPEN; }) + ); + +##################### +# equal: =INT|INT|INT... +##################### +cmp_eq_int = (('=' num_int %append_opt_int) + ('|' num_int %append_opt_int)* + ) >{ rl_chk.cmp = CMP_EQUAL; } + ; + +cmp_op = ('>' @{ rl_chk.cmp = CMP_GREATER; } ('=' @{ rl_chk.cmp = CMP_GREATER_EQ; })?) + | ('<' @{ rl_chk.cmp = CMP_LESS; } ('=' @{ rl_chk.cmp = CMP_LESS_EQ; })?) + | '!=' @{ rl_chk.cmp = CMP_NOT_EQUAL; }; + +##################### +# mod: %INT +##################### +cmp_mod = ( '%' @{ rl_chk.cmp = CMP_MODULE; } + ([1-9][0-9]*) >{ rl_sign = 1; rl_num = 0; } ${ (rl_num *= 10) += (fc - '0'); } %append_opt_int + ) + ; +##################### +# power of 2: ^2 +##################### +cmp_pow2 = '^2' @{ rl_chk.cmp = CMP_POWER2; }; + +int_check = (cmp_op num_int %append_opt_int) + | cmp_mod + | cmp_pow2 + | cmp_eq_int + | cmp_range_int + ; + +sym_opt = [a-zA-Z_\-0-9@#:]+ >{ rl_sym_start = fpc; }; + +##################### +# symbol equal: =SYM|SYM... +##################### +cmp_eq_sym = ('=' sym_opt %append_opt_sym + ('|' sym_opt %append_opt_sym)* + ) >{ rl_chk.cmp = CMP_EQUAL; }; + +sym_check = cmp_eq_sym; + +##################### +# closed float range: [FLOAT,FLOAT] or [FLOAT,FLOAT) +##################### +cmp_range_float = ('[' + num_real %append_opt_real ',' num_real %append_opt_real + (']' @{ rl_chk.cmp = CMP_RANGE_CLOSED; } | ')' @{ rl_chk.cmp = CMP_RANGE_SEMIOPEN; }) + ); + +##################### +# equal: =FLOAT|FLOAT|FLOAT... +##################### +cmp_eq_float = (('=' num_real %append_opt_real) + ('|' num_real %append_opt_real)* + ) >{ rl_chk.cmp = CMP_EQUAL; } + ; + +##################### +# approx: ~FLOAT|FLOAT|FLOAT... +##################### +cmp_approx_float = (('~' num_real %append_opt_real) + ('|' num_real %append_opt_real)* + ) >{ rl_chk.cmp = CMP_APPROX; } + ; + +float_check = (cmp_op num_real %append_opt_real) + | cmp_eq_float + | cmp_approx_float + | cmp_range_float + ; + +atom = 'a' @{ rl_chk.type = CHECK_ATOM; }; +bool = 'B' @{ rl_chk.type = CHECK_BOOL; }; +byte = 'b' @{ rl_chk.type = CHECK_BYTE; }; +int = 'i' @{ rl_chk.type = CHECK_INT; } int_check?; +sym = 's' @{ rl_chk.type = CHECK_SYMBOL; } sym_check?; +float = 'f' @{ rl_chk.type = CHECK_FLOAT; } float_check?; +time = 't' @{ rl_chk.type = CHECK_TIME; }; +nrep = '?' @{ rl_chk.setRepeats(0, 1); } + | '+' @{ rl_chk.setRepeats(1, REPEAT_INF); } + | '*' @{ rl_chk.setRepeats(0, REPEAT_INF); } + | rep_range + | rep_num; + +arg_name = [A-Z0-9_?@]{1,8} >{ rl_chk.name.clear(); } ${ rl_chk.name.push_back(fc); }; + +check = (arg_name ':')? + (atom + | bool + | byte + | int + | sym + | float + | time + ) nrep? >{ rl_chk.rmin = 1; rl_chk.rmax = 1; } + ; + +args = (check (' ' @do_check check)*); + +main := args 0 >do_check @{ fbreak; }; + +write data; + +}%% + +namespace ceammc { +namespace args { + +namespace { + +bool checkAtom(const Check& c, const Atom& a, int i, const void* x, bool pErr) { + switch (c.type) { + case CHECK_ATOM: + debug("atom", "Ok"); + break; + case CHECK_BOOL: + if (a.isBool()) { + debug("book", "Ok"); + i++; + } else { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + break; + case CHECK_BYTE: + if (!a.isInteger() || a.asT() < 0 || a.asT() > 255) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } else { + debug("byte", "Ok"); + } + break; + case CHECK_TIME: + if (a.isFloat()) { + auto f = a.asT(); + if (f < 0) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}', expected to be >= 0", c.argName(), i, f)); + return false; + } + } else if (a.isSymbol()) { + if (!check_time_unit(a.asT())) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}', time value expected", c.argName(), i, atom_to_string(a))); + return false; + } + } else { + if (pErr) + pdError(x, fmt::format("invalid {} value type at [{}]: '{}', expected float or symbol", c.argName(), i, atom_to_string(a))); + return false; + } + debug("time", "Ok"); + break; + case CHECK_INT: + if (!a.isInteger()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } else { + const int64_t val = a.asT(); + const int64_t arg = (c.values.size() >= 1 && boost::get(&c.values[0])) + ? *boost::get(&c.values[0]) + : -999999999; + + switch (c.cmp) { + case CMP_LESS: + if (!(val < arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_LESS_EQ: + if (!(val <= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER: + if (!(val > arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER_EQ: + if (!(val >= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_EQUAL: + if (c.values.size() == 1) { + if (val != arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be = {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + case CMP_NOT_EQUAL: + if (val == arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be !={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_MODULE: + if (val % arg != 0) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be multiple of {}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_POWER2: { + bool rc = (val > 0 && ((val & (val - 1)) == 0)); + if (!rc) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be power of 2, got: {}", c.argName(), i, val)); + return false; + } + } + break; + case CMP_RANGE_SEMIOPEN: + case CMP_RANGE_CLOSED: { + if (c.values.size() != 2) { + pdError(x, "internal arg error"); + return false; + } + + if (!boost::get(&c.values[0]) || !boost::get(&c.values[1])) { + pdError(x, "internal arg error"); + return false; + } + + const auto a = *boost::get(&c.values[0]); + const auto b = *boost::get(&c.values[1]); + + if (c.cmp == CMP_RANGE_CLOSED && !(a <= val && val <= b)) { + if (pErr) + pdError(x, fmt::format("{} value at [{}] expected to be in [{},{}] range, got: {}", c.argName(), i, a, b, val)); + return false; + } + + if (c.cmp == CMP_RANGE_SEMIOPEN && !(a <= val && val < b)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be in [{},{}) range, got: {}", c.argName(), i, a, b, val)); + return false; + } + } + break; + default: + break; + } + debug("int", "Ok"); + } + break; + case CHECK_SYMBOL: { + if (!a.isSymbol()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + + auto val = a.asT()->s_name; + auto hash = crc32_hash(val); + + switch(c.cmp) { + case CMP_EQUAL: { + bool found = false; + for (auto& v: c.values) { + if (c.isEqualHash(v, hash)) { found = true; break; } + } + if (!found) { + if (pErr) { + if (c.values.size() == 1) + pdError(x, fmt::format("{} at [{}] expected to be {}, got: '{}'", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + else + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: '{}'", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + } + return false; + } + } + break; + default: + break; + } + debug("symbol", "Ok"); + } + break; + case CHECK_FLOAT: { + if (!a.isFloat()) { + if (pErr) + pdError(x, fmt::format("invalid {} value at [{}]: '{}'", c.argName(), i, atom_to_string(a))); + return false; + } + + auto val = a.asT(); + const t_float arg = (c.values.size() == 1 && boost::get(&c.values[0])) + ? *boost::strict_get(&c.values[0]) + : -999999999; + + switch (c.cmp) { + case CMP_LESS: + if (!(val < arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_LESS_EQ: + if (!(val <= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be <={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER: + if (!(val > arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >{}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_GREATER_EQ: + if (!(val >= arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be >={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_RANGE_SEMIOPEN: + case CMP_RANGE_CLOSED: { + if (c.values.size() != 2) { + pdError(x, fmt::format("internal arg error, invalid arg count: {}", c.values.size())); + return false; + } + + if (!boost::get(&c.values[0]) || !boost::get(&c.values[1])) { + pdError(x, "internal arg error"); + return false; + } + + const auto a = *boost::get(&c.values[0]); + const auto b = *boost::get(&c.values[1]); + + if (c.cmp == CMP_RANGE_CLOSED && !(a <= val && val <= b)) { + if (pErr) + pdError(x, fmt::format("{} value at [{}] expected to be in [{},{}] range, got: {}", c.argName(), i, a, b, val)); + return false; + } + + if (c.cmp == CMP_RANGE_SEMIOPEN && !(a <= val && val < b)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be in [{},{}) range, got: {}", c.argName(), i, a, b, val)); + return false; + } + } + break; + case CMP_EQUAL: + if (c.values.size() == 1) { + if (val != arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be = {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be one of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + case CMP_NOT_EQUAL: + if (val == arg) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be !={}, got: {}", c.argName(), i, arg, val)); + return false; + } + break; + case CMP_APPROX: + if (c.values.size() == 1) { + if (!approx_equal(val, arg)) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be ~ {}, got: {}", + c.argName(), i, arg_to_string(c.values[0]), atom_to_string(a))); + return false; + } + } else { + bool found = false; + for (auto& v: c.values) { + if (c.isApproxEqual(v, val)) { found = true; break; } + } + if (!found) { + if (pErr) + pdError(x, fmt::format("{} at [{}] expected to be aprrox of: {}, got: {}", + c.argName(), i, arg_to_string(c.values), atom_to_string(a))); + return false; + } + } + break; + default: + break; + } + debug("float", "Ok"); + } break; + default: + break; + } + + return true; +} +} + +struct ArgCheckImp : boost::container::small_vector { +public: + std::string helpBrief() const { + string::MediumString str; + auto bs = std::back_inserter(str); + fmt::format_to(bs, "usage: "); + for (auto& c: *this) { + fmt::format_to(bs, "{}{} ", c.argName(), c.helpRepeats()); + } + return { str.data(), str.size() }; + } + + std::string help() const { + string::MediumString str; + auto bs = std::back_inserter(str); + fmt::format_to(bs, "usage: "); + for (auto& c: *this) + fmt::format_to(bs, "{}{} ", c.argName(), c.helpRepeats()); + + str.push_back('\n'); + for (auto& c: *this) { + fmt::format_to(bs, " - {}\n", c.argInfo()); + } + + if (str.size() > 0 && str.back() == '\n') + str.pop_back(); + + return { str.data(), str.size() }; + } +}; + +ArgChecker::~ArgChecker() = default; + +bool ArgChecker::check(const AtomListView& lv, BaseObject* obj, ArgMatchList* matches) const +{ + if (!chk_) + return false; + + ArgMatchList m; + const void* x = obj ? obj->owner() : nullptr; + + const int N = lv.size(); + int atom_idx = 0; + + for (int i = 0; i < chk_->size(); i++) { + auto& check = (*chk_)[i]; + auto cur = atom_idx + (check.rmin - 1); + auto match_pos = atom_idx; + + for (int k = 0; k < check.rmin; k++, atom_idx++) { + if (atom_idx >= N) { + pdError(x, fmt::format("{} expected at [{}]", check.argName(), atom_idx)); + return false; + } + if (!checkAtom(check, lv[atom_idx], atom_idx, x, true)) + return false; + } + + for (int k = check.rmin; k < check.repeatMax(); k++, atom_idx++) { + if (atom_idx >= N) + break; + + if (!checkAtom(check, lv[atom_idx], atom_idx, x, false)) + break; + } + + m.push_back(lv.subView(match_pos, atom_idx - match_pos)); + } + + if (atom_idx < N) { + pdError(x, fmt::format("extra arguments left, starting from [{}]: {}", atom_idx, list_to_string(lv.subView(atom_idx)))); + return false; + } + + if (matches) + *matches = m; + + return true; +} + +ArgChecker::ArgChecker(const char* str) + : chk_(new ArgCheckImp) +{ + int ca = 0; + int cs = 0; + const char* p = str; + int64_t rl_num = 0; + int64_t rl_den = 0; + int64_t rl_den_cnt = 0; + int rl_sign = 0; + Check rl_chk; + const char* rl_sym_start = 0; + + %%{ + write init; + write exec noend; + }%% + + if (cs < %%{ write first_final; }%%) { + LIB_ERR << fmt::format("invalid format string: '{}'", str); + chk_.reset(); + } +} + +void ArgChecker::usage(BaseObject* obj, t_symbol* m) const +{ + if (!chk_) + return; + + Error err(obj); + if (m) + err << '[' << m->s_name << "( "; + + err << chk_->help(); +} + +bool check_args(const char* arg_string, const AtomListView& lv, BaseObject* obj, ArgMatchList* matches) +{ + ArgChecker chk(arg_string); + return chk.check(lv, obj, matches); +} + +} +} diff --git a/ceammc/ext/src/lib/ceammc_abstractdata.cpp b/ceammc/ext/src/lib/ceammc_abstractdata.cpp index a2792d1a0c..38a032e000 100644 --- a/ceammc/ext/src/lib/ceammc_abstractdata.cpp +++ b/ceammc/ext/src/lib/ceammc_abstractdata.cpp @@ -12,10 +12,14 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_abstractdata.h" +#include "ceammc_atomlist_view.h" +#include "ceammc_data.h" #include "ceammc_datastorage.h" +#include "ceammc_format.h" #include "ceammc_log.h" #include "fmt/format.h" +#include #include #include @@ -28,22 +32,70 @@ void AbstractData::dump() const LIB_DBG << toString(); } +std::string AbstractData::toListString() const +{ + return fmt::format("{}({})", typeName().c_str(), toListStringContent()); +} + +std::string AbstractData::toDictString() const +{ + return fmt::format("{}[{}]", typeName().c_str(), toDictStringContent()); +} + std::string AbstractData::toString() const { - throw std::runtime_error("not implemented"); - return fmt::format("{[Data {} id: {}]}", typeid(*this).name(), type()); + return toListString(); } -std::string AbstractData::objectToJsonString() const +std::string AbstractData::toJsonObject() const { - return fmt::format(R"({{"datatype":"{}","value":{}}})", typeName(), valueToJsonString()); + return fmt::format(R"({{"datatype":"{}","value":{}}})", typeName().c_str(), toJsonString()); } -std::string AbstractData::valueToJsonString() const +std::string AbstractData::toJsonString() const { return "null"; } +bool AbstractData::setFromDataString(const std::string& str) +{ + Atom data; + + if (parse(str, type(), data)) { + return set(data.asData()); + } else { + return false; + } +} + +bool AbstractData::setFromDataList(const AtomListView& lv) +{ + if (lv.empty()) + return true; + + Atom data; + + if (parse(lv, type(), data)) { + return set(data.asData()); + } else { + return false; + } +} + +bool AbstractData::setFromAtom(const Atom& a) +{ + const auto dt = a.dataType(); + if (dt == type()) { + return set(a.asData()); + } else if (dt != 0) { + LIB_ERR << fmt::format("unexpected datatype: '{}'", findTypeName(dt).c_str()); + return false; + } else { + LIB_ERR << fmt::format("expected data, got '{}'", to_string(a)); + return false; + } +} + bool AbstractData::isEqual(const AbstractData* d) const noexcept { if (type() != d->type()) @@ -60,9 +112,59 @@ bool AbstractData::isLess(const AbstractData* d) const noexcept return false; } -std::string AbstractData::typeName() const noexcept +DataTypeName AbstractData::typeName() const noexcept { return DataStorage::instance().nameByType(type()); } +bool AbstractData::canInitWithList() const noexcept +{ + return DataStorage::instance().fromListFunction(typeName()) != nullptr; +} + +bool AbstractData::canInitWithDict() const noexcept +{ + return DataStorage::instance().fromDictFunction(typeName()) != nullptr; +} + +bool AbstractData::parse(const std::string& str, int dataType, Atom& res) +{ + auto p = parseDataString(str.c_str()); + if (!p) { + LIB_ERR << fmt::format("[{}] can't parse string '{}': {}", findTypeName(dataType).c_str(), str, p.err()); + return false; + } + + auto& data = p.result(); + if (data.size() == 1 && data[0].dataType() == dataType) { + res = data[0]; + return true; + } else { + LIB_ERR << fmt::format("datatype expected: '{}'", findTypeName(dataType).c_str()); + return false; + } +} + +bool AbstractData::parse(const AtomListView& lv, int dataType, Atom& res) +{ + auto p = parseDataList(lv); + if (!p) { + LIB_ERR << fmt::format("[{}] can't parse string '{}': {}", findTypeName(dataType).c_str(), to_string(lv), p.err()); + return false; + } + + auto& data = p.result(); + if (data.size() == 1 && data[0].dataType() == dataType) { + res = data[0]; + return true; + } else { + LIB_ERR << fmt::format("datatype expected: '{}'", findTypeName(dataType).c_str()); + return false; + } +} + +DataTypeName AbstractData::findTypeName(DataTypeId dataType) +{ + return DataStorage::instance().nameByType(dataType); +} } diff --git a/ceammc/ext/src/lib/ceammc_abstractdata.h b/ceammc/ext/src/lib/ceammc_abstractdata.h index 285fb173d7..370233f8fa 100644 --- a/ceammc/ext/src/lib/ceammc_abstractdata.h +++ b/ceammc/ext/src/lib/ceammc_abstractdata.h @@ -15,9 +15,12 @@ #define CEAMMC_ABSTRACTDATA_H #include "ceammc_atom.h" +#include "ceammc_datatypes.h" namespace ceammc { +class AtomListView; + /** * @brief Base class for all data types */ @@ -41,22 +44,67 @@ class AbstractData { /** * This method should return ID to data type. */ - virtual int type() const noexcept = 0; + virtual DataTypeId type() const noexcept = 0; + + /** + * return object content for list constructor + */ + virtual std::string toListStringContent() const = 0; + + /** + * return object content for data constructor + */ + virtual std::string toDictStringContent() const = 0; + + /** + * return object representation for data string list constructor + */ + std::string toListString() const; + + /** + * return object representation for data string list constructor + */ + std::string toDictString() const; /** - * Override this method to get non-default string data representation + * String data representation for converting to String() datatype */ virtual std::string toString() const; /** * Returns JSON object with "datatype" and "value" fields */ - std::string objectToJsonString() const; + std::string toJsonObject() const; /** * Returns object value as JSON string */ - virtual std::string valueToJsonString() const; + virtual std::string toJsonString() const; + + /** + * Set data from string constructor + * @return false on error + */ + virtual bool setFromDataString(const std::string& str); + + /** + * Set data from args constructor + * @return false on error + */ + virtual bool setFromDataList(const AtomListView& lv); + + /** + * Set data from (data)atom + * @return true on sucess, false on error + */ + virtual bool setFromAtom(const Atom& a); + + /** + * virtual assign function: should set with same datatype only + * @param d - pointer to real data type + * @return true on success, false on error + */ + virtual bool set(const AbstractData* d) noexcept = 0; /** * Override this method to compare data by pointer to base class @@ -71,7 +119,7 @@ class AbstractData { /** * Returns datatype name */ - virtual std::string typeName() const noexcept final; + virtual DataTypeName typeName() const noexcept final; /** * Helper functions to return pointer to derived classes @@ -86,6 +134,60 @@ class AbstractData { */ template T* cloneT() const; + + /** + * Check if data have list constructor like DataName(args...) + */ + virtual bool canInitWithList() const noexcept; + + /** + * Check if data have dict constructor like DataName[key: args...] + */ + virtual bool canInitWithDict() const noexcept; + + /** + * Assign function: set data from pointer to other data + * @param d - pointer to real data + * @return true on success, false on error + */ + template + bool setDataT(const AbstractData* d) noexcept + { + if (!d || d->type() != T::dataType) + return false; + + auto t = static_cast(d); + *static_cast(this) = *t; + return true; + } + +public: + /** + * Parse data string for desired datatype + * @param str - input string + * @param dataType - desired datatype + * @param res - where to store result if parsing is ok + * @return true on success, false on error + * @note writes error message to Pd Console window + */ + static bool parse(const std::string& str, int dataType, Atom& res); + + /** + * Parse data atomlist for desired datatype + * @param lv - input list + * @param dataType - desired datatype + * @param res - where to store result if parsing is ok + * @return true on success, false on error + * @note writes error message to Pd Console window + */ + static bool parse(const AtomListView& lv, int dataType, Atom& res); + + template + bool parseT(const std::string& str, Atom& res) { return parse(str, T::dataType, res); } + template + bool parseT(const AtomListView& lv, Atom& res) { return parse(lv, T::dataType, res); } + + static DataTypeName findTypeName(DataTypeId dataType); }; template diff --git a/ceammc/ext/src/lib/ceammc_array.cpp b/ceammc/ext/src/lib/ceammc_array.cpp index 79496102d1..aa65f0b2b5 100644 --- a/ceammc/ext/src/lib/ceammc_array.cpp +++ b/ceammc/ext/src/lib/ceammc_array.cpp @@ -21,6 +21,7 @@ extern "C" { #include #include +#include using namespace ceammc; @@ -206,6 +207,28 @@ t_float& Array::at(size_t n) return data_[n].w_float; } +t_float Array::ringPushBack(t_float f) +{ + if (!array_ || !data_ || size_ < 2) + throw Exception("invalid array"); + + const auto prev = data_[0].w_float; + std::memmove(data_, data_ + 1, sizeof(data_[0]) * (size_ - 1)); + data_[size_ - 1].w_float = f; + return prev; +} + +t_float Array::ringPushFront(t_float f) +{ + if (!array_ || !data_ || size_ < 2) + throw Exception("invalid array"); + + const auto prev = data_[size_ - 1].w_float; + std::memmove(data_ + 1, data_, sizeof(data_[0]) * (size_ - 1)); + data_[0].w_float = f; + return prev; +} + bool Array::resize(size_t n) { if (!array_) @@ -236,14 +259,14 @@ void Array::fillWith(FloatValueGenerator gen) std::generate(begin(), end(), [&n, gen]() { return gen(n++); }); } -bool Array::set(const AtomList& l) +bool Array::set(const AtomListView& lv) { - if (!resize(l.size())) + if (!resize(lv.size())) return false; - const size_t N = std::min(size(), l.size()); + const size_t N = std::min(size(), lv.size()); for (size_t i = 0; i < N; i++) - data_[i].w_float = l[i].asFloat(); + data_[i].w_float = lv[i].asFloat(); return true; } diff --git a/ceammc/ext/src/lib/ceammc_array.h b/ceammc/ext/src/lib/ceammc_array.h index beb83f2681..7adb1e12d9 100644 --- a/ceammc/ext/src/lib/ceammc_array.h +++ b/ceammc/ext/src/lib/ceammc_array.h @@ -176,6 +176,9 @@ class Array { const t_float& at(size_t n) const; t_float& at(size_t n); + t_float ringPushBack(t_float f); + t_float ringPushFront(t_float f); + /** * @brief get reference to sample with at position * @param n - sample position @@ -223,7 +226,7 @@ class Array { * @param l - list of values * @return true on success, false on error */ - bool set(const AtomList& l); + bool set(const AtomListView& lv); /** * @brief set array content with initializer list diff --git a/ceammc/ext/src/lib/ceammc_atom.cpp b/ceammc/ext/src/lib/ceammc_atom.cpp index 8464424011..cd2123ecd8 100644 --- a/ceammc/ext/src/lib/ceammc_atom.cpp +++ b/ceammc/ext/src/lib/ceammc_atom.cpp @@ -17,6 +17,7 @@ #include "ceammc_numeric.h" #include "ceammc_string.h" #include "fmt/format.h" +#include "lex/parser_strings.h" #include #include @@ -278,24 +279,25 @@ Atom Atom::parseQuoted() const if (a_w.w_symbol->s_name[0] == '"' && a_w.w_symbol->s_name[1] == '@') return *this; - std::string m; - if (string::pd_string_parse(a_w.w_symbol->s_name, m)) - return gensym(m.c_str()); - else + string::SmallString buf; + if (string::unquote_and_unescape(a_w.w_symbol->s_name, buf)) { + buf.push_back('\0'); + return gensym(buf.data()); + } else return *this; } bool Atom::isQuoted() const { - if (a_type != A_SYMBOL) + if (a_type != A_SYMBOL && a_type != A_DOLLSYM) return false; else - return string::is_pd_string(a_w.w_symbol->s_name); + return string::is_quoted_string(a_w.w_symbol->s_name); } bool Atom::beginQuote() const { - if (a_type != A_SYMBOL) + if (a_type != A_SYMBOL && a_type != A_DOLLSYM) return false; return a_w.w_symbol->s_name[0] == '"'; @@ -303,10 +305,10 @@ bool Atom::beginQuote() const bool Atom::endQuote() const { - if (a_type != A_SYMBOL) + if (a_type != A_SYMBOL && a_type != A_DOLLSYM) return false; - return string::pd_string_end_quote(a_w.w_symbol->s_name); + return string::quoted_string_end(a_w.w_symbol->s_name); } bool Atom::is_data(const t_atom& a) noexcept @@ -723,8 +725,8 @@ std::ostream& operator<<(std::ostream& os, const Atom& a) auto name = DataStorage::instance().nameByType(dptr->type()); os << fmt::format( - "{}(type={},id=0x{}) {}", - (name.empty()) ? "Data???" : name, + "{}(type={:d},id={}) {}", + (name.empty()) ? "Data???" : name.c_str(), a.dataType(), (void*)dptr, dptr->toString()); } else { diff --git a/ceammc/ext/src/lib/ceammc_atom.h b/ceammc/ext/src/lib/ceammc_atom.h index 7b785c9f5a..3e449c0af9 100644 --- a/ceammc/ext/src/lib/ceammc_atom.h +++ b/ceammc/ext/src/lib/ceammc_atom.h @@ -150,6 +150,16 @@ class Atom : t_atom { */ bool isSemicolon() const noexcept { return a_type == A_SEMI; } + /** + * @returns true if atom has PureData type A_DOLLAR + */ + bool isDollar() const noexcept { return a_type == A_DOLLAR; } + + /** + * @returns true if atom has PureData type A_DOLLSYM + */ + bool isDollarSym() const noexcept { return a_type == A_DOLLSYM; } + /** * @returns true if atom has PureData type A_POINTER */ diff --git a/ceammc/ext/src/lib/ceammc_atomlist.cpp b/ceammc/ext/src/lib/ceammc_atomlist.cpp index bdd48f10dd..5f0921799b 100644 --- a/ceammc/ext/src/lib/ceammc_atomlist.cpp +++ b/ceammc/ext/src/lib/ceammc_atomlist.cpp @@ -25,9 +25,6 @@ #include #include -#include "lex/quoted_atomlist_lexer.h" -#include "lex/quoted_string.parser.hpp" - namespace ceammc { using ElementAccessFn = const Atom* (AtomList::*)(int)const; @@ -339,60 +336,6 @@ bool AtomList::hasProperty(t_symbol* name) const noexcept return false; } -AtomList AtomList::mapFloat(const FloatMapFunction& fn, AtomListMapType t) const -{ - if (t == AtomListMapType::KEEP) { - AtomList res(*this); - - for (auto& a : res.atoms_) - a.applyFloat(fn); - - return res; - } else { - AtomList res; - res.reserve(size()); - - for (auto& a : atoms_) { - if (a.isFloat()) - res.atoms_.emplace_back(fn(a.asFloat())); - } - - return res; - } -} - -AtomList AtomList::mapSymbol(const SymbolMapFunction& fn, AtomListMapType t) const -{ - if (t == AtomListMapType::KEEP) { - AtomList res(*this); - - for (auto& a : res.atoms_) - a.applySymbol(fn); - - return res; - } else { - AtomList res; - res.reserve(size()); - - for (auto& a : atoms_) { - if (a.isSymbol()) - res.atoms_.emplace_back(fn(a.asSymbol())); - } - - return res; - } -} - -AtomList AtomList::map(const AtomMapFunction& fn) const -{ - AtomList res(*this); - - for (auto& a : res.atoms_) - a = fn(a); - - return res; -} - static size_t normalizeIdx(int idx, size_t N, bool clip) { assert(N > 0); @@ -577,16 +520,6 @@ Atom* AtomList::max() return &(*std::max_element(atoms_.begin(), atoms_.end())); } -MaybeFloat AtomList::sum() const noexcept -{ - return reduceFloat(0, [](t_float a, t_float b) { return a + b; }); -} - -MaybeFloat AtomList::product() const noexcept -{ - return reduceFloat(1, [](t_float a, t_float b) { return a * b; }); -} - bool AtomList::contains(const Atom& a) const noexcept { return std::find(atoms_.begin(), atoms_.end(), a) != atoms_.end(); @@ -888,11 +821,6 @@ bool AtomList::operator==(const AtomListView& x) const noexcept return true; } -AtomList AtomList::parseQuoted(bool quote_properties) const -{ - return view().parseQuoted(quote_properties); -} - AtomList AtomList::parseString(const char* str) { t_binbuf* b = binbuf_new(); @@ -949,90 +877,4 @@ AtomList listFrom(bool v) return Atom(v ? TRUE : FALSE); } -AtomList operator+(const AtomList& l1, const AtomList& l2) -{ - AtomList res(l1); - res.append(l2); - return res; -} - -AtomList operator+(const AtomList& l, const Atom& a) -{ - AtomList res(l); - res.append(a); - return res; -} - -AtomList operator+(const Atom& a, const AtomList& l) -{ - AtomList res; - res.reserve(l.size() + 1); - res.append(a); - res.append(l); - return res; -} - -AtomList AtomList::filtered(const AtomPredicate& pred) const -{ - if (!pred) - return *this; - - AtomList res; - res.atoms_.reserve(atoms_.size()); - - for (auto& el : atoms_) { - if (pred(el)) - res.atoms_.push_back(el); - } - - return res; -} - -AtomList AtomList::filteredFloat(const FloatPredicate& pred) const -{ - if (!pred) - return *this; - - AtomList res; - res.atoms_.reserve(atoms_.size()); - - for (auto& a : atoms_) { - if (a.isFloat() && pred(a.asFloat())) - res.atoms_.push_back(a); - } - - return res; -} - -AtomList AtomList::filteredSymbol(const SymbolPredicate& pred) const -{ - if (!pred) - return *this; - - AtomList res; - res.atoms_.reserve(atoms_.size()); - - for (auto& a : atoms_) { - if (a.isSymbol() && pred(a.asSymbol())) - res.atoms_.push_back(a); - } - - return res; -} - -MaybeFloat AtomList::reduceFloat(t_float init, std::function fn) const -{ - t_float accum = init; - size_t n = 0; - - for (auto& el : atoms_) { - if (el.isFloat()) { - accum = fn(accum, el.asFloat()); - n++; - } - } - - return (n > 0) ? MaybeFloat(accum) : boost::none; -} - } // namespace ceammc diff --git a/ceammc/ext/src/lib/ceammc_atomlist.h b/ceammc/ext/src/lib/ceammc_atomlist.h index f55784a463..aff95bf8ee 100644 --- a/ceammc/ext/src/lib/ceammc_atomlist.h +++ b/ceammc/ext/src/lib/ceammc_atomlist.h @@ -18,7 +18,6 @@ #include "ceammc_atomlist_view.h" #include -#include #include #include #include @@ -28,16 +27,9 @@ namespace ceammc { -typedef boost::optional MaybeFloat; - typedef std::vector FloatList; typedef Atom (*AtomGenerator)(); -enum class AtomListMapType { - FILTER, - KEEP -}; - class AtomList { public: using Container = std::vector; @@ -101,6 +93,7 @@ class AtomList { const_reverse_iterator rend() const { return atoms_.rend(); } const_reverse_iterator crbegin() { return atoms_.crbegin(); } const_reverse_iterator crend() const { return atoms_.crend(); } + void push_back(const Atom& a) { atoms_.push_back(a); } atom_filter_iterator begin_atom_filter(AtomPredicate pred) { return atom_filter_iterator(pred, begin(), end()); } atom_filter_iterator end_atom_filter() { return atom_filter_iterator(nullptr, end(), end()); } @@ -237,57 +230,6 @@ class AtomList { bool hasProperty(t_symbol* name) const noexcept; bool hasProperty(const char* name) const noexcept { return hasProperty(gensym(name)); } - /** - * New list with mapped atom values - * @param fn - atom map function - * @return new list - */ - AtomList map(const AtomMapFunction& fn) const; - - /** - * New list with mapped float values - * @param fn - function - * @param t - AtomListMapType::KEEP - non-float values are left untouched, - * if AtomListMapType::FILTER - non-float values are removed - * @return new list - */ - AtomList mapFloat(const FloatMapFunction& fn, AtomListMapType t = AtomListMapType::KEEP) const; - - /** - * New list with mapped symbol values - * @param fn - function - * @param t - AtomListMapType::KEEP - non-symbol values are left untouched, - * if AtomListMapType::FILTER - non-symbol values are removed - * @return new list - */ - AtomList mapSymbol(const SymbolMapFunction& fn, AtomListMapType t = AtomListMapType::KEEP) const; - - /** - * Returns new list with values for which atom predicate returns true - */ - AtomList filtered(const AtomPredicate& fn) const; - - /** - * Returns new list with values for which float predicate returns true - */ - AtomList filteredFloat(const FloatPredicate& pred) const; - - /** - * Returns new list with values for which symbol predicate returns true - */ - AtomList filteredSymbol(const SymbolPredicate& pred) const; - - /** - * Reduce to t_float - * @param init - init value - * @param fn - reduce function - * @return - result, or boost::none if no floats in list - */ - MaybeFloat reduceFloat(t_float init, std::function fn) const; - - template - T reduce(T init, std::function fn) const; - /** * Returns sublist from specified position * @param start - start position (may be relative) @@ -418,12 +360,12 @@ class AtomList { /** * Returns sum of floats in list or boost::none if empty */ - MaybeFloat sum() const noexcept; + MaybeFloat sum() const noexcept { return view().sum(); } /** * Returns product of floats in list or boost::none if empty */ - MaybeFloat product() const noexcept; + MaybeFloat product() const noexcept { return view().product(); } /** * Checks if atom is in list @@ -459,17 +401,17 @@ class AtomList { /** * Returns number of elements for that predicate pred returns true */ - size_t count(AtomPredicate pred) const noexcept; + CEAMMC_NO_ASAN size_t count(AtomPredicate pred) const noexcept; /** * Checks if predicate pred returns true for all list elements */ - bool allOf(AtomPredicate pred) const noexcept; + CEAMMC_NO_ASAN bool allOf(AtomPredicate pred) const noexcept; /** * Checks if predicate pred returns true at least for one list element */ - bool anyOf(AtomPredicate pred) const noexcept; + CEAMMC_NO_ASAN bool anyOf(AtomPredicate pred) const noexcept; /** * Checks if predicate pred returns false for all list elements @@ -592,15 +534,6 @@ class AtomList { bool operator==(const AtomListView& x) const noexcept; bool operator!=(const AtomListView& x) const noexcept { return !operator==(x); } - /** - * Parse raw atomlist with double-quoted elements and returns values without quotes - * @example in ["a, b", 1, 2] list elements "a and b" - * joined to single atom -> 'a b' (without quotes and with space between) - * This syntax allows easily define symbols with spaces - * @return unmodified list, if it is not quoted - */ - AtomList parseQuoted(bool quote_properties = false) const; - /** * Construct AtomList from string, as do Pd * @example string 'a b 1 2 3' -> list [a b 1 2 3], where a and b symbols, 1-3 floats @@ -630,21 +563,6 @@ inline AtomList AtomList::asT() const return *this; } -AtomList operator+(const AtomList& l1, const AtomList& l2); -AtomList operator+(const AtomList& l, const Atom& a); -AtomList operator+(const Atom& a, const AtomList& l); - -template -T AtomList::reduce(T init, std::function fn) const -{ - T accum(init); - - for (auto& el : atoms_) - accum = fn(accum, el); - - return accum; -} - std::ostream& operator<<(std::ostream& os, const AtomList& l); template diff --git a/ceammc/ext/src/lib/ceammc_atomlist_view.cpp b/ceammc/ext/src/lib/ceammc_atomlist_view.cpp index 36afd7641b..a8bd6eac54 100644 --- a/ceammc/ext/src/lib/ceammc_atomlist_view.cpp +++ b/ceammc/ext/src/lib/ceammc_atomlist_view.cpp @@ -14,12 +14,8 @@ #include "ceammc_atomlist_view.h" #include "ceammc_atomlist.h" #include "ceammc_convert.h" -#include "ceammc_log.h" #include "ceammc_numeric.h" -#include "lex/quoted_atomlist_lexer.h" -#include "lex/quoted_string.parser.hpp" - #include #include @@ -32,13 +28,13 @@ AtomListView::AtomListView() noexcept } AtomListView::AtomListView(const t_atom* a, size_t n) noexcept - : data_(reinterpret_cast(a)) + : data_(n ? reinterpret_cast(a) : nullptr) , n_(n) { } AtomListView::AtomListView(const Atom* a, size_t n) noexcept - : data_(a) + : data_(n ? a : nullptr) , n_(n) { } @@ -123,11 +119,8 @@ bool AtomListView::operator==(const AtomListView& v) const bool AtomListView::isBool() const { - static t_symbol* SYM_TRUE = gensym("true"); - static t_symbol* SYM_FALSE = gensym("false"); - return (isFloat() && (asFloat() == 1 || asFloat() == 0)) - || ((isSymbol() && (asSymbol() == SYM_TRUE || asSymbol() == SYM_FALSE))); + || ((isSymbol() && (asSymbol() == gensym("true") || asSymbol() == gensym("false")))); } bool AtomListView::isInteger() const @@ -270,35 +263,90 @@ bool AtomListView::contains(const Atom& a) const return std::find(data_, data_ + n_, a) != (data_ + n_); } -AtomList AtomListView::parseQuoted(bool quoted_props) const +bool AtomListView::allOf(std::function pred) const { - if (empty()) - return {}; + return std::all_of(begin(), end(), pred); +} + +bool AtomListView::anyOf(std::function pred) const +{ + return std::any_of(begin(), end(), pred); +} - QuotedAtomListLexer lex(*this, quoted_props); - QuotedAtomListParser parser(lex); +bool AtomListView::noneOf(std::function pred) const +{ + return std::none_of(begin(), end(), pred); +} - if (parser.parse() != 0) { - LIB_ERR << "parse error"; - return AtomList(*this); +MaybeFloat AtomListView::sum() const noexcept +{ + return reduceFloat(0, [](t_float a, t_float b) { return a + b; }); +} + +MaybeFloat AtomListView::product() const noexcept +{ + return reduceFloat(1, [](t_float a, t_float b) { return a * b; }); +} + +MaybeFloat AtomListView::reduceFloat(t_float init, std::function fn) const +{ + t_float accum = init; + size_t n = 0; + + for (size_t i = 0; i < n_; i++) { + auto& el = data_[i]; + if (el.isFloat()) { + accum = fn(accum, el.asFloat()); + n++; + } } - return lex.result(); + return (n > 0) ? MaybeFloat(accum) : boost::none; } -bool AtomListView::allOf(std::function pred) const +const Atom* AtomListView::relativeAt(int pos) const { - return std::all_of(begin(), end(), pred); + auto idx = relativeIndex(pos, n_); + if (idx < 0) + return nullptr; + + return data_ + static_cast(idx); } -bool AtomListView::anyOf(std::function pred) const +const Atom* AtomListView::clipAt(int pos) const { - return std::any_of(begin(), end(), pred); + if (n_ == 0) + return nullptr; + + auto idx = static_cast(clip(pos, 0, long(n_ - 1))); + return data_ + idx; } -bool AtomListView::noneOf(std::function pred) const +const Atom* AtomListView::wrapAt(int pos) const { - return std::none_of(begin(), end(), pred); + if (n_ == 0) + return nullptr; + + return data_ + wrapInteger(pos, n_); +} + +const Atom* AtomListView::foldAt(int pos) const +{ + if (n_ == 0) + return nullptr; + + return data_ + foldInteger(pos, n_); +} + +bool AtomListView::range(Atom& min, Atom& max) const noexcept +{ + if (!n_ || !data_) + return false; + + auto res = std::minmax_element(begin(), end()); + min = *res.first; + max = *res.second; + return true; } std::ostream& operator<<(std::ostream& os, const AtomListView& l) diff --git a/ceammc/ext/src/lib/ceammc_atomlist_view.h b/ceammc/ext/src/lib/ceammc_atomlist_view.h index c6cf7122e9..fed93527ca 100644 --- a/ceammc/ext/src/lib/ceammc_atomlist_view.h +++ b/ceammc/ext/src/lib/ceammc_atomlist_view.h @@ -18,15 +18,30 @@ #include #include +#include + +#include +#include namespace ceammc { +using MaybeFloat = boost::optional; + class AtomList; +enum class AtomListMapType { + FILTER, + KEEP +}; + class AtomListView { const Atom* data_; size_t n_; +public: + using iterator = const Atom*; + using const_iterator = const Atom*; + public: AtomListView() noexcept; AtomListView(const t_atom* a, size_t n) noexcept; @@ -52,7 +67,7 @@ class AtomListView { bool operator!=(int v) const { return !operator==(v); } bool operator==(t_symbol* s) const { return isSymbol() && asSymbol() == s; } bool operator!=(t_symbol* s) const { return !operator==(s); } - bool operator==(const Atom& a) const { return isAtom() && asAtom() == a; } + bool operator==(const Atom& a) const { return isAtom() && front() == a; } bool operator!=(const Atom& a) const { return !operator==(a); } // containter checks @@ -71,6 +86,39 @@ class AtomListView { template bool isA() const { return n_ == 1 && data_ && data_->isA(); } + /// value access + /** + * @brief returns pointer to element at specified relative position + * @param pos - positive value means position from the begining, negative position - from end. + * @example pos == -1 means last element (if exists) + * @return pointer to element, or NULL if no element at given position + */ + const Atom* relativeAt(int pos) const; + + /** + * Same as at(), but values for index greater than the size of the + * List will be clipped to the last index. + * @param pos - position index + * @return pointer to element, or NULL if empty + */ + const Atom* clipAt(int pos) const; + + /** + * Same as at(), but values for index greater than the size of the + * List will be wrapped around to 0. + * @param pos - position index + * @return pointer to element, or NULL if empty + */ + const Atom* wrapAt(int pos) const; + + /** + * Same as at(), but values for index greater than the size of the + * List will be folded back. + * @param pos - position index + * @return pointer to element, or NULL if empty + */ + const Atom* foldAt(int pos) const; + /** * Convert atomlist to parametrised type * @throw std::logic_error on error @@ -112,8 +160,8 @@ class AtomListView { } // iterators - const Atom* begin() const { return data_; } - const Atom* end() const { return &data_[n_]; } + const_iterator begin() const { return data_; } + const_iterator end() const { return data_ + n_; } // no range checks!!! /** returns first atom in view, no range check */ @@ -126,12 +174,10 @@ class AtomListView { const Atom& operator[](size_t pos) const { return data_[pos]; } const Atom& relativeAt(long pos) const; - // no type checks!!! - inline bool asBool() const { return front().asBool(); } - inline t_symbol* asSymbol() const { return atom().a_w.w_symbol; } - inline t_float asFloat() const { return atom().a_w.w_float; } - inline int asInt() const { return static_cast(atom().a_w.w_float); } - inline const Atom& asAtom() const { return front(); } + inline bool asBool(bool def = false) const { return empty() ? def : front().asBool(def); } + inline t_symbol* asSymbol(t_symbol* def = &s_) const { return empty() ? def : front().asSymbol(def); } + inline t_float asFloat(t_float def = 0) const { return empty() ? def : front().asFloat(def); } + inline t_int asInt(t_int def = 0) const { return empty() ? def : static_cast(front().asFloat(def)); } // with range checks /** @@ -273,13 +319,6 @@ class AtomListView { */ bool contains(const Atom& a) const; - /** - * Returns list with unquoted atoms - * @param quoted_props - if true leaves quoted properties quoted if false - unquoed all atoms - * @return unquoted list - */ - AtomList parseQuoted(bool quoted_props = false) const; - /** * Check if all atoms satisfies to predicate * @param pred - predicate function @@ -306,6 +345,132 @@ class AtomListView { /** pointer to pd raw t_atoms */ t_atom* toPdData() const { return reinterpret_cast(const_cast(data_)); } + /** + * Returns sum of floats in list or boost::none if empty + */ + MaybeFloat sum() const noexcept; + + /** + * Returns product of floats in list or boost::none if empty + */ + MaybeFloat product() const noexcept; + + /** + * Reduce to t_float + * @param init - init value + * @param fn - reduce function + * @return - result, or boost::none if no floats in list + */ + MaybeFloat reduceFloat(t_float init, std::function fn) const; + + /** + * Get min and max elements from list + * @param min - min destination + * @param max - max destination + * @return false if empty + */ + bool range(Atom& min, Atom& max) const noexcept; + + /** + * Map atom values + * @param fn - atom map function + * @param out - map output + */ + template + void map(const AtomMapFunction& fn, T& out) const + { + if (!fn) + return; + + out.reserve(n_); + + for (auto& a : *this) + out.push_back(fn(a)); + } + + /** + * Map float values + * @param fn - function + * @param out - map output + * @param t - AtomListMapType::KEEP - non-float values are left untouched, + * if AtomListMapType::FILTER - non-float values are removed + */ + template + void mapFloat(const FloatMapFunction& fn, T& out, AtomListMapType t = AtomListMapType::KEEP) const + { + if (!fn) + return; + + out.reserve(n_); + for (auto& a : *this) { + if (a.isFloat()) + out.push_back(fn(a.asT())); + else if (t == AtomListMapType::KEEP) + out.push_back(a); + } + } + + /** + * Map symbol values + * @param fn - function + * @param out - map output + * @param t - AtomListMapType::KEEP - non-symbol values are left untouched, + * if AtomListMapType::FILTER - non-symbol values are removed + */ + template + void mapSymbol(const SymbolMapFunction& fn, T& out, AtomListMapType t = AtomListMapType::KEEP) const + { + if (!fn) + return; + + out.reserve(n_); + for (auto& a : *this) { + if (a.isSymbol()) + out.push_back(fn(a.asT())); + else if (t == AtomListMapType::KEEP) + out.push_back(a); + } + } + + /** + * Select values for which atom predicate returns true + */ + template + void filter(const AtomPredicate& fn, T& out) const + { + out.reserve(n_); + for (auto& a : *this) { + if (!fn || fn(a)) + out.push_back(a); + } + } + + /** + * Select values for which float predicate returns true + */ + template + void filterFloat(const FloatPredicate& fn, T& out) const + { + out.reserve(n_); + for (auto& a : *this) { + if (!fn || (a.isFloat() && fn(a.asT()))) + out.push_back(a); + } + } + + /** + * Select values for which symbol predicate returns true + */ + template + void filterSymbol(const SymbolPredicate& fn, T& out) const + { + out.reserve(n_); + for (auto& a : *this) { + if (!fn || (a.isSymbol() && fn(a.asT()))) + out.push_back(a); + } + } + private: inline const t_atom& atom() const { return data_->atom(); } }; diff --git a/ceammc/ext/src/lib/ceammc_base64.cpp b/ceammc/ext/src/lib/ceammc_base64.cpp new file mode 100644 index 0000000000..34c6eb7410 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_base64.cpp @@ -0,0 +1,36 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_base64.h" + +#include +#include +#include +#include + +#include + +namespace ceammc { + +std::string base64_encode(const char* str) +{ + const auto N = strlen(str); + + using namespace boost::archive::iterators; + using It = base64_from_binary>; + + auto tmp = std::string(It(str), It(str + N)); + return tmp.append((3 - N % 3) % 3, '='); +} + +} diff --git a/ceammc/ext/src/lib/ceammc_base64.h b/ceammc/ext/src/lib/ceammc_base64.h new file mode 100644 index 0000000000..24b26d660f --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_base64.h @@ -0,0 +1,25 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_BASE64_H +#define CEAMMC_BASE64_H + +#include + +namespace ceammc { + +std::string base64_encode(const char* str); + +} + +#endif // CEAMMC_BASE64_H diff --git a/ceammc/ext/src/lib/ceammc_canvas.cpp b/ceammc/ext/src/lib/ceammc_canvas.cpp index a74c91db50..c44b6b45e6 100644 --- a/ceammc/ext/src/lib/ceammc_canvas.cpp +++ b/ceammc/ext/src/lib/ceammc_canvas.cpp @@ -86,7 +86,7 @@ static bool is_pd048() { int major, minor, bugfix; sys_getversion(&major, &minor, &bugfix); - static_assert(PD_MINOR_VERSION <= 51, "update for minor version"); + static_assert(PD_MINOR_VERSION <= 53, "update for minor version"); if (major == PD_MAJOR_VERSION && minor == PD_MINOR_VERSION) return false; @@ -427,35 +427,38 @@ const _glist* ceammc::canvas_root(const _glist* c) namespace ceammc { -std::unique_ptr canvas_info_tree(const t_canvas* c) +std::unique_ptr canvas_info_tree(const t_canvas* c, CanvasClassPredicate pred) { std::unique_ptr tree; if (!c || !c->gl_list) return tree; - auto x = c->gl_list; - for (; x != nullptr; x = x->g_next) { - auto pdobj = x->g_pd; - if (!pd_checkobject(&pdobj)) + for (auto x = c->gl_list; x != nullptr; x = x->g_next) { + auto cls = &x->g_pd; + auto pdobj = pd_checkobject(cls); + // skip not-patchable objects + if (!pdobj) continue; if (!tree) tree.reset(new pd::CanvasTree(canvas_info_name(c), canvas_info_dir(c))); - if (pd_class(&pdobj) == canvas_class) { + // subpatch or abstraction + if (pd_class(cls) == canvas_class) { t_canvas* obj_cnv = reinterpret_cast(x); tree->objects.emplace_back(canvas_info_name(obj_cnv), canvas_info_dir(obj_cnv), canvas_isabstraction(obj_cnv) ? pd::CanvasTree::ABSTRACTION : pd::CanvasTree::SUBPATCH); - tree->objects.back().obj_tree = canvas_info_tree(obj_cnv); + tree->objects.back().obj_tree = canvas_info_tree(obj_cnv, pred); continue; - } + } else if (pred && !pred(c, pdobj)) + continue; - auto name = pdobj->c_name; - auto dir = pdobj->c_externdir; + auto name = (*cls)->c_name; + auto dir = (*cls)->c_externdir; if (dir == &s_) dir = gensym("_core"); @@ -465,6 +468,35 @@ std::unique_ptr canvas_info_tree(const t_canvas* c) return tree; } +std::vector canvas_find(const _glist* c, CanvasClassPredicate pred) +{ + std::vector res; + + if (!c || !c->gl_list) + return res; + + for (auto x = c->gl_list; x != nullptr; x = x->g_next) { + auto pdobj = pd_checkobject(&x->g_pd); + // skip non-patchable objects + if (!pdobj) + continue; + + // subpatch or abstraction + if (pd_class(&pdobj->te_g.g_pd) == canvas_class) { + t_canvas* obj_cnv = reinterpret_cast(x); + + auto cnv_objects = canvas_find(obj_cnv, pred); + res.reserve(res.size() + cnv_objects.size()); + for (auto x : cnv_objects) + res.push_back(x); + continue; + } else if (pred(c, pdobj)) + res.push_back(pdobj); + } + + return res; +} + pd::CanvasTree::Object::Object(t_symbol* name, t_symbol* dir, pd::CanvasTree::Type t) : obj_name(name) , obj_dir(dir) @@ -504,4 +536,9 @@ pd::CanvasTree& pd::CanvasTree::operator=(pd::CanvasTree&& t) std::swap(*this, t); return *this; } + +bool canvas_info_is_dirty(const _glist* c) +{ + return c == nullptr ? false : c->gl_dirty; +} } diff --git a/ceammc/ext/src/lib/ceammc_canvas.h b/ceammc/ext/src/lib/ceammc_canvas.h index c8f61e6930..faa9ac6fce 100644 --- a/ceammc/ext/src/lib/ceammc_canvas.h +++ b/ceammc/ext/src/lib/ceammc_canvas.h @@ -82,6 +82,12 @@ const _glist* canvas_root(const _glist* c); */ bool canvas_info_is_abstraction(const _glist* c); +/** + * Checks is canvas is modified + * @param c - pointer to root canvas + */ +bool canvas_info_is_dirty(const _glist* c); + AtomList canvas_info_paths(const _glist* c); AtomList canvas_info_args(const _glist* c); @@ -123,12 +129,20 @@ struct t_rect { */ t_rect canvas_info_rect(const _glist* c); +using CanvasClassPredicate = std::function; /** * Returns canvas object tree * @param c - pointer to canvas * @return tree */ -std::unique_ptr canvas_info_tree(const _glist* c); +std::unique_ptr canvas_info_tree(const _glist* c, CanvasClassPredicate pred = {}); + +/** + * Returns canvas object satisfied to predicate + * @param c - pointer to canvas + * @return vector of pointers + */ +std::vector canvas_find(const _glist* c, CanvasClassPredicate pred); class BaseObject; typedef std::shared_ptr ArrayPtr; diff --git a/ceammc/ext/src/lib/ceammc_cicm.cpp b/ceammc/ext/src/lib/ceammc_cicm.cpp index e0a50a84ad..e7c4367b24 100644 --- a/ceammc/ext/src/lib/ceammc_cicm.cpp +++ b/ceammc/ext/src/lib/ceammc_cicm.cpp @@ -32,23 +32,13 @@ static t_symbol* toSymbol(FontWeight w) } UIFont::UIFont(t_symbol* family, int size, FontDecoration decoration, FontWeight w) - : font_(0) - , family_(family) - , size_(size) - , dec_(decoration) - , w_(w) + : font_(efont_create(family, toSymbol(decoration), toSymbol(w), size)) { - font_ = efont_create(family_, toSymbol(dec_), toSymbol(w_), size_); } UIFont::UIFont(const UIFont& font) - : font_(0) - , family_(font.family_) - , size_(font.size_) - , dec_(font.dec_) - , w_(font.w_) + : font_(efont_create(font.font_->c_family, font.font_->c_slant, font.font_->c_weight, font.font_->c_sizereal)) { - font_ = efont_create(family_, toSymbol(dec_), toSymbol(w_), size_); } void UIFont::operator=(const UIFont& font) @@ -58,11 +48,7 @@ void UIFont::operator=(const UIFont& font) return; efont_destroy(font_); - family_ = font.family_; - size_ = font.size_; - dec_ = font.dec_; - w_ = font.w_; - font_ = efont_create(family_, toSymbol(dec_), toSymbol(w_), size_); + font_ = efont_create(font.font_->c_family, font.font_->c_slant, font.font_->c_weight, font.font_->c_sizereal); } UIFont::~UIFont() noexcept diff --git a/ceammc/ext/src/lib/ceammc_cicm.h b/ceammc/ext/src/lib/ceammc_cicm.h index 71148630ce..54ab678892 100644 --- a/ceammc/ext/src/lib/ceammc_cicm.h +++ b/ceammc/ext/src/lib/ceammc_cicm.h @@ -44,10 +44,6 @@ enum FontWeight { class UIFont { t_efont* font_; - t_symbol* family_; - int size_; - FontDecoration dec_; - FontWeight w_; public: UIFont(t_symbol* family, int size, @@ -60,6 +56,13 @@ class UIFont { void operator=(const UIFont& font); t_efont* font(); + + int size() const { return font_->c_sizereal; } + void setSize(int sz) + { + font_->c_sizereal = sz; + font_->c_size = sz; + } }; class UITextLayout { diff --git a/ceammc/ext/src/lib/ceammc_containers.h b/ceammc/ext/src/lib/ceammc_containers.h index 7bd455260f..60d32c8feb 100644 --- a/ceammc/ext/src/lib/ceammc_containers.h +++ b/ceammc/ext/src/lib/ceammc_containers.h @@ -15,8 +15,12 @@ #define CEAMMC_CONTAINERS_H #include -#include #include +#include + +#include +#include +#include #include "ceammc_atom.h" #include "ceammc_atomlist_view.h" @@ -25,7 +29,74 @@ namespace ceammc { template -using SmallAtomListN = boost::container::small_vector; +class SmallAtomListN : public boost::container::small_vector { +public: + SmallAtomListN() { } + + SmallAtomListN(std::initializer_list atoms) + : boost::container::small_vector(atoms.begin(), atoms.end()) + { + } + + template + explicit SmallAtomListN(Args... args) + : boost::container::small_vector({ atomFrom(args)... }) + { + } + + AtomListView view() const + { + if (this->empty()) + return {}; + else + return { this->data(), this->size() }; + } + + template + void insert_back(It begin, It end) + { + this->insert(this->end(), begin, end); + } + + template + void insert_back(const Cont& c) + { + this->insert(this->end(), std::begin(c), std::end(c)); + } +}; + +using SmallAtomList = SmallAtomListN<8>; +using AtomList16 = SmallAtomListN<16>; +using AtomList32 = SmallAtomListN<32>; +using AtomList64 = SmallAtomListN<64>; +using AtomList128 = SmallAtomListN<128>; +using AtomList256 = SmallAtomListN<256>; +using AtomList512 = SmallAtomListN<512>; + +template +class StaticAtomList : public boost::container::static_vector { +public: + StaticAtomList() { } + + StaticAtomList(std::initializer_list atoms) + : boost::container::static_vector(atoms.begin(), atoms.end()) + { + } + + template + explicit StaticAtomList(Args... args) + : boost::container::static_vector({ atomFrom(args)... }) + { + } + + AtomListView view() const + { + if (this->empty()) + return {}; + else + return { this->data(), this->size() }; + } +}; template class SmallMessageN { @@ -132,21 +203,47 @@ class SmallMessageN { }; template -class SingletonMeyers { +class SingletonMeyers : public T { public: - static T& instance() + static SingletonMeyers& instance() { - static T instance_; + static SingletonMeyers instance_; return instance_; } SingletonMeyers(const SingletonMeyers&) = delete; + SingletonMeyers(SingletonMeyers&&) = delete; SingletonMeyers& operator=(const SingletonMeyers&) = delete; + SingletonMeyers& operator=(SingletonMeyers&&) = delete; protected: SingletonMeyers() { } }; +template +inline boost::filter_iterator atom_filter_it_begin(const Cont& c, AtomPredicate pred) +{ + return boost::filter_iterator(pred, std::begin(c), std::end(c)); +} + +template +inline boost::filter_iterator atom_filter_it_end(const Cont& c) +{ + return boost::filter_iterator(nullptr, std::end(c), std::end(c)); +} + +template +inline boost::filter_iterator atom_filter_it_begin(Cont& c, AtomPredicate pred) +{ + return boost::filter_iterator(pred, std::begin(c), std::end(c)); +} + +template +inline boost::filter_iterator atom_filter_it_end(Cont& c) +{ + return boost::filter_iterator(nullptr, std::end(c), std::end(c)); +} + } #endif // CEAMMC_CONTAINERS_H diff --git a/ceammc/ext/src/lib/ceammc_convert.h b/ceammc/ext/src/lib/ceammc_convert.h index 53385c7177..61615ea1a4 100644 --- a/ceammc/ext/src/lib/ceammc_convert.h +++ b/ceammc/ext/src/lib/ceammc_convert.h @@ -20,6 +20,7 @@ #include #include +#include // std::ldiv #include #include diff --git a/ceammc/ext/src/lib/ceammc_crc32.h b/ceammc/ext/src/lib/ceammc_crc32.h index e5b3f72963..8b64fbcb1d 100644 --- a/ceammc/ext/src/lib/ceammc_crc32.h +++ b/ceammc/ext/src/lib/ceammc_crc32.h @@ -1,6 +1,8 @@ #ifndef CEAMMC_CRC32_H_ #define CEAMMC_CRC32_H_ +#include "m_pd.h" + // based on https://github.com/vladium/static_hash // @licence: MIT @@ -92,6 +94,16 @@ constexpr uint32_t crc32_constexpr(char const* const str, int32_t const len, uin constexpr uint32_t crc32_hash_seed() { return -1; } +constexpr uint32_t crc32_constexpr_strlen(const char* str) +{ + return *str ? 1 + crc32_constexpr_strlen(str + 1) : 0; +} + +constexpr uint32_t crc32_constexpr(char const* const str) +{ + return crc32_constexpr(str, crc32_constexpr_strlen(str), crc32_hash_seed()); +} + /** * a user-defined string literal for static string hashing, to be used together * with @ref str_hash() along the lines of: @@ -127,31 +139,47 @@ inline uint32_t crc32_hash(const char* str) return crc; } -inline uint32_t crc32_hash(const std::string& str) -{ - return crc32_hash(str.data()); -} +inline uint32_t crc32_hash(const std::string& str) { return crc32_hash(str.data()); } + +inline uint32_t crc32_hash(t_symbol* s) { return crc32_hash(s->s_name); } + +constexpr bool crc32_check_unique(uint32_t a, uint32_t b) { return a != b; } -constexpr bool check_crc32_unique(uint32_t a, uint32_t b) +constexpr bool crc32_check_unique(uint32_t a, uint32_t b, uint32_t c) { - return a != b; + return crc32_check_unique(a, b) && a != c && b != c; } -constexpr bool check_crc32_unique(uint32_t a, uint32_t b, uint32_t c) +constexpr bool crc32_check_unique(uint32_t a, uint32_t b, uint32_t c, uint32_t d) { - return check_crc32_unique(a, b) && a != c && b != c; + return crc32_check_unique(a, b, c) && a != d && b != d && c != d; } -constexpr bool check_crc32_unique(uint32_t a, uint32_t b, uint32_t c, uint32_t d) +constexpr bool crc32_check_unique(uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e) { - return check_crc32_unique(a, b, c) && a != d && b != d && c != d; + return crc32_check_unique(a, b, c, d) && a != e && b != e && c != e && d != e; } -constexpr bool check_crc32_unique(uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e) +constexpr bool crc32_check_unique(uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e, uint32_t f) { - return check_crc32_unique(a, b, c, d) && a != e && b != e && c != e && d != e; + return crc32_check_unique(a, b, c, d, e) && a != f && b != f && c != f && d != f && e != f; } +#define crc32_assert_unique(...) static_assert(crc32_check_unique(__VA_ARGS__), "hash values are not unique"); + +#define CEAMMC_DEFINE_STR(name) constexpr const char* str_##name = #name; +#define CEAMMC_DEFINE_CRC32(name) constexpr const auto hash_##name = #name##_hash; +#define CEAMMC_DEFINE_SYM(name) \ + static inline t_symbol* sym_##name() { return gensym(#name); } + +#define CEAMMC_DEFINE_HASH(name) \ + CEAMMC_DEFINE_STR(name) \ + CEAMMC_DEFINE_CRC32(name) + +#define CEAMMC_DEFINE_SYM_HASH(name) \ + CEAMMC_DEFINE_STR(name) \ + CEAMMC_DEFINE_CRC32(name) \ + CEAMMC_DEFINE_SYM(name) } #endif diff --git a/ceammc/ext/src/lib/ceammc_data.cpp b/ceammc/ext/src/lib/ceammc_data.cpp index df99cb8658..3bddff9e1e 100644 --- a/ceammc/ext/src/lib/ceammc_data.cpp +++ b/ceammc/ext/src/lib/ceammc_data.cpp @@ -14,15 +14,13 @@ #include "ceammc_data.h" #include "ceammc_datastorage.h" #include "ceammc_format.h" -#include "ceammc_json.h" #include "ceammc_log.h" -#include "lex/data_string.lexer.h" -#include "lex/data_string.parser.hpp" +#include "ceammc_string.h" +#include "fmt/format.h" +#include "lex/lemon_data_string_parser.h" #include -using namespace ceammc::ds; - namespace ceammc { DataParseResult parseDataList(const AtomList& lst) noexcept @@ -35,7 +33,8 @@ DataParseResult parseDataList(const AtomListView& view) noexcept if (view.isNull() || view.empty()) return DataParseResult(AtomList()); - // do not parse floats or booleans + // do not parse single floats, booleans or data + // return as is if (view.isFloat() || view.isBool() || view.isData()) return DataParseResult(view); @@ -44,33 +43,39 @@ DataParseResult parseDataList(const AtomListView& view) noexcept if (std::all_of(view.begin(), view.end(), &isFloat)) return DataParseResult(view); - auto str = to_string(view, " "); - if (str.empty()) - return DataParseResult(AtomList()); - - return parseDataString(str); + // Try to reduce memory allocations: + // first try using on-stack static string. + // The logic is: for long strings parsing time is will be also longer then + // string alloc/deallocations + string::StaticString str; + if (string::list_to_string(view, str)) { + return parseDataString(str.c_str()); + } else { + // string is rather long, using slower method + string::MediumString str; + string::list_to_string(view, str); + // put zero string terminator + str.push_back('\0'); + return parseDataString(str.data()); + } } -DataParseResult parseDataString(const std::string& str) noexcept +DataParseResult parseDataString(const char* str) noexcept { - if (str.empty()) + if (!str || str[0] == '\0') return DataParseResult(AtomList()); try { - std::ostringstream ss; - - AtomList res; - DataStringLexer lex(str); - lex.out(ss); - DataStringParser p(lex, res); + parser::LemonDataStringParser p; + if (!p.parse(str)) + return DataParseResult(p.errorString()); - if (p.parse() != 0) - return DataParseResult(ss.str()); + auto res = p.result(); - if (!res.empty() && res[0].isNone()) + if (res.empty()) return DataParseResult("parse error"); - - return DataParseResult(std::move(res)); + else + return DataParseResult(res); } catch (std::exception& e) { return DataParseResult(e.what()); diff --git a/ceammc/ext/src/lib/ceammc_data.h b/ceammc/ext/src/lib/ceammc_data.h index 0e3f037084..317ae4ec54 100644 --- a/ceammc/ext/src/lib/ceammc_data.h +++ b/ceammc/ext/src/lib/ceammc_data.h @@ -131,7 +131,7 @@ DataParseResult parseDataList(const AtomListView& view) noexcept; * Parse string * @return parse result */ -DataParseResult parseDataString(const std::string& str) noexcept; +DataParseResult parseDataString(const char* str) noexcept; } diff --git a/ceammc/ext/src/lib/ceammc_datastorage.cpp b/ceammc/ext/src/lib/ceammc_datastorage.cpp index f1b5ee3963..a41c08f0fb 100644 --- a/ceammc/ext/src/lib/ceammc_datastorage.cpp +++ b/ceammc/ext/src/lib/ceammc_datastorage.cpp @@ -28,58 +28,58 @@ DataStorage& DataStorage::instance() return s; } -int DataStorage::registerNewType(const std::string& name, +DataTypeId DataStorage::registerNewType(const DataTypeName& name, CreateFromListFn fromListFn, CreateFromDictFn fromDictFn) { constexpr auto FIRST_TYPE_ID = 256; if (type_list_.empty()) { - type_list_.emplace_back(FIRST_TYPE_ID, name, fromListFn, fromDictFn); + type_list_.push_back({FIRST_TYPE_ID, name, fromListFn, fromDictFn}); return FIRST_TYPE_ID; } else { const auto LAST_ID = type_list_.back().type; if (LAST_ID >= type_list_.capacity()) { LIB_ERR << fmt::format( - "can't register type {}, max number of types ({}) is exceed: {}", - name, type_list_.capacity(), __FUNCTION__); + "can't register type '{}', max number of types ({}) is exceed: {}", + name.c_str(), type_list_.capacity(), __FUNCTION__); return data::DATA_INVALID; } if (type_list_.capacity() == type_list_.size()) { - LIB_ERR << fmt::format("can't register type {}, datastorage overflow: {}", name, __FUNCTION__); + LIB_ERR << fmt::format("can't register type '{}', datastorage overflow: {}", name.c_str(), __FUNCTION__); return data::DATA_INVALID; } if (findByName(name) != type_list_.cend()) { - LIB_ERR << fmt::format("can't register type {}, it already exists: {}", name, __FUNCTION__); + LIB_ERR << fmt::format("can't register type '{}', it already exists: {}", name.c_str(), __FUNCTION__); return data::DATA_INVALID; } - const auto NEW_ID = LAST_ID + 1; - LIB_LOG << fmt::format("new data type {} is registered with id: {}", name, NEW_ID); + const DataTypeId NEW_ID = LAST_ID + 1; + LIB_LOG << fmt::format("new data type '{}' is registered with id: {}", name.c_str(), NEW_ID); - type_list_.emplace_back(NEW_ID, name, fromListFn, fromDictFn); + type_list_.push_back({NEW_ID, name, fromListFn, fromDictFn}); return NEW_ID; } } -int DataStorage::typeByName(const std::string& name) const +DataTypeId DataStorage::typeByName(const DataTypeName& name) const { auto it = findByName(name); return (it == type_list_.cend()) ? data::DATA_INVALID : it->type; } -std::string DataStorage::nameByType(int type) const +DataTypeName DataStorage::nameByType(DataTypeId type) const { auto it = findByType(type); - return (it == type_list_.cend()) ? std::string() + return (it == type_list_.cend()) ? DataTypeName {} : it->name; } -CreateFromListFn DataStorage::fromListFunction(const std::string& name) const +CreateFromListFn DataStorage::fromListFunction(const DataTypeName& name) const { auto it = std::find_if(type_list_.begin(), type_list_.end(), [&name](const DataTypeRecord& r) { return r.name == name; }); @@ -87,7 +87,7 @@ CreateFromListFn DataStorage::fromListFunction(const std::string& name) const return (it == type_list_.end()) ? nullptr : it->from_list_fn; } -CreateFromDictFn DataStorage::fromDictFunction(const std::string& name) const +CreateFromDictFn DataStorage::fromDictFunction(const DataTypeName& name) const { auto it = std::find_if(type_list_.begin(), type_list_.end(), [&name](const DataTypeRecord& r) { return r.name == name; }); @@ -104,7 +104,7 @@ DataStorage::DataStorage() { } -DataStorage::type_iterator DataStorage::findByName(const std::string& name) const +DataStorage::type_iterator DataStorage::findByName(const DataTypeName& name) const { return std::find_if( type_list_.begin(), @@ -112,7 +112,7 @@ DataStorage::type_iterator DataStorage::findByName(const std::string& name) cons [name](const DataTypeRecord& r) { return r.name == name; }); } -DataStorage::type_iterator DataStorage::findByType(int type) const +DataStorage::type_iterator DataStorage::findByType(DataTypeId type) const { return std::find_if( type_list_.begin(), diff --git a/ceammc/ext/src/lib/ceammc_datastorage.h b/ceammc/ext/src/lib/ceammc_datastorage.h index e29fbd3310..817617b041 100644 --- a/ceammc/ext/src/lib/ceammc_datastorage.h +++ b/ceammc/ext/src/lib/ceammc_datastorage.h @@ -15,52 +15,58 @@ #define CEAMMC_XDATASTORAGE_H #include "ceammc_abstractdata.h" +#include "ceammc_data.h" #include -#include #include -#include -#include -#include namespace ceammc { -class AtomList; +constexpr size_t DATA_TYPES_MAX = 1024; -using DictEntry = std::pair; -using Dict = std::vector; -using CreateFromListFn = Atom (*)(const AtomList&); -using CreateFromDictFn = Atom (*)(const Dict&); +using CreateFromListFn = Atom (*)(const AtomListView&); +using CreateFromDictFn = Atom (*)(const DictAtom&); class DataStorage { struct DataTypeRecord { - int type; - std::string name; + DataTypeName name; CreateFromListFn from_list_fn; CreateFromDictFn from_dict_fn; + DataTypeId type; - DataTypeRecord(int type_, - const std::string& name_, + DataTypeRecord(DataTypeId type_, + const DataTypeName& name_, CreateFromListFn list_fn, CreateFromDictFn dict_fn) - : type(type_) - , name(name_) + : name(name_) , from_list_fn(list_fn) , from_dict_fn(dict_fn) + , type(type_) + { + } + + DataTypeRecord(DataTypeId type_, + const char* name_, + CreateFromListFn list_fn, + CreateFromDictFn dict_fn) + : name(name_) + , from_list_fn(list_fn) + , from_dict_fn(dict_fn) + , type(type_) { } }; - using TypeList = boost::container::static_vector; + using TypeList = boost::container::static_vector; using type_iterator = TypeList::const_iterator; DataStorage(); DataStorage(const DataStorage& s) = delete; void operator=(const DataStorage& s) = delete; - type_iterator findByName(const std::string& name) const; - type_iterator findByType(int type) const; + type_iterator findByName(const DataTypeName& name) const; + type_iterator findByType(DataTypeId type) const; public: /** @@ -69,14 +75,14 @@ class DataStorage { static DataStorage& instance(); // types functions - int registerNewType(const std::string& name, + DataTypeId registerNewType(const DataTypeName& name, CreateFromListFn fromListFn = nullptr, CreateFromDictFn fromDictFn = nullptr); - int typeByName(const std::string& name) const; - std::string nameByType(int type) const; - CreateFromListFn fromListFunction(const std::string& name) const; - CreateFromDictFn fromDictFunction(const std::string& name) const; + DataTypeId typeByName(const DataTypeName& name) const; + DataTypeName nameByType(DataTypeId type) const; + CreateFromListFn fromListFunction(const DataTypeName& name) const; + CreateFromDictFn fromDictFunction(const DataTypeName& name) const; void clearAll(); diff --git a/ceammc/ext/src/lib/ceammc_datatypes.h b/ceammc/ext/src/lib/ceammc_datatypes.h index 73508f2ef3..91898ef14b 100644 --- a/ceammc/ext/src/lib/ceammc_datatypes.h +++ b/ceammc/ext/src/lib/ceammc_datatypes.h @@ -14,14 +14,39 @@ #ifndef CEAMMC_DATATYPES_H #define CEAMMC_DATATYPES_H +#include +#if BOOST_VERSION < 107500 +#define USE_BOOST_BEAST +#include +#else +#include +#endif + #include namespace ceammc { + +#if BOOST_VERSION < 107500 +#define STATIC_STRING_SIZE(type) type::max_size_n +template +using BoostStaticString = boost::beast::static_string; +#else +#define STATIC_STRING_SIZE(type) type::static_capacity +template +using BoostStaticString = boost::static_string; +#endif + +constexpr size_t DATA_TYPE_NAME_MAX_LENGTH = 14; + namespace data { - static const uint16_t DATA_INVALID = uint16_t(-1); - static const uint16_t DATA_PROPERTY = 31; - static const uint16_t DATA_WRAPPER = 32; + constexpr uint16_t DATA_INVALID = uint16_t(-1); + constexpr uint16_t DATA_PROPERTY = 31; + constexpr uint16_t DATA_WRAPPER = 32; } + +using DataTypeName = BoostStaticString; +using DataTypeId = uint16_t; + } #endif // CEAMMC_DATATYPES_H diff --git a/ceammc/ext/src/lib/ceammc_deprecated.cpp b/ceammc/ext/src/lib/ceammc_deprecated.cpp new file mode 100644 index 0000000000..fa3b892323 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_deprecated.cpp @@ -0,0 +1,45 @@ +#include "ceammc_deprecated.h" +#include "ceammc_log.h" +#include "fmt/format.h" + +extern "C" { +#include "m_imp.h" +} + +#include + +namespace ceammc { + +DeprecatedImpl::DeprecatedImpl() +{ +} + +void DeprecatedImpl::addAlias(t_symbol* className, t_symbol* alias) +{ + aliases_[className].push_front(alias); +} + +bool DeprecatedImpl::checkAlias(t_symbol* className, t_symbol* alias) const +{ + auto cls = aliases_.find(className); + if (cls == aliases_.end()) + return false; + + auto& l = cls->second; + + auto it = std::find(l.begin(), l.end(), alias); + if (it != l.end()) { + LIB_ERR << fmt::format("'{}' is a deprecated alias for [{}] object, in future versions this alias will be removed", + alias->s_name, className->s_name); + return false; + } + + return true; +} + +bool DeprecatedImpl::checkAlias(t_class* cls, t_symbol* alias) const +{ + return checkAlias(cls->c_name, alias); +} + +} diff --git a/ceammc/ext/src/lib/ceammc_deprecated.h b/ceammc/ext/src/lib/ceammc_deprecated.h new file mode 100644 index 0000000000..27c163e8ba --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_deprecated.h @@ -0,0 +1,32 @@ +#ifndef CEAMMC_DEPRECATED_H +#define CEAMMC_DEPRECATED_H + +#include "ceammc_containers.h" + +#include +#include + +namespace ceammc { + +class DeprecatedImpl { + using SymbolList = std::forward_list; + std::unordered_map aliases_; + +public: + DeprecatedImpl(); + void addAlias(t_symbol* className, t_symbol* alias); + bool checkAlias(t_symbol* className, t_symbol* alias) const; + bool checkAlias(t_class* cls, t_symbol* alias) const; +}; + +using Deprecated = SingletonMeyers; + +#define DEPRECATED_ALIAS(obj, name) \ + { \ + obj.addAlias(name); \ + Deprecated::instance().addAlias(obj.className(), gensym(name)); \ + } + +} + +#endif // CEAMMC_DEPRECATED_H diff --git a/ceammc/ext/src/lib/ceammc_dsp.cpp b/ceammc/ext/src/lib/ceammc_dsp.cpp new file mode 100644 index 0000000000..38d435a5ba --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_dsp.cpp @@ -0,0 +1,37 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_dsp.h" + +#include + +namespace ceammc { + +namespace dsp { + + constexpr long double operator""__2(long double v) { return v * v; } + + double curves::a_weight(double f) + { + const auto f2 = f * f; + const auto f4 = f2 * f2; + + return (12194 * 12194 * f4) / ( // + (f2 + 20.6 * 20.6) // + * std::sqrt((f2 + 107.7 * 107.7) * (f2 + 737.9 * 737.9)) // + * (f2 + 12194 * 12194) // + ); + } + +} +} diff --git a/ceammc/ext/src/lib/ceammc_dsp.h b/ceammc/ext/src/lib/ceammc_dsp.h new file mode 100644 index 0000000000..c86a9098c9 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_dsp.h @@ -0,0 +1,201 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_DSP_H +#define CEAMMC_DSP_H + +#include "m_pd.h" + +#include "ceammc_convert.h" +#include "ceammc_signal.h" + +#include +#include +#include +#include + +namespace ceammc { +namespace dsp { + + class DelayIface { + public: + virtual ~DelayIface() { } + virtual uint32_t maxSize() const noexcept = 0; + virtual uint32_t delay() const noexcept = 0; + virtual bool setDelay(uint32_t delay) = 0; + virtual t_sample push(t_sample v) noexcept = 0; + virtual void fillWith(t_sample v) noexcept = 0; + + void clear() { fillWith(0); } + }; + + class Delay : public DelayIface { + std::unique_ptr data_; + const uint32_t max_size_; + uint32_t in_pos_; + uint32_t out_pos_; + uint32_t delay_; + + Delay(const Delay&) = delete; + Delay& operator=(const Delay& d) = delete; + + public: + explicit Delay(uint32_t maxSize, uint32_t delay, t_sample init = 0) + : max_size_(maxSize) + , in_pos_(0) + , out_pos_(0) + , delay_(0) + { + if (max_size_ == 0) { + throw std::invalid_argument("non zero value expected"); + } else { + data_.reset(new t_sample[max_size_]); + fillWith(init); + setDelay(delay); + } + } + + uint32_t maxSize() const noexcept final { return max_size_; } + uint32_t delay() const noexcept final { return delay_; } + + void fillWith(t_sample v) noexcept final { std::fill(data_.get(), data_.get() + max_size_, v); } + + Delay(Delay&& d) noexcept + : data_(std::move(d.data_)) + , max_size_(d.max_size_) + , in_pos_(d.in_pos_) + , out_pos_(d.out_pos_) + , delay_(d.delay_) + { + } + + t_sample push(t_sample v) noexcept final + { + data_[in_pos_++] = v; + + if (in_pos_ == max_size_) + in_pos_ = 0; + + const auto out = data_[out_pos_++]; + + if (out_pos_ == max_size_) + out_pos_ = 0; + + return out; + } + + bool setDelay(uint32_t delay) noexcept final + { + if (delay >= max_size_) + return false; + + if (in_pos_ >= delay) + out_pos_ = in_pos_ - delay; + else + out_pos_ = max_size_ + in_pos_ - delay; + + delay_ = delay; + return true; + } + }; + + template + class StaticDelay : public DelayIface { + t_sample data_[N]; + uint32_t in_pos_; + uint32_t out_pos_; + uint32_t delay_; + + StaticDelay(const StaticDelay&) = delete; + StaticDelay& operator=(const StaticDelay& d) = delete; + + public: + explicit StaticDelay(uint32_t delay, t_sample init = 0) + : in_pos_(0) + , out_pos_(0) + , delay_(0) + { + fillWith(init); + setDelay(delay); + } + + uint32_t maxSize() const noexcept final { return N; } + uint32_t delay() const noexcept final { return delay_; } + + void fillWith(t_sample v) noexcept final { std::fill(data_, data_ + N, v); } + + t_sample push(t_sample v) noexcept final + { + data_[in_pos_++] = v; + + if (in_pos_ == N) + in_pos_ = 0; + + const auto out = data_[out_pos_++]; + + if (out_pos_ == N) + out_pos_ = 0; + + return out; + } + + bool setDelay(uint32_t delay) noexcept final + { + if (delay >= N) + return false; + + if (in_pos_ >= delay) + out_pos_ = in_pos_ - delay; + else + out_pos_ = N + in_pos_ - delay; + + delay_ = delay; + return true; + } + }; + + namespace curves { + double a_weight(double freq); + } + + template + class TableFunction { + T data_[N]; + T a_, b_; + + using Fn = double(double); + + public: + TableFunction(Fn f, T a, T b) + : a_(a) + , b_(b) + { + for (size_t i = 0; i < N; i++) + data_[i] = f(convert::lin2lin_clip(i, a, b)); + } + + T at(T x) const + { + const auto idx = convert::lin2lin_clip(x, a_, b_, 0, N - 1); + const size_t idx0 = std::floor(idx); + const size_t idx1 = std::ceil(idx); + return interpolate::linear(data_[idx0], data_[idx1], idx1 - idx); + } + + T min() const { return a_; } + T max() const { return b_; } + }; +} +} + +#endif // CEAMMC_DSP_H diff --git a/ceammc/ext/src/lib/ceammc_editor_object.cpp b/ceammc/ext/src/lib/ceammc_editor_object.cpp new file mode 100644 index 0000000000..47ef5b7e1b --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_editor_object.cpp @@ -0,0 +1,282 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_editor_object.h" +#include "ceammc_canvas.h" +#include "fmt/core.h" + +extern "C" { +#include "g_canvas.h" +} + +namespace ceammc { + +namespace { + const char* editorSyntaxStr(EditorSyntax s) + { + switch (s) { + case EDITOR_SYNTAX_SELECTOR: + return "selector"; + case EDITOR_SYNTAX_DEFAULT: + return "default"; + case EDITOR_SYNTAX_LUA: + return "lua"; + case EDITOR_SYNTAX_NONE: + default: + return "none"; + } + } + + const char* escapeMode(EditorEscapeMode m) + { + switch (m) { + case EDITOR_ESC_MODE_LUA: + return "lua"; + case EDITOR_ESC_MODE_DATA: + return "data"; + case EDITOR_ESC_MODE_DEFAULT: + default: + return "default"; + } + } +} + +void EditorString::append(char ch) +{ + try { + str.push_back(ch); + } catch (std::exception& e) { + LIB_ERR << e.what(); + } +} + +void EditorString::append(t_float t) +{ + try { + fmt::format_to(std::back_inserter(str), "{:g}", t); + } catch (std::exception& e) { + LIB_ERR << e.what(); + } +} + +void EditorString::append(const char* txt) +{ + try { + str.append(txt); + } catch (std::exception& e) { + LIB_ERR << e.what(); + } +} + +void EditorString::append(const char* txt, size_t len) +{ + try { + str.append(txt, len); + } catch (std::exception& e) { + LIB_ERR << e.what(); + } +} + +void EditorString::append(const Atom& a) +{ + if (a.isFloat()) + return append(a.asT()); + else if (a.isSymbol()) + return append(a.asT()); + else + LIB_ERR << "unsupported atom type: " << a.type(); +} + +void EditorString::append(const AtomListView& lv, const char* delim) +{ + for (size_t i = 0; i < lv.size(); i++) { + if (i > 0) + append(delim); + + append(lv[i]); + } +} + +void EditorString::appendQuoted(const char* txt) +{ + try { + + str.append(1, '"'); + const auto N = strlen(txt); + for (size_t i = 0; i < N; i++) { + auto c = txt[i]; + if (c == '"') { + str.append(1, '`'); + str.append(1, '"'); + } else if (c == '`') { + str.append(2, '`'); + } else + str.append(1, c); + } + + str.append(1, '"'); + } catch (std::exception& e) { + LIB_ERR << e.what(); + } +} + +void EditorString::appendQuoted(const Atom& a) +{ + if (a.isFloat()) + return append(a.asT()); + else if (a.isSymbol()) + return appendQuoted(a.asT()->s_name); +} + +void EditorString::appendQuoted(const AtomListView& lv, const char* delim) +{ + for (size_t i = 0; i < lv.size(); i++) { + if (i > 0) + append(delim); + + appendQuoted(lv[i]); + } +} + +void EditorString::pop() +{ + if (str.size() > 0) + str.pop_back(); +} + +void EditorString::trim() +{ + while (str.size() > 0 && str.back() == ' ') + str.pop_back(); +} + +EditorObjectImpl::EditorObjectImpl(t_object* owner) + : owner_(owner) + , guiconnect_(nullptr) + , esc_mode_(EDITOR_ESC_MODE_DEFAULT) +{ +} + +EditorObjectImpl::~EditorObjectImpl() +{ + if (guiconnect_) { + sys_vgui("destroy .x%lx\n", xowner()); + guiconnect_notarget((t_guiconnect*)guiconnect_, 1000); + guiconnect_ = nullptr; + } +} + +void EditorObjectImpl::open(t_canvas* cnv, const EditorLineList& data, const EditorTitleString& title, int x, int y, int nchars, int nlines, bool lineNumbers, EditorSyntax syntax) +{ + if (guiconnect_) { + sys_vgui("ceammc::texteditor::show .x%lx\n", xowner()); + } else { + const auto z = glist_getzoom(cnv); + const auto ft = glist_getfont(cnv); + const auto fsz = sys_hostfontsize(ft, z); + const auto brect = canvas_info_rect(canvas_getrootfor(cnv)); + + const auto w = std::min(800, sys_zoomfontwidth(ft, z, 0) * nchars); + const auto h = std::min(600, sys_zoomfontheight(fsz, z, 0) * nlines); + + sys_vgui("ceammc::texteditor::open .x%lx %dx%d+%d+%d {%s} %d %d %s\n", + xowner(), w, h, brect.x + x, brect.y + y, title.c_str(), fsz, (int)lineNumbers, editorSyntaxStr(syntax)); + + sys_vgui("ceammc::texteditor::set_escape .x%lx %s\n", xowner(), escapeMode(esc_mode_)); + + char buf[40]; + sprintf(buf, ".x%lx", xowner()); + guiconnect_ = guiconnect_new(&owner_->te_g.g_pd, gensym(buf)); + + sync(data); + } +} + +void EditorObjectImpl::close() +{ + sys_vgui("ceammc::texteditor::doclose .x%lx\n", xowner()); + + if (guiconnect_) { + guiconnect_notarget((t_guiconnect*)guiconnect_, 1000); + guiconnect_ = nullptr; + } + +#ifndef NDEBUG + EditorStringPool::dumpMemoryUsage(); +#endif +} + +void EditorObjectImpl::sync(const EditorLineList& list) +{ + sys_vgui("ceammc::texteditor::setundo .x%lx 0\n", xowner()); + sys_vgui("ceammc::texteditor::clear .x%lx\n", xowner()); + + for (auto& str : list) + sys_vgui("ceammc::texteditor::append .x%lx {%s\n}\n", xowner(), str->str.c_str()); + + sys_vgui("ceammc::texteditor::highlight .x%lx\n", xowner()); + sys_vgui("ceammc::texteditor::setdirty .x%lx 0\n", xowner()); + sys_vgui("ceammc::texteditor::setundo .x%lx 1\n", xowner()); +} + +void EditorObjectImpl::setSpecialSymbolEscape(EditorEscapeMode mode) +{ + esc_mode_ = mode; +} + +void EditorObjectImpl::setDirty(t_canvas* c, bool value) +{ + canvas_dirty(c, value ? 1 : 0); +} + +EditorStringPool::Pool& EditorStringPool::pool() +{ + static Pool instance_(64, 64, 0, memorypool::RECYCLE_METHOD_DESTROY_FUNCTION); + return instance_; +} + +void EditorStringPool::dumpMemoryUsage() +{ + LIB_DBG << "editor string pool memory usage:\n" + "\tsize=" + << pool().max_size() << "\n" + "\tinuse=" + << pool().inuse_count() << "\n" + "\tunused=" + << pool().unused_count(); +} + +EditorTitleString makeEditorTitleString(const char* dataName, const char* dataId) +{ + EditorTitleString res; + const bool with_id = dataId && dataId[0]; + + try { + if (with_id) + fmt::format_to(std::back_inserter(res), "{} ({})", dataName, dataId); + else + res.append(dataName); + + } catch (std::exception& e) { + if (res.size() >= (res.max_size() - 1)) { + res.resize(res.max_size() - 5); + res.append("..."); + if (with_id) + res.push_back(')'); + } + } + + return res; +} + +} diff --git a/ceammc/ext/src/lib/ceammc_editor_object.h b/ceammc/ext/src/lib/ceammc_editor_object.h new file mode 100644 index 0000000000..ffcef19f7b --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_editor_object.h @@ -0,0 +1,225 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_EDITOR_OBJECT_H +#define CEAMMC_EDITOR_OBJECT_H + +#include "ceammc_object.h" +#include "ceammc_datatypes.h" + +#include +#include + +#include "extra/boost_intrusive_pool.hpp" + +namespace ceammc { + +using EditorTitleString = BoostStaticString<32>; + +EditorTitleString makeEditorTitleString(const char* dataName, const char* dataId = ""); + +class EditorString : public memorypool::boost_intrusive_pool_item { +public: + BoostStaticString str; + + EditorString() { } + void destroy() final { str.clear(); } + + void append(char ch); + void append(t_float t); + void append(const std::string& txt) { append(txt.c_str()); } + void append(const char* txt); + void append(t_symbol* s) { append(s->s_name); } + void append(const Atom& a); + void append(const AtomListView& lv, const char* delim = " "); + void append(const char* txt, size_t len); + + void appendQuoted(const std::string& txt) { appendQuoted(txt.c_str()); } + void appendQuoted(t_symbol* s) { appendQuoted(s->s_name); } + void appendQuoted(const char* txt); + void appendQuoted(const Atom& a); + void appendQuoted(const AtomListView& lv, const char* delim = " "); + + void pop(); + + void clear() { str.clear(); } + const char* c_str() const { return str.c_str(); } + size_t length() const { return str.length(); } + char back() const { return str.back(); } + + void trim(); +}; + +using EditorStringPtr = boost::intrusive_ptr; +using EditorLineList = std::vector; + +class EditorStringPool { + EditorStringPool() = delete; + +public: + using Pool = memorypool::boost_intrusive_pool; + +public: + static Pool& pool(); + static void dumpMemoryUsage(); +}; + +enum EditorSyntax { + EDITOR_SYNTAX_NONE = 0, + EDITOR_SYNTAX_SELECTOR, + EDITOR_SYNTAX_LUA, + EDITOR_SYNTAX_DEFAULT +}; + +enum EditorEscapeMode { + EDITOR_ESC_MODE_DEFAULT = 0, + EDITOR_ESC_MODE_LUA, + EDITOR_ESC_MODE_DATA +}; + +class EditorObjectImpl { + t_object* owner_; + void* guiconnect_; + EditorEscapeMode esc_mode_; + +public: + EditorObjectImpl(t_object* owner); + ~EditorObjectImpl(); + + /** + * create and open editor TCL window + * @param cnv - pointer to onwer canvas + * @param data - editor content + * @param nchars - line width in chars + * @param nlines - number of lines + * @param lineNumbers - show line numbers + * @param highlightSyntax - highlight syntax + * @return true on success, false on error + */ + void open(t_canvas* cnv, const EditorLineList& data, + const EditorTitleString& title, + int x, int y, int nchars, int nlines, + bool lineNumbers, EditorSyntax syntax); + + /** + * close TCL editor and stop GUI listening + */ + void close(); + + /** + * Sync editor with specified data + * @param lv + */ + void sync(const EditorLineList& list); + + /** + * Enable/disable special symbols ("\t,;{}") escaping + * useful for LUA, for example + */ + void setSpecialSymbolEscape(EditorEscapeMode mode); + + /** + * set owner canvas dirty + */ + void setDirty(t_canvas* c, bool value); + +private: + unsigned long xowner() const { return reinterpret_cast(owner_); } +}; + +template +class EditorObject : public BaseClass { + EditorObjectImpl impl_; + EditorSyntax syntax_; + bool line_nums_; + +public: + EditorObject(const PdArgs& args) + : BaseClass(args) + , impl_(this->owner()) + , line_nums_(true) + , syntax_(EDITOR_SYNTAX_DEFAULT) + { + } + + void onClick(t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) override + { + impl_.open(this->canvas(), + this->getContentForEditor(), + this->editorTitle(), + (int)xpos, (int)ypos, + this->calcEditorChars(), + this->calcEditorLines(), + line_nums_, syntax_); + } + + virtual void editorClear() = 0; + virtual void editorAddLine(t_symbol* sel, const AtomListView& lv) = 0; + virtual void editorSync() { impl_.sync(this->getContentForEditor()); } + virtual EditorLineList getContentForEditor() const = 0; + virtual EditorTitleString editorTitle() const { return "EDITOR"; } + + virtual int calcEditorLines() const { return 20; } + virtual int calcEditorChars() const { return 80; } + + void m_editor_clear(t_symbol* s, const AtomListView& lv) { this->editorClear(); } + void m_editor_close(t_symbol* s, const AtomListView& lv) { impl_.close(); } + void m_editor_addline(t_symbol* s, const AtomListView& lv) { this->editorAddLine(s, lv); } + void m_editor_sync(t_symbol*, const AtomListView&) + { + impl_.setDirty(this->canvas(), true); + this->editorSync(); + } + + /** + * If show line numbers in editor + */ + bool lineNumbers() const { return line_nums_; } + + /** + * Set on/off line numbering in editor + */ + void setLineNumbers(bool value) { line_nums_ = value; } + + /** + * highlight syntax in editor + */ + EditorSyntax highlightSyntax() const { return syntax_; } + + /** + * Set on/off syntax highlighting in editor + */ + void setHighlightSyntax(EditorSyntax value) { syntax_ = value; } + + /** + * Enable/disable escaping of special chars + */ + void setSpecialSymbolEscape(EditorEscapeMode mode) { impl_.setSpecialSymbolEscape(mode); } + +public: + using ThisType = EditorObject; + + template + static void registerMethods(Factory& obj) + { + obj.useClick(); + obj.addMethod(".clear", &ThisType::m_editor_clear); + obj.addMethod(".close", &ThisType::m_editor_close); + obj.addMethod(".addline", &ThisType::m_editor_addline); + obj.addMethod(".sync", &ThisType::m_editor_sync); + } +}; + +} + +#endif // CEAMMC_EDITOR_OBJECT_H diff --git a/ceammc/ext/src/lib/ceammc_externals.cpp b/ceammc/ext/src/lib/ceammc_externals.cpp index 9b06dab614..ccbd818948 100644 --- a/ceammc/ext/src/lib/ceammc_externals.cpp +++ b/ceammc/ext/src/lib/ceammc_externals.cpp @@ -230,7 +230,7 @@ PropertySetState ceammc_base_property_set_cc(t_object* x, t_symbol* key, t_float auto prop = obj->property(key); if (!prop) - return PPS::ERROR_NOT_FOUND; + return PPS::ERROR_PROP_NOT_FOUND; auto& info = prop->infoT(); // check rw @@ -265,7 +265,7 @@ PropertySetState ceammc_ui_property_set_cc(t_object* x, t_symbol* key, t_float v auto info = (c->c_dsp) ? objdsp->propertyInfo(key0) : obj->propertyInfo(key0); if (!info) - return PPS::ERROR_NOT_FOUND; + return PPS::ERROR_PROP_NOT_FOUND; // check rw if (!info->isReadWrite()) @@ -305,7 +305,7 @@ PropertySetState ceammc_property_set_cc(t_object* x, t_symbol* key, t_float val) if (res == PropertySetState::OK || res != PropertySetState::OTHER_TYPE) return res; - return PropertySetState::ERROR_NOT_FOUND; + return PropertySetState::ERROR_PROP_NOT_FOUND; } const char* ceammc_property_set_cc_str_state(PropertySetState st) @@ -320,7 +320,7 @@ const char* ceammc_property_set_cc_str_state(PropertySetState st) return "readonly property"; case PSS::ERROR_INVALID_TYPE: return "non-numeric property type"; - case PSS::ERROR_NOT_FOUND: + case PSS::ERROR_PROP_NOT_FOUND: return "not found"; case PSS::ERROR_NO_RANGE: return "not bounded property"; diff --git a/ceammc/ext/src/lib/ceammc_externals.h b/ceammc/ext/src/lib/ceammc_externals.h index 8ef6062787..cd1128a05a 100644 --- a/ceammc/ext/src/lib/ceammc_externals.h +++ b/ceammc/ext/src/lib/ceammc_externals.h @@ -42,7 +42,7 @@ std::vector ceammc_abstraction_properties(t_object* x); enum class PropertySetState { OK, OTHER_TYPE, - ERROR_NOT_FOUND, + ERROR_PROP_NOT_FOUND, ERROR_INVALID_TYPE, ERROR_NO_RANGE, ERROR_SET_VALUE, diff --git a/ceammc/ext/src/lib/ceammc_factory.h b/ceammc/ext/src/lib/ceammc_factory.h index 316624fb64..26cd924208 100644 --- a/ceammc/ext/src/lib/ceammc_factory.h +++ b/ceammc/ext/src/lib/ceammc_factory.h @@ -452,7 +452,8 @@ class ObjectFactory { /** default factory list handler */ static void processList(ObjectProxy* x, t_symbol*, int argc, t_atom* argv) { - x->impl->onList(AtomList(argc, argv)); + const AtomListView args(argv, argc); + x->impl->onList(args); } /** default factory any handler handler */ @@ -490,7 +491,7 @@ class ObjectFactory { if (argc == 1 && argv && Atom::is_data(argv)) { x->impl->onData(Atom(*argv)); } else { - x->impl->onList(AtomList(argc, argv)); + x->impl->onList(AtomListView(argv, argc)); } } @@ -507,7 +508,7 @@ class ObjectFactory { if (!IteratorPred::next(x, data)) x->impl->onData(data); } else { - x->impl->onList(AtomList(argc, argv)); + x->impl->onList(AtomListView(argv, argc)); } } diff --git a/ceammc/ext/src/lib/ceammc_faust.cpp b/ceammc/ext/src/lib/ceammc_faust.cpp index fbfa1b85f5..3902f9b1bb 100644 --- a/ceammc/ext/src/lib/ceammc_faust.cpp +++ b/ceammc/ext/src/lib/ceammc_faust.cpp @@ -15,9 +15,9 @@ #include #include +#include "ceammc_containers.h" #include "ceammc_faust.h" #include "ceammc_output.h" -#include "ceammc_property_callback.h" namespace ceammc { namespace faust { @@ -193,15 +193,15 @@ namespace faust { if (!sel) return; - AtomList lst; - lst.append(atomFrom(path_)); - lst.append(Atom(value())); - lst.append(Atom(init_)); - lst.append(Atom(min_)); - lst.append(Atom(max_)); - lst.append(Atom(step_)); + StaticAtomList<6> lst { path_, value(), init_, min_, max_, step_ }; +// lst.append(atomFrom(path_)); +// lst.append(Atom(value())); +// lst.append(Atom(init_)); +// lst.append(Atom(min_)); +// lst.append(Atom(max_)); +// lst.append(Atom(step_)); - outletAny(out, sel, lst); + outletAny(out, sel, lst.view()); } bool isGetAllProperties(t_symbol* s) @@ -428,17 +428,17 @@ namespace faust { return true; } - bool UIProperty::setList(const AtomListView& lst) + bool UIProperty::setList(const AtomListView& lv) { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (lst.isFloat()) { - setValue(lst[0].asT(), true); + if (lv.isFloat()) { + setValue(lv[0].asT(), true); return true; - } else if (lst.size() == 2 && lst[0].isSymbol() && lst[1].isFloat()) { - const auto val = lst[1].asT(); - const auto op = lst[0].asT()->s_name; + } else if (lv.size() == 2 && lv[0].isSymbol() && lv[1].isFloat()) { + const auto val = lv[1].asT(); + const auto op = lv[0].asT()->s_name; if (op[0] == '+' && op[1] == '\0') { setValue(value() + val, true); return true; @@ -457,11 +457,11 @@ namespace faust { return true; } } else { - LIB_ERR << "[" << name()->s_name << "] expected +-*/, got: " << lst[0]; + LIB_ERR << "[" << name()->s_name << "] expected +-*/, got: " << lv[0]; return false; } } else { - LIB_ERR << "[" << name()->s_name << "] float value expected, got: " << lst; + LIB_ERR << "[" << name()->s_name << "] float value expected, got: " << lv; return false; } } diff --git a/ceammc/ext/src/lib/ceammc_faust.h b/ceammc/ext/src/lib/ceammc_faust.h index 22ea665910..b7dc67957e 100644 --- a/ceammc/ext/src/lib/ceammc_faust.h +++ b/ceammc/ext/src/lib/ceammc_faust.h @@ -63,7 +63,7 @@ namespace faust { public: UIProperty(UIElement* el); - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; AtomList get() const override; t_float value() const; void setValue(t_float v, bool clip = false) const; diff --git a/ceammc/ext/src/lib/ceammc_fn_list.cpp b/ceammc/ext/src/lib/ceammc_fn_list.cpp index 00ee96b2a6..bcb08cce51 100644 --- a/ceammc/ext/src/lib/ceammc_fn_list.cpp +++ b/ceammc/ext/src/lib/ceammc_fn_list.cpp @@ -149,7 +149,7 @@ namespace list { return res; } - void deinterleaveMinLength(const AtomList& in, std::vector& out) + void deinterleaveMinLength(const AtomListView& in, std::vector& out) { const size_t in_sz = in.size(); const size_t out_sz = out.size(); @@ -161,7 +161,7 @@ namespace list { out[i % out_sz].append(in[i]); } - void deinterleavePadWith(const AtomList& in, const Atom& pad, std::vector& out) + void deinterleavePadWith(const AtomListView& in, const Atom& pad, std::vector& out) { if (in.empty() || out.empty()) return; @@ -180,12 +180,12 @@ namespace list { } } - MaybeFloat average(const AtomList& l) + MaybeFloat average(const AtomListView& lv) { size_t n = 0; t_float sum = 0; - for (auto& el : l) { + for (auto& el : lv) { if (!el.isFloat()) continue; @@ -199,18 +199,18 @@ namespace list { return sum / n; } - AtomList countRepeats(const AtomList& l, bool normalizeBySum) + AtomList countRepeats(const AtomListView& lv, bool normalizeBySum) { typedef std::map AtomMap; AtomMap hist_map; // fill histogram - for (size_t i = 0; i < l.size(); i++) - hist_map[l.at(i)]++; + for (size_t i = 0; i < lv.size(); i++) + hist_map[lv.at(i)]++; AtomList res; res.reserve(hist_map.size() * 2); - const t_float N = l.size(); + const t_float N = lv.size(); for (auto& x : hist_map) { res.append(x.first); @@ -224,38 +224,38 @@ namespace list { return res; } - AtomList sliceWrap(const AtomList& l, int pos, size_t len) + AtomList sliceWrap(const AtomListView& lv, int pos, size_t len) { AtomList res; - if (l.empty()) + if (lv.empty()) return res; for (int i = pos; i < pos + int(len); i++) - res.append(*l.wrapAt(i)); + res.append(*lv.wrapAt(i)); return res; } - AtomList sliceClip(const AtomList& l, int pos, size_t len) + AtomList sliceClip(const AtomListView& lv, int pos, size_t len) { AtomList res; - if (l.empty()) + if (lv.empty()) return res; for (int i = pos; i < pos + int(len); i++) - res.append(*l.clipAt(i)); + res.append(*lv.clipAt(i)); return res; } - AtomList sliceFold(const AtomList& l, int pos, size_t len) + AtomList sliceFold(const AtomListView& lv, int pos, size_t len) { AtomList res; - if (l.empty()) + if (lv.empty()) return res; for (int i = pos; i < pos + int(len); i++) - res.append(*l.foldAt(i)); + res.append(*lv.foldAt(i)); return res; } @@ -299,38 +299,38 @@ namespace list { return true; } - AtomList rotate(const AtomList& l, int steps) + AtomList rotate(const AtomListView& lv, int steps) { - if (l.size() < 2 || steps == 0) - return l; + if (lv.size() < 2 || steps == 0) + return lv; - int sz = int(l.size()); + int sz = int(lv.size()); steps = steps % sz; if (steps < 0) steps += sz; - AtomList res(l); + AtomList res(lv); std::rotate(res.begin(), res.begin() + steps, res.end()); return res; } - AtomList repeat(const AtomList& l, size_t n) + AtomList repeat(const AtomListView& lv, size_t n) { AtomList res; - if (n == 0 || l.size() == 0) + if (n == 0 || lv.size() == 0) return res; - res.reserve(l.size() * n); + res.reserve(lv.size() * n); while (n-- > 0) - res.append(l); + res.append(lv); return res; } - AtomList histogram(const AtomList& l, size_t bins) + AtomList histogram(const AtomListView& lv, size_t bins) { - if (l.empty() || bins == 0) + if (lv.empty() || bins == 0) return AtomList(); if (bins == 1) @@ -339,7 +339,7 @@ namespace list { std::vector hist(bins, 0); Atom amin, amax; - l.range(amin, amax); + lv.range(amin, amax); const t_float min = amin.asFloat(); const t_float max = amax.asFloat(); t_float range = std::fabs(max - min); @@ -348,8 +348,8 @@ namespace list { hist[0] = max * bins; } else { t_float bin_wd = range / (bins - 1); - for (size_t i = 0; i < l.size(); i++) { - const t_float v = l[i].asFloat(); + for (size_t i = 0; i < lv.size(); i++) { + const t_float v = lv[i].asFloat(); int idx = ((v - min) / bin_wd); hist[idx]++; } @@ -365,7 +365,7 @@ namespace list { return res; } - bool normalizeByRange(const AtomList& src, AtomList& dest) + bool normalizeByRange(const AtomListView& src, AtomList& dest) { Atom amin, amax; if (!src.range(amin, amax)) @@ -387,22 +387,22 @@ namespace list { return true; } - AtomList enumerate(const AtomList& l, int from, enumerateMode mode) + AtomList enumerate(const AtomListView& lv, int from, enumerateMode mode) { - if (l.empty()) - return l; + if (lv.empty()) + return lv; AtomList res; - res.reserve(l.size() * 2); + res.reserve(lv.size() * 2); - for (size_t i = 0; i < l.size(); i++) { + for (size_t i = 0; i < lv.size(); i++) { const int idx = int(i) + from; if (mode == PREPEND) { res.append(Atom(idx)); - res.append(l[i]); + res.append(lv[i]); } else if (mode == APPEND) { - res.append(l[i]); + res.append(lv[i]); res.append(Atom(idx)); } } @@ -428,9 +428,9 @@ namespace list { } }; - AtomList uniqueStable(const AtomList& l) + AtomList uniqueStable(const AtomListView& lv) { - const size_t N = l.size(); + const size_t N = lv.size(); std::unordered_set atom_set; AtomList res; @@ -438,7 +438,7 @@ namespace list { atom_set.reserve(N); for (size_t i = 0; i < N; i++) { - auto& a = l[i]; + auto& a = lv[i]; if (atom_set.find(a) == atom_set.end()) { atom_set.insert(a); res.append(a); @@ -448,9 +448,9 @@ namespace list { return res; } - AtomList uniqueSorted(const AtomList& l) + AtomList uniqueSorted(const AtomListView& lv) { - AtomList res(l); + AtomList res(lv); res.sort(); auto last = std::unique(res.begin(), res.end(), @@ -460,12 +460,12 @@ namespace list { return res; } - AtomList shift(const AtomList& l, t_float off) + AtomList shift(const AtomListView& lv, t_float off) { AtomList res; - res.fill(Atom(0.f), l.size()); + res.fill(Atom(0.f), lv.size()); - const size_t N = l.size(); + const size_t N = lv.size(); for (size_t i = 0; i < N; i++) { // wrap by N @@ -479,8 +479,8 @@ namespace list { size_t i1 = size_t(long(fidx)) % N; size_t i2 = (i1 + 1) % N; - t_float a = l[i1].asFloat(); - t_float b = l[i2].asFloat(); + t_float a = lv[i1].asFloat(); + t_float b = lv[i2].asFloat(); t_float mix = fidx - std::floor(fidx); // linear interpolation @@ -490,18 +490,18 @@ namespace list { return res; } - AtomList stretch(const AtomList& l, size_t sz) + AtomList stretch(const AtomListView& lv, size_t sz) { - if (sz <= 1 || l.size() == 0) + if (sz <= 1 || lv.size() == 0) return AtomList(); - if (sz == l.size()) - return l; + if (sz == lv.size()) + return lv; AtomList res; res.reserve(sz); - const size_t N = l.size(); + const size_t N = lv.size(); for (size_t i = 0; i < sz; i++) { double old_fidx = ((N - 1) * i) / double(sz - 1); @@ -509,24 +509,24 @@ namespace list { size_t old_idx1 = std::min(N - 1, old_idx0 + 1); double mix = old_fidx - old_idx0; - double value = l[old_idx0].asFloat() * (1 - mix) + l[old_idx1].asFloat() * mix; + double value = lv[old_idx0].asFloat() * (1 - mix) + lv[old_idx1].asFloat() * mix; res.append(Atom(value)); } return res; } - std::vector> rleEncode(const AtomList& l) + std::vector> rleEncode(const AtomListView& lv) { std::vector> res; - const size_t N = l.size(); + const size_t N = lv.size(); if (!N) return res; - Atom prev = l[0]; + Atom prev = lv[0]; res.push_back({ prev, 1 }); for (size_t i = 1; i < N; i++) { - const auto& a = l[i]; + const auto& a = lv[i]; if (a == prev) { res.back().second++; continue; @@ -555,7 +555,7 @@ namespace list { return res; } - bool normalizeBySum(const AtomList& src, AtomList& dest) + bool normalizeBySum(const AtomListView& src, AtomList& dest) { if (src.empty()) return false; @@ -574,7 +574,7 @@ namespace list { return true; } - bool containsAllOff(const AtomList& input, const AtomList& needles) + bool containsAllOff(const AtomListView& input, const AtomListView& needles) { size_t cnt = 0; @@ -586,7 +586,7 @@ namespace list { return cnt == needles.size(); } - bool containsAnyOff(const AtomList& input, const AtomList& needles) + bool containsAnyOff(const AtomListView& input, const AtomListView& needles) { for (auto& x : input) { if (needles.contains(x)) @@ -596,7 +596,7 @@ namespace list { return false; } - bool resample(const AtomList& src, AtomList& dest, t_float ratio) + bool resample(const AtomListView& src, AtomList& dest, t_float ratio) { if (ratio <= 0) return false; diff --git a/ceammc/ext/src/lib/ceammc_fn_list.h b/ceammc/ext/src/lib/ceammc_fn_list.h index 25ee5651d8..c8655cf4ae 100644 --- a/ceammc/ext/src/lib/ceammc_fn_list.h +++ b/ceammc/ext/src/lib/ceammc_fn_list.h @@ -15,6 +15,7 @@ #define CEAMMC_EXT_LIST_H #include "ceammc_atomlist.h" +#include "ceammc_atomlist_view.h" #include #include @@ -38,28 +39,28 @@ namespace list { AtomList interleaveWrap(const std::vector& l); AtomList interleaveFold(const std::vector& l); - void deinterleaveMinLength(const AtomList& in, std::vector& out); - void deinterleavePadWith(const AtomList& in, const Atom& pad, std::vector& out); + void deinterleaveMinLength(const AtomListView& in, std::vector& out); + void deinterleavePadWith(const AtomListView& in, const Atom& pad, std::vector& out); - MaybeFloat average(const AtomList& l); + MaybeFloat average(const AtomListView& lv); - AtomList countRepeats(const AtomList& l, bool normalizeBySum = false); + AtomList countRepeats(const AtomListView& lv, bool normalizeBySum = false); - bool containsAllOff(const AtomList& input, const AtomList& needles); - bool containsAnyOff(const AtomList& input, const AtomList& needles); + bool containsAllOff(const AtomListView& input, const AtomListView& needles); + bool containsAnyOff(const AtomListView& input, const AtomListView& needles); - AtomList sliceWrap(const AtomList& l, int pos, size_t len); - AtomList sliceClip(const AtomList& l, int pos, size_t len); - AtomList sliceFold(const AtomList& l, int pos, size_t len); + AtomList sliceWrap(const AtomListView& lv, int pos, size_t len); + AtomList sliceClip(const AtomListView& lv, int pos, size_t len); + AtomList sliceFold(const AtomListView& lv, int pos, size_t len); bool calcClipIndex(int pos, size_t len, size_t* idx); bool calcWrapIndex(int pos, size_t len, size_t* idx); bool calcFoldIndex(int pos, size_t len, size_t* idx); - AtomList rotate(const AtomList& l, int steps); - AtomList repeat(const AtomList& l, size_t n); + AtomList rotate(const AtomListView& lv, int steps); + AtomList repeat(const AtomListView& lv, size_t n); - AtomList histogram(const AtomList& l, size_t bins); + AtomList histogram(const AtomListView& lv, size_t bins); /** * Normalize floats by total sum, that goes to 1, and each element is equal value/sum @@ -67,7 +68,7 @@ namespace list { * @param dest - write result * @return true on success, false on error (zero range, empty etc.) */ - bool normalizeBySum(const AtomList& src, AtomList& dest); + bool normalizeBySum(const AtomListView& src, AtomList& dest); /** * Normalize floats to [0, 1] range: min element goes to 0, max element goes to 1 @@ -75,7 +76,7 @@ namespace list { * @param dest - write result * @return true on success, false on error (zero range, empty etc.) */ - bool normalizeByRange(const AtomList& src, AtomList& dest); + bool normalizeByRange(const AtomListView& src, AtomList& dest); /** * Resample list @@ -84,18 +85,18 @@ namespace list { * @param ratio - resample ratio (src/desc) * @return treu on success, false on error */ - bool resample(const AtomList& src, AtomList& dest, t_float ratio); + bool resample(const AtomListView& src, AtomList& dest, t_float ratio); /** * Return vector of types containing in lst, elements of other types are discarded */ template - std::vector extractByType(const AtomList& l) + std::vector extractByType(const AtomListView& lv) { std::vector res; - res.reserve(l.size()); + res.reserve(lv.size()); - for (const Atom& a : l) { + for (const Atom& a : lv) { if (a.isA()) res.push_back(a.asT()); } @@ -119,81 +120,81 @@ namespace list { */ AtomList bresenham(size_t onsets, size_t pulses); - AtomList enumerate(const AtomList& l, int from = 0, enumerateMode mode = PREPEND); + AtomList enumerate(const AtomListView& lv, int from = 0, enumerateMode mode = PREPEND); // preserves element order but not suitable for data atoms - AtomList uniqueStable(const AtomList& l); + AtomList uniqueStable(const AtomListView& lv); // suitable for data atoms, but returns sorted output - AtomList uniqueSorted(const AtomList& l); - AtomList shift(const AtomList& l, t_float off); - AtomList stretch(const AtomList& l, size_t sz); + AtomList uniqueSorted(const AtomListView& lv); + AtomList shift(const AtomListView& lv, t_float off); + AtomList stretch(const AtomListView& lv, size_t sz); - std::vector> rleEncode(const AtomList& l); + std::vector> rleEncode(const AtomListView& lv); AtomList rleDecode(const std::vector>& rle); template - static bool canConvertToType(const AtomList&) { return false; } + static bool canConvertToType(const AtomListView&) { return false; } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - if (l.size() != 1) + if (lv.size() != 1) return false; - if (l[0].isFloat()) + if (lv[0].isFloat()) return true; - if (l[0].isSymbol() - && (l[0].asSymbol() == gensym("true") || l[0].asSymbol() == gensym("false"))) + if (lv[0].isSymbol() + && (lv[0].asSymbol() == gensym("true") || lv[0].asSymbol() == gensym("false"))) return true; return false; } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - return l.isFloat(); + return lv.isFloat(); } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - return l.isFloat(); + return lv.isFloat(); } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - return l.isFloat(); + return lv.isFloat(); } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - if (!l.isFloat()) + if (!lv.isFloat()) return false; - if (l[0].asFloat() < 0) + if (lv[0].asFloat() < 0) return false; return true; } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - return l.isSymbol(); + return lv.isSymbol(); } template <> - bool canConvertToType(const AtomList& l) + bool canConvertToType(const AtomListView& lv) { - return l.size() == 1; + return lv.size() == 1; } template <> - bool canConvertToType(const AtomList&) + bool canConvertToType(const AtomListView&) { return true; } diff --git a/ceammc/ext/src/lib/ceammc_format.cpp b/ceammc/ext/src/lib/ceammc_format.cpp index 7514055dcb..5e4d7cd4c3 100644 --- a/ceammc/ext/src/lib/ceammc_format.cpp +++ b/ceammc/ext/src/lib/ceammc_format.cpp @@ -19,6 +19,7 @@ #include "ceammc_message.h" #include "ceammc_string.h" #include "fmt/format.h" +#include "lex/parser_strings.h" #include #include @@ -29,10 +30,14 @@ namespace ceammc { std::string to_string(const Atom& a) { - if (a.isSymbol()) + if (a.isFloat()) + return fmt::format("{:g}", a.asT()); + else if (a.isSymbol()) return std::string(a.asSymbol()->s_name); else if (a.isData()) return a.asData()->toString(); + else if (a.isNone()) + return "null"; else { std::ostringstream ss; ss << a; @@ -58,12 +63,13 @@ std::string to_string(const AtomListView v, const std::string& separator) std::string to_string(const AtomList& l, const std::string& separator) { + std::string res; + if (l.empty()) - return ""; + return res; - std::string res; for (size_t i = 0; i < l.size(); i++) { - if (i != 0) + if (i > 0) res += separator; res += to_string(l[i]); @@ -86,54 +92,6 @@ std::string to_string(const Message& m, const std::string& separator) return {}; } -std::string to_string_quoted(const Atom& a) -{ - if (a.isSymbol()) - return to_string_quoted(a.asSymbol()->s_name); - else - return to_string(a); -} - -std::string to_string_quoted(const std::string& str) -{ - if (str.empty()) - return "\"\""; - - static const char SINGLE_QUOTE = '"'; - static const char ESCAPE = '`'; - - // no spaces -> no quotes - if (std::string::npos == str.find(' ', 0)) - return str; - - std::string res; - res.reserve(str.size() + 2); - res += SINGLE_QUOTE; - - // no inner quotes -> just outer quotes - if (std::string::npos == str.find(SINGLE_QUOTE, 0)) { - res += str; - } else { - std::string escaped; - escaped.reserve(str.size() + 1); - - for (size_t i = 0; i < str.size(); i++) { - char c = str[i]; - - if (c == SINGLE_QUOTE) { - escaped += ESCAPE; - escaped += SINGLE_QUOTE; - } else - escaped += c; - } - - res += escaped; - } - - res += SINGLE_QUOTE; - return res; -} - std::string quote(const std::string& str, char q) { std::string res; @@ -178,16 +136,16 @@ std::string to_json_string(const Atom& a) } } -std::string to_json_string(const AtomList& l) +std::string to_json_string(const AtomListView& lv) { std::string res; res.push_back('['); - for (size_t i = 0; i < l.size(); i++) { + for (size_t i = 0; i < lv.size(); i++) { if (i > 0) res += ", "; - res += to_json_string(l[i]); + res += to_json_string(lv[i]); } res.push_back(']'); @@ -196,23 +154,32 @@ std::string to_json_string(const AtomList& l) std::string parse_quoted(const Atom& a) { - auto res = to_string(a); - string::pd_string_parse(res, res); - return res; -} - -std::string parse_quoted(const AtomList& l) -{ - auto res = to_string(l, " "); - string::pd_string_parse(res, res); - return res; + using namespace string; + SmallString str; + if (atom_to_string(a, str)) { + str.push_back('\0'); + SmallString out; + if (unquote_and_unescape(str.data(), out)) { + return std::string(out.data(), out.size()); + } else + return std::string(str.data(), str.size() - 1); + } else + return {}; } std::string parse_quoted(const AtomListView& v) { - auto res = to_string(v, " "); - string::pd_string_parse(res, res); - return res; + using namespace string; + MediumString str; + if (list_to_string(v, str)) { + str.push_back('\0'); + MediumString out; + if (unquote_and_unescape(str.data(), out)) + return std::string(out.data(), out.size()); + else + return std::string(str.data(), str.size() - 1); + } else + return {}; } std::string format(const std::string& fmt, const AtomList& l) diff --git a/ceammc/ext/src/lib/ceammc_format.h b/ceammc/ext/src/lib/ceammc_format.h index aa5de27302..abc4d80a61 100644 --- a/ceammc/ext/src/lib/ceammc_format.h +++ b/ceammc/ext/src/lib/ceammc_format.h @@ -29,20 +29,9 @@ std::string to_string(const AtomList& l, const std::string& separator = " "); std::string to_string(const Message& m, const std::string& separator = " "); std::string to_json_string(const Atom& a); -std::string to_json_string(const AtomList& l); - -/** - * same as to_string(), but symbol's that contains spaces will be in double quotes, and if there's - * inner quotes, they will be escaped with '`' - * @example a b c -> "a b c", "abc" -> "`"abc`"" - * @param str - string to quote - * @return quoted string if needed - */ -std::string to_string_quoted(const std::string& str); -std::string to_string_quoted(const Atom& a); +std::string to_json_string(const AtomListView& lv); std::string parse_quoted(const Atom& str); -std::string parse_quoted(const AtomList& l); std::string parse_quoted(const AtomListView& v); std::string format(const std::string& fmt, const AtomList& l); diff --git a/ceammc/ext/src/lib/ceammc_function.cpp b/ceammc/ext/src/lib/ceammc_function.cpp index 46b72e6269..83e5a2ed65 100644 --- a/ceammc/ext/src/lib/ceammc_function.cpp +++ b/ceammc/ext/src/lib/ceammc_function.cpp @@ -19,7 +19,7 @@ #include "ceammc_platform.h" #include "ceammc_rtree.h" #include "fmt/format.h" -#include "muparser/muparser/include/muParser.h" +#include "muParser.h" #include #include @@ -28,7 +28,7 @@ namespace { using namespace ceammc; -AtomList fn_seq(const AtomList& a) +AtomList fn_seq(const AtomListView& a) { constexpr int MAXN = 1024; @@ -95,7 +95,7 @@ AtomList fn_seq(const AtomList& a) } } -AtomList fn_db2amp(const AtomList& args) +AtomList fn_db2amp(const AtomListView& args) { if (!args.isFloat()) { LIB_ERR << fmt::format("db2amp(): float expected, got: '{}'", to_string(args)); @@ -105,7 +105,7 @@ AtomList fn_db2amp(const AtomList& args) return { convert::dbfs2amp(args[0].asT()) }; } -AtomList fn_amp2db(const AtomList& args) +AtomList fn_amp2db(const AtomListView& args) { if (!args.isFloat()) { LIB_ERR << fmt::format("amp2db(): float expected, got: '{}'", to_string(args)); @@ -121,7 +121,7 @@ AtomList fn_amp2db(const AtomList& args) return { convert::amp2dbfs(f) }; } -AtomList fn_repeat(const AtomList& args) +AtomList fn_repeat(const AtomListView& args) { constexpr size_t MAX_RESULT_LEN = 1024; @@ -142,10 +142,10 @@ AtomList fn_repeat(const AtomList& args) return {}; } - return list::repeat(args.slice(1), N); + return list::repeat(args.subView(1), N); } -AtomList fn_reverse(const AtomList& args) +AtomList fn_reverse(const AtomListView& args) { AtomList res(args); res.reverse(); @@ -154,7 +154,7 @@ AtomList fn_reverse(const AtomList& args) #define RTREE_FN_NAME "rtree" -AtomList fn_rythm_tree(const AtomList& args) +AtomList fn_rythm_tree(const AtomListView& args) { const bool ok = args.size() == 2 && args[0].isFloat() && args[1].isDataType(DataTypeMList::dataType); if (!ok) { @@ -167,7 +167,7 @@ AtomList fn_rythm_tree(const AtomList& args) return rtree::rythm_tree(len, ml, RTREE_FN_NAME "(): ", LIB_ERR); } -AtomList fn_euclid(const AtomList& args) +AtomList fn_euclid(const AtomListView& args) { const bool ok = args.size() == 2 && args[0].isInteger() && args[1].isInteger(); if (!ok) { @@ -220,7 +220,7 @@ BuiltinFunctionMap::BuiltinFunctionMap() registerFn(gensym("seq"), fn_seq); registerFn(gensym("expr"), - [this](const AtomList& expr) -> AtomList { + [this](const AtomListView& expr) -> AtomList { const std::string str = to_string(expr, " "); try { math_parser_->SetExpr(str); @@ -232,7 +232,7 @@ BuiltinFunctionMap::BuiltinFunctionMap() } }); - registerFn(gensym("env"), [](const AtomList& name) -> AtomList { + registerFn(gensym("env"), [](const AtomListView& name) -> AtomList { if (!name.isSymbol()) { LIB_ERR << fmt::format("env(): environment variable name expected, got '{}'. usage: env(NAME)", to_string(name)); return {}; @@ -242,17 +242,19 @@ BuiltinFunctionMap::BuiltinFunctionMap() return { gensym(venv.c_str()) }; }); - registerFn(gensym("pi"), [](const AtomList& l) -> AtomList { return { m_pi * l.floatAt(0, 1) }; }); - registerFn(gensym("e"), [](const AtomList&) -> AtomList { return { m_exp }; }); - registerFn(gensym("sr"), [](const AtomList&) -> AtomList { return { sys_getsr() }; }); - registerFn(gensym("bs"), [](const AtomList&) -> AtomList { return { (t_float)sys_getblksize() }; }); + registerFn(gensym("pi"), [](const AtomListView& lv) -> AtomList { return { m_pi * lv.floatAt(0, 1) }; }); + registerFn(gensym("e"), [](const AtomListView&) -> AtomList { return { m_exp }; }); + registerFn(gensym("sr"), [](const AtomListView&) -> AtomList { return { sys_getsr() }; }); + registerFn(gensym("bs"), [](const AtomListView&) -> AtomList { return { (t_float)sys_getblksize() }; }); registerFn(gensym("mtof"), - [](const AtomList& a) -> AtomList { - return a.mapFloat([](t_float f) { return convert::midi2freq(f); }); + [](const AtomListView& a) -> AtomList { + AtomList res; + a.mapFloat([](t_float f) { return convert::midi2freq(f); }, res); + return res; }); - registerFn(gensym("ftom"), [](const AtomList& a) -> AtomList { return { convert::freq2midi(a.floatAt(0, 0)) }; }); - registerFn(gensym("ms2bpm"), [](const AtomList& a) -> AtomList { return { t_float(60000 / a.floatAt(0, 1)) }; }); - registerFn(gensym("bpm2ms"), [](const AtomList& a) -> AtomList { return { t_float(60000 / a.floatAt(0, 1)) }; }); + registerFn(gensym("ftom"), [](const AtomListView& a) -> AtomList { return { convert::freq2midi(a.floatAt(0, 0)) }; }); + registerFn(gensym("ms2bpm"), [](const AtomListView& a) -> AtomList { return { t_float(60000 / a.floatAt(0, 1)) }; }); + registerFn(gensym("bpm2ms"), [](const AtomListView& a) -> AtomList { return { t_float(60000 / a.floatAt(0, 1)) }; }); registerFn(gensym("db2amp"), fn_db2amp); registerFn(gensym("amp2db"), fn_amp2db); registerFn(gensym("repeat"), fn_repeat); @@ -271,7 +273,7 @@ BuiltinFunctionMap& BuiltinFunctionMap::instance() return instance_; } -AtomList BuiltinFunctionMap::call(t_symbol* name, const AtomList& args) const +AtomList BuiltinFunctionMap::call(t_symbol* name, const AtomListView& args) const { auto it = std::find_if( fn_map_.cbegin(), diff --git a/ceammc/ext/src/lib/ceammc_function.h b/ceammc/ext/src/lib/ceammc_function.h index 932a59580f..25f26754a5 100644 --- a/ceammc/ext/src/lib/ceammc_function.h +++ b/ceammc/ext/src/lib/ceammc_function.h @@ -25,7 +25,7 @@ class Parser; namespace ceammc { -using BuiltinFunction = std::function; +using BuiltinFunction = std::function; class BuiltinFunctionMap { using FnPair = std::pair; @@ -42,7 +42,7 @@ class BuiltinFunctionMap { public: static BuiltinFunctionMap& instance(); - AtomList call(t_symbol* name, const AtomList& args) const; + AtomList call(t_symbol* name, const AtomListView& args) const; bool exists(t_symbol* name) const; bool registerFn(t_symbol* name, BuiltinFunction fn); diff --git a/ceammc/ext/src/lib/ceammc_globaldata.h b/ceammc/ext/src/lib/ceammc_globaldata.h index e40cacf6e3..427abebc85 100644 --- a/ceammc/ext/src/lib/ceammc_globaldata.h +++ b/ceammc/ext/src/lib/ceammc_globaldata.h @@ -42,7 +42,7 @@ class NamedDataDict { static T* ref_val(iterator it) { return it->second.second; } public: - NamedDataDict() {} + NamedDataDict() { } ~NamedDataDict() { @@ -165,8 +165,7 @@ class NamedDataDict { template class GlobalData { private: - typedef typename NamedDataDict::iterator iterator; - const static int log_level = 0; + using iterator = typename NamedDataDict::iterator; private: static NamedDataDict& data() @@ -195,20 +194,12 @@ class GlobalData { if (ptr_ == 0) { // if not found data().create(name, new T()); ptr_ = data().acquire(name); - - verbose(log_level, "[%s %s] created", descr_.c_str(), name_->s_name); } - - verbose(log_level, "[%s %s] +1", descr_.c_str(), name_->s_name); } ~GlobalData() { - verbose(log_level, "[%s %s] -1", descr_.c_str(), name_->s_name); data().release(name_); - - if (!data().contains(name_)) - verbose(log_level, "[%s %s] destroyed", descr_.c_str(), name_->s_name); } /** diff --git a/ceammc/ext/src/lib/ceammc_impl.cpp b/ceammc/ext/src/lib/ceammc_impl.cpp index b30f614221..9b222a8f9f 100644 --- a/ceammc/ext/src/lib/ceammc_impl.cpp +++ b/ceammc/ext/src/lib/ceammc_impl.cpp @@ -12,10 +12,46 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_impl.h" +#include "m_pd.h" -#include +#include +extern "C" { #include "m_imp.h" +} + +/// 0.51 t_methodentry +typedef struct _methodentry51 { + t_symbol* me_name; + t_gotfn me_fun; + t_atomtype me_arg[MAXPDARG + 1]; +} t_methodentry51; + +/// 0.52 t_methodentry +typedef struct _methodentry52 { + t_symbol* me_name; + t_gotfn me_fun; + unsigned char me_arg[MAXPDARG + 1]; +} t_methodentry52; + +namespace { + +template +T* class_get_method(t_class* c, int n) +{ +#ifdef PDINSTANCE + return reinterpret_cast(c->c_methods[pd_this->pd_instanceno]) + n; +#else + return reinterpret_cast(c->c_methods) + n; +#endif +} + +template +t_symbol* class_get_method_name(t_class* c, int n) +{ + return class_get_method(c, n)->me_name; +} +} namespace ceammc { @@ -29,4 +65,59 @@ PdBangFunction default_pd_bang_fn(t_class* c) return reinterpret_cast(c->c_bangmethod); } +t_symbol* class_method_name(t_class* c, int method_idx) +{ + if (!c) + return nullptr; + + if (method_idx < 0 || method_idx >= c->c_nmethod) + return nullptr; + + if (is_ceammc_distribution()) + return class_get_method_name(c, method_idx); + else { + int maj, min, bug; + sys_getversion(&maj, &min, nullptr); + int int_vers = maj * 100 + min; + if (int_vers < 52) + return class_get_method_name(c, method_idx); + else + return class_get_method_name(c, method_idx); + } +} + +bool is_ceammc_distribution() +{ + static const bool is_ceammc = (getenv("is_ceammc") != nullptr); + return is_ceammc; +} + +bool class_method_set_fn(t_class* c, int method_idx, void* fn) +{ + if (!c) + return false; + + if (method_idx < 0 || method_idx >= c->c_nmethod) + return false; + + if (is_ceammc_distribution()) { + auto m = class_get_method(c, method_idx); + m->me_fun = reinterpret_cast(fn); + return true; + } else { + int maj, min, bug; + sys_getversion(&maj, &min, nullptr); + int int_vers = maj * 100 + min; + if (int_vers < 52) { + auto m = class_get_method(c, method_idx); + m->me_fun = reinterpret_cast(fn); + } else { + auto m = class_get_method(c, method_idx); + m->me_fun = reinterpret_cast(fn); + } + + return true; + } +} + } // namespace ceammc diff --git a/ceammc/ext/src/lib/ceammc_impl.h b/ceammc/ext/src/lib/ceammc_impl.h index b449ba934b..df96586181 100644 --- a/ceammc/ext/src/lib/ceammc_impl.h +++ b/ceammc/ext/src/lib/ceammc_impl.h @@ -17,6 +17,7 @@ struct _class; struct _symbol; struct _atom; +struct _methodentry; namespace ceammc { @@ -29,6 +30,23 @@ typedef void (*PdAnyFunction)(_class*, _symbol*, int argc, _atom* argv); PdBangFunction default_pd_bang_fn(_class* c); PdFloatFunction default_pd_float_fn(_class* c); +/** + * get class method name by given index + * @param c - pointer to class + * @param method_idx - method index + * @return method name or NULL on error + */ +_symbol* class_method_name(_class* c, int method_idx); + +bool class_method_set_fn(_class*c, int method_idx, void* fn); + +/** + * runtime check if external running under CEAMMC distribution + */ +bool is_ceammc_distribution(); + + + } // namespace ceammc #endif // CEAMMC_IMPL_H diff --git a/ceammc/ext/src/lib/ceammc_inlet.cpp b/ceammc/ext/src/lib/ceammc_inlet.cpp new file mode 100644 index 0000000000..28a9dd0274 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_inlet.cpp @@ -0,0 +1,149 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ + +#include "ceammc_inlet.h" + +extern "C" { +#include "m_imp.h" + +// Note: keep in sync with m_obj.c +union inletunion { + t_symbol* iu_symto; + t_gpointer* iu_pointerslot; + t_float* iu_floatslot; + t_symbol** iu_symslot; + t_float iu_floatsignalvalue; +}; + +// Note: keep in sync with m_obj.c +struct _inlet { + t_pd i_pd; + struct _inlet* i_next; + t_object* i_owner; + t_pd* i_dest; + t_symbol* i_symfrom; + union inletunion i_un; +}; +} + +namespace ceammc { +namespace util { + + size_t inlet_count(t_object* x) + { + if (!x) + return 0; + + return obj_ninlets(x); + } + + t_inlet* inlet_next(t_inlet* x) + { + return x ? x->i_next : nullptr; + } + + t_object* inlet_owner(t_inlet* x) + { + return x ? x->i_owner : nullptr; + } + + t_pd* inlet_get_dest(t_inlet* x) + { + return x ? x->i_dest : nullptr; + } + + bool inlet_is_signal(t_inlet* x) + { + if (!x) + return false; + + return x->i_symfrom == &s_signal; + } + + t_pd* inlet_object(t_inlet* x) + { + return x ? &x->i_pd : nullptr; + } + + void inlet_set_dest(t_inlet* x, t_pd* dest) + { + if (x) + x->i_dest = dest; + } + + void inlet_set_signal(t_inlet* x, bool v) + { + if (x) { + if (v) { + x->i_symfrom = &s_signal; + x->i_un.iu_floatsignalvalue = 0; + } else { + x->i_symfrom = nullptr; + x->i_un.iu_symto = nullptr; + } + } + } + +} + +InletIterator::InletIterator(const t_object* obj) + : obj_(obj) + , inlet_(nullptr) +{ + reset(); +} + +bool InletIterator::isSignal() const +{ + return util::inlet_is_signal(inlet_); +} + +void InletIterator::setSignal(bool v) +{ + util::inlet_set_signal(inlet_, v); +} + +void InletIterator::reset() +{ + if (obj_) + inlet_ = obj_->te_inlet; +} + +InletIterator& InletIterator::next() +{ + inlet_ = util::inlet_next(inlet_); + return *this; +} + +InletIterator::operator bool() +{ + return inlet_ != nullptr; +} + +t_pd* InletIterator::asObject() +{ + return util::inlet_object(inlet()); +} + +t_pd* InletIterator::destination() +{ + return util::inlet_get_dest(inlet_); +} + +void InletIterator::setDestination(t_pd* dest) +{ + util::inlet_set_dest(inlet_, dest); +} + +} diff --git a/ceammc/ext/src/lib/ceammc_inlet.h b/ceammc/ext/src/lib/ceammc_inlet.h new file mode 100644 index 0000000000..058b2007be --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_inlet.h @@ -0,0 +1,54 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ + +#ifndef CEAMMC_INLET_H +#define CEAMMC_INLET_H + +#include "m_pd.h" + +namespace ceammc { +namespace util { + size_t inlet_count(t_object* x); + t_inlet* inlet_next(t_inlet* x); + t_object* inlet_owner(t_inlet* x); + t_pd* inlet_get_dest(t_inlet* x); + void inlet_set_dest(t_inlet* x, t_pd* dest); + t_pd* inlet_object(t_inlet* x); + bool inlet_is_signal(t_inlet* x); + void inlet_set_signal(t_inlet* x, bool v); +} + +class InletIterator { + const t_object* obj_; + t_inlet* inlet_; + +public: + InletIterator(const t_object* obj); + + bool isSignal() const; + void setSignal(bool v); + void reset(); + InletIterator& next(); + operator bool(); + + t_inlet* inlet() { return inlet_; } + t_pd* asObject(); + + t_pd* destination(); + void setDestination(t_pd* dest); +}; + +} + +#endif // CEAMMC_INLET_H diff --git a/ceammc/ext/src/lib/ceammc_json.cpp b/ceammc/ext/src/lib/ceammc_json.cpp index 38eac1499e..8e35c58e2c 100644 --- a/ceammc/ext/src/lib/ceammc_json.cpp +++ b/ceammc/ext/src/lib/ceammc_json.cpp @@ -12,7 +12,6 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_json.h" -#include "ceammc_format.h" #include "datatype_dict.h" #include "datatype_mlist.h" #include "datatype_string.h" @@ -22,22 +21,22 @@ namespace ceammc { namespace json { - static nlohmann::json to_json_struct(const Atom& a); - static nlohmann::json to_json_struct(const AtomList& l); - static nlohmann::json to_json_struct(const DataTypeDict& dict); - static nlohmann::json to_json_struct(const DataTypeString& str); + static nlohmann::json to_json_struct(const Atom& a, const JsonWriteOpts& opt); + static nlohmann::json to_json_struct(const AtomList& l, const JsonWriteOpts& opt); + static nlohmann::json to_json_struct(const DataTypeDict& dict, const JsonWriteOpts& opt); + static nlohmann::json to_json_struct(const DataTypeString& str, const JsonWriteOpts& opt); - static nlohmann::json to_json_struct(const AtomList& l) + static nlohmann::json to_json_struct(const AtomList& l, const JsonWriteOpts& opt) { nlohmann::json arr = nlohmann::json::array(); for (const Atom& a : l) - arr.push_back(to_json_struct(a)); + arr.push_back(to_json_struct(a, opt)); return arr; } - static nlohmann::json to_json_struct(const DataTypeDict& dict) + static nlohmann::json to_json_struct(const DataTypeDict& dict, const JsonWriteOpts& opt) { auto obj = nlohmann::json::object(); @@ -45,21 +44,21 @@ namespace json { auto key = kv.first->s_name; auto& value = kv.second; - if (value.isA() ) - obj[key] = to_json_struct(value.asT()); + if (opt.compressSingleList && value.isA()) + obj[key] = to_json_struct(value.asT(), opt); else - obj[key] = to_json_struct(value); + obj[key] = to_json_struct(value, opt); } return obj; } - static nlohmann::json to_json_struct(const DataTypeString& str) + static nlohmann::json to_json_struct(const DataTypeString& str, const JsonWriteOpts& opt) { return nlohmann::json(str.str()); } - static nlohmann::json to_json_struct(const Atom& a) + static nlohmann::json to_json_struct(const Atom& a, const JsonWriteOpts& opt) { if (a.isSymbol()) return nlohmann::json(a.asSymbol()->s_name); @@ -68,40 +67,40 @@ namespace json { else if (a.isFloat()) return nlohmann::json(a.asFloat()); else if (a.isA()) - return to_json_struct(a.asD()->data()); + return to_json_struct(a.asD()->data(), opt); else if (a.isA()) - return to_json_struct(*a.asD()); + return to_json_struct(*a.asD(), opt); else if (a.isA()) - return to_json_struct(*a.asD()); + return to_json_struct(*a.asD(), opt); else if (a.isData()) - return nlohmann::json::parse(a.asData()->valueToJsonString()); + return nlohmann::json::parse(a.asData()->toJsonString()); else return nlohmann::json(); } - std::string to_json(const Atom& a, int indent) + std::string to_json_string(const Atom& a, const JsonWriteOpts& opt) { - return to_json_struct(a).dump(indent); + return to_json_struct(a, opt).dump(opt.indent); } - std::string to_json(const AtomList& l, int indent) + std::string to_json_string(const AtomList& l, const JsonWriteOpts& opt) { - return to_json_struct(l).dump(indent); + return to_json_struct(l, opt).dump(opt.indent); } - std::string to_json(const DataTypeString& str, int indent) + std::string to_json_string(const DataTypeString& str, const JsonWriteOpts& opt) { - return to_json_struct(str).dump(indent); + return to_json_struct(str, opt).dump(opt.indent); } - std::string to_json(const DataTypeMList& ml, int indent) + std::string to_json_string(const DataTypeMList& ml, const JsonWriteOpts& opt) { - return to_json_struct(ml.data()).dump(indent); + return to_json_struct(ml.data(), opt).dump(opt.indent); } - std::string to_json(const DataTypeDict& dict, int indent) + std::string to_json_string(const DataTypeDict& dict, const JsonWriteOpts& opt) { - return to_json_struct(dict).dump(indent); + return to_json_struct(dict, opt).dump(opt.indent); } } } diff --git a/ceammc/ext/src/lib/ceammc_json.h b/ceammc/ext/src/lib/ceammc_json.h index 8a29787b5b..52d4aeca19 100644 --- a/ceammc/ext/src/lib/ceammc_json.h +++ b/ceammc/ext/src/lib/ceammc_json.h @@ -22,11 +22,16 @@ namespace ceammc { namespace json { - std::string to_json(const Atom& a, int indent = -1); - std::string to_json(const AtomList& l, int indent = -1); - std::string to_json(const DataTypeString& str, int indent = -1); - std::string to_json(const DataTypeMList& ml, int indent = -1); - std::string to_json(const DataTypeDict& dict, int indent = -1); + struct JsonWriteOpts { + int indent { -1 }; + bool compressSingleList { true }; + }; + + std::string to_json_string(const Atom& a, const JsonWriteOpts& opt = JsonWriteOpts()); + std::string to_json_string(const AtomList& l, const JsonWriteOpts& opt = JsonWriteOpts()); + std::string to_json_string(const DataTypeString& str, const JsonWriteOpts& opt = JsonWriteOpts()); + std::string to_json_string(const DataTypeMList& ml, const JsonWriteOpts& opt = JsonWriteOpts()); + std::string to_json_string(const DataTypeDict& dict, const JsonWriteOpts& opt = JsonWriteOpts()); } } diff --git a/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m b/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m index 988d11d51a..d0b6937ff6 100644 --- a/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m +++ b/ceammc/ext/src/lib/ceammc_loader_coreaudio_impl.m @@ -14,7 +14,7 @@ #include "ceammc_loader_coreaudio_impl.h" -#include +#include #include #include @@ -304,7 +304,7 @@ int64_t ceammc_coreaudio_load(const char* path, size_t channel, size_t offset, s for (UInt32 i = 0; i < frameCount && (frameIdx < count) && (frameIdx < max_samples); i++) { buf[frameIdx].w_float = data[audioOutFmt.mChannelsPerFrame * i + channel] * gain; frameIdx++; - } + } } } diff --git a/ceammc/ext/src/lib/ceammc_loader_minimp3.cpp b/ceammc/ext/src/lib/ceammc_loader_minimp3.cpp index a93ccb7120..bea1b506bf 100644 --- a/ceammc/ext/src/lib/ceammc_loader_minimp3.cpp +++ b/ceammc/ext/src/lib/ceammc_loader_minimp3.cpp @@ -26,6 +26,13 @@ #include "minimp3.h" #include "minimp3_ex.h" +#ifdef WITH_LIBSAMPLERATE +#include "samplerate.h" + +using SampleRatePtr = std::unique_ptr; + +#endif + namespace { using SoxPtr = std::unique_ptr; @@ -136,6 +143,143 @@ namespace sound { return readed / NUM_CH; } +#ifdef WITH_LIBSAMPLERATE + long MiniMp3::readResampled(t_word* dest, size_t sz, size_t ch, long offset, size_t max_samples) + { + static_assert(std::is_same::value, ""); + + if (resampleRatio() < 0.001) { + LIB_ERR << "[minimp3] invalid resample ratio: " << resampleRatio(); + return -1; + } + + if (!decoder_) { + LIB_ERR << "[minimp3] decoder init error"; + return -1; + } + + const auto NUM_CH = channels(); + if (ch >= NUM_CH) { + LIB_ERR << "[minimp3] invalid channel number: " << ch; + return -1; + } + + // seek to position + const auto pos = std::min(offset * NUM_CH * resampleRatio(), sampleCount()); + if (pos > 0 && mp3dec_ex_seek(decoder_.get(), pos)) { + LIB_ERR << "[minimp3] can't seek to pos #" << offset; + return -1; + } + + if (debug) + LIB_DBG << "offset " << pos; + + int sr_error = 0; + SampleRatePtr libsr(src_new(SRC_SINC_BEST_QUALITY, NUM_CH, &sr_error), &src_delete); + if (!libsr) { + LIB_ERR << "[libsamplerate] init error: " << src_strerror(sr_error); + return -1; + } + + sr_error = src_set_ratio(libsr.get(), resampleRatio()); + if (sr_error) { + LIB_ERR << "[libsamplerate] can't set ratio: " << src_strerror(sr_error); + return -1; + } + + // decode to buffer + const size_t mp3_out_bufsize = MINIMP3_MAX_SAMPLES_PER_FRAME; + std::vector in_buffer(mp3_out_bufsize); + const size_t should_read = sz * NUM_CH; + + if (debug) + LIB_DBG << "should output " << should_read << " samples"; + + const size_t OUT_BUF_SIZE = std::round(in_buffer.size() * resampleRatio()); + std::vector out_buf(OUT_BUF_SIZE); + + size_t total_decoded_mp3_samples = 0; + size_t total_output_samples = 0; + t_word* x = dest; + while (total_output_samples < should_read) { + bool eof = false; + // read to buffer + const auto nsamp = mp3dec_ex_read(decoder_.get(), in_buffer.data(), in_buffer.size()); + total_decoded_mp3_samples += nsamp; + + if (nsamp != in_buffer.size()) { /* normal eof or error condition */ + if (decoder_->last_error) { + LIB_ERR << "[minimp3] read error"; + return -1; + } + + // eof + eof = true; + } + + /* + * Copy data from the mp3 decoder buffer into the resampler and resample + * to produce as much output as is possible to the given output buffer: + */ + SRC_DATA data = { 0 }; + data.data_in = in_buffer.data(); + data.input_frames = in_buffer.size(); + data.data_out = out_buf.data(); + data.output_frames = out_buf.size(); + data.src_ratio = resampleRatio(); + data.end_of_input = 0; + + sr_error = src_process(libsr.get(), &data); + if (sr_error) { + LIB_ERR << "[libsamplerate] error: " << src_strerror(sr_error); + return -1; + } + + // write channel data to destination + for (size_t j = 0; total_output_samples < max_samples; j++) { + x->w_float = out_buf[j * NUM_CH + ch] * gain(); + x++; + total_output_samples++; + } + + if (eof) + break; + } + + // process remaining resample data + while (true) { + SRC_DATA data = { 0 }; + data.data_in = in_buffer.data(); + data.input_frames = in_buffer.size(); + data.data_out = out_buf.data(); + data.output_frames = out_buf.size(); + data.src_ratio = resampleRatio(); + data.end_of_input = 1; + sr_error = src_process(libsr.get(), &data); + if (sr_error) { + LIB_ERR << "[libsamplerate] error: " << src_strerror(sr_error); + return -1; + } + + if (!data.output_frames_gen) + break; + + // write channel data to destination + for (size_t j = 0; total_output_samples < max_samples; j++) { + x->w_float = out_buf[j * NUM_CH + ch] * gain(); + x++; + total_output_samples++; + } + } + + if (debug) { + LIB_ERR << "total decoded mp3 samples: " << total_decoded_mp3_samples; + LIB_ERR << "total output samples: " << total_output_samples; + } + + return total_output_samples; + } +#else long MiniMp3::readResampled(t_word* dest, size_t sz, size_t ch, long offset, size_t max_samples) { if (resampleRatio() < 0.001) { @@ -158,7 +302,7 @@ namespace sound { soxr_error_t error; SoxPtr soxr(ceammc_soxr_create(resampleRatio(), NUM_CH, &error), &soxr_delete); - if (error) { + if (error || !soxr) { LIB_ERR << "[minimp3] resampler init failed: " << error; return -1; } @@ -253,6 +397,7 @@ namespace sound { return total_output_samples; } +#endif FormatList MiniMp3::supportedFormats() { diff --git a/ceammc/ext/src/lib/ceammc_log.cpp b/ceammc/ext/src/lib/ceammc_log.cpp index f0700b5185..f821515880 100644 --- a/ceammc/ext/src/lib/ceammc_log.cpp +++ b/ceammc/ext/src/lib/ceammc_log.cpp @@ -61,14 +61,14 @@ void pdLog(const void* pd_obj, LogLevel level, const std::string& s) assert(N < MAXPDSTRING); if (s.size() < N) { - logpost(pd_obj, static_cast(level), PD_LOG_FMT, name, s.c_str()); + logpost(pd_obj, static_cast(level), PD_LOG_FMT, name, s.c_str()); } else { char buf[MAXPDSTRING] = { 0 }; for (size_t i = 0; i < s.size(); i += N) { const auto len = s.copy(buf, N, i); buf[len] = '\0'; - logpost(pd_obj, static_cast(level), PD_LOG_FMT, name, s.c_str()); + logpost(pd_obj, static_cast(level), PD_LOG_FMT, name, s.c_str()); } } } diff --git a/ceammc/ext/src/lib/ceammc_message.cpp b/ceammc/ext/src/lib/ceammc_message.cpp index 660fe72f74..82947c6f84 100644 --- a/ceammc/ext/src/lib/ceammc_message.cpp +++ b/ceammc/ext/src/lib/ceammc_message.cpp @@ -245,7 +245,7 @@ void Message::output(t_outlet* x) const outlet_symbol(x, value_.asT()); break; case LIST: - outletAtomList(x, v_list_); + outletAtomList(x, v_list_.view()); break; case ANY: outlet_anything(x, diff --git a/ceammc/ext/src/lib/ceammc_music_scale.cpp b/ceammc/ext/src/lib/ceammc_music_scale.cpp index faba684799..815eaaaa7f 100644 --- a/ceammc/ext/src/lib/ceammc_music_scale.cpp +++ b/ceammc/ext/src/lib/ceammc_music_scale.cpp @@ -20,7 +20,7 @@ namespace ceammc { namespace music { - Scale::Scale(t_symbol* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName) + Scale::Scale(const char* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName) : name_(name) , full_name_(fullName) , pitches_per_octave_(pitchesPerOctave) @@ -29,7 +29,7 @@ namespace music { { auto it = std::max_element(degrees.begin(), degrees.end()); if (it == degrees.end()) { - LIB_ERR << "empty scale: " << name->s_name; + LIB_ERR << "empty scale: " << name; return; } @@ -57,159 +57,189 @@ namespace music { } } + bool Scale::find(t_float degree) const + { + return std::find(degrees_i_.begin(), degrees_i_.end(), degree) != degrees_i_.end(); + } + + bool Scale::findNearest(t_float degree, t_float& result) const + { + if (degree < 0 || degree >= pitches_per_octave_ || degrees_i_.empty()) + return false; + + for (size_t i = 1; i < degrees_i_.size(); i++) { + auto a = degrees_i_[i - 1]; + auto b = degrees_i_[i]; + + if (a == degree || b == degree) { // exact match + result = degree; + return true; + } else if (a < degree && degree < b) { // between degrees: select closest + result = (degree - a) < (b - degree) ? a : b; + return true; + } + } + + // degree > last pitch + result = (degree - degrees_i_.back()) <= (pitches_per_octave_ - degree) ? degrees_i_.back() : pitches_per_octave_; + return true; + } + ScaleLibrary::ScaleLibrary() { - insert(gensym("minor_pentatonic"), { 0, 3, 5, 7, 10 }, 12, "Minor Pentatonic"); - insert(gensym("major_pentatonic"), { 0, 2, 4, 7, 9 }, 12, "Major Pentatonic"); - insert(gensym("ritusen"), { 0, 2, 5, 7, 9 }, 12, "Ritusen"); - insert(gensym("egyptian"), { 0, 2, 5, 7, 10 }, 12, "Egyptian"); - insert(gensym("kumoi"), { 0, 2, 3, 7, 9 }, 12, "Kumoi"); - insert(gensym("hirajoshi"), { 0, 2, 3, 7, 8 }, 12, "Hirajoshi"); - insert(gensym("iwato"), { 0, 1, 5, 6, 10 }, 12, "Iwato"); - insert(gensym("chinese"), { 0, 4, 6, 7, 11 }, 12, "Chinese"); - insert(gensym("indian"), { 0, 4, 5, 7, 10 }, 12, "Indian"); - insert(gensym("pelog"), { 0, 1, 3, 7, 8 }, 12, "Pelog"); - insert(gensym("prometheus"), { 0, 2, 4, 6, 11 }, 12, "Prometheus"); - insert(gensym("scriabin"), { 0, 1, 4, 7, 9 }, 12, "Scriabin"); - insert(gensym("gong"), { 0, 2, 4, 7, 9 }, 12, "Gong"); - insert(gensym("shang"), { 0, 2, 5, 7, 10 }, 12, "Shang"); - insert(gensym("jiao"), { 0, 3, 5, 8, 10 }, 12, "Jiao"); - insert(gensym("zhi"), { 0, 2, 5, 7, 9 }, 12, "Zhi"); - insert(gensym("yu"), { 0, 3, 5, 7, 10 }, 12, "Yu"); - insert(gensym("whole"), { 0, 2, 4, 6, 8, 10 }, 12, "Whole Tone"); - insert(gensym("augmented"), { 0, 1, 4, 5, 8, 9 }, 12, "Augmented"); - insert(gensym("augmented2"), { 0, 3, 4, 7, 8, 11 }, 12, "Augmented 2"); - insert(gensym("partch_o1"), { 0, 8, 14, 20, 25, 34 }, 43, "Partch Otonality 1"); - insert(gensym("partch_o2"), { 0, 7, 13, 18, 27, 35 }, 43, "Partch Otonality 2"); - insert(gensym("partch_o3"), { 0, 6, 12, 21, 29, 36 }, 43, "Partch Otonality 3"); - insert(gensym("partch_o4"), { 0, 5, 15, 23, 30, 37 }, 43, "Partch Otonality 4"); - insert(gensym("partch_o5"), { 0, 10, 18, 25, 31, 38 }, 43, "Partch Otonality 5"); - insert(gensym("partch_o6"), { 0, 9, 18, 23, 29, 35 }, 43, "Partch Otonality 6"); - insert(gensym("partch_u1"), { 0, 9, 18, 23, 29, 35 }, 43, "Partch Utonality 1"); - insert(gensym("partch_u2"), { 0, 8, 16, 25, 30, 36 }, 43, "Partch Utonality 2"); - insert(gensym("partch_u3"), { 0, 7, 14, 22, 31, 37 }, 43, "Partch Utonality 3"); - insert(gensym("partch_u4"), { 0, 6, 13, 20, 28, 38 }, 43, "Partch Utonality 4"); - insert(gensym("partch_u5"), { 0, 5, 12, 18, 25, 33 }, 43, "Partch Utonality 5"); - insert(gensym("partch_u6"), { 0, 10, 15, 21, 27, 34 }, 43, "Partch Utonality 6"); - insert(gensym("hex_major7"), { 0, 2, 4, 7, 9, 11 }, 12, "Hex Major 7"); - insert(gensym("hex_dorian"), { 0, 2, 3, 5, 7, 10 }, 12, "Hex Dorian"); - insert(gensym("hex_phrygian"), { 0, 1, 3, 5, 8, 10 }, 12, "Hex Phrygian"); - insert(gensym("hex_sus"), { 0, 2, 5, 7, 9, 10 }, 12, "Hex Sus"); - insert(gensym("hex_major6"), { 0, 2, 4, 5, 7, 9 }, 12, "Hex Major 6"); - insert(gensym("hex_aeolian"), { 0, 3, 5, 7, 8, 10 }, 12, "Hex Aeolian"); +#define INSERT_INTERNAL(name, descr, num, ...) insertInternal(name, name##_hash, { __VA_ARGS__ }, num, descr) + + INSERT_INTERNAL("minor_pentatonic", "Minor Pentatonic", 12, 0, 3, 5, 7, 10); + INSERT_INTERNAL("major_pentatonic", "Major Pentatonic", 12, 0, 2, 4, 7, 9); + INSERT_INTERNAL("ritusen", "Ritusen", 12, 0, 2, 5, 7, 9); + INSERT_INTERNAL("egyptian", "Egyptian", 12, 0, 2, 5, 7, 10); + INSERT_INTERNAL("kumoi", "Kumoi", 12, 0, 2, 3, 7, 9); + INSERT_INTERNAL("hirajoshi", "Hirajoshi", 12, 0, 2, 3, 7, 8); + INSERT_INTERNAL("iwato", "Iwato", 12, 0, 1, 5, 6, 10); + INSERT_INTERNAL("chinese", "Chinese", 12, 0, 4, 6, 7, 11); + INSERT_INTERNAL("indian", "Indian", 12, 0, 4, 5, 7, 10); + INSERT_INTERNAL("pelog", "Pelog", 12, 0, 1, 3, 7, 8); + INSERT_INTERNAL("prometheus", "Prometheus", 12, 0, 2, 4, 6, 11); + INSERT_INTERNAL("scriabin", "Scriabin", 12, 0, 1, 4, 7, 9); + INSERT_INTERNAL("gong", "Gong", 12, 0, 2, 4, 7, 9); + INSERT_INTERNAL("shang", "Shang", 12, 0, 2, 5, 7, 10); + INSERT_INTERNAL("jiao", "Jiao", 12, 0, 3, 5, 8, 10); + INSERT_INTERNAL("zhi", "Zhi", 12, 0, 2, 5, 7, 9); + INSERT_INTERNAL("yu", "Yu", 12, 0, 3, 5, 7, 10); + INSERT_INTERNAL("whole", "Whole Tone", 12, 0, 2, 4, 6, 8, 10); + INSERT_INTERNAL("augmented", "Augmented", 12, 0, 1, 4, 5, 8, 9); + INSERT_INTERNAL("augmented2", "Augmented 2", 12, 0, 3, 4, 7, 8, 11); + INSERT_INTERNAL("partch_o1", "Partch Otonality 1", 43, 0, 8, 14, 20, 25, 34); + INSERT_INTERNAL("partch_o2", "Partch Otonality 2", 43, 0, 7, 13, 18, 27, 35); + INSERT_INTERNAL("partch_o3", "Partch Otonality 3", 43, 0, 6, 12, 21, 29, 36); + INSERT_INTERNAL("partch_o4", "Partch Otonality 4", 43, 0, 5, 15, 23, 30, 37); + INSERT_INTERNAL("partch_o5", "Partch Otonality 5", 43, 0, 10, 18, 25, 31, 38); + INSERT_INTERNAL("partch_o6", "Partch Otonality 6", 43, 0, 9, 18, 23, 29, 35); + INSERT_INTERNAL("partch_u1", "Partch Utonality 1", 43, 0, 9, 18, 23, 29, 35); + INSERT_INTERNAL("partch_u2", "Partch Utonality 2", 43, 0, 8, 16, 25, 30, 36); + INSERT_INTERNAL("partch_u3", "Partch Utonality 3", 43, 0, 7, 14, 22, 31, 37); + INSERT_INTERNAL("partch_u4", "Partch Utonality 4", 43, 0, 6, 13, 20, 28, 38); + INSERT_INTERNAL("partch_u5", "Partch Utonality 5", 43, 0, 5, 12, 18, 25, 33); + INSERT_INTERNAL("partch_u6", "Partch Utonality 6", 43, 0, 10, 15, 21, 27, 34); + INSERT_INTERNAL("hex_major7", "Hex Major 7", 12, 0, 2, 4, 7, 9, 11); + INSERT_INTERNAL("hex_dorian", "Hex Dorian", 12, 0, 2, 3, 5, 7, 10); + INSERT_INTERNAL("hex_phrygian", "Hex Phrygian", 12, 0, 1, 3, 5, 8, 10); + INSERT_INTERNAL("hex_sus", "Hex Sus", 12, 0, 2, 5, 7, 9, 10); + INSERT_INTERNAL("hex_major6", "Hex Major 6", 12, 0, 2, 4, 5, 7, 9); + INSERT_INTERNAL("hex_aeolian", "Hex Aeolian", 12, 0, 3, 5, 7, 8, 10); // 7 note scales - insert(gensym("major"), { 0, 2, 4, 5, 7, 9, 11 }, 12, "Major"); - insert(gensym("ionian"), { 0, 2, 4, 5, 7, 9, 11 }, 12, "Ionian"); - insert(gensym("dorian"), { 0, 2, 3, 5, 7, 9, 10 }, 12, "Dorian"); - insert(gensym("phrygian"), { 0, 1, 3, 5, 7, 8, 10 }, 12, "Phrygian"); - insert(gensym("lydian"), { 0, 2, 4, 6, 7, 9, 11 }, 12, "Lydian"); - insert(gensym("mixolydian"), { 0, 2, 4, 6, 7, 9, 11 }, 12, "Mixolydian"); - insert(gensym("aeolian"), { 0, 2, 3, 5, 7, 8, 10 }, 12, "Aeolian"); - insert(gensym("minor"), { 0, 2, 3, 5, 7, 8, 10 }, 12, "Natural Minor"); - insert(gensym("locrian"), { 0, 1, 3, 5, 6, 8, 10 }, 12, "Locrian"); - - insert(gensym("minor_harmonic"), { 0, 2, 3, 5, 7, 8, 11 }, 12, "Harmonic Minor"); - insert(gensym("major_harmonic"), { 0, 2, 4, 5, 7, 8, 11 }, 12, "Harmonic Major"); - - insert(gensym("minor_melodic"), { 0, 2, 3, 5, 7, 9, 11 }, 12, "Melodic Minor"); - insert(gensym("minor_melodic_desc"), { 0, 2, 3, 5, 7, 8, 10 }, 12, "Melodic Minor Descending"); - insert(gensym("major_melodic"), { 0, 2, 4, 5, 7, 8, 10 }, 12, "Melodic Major"); - - insert(gensym("bartok"), { 0, 2, 4, 5, 7, 8, 10 }, 12, "Bartok"); - insert(gensym("hindu"), { 0, 2, 4, 5, 7, 8, 10 }, 12, "Hindu"); + insert("major", { 0, 2, 4, 5, 7, 9, 11 }, 12, "Major"); + insert("ionian", { 0, 2, 4, 5, 7, 9, 11 }, 12, "Ionian"); + insert("dorian", { 0, 2, 3, 5, 7, 9, 10 }, 12, "Dorian"); + insert("phrygian", { 0, 1, 3, 5, 7, 8, 10 }, 12, "Phrygian"); + insert("lydian", { 0, 2, 4, 6, 7, 9, 11 }, 12, "Lydian"); + insert("mixolydian", { 0, 2, 4, 6, 7, 9, 11 }, 12, "Mixolydian"); + insert("aeolian", { 0, 2, 3, 5, 7, 8, 10 }, 12, "Aeolian"); + insert("minor", { 0, 2, 3, 5, 7, 8, 10 }, 12, "Natural Minor"); + insert("locrian", { 0, 1, 3, 5, 6, 8, 10 }, 12, "Locrian"); + + insert("minor_harmonic", { 0, 2, 3, 5, 7, 8, 11 }, 12, "Harmonic Minor"); + insert("major_harmonic", { 0, 2, 4, 5, 7, 8, 11 }, 12, "Harmonic Major"); + + insert("minor_melodic", { 0, 2, 3, 5, 7, 9, 11 }, 12, "Melodic Minor"); + insert("minor_melodic_desc", { 0, 2, 3, 5, 7, 8, 10 }, 12, "Melodic Minor Descending"); + insert("major_melodic", { 0, 2, 4, 5, 7, 8, 10 }, 12, "Melodic Major"); + + insert("bartok", { 0, 2, 4, 5, 7, 8, 10 }, 12, "Bartok"); + insert("hindu", { 0, 2, 4, 5, 7, 8, 10 }, 12, "Hindu"); // raga modes - insert(gensym("todi"), { 0, 1, 3, 6, 7, 8, 11 }, 12, "Todi"); - insert(gensym("purvi"), { 0, 1, 4, 6, 7, 8, 11 }, 12, "Purvi"); - insert(gensym("marva"), { 0, 1, 4, 6, 7, 9, 11 }, 12, "Marva"); - insert(gensym("bhairav"), { 0, 1, 4, 5, 7, 8, 11 }, 12, "Bhairav"); - insert(gensym("ahirbhairav"), { 0, 1, 4, 5, 7, 9, 10 }, 12, "Ahirbhairav"); - - insert(gensym("super_locrian"), { 0, 1, 3, 4, 6, 8, 10 }, 12, "Super Locrian"); - insert(gensym("minor_romanian"), { 0, 2, 3, 6, 7, 9, 10 }, 12, "Romanian Minor"); - insert(gensym("minor_hungarian"), { 0, 2, 3, 6, 7, 8, 11 }, 12, "Hungarian Minor"); - insert(gensym("minor_neapolitan"), { 0, 1, 3, 5, 7, 8, 11 }, 12, "Neapolitan Minor"); - insert(gensym("enigmatic"), { 0, 1, 4, 6, 8, 10, 11 }, 12, "Enigmatic"); - insert(gensym("spanish"), { 0, 1, 4, 5, 7, 8, 10 }, 12, "Spanish"); + insert("todi", { 0, 1, 3, 6, 7, 8, 11 }, 12, "Todi"); + insert("purvi", { 0, 1, 4, 6, 7, 8, 11 }, 12, "Purvi"); + insert("marva", { 0, 1, 4, 6, 7, 9, 11 }, 12, "Marva"); + insert("bhairav", { 0, 1, 4, 5, 7, 8, 11 }, 12, "Bhairav"); + insert("ahirbhairav", { 0, 1, 4, 5, 7, 9, 10 }, 12, "Ahirbhairav"); + + insert("super_locrian", { 0, 1, 3, 4, 6, 8, 10 }, 12, "Super Locrian"); + insert("minor_romanian", { 0, 2, 3, 6, 7, 9, 10 }, 12, "Romanian Minor"); + insert("minor_hungarian", { 0, 2, 3, 6, 7, 8, 11 }, 12, "Hungarian Minor"); + insert("minor_neapolitan", { 0, 1, 3, 5, 7, 8, 11 }, 12, "Neapolitan Minor"); + insert("enigmatic", { 0, 1, 4, 6, 8, 10, 11 }, 12, "Enigmatic"); + insert("spanish", { 0, 1, 4, 5, 7, 8, 10 }, 12, "Spanish"); // modes of whole tones with added note - insert(gensym("whole_leading"), { 0, 2, 4, 6, 8, 10, 11 }, 12, "Leading Whole Tone"); - insert(gensym("minor_lydian"), { 0, 2, 4, 6, 7, 8, 10 }, 12, "Lydian Minor"); - insert(gensym("major_neapolitan"), { 0, 1, 3, 5, 7, 9, 11 }, 12, "Neapolitan Major"); - insert(gensym("major_locrian"), { 0, 2, 4, 5, 6, 8, 10 }, 12, "Locrian Major"); + insert("whole_leading", { 0, 2, 4, 6, 8, 10, 11 }, 12, "Leading Whole Tone"); + insert("minor_lydian", { 0, 2, 4, 6, 7, 8, 10 }, 12, "Lydian Minor"); + insert("major_neapolitan", { 0, 1, 3, 5, 7, 9, 11 }, 12, "Neapolitan Major"); + insert("major_locrian", { 0, 2, 4, 5, 6, 8, 10 }, 12, "Locrian Major"); // 8 note scales - insert(gensym("diminished"), { 0, 1, 3, 4, 6, 7, 9, 10 }, 12, "Diminished"); - insert(gensym("diminished2"), { 0, 2, 3, 5, 6, 8, 9, 11 }, 12, "Diminished 2"); + insert("diminished", { 0, 1, 3, 4, 6, 7, 9, 10 }, 12, "Diminished"); + insert("diminished2", { 0, 2, 3, 5, 6, 8, 9, 11 }, 12, "Diminished 2"); // 12 note scales - insert(gensym("chromatic"), { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, 12, "Chromatic"); + insert("chromatic", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, 12, "Chromatic"); // TWENTY-FOUR TONES PER OCTAVE - insert(gensym("chromatic24"), { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }, 24, "Chromatic 24"); + insert("chromatic24", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }, 24, "Chromatic 24"); // maqam ajam - insert(gensym("ajam"), { 0, 4, 8, 10, 14, 18, 22 }, 24, "Ajam"); - insert(gensym("jiharkah"), { 0, 4, 8, 10, 14, 18, 21 }, 24, "Jiharkah"); - insert(gensym("shawq_afza"), { 0, 4, 8, 10, 14, 16, 22 }, 24, "Shawq Afza"); + insert("ajam", { 0, 4, 8, 10, 14, 18, 22 }, 24, "Ajam"); + insert("jiharkah", { 0, 4, 8, 10, 14, 18, 21 }, 24, "Jiharkah"); + insert("shawq_afza", { 0, 4, 8, 10, 14, 16, 22 }, 24, "Shawq Afza"); // maqam sikah - insert(gensym("sikah"), { 0, 3, 7, 11, 14, 17, 21 }, 24, "Sikah"); - insert(gensym("sikah_desc"), { 0, 3, 7, 11, 13, 17, 21 }, 24, "Sikah Descending"); - insert(gensym("huzam"), { 0, 3, 7, 9, 15, 17, 21 }, 24, "Huzam"); - insert(gensym("iraq"), { 0, 3, 7, 10, 13, 17, 21 }, 24, "Iraq"); - insert(gensym("bastanikar"), { 0, 3, 7, 10, 13, 15, 21 }, 24, "Bastanikar"); - insert(gensym("mustar"), { 0, 5, 7, 11, 13, 17, 21 }, 24, "Mustar"); + insert("sikah", { 0, 3, 7, 11, 14, 17, 21 }, 24, "Sikah"); + insert("sikah_desc", { 0, 3, 7, 11, 13, 17, 21 }, 24, "Sikah Descending"); + insert("huzam", { 0, 3, 7, 9, 15, 17, 21 }, 24, "Huzam"); + insert("iraq", { 0, 3, 7, 10, 13, 17, 21 }, 24, "Iraq"); + insert("bastanikar", { 0, 3, 7, 10, 13, 15, 21 }, 24, "Bastanikar"); + insert("mustar", { 0, 5, 7, 11, 13, 17, 21 }, 24, "Mustar"); // maqam bayati - insert(gensym("bayati"), { 0, 3, 6, 10, 14, 16, 20 }, 24, "Bayati"); - insert(gensym("karjighar"), { 0, 3, 6, 10, 12, 18, 20 }, 24, "Karjighar"); - insert(gensym("husseini"), { 0, 3, 6, 10, 14, 17, 21 }, 24, "Husseini"); + insert("bayati", { 0, 3, 6, 10, 14, 16, 20 }, 24, "Bayati"); + insert("karjighar", { 0, 3, 6, 10, 12, 18, 20 }, 24, "Karjighar"); + insert("husseini", { 0, 3, 6, 10, 14, 17, 21 }, 24, "Husseini"); // maqam nahawand - insert(gensym("nahawand"), { 0, 4, 6, 10, 14, 16, 22 }, 24, "Nahawand"); - insert(gensym("nahawand_desc"), { 0, 4, 6, 10, 14, 16, 20 }, 24, "Nahawand Descending"); - insert(gensym("farahfaza"), { 0, 4, 6, 10, 14, 16, 20 }, 24, "Farahfaza"); - insert(gensym("murassah"), { 0, 4, 6, 10, 12, 18, 20 }, 24, "Murassah"); - insert(gensym("ushaq_mashri"), { 0, 4, 6, 10, 14, 17, 21 }, 24, "Ushaq Mashri"); + insert("nahawand", { 0, 4, 6, 10, 14, 16, 22 }, 24, "Nahawand"); + insert("nahawand_desc", { 0, 4, 6, 10, 14, 16, 20 }, 24, "Nahawand Descending"); + insert("farahfaza", { 0, 4, 6, 10, 14, 16, 20 }, 24, "Farahfaza"); + insert("murassah", { 0, 4, 6, 10, 12, 18, 20 }, 24, "Murassah"); + insert("ushaq_mashri", { 0, 4, 6, 10, 14, 17, 21 }, 24, "Ushaq Mashri"); // maqam rast - insert(gensym("rast"), { 0, 4, 7, 10, 14, 18, 21 }, 24, "Rast"); - insert(gensym("rast_desc"), { 0, 4, 7, 10, 14, 18, 20 }, 24, "Rast Descending"); - insert(gensym("suznak"), { 0, 4, 7, 10, 14, 16, 22 }, 24, "Suznak"); - insert(gensym("nairuz"), { 0, 4, 7, 10, 14, 17, 20 }, 24, "Nairuz"); - insert(gensym("yakah"), { 0, 4, 7, 10, 14, 18, 21 }, 24, "Yakah"); - insert(gensym("yakah_desc"), { 0, 4, 7, 10, 14, 18, 20 }, 24, "Yakah Descending"); - insert(gensym("mahur"), { 0, 4, 7, 10, 14, 18, 22 }, 24, "Mahur"); + insert("rast", { 0, 4, 7, 10, 14, 18, 21 }, 24, "Rast"); + insert("rast_desc", { 0, 4, 7, 10, 14, 18, 20 }, 24, "Rast Descending"); + insert("suznak", { 0, 4, 7, 10, 14, 16, 22 }, 24, "Suznak"); + insert("nairuz", { 0, 4, 7, 10, 14, 17, 20 }, 24, "Nairuz"); + insert("yakah", { 0, 4, 7, 10, 14, 18, 21 }, 24, "Yakah"); + insert("yakah_desc", { 0, 4, 7, 10, 14, 18, 20 }, 24, "Yakah Descending"); + insert("mahur", { 0, 4, 7, 10, 14, 18, 22 }, 24, "Mahur"); // maqam hijaz - insert(gensym("hijaz"), { 0, 4, 7, 10, 14, 18, 22 }, 24, "Hijaz"); - insert(gensym("hijaz_desc"), { 0, 4, 7, 10, 14, 18, 22 }, 24, "Hijaz Descending"); - insert(gensym("zanjaran"), { 0, 4, 7, 10, 14, 18, 22 }, 24, "Zanjaran"); + insert("hijaz", { 0, 4, 7, 10, 14, 18, 22 }, 24, "Hijaz"); + insert("hijaz_desc", { 0, 4, 7, 10, 14, 18, 22 }, 24, "Hijaz Descending"); + insert("zanjaran", { 0, 4, 7, 10, 14, 18, 22 }, 24, "Zanjaran"); // maqam hijazKar - insert(gensym("hijaz_kar"), { 0, 2, 8, 10, 14, 16, 22 }, 24, "hijazKar"); + insert("hijaz_kar", { 0, 2, 8, 10, 14, 16, 22 }, 24, "hijazKar"); // maqam saba - insert(gensym("saba"), { 0, 3, 6, 8, 12, 16, 20 }, 24, "Saba"); - insert(gensym("zamzam"), { 0, 2, 6, 8, 14, 16, 20 }, 24, "Zamzam"); + insert("saba", { 0, 3, 6, 8, 12, 16, 20 }, 24, "Saba"); + insert("zamzam", { 0, 2, 6, 8, 14, 16, 20 }, 24, "Zamzam"); // maqam kurd - insert(gensym("kurd"), { 0, 2, 6, 10, 14, 16, 20 }, 24, "Kurd"); - insert(gensym("kijaz_kar_kurd"), { 0, 2, 8, 10, 14, 16, 22 }, 24, "Kijaz Kar Kurd"); + insert("kurd", { 0, 2, 6, 10, 14, 16, 20 }, 24, "Kurd"); + insert("kijaz_kar_kurd", { 0, 2, 8, 10, 14, 16, 22 }, 24, "Kijaz Kar Kurd"); // maqam nawa Athar - insert(gensym("nawa_athar"), { 0, 4, 6, 12, 14, 16, 22 }, 24, "Nawa Athar"); - insert(gensym("nikriz"), { 0, 4, 6, 12, 14, 18, 20 }, 24, "Nikriz"); - insert(gensym("atharKurd"), { 0, 2, 6, 12, 14, 16, 22 }, 24, "Athar Kurd"); + insert("nawa_athar", { 0, 4, 6, 12, 14, 16, 22 }, 24, "Nawa Athar"); + insert("nikriz", { 0, 4, 6, 12, 14, 18, 20 }, 24, "Nikriz"); + insert("atharKurd", { 0, 2, 6, 12, 14, 16, 22 }, 24, "Athar Kurd"); // sort all_sorted_.reserve(scales_.size()); for (auto& kv : scales_) { auto it = std::lower_bound(all_sorted_.begin(), all_sorted_.end(), &kv.second, [](Scale* s0, Scale* s1) { - return std::strcmp(s0->name()->s_name, s1->name()->s_name) < 0; + return s0->name().compare(s1->name()) < 0; }); all_sorted_.insert(it, &kv.second); @@ -222,21 +252,14 @@ namespace music { return lib; } - bool ScaleLibrary::insert(t_symbol* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName) + bool ScaleLibrary::insert(const char* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName) { - auto it = scales_.find(name); - if (it != scales_.end()) { - LIB_ERR << "scale already exists: " << name; - return false; - } - - scales_.insert(std::make_pair(name, Scale(name, degrees, pitchesPerOctave, fullName))); - return true; + return insertInternal(name, crc32_hash(name), degrees, pitchesPerOctave, fullName); } - const Scale* ScaleLibrary::find(t_symbol* name) const + const Scale* ScaleLibrary::findByHash(uint32_t hash) const { - auto it = scales_.find(name); + auto it = scales_.find(hash); if (it == scales_.end()) return nullptr; else @@ -265,5 +288,17 @@ namespace music { return res; } + bool ScaleLibrary::insertInternal(const char* name, uint32_t hash, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName) + { + auto it = scales_.find(hash); + if (it != scales_.end()) { + LIB_ERR << "scale already exists: " << name; + return false; + } + + scales_.insert(std::make_pair(hash, Scale(name, degrees, pitchesPerOctave, fullName))); + return true; + } + } } diff --git a/ceammc/ext/src/lib/ceammc_music_scale.h b/ceammc/ext/src/lib/ceammc_music_scale.h index 6c6f687ed6..b5b48e5e1f 100644 --- a/ceammc/ext/src/lib/ceammc_music_scale.h +++ b/ceammc/ext/src/lib/ceammc_music_scale.h @@ -15,6 +15,7 @@ #define CEAMMC_MUSIC_SCALE_H #include "ceammc_atomlist.h" +#include "ceammc_crc32.h" #include #include @@ -23,26 +24,43 @@ namespace ceammc { namespace music { class Scale { - t_symbol* name_; + std::string name_; std::string full_name_; size_t pitches_per_octave_; std::vector degrees_i_; const AtomList degrees_l_; public: - Scale(t_symbol* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName = ""); + Scale(const char* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName = ""); - t_symbol* name() const { return name_; } + const std::string& name() const { return name_; } const std::string& fullName() const { return full_name_; } const AtomList& degrees() const { return degrees_l_; } size_t pitchesPerOctave() const { return pitches_per_octave_; } size_t size() const { return degrees_i_.size(); } int degreeToKey(int deg) const; + + const std::vector& all() const { return degrees_i_; } + + /** + * check if specified degree is in the scale + * @param degree - degree + * @return true on success + */ + bool find(t_float degree) const; + + /** + * find nearest degree to specified + * @param degree in range [0, pitches_per_octave) + * @param result - to write nearest pitch on success, range is [0, pitches_per_octave] (closed!) + * @return true on sucess, false if given degree is out of scale range + */ + bool findNearest(t_float degree, t_float& result) const; }; class ScaleLibrary { - std::map scales_; + std::map scales_; std::vector all_sorted_; ScaleLibrary(); @@ -53,12 +71,17 @@ namespace music { static ScaleLibrary& instance(); public: - bool insert(t_symbol* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName = ""); + bool insert(const char* name, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName = ""); const std::vector& all() const { return all_sorted_; } - const Scale* find(t_symbol* name) const; + const Scale* find(t_symbol* name) const { return findByHash(crc32_hash(name)); } + const Scale* find(const char* name) const { return findByHash(crc32_hash(name)); } + const Scale* findByHash(uint32_t hash) const; std::vector findByNumPitches(size_t n) const; std::vector findBySize(size_t n) const; + + private: + bool insertInternal(const char* name, uint32_t hash, std::initializer_list degrees, size_t pitchesPerOctave, const std::string& fullName); }; } } diff --git a/ceammc/ext/src/lib/ceammc_music_theory.cpp b/ceammc/ext/src/lib/ceammc_music_theory.cpp index 105b638e94..d07baae0b1 100644 --- a/ceammc/ext/src/lib/ceammc_music_theory.cpp +++ b/ceammc/ext/src/lib/ceammc_music_theory.cpp @@ -68,17 +68,17 @@ std::string Tonality::name() const return res; } -const Scale& Tonality::scale() const +const PitchList& Tonality::scale() const { return scale_; } -const Scale& Tonality::alterations(AlterationDir dir) const +const PitchList& Tonality::alterations(AlterationDir dir) const { return dir == ALTERATE_UP ? alt_up_ : alt_down_; } -const Scale& Tonality::chromatic(AlterationDir dir) const +const PitchList& Tonality::chromatic(AlterationDir dir) const { return dir == ALTERATE_UP ? chrom_up_ : chrom_down_; } @@ -148,14 +148,14 @@ int Tonality::fifthsCircleIndex(const PitchClass& c, HarmonicModus m) PitchClass Tonality::correctAlteration(size_t pitch, const Tonality& t, AlterationDir dir) { pitch %= 12; - const Scale& chrom = t.chromatic(dir); + const auto& chrom = t.chromatic(dir); for (size_t i = 0; i < chrom.size(); i++) { if (chrom[i].absolutePitch() == pitch) return chrom[i]; } - // shoud never happend + // should never happen return PitchClass(pitch); } diff --git a/ceammc/ext/src/lib/ceammc_music_theory.h b/ceammc/ext/src/lib/ceammc_music_theory.h index 685887db84..ebf089160a 100644 --- a/ceammc/ext/src/lib/ceammc_music_theory.h +++ b/ceammc/ext/src/lib/ceammc_music_theory.h @@ -23,7 +23,7 @@ namespace music { ALTERATE_DOWN }; - typedef std::vector Scale; + using PitchList = std::vector; class Tonality { PitchClass pitch_; @@ -43,9 +43,9 @@ namespace music { std::string name() const; - const Scale& scale() const; - const Scale& alterations(AlterationDir dir = ALTERATE_UP) const; - const Scale& chromatic(AlterationDir dir = ALTERATE_UP) const; + const PitchList& scale() const; + const PitchList& alterations(AlterationDir dir = ALTERATE_UP) const; + const PitchList& chromatic(AlterationDir dir = ALTERATE_UP) const; size_t numSharps() const; size_t numFlats() const; @@ -60,11 +60,11 @@ namespace music { AlterationDir dir = ALTERATE_UP); private: - Scale scale_; - Scale chrom_up_; - Scale chrom_down_; - Scale alt_up_; - Scale alt_down_; + PitchList scale_; + PitchList chrom_up_; + PitchList chrom_down_; + PitchList alt_up_; + PitchList alt_down_; void calcScale(); }; diff --git a/ceammc/ext/src/lib/ceammc_music_theory_names.cpp b/ceammc/ext/src/lib/ceammc_music_theory_names.cpp index d4b80b51da..022ca0c5d2 100644 --- a/ceammc/ext/src/lib/ceammc_music_theory_names.cpp +++ b/ceammc/ext/src/lib/ceammc_music_theory_names.cpp @@ -37,7 +37,7 @@ static const char* PITCH_TABLE[NAMING_SCHEME_ALL][PITCH_NUM] = { { "До", "Ре", "Ми", "Фа", "Соль", "Ля", "Си" }, // russian { "C", "D", "E", "F", "G", "A", "B" }, // SPN { "C", "D", "E", "F", "G", "A", "B" }, // SPN - { "C", "D", "E", "F", "G", "A", "B" }, // Guido + { "c", "d", "e", "f", "g", "a", "b" }, // Guido { "C", "D", "E", "F", "G", "A", "B" } // ABC }; diff --git a/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.cpp b/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.cpp index 56e34507b6..e70b0f8fea 100644 --- a/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.cpp +++ b/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.cpp @@ -116,6 +116,27 @@ unsigned int PitchName::absolutePitch() const : value_ * 2 - 1; } +char PitchName::letterName() const +{ + switch (value_) { + case PITCH_NAME_A: + return 'A'; + case PITCH_NAME_B: + return 'B'; + case PITCH_NAME_C: + return 'C'; + case PITCH_NAME_D: + return 'D'; + case PITCH_NAME_E: + return 'E'; + case PITCH_NAME_F: + return 'F'; + case PITCH_NAME_G: + default: + return 'G'; + } +} + size_t PitchName::distance(const PitchName& p1, const PitchName& p2) { return abs(int(p1.value_) - int(p2.value_)); diff --git a/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.h b/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.h index 48960e5dd8..522ba5b339 100644 --- a/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.h +++ b/ceammc/ext/src/lib/ceammc_music_theory_pitch_class.h @@ -84,6 +84,8 @@ namespace music { unsigned int index() const; unsigned int absolutePitch() const; + char letterName() const; + public: static const PitchName C; static const PitchName D; diff --git a/ceammc/ext/src/lib/ceammc_notify.h b/ceammc/ext/src/lib/ceammc_notify.h new file mode 100644 index 0000000000..ac646258f5 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_notify.h @@ -0,0 +1,28 @@ +#ifndef CEAMMC_NOTIFY_H +#define CEAMMC_NOTIFY_H + +namespace ceammc { + +enum NotifyEventType { + NOTIFY_NONE, + NOTIFY_UPDATE, + NOTIFY_SOURCE_REMOVED, + NOTIFY_DONE, + NOTIFY_LOG_ERROR, + NOTIFY_LOG_POST, + NOTIFY_LOG_DEBUG, + NOTIFY_LOG_LOG +}; + +/** + * Notify interface + */ +class NotifiedObject { +public: + virtual ~NotifiedObject() {} + virtual bool notify(NotifyEventType code) = 0; +}; + +} + +#endif // CEAMMC_NOTIFY_H diff --git a/ceammc/ext/src/lib/ceammc_object.cpp b/ceammc/ext/src/lib/ceammc_object.cpp index c3fffc62e7..58761bb5dd 100644 --- a/ceammc/ext/src/lib/ceammc_object.cpp +++ b/ceammc/ext/src/lib/ceammc_object.cpp @@ -15,6 +15,7 @@ #include "ceammc_convert.h" #include "ceammc_data.h" #include "ceammc_datatypes.h" +#include "ceammc_deprecated.h" #include "ceammc_format.h" #include "ceammc_log.h" #include "ceammc_object_info.h" @@ -24,6 +25,7 @@ #include "ceammc_property_enum.h" #include "datatype_string.h" #include "fmt/format.h" +#include "lex/parser_strings.h" #include #include @@ -139,32 +141,32 @@ Property* BaseObject::addProperty(Property* p) return p; } -Property* BaseObject::createCbFloatProperty(const std::string& name, PropertyFloatGetter g, PropertyFloatSetter s) +Property* BaseObject::createCbFloatProperty(const char* name, PropertyFloatGetter g, PropertyFloatSetter s) { return addProperty(new CallbackProperty(name, g, s)); } -Property* BaseObject::createCbIntProperty(const std::string& name, PropertyIntGetter g, PropertyIntSetter s) +Property* BaseObject::createCbIntProperty(const char* name, PropertyIntGetter g, PropertyIntSetter s) { return addProperty(new CallbackProperty(name, g, s)); } -Property* BaseObject::createCbBoolProperty(const std::string& name, PropertyBoolGetter g, PropertyBoolSetter s) +Property* BaseObject::createCbBoolProperty(const char* name, PropertyBoolGetter g, PropertyBoolSetter s) { return addProperty(new CallbackProperty(name, g, s)); } -Property* BaseObject::createCbSymbolProperty(const std::string& name, PropertySymbolGetter g, PropertySymbolSetter s) +Property* BaseObject::createCbSymbolProperty(const char* name, PropertySymbolGetter g, PropertySymbolSetter s) { return addProperty(new CallbackProperty(name, g, s)); } -Property* BaseObject::createCbAtomProperty(const std::string& name, PropertyAtomGetter g, PropertyAtomSetter s) +Property* BaseObject::createCbAtomProperty(const char* name, PropertyAtomGetter g, PropertyAtomSetter s) { return addProperty(new CallbackProperty(name, g, s)); } -Property* BaseObject::createCbListProperty(const std::string& name, PropertyListGetter g, PropertyListSetter s) +Property* BaseObject::createCbListProperty(const char* name, PropertyListGetter g, PropertyListSetter s) { return addProperty(new CallbackProperty(name, g, s)); } @@ -245,24 +247,14 @@ void BaseObject::atomTo(size_t n, const Atom& a) outletAtom(outlets_[n], a); } -void BaseObject::listTo(size_t n, const AtomList& l) +void BaseObject::listTo(size_t n, const AtomListView& lv) { if (n >= outlets_.size()) { OBJ_ERR << "invalid outlet index: " << n; return; } - outletAtomList(outlets_[n], l); -} - -void BaseObject::listTo(size_t n, const AtomListView& v) -{ - if (n >= outlets_.size()) { - OBJ_ERR << "invalid outlet index: " << n; - return; - } - - outletAtomListView(outlets_[n], v); + outletAtomList(outlets_[n], lv); } void BaseObject::messageTo(size_t n, const Message& msg) @@ -275,26 +267,15 @@ void BaseObject::messageTo(size_t n, const Message& msg) msg.output(outlets_[n]); } -void BaseObject::anyTo(size_t n, const AtomList& l) -{ - if (n >= outlets_.size()) { - OBJ_ERR << "invalid outlet index: " << n; - return; - } - - if (!outletAny(outlets_[n], l)) - OBJ_ERR << "invalid message: " << l; -} - -void BaseObject::anyTo(size_t n, const AtomListView& l) +void BaseObject::anyTo(size_t n, const AtomListView& lv) { if (n >= outlets_.size()) { OBJ_ERR << "invalid outlet index: " << n; return; } - if (!outletAny(outlets_[n], l)) - OBJ_ERR << "invalid message: " << l; + if (!outletAny(outlets_[n], lv)) + OBJ_ERR << "invalid message: " << lv; } void BaseObject::anyTo(size_t n, t_symbol* s, const Atom& a) @@ -307,16 +288,6 @@ void BaseObject::anyTo(size_t n, t_symbol* s, const Atom& a) outletAny(outlets_[n], s, a); } -void BaseObject::anyTo(size_t n, t_symbol* s, const AtomList& l) -{ - if (n >= outlets_.size()) { - OBJ_ERR << "invalid outlet index: " << n; - return; - } - - outletAny(outlets_[n], s, l); -} - void BaseObject::anyTo(size_t n, t_symbol* s, const AtomListView& l) { if (n >= outlets_.size()) { @@ -340,7 +311,7 @@ t_inlet* BaseObject::createInlet() return in; } -bool BaseObject::processAnyInlets(t_symbol* sel, const AtomListView& lst) +bool BaseObject::processAnyInlets(t_symbol* sel, const AtomListView& lv) { // format '_:%02x' const bool ok = sel->s_name[0] == '_' @@ -360,11 +331,11 @@ bool BaseObject::processAnyInlets(t_symbol* sel, const AtomListView& lst) return false; } - onInlet(N, lst); + onInlet(N, lv); return true; } -bool BaseObject::processAnyProps(t_symbol* sel, const AtomListView& lst) +bool BaseObject::processAnyProps(t_symbol* sel, const AtomListView& lv) { if (sel->s_name[0] != '@') return false; @@ -377,7 +348,7 @@ bool BaseObject::processAnyProps(t_symbol* sel, const AtomListView& lst) return true; // single property request - if (lst.empty()) { + if (lv.empty()) { AtomList res; if (!queryProperty(get_key, res)) return false; @@ -388,7 +359,7 @@ bool BaseObject::processAnyProps(t_symbol* sel, const AtomListView& lst) AtomList res; queryProperty(get_key, res); - for (auto& pname : lst) { + for (auto& pname : lv) { t_symbol* s; if (!pname.getSymbol(&s)) continue; @@ -415,12 +386,12 @@ bool BaseObject::processAnyProps(t_symbol* sel, const AtomListView& lst) bool rc = false; // support for string for property - if (p->isSymbol() && lst.isA()) { - auto str = lst.asD(); + if (p->isSymbol() && lv.isA()) { + auto str = lv.asD(); const Atom sym(gensym(str->str().c_str())); rc = p->set(AtomListView(sym)); } else - rc = p->set(lst); + rc = p->set(lv); if (!rc) OBJ_ERR << "can't set property: " << sel; @@ -573,6 +544,8 @@ BaseObject::BaseObject(const PdArgs& args) { if (pd_.parseArgs) parsePosArgs(pd_.parseArgsMode); + + Deprecated::instance().checkAlias(args.className, args.creationName); } BaseObject::~BaseObject() @@ -676,13 +649,22 @@ bool BaseObject::parseProperty(Property* p, const AtomListView& props, PdArgs::P return true; } } break; - case PdArgs::PARSE_UNQUOTE: - if (!p->setInit(v.parseQuoted().view())) { - OBJ_ERR << "can't set property: " << name->s_name; - return false; - } else - return true; - break; + case PdArgs::PARSE_UNQUOTE: { + if (string::maybe_ceammc_quoted_string(v)) { + auto unquoted = string::parse_ceammc_quoted_string(v); + if (!p->setInit(unquoted.view())) { + OBJ_ERR << fmt::format("can't set property: '{}'", name->s_name); + return false; + } else + return true; + } else { // no quoted atoms + if (!p->setInit(v)) { + OBJ_ERR << fmt::format("can't set property: '{}'", name->s_name); + return false; + } else + return true; + } + } break; default: if (!p->setInit(v)) { @@ -779,9 +761,12 @@ void BaseObject::parsePosArgs(PdArgs::ParseMode mode) case PdArgs::PARSE_COPY: pos_args_parsed_ = args; break; - case PdArgs::PARSE_UNQUOTE: - pos_args_parsed_ = args.parseQuoted(); - break; + case PdArgs::PARSE_UNQUOTE: { + if (string::maybe_ceammc_quoted_string(args)) + pos_args_parsed_ = string::parse_ceammc_quoted_string(args); + else + pos_args_parsed_ = args; + } break; case PdArgs::PARSE_EXPR: { auto parse_result = parseDataList(args); if (parse_result) { // parse ok @@ -855,7 +840,7 @@ bool BaseObject::checkArg(const Atom& atom, BaseObject::ArgumentType type, int p break; case ARG_BYTE: if (!atom.isFloat()) - ARG_ERROR("byte value expexted"); + ARG_ERROR("byte value expected"); if (atom.asFloat() < 0 || atom.asFloat() > 255) ARG_ERROR("byte range expected: [0-255]"); @@ -887,10 +872,10 @@ static const char* to_string(BaseObject::ArgumentType a) return names[a]; } -bool BaseObject::checkArgs(const AtomListView& lst, ArgumentType a1, t_symbol* method) const +bool BaseObject::checkArgs(const AtomListView& lv, ArgumentType a1, t_symbol* method) const { - if (lst.size() < 1 - || !checkArg(lst[0], a1, 0)) { + if (lv.size() < 1 + || !checkArg(lv[0], a1, 0)) { if (method) OBJ_ERR << "Usage: " << method->s_name << " " << to_string(a1); @@ -901,12 +886,12 @@ bool BaseObject::checkArgs(const AtomListView& lst, ArgumentType a1, t_symbol* m return true; } -bool BaseObject::checkArgs(const AtomListView& lst, BaseObject::ArgumentType a1, +bool BaseObject::checkArgs(const AtomListView& lv, BaseObject::ArgumentType a1, BaseObject::ArgumentType a2, t_symbol* method) const { - if (lst.size() < 2 - || !checkArg(lst[0], a1, 0) - || !checkArg(lst[1], a2, 1)) { + if (lv.size() < 2 + || !checkArg(lv[0], a1, 0) + || !checkArg(lv[1], a2, 1)) { if (method) OBJ_ERR << "Usage: " << method->s_name @@ -919,13 +904,13 @@ bool BaseObject::checkArgs(const AtomListView& lst, BaseObject::ArgumentType a1, return true; } -bool BaseObject::checkArgs(const AtomListView& lst, BaseObject::ArgumentType a1, +bool BaseObject::checkArgs(const AtomListView& lv, BaseObject::ArgumentType a1, BaseObject::ArgumentType a2, BaseObject::ArgumentType a3, t_symbol* method) const { - if (lst.size() < 3 - || !checkArg(lst[0], a1, 0) - || !checkArg(lst[1], a2, 1) - || !checkArg(lst[2], a3, 2)) { + if (lv.size() < 3 + || !checkArg(lv[0], a1, 0) + || !checkArg(lv[1], a2, 1) + || !checkArg(lv[2], a3, 2)) { if (method) OBJ_ERR << "Usage: " << method->s_name @@ -939,16 +924,16 @@ bool BaseObject::checkArgs(const AtomListView& lst, BaseObject::ArgumentType a1, return true; } -bool BaseObject::checkArgs(const AtomListView& lst, BaseObject::ArgumentType a1, +bool BaseObject::checkArgs(const AtomListView& lv, BaseObject::ArgumentType a1, BaseObject::ArgumentType a2, BaseObject::ArgumentType a3, BaseObject::ArgumentType a4, t_symbol* method) const { - if (lst.size() < 4 - || !checkArg(lst[0], a1, 0) - || !checkArg(lst[1], a2, 1) - || !checkArg(lst[2], a3, 2) - || !checkArg(lst[3], a4, 3)) { + if (lv.size() < 4 + || !checkArg(lv[0], a1, 0) + || !checkArg(lv[1], a2, 1) + || !checkArg(lv[2], a3, 2) + || !checkArg(lv[3], a4, 3)) { if (method) OBJ_ERR << "Usage: " << method->s_name @@ -1033,7 +1018,7 @@ void BaseObject::onSymbol(t_symbol*) OBJ_ERR << "symbol is not expected"; } -void BaseObject::onList(const AtomList&) +void BaseObject::onList(const AtomListView&) { OBJ_ERR << "list is not expected"; } @@ -1089,7 +1074,9 @@ void BaseObject::bindReceive(t_symbol* path) void BaseObject::unbindReceive() { if (receive_from_) { - pd_unbind(&owner()->te_g.g_pd, receive_from_); + if (receive_from_->s_thing) + pd_unbind(&owner()->te_g.g_pd, receive_from_); + receive_from_ = 0; } } diff --git a/ceammc/ext/src/lib/ceammc_object.h b/ceammc/ext/src/lib/ceammc_object.h index 8dc8ebc492..21fc951c38 100644 --- a/ceammc/ext/src/lib/ceammc_object.h +++ b/ceammc/ext/src/lib/ceammc_object.h @@ -200,10 +200,10 @@ class BaseObject { * Method args checking */ bool checkArg(const Atom& atom, ArgumentType type, int pos = -1) const; - bool checkArgs(const AtomListView& lst, ArgumentType a1, t_symbol* method = 0) const; - bool checkArgs(const AtomListView& lst, ArgumentType a1, ArgumentType a2, t_symbol* method = 0) const; - bool checkArgs(const AtomListView& lst, ArgumentType a1, ArgumentType a2, ArgumentType a3, t_symbol* method = 0) const; - bool checkArgs(const AtomListView& lst, ArgumentType a1, ArgumentType a2, ArgumentType a3, ArgumentType a4, t_symbol* method = 0) const; + bool checkArgs(const AtomListView& lv, ArgumentType a1, t_symbol* method = 0) const; + bool checkArgs(const AtomListView& lv, ArgumentType a1, ArgumentType a2, t_symbol* method = 0) const; + bool checkArgs(const AtomListView& lv, ArgumentType a1, ArgumentType a2, ArgumentType a3, t_symbol* method = 0) const; + bool checkArgs(const AtomListView& lv, ArgumentType a1, ArgumentType a2, ArgumentType a3, ArgumentType a4, t_symbol* method = 0) const; /** * Returns object class name @@ -241,7 +241,7 @@ class BaseObject { void fixLines(); /** - * Outputs all properties name + * Outputs all properties name to Pd window * @example on message [@*?( outputs message [@* @prop1 @prop2 etc..( */ void queryPropNames(); @@ -252,7 +252,7 @@ class BaseObject { virtual void onBang(); virtual void onFloat(t_float); virtual void onSymbol(t_symbol*); - virtual void onList(const AtomList&); + virtual void onList(const AtomListView&); virtual void onData(const Atom&); virtual void onAny(t_symbol* s, const AtomListView&); @@ -375,15 +375,15 @@ class BaseObject { * Creates callback property */ template - Property* createCbProperty(const std::string& name, + Property* createCbProperty(const char* name, AtomList (T::*getter)() const, - void (T::*setter)(const AtomList&) = nullptr) + void (T::*setter)(const AtomListView&) = nullptr) { return createCbListProperty( name, [this, getter]() -> AtomList { return (static_cast(this)->*getter)(); }, - setter ? [this, setter](const AtomList& l) -> bool { - (static_cast(this)->*setter)(l); + setter ? [this, setter](const AtomListView& lv) -> bool { + (static_cast(this)->*setter)(lv); return true; } : PropertyListSetter()); @@ -393,7 +393,7 @@ class BaseObject { * Create callback float property * @return pointer to created prperty */ - Property* createCbFloatProperty(const std::string& name, + Property* createCbFloatProperty(const char* name, PropertyFloatGetter g, PropertyFloatSetter s = nullptr); @@ -401,7 +401,7 @@ class BaseObject { * Create callback int property * @return pointer to created prperty */ - Property* createCbIntProperty(const std::string& name, + Property* createCbIntProperty(const char* name, PropertyIntGetter g, PropertyIntSetter s = nullptr); @@ -409,7 +409,7 @@ class BaseObject { * Create callback bool property * @return pointer to created prperty */ - Property* createCbBoolProperty(const std::string& name, + Property* createCbBoolProperty(const char* name, PropertyBoolGetter g, PropertyBoolSetter s = nullptr); @@ -417,7 +417,7 @@ class BaseObject { * Create callback symbol property * @return pointer to created prperty */ - Property* createCbSymbolProperty(const std::string& name, + Property* createCbSymbolProperty(const char* name, PropertySymbolGetter g, PropertySymbolSetter s = nullptr); @@ -425,7 +425,7 @@ class BaseObject { * Create callback atom property * @return pointer to created prperty */ - Property* createCbAtomProperty(const std::string& name, + Property* createCbAtomProperty(const char* name, PropertyAtomGetter g, PropertyAtomSetter s = nullptr); @@ -433,7 +433,7 @@ class BaseObject { * Create callback list property * @return pointer to created prperty */ - Property* createCbListProperty(const std::string& name, + Property* createCbListProperty(const char* name, PropertyListGetter g, PropertyListSetter s = nullptr); @@ -502,19 +502,12 @@ class BaseObject { */ virtual void symbolTo(size_t n, t_symbol* s); - /** - * Outputs list to specified outlet - * @param n - outlet number - * @param l - list value - */ - virtual void listTo(size_t n, const AtomList& l); - /** * Outputs list view to specified outlet * @param n - outlet number * @param v - listview */ - virtual void listTo(size_t n, const AtomListView& v); + virtual void listTo(size_t n, const AtomListView& lv); /** * Outputs message to specified outlet @@ -523,11 +516,9 @@ class BaseObject { */ virtual void messageTo(size_t n, const Message& msg); - virtual void anyTo(size_t n, const AtomList& l); - virtual void anyTo(size_t n, const AtomListView& l); + virtual void anyTo(size_t n, const AtomListView& lv); virtual void anyTo(size_t n, t_symbol* s, const Atom& a); - virtual void anyTo(size_t n, t_symbol* s, const AtomList& l); - virtual void anyTo(size_t n, t_symbol* s, const AtomListView& l); + virtual void anyTo(size_t n, t_symbol* s, const AtomListView& lv); /** * main secondary inlets dispatcher @@ -536,7 +527,7 @@ class BaseObject { * @return true - if message was dispatched to inlet and should not be processed anymore * false - if not valid inlet message and should be processed further */ - virtual bool processAnyInlets(t_symbol* sel, const AtomListView& lst); + virtual bool processAnyInlets(t_symbol* sel, const AtomListView& lv); /** * Used internally to get/set properties: @@ -550,7 +541,7 @@ class BaseObject { * * @note override this method for custom property processing */ - virtual bool processAnyProps(t_symbol* sel, const AtomListView& lst); + virtual bool processAnyProps(t_symbol* sel, const AtomListView& lv); /** * Various load(close)bang dispatcher diff --git a/ceammc/ext/src/lib/ceammc_outlet.cpp b/ceammc/ext/src/lib/ceammc_outlet.cpp new file mode 100644 index 0000000000..11d23f9f62 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_outlet.cpp @@ -0,0 +1,116 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_outlet.h" + +extern "C" { +#include "m_imp.h" + +// Note: keep in sync with m_obj.c +struct _outconnect { + struct _outconnect* oc_next; + t_pd* oc_to; +}; + +// Note: keep in sync with m_obj.c +struct _outlet { + t_object* o_owner; + struct _outlet* o_next; + t_outconnect* o_connections; + t_symbol* o_sym; +}; +} + +namespace ceammc { + +OutletIterator::OutletIterator(const t_object* obj) + : obj_(obj) + , outlet_(nullptr) +{ + reset(); +} + +bool OutletIterator::isSignal() const +{ + return util::outlet_is_signal(outlet_); +} + +void OutletIterator::setSignal(bool v) +{ + return util::outlet_set_signal(outlet_, v); +} + +void OutletIterator::reset() +{ + outlet_ = obj_ ? obj_->te_outlet : nullptr; +} + +OutletIterator& OutletIterator::next() +{ + outlet_ = (obj_ && outlet_) ? outlet_->o_next : nullptr; + return *this; +} + +OutletIterator::operator bool() +{ + return obj_ && outlet_; +} + +bool util::outlet_is_signal(t_outlet* x) +{ + return x ? (x->o_sym) == &s_signal : false; +} + +void util::outlet_set_signal(t_outlet* x, bool v) +{ + if (x) + x->o_sym = v ? &s_signal : &s_list; +} + +ConnectionIterator::ConnectionIterator(const t_object* obj) + : obj_(obj) + , src_outlet_(nullptr) + , conn_(nullptr) + , dest_(nullptr) + , dest_inlet_(nullptr) + , dest_idx_(0) +{ + reset(); +} + +void ConnectionIterator::reset() +{ + src_outlet_ = nullptr; + dest_ = nullptr; + dest_inlet_ = nullptr; + dest_idx_ = 0; + conn_ = obj_starttraverseoutlet(obj_, &src_outlet_, 0); + + if (conn_) + conn_ = obj_nexttraverseoutlet(conn_, &dest_, &dest_inlet_, &dest_idx_); +} + +ConnectionIterator& ConnectionIterator::next() +{ + if (conn_) + conn_ = obj_nexttraverseoutlet(conn_, &dest_, &dest_inlet_, &dest_idx_); + + return *this; +} + +bool ConnectionIterator::isSignal() const +{ + return util::outlet_is_signal(src_outlet_); +} + +} diff --git a/ceammc/ext/src/lib/ceammc_outlet.h b/ceammc/ext/src/lib/ceammc_outlet.h new file mode 100644 index 0000000000..dae884808b --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_outlet.h @@ -0,0 +1,68 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_OUTLET_H +#define CEAMMC_OUTLET_H + +#include "m_pd.h" + +namespace ceammc { +namespace util { + bool outlet_is_signal(t_outlet* x); + void outlet_set_signal(t_outlet* x, bool v); +} + +class OutletIterator { + const t_object* obj_; + t_outlet* outlet_; + +public: + OutletIterator(const t_object* obj); + + bool isSignal() const; + void setSignal(bool v); + void reset(); + OutletIterator& next(); + operator bool(); + + t_outlet* outlet() { return outlet_; } +}; + +class ConnectionIterator { + const t_object* obj_; + t_outlet* src_outlet_; + t_outconnect* conn_; + t_object* dest_; + t_inlet* dest_inlet_; + int dest_idx_; + +public: + ConnectionIterator(const t_object* obj); + + void reset(); + ConnectionIterator& next(); + + operator bool() { return conn_; } + + t_outlet* srcOutlet() { return src_outlet_; } + + t_object* dest() { return dest_; } + t_inlet* destInlet() { return dest_inlet_; } + int destIndex() const { return dest_idx_; } + + bool isSignal() const; +}; + +} + +#endif // CEAMMC_OUTLET_H diff --git a/ceammc/ext/src/lib/ceammc_output.cpp b/ceammc/ext/src/lib/ceammc_output.cpp index d136f6c009..213685ba18 100644 --- a/ceammc/ext/src/lib/ceammc_output.cpp +++ b/ceammc/ext/src/lib/ceammc_output.cpp @@ -32,30 +32,7 @@ bool outletAtom(t_outlet* o, const Atom& a) return false; } -bool outletAtomList(t_outlet* o, const AtomList& l, bool simplifyType) -{ - if (!o) { - LIB_DBG << "ERROR! NULL outlet pointer: " << __FUNCTION__; - return false; - } - - if (simplifyType) { - if (l.isBang()) - outlet_bang(o); - else if (l.isFloat()) - outlet_float(o, l[0].asFloat()); - else if (l.isSymbol()) - outlet_symbol(o, l[0].asSymbol()); - else - outlet_list(o, &s_list, static_cast(l.size()), l.toPdData()); - } else { - outlet_list(o, &s_list, static_cast(l.size()), l.toPdData()); - } - - return true; -} - -bool outletAtomListView(t_outlet* o, const AtomListView& v, bool simplifyType) +bool outletAtomList(t_outlet* o, const AtomListView& v, bool simplifyType) { if (!o) { LIB_DBG << "ERROR! NULL outlet pointer: " << __FUNCTION__; @@ -90,12 +67,6 @@ bool outletAny(t_outlet* o, t_symbol* s, const Atom& a) return true; } -bool outletAny(t_outlet* o, t_symbol* s, const AtomList& l) -{ - outlet_anything(o, s, static_cast(l.size()), l.toPdData()); - return true; -} - bool outletAny(_outlet* o, t_symbol* s, const AtomListView& v) { outlet_anything(o, s, @@ -105,22 +76,6 @@ bool outletAny(_outlet* o, t_symbol* s, const AtomListView& v) return true; } -bool outletAny(t_outlet* o, const AtomList& l) -{ - if (l.size() < 1) - return false; - - // check for valid selector - if (!l.first()->isSymbol()) - return false; - - outlet_anything(o, - l.first()->asSymbol(), - static_cast(l.size() - 1), - l.size() == 1 ? nullptr : l.toPdData() + 1); - return true; -} - bool outletAny(t_outlet* o, const AtomListView& l) { if (l.size() < 1) diff --git a/ceammc/ext/src/lib/ceammc_output.h b/ceammc/ext/src/lib/ceammc_output.h index 047b8b7471..f2d6db1839 100644 --- a/ceammc/ext/src/lib/ceammc_output.h +++ b/ceammc/ext/src/lib/ceammc_output.h @@ -23,13 +23,10 @@ class AtomList; class AtomListView; bool outletAtom(t_outlet* o, const Atom& a); -bool outletAtomList(t_outlet* o, const AtomList& l, bool simplifyType = false); -bool outletAtomListView(t_outlet* o, const AtomListView& v, bool simplifyType = false); +bool outletAtomList(t_outlet* o, const AtomListView& v, bool simplifyType = false); bool outletAny(t_outlet* o, t_symbol* s, const Atom& a); -bool outletAny(t_outlet* o, t_symbol* s, const AtomList& l); bool outletAny(t_outlet* o, t_symbol* s, const AtomListView& v); -CEAMMC_WARN_UNUSED bool outletAny(t_outlet* o, const AtomList& l); CEAMMC_WARN_UNUSED bool outletAny(t_outlet* o, const AtomListView& l); } diff --git a/ceammc/ext/src/lib/ceammc_pd.cpp b/ceammc/ext/src/lib/ceammc_pd.cpp index 939d275582..b032dab77d 100644 --- a/ceammc/ext/src/lib/ceammc_pd.cpp +++ b/ceammc/ext/src/lib/ceammc_pd.cpp @@ -16,6 +16,7 @@ #include "ceammc_externals.h" #include "ceammc_factory.h" #include "ceammc_format.h" +#include "ceammc_impl.h" #include "ceammc_platform.h" #include "m_pd.h" @@ -27,15 +28,6 @@ void pd_init(); void obj_sendinlet(t_object* x, int n, t_symbol* s, int argc, t_atom* argv); } -static t_methodentry* class_methods(t_class* c) -{ -#ifdef PDINSTANCE - return c->c_methods[pd_this->pd_instanceno]; -#else - return c->c_methods; -#endif -} - #include #include @@ -94,16 +86,18 @@ bool ceammc::pd::addPdPrintDataSupport() std::vector pd::currentListOfExternals() { - auto mlist = class_methods(pd_objectmaker); + if (!pd_objectmaker) + return {}; - std::vector res; - if (!mlist) - return res; + const auto N = pd_objectmaker->c_nmethod; + if (N <= 0) + return {}; - res.reserve(pd_objectmaker->c_nmethod); + std::vector res; + res.reserve(N); - for (int i = 0; i < pd_objectmaker->c_nmethod; i++) - res.push_back(mlist[i].me_name->s_name); + for (int i = 0; i < N; i++) + res.push_back(class_method_name(pd_objectmaker, i)->s_name); return res; } @@ -465,8 +459,8 @@ std::vector pd::External::methods() const t_class* c = obj_->te_g.g_pd; for (int i = 0; i < c->c_nmethod; i++) { - auto& m = class_methods(c)[i]; - res.push_back(m.me_name); + auto mname = class_method_name(c, i); + res.push_back(mname); } return res; diff --git a/ceammc/ext/src/lib/ceammc_pipe_dispatcher.cpp b/ceammc/ext/src/lib/ceammc_pipe_dispatcher.cpp new file mode 100644 index 0000000000..7c1a9d7834 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_pipe_dispatcher.cpp @@ -0,0 +1,88 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_pipe_dispatcher.h" +#include "ceammc_log.h" +#include "config.h" + +extern "C" { +#include "s_stuff.h" +} + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef __WIN32__ +#include +#define pipe _pipe +#define write _write +#define read _read +#endif + +#include + +namespace ceammc { + +PipeDispatcherImpl::PipeDispatcherImpl(PollFn fn, Dispatcher* owner) +{ +#ifndef __WIN32__ + auto rc = pipe(pipe_); + if (rc != 0) { + LIB_ERR << "can't create pipe: " << strerror(errno); + return; + } + + sys_addpollfn(pipe_[0], fn, owner); +#endif +} + +PipeDispatcherImpl::~PipeDispatcherImpl() +{ + if (pipe_[0] >= 0) + sys_rmpollfn(pipe_[0]); + + if (pipe_[0] >= 0) + close(pipe_[0]); + + if (pipe_[1] >= 0) + close(pipe_[1]); +} + +bool PipeDispatcherImpl::send(const NotifyMessage& msg) +{ + if (pipe_[1] < 0) + return false; + + const auto err = write(pipe_[1], &msg, sizeof(msg)); + if (!err) { + std::cerr << "[dispatcher] can't write to pipe: " << strerror(err) << "\n"; + return false; + } + + return true; +} + +bool PipeDispatcherImpl::recv(NotifyMessage& msg, int fd) +{ + const auto nbytes = read(fd, &msg, sizeof(msg)); + + if (nbytes != sizeof(msg)) { + LIB_ERR << "[dispatcher] invalid read of size: " << sizeof(msg); + return false; + } + + return true; +} + +} diff --git a/ceammc/ext/src/lib/ceammc_pipe_dispatcher.h b/ceammc/ext/src/lib/ceammc_pipe_dispatcher.h new file mode 100644 index 0000000000..23e32baec5 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_pipe_dispatcher.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef PIPE_DISPATCHER_H +#define PIPE_DISPATCHER_H + +#include "ceammc_poll_dispatcher.h" + +namespace ceammc { + +class PipeDispatcherImpl : public DispatcherImpl { + int pipe_[2] = { -1, -1 }; + +public: + using PollFn = void(void*, int); + + PipeDispatcherImpl(PollFn fn, Dispatcher* owner); + ~PipeDispatcherImpl(); + + bool send(const NotifyMessage& msg) override; + bool recv(NotifyMessage& msg, int fd) override; + int inSocket() const override { return pipe_[0]; } + int outSocket() const override { return pipe_[1]; } +}; + +} + +#endif // PIPE_DISPATCHER_H diff --git a/ceammc/ext/src/lib/ceammc_platform.cpp b/ceammc/ext/src/lib/ceammc_platform.cpp index 1d4b30c550..d8590b87d2 100644 --- a/ceammc/ext/src/lib/ceammc_platform.cpp +++ b/ceammc/ext/src/lib/ceammc_platform.cpp @@ -211,9 +211,6 @@ namespace platform { std::string find_in_std_path(t_canvas* cnv, const char* path) { - if (!is_path_relative(path)) - return path; - char dirname[MAXPDSTRING], *filename; int fd = canvas_open(cnv, path, "", dirname, &filename, MAXPDSTRING, 1); if (fd < 0) diff --git a/ceammc/ext/src/lib/ceammc_platform.h b/ceammc/ext/src/lib/ceammc_platform.h index 639d8e7609..bd0d475e38 100644 --- a/ceammc/ext/src/lib/ceammc_platform.h +++ b/ceammc/ext/src/lib/ceammc_platform.h @@ -95,7 +95,9 @@ namespace platform { std::string strip_extension(const std::string& name); /** - * Search file in standard PureData locations and tries to open it. + * Search file in standard PureData locations and tries to open it, return true on success + * @param cnv - pointer to current canvas, that can contain search paths declared with [declare] + * @param path - path relative to canvas or full file path * @return On success returns full path to file, else returns empty string */ std::string find_in_std_path(t_canvas* cnv, const char* path); diff --git a/ceammc/ext/src/lib/ceammc_poll_dispatcher.cpp b/ceammc/ext/src/lib/ceammc_poll_dispatcher.cpp new file mode 100644 index 0000000000..5444e9af3d --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_poll_dispatcher.cpp @@ -0,0 +1,99 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_poll_dispatcher.h" +#include "ceammc_log.h" +#include "fmt/core.h" + +#include + +#define MSG_PREFIX "[dispatch] " + +#if 0 +#define DISPATCHER_DEBUG(msg) std::cerr << MSG_PREFIX << msg << std::endl; +#else +#define DISPATCHER_DEBUG(msg) +#endif + +#ifdef __WIN32__ +#define USE_SOCKET_DISPATCHER +#endif + +using namespace ceammc; + +#ifdef USE_SOCKET_DISPATCHER +#include "ceammc_socket_dispatcher.h" +#else +#include "ceammc_pipe_dispatcher.h" +#endif + +Dispatcher::Dispatcher() +#ifdef USE_SOCKET_DISPATCHER + : impl_(new SocketDispatcherImpl(&Dispatcher::pollFn, this)) +#else + : impl_(new PipeDispatcherImpl(&Dispatcher::pollFn, this)) +#endif +{ +} + +bool Dispatcher::notify(SubscriberId id, NotifyEventType t) +{ + DISPATCHER_DEBUG(fmt::format("notify: #{} -> {}", id, t)); + + for (auto& x : subscribers_) { + if (x.id == id) { + x.obj->notify(t); + return true; + } + } + + return false; +} + +void Dispatcher::pollFn(void* x, int fd) +{ + Dispatcher* dp = static_cast(x); + + NotifyMessage msg; + if (!dp->impl_->recv(msg, fd)) + return; + + if (!dp->notify(msg.id, msg.event)) + LIB_ERR << MSG_PREFIX "subscriber not found #" << msg.id; +} + +void Dispatcher::subscribe(NotifiedObject* x, SubscriberId id) +{ + DISPATCHER_DEBUG(fmt::format("subscribe: {} #{}", (void*)x, id)); + + subscribers_.push_back({ id, x }); +} + +void Dispatcher::unsubscribe(NotifiedObject* x) +{ + DISPATCHER_DEBUG(fmt::format("unsubscribe: {}", (void*)x)); + + auto it = std::remove_if( + subscribers_.begin(), + subscribers_.end(), + [x](SubscriberInfo& info) { return info.obj == x; }); + + subscribers_.erase(it, subscribers_.end()); +} + +bool Dispatcher::send(const NotifyMessage& msg) +{ + DISPATCHER_DEBUG(fmt::format("send: #{} -> {}", msg.id, msg.event)); + + return impl_->send(msg); +} diff --git a/ceammc/ext/src/lib/ceammc_poll_dispatcher.h b/ceammc/ext/src/lib/ceammc_poll_dispatcher.h new file mode 100644 index 0000000000..b104a1fc89 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_poll_dispatcher.h @@ -0,0 +1,75 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef POLL_DISPATCHER_H +#define POLL_DISPATCHER_H + +#include +#include +#include + +#include "ceammc_notify.h" + +namespace ceammc { + +using SubscriberId = uint64_t; + +struct NotifyMessage { + SubscriberId id; + NotifyEventType event; +}; + +struct SubscriberInfo { + SubscriberId id; + NotifiedObject* obj; +}; + +class DispatcherImpl { +public: + virtual ~DispatcherImpl() { } + virtual bool send(const NotifyMessage& msg) = 0; + virtual bool recv(NotifyMessage& msg, int fd) = 0; + virtual int inSocket() const = 0; + virtual int outSocket() const = 0; +}; + +class Dispatcher { + std::vector subscribers_; + std::unique_ptr impl_; + +private: + Dispatcher(); + Dispatcher(const Dispatcher&) = delete; + Dispatcher& operator=(const Dispatcher&) = delete; + + bool notify(SubscriberId id, NotifyEventType t); + +private: + static void pollFn(void* x, int fd); + +public: + static Dispatcher& instance() + { + static Dispatcher instance_; + return instance_; + } + + void subscribe(NotifiedObject* x, SubscriberId id); + void unsubscribe(NotifiedObject* x); + + bool send(const NotifyMessage& msg); +}; + +} + +#endif // POLL_DISPATCHER_H diff --git a/ceammc/ext/src/lib/ceammc_pollfd.h b/ceammc/ext/src/lib/ceammc_pollfd.h index 9318dc0c01..df0bffd234 100644 --- a/ceammc/ext/src/lib/ceammc_pollfd.h +++ b/ceammc/ext/src/lib/ceammc_pollfd.h @@ -27,7 +27,9 @@ #ifdef HAVE_IO_H #include -#define close _close +#define pipe_close _close +#else +#define pipe_close close #endif extern "C" { @@ -115,10 +117,10 @@ class PollPipeMemberFunction : public PollMemberFunction { ~PollPipeMemberFunction() { - if (close(fd[0]) == -1) + if (pipe_close(fd[0]) == -1) perror("[ceammc] pipe closing error"); - if (close(fd[1]) == -1) + if (pipe_close(fd[1]) == -1) perror("[ceammc] pipe closing error"); } }; diff --git a/ceammc/ext/src/lib/ceammc_pollthread_object.h b/ceammc/ext/src/lib/ceammc_pollthread_object.h new file mode 100644 index 0000000000..b769fa01c8 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_pollthread_object.h @@ -0,0 +1,174 @@ +/***************************************************************************** + * Copyright 2021 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef POLLTHREAD_OBJECT_H +#define POLLTHREAD_OBJECT_H + +#include +#include + +#include "ceammc_log.h" +#include "ceammc_object.h" +#include "ceammc_poll_dispatcher.h" + +#include "readerwriterqueue.h" + +namespace ceammc { + +template +class PollThreadTaskObject : public BaseObject, public NotifiedObject { +public: + using Future = std::future; + + enum TaskState { + TASK_NONE, + TASK_READY, + TASK_RUNNING, + }; + +private: + Future future_; + In task_in_; + Out task_out_; + std::atomic_bool quit_ { false }; + +public: + PollThreadTaskObject(const PdArgs& args) + : BaseObject(args) + { + } + + ~PollThreadTaskObject() + { + finish(); + } + + void finish() + { + quit_ = true; + + Dispatcher::instance().unsubscribe(this); + + if (future_.valid()) { + try { + future_.get(); + } catch (std::exception& e) { + OBJ_ERR << e.what(); + } + } + } + + inline SubscriberId subscriberId() const { return reinterpret_cast(this); } + + virtual Future createTask() = 0; + virtual void processTask(NotifyEventType event) = 0; + + TaskState taskState() const + { + if (future_.valid()) { + switch (future_.wait_for(std::chrono::seconds(0))) { + case std::future_status::ready: + case std::future_status::deferred: + return TASK_READY; + default: + return TASK_RUNNING; + } + } else + return TASK_NONE; + } + + bool runTask() + { + try { + auto ts = taskState(); + + switch (ts) { + case TASK_RUNNING: + // can't start task + OBJ_ERR << "previous task is not finished"; + return false; + case TASK_READY: + // get result + future_.get(); + break; + default: + break; + } + + future_ = createTask(); + processResultIfReady(); + } catch (std::exception& e) { + OBJ_ERR << e.what(); + return false; + } + + return true; + } + + bool notify(NotifyEventType event) override + { + processTask(event); + processResultIfReady(); + return true; + } + + void m_quit(t_symbol*, const AtomListView&) { quit_ = true; } + + void setQuit(bool value) { quit_ = value; } + const std::atomic_bool& quit() const { return quit_; } + + In& inPipe() { return task_in_; } + const In& inPipe() const { return task_in_; } + Out& outPipe() { return task_out_; } + const Out& outPipe() const { return task_out_; } + +private: + void processResultIfReady() + { + if (future_.valid()) { + const auto fst = future_.wait_for(std::chrono::seconds(0)); + if (fst == std::future_status::deferred || fst == std::future_status::ready) + future_.get(); + } + } +}; + +template +using PollThreadQueue = moodycamel::ReaderWriterQueue; + +template +class PollThreadQueueObject + : public PollThreadTaskObject< + PollThreadQueue, + PollThreadQueue> { +public: + PollThreadQueueObject(const PdArgs& args) + : PollThreadTaskObject< + PollThreadQueue, + PollThreadQueue>(args) + { + } + + void processTask(NotifyEventType /*event*/) override + { + Out msg; + while (this->outPipe().try_dequeue(msg)) + processMessage(msg); + } + + virtual void processMessage(const Out& msg) = 0; +}; + +} + +#endif // POLLTHREAD_OBJECT_H diff --git a/ceammc/ext/src/lib/ceammc_preset.cpp b/ceammc/ext/src/lib/ceammc_preset.cpp index 7da82cc277..fd9f5256d2 100644 --- a/ceammc/ext/src/lib/ceammc_preset.cpp +++ b/ceammc/ext/src/lib/ceammc_preset.cpp @@ -1,4 +1,5 @@ #include "ceammc_preset.h" +#include "ceammc_containers.h" #include "ceammc_convert.h" #include "ceammc_format.h" #include "ceammc_log.h" @@ -9,6 +10,7 @@ extern "C" { } #include +#include #include #include @@ -184,8 +186,6 @@ bool PresetStorage::write(t_canvas* c, const std::string& path) const bool PresetStorage::write(const char* path) const { - t_symbol* SYM_WITH_SPACES = gensym("_symbol_s"); - if (params_.empty()) { LIB_DBG << "no presets in storage"; return false; @@ -205,18 +205,11 @@ bool PresetStorage::write(const char* path) const if (ptr->hasFloatAt(i)) binbuf_addv(content, "sf", &s_float, ptr->floatAt(i)); else if (ptr->hasSymbolAt(i)) { - t_symbol* sym = ptr->symbolAt(i); - if (strchr(sym->s_name, ' ')) { - // has spaces - binbuf_addv(content, "ss", SYM_WITH_SPACES, sym); - } else { - // no spaces - binbuf_addv(content, "ss", &s_symbol, sym); - } + binbuf_addv(content, "ss", &s_symbol, ptr->symbolAt(i)); } else if (ptr->hasListAt(i)) { - AtomList l = ptr->listAt(i); + auto lv = ptr->listAt(i); binbuf_addv(content, "s", &s_list); - binbuf_add(content, l.size(), l.toPdData()); + binbuf_add(content, lv.size(), lv.toPdData()); } else if (ptr->hasAnyAt(i)) { AtomList l = ptr->anyAt(i); binbuf_add(content, l.size(), l.toPdData()); @@ -249,28 +242,31 @@ bool PresetStorage::read(t_canvas* c, const std::string& path) bool PresetStorage::read(const char* path) { - t_symbol* SYM_WITH_SPACES = gensym("_symbol_s"); - + using SmallAtomList = SmallAtomListN<16>; + using LineList = boost::container::small_vector; // RAII - std::unique_ptr content(binbuf_new(), binbuf_free); + using BinbufPtr = std::unique_ptr; + BinbufPtr content(binbuf_new(), binbuf_free); + BinbufPtr bb_sym(binbuf_new(), binbuf_free); int err = binbuf_read(content.get(), (char*)path, (char*)"", 0); if (err) return false; - std::vector lines; - lines.push_back(AtomList()); + LineList lines; + lines.push_back({}); const int N = binbuf_getnatom(content.get()); lines.reserve(N); t_atom* lst = binbuf_getvec(content.get()); + for (int i = 0; i < N; i++) { - lines.back().append(lst[i]); + lines.back().push_back(lst[i]); if (lst[i].a_type == A_SEMI) { - lines.push_back(AtomList()); + lines.push_back({}); continue; } } @@ -282,15 +278,15 @@ bool PresetStorage::read(const char* path) lines.pop_back(); for (size_t i = 0; i < lines.size(); i++) { - AtomList& line = lines[i]; + auto& line = lines[i]; if (line.size() < 4) continue; if (line[0].isSymbol() && line[1].isFloat() && line[2].isSymbol()) { - t_symbol* name = line[0].asSymbol(); - size_t index = line[1].asSizeT(); - t_symbol* sel = line[2].asSymbol(); + auto name = line[0].asT(); + auto index = line[1].asT(); + auto sel = line[2].asT(); if (!hasPreset(name)) continue; @@ -300,23 +296,19 @@ bool PresetStorage::read(const char* path) } else if (sel == &s_symbol) { setSymbolValueAt(name, index, line[3].asSymbol()); } else { - AtomList lst = line.slice(3); - if (lst.last() && lst.last()->isSemicolon()) - lst.remove(lst.size() - 1); - - if (sel == SYM_WITH_SPACES) { - std::string str = to_string(lst); + auto lv = line.view().subView(3); + if (!lv.empty() && lv.back().isSemicolon()) + lv = lv.subView(0, lv.size() - 1); - setSymbolValueAt(name, index, gensym(str.c_str())); - } else if (sel == &s_list) { - setListValueAt(name, index, lst); + if (sel == &s_list) { + setListValueAt(name, index, lv); } else { - setAnyValueAt(name, index, sel, lst); + setAnyValueAt(name, index, sel, lv); } } } else { - LIB_ERR << "invalid preset line: " << line; + LIB_ERR << "invalid preset line: " << line.view(); } } diff --git a/ceammc/ext/src/lib/ceammc_property.cpp b/ceammc/ext/src/lib/ceammc_property.cpp index 0456fc6f6d..1497bf3f1b 100644 --- a/ceammc/ext/src/lib/ceammc_property.cpp +++ b/ceammc/ext/src/lib/ceammc_property.cpp @@ -12,6 +12,7 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_property.h" +#include "ceammc_containers.h" #include "ceammc_crc32.h" #include "ceammc_format.h" #include "ceammc_log.h" @@ -35,7 +36,10 @@ PROP_ERR() << "check error, " << err_msg_ << ", got: " << v; \ } -#define PROP_USED(x) { const auto r = x; } +#define PROP_USED(x) \ + { \ + const auto r = x; \ + } namespace ceammc { @@ -66,24 +70,24 @@ Property::Property(const PropertyInfo& info, PropValueAccess access) info_.setAccess(access); } -bool Property::set(const AtomListView& lst) +bool Property::set(const AtomListView& lv) { if (!writeCheck()) return false; - auto res = setList(lst); + auto res = setList(lv); if (res && ok_fn_ptr_ && *ok_fn_ptr_) (*ok_fn_ptr_)(this); return res; } -bool Property::setInit(const AtomListView& view) +bool Property::setInit(const AtomListView& lv) { if (!initCheck()) return false; - auto res = setList(view); + auto res = setList(lv); if (res && ok_fn_ptr_ && *ok_fn_ptr_) (*ok_fn_ptr_)(this); @@ -134,9 +138,9 @@ bool Property::getDefault(Atom& a) const return info_.getDefault(a); } -bool Property::getDefault(AtomList& l) const +bool Property::getDefault(AtomList& lv) const { - return info_.getDefault(l); + return info_.getDefault(lv); } void Property::updateDefault() @@ -624,7 +628,8 @@ bool Property::checkFloat(t_float v) const } } - if (!std::isnormal(v) && v != 0) { + const auto ft = std::fpclassify(v); + if (!(ft == FP_NORMAL || ft == FP_ZERO)) { PROP_ERR() << "ignore denormal value: " << v; return false; } @@ -671,15 +676,15 @@ bool Property::checkAtom(const Atom& a) const return true; } -bool Property::checkList(const AtomListView& l) const +bool Property::checkList(const AtomListView& lv) const { if (!check_fn_ptr_) return true; PropListCheckFn list_fn = std::get<4>(*check_fn_ptr_); if (list_fn) { - if (!list_fn(l)) { - PROP_CHECK_ERR(l); + if (!list_fn(lv)) { + PROP_CHECK_ERR(lv); return false; } else return true; @@ -688,14 +693,14 @@ bool Property::checkList(const AtomListView& l) const PropFloatCheckFn float_fn = std::get<0>(*check_fn_ptr_); if (float_fn) { // check for all floats - for (auto& a : l) { + for (auto& a : lv) { if (!a.isFloat()) { - LogPdObject(owner(), LogLevel::LOG_ERROR).stream() << errorPrefix() << "list of floats expected, got: " << l; + LogPdObject(owner(), LogLevel::LOG_ERROR).stream() << errorPrefix() << "list of floats expected, got: " << lv; return false; } if (!float_fn(a.asFloat())) { - PROP_CHECK_ERR(l); + PROP_CHECK_ERR(lv); return false; } } @@ -706,15 +711,15 @@ bool Property::checkList(const AtomListView& l) const PropIntCheckFn int_fn = std::get<1>(*check_fn_ptr_); if (int_fn) { // check for all ints - for (auto& a : l) { + for (auto& a : lv) { if (!a.isInteger()) { LogPdObject(owner(), LogLevel::LOG_ERROR).stream() - << errorPrefix() << "list of integers expected, got: " << l; + << errorPrefix() << "list of integers expected, got: " << lv; return false; } if (!int_fn(a.asInt())) { - PROP_CHECK_ERR(l); + PROP_CHECK_ERR(lv); return false; } } @@ -725,15 +730,15 @@ bool Property::checkList(const AtomListView& l) const PropSymbolCheckFn sym_fn = std::get<2>(*check_fn_ptr_); if (sym_fn) { // check for all symbols - for (auto& a : l) { + for (auto& a : lv) { if (!a.isSymbol()) { LogPdObject(owner(), LogLevel::LOG_ERROR).stream() - << errorPrefix() << "list of symbols expected, got: " << l; + << errorPrefix() << "list of symbols expected, got: " << lv; return false; } if (!sym_fn(a.asSymbol())) { - PROP_CHECK_ERR(l); + PROP_CHECK_ERR(lv); return false; } } @@ -759,17 +764,17 @@ AtomProperty::AtomProperty(const std::string& name, const Atom& def, PropValueAc info().setDefault(def); } -bool AtomProperty::setList(const AtomListView& lst) +bool AtomProperty::setList(const AtomListView& lv) { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (lst.size() > 1) { - PROP_ERR() << "single atom value expected, got: " << lst; + if (lv.size() > 1) { + PROP_ERR() << "single atom value expected, got: " << lv; return false; } - return setValue(lst[0]); + return setValue(lv[0]); } AtomList AtomProperty::get() const @@ -829,9 +834,9 @@ ListProperty::ListProperty(const std::string& name, const AtomList& init, PropVa info().setDefault(init); } -bool ListProperty::setList(const AtomListView& l) +bool ListProperty::setList(const AtomListView& lv) { - return setValue(l); + return setValue(lv); } bool ListProperty::getList(AtomList& l) const @@ -842,19 +847,38 @@ bool ListProperty::getList(AtomList& l) const bool ListProperty::setValue(const AtomList& l) { - AtomList args = l; + if (filter_ || map_) { + using SmallList = SmallAtomListN<16>; - if (filter_) - args = args.filtered(filter_); + SmallList args; + args.reserve(l.size()); - if (map_) - args = args.map(map_); + if (filter_) { + for (auto& a : l) { + if (filter_(a)) + args.push_back(a); + } + } else + args.assign(l.begin(), l.end()); - if (!checkList(args)) - return false; + if (map_) { + for (auto& a : args) + a = map_(a); + } - lst_ = args; - return true; + if (!checkList(args.view())) + return false; + + lst_ = args.view(); + return true; + + } else { + if (!checkList(l)) + return false; + + lst_ = l; + return true; + } } const AtomList& ListProperty::defaultValue() const @@ -879,9 +903,9 @@ bool ListProperty::checkNegative() bool ListProperty::checkMinElementCount(size_t n) { - bool res = setListCheckFn([this, n](const AtomList& l) -> bool { - if (l.size() < n) { - PROP_ERR() << fmt::format("list is too short, min {} elements expected, got: {}", n, l.size()); + bool res = setListCheckFn([this, n](const AtomListView& lv) -> bool { + if (lv.size() < n) { + PROP_ERR() << fmt::format("list is too short, min {} elements expected, got: {}", n, lv.size()); return false; } else return true; @@ -897,9 +921,9 @@ bool ListProperty::checkMinElementCount(size_t n) bool ListProperty::checkMaxElementCount(size_t n) { - bool res = setListCheckFn([this, n](const AtomList& l) -> bool { - if (l.size() > n) { - PROP_ERR() << fmt::format("list is too long, max {} elements expected, got: {}", n, l.size()); + bool res = setListCheckFn([this, n](const AtomListView& lv) -> bool { + if (lv.size() > n) { + PROP_ERR() << fmt::format("list is too long, max {} elements expected, got: {}", n, lv.size()); return false; } else return true; @@ -920,13 +944,13 @@ bool ListProperty::checkRangeElementCount(size_t min, size_t max) return false; } - bool res = setListCheckFn([this, min, max](const AtomList& l) -> bool { - if (l.size() < min || l.size() > max) { + bool res = setListCheckFn([this, min, max](const AtomListView& lv) -> bool { + if (lv.size() < min || lv.size() > max) { if (min == max) - PROP_ERR() << fmt::format("expected list size {}, got: {}", min, l.size()); + PROP_ERR() << fmt::format("expected list size {}, got: {}", min, lv.size()); else - PROP_ERR() << fmt::format("expected list size in [{}-{}] range, got: {}", min, max, l.size()); + PROP_ERR() << fmt::format("expected list size in [{}-{}] range, got: {}", min, max, lv.size()); return false; } else @@ -1254,16 +1278,16 @@ SizeTProperty::SizeTProperty(const std::string& n, size_t init, PropValueAccess info().setDefault(int(init)); } -bool SizeTProperty::setList(const AtomListView& lst) +bool SizeTProperty::setList(const AtomListView& lv) { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (lst.size() == 1) - return setValue(lst[0]); - else if (lst.size() == 2 && lst[0].isSymbol() && lst[1].isFloat()) { - const auto val = lst[1].asT(); - const auto op = lst[0].asT()->s_name; + if (lv.size() == 1) + return setValue(lv[0]); + else if (lv.size() == 2 && lv[0].isSymbol() && lv[1].isFloat()) { + const auto val = lv[1].asT(); + const auto op = lv[0].asT()->s_name; if (is_op(op, '+')) return setValue(value() + val); else if (is_op(op, '-')) @@ -1277,11 +1301,11 @@ bool SizeTProperty::setList(const AtomListView& lst) } else return setValue(value() / val); } else { - PROP_ERR() << "expected +-*/, got: " << lst[0]; + PROP_ERR() << "expected +-*/, got: " << lv[0]; return false; } } else { - PROP_ERR() << "unsigned value expected, got " << lst; + PROP_ERR() << "unsigned value expected, got " << lv; return false; } } @@ -1389,17 +1413,17 @@ AtomList SymbolProperty::get() const return Atom(value_); } -bool SymbolProperty::setList(const AtomListView& lst) +bool SymbolProperty::setList(const AtomListView& lv) { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (lst.size() != 1) { - PROP_ERR() << "symbol expected, got " << lst; + if (lv.size() != 1) { + PROP_ERR() << "symbol expected, got " << lv; return false; } - return setValue(lst[0]); + return setValue(lv[0]); } bool SymbolProperty::setSymbol(t_symbol* s) diff --git a/ceammc/ext/src/lib/ceammc_property.h b/ceammc/ext/src/lib/ceammc_property.h index 853cb2464a..be45650309 100644 --- a/ceammc/ext/src/lib/ceammc_property.h +++ b/ceammc/ext/src/lib/ceammc_property.h @@ -45,7 +45,7 @@ using PropertySymbolSetter = std::function; using PropertyAtomGetter = std::function; using PropertyAtomSetter = std::function; using PropertyListGetter = std::function; -using PropertyListSetter = std::function; +using PropertyListSetter = std::function; /** * @brief Base class for all properties @@ -56,7 +56,7 @@ class Property { using PropIntCheckFn = std::function; using PropSymbolCheckFn = std::function; using PropAtomCheckFn = std::function; - using PropListCheckFn = std::function; + using PropListCheckFn = std::function; using PropSuccessFn = std::function; using CheckFnTuple = std::tuple< @@ -75,10 +75,10 @@ class Property { /// pure virtual virtual AtomList get() const = 0; - virtual bool setList(const AtomListView& lst) = 0; + virtual bool setList(const AtomListView& lv) = 0; /// virtual - virtual bool set(const AtomListView& lst); - virtual bool setInit(const AtomListView& lst); + virtual bool set(const AtomListView& lv); + virtual bool setInit(const AtomListView& lv); inline t_symbol* name() const { return info_.name(); } @@ -177,7 +177,7 @@ class Property { inline bool setT(int i) { return setInt(i); } inline bool setT(t_symbol* s) { return setSymbol(s); } inline bool setT(const Atom& a) { return setAtom(a); } - inline bool setT(const AtomList& l) { return setList(l); } + inline bool setT(const AtomListView& lv) { return setList(lv); } // freq used inline void setUnitsHz() { setUnits(PropValueUnits::HZ); } @@ -196,7 +196,7 @@ class Property { bool checkAtom(const Atom& a) const; bool checkFloat(t_float v) const; bool checkInt(int v) const; - bool checkList(const AtomListView& l) const; + bool checkList(const AtomListView& lv) const; bool checkSymbol(t_symbol* s) const; bool emptyCheck(const AtomListView& v) const; bool initCheck() const; @@ -254,7 +254,7 @@ class AtomProperty : public Property { public: AtomProperty(const std::string& name, const Atom& def, PropValueAccess access = PropValueAccess::READWRITE); - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; AtomList get() const override; bool getAtom(Atom& a) const override; @@ -283,7 +283,7 @@ class FloatProperty : public Property { FloatProperty(const std::string& name, t_float init = 0, PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; bool setFloat(t_float v) override; bool setInt(int v) override; bool getFloat(t_float& v) const override; @@ -319,7 +319,7 @@ class IntProperty : public Property { IntProperty(const std::string& name, int init = 0, PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; bool setInt(int v) override; bool getInt(int& v) const override; @@ -355,7 +355,7 @@ class SizeTProperty : public Property { SizeTProperty(const std::string& name, size_t init = 0, PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; bool getInt(int&) const override; inline size_t value() const { return v_; } @@ -381,7 +381,7 @@ class SymbolProperty : public Property { SymbolProperty(const std::string& name, t_symbol* init, PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; bool setSymbol(t_symbol* s) override; bool getSymbol(t_symbol*& s) const override; @@ -408,7 +408,7 @@ class ListProperty : public Property { ListProperty(const std::string& name, const AtomList& init = AtomList(), PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& l) override; + bool setList(const AtomListView& lv) override; bool getList(AtomList& l) const override; inline const AtomList& value() const { return lst_; } @@ -521,9 +521,9 @@ class AliasProperty : public Property { value_type value() const { return val_; } - bool setList(const AtomListView& lst) override + bool setList(const AtomListView& lv) override { - if (!lst.empty()) + if (!lv.empty()) LIB_ERR << "no arguments required for alias property: " << name(); return ptr_->setValue(val_); @@ -543,7 +543,7 @@ class BoolProperty : public Property { BoolProperty(const std::string& name, bool init, PropValueAccess access = PropValueAccess::READWRITE); AtomList get() const override; - bool setList(const AtomListView& lst) override; + bool setList(const AtomListView& lv) override; bool setBool(bool b) override; bool getBool(bool& b) const override; @@ -582,15 +582,15 @@ class PointerProperty : public Property { return true; } - bool setList(const AtomListView& lst) override + bool setList(const AtomListView& lv) override { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (!lst.isA()) + if (!lv.isA()) return false; - return setValue(atomlistToValue(lst, T())); + return setValue(atomlistToValue(lv, T())); } AtomList get() const override diff --git a/ceammc/ext/src/lib/ceammc_property_callback.cpp b/ceammc/ext/src/lib/ceammc_property_callback.cpp index c62c5b8b8e..1964c10b7f 100644 --- a/ceammc/ext/src/lib/ceammc_property_callback.cpp +++ b/ceammc/ext/src/lib/ceammc_property_callback.cpp @@ -220,6 +220,90 @@ bool CallbackProperty::checkNonNegative() } } +bool CallbackProperty::checkMin(t_float v) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::GREATER_THEN, v); + else if (isInt()) + return setIntCheck(PropValueConstraints::GREATER_THEN, v); + else { + PROP_ERR << "can't set greater-then check"; + return false; + } +} + +bool CallbackProperty::checkMinEq(t_float v) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::GREATER_EQUAL, v); + else if (isInt()) + return setIntCheck(PropValueConstraints::GREATER_EQUAL, v); + else { + PROP_ERR << "can't set greater-eq check"; + return false; + } +} + +bool CallbackProperty::checkMax(t_float v) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::LESS_THEN, v); + else if (isInt()) + return setIntCheck(PropValueConstraints::LESS_THEN, v); + else { + PROP_ERR << "can't set less-then check"; + return false; + } +} + +bool CallbackProperty::checkMaxEq(t_float v) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::LESS_EQUAL, v); + else if (isInt()) + return setIntCheck(PropValueConstraints::LESS_EQUAL, v); + else { + PROP_ERR << "can't set less-equal check"; + return false; + } +} + +bool CallbackProperty::checkClosedRange(t_float a, t_float b) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::CLOSED_RANGE, a, b); + else if (isInt()) + return setIntCheck(PropValueConstraints::CLOSED_RANGE, a, b); + else { + PROP_ERR << "can't set closed range check"; + return false; + } +} + +bool CallbackProperty::checkOpenedRange(t_float a, t_float b) +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::OPEN_RANGE, a, b); + else if (isInt()) + return setIntCheck(PropValueConstraints::OPEN_RANGE, a, b); + else { + PROP_ERR << "can't set open range check"; + return false; + } +} + +bool CallbackProperty::checkNonZero() +{ + if (isFloat()) + return setFloatCheck(PropValueConstraints::NON_ZERO); + else if (isInt()) + return setIntCheck(PropValueConstraints::NON_ZERO); + else { + PROP_ERR << "can't set non-zero check"; + return false; + } +} + void CallbackProperty::updateDefault() { if (isBool() && getter_.fn_bool) diff --git a/ceammc/ext/src/lib/ceammc_property_callback.h b/ceammc/ext/src/lib/ceammc_property_callback.h index 181a0f2073..0668869d71 100644 --- a/ceammc/ext/src/lib/ceammc_property_callback.h +++ b/ceammc/ext/src/lib/ceammc_property_callback.h @@ -123,12 +123,20 @@ class CallbackProperty : public Property { bool setInt(int i) final; bool setSymbol(t_symbol* s) final; bool setAtom(const Atom& a) final; - bool setList(const AtomListView& lst) final; + bool setList(const AtomListView& lv) final; bool checkPositive() final; bool checkNegative() final; bool checkNonNegative() final; + bool checkMin(t_float v); + bool checkMinEq(t_float v); + bool checkMax(t_float v); + bool checkMaxEq(t_float v); + bool checkClosedRange(t_float a, t_float b); + bool checkOpenedRange(t_float a, t_float b); + bool checkNonZero(); + void updateDefault() override; private: diff --git a/ceammc/ext/src/lib/ceammc_property_enum.h b/ceammc/ext/src/lib/ceammc_property_enum.h index 815527f91d..09c359cf04 100644 --- a/ceammc/ext/src/lib/ceammc_property_enum.h +++ b/ceammc/ext/src/lib/ceammc_property_enum.h @@ -82,17 +82,17 @@ class EnumProperty : public Property { return listFrom(value()); } - bool setList(const AtomListView& lst) override + bool setList(const AtomListView& lv) override { - if (!emptyCheck(lst)) + if (!emptyCheck(lv)) return false; - if (lst.size() > 1) { - LogPdObject(owner(), LogLevel::LOG_ERROR).stream() << errorPrefix() << "single value expected, got: " << lst; + if (lv.size() > 1) { + LogPdObject(owner(), LogLevel::LOG_ERROR).stream() << errorPrefix() << "single value expected, got: " << lv; return false; } - const Atom& a = lst[0]; + const Atom& a = lv[0]; if (!a.template isA()) { LogPdObject(owner(), LogLevel::LOG_ERROR).stream() << errorPrefix() << "invalid value type: " << a; return false; diff --git a/ceammc/ext/src/lib/ceammc_property_info.cpp b/ceammc/ext/src/lib/ceammc_property_info.cpp index 92a9bbf9b2..4bb8deeff9 100644 --- a/ceammc/ext/src/lib/ceammc_property_info.cpp +++ b/ceammc/ext/src/lib/ceammc_property_info.cpp @@ -12,9 +12,10 @@ * this file belongs to. *****************************************************************************/ #include "ceammc_property_info.h" -#include "ceammc_convert.h" +#include "ceammc_json.h" #include "ceammc_log.h" #include "datatype_dict.h" +#include "datatype_json.h" #include #include @@ -28,100 +29,136 @@ constexpr t_float FLOAT_INF_MAX = std::numeric_limits::max(); constexpr int INT_INF_MIN = std::numeric_limits::lowest(); constexpr int INT_INF_MAX = std::numeric_limits::max(); -t_symbol* to_symbol(PropValueType t) +const char* to_str(PropValueType t) { - static t_symbol* SYM[] = { - gensym("bool"), - gensym("int"), - gensym("float"), - gensym("symbol"), - gensym("atom"), - gensym("list") + static const char* STR[] = { + "bool", + "int", + "float", + "symbol", + "atom", + "list" }; - return SYM[static_cast(t)]; + auto idx = static_cast(t); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; } -t_symbol* to_symbol(PropValueView v) +const char* to_str(PropValueView v) { - static t_symbol* SYM[] = { - gensym("slider"), - gensym("knob"), - gensym("numbox"), - gensym("spinbox"), - gensym("toggle"), - gensym("menu"), - gensym("entry"), - gensym("color") + static const char* STR[] = { + "slider", + "knob", + "numbox", + "spinbox", + "toggle", + "menu", + "entry", + "color" }; - return SYM[static_cast(v)]; + auto idx = static_cast(v); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; +} + +const char* to_str(PropValueUnits u) +{ + static const char* STR[] = { + "unknown", + "millisecond", + "second", + "sample", + "decibel", + "degree", + "radian", + "hertz", + "percent", + "cent", + "semitone", + "tone", + "bpm" + }; + + auto idx = static_cast(u); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; } -t_symbol* to_symbol(PropValueUnits u) +const char* to_str(PropValueAccess v) { - static t_symbol* SYM[] = { - gensym("unknown"), - gensym("msec"), - gensym("sec"), - gensym("samp"), - gensym("db"), - gensym("deg"), - gensym("rad"), - gensym("hz"), - gensym("percent"), - gensym("cent"), - gensym("semitone"), - gensym("tone"), - gensym("bpm") + static const char* STR[] = { + "readonly", + "initonly", + "readwrite" }; - return SYM[static_cast(u)]; + auto idx = static_cast(v); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; } -t_symbol* to_symbol(PropValueAccess v) +const char* to_str(PropValueVis v) { - static t_symbol* SYM[] = { - gensym("readonly"), - gensym("initonly"), - gensym("readwrite") + static const char* STR[] = { + "public", + "hidden", + "internal" + }; + + auto idx = static_cast(v); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; +} + +const char* to_str(PropValueConstraints v) +{ + static const char* STR[] = { + "", + ">", + ">=", + "<", + "<=", + "[]", + "()", + "(]", + "[)", + "!=0", + "enum", + "min count", + "max count", + "range count", + "..." }; - return SYM[static_cast(v)]; + auto idx = static_cast(v); + return (idx < sizeof(STR) / (sizeof(const char*))) ? STR[idx] : "?"; } -t_symbol* to_symbol(PropValueVis v) +t_symbol* to_symbol(PropValueType t) { - static t_symbol* SYM[] = { - gensym("public"), - gensym("hidden"), - gensym("internal") - }; + return gensym(to_str(t)); +} - return SYM[static_cast(v)]; +t_symbol* to_symbol(PropValueView v) +{ + return gensym(to_str(v)); } -t_symbol* to_symbol(PropValueConstraints v) +t_symbol* to_symbol(PropValueUnits u) { - static t_symbol* SYM[] = { - gensym(""), - gensym(">"), - gensym(">="), - gensym("<"), - gensym("<="), - gensym("[]"), - gensym("()"), - gensym("(]"), - gensym("[)"), - gensym("!=0"), - gensym("enum"), - gensym("min count"), - gensym("max count"), - gensym("range count"), - gensym("...") - }; + return gensym(to_str(u)); +} - return SYM[static_cast(v)]; +t_symbol* to_symbol(PropValueAccess v) +{ + return gensym(to_str(v)); +} + +t_symbol* to_symbol(PropValueVis v) +{ + return gensym(to_str(v)); +} + +t_symbol* to_symbol(PropValueConstraints v) +{ + return gensym(to_str(v)); } static PropValueView defaultView(PropValueType type) @@ -185,11 +222,56 @@ PropertyInfo::PropertyInfo(const PropertyInfo& info) { } +PropertyInfo::PropertyInfo(PropertyInfo&& info) + : min_(info.min_) + , max_(info.max_) +{ + *this = std::move(info); +} + PropertyInfo::~PropertyInfo() { validate(); } +PropertyInfo& PropertyInfo::operator=(const PropertyInfo& info) +{ + name_ = info.name_; + default_ = info.default_; + enum_.reset(info.enum_.get() ? new AtomList(*info.enum_) : nullptr); + min_ = info.min_; + max_ = info.max_; + step_ = info.step_; + arg_index_ = info.arg_index_; + type_ = info.type_; + units_ = info.units_; + view_ = info.view_; + access_ = info.access_; + vis_ = info.vis_; + constraints_ = info.constraints_; + + return *this; +} + +PropertyInfo& PropertyInfo::operator=(PropertyInfo&& info) +{ + name_ = info.name_; + default_ = std::move(info.default_); + enum_ = std::move(info.enum_); + min_ = info.min_; + max_ = info.max_; + step_ = info.step_; + arg_index_ = info.arg_index_; + type_ = info.type_; + units_ = info.units_; + view_ = info.view_; + access_ = info.access_; + vis_ = info.vis_; + constraints_ = info.constraints_; + + return *this; +} + bool PropertyInfo::enumContains(int v) const { if (!enum_) @@ -1015,6 +1097,8 @@ bool PropertyInfo::getDict(DataTypeDict& res) const res.insert("default", defaultFloat()); else if (isInt()) res.insert("default", defaultInt()); + else if (isSymbol()) + res.insert("default", defaultSymbol()); else if (isVariant()) res.insert("default", defaultAtom()); else if (isList()) @@ -1026,4 +1110,64 @@ bool PropertyInfo::getDict(DataTypeDict& res) const return true; } +bool PropertyInfo::getJSON(std::string& str) const +{ + auto obj = nlohmann::json::object(); + + obj["name"] = name()->s_name; + obj["type"] = to_str(type()); + obj["access"] = to_str(access()); + obj["visibility"] = to_str(visibility()); + obj["view"] = to_str(view()); + + if (constraints() != PropValueConstraints::NONE) + obj["constraints"] = to_str(constraints()); + + if (units() != PropValueUnits::NONE) + obj["units"] = to_str(units()); + + if (hasArgIndex()) + obj["arg_index"] = argIndex(); + + if (hasConstraintsMin()) + obj["min"] = isFloat() ? minFloat() : minInt(); + + if (hasConstraintsMax()) + obj["max"] = isFloat() ? maxFloat() : maxInt(); + + if (hasStep()) + obj["step"] = step(); + + if (hasEnumLimit()) { + nlohmann::json j; + to_json(j, enumValues()); + obj["enum"] = j; + } + + if (!noDefault()) { + if (isBool()) + obj["default"] = defaultBool() ? 1 : 0; + else if (isFloat()) + obj["default"] = defaultFloat(); + else if (isInt()) + obj["default"] = defaultInt(); + else if (isSymbol()) + obj["default"] = defaultSymbol()->s_name; + else if (isVariant()) { + nlohmann::json j; + to_json(j, defaultAtom()); + obj["default"] = j; + } else if (isList()) { + nlohmann::json j; + to_json(j, defaultList()); + obj["default"] = j; + } else { + } + } + + str = obj.dump(-1); + + return true; +} + } diff --git a/ceammc/ext/src/lib/ceammc_property_info.h b/ceammc/ext/src/lib/ceammc_property_info.h index 1408b7d233..cba5da563b 100644 --- a/ceammc/ext/src/lib/ceammc_property_info.h +++ b/ceammc/ext/src/lib/ceammc_property_info.h @@ -163,8 +163,12 @@ class PropertyInfo { PropertyInfo(t_symbol* name, PropValueType type, PropValueAccess access = PropValueAccess::READWRITE); PropertyInfo(const std::string& name, PropValueType type, PropValueAccess access = PropValueAccess::READWRITE); PropertyInfo(const PropertyInfo& getTree); + PropertyInfo(PropertyInfo&& info); ~PropertyInfo(); + PropertyInfo& operator=(const PropertyInfo& info); + PropertyInfo& operator=(PropertyInfo&& info); + t_symbol* name() const { return name_; } /// value info @@ -308,6 +312,7 @@ class PropertyInfo { bool validate() const; bool getDict(DataTypeDict& d) const; + bool getJSON(std::string& str) const; }; template <> diff --git a/ceammc/ext/src/lib/ceammc_proxy.h b/ceammc/ext/src/lib/ceammc_proxy.h index 7a943080a1..9a6d1bb29e 100644 --- a/ceammc/ext/src/lib/ceammc_proxy.h +++ b/ceammc/ext/src/lib/ceammc_proxy.h @@ -39,6 +39,8 @@ class PdBindObject { unbind(); } + void bind(const char* name) { bind(gensym(name)); } + void bind(t_symbol* name) { assert(name); @@ -54,7 +56,9 @@ class PdBindObject { void unbind() { if (bind_name_ != &s_) { - pd_unbind(pd(), bind_name_); + if (bind_name_->s_thing) + pd_unbind(pd(), bind_name_); + bind_name_ = &s_; } } @@ -162,23 +166,29 @@ t_class* PdListProxy::proxy_class_ = nullptr; template struct InletProxy { public: - using BangMethodPtr = void (T::*)(); - using FloatMethodPtr = void (T::*)(t_float); - using AnyMethodPtr = void (T::*)(InletProxy* this_, t_symbol* s, const AtomListView& args); + using BangMethodPtr = void (T::*)(int); + using FloatMethodPtr = void (T::*)(int, t_float); + using SymbolMethodPtr = void (T::*)(int, t_symbol*); + using ListMethodPtr = void (T::*)(int, const AtomListView&); + using AnyMethodPtr = void (T::*)(int, t_symbol*, const AtomListView&); using MethodPtr = void (T::*)(const AtomListView& args); using MethodEntry = std::pair; using MethodList = std::vector; t_pd x_obj; T* dest_; + int idx_; public: - InletProxy(T* dest) + InletProxy(T* dest, int idx = -1) : dest_(dest) + , idx_(idx) { x_obj = inlet_proxy_class; } + t_pd* target() { return &x_obj; } + static void init() { inlet_proxy_class = class_new(gensym("inlet_proxy"), 0, 0, sizeof(InletProxy), CLASS_PD, A_NULL); @@ -187,19 +197,31 @@ struct InletProxy { static void on_bang(InletProxy* x) { auto obj = x->dest_; - (obj->*bang_)(); + (obj->*bang_)(x->idx_); } static void on_float(InletProxy* x, t_float f) { auto obj = x->dest_; - (obj->*float_)(f); + (obj->*float_)(x->idx_, f); + } + + static void on_symbol(InletProxy* x, t_symbol* s) + { + auto obj = x->dest_; + (obj->*symbol_)(x->idx_, s); + } + + static void on_list(InletProxy* x, t_symbol* /*s*/, int argc, t_atom* argv) + { + auto obj = x->dest_; + (obj->*list_)(x->idx_, AtomListView(argv, argc)); } static void on_any(InletProxy* x, t_symbol* s, int argc, t_atom* argv) { auto obj = x->dest_; - (obj->*any_)(x, s, AtomListView(argv, argc)); + (obj->*any_)(x->idx_, s, AtomListView(argv, argc)); } static void on_method(InletProxy* x, t_symbol* s, int argc, t_atom* argv) @@ -226,6 +248,18 @@ struct InletProxy { class_doaddfloat(inlet_proxy_class, reinterpret_cast(InletProxy::on_float)); } + static void set_symbol_callback(SymbolMethodPtr symbol_mem_fn) + { + symbol_ = symbol_mem_fn; + class_addsymbol(inlet_proxy_class, reinterpret_cast(InletProxy::on_symbol)); + } + + static void set_list_callback(ListMethodPtr list_mem_fn) + { + list_ = list_mem_fn; + class_addlist(inlet_proxy_class, reinterpret_cast(InletProxy::on_list)); + } + static void set_any_callback(AnyMethodPtr any_mem_fn) { any_ = any_mem_fn; @@ -242,6 +276,8 @@ struct InletProxy { static t_class* inlet_proxy_class; static BangMethodPtr bang_; static FloatMethodPtr float_; + static SymbolMethodPtr symbol_; + static ListMethodPtr list_; static AnyMethodPtr any_; static MethodList methods_; }; @@ -253,10 +289,100 @@ typename InletProxy::BangMethodPtr InletProxy::bang_; template typename InletProxy::FloatMethodPtr InletProxy::float_; template +typename InletProxy::SymbolMethodPtr InletProxy::symbol_; +template +typename InletProxy::ListMethodPtr InletProxy::list_; +template typename InletProxy::AnyMethodPtr InletProxy::any_; template typename InletProxy::MethodList InletProxy::methods_; +template +class DataProxy { + t_object obj_; + Data data_; + +public: + DataProxy(T* o, const Data& data) + : data_(data) + , owner_(o) + { + if (data_proxy_class_ == nullptr) + initClass(); + + assert(data_proxy_class_); + + t_object* tmp = reinterpret_cast(pd_new(data_proxy_class_)); + memcpy(&obj_, tmp, sizeof(t_object)); + pd_free((t_pd*)tmp); + } + + void onBang() { (owner_->*bang_method)(data_); } + void onFloat(t_float f) { (owner_->*float_method)(data_, f); } + void onSymbol(t_symbol* s) { (owner_->*symbol_method)(data_, s); } + void onList(const AtomListView& lv) { (owner_->*list_method)(data_, lv); } + void onAny(t_symbol* s, const AtomListView& lv) { (owner_->*any_method)(data_, s, lv); } + + t_object* object() { return &obj_; } + T* owner() { return owner_; } + const Data& data() const { return data_; } + +public: + static void on_bang(DataProxy* p) { p->onBang(); } + static void on_float(DataProxy* p, t_float f) { p->onFloat(f); } + static void on_symbol(DataProxy* p, t_symbol* s) { p->onSymbol(s); } + static void on_list(DataProxy* p, t_symbol*, int argc, t_atom* argv) { p->onList(AtomListView(argv, argc)); } + static void on_any(DataProxy* p, t_symbol* s, int argc, t_atom* argv) { p->onAny(s, AtomListView(argv, argc)); } + + static void initClass() + { + DataProxy::data_proxy_class_ = class_new(gensym("proxy data"), 0, 0, sizeof(DataProxy), CLASS_PD, A_NULL); + + auto cls = DataProxy::data_proxy_class_; + class_addbang(cls, reinterpret_cast(DataProxy::on_bang)); + class_doaddfloat(cls, reinterpret_cast(DataProxy::on_float)); + class_addsymbol(cls, reinterpret_cast(DataProxy::on_symbol)); + class_addlist(cls, reinterpret_cast(DataProxy::on_list)); + class_addanything(cls, reinterpret_cast(DataProxy::on_any)); + + bang_method = &T::data_proxy_bang; + float_method = &T::data_proxy_float; + symbol_method = &T::data_proxy_symbol; + list_method = &T::data_proxy_list; + any_method = &T::data_proxy_any; + } + +private: + T* owner_; + +private: + static t_class* data_proxy_class_; + + using BangMethod = void (T::*)(const Data&); + using FloatMethod = void (T::*)(const Data&, t_float); + using SymbolMethod = void (T::*)(const Data&, t_symbol*); + using ListMethod = void (T::*)(const Data&, const AtomListView&); + using AnyMethod = void (T::*)(const Data&, t_symbol*, const AtomListView&); + + static BangMethod bang_method; + static FloatMethod float_method; + static SymbolMethod symbol_method; + static ListMethod list_method; + static AnyMethod any_method; +}; + +template +t_class* DataProxy::data_proxy_class_ = nullptr; +template +typename DataProxy::BangMethod DataProxy::bang_method = nullptr; +template +typename DataProxy::FloatMethod DataProxy::float_method = nullptr; +template +typename DataProxy::SymbolMethod DataProxy::symbol_method = nullptr; +template +typename DataProxy::ListMethod DataProxy::list_method = nullptr; +template +typename DataProxy::AnyMethod DataProxy::any_method = nullptr; } #endif // CEAMMC_PROXY_H diff --git a/ceammc/ext/src/lib/ceammc_random.cpp b/ceammc/ext/src/lib/ceammc_random.cpp new file mode 100644 index 0000000000..ad900fb1b1 --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_random.cpp @@ -0,0 +1,67 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavski. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#include "ceammc_random.h" + +#include + +namespace ceammc { +namespace random { + + static RandomGenPtr default_gen() + { + static RandomGenPtr instance_; + if (!instance_) { + instance_.reset(new DefaultRandomGen(std::time(nullptr))); + } + + return instance_; + } + + RandomGen::RandomGen() + : gen_(default_gen()) + { + } + + void RandomGen::setSeed(uint_fast32_t v) + { + if (gen_ == default_gen()) + gen_.reset(new DefaultRandomGen(v)); + else + gen_->seed(v); + } + + float RandomGen::gen_uniform_float(float a, float b) + { + std::uniform_real_distribution dist(a, b); + return dist(*gen_); + } + + uint32_t RandomGen::gen_uniform_uint(uint32_t a, uint32_t b) + { + std::uniform_int_distribution dist(a, b); + return dist(*gen_); + } + + SeedProperty::SeedProperty(RandomGen& gen) + : IntProperty("@seed", 0) + , gen_(gen) + { + checkMinEq(0); + setSuccessFn([this](Property* p) { + gen_.setSeed(value()); + }); + } + +} +} diff --git a/ceammc/ext/src/lib/ceammc_random.h b/ceammc/ext/src/lib/ceammc_random.h new file mode 100644 index 0000000000..0ebf51d2fb --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_random.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavski. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_RANDOM_H +#define CEAMMC_RANDOM_H + +#include +#include +#include + +#include "ceammc_property.h" + +namespace ceammc { +namespace random { + + using DefaultRandomGen = std::mt19937; + using RandomGenPtr = std::shared_ptr; + + class RandomGen { + RandomGenPtr gen_; + + public: + RandomGen(); + void setSeed(uint_fast32_t v); + DefaultRandomGen& get() { return *gen_; } + + float gen_uniform_float(float a, float b); + uint32_t gen_uniform_uint(uint32_t a, uint32_t b); + }; + + class SeedProperty : public IntProperty { + RandomGen& gen_; + + public: + SeedProperty(RandomGen& gen); + }; + +} +} + +#endif // CEAMMC_RANDOM_H diff --git a/ceammc/ext/src/lib/ceammc_save_object.h b/ceammc/ext/src/lib/ceammc_save_object.h new file mode 100644 index 0000000000..e180b2b5df --- /dev/null +++ b/ceammc/ext/src/lib/ceammc_save_object.h @@ -0,0 +1,100 @@ +/***************************************************************************** + * Copyright 2022 Serge Poltavsky. All rights reserved. + * + * This file may be distributed under the terms of GNU Public License version + * 3 (GPL v3) as defined by the Free Software Foundation (FSF). A copy of the + * license should have been included with this file, or the project in which + * this file belongs to. You may also find the details of GPL v3 at: + * http://www.gnu.org/licenses/gpl-3.0.txt + * + * If you have any questions regarding the use of this file, feel free to + * contact the author of this file, or the owner of the project in which + * this file belongs to. + *****************************************************************************/ +#ifndef CEAMMC_SAVE_OBJECT_H +#define CEAMMC_SAVE_OBJECT_H + +#include "ceammc_factory.h" +#include "ceammc_object.h" + +namespace ceammc { + +template +class SaveObject : public T { +public: + SaveObject(const PdArgs& args) + : T(args) + { + bindLoader(); + } + + void saveTextObject(t_binbuf* b) + { + auto x = this->owner(); + + binbuf_addv(b, "ssii", &s__X, gensym("obj"), + (int)x->te_xpix, (int)x->te_ypix); + binbuf_addbinbuf(b, x->te_binbuf); + binbuf_addsemi(b); + } + + void saveTextObjectWidth(t_binbuf* b) + { + auto x = this->owner(); + obj_saveformat(x, b); + } + + void saveUserRecord(t_binbuf* b, t_symbol* restoreSym, const AtomListView& lv) + { + binbuf_addv(b, "ss", gensym("#A"), restoreSym); + binbuf_add(b, lv.size(), &lv.front().atom()); + binbuf_addsemi(b); + } + + virtual void saveUser(t_binbuf* b) = 0; + + virtual void onSave(t_binbuf* b) + { + saveTextObject(b); + saveUser(b); + saveTextObjectWidth(b); + } + + virtual void onRestore(const AtomListView& lv) = 0; + + void m_restore(t_symbol* /*s*/, const AtomListView& lv) { this->onRestore(lv); } + +public: + static constexpr const char* restoreSymbol = ".restore"; + +private: + void bindLoader() + { + auto asym = gensym("#A"); + asym->s_thing = nullptr; + pd_bind(&this->owner()->te_g.g_pd, asym); + } +}; + +template