aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt64
-rw-r--r--Dokumentation_German.pdfbin0 -> 177128 bytes
-rw-r--r--GnuLGPL.txt505
-rw-r--r--INSTALL_lin.txt88
-rw-r--r--LICENCE.txt20
-rw-r--r--README_lin.txt266
-rw-r--r--examples/1_simple_parameter_management.pd278
-rw-r--r--examples/2_GUI_DSP_parameter_management.pd454
-rw-r--r--examples/test_pbank.txt10
-rw-r--r--iemabs/0.INTRO.txt177
-rw-r--r--iemabs/1p1z.pd64
-rw-r--r--iemabs/7_guis-INTRO.pd813
-rw-r--r--iemabs/addl~.pd28
-rw-r--r--iemabs/all_guis-INTRO.pd19
-rw-r--r--iemabs/all_guis-INTRO.txt123
-rw-r--r--iemabs/any.pd20
-rw-r--r--iemabs/ap1c~.pd35
-rw-r--r--iemabs/ap1~.pd21
-rw-r--r--iemabs/ap2c~.pd38
-rw-r--r--iemabs/ap2~.pd25
-rw-r--r--iemabs/bng.pd265
-rw-r--r--iemabs/bp2~.pd25
-rw-r--r--iemabs/bpq2~.pd25
-rw-r--r--iemabs/bpw2~.pd25
-rw-r--r--iemabs/bs2~.pd25
-rw-r--r--iemabs/bsq2~.pd25
-rw-r--r--iemabs/bsw2~.pd25
-rw-r--r--iemabs/dbtofad.pd16
-rw-r--r--iemabs/default.pd22
-rw-r--r--iemabs/divl~.pd28
-rw-r--r--iemabs/dsp.pd75
-rw-r--r--iemabs/dsp~.pd75
-rw-r--r--iemabs/fadtodb.pd16
-rw-r--r--iemabs/fadtorms.pd18
-rw-r--r--iemabs/gainvu~.pd38
-rw-r--r--iemabs/gui-menu.pd15
-rw-r--r--iemabs/hp10_bess~.pd37
-rw-r--r--iemabs/hp10_butt~.pd37
-rw-r--r--iemabs/hp10_cheb~.pd38
-rw-r--r--iemabs/hp10_crit~.pd37
-rw-r--r--iemabs/hp1c~.pd35
-rw-r--r--iemabs/hp1~.pd21
-rw-r--r--iemabs/hp2_bess~.pd21
-rw-r--r--iemabs/hp2_butt~.pd21
-rw-r--r--iemabs/hp2_cheb~.pd22
-rw-r--r--iemabs/hp2_crit~.pd21
-rw-r--r--iemabs/hp2c~.pd37
-rw-r--r--iemabs/hp2~.pd25
-rw-r--r--iemabs/hp3_bess~.pd25
-rw-r--r--iemabs/hp3_butt~.pd25
-rw-r--r--iemabs/hp3_cheb~.pd26
-rw-r--r--iemabs/hp3_crit~.pd25
-rw-r--r--iemabs/hp4_bess~.pd25
-rw-r--r--iemabs/hp4_butt~.pd25
-rw-r--r--iemabs/hp4_cheb~.pd26
-rw-r--r--iemabs/hp4_crit~.pd25
-rw-r--r--iemabs/hp5_bess~.pd29
-rw-r--r--iemabs/hp5_butt~.pd29
-rw-r--r--iemabs/hp5_cheb~.pd30
-rw-r--r--iemabs/hp5_crit~.pd29
-rw-r--r--iemabs/hp6_bess~.pd29
-rw-r--r--iemabs/hp6_butt~.pd29
-rw-r--r--iemabs/hp6_cheb~.pd30
-rw-r--r--iemabs/hp6_crit~.pd29
-rw-r--r--iemabs/hp7_bess~.pd33
-rw-r--r--iemabs/hp7_butt~.pd33
-rw-r--r--iemabs/hp7_cheb~.pd34
-rw-r--r--iemabs/hp7_crit~.pd33
-rw-r--r--iemabs/hp8_bess~.pd33
-rw-r--r--iemabs/hp8_butt~.pd33
-rw-r--r--iemabs/hp8_cheb~.pd34
-rw-r--r--iemabs/hp8_crit~.pd33
-rw-r--r--iemabs/hp9_bess~.pd37
-rw-r--r--iemabs/hp9_butt~.pd37
-rw-r--r--iemabs/hp9_cheb~.pd38
-rw-r--r--iemabs/hp9_crit~.pd37
-rw-r--r--iemabs/hslider.pd303
-rw-r--r--iemabs/iem_anything.pd20
-rw-r--r--iemabs/iem_append.pd24
-rw-r--r--iemabs/iem_prepend.pd24
-rw-r--r--iemabs/iem_r.pd22
-rw-r--r--iemabs/iem_receive.pd22
-rw-r--r--iemabs/iem_s.pd22
-rw-r--r--iemabs/iem_send.pd22
-rw-r--r--iemabs/init_popup.pd38
-rw-r--r--iemabs/int_fract~.pd35
-rw-r--r--iemabs/lp1.wavbin0 -> 555 bytes
-rw-r--r--iemabs/lp10_bess~.pd37
-rw-r--r--iemabs/lp10_butt~.pd37
-rw-r--r--iemabs/lp10_cheb~.pd38
-rw-r--r--iemabs/lp10_crit~.pd37
-rw-r--r--iemabs/lp1c~.pd35
-rw-r--r--iemabs/lp1~.pd21
-rw-r--r--iemabs/lp2.wavbin0 -> 556 bytes
-rw-r--r--iemabs/lp2_bess~.pd21
-rw-r--r--iemabs/lp2_butt~.pd21
-rw-r--r--iemabs/lp2_cheb~.pd22
-rw-r--r--iemabs/lp2_crit~.pd21
-rw-r--r--iemabs/lp2c~.pd37
-rw-r--r--iemabs/lp2~.pd25
-rw-r--r--iemabs/lp3.wavbin0 -> 554 bytes
-rw-r--r--iemabs/lp3_bess~.pd25
-rw-r--r--iemabs/lp3_butt~.pd25
-rw-r--r--iemabs/lp3_cheb~.pd26
-rw-r--r--iemabs/lp3_crit~.pd25
-rw-r--r--iemabs/lp4_bess~.pd25
-rw-r--r--iemabs/lp4_butt~.pd25
-rw-r--r--iemabs/lp4_cheb~.pd26
-rw-r--r--iemabs/lp4_crit~.pd25
-rw-r--r--iemabs/lp5_bess~.pd29
-rw-r--r--iemabs/lp5_butt~.pd29
-rw-r--r--iemabs/lp5_cheb~.pd30
-rw-r--r--iemabs/lp5_crit~.pd29
-rw-r--r--iemabs/lp6_bess~.pd29
-rw-r--r--iemabs/lp6_butt~.pd29
-rw-r--r--iemabs/lp6_cheb~.pd30
-rw-r--r--iemabs/lp6_crit~.pd29
-rw-r--r--iemabs/lp7_bess~.pd33
-rw-r--r--iemabs/lp7_butt~.pd33
-rw-r--r--iemabs/lp7_cheb~.pd34
-rw-r--r--iemabs/lp7_crit~.pd33
-rw-r--r--iemabs/lp8_bess~.pd33
-rw-r--r--iemabs/lp8_butt~.pd33
-rw-r--r--iemabs/lp8_cheb~.pd34
-rw-r--r--iemabs/lp8_crit~.pd33
-rw-r--r--iemabs/lp9_bess~.pd37
-rw-r--r--iemabs/lp9_butt~.pd37
-rw-r--r--iemabs/lp9_cheb~.pd38
-rw-r--r--iemabs/lp9_crit~.pd37
-rw-r--r--iemabs/maverage~.pd27
-rw-r--r--iemabs/merge_any.pd20
-rw-r--r--iemabs/mull~.pd28
-rw-r--r--iemabs/my_canvas.pd243
-rw-r--r--iemabs/my_numbox.pd302
-rw-r--r--iemabs/once.pd43
-rw-r--r--iemabs/output~.pd27
-rw-r--r--iemabs/pink~.pd16
-rw-r--r--iemabs/popup.pd25
-rw-r--r--iemabs/pp.pd24
-rw-r--r--iemabs/prepend.pd24
-rw-r--r--iemabs/radiobutton.pd282
-rw-r--r--iemabs/rbpq2~.pd25
-rw-r--r--iemabs/rbpw2~.pd25
-rw-r--r--iemabs/receive2list.pd1868
-rw-r--r--iemabs/rmstofad.pd18
-rw-r--r--iemabs/round~.pd21
-rw-r--r--iemabs/split3.pd32
-rw-r--r--iemabs/subl~.pd28
-rw-r--r--iemabs/test1.mp3bin0 -> 62693 bytes
-rw-r--r--iemabs/test_dollarg.pd42
-rw-r--r--iemabs/testtone~.pd32
-rw-r--r--iemabs/toggle.pd273
-rw-r--r--iemabs/unsig~.pd24
-rw-r--r--iemabs/vcf_bp2~.pd23
-rw-r--r--iemabs/vcf_bp4~.pd29
-rw-r--r--iemabs/vcf_bp6~.pd33
-rw-r--r--iemabs/vcf_bp8~.pd37
-rw-r--r--iemabs/vcf_hp2~.pd22
-rw-r--r--iemabs/vcf_hp4~.pd29
-rw-r--r--iemabs/vcf_hp6~.pd33
-rw-r--r--iemabs/vcf_hp8~.pd39
-rw-r--r--iemabs/vcf_lp2~.pd23
-rw-r--r--iemabs/vcf_lp4~.pd29
-rw-r--r--iemabs/vcf_lp6~.pd33
-rw-r--r--iemabs/vcf_lp8~.pd39
-rw-r--r--iemabs/vcf_rbp2~.pd23
-rw-r--r--iemabs/vcf_rbp4~.pd29
-rw-r--r--iemabs/vcf_rbp6~.pd33
-rw-r--r--iemabs/vcf_rbp8~.pd37
-rw-r--r--iemabs/vdial.pd285
-rw-r--r--iemabs/vslider.pd302
-rw-r--r--iemabs/vu.pd248
-rw-r--r--iemabs/x_all_guis.pd20
-rw-r--r--iemabs/xx_xx.wav10
-rw-r--r--iemhelp/0.INTRO.txt177
-rw-r--r--iemhelp/7_guis-INTRO.pd813
-rw-r--r--iemhelp/all_guis-INTRO.pd19
-rw-r--r--iemhelp/all_guis-INTRO.txt123
-rw-r--r--iemhelp/bng.pd265
-rw-r--r--iemhelp/gui-menue.pd23
-rw-r--r--iemhelp/help-$n.pd92
-rw-r--r--iemhelp/help-FIR~.pd59
-rw-r--r--iemhelp/help-LFO_noise~.pd35
-rw-r--r--iemhelp/help-add2_comma.pd54
-rw-r--r--iemhelp/help-addl~.pd28
-rw-r--r--iemhelp/help-any.pd137
-rw-r--r--iemhelp/help-ap1~.pd61
-rw-r--r--iemhelp/help-ap2~.pd65
-rw-r--r--iemhelp/help-bpe.pd46
-rw-r--r--iemhelp/help-bpq2~.pd59
-rw-r--r--iemhelp/help-bpw2~.pd59
-rw-r--r--iemhelp/help-bsq2~.pd59
-rw-r--r--iemhelp/help-bsw2~.pd59
-rw-r--r--iemhelp/help-db2v.pd14
-rw-r--r--iemhelp/help-dbtofad.pd17
-rw-r--r--iemhelp/help-default.pd15
-rw-r--r--iemhelp/help-divl~.pd28
-rw-r--r--iemhelp/help-dollarg.pd92
-rw-r--r--iemhelp/help-dsp.pd16
-rw-r--r--iemhelp/help-dsp~.pd16
-rw-r--r--iemhelp/help-exp_inc.pd77
-rw-r--r--iemhelp/help-f2note.pd21
-rw-r--r--iemhelp/help-fade~.pd47
-rw-r--r--iemhelp/help-fadtodb.pd17
-rw-r--r--iemhelp/help-fadtorms.pd17
-rw-r--r--iemhelp/help-float24.pd74
-rw-r--r--iemhelp/help-for++.pd71
-rw-r--r--iemhelp/help-gate.pd29
-rw-r--r--iemhelp/help-hml_shelf~.pd96
-rw-r--r--iemhelp/help-hp10_butt~.pd54
-rw-r--r--iemhelp/help-hp10_cheb~.pd54
-rw-r--r--iemhelp/help-hp10_crit~.pd54
-rw-r--r--iemhelp/help-hp1~.pd55
-rw-r--r--iemhelp/help-hp2_butt~.pd54
-rw-r--r--iemhelp/help-hp2_cheb~.pd54
-rw-r--r--iemhelp/help-hp2_crit~.pd54
-rw-r--r--iemhelp/help-hp2~.pd59
-rw-r--r--iemhelp/help-hp3_butt~.pd54
-rw-r--r--iemhelp/help-hp3_cheb~.pd54
-rw-r--r--iemhelp/help-hp3_crit~.pd54
-rw-r--r--iemhelp/help-hp4_butt~.pd54
-rw-r--r--iemhelp/help-hp4_cheb~.pd54
-rw-r--r--iemhelp/help-hp4_crit~.pd54
-rw-r--r--iemhelp/help-hp5_butt~.pd54
-rw-r--r--iemhelp/help-hp5_cheb~.pd54
-rw-r--r--iemhelp/help-hp5_crit~.pd54
-rw-r--r--iemhelp/help-hp6_butt~.pd54
-rw-r--r--iemhelp/help-hp6_cheb~.pd54
-rw-r--r--iemhelp/help-hp6_crit~.pd54
-rw-r--r--iemhelp/help-hp7_butt~.pd54
-rw-r--r--iemhelp/help-hp7_cheb~.pd54
-rw-r--r--iemhelp/help-hp7_crit~.pd54
-rw-r--r--iemhelp/help-hp8_butt~.pd54
-rw-r--r--iemhelp/help-hp8_cheb~.pd54
-rw-r--r--iemhelp/help-hp8_crit~.pd54
-rw-r--r--iemhelp/help-hp9_butt~.pd54
-rw-r--r--iemhelp/help-hp9_cheb~.pd54
-rw-r--r--iemhelp/help-hp9_crit~.pd54
-rw-r--r--iemhelp/help-iem_anything.pd137
-rw-r--r--iemhelp/help-iem_append.pd72
-rw-r--r--iemhelp/help-iem_blocksize~.pd37
-rw-r--r--iemhelp/help-iem_i_route.pd132
-rw-r--r--iemhelp/help-iem_pbank.pbank10
-rw-r--r--iemhelp/help-iem_pbank_csv.pd158
-rw-r--r--iemhelp/help-iem_prepend.pd72
-rw-r--r--iemhelp/help-iem_receive.pd39
-rw-r--r--iemhelp/help-iem_route.pd41
-rw-r--r--iemhelp/help-iem_samplerate~.pd37
-rw-r--r--iemhelp/help-iem_sel_any.pd53
-rw-r--r--iemhelp/help-iem_send.pd62
-rw-r--r--iemhelp/help-ii.pd46
-rw-r--r--iemhelp/help-iiroute.pd132
-rw-r--r--iemhelp/help-init.pd46
-rw-r--r--iemhelp/help-int_fract~.pd32
-rw-r--r--iemhelp/help-list2send.pd83
-rw-r--r--iemhelp/help-lp10_butt~.pd54
-rw-r--r--iemhelp/help-lp10_cheb~.pd54
-rw-r--r--iemhelp/help-lp10_crit~.pd54
-rw-r--r--iemhelp/help-lp1_t~.pd56
-rw-r--r--iemhelp/help-lp1~.pd55
-rw-r--r--iemhelp/help-lp2_butt~.pd54
-rw-r--r--iemhelp/help-lp2_cheb~.pd54
-rw-r--r--iemhelp/help-lp2_crit~.pd54
-rw-r--r--iemhelp/help-lp2~.pd60
-rw-r--r--iemhelp/help-lp3_butt~.pd54
-rw-r--r--iemhelp/help-lp3_cheb~.pd54
-rw-r--r--iemhelp/help-lp3_crit~.pd54
-rw-r--r--iemhelp/help-lp4_butt~.pd54
-rw-r--r--iemhelp/help-lp4_cheb~.pd54
-rw-r--r--iemhelp/help-lp4_crit~.pd54
-rw-r--r--iemhelp/help-lp5_butt~.pd54
-rw-r--r--iemhelp/help-lp5_cheb~.pd54
-rw-r--r--iemhelp/help-lp5_crit~.pd54
-rw-r--r--iemhelp/help-lp6_butt~.pd54
-rw-r--r--iemhelp/help-lp6_cheb~.pd54
-rw-r--r--iemhelp/help-lp6_crit~.pd54
-rw-r--r--iemhelp/help-lp7_butt~.pd54
-rw-r--r--iemhelp/help-lp7_cheb~.pd54
-rw-r--r--iemhelp/help-lp7_crit~.pd54
-rw-r--r--iemhelp/help-lp8_butt~.pd54
-rw-r--r--iemhelp/help-lp8_cheb~.pd54
-rw-r--r--iemhelp/help-lp8_crit~.pd54
-rw-r--r--iemhelp/help-lp9_butt~.pd54
-rw-r--r--iemhelp/help-lp9_cheb~.pd54
-rw-r--r--iemhelp/help-lp9_crit~.pd54
-rw-r--r--iemhelp/help-maverage~.pd45
-rw-r--r--iemhelp/help-merge_any.pd77
-rw-r--r--iemhelp/help-mergefilename.pd48
-rw-r--r--iemhelp/help-modulo_counter.pd19
-rw-r--r--iemhelp/help-mp3play~.pd146
-rw-r--r--iemhelp/help-mull~.pd28
-rw-r--r--iemhelp/help-once.pd30
-rw-r--r--iemhelp/help-para_bp2~.pd64
-rw-r--r--iemhelp/help-peakenv~.pd35
-rw-r--r--iemhelp/help-pink~.pd31
-rw-r--r--iemhelp/help-post_netreceive.pd109
-rw-r--r--iemhelp/help-pp.pd72
-rw-r--r--iemhelp/help-pre_inlet.pd39
-rw-r--r--iemhelp/help-pre_netsend.pd45
-rw-r--r--iemhelp/help-prepend.pd72
-rw-r--r--iemhelp/help-prepend_ascii.pd42
-rw-r--r--iemhelp/help-prvu~.pd135
-rw-r--r--iemhelp/help-pvu~.pd117
-rw-r--r--iemhelp/help-rbpq2~.pd59
-rw-r--r--iemhelp/help-rbpw2~.pd59
-rw-r--r--iemhelp/help-receive2list.pd98
-rw-r--r--iemhelp/help-rmstofad.pd22
-rw-r--r--iemhelp/help-round_zero.pd18
-rw-r--r--iemhelp/help-round~.pd25
-rw-r--r--iemhelp/help-rvu~.pd109
-rw-r--r--iemhelp/help-sin_phase~.pd61
-rw-r--r--iemhelp/help-soundfile_info.pd34
-rw-r--r--iemhelp/help-speedlim.pd30
-rw-r--r--iemhelp/help-split.pd25
-rw-r--r--iemhelp/help-split3.pd30
-rw-r--r--iemhelp/help-splitfilename.pd67
-rw-r--r--iemhelp/help-stripfilename.pd24
-rw-r--r--iemhelp/help-subl~.pd28
-rw-r--r--iemhelp/help-t3_bpe.pd101
-rw-r--r--iemhelp/help-t3_delay.pd75
-rw-r--r--iemhelp/help-t3_line~.pd93
-rw-r--r--iemhelp/help-t3_metro.pd99
-rw-r--r--iemhelp/help-t3_sig~.pd69
-rw-r--r--iemhelp/help-t3_timer.pd22
-rw-r--r--iemhelp/help-toggle_mess.pd69
-rw-r--r--iemhelp/help-transf_fader.pd30
-rw-r--r--iemhelp/help-unsig~.pd27
-rw-r--r--iemhelp/help-unsymbol.pd20
-rw-r--r--iemhelp/help-v2db.pd14
-rw-r--r--iemhelp/help-vcf_bp2~.pd68
-rw-r--r--iemhelp/help-vcf_bp4~.pd68
-rw-r--r--iemhelp/help-vcf_bp6~.pd68
-rw-r--r--iemhelp/help-vcf_bp8~.pd68
-rw-r--r--iemhelp/help-vcf_hp2~.pd68
-rw-r--r--iemhelp/help-vcf_hp4~.pd68
-rw-r--r--iemhelp/help-vcf_hp6~.pd68
-rw-r--r--iemhelp/help-vcf_hp8~.pd68
-rw-r--r--iemhelp/help-vcf_lp2~.pd68
-rw-r--r--iemhelp/help-vcf_lp4~.pd68
-rw-r--r--iemhelp/help-vcf_lp6~.pd68
-rw-r--r--iemhelp/help-vcf_lp8~.pd68
-rw-r--r--iemhelp/help-vcf_rbp2~.pd68
-rw-r--r--iemhelp/help-vcf_rbp4~.pd68
-rw-r--r--iemhelp/help-vcf_rbp6~.pd68
-rw-r--r--iemhelp/help-vcf_rbp8~.pd68
-rw-r--r--iemhelp/help-wrap.pd16
-rw-r--r--iemhelp/hslider.pd303
-rw-r--r--iemhelp/lp1.wavbin0 -> 556 bytes
-rw-r--r--iemhelp/lp2.wavbin0 -> 556 bytes
-rw-r--r--iemhelp/lp3.wavbin0 -> 556 bytes
-rw-r--r--iemhelp/my_canvas.pd243
-rw-r--r--iemhelp/my_numbox.pd302
-rw-r--r--iemhelp/popup.pd25
-rw-r--r--iemhelp/radiobutton.pd282
-rw-r--r--iemhelp/test1.mp3bin0 -> 62693 bytes
-rw-r--r--iemhelp/test_dollarg.pd42
-rw-r--r--iemhelp/toggle.pd273
-rw-r--r--iemhelp/vdial.pd285
-rw-r--r--iemhelp/vslider.pd302
-rw-r--r--iemhelp/vu.pd248
-rw-r--r--iemhelp/x_all_guis.pd20
-rwxr-xr-xlib/iem_mp3.pd_linuxbin0 -> 65316 bytes
-rwxr-xr-xlib/iem_t3_lib.pd_linuxbin0 -> 15052 bytes
-rwxr-xr-xlib/iemlib1.pd_linuxbin0 -> 67708 bytes
-rwxr-xr-xlib/iemlib2.pd_linuxbin0 -> 79000 bytes
-rw-r--r--src/iem_mp3/iem_mp3.c35
-rw-r--r--src/iem_mp3/iem_mp3.dsp85
-rw-r--r--src/iem_mp3/iem_mp3.dsw29
-rw-r--r--src/iem_mp3/iemlib.h98
-rw-r--r--src/iem_mp3/makefile50
-rw-r--r--src/iem_mp3/makefile_win38
-rw-r--r--src/iem_mp3/sigmp3play.c3865
-rw-r--r--src/iem_t3_lib/iem_t3_lib.c65
-rw-r--r--src/iem_t3_lib/iem_t3_lib.dsp85
-rw-r--r--src/iem_t3_lib/iem_t3_lib.dsw29
-rw-r--r--src/iem_t3_lib/iemlib.h98
-rw-r--r--src/iem_t3_lib/makefile56
-rw-r--r--src/iem_t3_lib/makefile_win43
-rw-r--r--src/iem_t3_lib/sigt3_line.c279
-rw-r--r--src/iem_t3_lib/sigt3_sig.c200
-rw-r--r--src/iem_t3_lib/t3_bpe.c142
-rw-r--r--src/iem_t3_lib/t3_delay.c97
-rw-r--r--src/iem_t3_lib/t3_metro.c121
-rw-r--r--src/iem_t3_lib/t3_timer.c55
-rw-r--r--src/iemlib1/biquad_freq_resp.c92
-rw-r--r--src/iemlib1/db2v.c45
-rw-r--r--src/iemlib1/f2note.c189
-rw-r--r--src/iemlib1/forpp.c192
-rw-r--r--src/iemlib1/gate.c84
-rw-r--r--src/iemlib1/iemlib.h98
-rw-r--r--src/iemlib1/iemlib1.c82
-rw-r--r--src/iemlib1/iemlib1.dsp85
-rw-r--r--src/iemlib1/iemlib1.dsw29
-rw-r--r--src/iemlib1/makefile72
-rw-r--r--src/iemlib1/makefile.darwin72
-rw-r--r--src/iemlib1/makefile_win61
-rw-r--r--src/iemlib1/sigFIR.c177
-rw-r--r--src/iemlib1/sigfilter.c822
-rw-r--r--src/iemlib1/sighml_shelf.c558
-rw-r--r--src/iemlib1/sigiem_cot4.c176
-rw-r--r--src/iemlib1/sigiem_delay.c208
-rw-r--r--src/iemlib1/sigiem_pow4.c86
-rw-r--r--src/iemlib1/sigiem_sqrt4.c117
-rw-r--r--src/iemlib1/siglp1_t.c219
-rw-r--r--src/iemlib1/sigmov_avrg_kern.c143
-rw-r--r--src/iemlib1/sigpara_bp2.c426
-rw-r--r--src/iemlib1/sigpeakenv.c102
-rw-r--r--src/iemlib1/sigprvu.c282
-rw-r--r--src/iemlib1/sigpvu.c206
-rw-r--r--src/iemlib1/sigrvu.c187
-rw-r--r--src/iemlib1/sigsin_phase.c129
-rw-r--r--src/iemlib1/sigvcf_filter.c334
-rw-r--r--src/iemlib1/soundfile_info.c261
-rw-r--r--src/iemlib1/split.c54
-rw-r--r--src/iemlib1/v2db.c45
-rw-r--r--src/iemlib2/add2_comma.c123
-rw-r--r--src/iemlib2/bpe.c125
-rw-r--r--src/iemlib2/dollarg.c113
-rw-r--r--src/iemlib2/exp_inc.c138
-rw-r--r--src/iemlib2/float24.c83
-rw-r--r--src/iemlib2/iem_anything_kernel.c148
-rw-r--r--src/iemlib2/iem_append_kernel.c351
-rw-r--r--src/iemlib2/iem_i_route.c111
-rw-r--r--src/iemlib2/iem_pbank_csv.c801
-rw-r--r--src/iemlib2/iem_prepend_kernel.c259
-rw-r--r--src/iemlib2/iem_receive_kernel.c155
-rw-r--r--src/iemlib2/iem_route.c198
-rw-r--r--src/iemlib2/iem_sel_any.c111
-rw-r--r--src/iemlib2/iem_send_kernel.c140
-rw-r--r--src/iemlib2/iemlib.h98
-rw-r--r--src/iemlib2/iemlib2.c121
-rw-r--r--src/iemlib2/iemlib2.dsp85
-rw-r--r--src/iemlib2/iemlib2.dsw29
-rw-r--r--src/iemlib2/init.c203
-rw-r--r--src/iemlib2/list2send.c246
-rw-r--r--src/iemlib2/makefile82
-rw-r--r--src/iemlib2/makefile_win71
-rw-r--r--src/iemlib2/mergefilename.c229
-rw-r--r--src/iemlib2/modulo_counter.c90
-rw-r--r--src/iemlib2/post_netreceive.c243
-rw-r--r--src/iemlib2/pre_inlet.c94
-rw-r--r--src/iemlib2/prepend_ascii.c127
-rw-r--r--src/iemlib2/prepend_kernel.c351
-rw-r--r--src/iemlib2/round_zero.c67
-rw-r--r--src/iemlib2/sigLFO_noise.c129
-rw-r--r--src/iemlib2/sigfade.c183
-rw-r--r--src/iemlib2/sigiem_blocksize.c61
-rw-r--r--src/iemlib2/sigiem_samplerate.c61
-rw-r--r--src/iemlib2/sigm2f.c127
-rw-r--r--src/iemlib2/speedlim.c107
-rw-r--r--src/iemlib2/splitfilename.c142
-rw-r--r--src/iemlib2/stripfilename.c81
-rw-r--r--src/iemlib2/toggle_mess.c119
-rw-r--r--src/iemlib2/transf_fader.c153
-rw-r--r--src/iemlib2/unsymbol.c49
-rw-r--r--src/iemlib2/wrap.c69
-rwxr-xr-xstart_pd365
-rwxr-xr-xstart_pd36_inst5
458 files changed, 42056 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 0000000..723bb06
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,64 @@
+iemlib Release 1.15:
+
+
+improvements:
+
+all signal-filters are more stable
+speedlim lost its change-characteristic
+iem_pbank_csv lost its 3.arg, but got a buffer and more
+ recall-options
+
+
+
+new:
+
+more high-order IIR-filters
+ (odd order 3. 5. 7. 9.)
+ (critical damping and bessel-characteristic)
+
+more VCFs with signal-parameters
+ (vcf_hp~, vcf_bp~, vcf_rbp~)
+
+addl~ signal-addition with line~
+divl~ signal-divison with line~
+mull~ signal-multiplication with line~
+subl~ signal-subtraction with line~
+rvu~ rms VU-meter interface
+iem_blocksize~ blocksize of a window in samples
+iem_samplerate~ samplerate of a window in Hertz
+int_fract~ split signal-float to integer- and fractal-part
+round~ round signal-float to nearest integer
+sin_phase~ output phase-difference of 2 sinewaves in samples
+1p1z float-message-filter 1.order
+dbtofad midi-db to fader-characteristic
+fadtodb fader-characteristic to midi-db
+fadtorms fader-characteristic to rms
+rmstofad rms to fader-characteristic
+round_zero round numbers near zero to zero
+transf_fader partial linear characteristic diagram (like table)
+wrap wraparound
+default replace initial-argument, if it is zero
+float24 store a 24-bit accurate float-number
+once any message pass through only the first time
+add2_comma add a comma-separated message to a messagebox
+iem_receive catch "sent" messages (receive-name-input) (abbr. iem_r)
+iem_sel_any control a message-box with multiple content
+iem_send send messages to named object (send-name-input)(ab. iem_s)
+pre_inlet output an identifier-message and then the incoming message
+soundfile_info output header-info of a wav-file
+
+
+
+name-changes (but compatible aliases):
+
+merge_any -> iem_append
+prepend -> iem_prepend
+
+
+
+incompatible changes:
+
+post_netreceive -> list2send array of send-objects
+pre_netsend -> receive2list array of receive-objects
+
+
diff --git a/Dokumentation_German.pdf b/Dokumentation_German.pdf
new file mode 100644
index 0000000..06ecb7b
--- /dev/null
+++ b/Dokumentation_German.pdf
Binary files differ
diff --git a/GnuLGPL.txt b/GnuLGPL.txt
new file mode 100644
index 0000000..4b6aba7
--- /dev/null
+++ b/GnuLGPL.txt
@@ -0,0 +1,505 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
diff --git a/INSTALL_lin.txt b/INSTALL_lin.txt
new file mode 100644
index 0000000..60df107
--- /dev/null
+++ b/INSTALL_lin.txt
@@ -0,0 +1,88 @@
+Installation-guide for iemlib under linux
+
+iemlib_R1.15 is written by Thomas Musil from IEM Graz Austria
+ and it is compatible to miller puckette's pd-0.36-0 and pd-0.37-0.
+see also LICENCE.txt, GnuLGPL.txt and README.txt.
+
+
+1.) open a unix-shell, login as superuser, download and copy iemlib_R1.15_lin.tgz into your source-directory
+ (e.g. /usr/local/src/iemlib_R1.15_lin.tgz)
+
+2.) untar and unzip iemlib_R1.15_lin.tgz
+ "shell"> tar xzvf iemlib_R1.15_lin.tgz
+ (and a directory iemlib_R1.15 will be created)
+
+3.) create an externs-directory in your pd-installation-directory (if it does not exist)
+ "shell"> mkdir /usr/local/lib/pd/externs
+
+4.) copy external-libraries
+ iemlib contains 4 *.pd_linux files (iem_mp3.pd_linux, iem_t3_lib.pd_linux, iemlib1.pd_linux, iemlib2.pd_linux)
+ "shell"> cp /usr/local/src/iemlib_R1.15/lib/*.pd_linux /usr/local/lib/pd/externs/
+
+5.) copy pd-abstractions-folder
+ "shell"> cp -r /usr/local/src/iemlib_R1.15/iemabs /usr/local/lib/pd
+
+6.a) copy pd-help-files-folder (pd-0.36-0)
+ "shell"> cp -r /usr/local/src/iemlib_R1.15/iemhelp /usr/local/lib/pd/doc/5.reference/
+
+6.b) copy pd-help-files (pd-0.37-0)
+ "shell"> cp /usr/local/src/iemlib_R1.15/iemhelp/*.* /usr/local/lib/pd/iemabs/
+
+7.) add to your pd_start_script, or into your pd-resource-file ~/.pdrc,
+ the following configuration-options:
+
+ -path /usr/local/lib/pd/externs -path /usr/local/lib/pd/iemabs -lib iemlib1:iemlib2:iem_mp3:iem_t3_lib
+
+ or create an executable textfile start_pd36 with this content:
+
+#!/bin/sh
+/usr/local/bin/pd -r 44100 -channels 2 -audiobuf 160 -audiodev 1 -nomidi \
+-path /usr/local/lib/pd/externs -path /usr/local/lib/pd/iemabs \
+-lib iemlib1 -lib iemlib2 -lib iem_mp3 -lib iem_t3_lib
+
+
+
+How to compile iemlib under linux
+
+after installing iemlib:
+
+8.a) edit makefile of iemlib1
+ change to directory /usr/local/src/iemlib_R1.15/src/iemlib1
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+8.b) compile iemlib1
+ "shell"> make
+ ( after this command, iemlib1.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+9.a) edit makefile of iemlib2
+ change to directory /usr/local/src/iemlib_R1.15/src/iemlib2
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+9.b) compile iemlib2
+ "shell"> make
+ ( after this command, iemlib2.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+10.a) edit makefile of iem_mp3
+ change to directory /usr/local/src/iemlib_R1.15/src/iem_mp3
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+10.b) compile iem_mp3
+ "shell"> make
+ ( after this command, iem_mp3.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+11.a) edit makefile of iem_t3_lib
+ change to directory /usr/local/src/iemlib_R1.15/src/iem_t3_lib
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+11.b) compile iem_t3_lib
+ "shell"> make
+ ( after this command, iem_t3_lib.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+
+12.) copy external-libraries
+ "shell"> cd /usr/local/src/iemlib_R1.15/lib
+ "shell"> cp /usr/local/src/iemlib_R1.15/lib/*.pd_linux /usr/local/lib/externs/
diff --git a/LICENCE.txt b/LICENCE.txt
new file mode 100644
index 0000000..cd5f562
--- /dev/null
+++ b/LICENCE.txt
@@ -0,0 +1,20 @@
+Copyright (C) IEM 2003, Thomas MUSIL [musil@iem.at]
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details (see GnuLGPL.txt).
+(e.g. http://www.gnu.org/copyleft/lesser.html)
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+IEM - Institute of Electronic Music and Acoustics, Graz
+Inffeldgasse 10/3, 8010 Graz, Austria
+http://iem.at \ No newline at end of file
diff --git a/README_lin.txt b/README_lin.txt
new file mode 100644
index 0000000..d75a861
--- /dev/null
+++ b/README_lin.txt
@@ -0,0 +1,266 @@
+Installation-guide for iemlib under linux
+
+iemlib_R1.15 is written by Thomas Musil from IEM Graz Austria
+ and it is compatible to miller puckette's pd-0.36-0 and pd-0.37-0.
+see also LICENCE.txt, GnuLGPL.txt and README.txt.
+
+1.) open a unix-shell, login as superuser, download and copy iemlib_R1.15_lin.tgz into your source-directory
+ (e.g. /usr/local/src/iemlib_R1.15_lin.tgz)
+
+2.) untar and unzip iemlib_R1.15_lin.tgz
+ "shell"> tar xzvf iemlib_R1.15_lin.tgz
+ (and a directory iemlib_R1.15 will be created)
+
+3.) create an externs-directory in your pd-installation-directory (if it does not exist)
+ "shell"> mkdir /usr/local/lib/pd/externs
+
+4.) copy external-libraries
+ iemlib contains 4 *.pd_linux files (iem_mp3.pd_linux, iem_t3_lib.pd_linux, iemlib1.pd_linux, iemlib2.pd_linux)
+ "shell"> cp /usr/local/src/iemlib_R1.15/lib/*.pd_linux /usr/local/lib/pd/externs/
+
+5.) copy pd-abstractions-folder
+ "shell"> cp -r /usr/local/src/iemlib_R1.15/iemabs /usr/local/lib/pd
+
+6.a) copy pd-help-files-folder (pd-0.36-0)
+ "shell"> cp -r /usr/local/src/iemlib_R1.15/iemhelp /usr/local/lib/pd/doc/5.reference/
+
+6.b) copy pd-help-files (pd-0.37-0)
+ "shell"> cp /usr/local/src/iemlib_R1.15/iemhelp/*.* /usr/local/lib/pd/iemabs/
+
+7.) add to your pd_start_script, or into your pd-resource-file ~/.pdrc,
+ the following configuration-options:
+
+ -path /usr/local/lib/pd/externs -path /usr/local/lib/pd/iemabs -lib iemlib1:iemlib2:iem_mp3:iem_t3_lib
+
+ or create an executable textfile start_pd36 with this content:
+
+#!/bin/sh
+/usr/local/bin/pd -r 44100 -channels 2 -audiobuf 160 -audiodev 1 -nomidi \
+-path /usr/local/lib/pd/externs -path /usr/local/lib/pd/iemabs \
+-lib iemlib1 -lib iemlib2 -lib iem_mp3 -lib iem_t3_lib
+
+
+
+How to compile iemlib under linux
+
+after installing iemlib:
+
+8.a) edit makefile of iemlib1
+ change to directory /usr/local/src/iemlib_R1.15/src/iemlib1
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+8.b) compile iemlib1
+ "shell"> make
+ ( after this command, iemlib1.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+9.a) edit makefile of iemlib2
+ change to directory /usr/local/src/iemlib_R1.15/src/iemlib2
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+9.b) compile iemlib2
+ "shell"> make
+ ( after this command, iemlib2.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+10.a) edit makefile of iem_mp3
+ change to directory /usr/local/src/iemlib_R1.15/src/iem_mp3
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+10.b) compile iem_mp3
+ "shell"> make
+ ( after this command, iem_mp3.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+11.a) edit makefile of iem_t3_lib
+ change to directory /usr/local/src/iemlib_R1.15/src/iem_t3_lib
+ and edit the following line of makefile and save
+ ( INCLUDE = -I. -I/usr/local/src/pd/src )
+
+11.b) compile iem_t3_lib
+ "shell"> make
+ ( after this command, iem_t3_lib.pd_linux will be created in /usr/local/src/iemlib_R1.15/lib/ ).
+
+
+12.) copy external-libraries
+ "shell"> cd /usr/local/src/iemlib_R1.15/lib
+ "shell"> cp /usr/local/src/iemlib_R1.15/lib/*.pd_linux /usr/local/lib/externs/
+
+
+
+contents of iemlib Release 1.15 from December 2003
+
+============================ DSP~ ===============================
+
+------------------------- filter~ -------------------------------
+FIR~ finite impuls response filter, with array-coefficients
+
+maverage~ moving average filter, (IIR + delay)
+
+ap1~ allpass 1.order
+ap2~ allpass 2.order
+bpq2~ bandpass 2.order with Q-inlet
+bpw2~ bandpass 2.order with bandwidth-inlet
+bsq2~ bandstop 2.order (notch) with Q-inlet
+bsw2~ bandstop 2.order (notch) with bandwidth-inlet
+hp1~ highpass 1.order
+hp2~ highpass 2.order
+lp1~ lowpass 1.order
+lp2~ lowpass 2.order
+rbpq2~ resonance-bandpass 2.order with Q-inlet
+rbpw2~ resonance-bandpass 2.order with bandwidth-inlet
+
+hml_shelf~ high-middle-low shelving-filter with freq- and gain-inlets
+lp1_t~ lowpass 1.order with time_constant inlet
+para_bp2~ parametrical bandpass 2. order with freq-, Q- and gain-inlet
+
+hp2_butt~, hp3_butt~, hp4_butt~, hp5_butt~, hp6_butt~, hp7_butt~,
+hp8_butt~, hp9_butt~, hp10_butt~
+ highpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+hp2_cheb~, hp3_cheb~, hp4_cheb~, hp5_cheb~, hp6_cheb~, hp7_cheb~,
+hp8_cheb~, hp9_cheb~, hp10_cheb~
+ highpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+hp2_bess~, hp3_bess~, hp4_bess~, hp5_bess~, hp6_bess~, hp7_bess~,
+hp8_bess~, hp9_bess~, hp10_bess~
+ highpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+hp2_crit~, hp3_crit~, hp4_crit~, hp5_crit~, hp6_crit~, hp7_crit~,
+hp8_crit~, hp9_crit~, hp10_crit~
+ highpass 2.3.4.5.6.7.8.9.10.order with critical damping
+lp2_butt~, lp3_butt~, lp4_butt~, lp5_butt~, lp6_butt~, lp7_butt~,
+lp8_butt~, lp9_butt~, lp10_butt~
+ lowpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+lp2_cheb~, lp3_cheb~, lp4_cheb~, lp5_cheb~, lp6_cheb~, lp7_cheb~,
+lp8_cheb~, lp9_cheb~, lp10_cheb~
+ lowpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+lp2_bess~, lp3_bess~, lp4_bess~, lp5_bess~, lp6_bess~, lp7_bess~,
+lp8_bess~, lp9_bess~, lp10_bess~
+ lowpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+lp2_crit~, lp3_crit~, lp4_crit~, lp5_crit~, lp6_crit~, lp7_crit~,
+lp8_crit~, lp9_crit~, lp10_crit~
+ lowpass 2.3.4.5.6.7.8.9.10.order with critical damping
+
+vcf_hp2~, vcf_hp4~, vcf_hp6~, vcf_hp8~
+ highpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_lp2~, vcf_lp4~, vcf_lp6~, vcf_lp8~
+ lowpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_bp2~, vcf_bp4~, vcf_bp6~, vcf_bp8~
+ bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_rbp2~, vcf_rbp4~, vcf_rbp6~, vcf_rbp8~
+ resonance-bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+
+------------------------ arithmetic~ ----------------------------
+addl~ signal-addition with line~
+divl~ signal-divison with line~
+mull~ signal-multiplication with line~
+subl~ signal-subtraction with line~
+
+------------------------- converter~ ----------------------------
+prvu~ peak and rms VU-meter interface
+pvu~ peak VU-meter interface
+rvu~ rms VU-meter interface
+unsig~ signal to float converter
+
+------------------ t3~ - time-tagged-trigger --------------------
+-- inputmessages allow a sample-accurate access to signalshape --
+t3_sig~ time tagged trigger sig~
+t3_line~ time tagged trigger line~
+
+--------------------------- misc~ -------------------------------
+fade~ fade-in fade-out shaper (need line~)
+iem_blocksize~ blocksize of a window in samples
+iem_samplerate~ samplerate of a window in Hertz
+int_fract~ split signal-float to integer- and fractal-part
+LFO_noise~ downsampled 2-point interpolated white noise
+mp3play~ mp3 stereo player
+peakenv~ peak envelope shaper
+pink~ pink noise
+round~ round signal-float to nearest integer
+sin_phase~ output phase-difference of 2 sinewaves in samples
+
+========================= control ==============================
+
+------------- gui (included into millers pd) --------------------
+
+bng bang, display and generate a bang-message
+cnv canvas, colored background and text
+hdl horizontal dial, for multiplex usage
+hradio horizontal radiobutton, only float in/out
+hsl horizontal slider
+nbx numberbox, the second
+tgl 2 state toggle
+vdl vertical dial, for multiplex usage
+vradio vertical radiobutton, only float in/out
+vsl vertical slider
+vu vu-meter, display rms- + peak-level in dB
+
+--------------------- float operating -------------------------
+1p1z float-message-filter 1.order
+db2v db to rms
+dbtofad midi-db to fader-characteristic
+fadtodb fader-characteristic to midi-db
+fadtorms fader-characteristic to rms
+rmstofad rms to fader-characteristic
+round_zero round numbers near zero to zero
+speedlim reduce speed of a numeric stream
+split3 part a numeric stream into 3 ways
+split part a numeric stream into 2 ways (like moses)
+transf_fader partial linear characteristic diagram (like table)
+v2db rms to db
+wrap wraparound
+
+-------------------- symbol operating -------------------------
+mergefilename merge a list of symbols together
+splitfilename divide a symbol into 2 parts
+stripfilename strip n characters of a symbol
+unsymbol convert a symbol- to a anything-message
+
+------------------- anything operating ------------------------
+any store and recall any message (like f, or symbol)
+iem_append append a message to any messages (obsolete: merge_any)
+iem_prepend prepend a message to any messages (abbr. pp or prepend)
+
+-------------------------- init -------------------------------
+default replace initial-argument, if it is zero
+dollarg receive parent initial-arguments (abbr. $n)
+dsp control audio-engine, calculate dsp-performance (aka. dsp~)
+float24 store a 24-bit accurate float-number
+init initialize a message via loadbang (abbr. ii)
+once any message pass through only the first time
+
+------------------------- counter -----------------------------
+exp_inc exponential increment counter (bang triggered)
+for++ incremental counter (triggered by internal metro)
+modulo_counter endless loop counter (bang triggered)
+
+-------------------------- misc -------------------------------
+add2_comma add a comma-separated message to a messagebox
+bpe break point envelope controller
+f2note frequency to midi+cents+note
+gate interruptible message connection (like spigot)
+iem_i_route variation of route (abbr. iiroute)
+iem_receive catch "sent" messages (receive-name-input) (abbr. iem_r)
+iem_route improvement of route
+iem_sel_any control a message-box with multiple content
+iem_send send messages to named object (send-name-input)(ab. iem_s)
+pre_inlet output an identifier-message and then the incoming message
+prepend_ascii output an identifier-message and then the incoming message
+soundfile_info output header-info of a wav-file
+toggle_mess control a message-box with multiple content (abbr. tm)
+
+------------------- parameter handling ------------------------
+iem_pbank_csv parameter memory manager (csv-format) (like textfile)
+list2send array of send-objects
+receive2list array of receive-objects
+
+--------------- t3 - time-tagged-trigger ---------------------
+----------- a time-tag is prepended to each message -----------
+----- so these objects allow a sample-accurate access to ------
+---------- the signal-objects t3_sig~ and t3_line~ ------------
+t3_bpe time tagged trigger break point envelope
+t3_delay time tagged trigger delay
+t3_metro time tagged trigger metronom
+t3_timer time tagged trigger timer
+
+-------------- obsolete ---------------------------------------
+post_netreceive
+pre_netsend
diff --git a/examples/1_simple_parameter_management.pd b/examples/1_simple_parameter_management.pd
new file mode 100644
index 0000000..2746b2a
--- /dev/null
+++ b/examples/1_simple_parameter_management.pd
@@ -0,0 +1,278 @@
+#N canvas 29 11 869 564 10;
+#X text 57 59 IEM KUG;
+#X text 31 70 graz \, austria 2003;
+#X obj 717 437 dsp;
+#X obj 383 501 dac~;
+#X floatatom 443 429 5 0 0 0 - - -;
+#X floatatom 509 431 5 0 0 0 - - -;
+#X floatatom 566 444 5 0 0 0 - - -;
+#X symbolatom 617 470 3 0 0 0 - - -;
+#N canvas 0 0 745 495 multi_filter~ 0;
+#X obj 116 45 inlet~;
+#X obj 114 403 outlet~;
+#X obj 115 174 lp2~ 440 2 100;
+#X obj 212 174 hp2~ 440 2 100;
+#X obj 308 174 rbpq2~ 440 2 100;
+#X obj 115 272 mull~ 1 100;
+#X obj 486 226 route 0 1 2;
+#X obj 115 303 +~;
+#X obj 115 327 +~;
+#X obj 332 48 inlet;
+#X obj 422 46 inlet;
+#X text 114 23 sig_in;
+#X text 432 27 Q;
+#X obj 486 45 inlet;
+#X obj 486 206 hdl 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X text 334 27 freq_Hz;
+#X obj 230 45 inlet;
+#X text 232 26 gain_db;
+#X obj 230 95 dbtorms;
+#X obj 115 375 mull~ 0.1 100;
+#X msg 486 138 0;
+#X msg 512 138 1;
+#X msg 538 138 2;
+#X text 487 29 mode;
+#X obj 486 178 t f;
+#X obj 486 117 route lp hp bp;
+#X obj 307 270 mull~ 0 100;
+#X obj 213 271 mull~ 0 100;
+#X obj 230 68 + 100;
+#X obj 486 96 unsymbol;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 27 0;
+#X connect 4 0 26 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 1;
+#X connect 6 1 27 1;
+#X connect 6 2 26 1;
+#X connect 7 0 8 0;
+#X connect 8 0 19 0;
+#X connect 9 0 2 1;
+#X connect 9 0 3 1;
+#X connect 9 0 4 1;
+#X connect 10 0 2 2;
+#X connect 10 0 3 2;
+#X connect 10 0 4 2;
+#X connect 13 0 29 0;
+#X connect 14 0 6 0;
+#X connect 16 0 28 0;
+#X connect 18 0 19 1;
+#X connect 19 0 1 0;
+#X connect 20 0 24 0;
+#X connect 21 0 24 0;
+#X connect 22 0 24 0;
+#X connect 24 0 14 0;
+#X connect 25 0 20 0;
+#X connect 25 1 21 0;
+#X connect 25 2 22 0;
+#X connect 26 0 8 1;
+#X connect 27 0 7 1;
+#X connect 28 0 18 0;
+#X connect 29 0 25 0;
+#X restore 383 468 pd multi_filter~;
+#N canvas 52 43 624 184 GUI 0;
+#X obj 69 23 vsl 15 128 0 127 0 0 empty empty gain 0 -8 0 8 -44926
+-1 -1 0 1;
+#X obj 70 159 nbx 4 12 -1e+037 1e+037 0 0 empty empty dB 48 7 0 10
+-225280 -1 -1 0 256;
+#X obj 196 23 vsl 15 128 9 136 0 0 midi_freq_dsp midi_freq_gui freq
+0 -8 192 8 -250685 -1 -1 0 1;
+#X obj 197 160 nbx 5 12 -1e+037 1e+037 0 0 empty empty Hz 58 7 0 10
+-257472 -1 -1 0 256;
+#X obj 293 160 nbx 4 12 -1e+037 1e+037 0 0 empty empty empty 48 7 0
+10 -262131 -1 -1 0 256;
+#X obj 293 24 vsl 15 128 0.1 10 1 0 empty empty Q 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 335 50 cnv 8 20 15 empty empty lowpass 0 5 0 10 -262144 -66577
+0;
+#X obj 87 32 vu 15 120 empty out -1 -8 0 8 -66577 -1 1 0;
+#X obj 10 231 + 100;
+#X obj 10 252 dbtofad;
+#X msg 232 46 set \$1;
+#X msg 10 274 set \$1;
+#X obj 11 297 fadtodb;
+#X obj 11 318 - 100;
+#X msg 131 60 set \$1;
+#X obj 131 40 ftom;
+#X obj 131 109 mtof;
+#X msg 376 272 0;
+#X msg 402 272 1;
+#X msg 428 272 2;
+#X obj 376 297 t f;
+#X obj 376 249 route lp hp bp;
+#X msg 376 318 set \$1;
+#X obj 376 225 unsymbol;
+#X obj 289 297 symbol;
+#X obj 317 48 vradio 15 1 0 3 empty empty mode 0 -6 0 10 -24198 -1
+-1 0;
+#X obj 335 66 cnv 8 20 15 empty empty highpass 0 5 0 10 -262144 -66577
+0;
+#X obj 335 82 cnv 8 20 15 empty empty bandpass 0 5 0 10 -262144 -66577
+0;
+#X obj 289 253 iem_sel_any;
+#X msg 186 214 0 lp \, 1 hp \, 2 bp;
+#X obj 186 193 loadbang;
+#X obj 186 235 pp add;
+#X obj 289 275 route set;
+#X floatatom 417 130 5 0 9 0 - - -;
+#X obj 417 25 vradio 10 1 0 10 empty empty recall_preset 0 -6 0 8 -257989
+-1 -1 0;
+#X floatatom 466 157 5 0 9 0 - - -;
+#X obj 466 52 vradio 10 1 0 10 empty empty store_preset 0 -6 0 8 -259803
+-1 -1 0;
+#X obj 507 101 bng 35 250 50 0 empty empty save_file 0 -6 0 8 -259609
+-237569 -1;
+#X msg 507 147 1;
+#X obj 10 30 tgl 15 0 empty empty DSP 0 -8 0 10 -24198 -1 -1 0 1;
+#X obj 10 69 nbx 4 12 -1e+037 1e+037 0 0 empty empty peak 0 -7 0 10
+-195568 -1 -1 6.00864 256;
+#X obj 10 98 nbx 4 12 -1e+037 1e+037 0 0 empty empty mean 0 -7 0 10
+-195568 -1 -1 26.64 256;
+#X obj 131 19 r freq;
+#X obj 131 131 s freq;
+#X obj 232 26 r Q;
+#X obj 237 128 s Q;
+#X obj 10 154 s audio;
+#X obj 10 173 r perf_peak;
+#X obj 10 191 r perf_mean;
+#X obj 10 210 r gain;
+#X obj 140 176 r out_level;
+#X obj 376 199 r mode;
+#X obj 417 176 s recall;
+#X obj 466 196 s store;
+#X obj 507 168 s save;
+#X obj 289 318 s mode;
+#X obj 11 338 s gain;
+#X connect 0 0 12 0;
+#X connect 2 0 16 0;
+#X connect 5 0 4 0;
+#X connect 5 0 45 0;
+#X connect 8 0 9 0;
+#X connect 9 0 11 0;
+#X connect 10 0 5 0;
+#X connect 11 0 0 0;
+#X connect 12 0 13 0;
+#X connect 13 0 1 0;
+#X connect 13 0 56 0;
+#X connect 14 0 2 0;
+#X connect 15 0 14 0;
+#X connect 16 0 3 0;
+#X connect 16 0 43 0;
+#X connect 17 0 20 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 0;
+#X connect 21 0 17 0;
+#X connect 21 1 18 0;
+#X connect 21 2 19 0;
+#X connect 22 0 25 0;
+#X connect 23 0 21 0;
+#X connect 24 0 55 0;
+#X connect 25 0 28 0;
+#X connect 28 0 32 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 28 0;
+#X connect 32 0 24 0;
+#X connect 33 0 52 0;
+#X connect 34 0 33 0;
+#X connect 35 0 53 0;
+#X connect 36 0 35 0;
+#X connect 37 0 38 0;
+#X connect 38 0 54 0;
+#X connect 39 0 46 0;
+#X connect 42 0 15 0;
+#X connect 42 0 3 0;
+#X connect 44 0 10 0;
+#X connect 44 0 4 0;
+#X connect 47 0 40 0;
+#X connect 48 0 41 0;
+#X connect 49 0 8 0;
+#X connect 49 0 1 0;
+#X connect 50 0 7 0;
+#X connect 51 0 23 0;
+#X coords 0 0 1 1 600 185 1;
+#X restore 243 21 pd GUI;
+#X obj 382 435 pink~;
+#N canvas 0 0 456 306 parameter_memory_management 0;
+#X msg 222 114 recall;
+#X msg 349 113 store;
+#X obj 55 63 loadbang;
+#X obj 55 105 pp add;
+#X obj 189 290 pp from;
+#X obj 86 267 iem_pbank_csv 4 10;
+#X obj 189 315 list2send 4;
+#X msg 55 84 0 gain \, 1 freq \, 2 Q \, 3 mode;
+#X msg 309 225 read test_pbank.txt brw;
+#X obj 309 204 loadbang;
+#X msg 437 143 write test_pbank.txt brw;
+#X obj 86 215 receive2list 4;
+#X obj 242 78 t b f;
+#X obj 242 56 inlet;
+#X obj 380 53 inlet;
+#X obj 379 80 t b f;
+#X obj 452 53 inlet;
+#X obj 452 83 bang;
+#X connect 0 0 5 0;
+#X connect 1 0 5 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 0 11 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 9 0 8 0;
+#X connect 10 0 5 0;
+#X connect 11 0 5 0;
+#X connect 12 0 0 0;
+#X connect 12 1 5 1;
+#X connect 13 0 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 1 0;
+#X connect 15 1 5 1;
+#X connect 16 0 17 0;
+#X connect 17 0 10 0;
+#X restore 104 476 pd parameter_memory_management;
+#X text 29 46 (c) musil@iem.at;
+#X text 7 367 ****************** DSP ***********************;
+#X text 11 246 ****************** GUI ***********************;
+#X obj 438 495 prvu~;
+#X text 294 246 ****************** GUI ***********************;
+#X text 578 246 ****************** GUI ***********************;
+#X text 289 367 ****************** DSP ***********************;
+#X text 573 367 ****************** DSP ***********************;
+#X obj 717 416 r audio;
+#X obj 730 458 s perf_peak;
+#X obj 717 478 s perf_mean;
+#X obj 609 446 r mode;
+#X obj 559 421 r Q;
+#X obj 502 408 r freq;
+#X obj 436 406 r gain;
+#X obj 438 517 s out_level;
+#X obj 279 435 r save;
+#X obj 191 436 r store;
+#X obj 104 437 r recall;
+#X connect 2 0 22 0;
+#X connect 2 1 21 0;
+#X connect 8 0 3 0;
+#X connect 8 0 3 1;
+#X connect 8 0 15 0;
+#X connect 10 0 8 0;
+#X connect 15 0 27 0;
+#X connect 20 0 2 0;
+#X connect 23 0 8 4;
+#X connect 23 0 7 0;
+#X connect 24 0 6 0;
+#X connect 24 0 8 3;
+#X connect 25 0 5 0;
+#X connect 25 0 8 2;
+#X connect 26 0 4 0;
+#X connect 26 0 8 1;
+#X connect 28 0 11 2;
+#X connect 29 0 11 1;
+#X connect 30 0 11 0;
diff --git a/examples/2_GUI_DSP_parameter_management.pd b/examples/2_GUI_DSP_parameter_management.pd
new file mode 100644
index 0000000..74fcaa2
--- /dev/null
+++ b/examples/2_GUI_DSP_parameter_management.pd
@@ -0,0 +1,454 @@
+#N canvas 21 46 962 572 10;
+#X text 55 20 IEM KUG;
+#X text 29 31 graz \, austria 2003;
+#X obj 792 387 dsp;
+#X obj 279 449 dac~;
+#X floatatom 306 381 5 0 0 0 - - -;
+#X floatatom 398 378 5 0 0 0 - - -;
+#X floatatom 494 399 5 0 0 0 - - -;
+#X symbolatom 490 471 3 0 0 0 - - -;
+#N canvas 0 0 745 495 multi_filter~ 0;
+#X obj 116 45 inlet~;
+#X obj 114 403 outlet~;
+#X obj 115 174 lp2~ 440 2 100;
+#X obj 212 174 hp2~ 440 2 100;
+#X obj 308 174 rbpq2~ 440 2 100;
+#X obj 115 272 mull~ 1 100;
+#X obj 486 226 route 0 1 2;
+#X obj 115 303 +~;
+#X obj 115 327 +~;
+#X obj 332 48 inlet;
+#X obj 422 46 inlet;
+#X text 114 23 sig_in;
+#X text 432 27 Q;
+#X obj 486 45 inlet;
+#X obj 486 206 hdl 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X text 334 27 freq_Hz;
+#X obj 230 45 inlet;
+#X text 232 26 gain_db;
+#X obj 230 95 dbtorms;
+#X obj 115 375 mull~ 0.1 100;
+#X msg 486 138 0;
+#X msg 512 138 1;
+#X msg 538 138 2;
+#X text 487 29 mode;
+#X obj 486 178 t f;
+#X obj 486 117 route lp hp bp;
+#X obj 307 270 mull~ 0 100;
+#X obj 213 271 mull~ 0 100;
+#X obj 230 68 + 100;
+#X obj 486 96 unsymbol;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 27 0;
+#X connect 4 0 26 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 1;
+#X connect 6 1 27 1;
+#X connect 6 2 26 1;
+#X connect 7 0 8 0;
+#X connect 8 0 19 0;
+#X connect 9 0 2 1;
+#X connect 9 0 3 1;
+#X connect 9 0 4 1;
+#X connect 10 0 2 2;
+#X connect 10 0 3 2;
+#X connect 10 0 4 2;
+#X connect 13 0 29 0;
+#X connect 14 0 6 0;
+#X connect 16 0 28 0;
+#X connect 18 0 19 1;
+#X connect 19 0 1 0;
+#X connect 20 0 24 0;
+#X connect 21 0 24 0;
+#X connect 22 0 24 0;
+#X connect 24 0 14 0;
+#X connect 25 0 20 0;
+#X connect 25 1 21 0;
+#X connect 25 2 22 0;
+#X connect 26 0 8 1;
+#X connect 27 0 7 1;
+#X connect 28 0 18 0;
+#X connect 29 0 25 0;
+#X restore 279 416 pd multi_filter~;
+#N canvas 273 19 634 194 GUI 0;
+#X obj 69 23 vsl 15 128 0 127 0 0 empty empty gain 0 -8 0 8 -44926
+-1 -1 6900 1;
+#X obj 70 159 nbx 4 12 -1e+037 1e+037 0 0 empty empty dB 48 7 0 10
+-225280 -1 -1 -3 256;
+#X obj 196 23 vsl 15 128 9 136 0 0 midi_freq_dsp midi_freq_gui freq
+0 -8 192 8 -250685 -1 -1 0 1;
+#X obj 197 160 nbx 5 12 -1e+037 1e+037 0 0 empty empty Hz 58 7 0 10
+-257472 -1 -1 0 256;
+#X obj 293 160 nbx 4 12 -1e+037 1e+037 0 0 empty empty empty 48 7 0
+10 -262131 -1 -1 0 256;
+#X obj 293 24 vsl 15 128 0.1 10 1 0 empty empty Q 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 335 50 cnv 8 20 15 empty empty lowpass 0 5 0 10 -262144 -66577
+0;
+#X obj 87 32 vu 15 120 empty out -1 -8 0 8 -66577 -1 1 0;
+#X obj 10 231 + 100;
+#X obj 10 252 dbtofad;
+#X msg 227 46 set \$1;
+#X msg 10 274 set \$1;
+#X obj 11 297 fadtodb;
+#X obj 11 318 - 100;
+#X msg 131 60 set \$1;
+#X obj 131 40 ftom;
+#X obj 131 109 mtof;
+#X msg 376 272 0;
+#X msg 402 272 1;
+#X msg 428 272 2;
+#X obj 376 297 t f;
+#X obj 376 249 route lp hp bp;
+#X msg 376 318 set \$1;
+#X obj 376 225 unsymbol;
+#X obj 284 297 symbol;
+#X obj 317 48 vradio 15 1 0 3 empty empty mode 0 -6 0 10 -24198 -1
+-1 0;
+#X obj 335 66 cnv 8 20 15 empty empty highpass 0 5 0 10 -262144 -66577
+0;
+#X obj 335 82 cnv 8 20 15 empty empty bandpass 0 5 0 10 -262144 -66577
+0;
+#X obj 284 253 iem_sel_any;
+#X msg 186 214 0 lp \, 1 hp \, 2 bp;
+#X obj 186 193 loadbang;
+#X obj 186 235 pp add;
+#X obj 284 275 route set;
+#X floatatom 417 130 5 0 9 0 - - -;
+#X obj 417 25 vradio 10 1 0 10 empty empty recall_preset 0 -6 0 8 -257989
+-1 -1 0;
+#X floatatom 466 157 5 0 9 0 - - -;
+#X obj 466 52 vradio 10 1 0 10 empty empty store_preset 0 -6 0 8 -259803
+-1 -1 0;
+#X obj 507 101 bng 35 250 50 0 empty empty save_file 0 -6 0 8 -259609
+-237569 -1;
+#X obj 417 176 s recall_gui;
+#X obj 466 196 s store_gui;
+#X obj 507 168 s save_gui;
+#X msg 507 147 1;
+#X obj 10 30 tgl 15 0 empty empty DSP 0 -8 0 10 -24198 -1 -1 1 1;
+#X obj 10 69 nbx 4 12 -1e+037 1e+037 0 0 empty empty peak 0 -7 0 10
+-195568 -1 -1 0 256;
+#X obj 10 98 nbx 4 12 -1e+037 1e+037 0 0 empty empty mean 0 -7 0 10
+-195568 -1 -1 1.11 256;
+#X obj 10 173 r perf_peak_gui;
+#X obj 10 191 r perf_mean_gui;
+#X obj 10 153 s audio_gui;
+#X obj 145 270 r out_level_gui;
+#X obj 227 26 r Q_gui_in;
+#X obj 222 128 s Q_gui_out;
+#X obj 284 318 s mode_gui_out;
+#X obj 376 199 r mode_gui_in;
+#X obj 11 338 s gain_gui_out;
+#X obj 10 210 r gain_gui_in;
+#X obj 131 176 s freq_gui_out;
+#X obj 111 6 r freq_gui_in;
+#X obj 57 233 s connect_back_gui;
+#X obj 10 128 tgl 15 0 empty empty connect 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 28 130 cnv 8 1 1 empty empty back 0 6 0 10 -262144 -1 0;
+#X connect 0 0 12 0;
+#X connect 2 0 16 0;
+#X connect 5 0 4 0;
+#X connect 5 0 50 0;
+#X connect 8 0 9 0;
+#X connect 9 0 11 0;
+#X connect 10 0 5 0;
+#X connect 11 0 0 0;
+#X connect 12 0 13 0;
+#X connect 13 0 1 0;
+#X connect 13 0 53 0;
+#X connect 14 0 2 0;
+#X connect 15 0 14 0;
+#X connect 16 0 3 0;
+#X connect 16 0 55 0;
+#X connect 17 0 20 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 0;
+#X connect 21 0 17 0;
+#X connect 21 1 18 0;
+#X connect 21 2 19 0;
+#X connect 22 0 25 0;
+#X connect 23 0 21 0;
+#X connect 24 0 51 0;
+#X connect 25 0 28 0;
+#X connect 28 0 32 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 28 0;
+#X connect 32 0 24 0;
+#X connect 33 0 38 0;
+#X connect 34 0 33 0;
+#X connect 35 0 39 0;
+#X connect 36 0 35 0;
+#X connect 37 0 41 0;
+#X connect 41 0 40 0;
+#X connect 42 0 47 0;
+#X connect 45 0 43 0;
+#X connect 46 0 44 0;
+#X connect 48 0 7 0;
+#X connect 49 0 10 0;
+#X connect 49 0 4 0;
+#X connect 52 0 23 0;
+#X connect 54 0 8 0;
+#X connect 54 0 1 0;
+#X connect 56 0 15 0;
+#X connect 56 0 3 0;
+#X connect 58 0 57 0;
+#X coords 0 0 1 1 600 190 1;
+#X restore 243 21 pd GUI;
+#X obj 268 385 pink~;
+#N canvas 0 0 638 448 parameter_memory_management 0;
+#X msg 258 107 recall;
+#X msg 349 113 store;
+#X obj 20 10 loadbang;
+#X obj 20 52 pp add;
+#X obj 189 290 pp from;
+#X obj 86 267 iem_pbank_csv 4 10;
+#X obj 189 319 list2send 4;
+#X msg 309 225 read test_pbank.txt brw;
+#X obj 309 204 loadbang;
+#X msg 437 143 write test_pbank.txt brw;
+#X obj 86 215 receive2list 4;
+#X obj 260 81 t b f;
+#X obj 260 59 inlet;
+#X obj 359 60 inlet;
+#X obj 358 87 t b f;
+#X obj 440 62 inlet;
+#X obj 440 88 bang;
+#X msg 20 31 0 gain_dsp_in \, 1 freq_dsp_in \, 2 Q_dsp_in \, 3 mode_dsp_in
+;
+#X obj 281 255 loadbang;
+#X obj 281 297 pp add;
+#X msg 281 276 0 gain_dsp_out \, 1 freq_dsp_out \, 2 Q_dsp_out \, 3
+mode_dsp_out;
+#X connect 0 0 5 0;
+#X connect 1 0 5 0;
+#X connect 2 0 17 0;
+#X connect 3 0 10 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 5 0;
+#X connect 10 0 5 0;
+#X connect 11 0 0 0;
+#X connect 11 1 5 1;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 14 1 5 1;
+#X connect 15 0 16 0;
+#X connect 16 0 9 0;
+#X connect 17 0 3 0;
+#X connect 18 0 20 0;
+#X connect 19 0 6 0;
+#X connect 20 0 19 0;
+#X restore 15 443 pd parameter_memory_management;
+#X text 27 7 (c) musil@iem.at;
+#X text 11 309 ****************** DSP ***********************;
+#X text 11 267 ****************** GUI ***********************;
+#X obj 15 404 r recall_dsp;
+#X obj 102 403 r store_dsp;
+#X obj 190 402 r save_dsp;
+#X obj 805 408 s perf_peak_dsp;
+#X obj 792 428 s perf_mean_dsp;
+#X obj 792 366 r audio_dsp;
+#X obj 334 443 prvu~;
+#X obj 334 465 s out_level_dsp;
+#X text 294 267 ****************** GUI ***********************;
+#X text 578 267 ****************** GUI ***********************;
+#X text 293 309 ****************** DSP ***********************;
+#X text 577 309 ****************** DSP ***********************;
+#X msg 38 160 disconnect;
+#N canvas 0 0 528 308 netsend 0;
+#X obj 91 48 inlet;
+#X obj 95 233 outlet;
+#X obj 91 74 route connect disconnect send;
+#X obj 56 127 bang;
+#X obj 147 98 bang;
+#X msg 56 151 1;
+#X msg 147 123 0;
+#X obj 179 228 spigot;
+#X obj 179 268 iem_s;
+#X obj 275 206 pp set;
+#X msg 287 158 clear;
+#X obj 362 122 pp list;
+#X obj 362 155 mergefilename _;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 11 0;
+#X connect 2 1 4 0;
+#X connect 2 2 7 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 5 0 7 1;
+#X connect 6 0 1 0;
+#X connect 6 0 7 1;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 9 0;
+#X restore 54 226 pd netsend;
+#X msg 20 139 connect my_dsp_workstation 3000;
+#N canvas 0 0 610 373 from_gui_to_dsp 0;
+#X obj 35 38 loadbang;
+#X obj 35 110 pp add;
+#X obj 35 200 outlet;
+#X obj 35 175 pp send;
+#X obj 35 132 receive2list 9;
+#X msg 35 59 0 gain_gui_out \, 1 freq_gui_out \, 2 Q_gui_out \, 3 mode_gui_out
+\, 4 audio_gui \, 5 recall_gui \, 6 store_gui \, 7 save_gui \, 8 connect_back_gui
+;
+#X connect 0 0 5 0;
+#X connect 1 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X restore 54 181 pd from_gui_to_dsp;
+#N canvas 0 0 825 506 from_dsp_to_gui 0;
+#X obj 122 44 loadbang;
+#X obj 122 101 pp add;
+#X obj 53 132 list2send 7;
+#X msg 122 65 0 gain_gui_in \, 1 freq_gui_in \, 2 Q_gui_in \, 3 mode_gui_in
+\, 4 perf_peak_gui \, 5 perf_mean_gui \, 6 out_level_gui;
+#X obj 53 21 inlet;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X restore 578 242 pd from_dsp_to_gui;
+#N canvas 0 0 452 302 netreceive 0;
+#X obj 96 253 outlet;
+#X obj 96 197 r my_gui_notebook_3001;
+#X connect 1 0 0 0;
+#X restore 578 220 pd netreceive 3001;
+#X floatatom 54 250 5 0 0 0 - - -;
+#N canvas 0 0 462 312 netreceive 0;
+#X obj 96 253 outlet;
+#X obj 96 197 r my_dsp_workstation_3000;
+#X connect 1 0 0 0;
+#X restore 14 338 pd netreceive 3000;
+#N canvas 0 0 841 522 from_gui_to_dsp 0;
+#X obj 122 44 loadbang;
+#X obj 122 119 pp add;
+#X obj 53 21 inlet;
+#X obj 53 150 list2send 9;
+#X msg 122 65 0 gain_dsp_in \, 1 freq_dsp_in \, 2 Q_dsp_in \, 3 mode_dsp_in
+\, 4 audio_dsp \, 5 recall_dsp \, 6 store_dsp \, 7 save_dsp \, 8 connect_back_dsp
+;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X connect 4 0 1 0;
+#X restore 14 360 pd from_gui_to_dsp;
+#X msg 577 400 disconnect;
+#N canvas 0 0 530 310 netsend 0;
+#X obj 91 48 inlet;
+#X obj 95 233 outlet;
+#X obj 91 74 route connect disconnect send;
+#X obj 56 127 bang;
+#X obj 147 98 bang;
+#X msg 56 151 1;
+#X msg 147 123 0;
+#X obj 179 228 spigot;
+#X obj 179 268 iem_s;
+#X obj 275 206 pp set;
+#X msg 287 158 clear;
+#X obj 362 122 pp list;
+#X obj 362 155 mergefilename _;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 11 0;
+#X connect 2 1 4 0;
+#X connect 2 2 7 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 5 0 7 1;
+#X connect 6 0 1 0;
+#X connect 6 0 7 1;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 9 0;
+#X restore 646 438 pd netsend;
+#X floatatom 646 462 5 0 0 0 - - -;
+#X msg 595 379 connect my_gui_notebook 3001;
+#N canvas 0 0 622 385 from_dsp_to_gui 0;
+#X obj 35 38 loadbang;
+#X obj 35 110 pp add;
+#X obj 35 200 outlet;
+#X obj 35 175 pp send;
+#X obj 35 132 receive2list 7;
+#X msg 35 59 0 gain_dsp_out \, 1 freq_dsp_out \, 2 Q_dsp_out \, 3 mode_dsp_out
+\, 4 perf_peak_dsp \, 5 perf_mean_dsp \, 6 out_level_dsp;
+#X connect 0 0 5 0;
+#X connect 1 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X restore 646 401 pd from_dsp_to_gui;
+#X obj 577 337 r connect_back_dsp;
+#X obj 577 358 sel 0 1;
+#X obj 306 338 r gain_dsp_in;
+#X obj 398 336 r freq_dsp_in;
+#X obj 494 358 r Q_dsp_in;
+#X obj 490 427 r mode_dsp_in;
+#X obj 490 447 r mode_dsp_out;
+#X obj 494 378 r Q_dsp_out;
+#X obj 398 356 r freq_dsp_out;
+#X obj 306 359 r gain_dsp_out;
+#X text 36 60 1.) connect;
+#X text 36 71 2.) connect back;
+#X text 36 82 3.) DSP on;
+#X connect 2 0 19 0;
+#X connect 2 1 18 0;
+#X connect 8 0 3 0;
+#X connect 8 0 3 1;
+#X connect 8 0 21 0;
+#X connect 10 0 8 0;
+#X connect 15 0 11 0;
+#X connect 16 0 11 1;
+#X connect 17 0 11 2;
+#X connect 20 0 2 0;
+#X connect 21 0 22 0;
+#X connect 27 0 28 0;
+#X connect 28 0 33 0;
+#X connect 29 0 28 0;
+#X connect 30 0 28 0;
+#X connect 32 0 31 0;
+#X connect 34 0 35 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 39 0 37 0;
+#X connect 40 0 37 0;
+#X connect 41 0 42 0;
+#X connect 42 0 36 0;
+#X connect 42 1 39 0;
+#X connect 43 0 4 0;
+#X connect 43 0 8 1;
+#X connect 44 0 5 0;
+#X connect 44 0 8 2;
+#X connect 45 0 6 0;
+#X connect 45 0 8 3;
+#X connect 46 0 7 0;
+#X connect 46 0 8 4;
+#X connect 47 0 8 4;
+#X connect 47 0 7 0;
+#X connect 48 0 6 0;
+#X connect 48 0 8 3;
+#X connect 49 0 5 0;
+#X connect 49 0 8 2;
+#X connect 50 0 4 0;
+#X connect 50 0 8 1;
diff --git a/examples/test_pbank.txt b/examples/test_pbank.txt
new file mode 100644
index 0000000..d0844f8
--- /dev/null
+++ b/examples/test_pbank.txt
@@ -0,0 +1,10 @@
+-8.095 1975.53 6.01904 lp
+-8.095 1975.53 6.01904 hp
+-8.095 1975.53 6.01904 bp
+-4.39667 554.365 10 lp
+-4.39667 554.365 10 hp
+-4.39667 554.365 10 bp
+-8.095 2093 6.71076 lp
+-8.095 2093 6.71076 hp
+-8.095 2093 6.71076 bp
+-1.86501 1567.98 0.166139 bp
diff --git a/iemabs/0.INTRO.txt b/iemabs/0.INTRO.txt
new file mode 100644
index 0000000..eca41ee
--- /dev/null
+++ b/iemabs/0.INTRO.txt
@@ -0,0 +1,177 @@
+contents of iemlib Release 1.15 from December 2003
+
+============================ DSP~ ===============================
+
+------------------------- filter~ -------------------------------
+FIR~ finite impuls response filter, with array-coefficients
+
+maverage~ moving average filter, (IIR + delay)
+
+ap1~ allpass 1.order
+ap2~ allpass 2.order
+bpq2~ bandpass 2.order with Q-inlet
+bpw2~ bandpass 2.order with bandwidth-inlet
+bsq2~ bandstop 2.order (notch) with Q-inlet
+bsw2~ bandstop 2.order (notch) with bandwidth-inlet
+hp1~ highpass 1.order
+hp2~ highpass 2.order
+lp1~ lowpass 1.order
+lp2~ lowpass 2.order
+rbpq2~ resonance-bandpass 2.order with Q-inlet
+rbpw2~ resonance-bandpass 2.order with bandwidth-inlet
+
+hml_shelf~ high-middle-low shelving-filter with freq- and gain-inlets
+lp1_t~ lowpass 1.order with time_constant inlet
+para_bp2~ parametrical bandpass 2. order with freq-, Q- and gain-inlet
+
+hp2_butt~, hp3_butt~, hp4_butt~, hp5_butt~, hp6_butt~, hp7_butt~,
+hp8_butt~, hp9_butt~, hp10_butt~
+ highpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+hp2_cheb~, hp3_cheb~, hp4_cheb~, hp5_cheb~, hp6_cheb~, hp7_cheb~,
+hp8_cheb~, hp9_cheb~, hp10_cheb~
+ highpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+hp2_bess~, hp3_bess~, hp4_bess~, hp5_bess~, hp6_bess~, hp7_bess~,
+hp8_bess~, hp9_bess~, hp10_bess~
+ highpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+hp2_crit~, hp3_crit~, hp4_crit~, hp5_crit~, hp6_crit~, hp7_crit~,
+hp8_crit~, hp9_crit~, hp10_crit~
+ highpass 2.3.4.5.6.7.8.9.10.order with critical damping
+lp2_butt~, lp3_butt~, lp4_butt~, lp5_butt~, lp6_butt~, lp7_butt~,
+lp8_butt~, lp9_butt~, lp10_butt~
+ lowpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+lp2_cheb~, lp3_cheb~, lp4_cheb~, lp5_cheb~, lp6_cheb~, lp7_cheb~,
+lp8_cheb~, lp9_cheb~, lp10_cheb~
+ lowpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+lp2_bess~, lp3_bess~, lp4_bess~, lp5_bess~, lp6_bess~, lp7_bess~,
+lp8_bess~, lp9_bess~, lp10_bess~
+ lowpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+lp2_crit~, lp3_crit~, lp4_crit~, lp5_crit~, lp6_crit~, lp7_crit~,
+lp8_crit~, lp9_crit~, lp10_crit~
+ lowpass 2.3.4.5.6.7.8.9.10.order with critical damping
+
+vcf_hp2~, vcf_hp4~, vcf_hp6~, vcf_hp8~
+ highpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_lp2~, vcf_lp4~, vcf_lp6~, vcf_lp8~
+ lowpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_bp2~, vcf_bp4~, vcf_bp6~, vcf_bp8~
+ bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_rbp2~, vcf_rbp4~, vcf_rbp6~, vcf_rbp8~
+ resonance-bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+
+------------------------ arithmetic~ ----------------------------
+addl~ signal-addition with line~
+divl~ signal-divison with line~
+mull~ signal-multiplication with line~
+subl~ signal-subtraction with line~
+
+------------------------- converter~ ----------------------------
+prvu~ peak and rms VU-meter interface
+pvu~ peak VU-meter interface
+rvu~ rms VU-meter interface
+unsig~ signal to float converter
+
+------------------ t3~ - time-tagged-trigger --------------------
+-- inputmessages allow a sample-accurate access to signalshape --
+t3_sig~ time tagged trigger sig~
+t3_line~ time tagged trigger line~
+
+--------------------------- misc~ -------------------------------
+fade~ fade-in fade-out shaper (need line~)
+iem_blocksize~ blocksize of a window in samples
+iem_samplerate~ samplerate of a window in Hertz
+int_fract~ split signal-float to integer- and fractal-part
+LFO_noise~ downsampled 2-point interpolated white noise
+mp3play~ mp3 stereo player
+peakenv~ peak envelope shaper
+pink~ pink noise
+round~ round signal-float to nearest integer
+sin_phase~ output phase-difference of 2 sinewaves in samples
+
+========================= control ==============================
+
+------------- gui (included into millers pd) --------------------
+
+bng bang, display and generate a bang-message
+cnv canvas, colored background and text
+hdl horizontal dial, for multiplex usage
+hradio horizontal radiobutton, only float in/out
+hsl horizontal slider
+nbx numberbox, the second
+tgl 2 state toggle
+vdl vertical dial, for multiplex usage
+vradio vertical radiobutton, only float in/out
+vsl vertical slider
+vu vu-meter, display rms- + peak-level in dB
+
+--------------------- float operating -------------------------
+1p1z float-message-filter 1.order
+db2v db to rms
+dbtofad midi-db to fader-characteristic
+fadtodb fader-characteristic to midi-db
+fadtorms fader-characteristic to rms
+rmstofad rms to fader-characteristic
+round_zero round numbers near zero to zero
+speedlim reduce speed of a numeric stream
+split3 part a numeric stream into 3 ways
+split part a numeric stream into 2 ways (like moses)
+transf_fader partial linear characteristic diagram (like table)
+v2db rms to db
+wrap wraparound
+
+-------------------- symbol operating -------------------------
+mergefilename merge a list of symbols together
+splitfilename divide a symbol into 2 parts
+stripfilename strip n characters of a symbol
+unsymbol convert a symbol- to a anything-message
+
+------------------- anything operating ------------------------
+any store and recall any message (like f, or symbol)
+iem_append append a message to any messages (obsolete: merge_any)
+iem_prepend prepend a message to any messages (abbr. pp or prepend)
+
+-------------------------- init -------------------------------
+default replace initial-argument, if it is zero
+dollarg receive parent initial-arguments (abbr. $n)
+dsp control audio-engine, calculate dsp-performance (aka. dsp~)
+float24 store a 24-bit accurate float-number
+init initialize a message via loadbang (abbr. ii)
+once any message pass through only the first time
+
+------------------------- counter -----------------------------
+exp_inc exponential increment counter (bang triggered)
+for++ incremental counter (triggered by internal metro)
+modulo_counter endless loop counter (bang triggered)
+
+-------------------------- misc -------------------------------
+add2_comma add a comma-separated message to a messagebox
+bpe break point envelope controller
+f2note frequency to midi+cents+note
+gate interruptible message connection (like spigot)
+iem_i_route variation of route (abbr. iiroute)
+iem_receive catch "sent" messages (receive-name-input) (abbr. iem_r)
+iem_route improvement of route
+iem_sel_any control a message-box with multiple content
+iem_send send messages to named object (send-name-input)(ab. iem_s)
+pre_inlet output an identifier-message and then the incoming message
+prepend_ascii output an identifier-message and then the incoming message
+soundfile_info output header-info of a wav-file
+toggle_mess control a message-box with multiple content (abbr. tm)
+
+------------------- parameter handling ------------------------
+iem_pbank_csv parameter memory manager (csv-format) (like textfile)
+list2send array of send-objects
+receive2list array of receive-objects
+
+--------------- t3 - time-tagged-trigger ---------------------
+----------- a time-tag is prepended to each message -----------
+----- so these objects allow a sample-accurate access to ------
+---------- the signal-objects t3_sig~ and t3_line~ ------------
+t3_bpe time tagged trigger break point envelope
+t3_delay time tagged trigger delay
+t3_metro time tagged trigger metronom
+t3_timer time tagged trigger timer
+
+-------------- obsolete ---------------------------------------
+post_netreceive
+pre_netsend
+
diff --git a/iemabs/1p1z.pd b/iemabs/1p1z.pd
new file mode 100644
index 0000000..bc17882
--- /dev/null
+++ b/iemabs/1p1z.pd
@@ -0,0 +1,64 @@
+#N canvas 228 263 511 330 10;
+#X text 6 279 (c) musil@iem.kug.ac.at;
+#X text 48 289 IEM KUG;
+#X obj 22 221 +;
+#X text 8 6 1p1z;
+#X text 23 298 graz \, austria 2001;
+#X obj 169 71 inlet;
+#X obj 22 49 inlet;
+#X obj 22 243 outlet;
+#X text 104 22 y[n] = a0*x[n] + a1*x[n-1] + b1*y[n-1];
+#X text 176 53 a0;
+#X text 25 34 x[n];
+#X text 24 259 y[n];
+#X obj 206 71 inlet;
+#X text 213 53 a1;
+#X obj 206 145 f \$2;
+#X obj 169 118 f \$1;
+#X obj 242 71 inlet;
+#X text 249 53 b1;
+#X obj 242 167 f \$3;
+#X obj 284 52 loadbang;
+#X text 64 102 x[n-1];
+#X obj 40 202 +;
+#X obj 22 133 *;
+#X obj 40 160 *;
+#X obj 59 182 *;
+#X text 82 143 y[n-1];
+#X obj 284 72 t b b b;
+#X obj 40 98 f;
+#X obj 59 138 f;
+#X obj 22 71 t f b b;
+#X obj 352 83 inlet;
+#X obj 430 123 inlet;
+#X text 346 66 x[n-1]init;
+#X text 428 105 y[n-1]init;
+#X text 147 202 1.arg: <float> a0;
+#X text 147 213 2.arg: <float> a1;
+#X text 147 224 3.arg: <float> b1;
+#X text 63 5 <float> control-IIR-filter 1.order;
+#X connect 2 0 7 0;
+#X connect 2 0 28 1;
+#X connect 5 0 15 0;
+#X connect 6 0 29 0;
+#X connect 12 0 14 0;
+#X connect 14 0 23 1;
+#X connect 15 0 22 1;
+#X connect 16 0 18 0;
+#X connect 18 0 24 1;
+#X connect 19 0 26 0;
+#X connect 21 0 2 1;
+#X connect 22 0 2 0;
+#X connect 23 0 21 0;
+#X connect 24 0 21 1;
+#X connect 26 0 15 0;
+#X connect 26 1 14 0;
+#X connect 26 2 18 0;
+#X connect 27 0 23 0;
+#X connect 28 0 24 0;
+#X connect 29 0 22 0;
+#X connect 29 0 27 1;
+#X connect 29 1 27 0;
+#X connect 29 2 28 0;
+#X connect 30 0 27 1;
+#X connect 31 0 28 1;
diff --git a/iemabs/7_guis-INTRO.pd b/iemabs/7_guis-INTRO.pd
new file mode 100644
index 0000000..1e4c821
--- /dev/null
+++ b/iemabs/7_guis-INTRO.pd
@@ -0,0 +1,813 @@
+#N canvas 153 19 564 568 10;
+#X obj -4 -4 my_canvas 15 600 700 empty empty gui-INTRO 237 20 2 14
+-261819 -143491;
+#X text 101 4 bng;
+#X obj 456 313 vslider 15 128 0 127 0 0 empty empty default_15x128
+8 -8 0 8 -262144 -1 -1 0 1;
+#X obj 354 42 toggle 100 1 empty empty 100_pix 8 -8 0 8 -250685 -24198
+-42246 1 1;
+#X obj 57 251 hslider 128 15 0 127 0 0 empty empty default_128x15 8
+-8 0 8 -262144 -1 -1 0 1;
+#X obj 78 226 hslider 20 8 0 19 0 0 empty empty min_20x8 8 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 478 326 vslider 8 20 0 19 0 0 empty empty min_8x20 8 -8 0 8
+-262144 -1 -1 0 1;
+#X obj 458 48 toggle 8 0 empty empty min_8 8 -8 0 8 -262144 -1 -1 0
+1;
+#X obj 458 71 toggle 15 0 empty empty default_15 8 -8 0 8 -262144 -1
+-1 0 1;
+#X obj 459 109 toggle 30 0 empty empty 30_pix 8 -8 0 8 -262144 -1 -1
+0 1;
+#X obj 101 88 bng 30 250 50 0 empty empty 30_pix 8 -8 0 8 -262144 -1
+-1;
+#X obj 412 304 vslider 30 250 0 249 0 1 empty empty 30x250 8 -8 0 8
+-184301 -42886 -42246 21800 1;
+#X obj 7 271 hslider 251 30 0 250 0 1 empty empty 251x30 8 -8 0 8 -147456
+-1109 -66577 12500 1;
+#X text 180 518 (c) musil@iem.kug.ac.at;
+#X text 222 531 IEM KUG;
+#X text 197 543 graz \, austria 2001;
+#X obj 40 343 vu 25 200 empty empty 8 -8 0 8 -1 -99865 1;
+#X obj 13 24 bng 75 5000 25 1 empty empty 75pix+init 8 -8 0 8 -262131
+-261458 -123526;
+#X obj 100 376 vu 15 120 empty empty 8 -8 0 8 -66577 -1 1;
+#X obj 186 375 vu 10 80 empty empty 8 -8 0 8 -66577 -1 1;
+#X text 99 313 vu;
+#N canvas 438 180 374 414 animate_vu 0;
+#X obj 40 211 t f f;
+#X obj 65 233 + 6;
+#X obj 40 257 pack 0 0;
+#X obj 78 94 toggle 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1
+0 1;
+#X obj 78 115 sel 0 1;
+#X obj 78 74 metro 4000;
+#X msg 100 137 30 3000;
+#X msg 78 167 -130 3000;
+#X obj 40 189 line -130 50;
+#X obj 78 51 inlet;
+#X obj 40 316 outlet;
+#X obj 87 316 outlet;
+#X obj 134 316 outlet;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 1;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 1 6 0;
+#X connect 5 0 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 8 0 0 0;
+#X connect 9 0 5 0;
+#X restore 99 349 pd animate_vu;
+#X obj 99 331 toggle 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1
+1 1;
+#X text 360 8 toggle = tgl;
+#X text 68 198 hslider = hsl;
+#X text 430 271 vslider = vsl;
+#X obj 13 160 print initial_bang;
+#X obj 21 118 bng 15 250 50 0 empty empty default_15 8 -8 0 8 -262144
+-1 -1;
+#X obj 104 48 bng 8 250 50 0 empty empty min_8 8 -8 0 10 -262144 -1
+-1;
+#X obj 21 137 print no_initial_bang;
+#X obj 283 324 my_canvas 15 100 30 empty empty empty 20 12 2 20 -225271
+-66577;
+#X obj 283 355 my_canvas 15 100 30 empty empty empty 20 12 2 20 -225280
+-66577;
+#X obj 283 386 my_canvas 15 100 30 empty empty empty 20 12 2 20 -261681
+-66577;
+#X obj 283 417 my_canvas 15 100 30 empty empty empty 20 12 2 20 -257472
+-66577;
+#X obj 172 375 vu 10 80 empty empty 8 -8 0 8 -66577 -1 0;
+#X obj 310 203 radiobut 15 1 1 8 empty empty default_8*15 8 -8 0 8
+-262144 -1 -1 2;
+#X obj 254 223 radiobut 25 1 1 12 empty empty 12*25 8 -8 0 8 -1433
+-225280 -355 1;
+#N canvas 179 78 690 573 nervous 0;
+#X obj 10 23 toggle 55 1 empty start_nervously1 start_it 8 -8 0 10
+-260818 -1 -250685 0 1;
+#X obj 131 141 bng 51 1200 50 0 empty nerv_bng bang 8 -8 0 10 -253378
+-137031 -222091;
+#X obj 120 418 hslider 22 12 0 127 0 0 empty nerv_hsl h-slider 8 -8
+0 10 -71033 -66198 -128091 2100 1;
+#X obj 448 140 toggle 11 1 empty nerv_tgl toggle 8 -8 0 10 -141355
+-82199 -51488 0 1;
+#X obj 447 383 vslider 15 111 0 127 0 0 empty nerv_vsl v-slider 8 -8
+0 10 -150187 -73940 -248863 340 1;
+#N canvas 135 99 382 469 control 0;
+#X obj 19 21 inlet;
+#X obj 19 50 t b f;
+#X obj 19 153 del 900;
+#X obj 19 212 del 900;
+#X obj 19 93 del 100;
+#X obj 19 283 del 900;
+#X obj 33 125 f;
+#X obj 33 180 f;
+#X obj 33 245 f;
+#X obj 33 309 f;
+#N canvas 280 166 794 432 bng 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 234 368 pack 0 0 0;
+#X obj 250 29 metro 2000;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 145 % 120;
+#X obj 84 32 metro 100;
+#X obj 234 261 random 1.67772e+07;
+#X obj 266 283 random 1.67772e+07;
+#X obj 299 315 random 1.67772e+07;
+#X obj 84 11 inlet;
+#X msg 64 312 \; nerv_bng delta \$1 \$2;
+#X msg 234 390 \; nerv_bng color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_bng size \$1;
+#X msg 250 51 \; nerv_bng bang;
+#X obj 234 340 * -1;
+#X obj 266 316 * -1;
+#X obj 299 342 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 22 0;
+#X connect 11 0 3 0;
+#X connect 11 0 14 0;
+#X connect 11 0 18 0;
+#X connect 11 1 4 0;
+#X connect 11 1 19 0;
+#X connect 11 2 20 0;
+#X connect 12 0 23 0;
+#X connect 13 0 25 0;
+#X connect 14 0 16 0;
+#X connect 15 0 24 0;
+#X connect 16 0 15 0;
+#X connect 17 0 11 0;
+#X connect 18 0 26 0;
+#X connect 19 0 27 0;
+#X connect 20 0 28 0;
+#X connect 21 0 17 0;
+#X connect 21 0 13 0;
+#X connect 26 0 12 0;
+#X connect 27 0 12 1;
+#X connect 28 0 12 2;
+#X restore 114 143 pd bng;
+#N canvas 139 89 794 432 tgl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 144 % 120;
+#X obj 85 31 metro 100;
+#X obj 264 28 metro 1000;
+#X obj 85 10 inlet;
+#X msg 64 312 \; nerv_tgl delta \$1 \$2;
+#X msg 226 322 \; nerv_tgl color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_tgl size \$1;
+#X msg 264 51 \; nerv_tgl bang;
+#X obj 226 298 pack 0 0 0;
+#X obj 226 191 random 1.67772e+07;
+#X obj 258 213 random 1.67772e+07;
+#X obj 291 245 random 1.67772e+07;
+#X obj 226 270 * -1;
+#X obj 258 246 * -1;
+#X obj 291 272 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 18 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 23 0;
+#X connect 11 1 4 0;
+#X connect 11 1 24 0;
+#X connect 11 2 25 0;
+#X connect 12 0 14 0;
+#X connect 13 0 20 0;
+#X connect 14 0 13 0;
+#X connect 15 0 11 0;
+#X connect 16 0 21 0;
+#X connect 17 0 15 0;
+#X connect 17 0 16 0;
+#X connect 22 0 19 0;
+#X connect 23 0 26 0;
+#X connect 24 0 27 0;
+#X connect 25 0 28 0;
+#X connect 26 0 22 0;
+#X connect 27 0 22 1;
+#X connect 28 0 22 2;
+#X restore 114 198 pd tgl;
+#N canvas 322 99 794 432 hsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 188 + 8;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 561 155 % 30;
+#X obj 445 183 + 20;
+#X obj 446 149 % 110;
+#X obj 254 305 metro 1000;
+#X obj 254 327 random 846352;
+#X obj 254 350 % 130;
+#X obj 84 11 inlet;
+#X msg 64 321 \; nerv_hsl delta \$1 \$2;
+#X msg 254 373 \; nerv_hsl set \$1;
+#X msg 445 231 \; nerv_hsl size \$1 \$2;
+#X obj 245 202 pack 0 0 0;
+#X obj 245 95 random 1.67772e+07;
+#X obj 277 117 random 1.67772e+07;
+#X obj 310 149 random 1.67772e+07;
+#X obj 245 174 * -1;
+#X obj 277 150 * -1;
+#X obj 310 176 * -1;
+#X msg 245 229 \; nerv_hsl color \$1 \$2 \$3;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 24 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 28 0;
+#X connect 11 1 4 0;
+#X connect 11 1 14 0;
+#X connect 11 1 29 0;
+#X connect 11 2 30 0;
+#X connect 12 0 19 0;
+#X connect 13 0 15 1;
+#X connect 14 0 17 0;
+#X connect 15 0 26 0;
+#X connect 16 0 11 0;
+#X connect 17 0 13 0;
+#X connect 18 0 15 0;
+#X connect 18 0 22 1;
+#X connect 19 0 18 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 25 0;
+#X connect 23 0 16 0;
+#X connect 23 0 20 0;
+#X connect 27 0 34 0;
+#X connect 28 0 31 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 27 0;
+#X connect 32 0 27 1;
+#X connect 33 0 27 2;
+#X restore 112 263 pd hsl;
+#N canvas 148 132 794 432 vsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 241 299 metro 1000;
+#X obj 240 325 random 846352;
+#X obj 241 352 % 130;
+#X obj 561 155 % 110;
+#X obj 560 188 + 20;
+#X obj 446 149 % 30;
+#X obj 445 183 + 3;
+#X obj 84 11 inlet;
+#X msg 239 227 \; nerv_vsl color \$1 \$2 \$3;
+#X msg 445 231 \; nerv_vsl size \$1 \$2;
+#X msg 64 310 \; nerv_vsl delta \$1 \$2;
+#X msg 241 376 \; nerv_vsl set \$1;
+#X obj 239 203 pack 0 0 0;
+#X obj 239 96 random 1.67772e+07;
+#X obj 271 118 random 1.67772e+07;
+#X obj 304 150 random 1.67772e+07;
+#X obj 239 175 * -1;
+#X obj 271 151 * -1;
+#X obj 304 177 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 26 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 29 0;
+#X connect 11 1 4 0;
+#X connect 11 1 13 0;
+#X connect 11 1 30 0;
+#X connect 11 2 31 0;
+#X connect 12 0 21 0;
+#X connect 13 0 19 0;
+#X connect 14 0 25 0;
+#X connect 15 0 11 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 27 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 1;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 22 0 14 0;
+#X connect 23 0 15 0;
+#X connect 23 0 16 0;
+#X connect 28 0 24 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 34 0;
+#X connect 32 0 28 0;
+#X connect 33 0 28 1;
+#X connect 34 0 28 2;
+#X restore 113 327 pd vsl;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 6 1;
+#X connect 1 1 7 1;
+#X connect 1 1 8 1;
+#X connect 1 1 9 1;
+#X connect 2 0 3 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 8 0 12 0;
+#X connect 9 0 13 0;
+#X restore 10 85 pd control;
+#X connect 0 0 5 0;
+#X restore 295 424 pd nervous;
+#X floatatom 239 84 4 0 0;
+#N canvas 226 38 811 519 properties 0;
+#X obj 2 1 my_canvas 8 870 590 empty empty about_gui_properties 290
+20 2 18 -225280 -1109;
+#X text 12 62 "selectable dimensions(pix): size:" = square-size of
+the;
+#X text 10 35 "dimensions(pix): size:" = square-size of the gui-objects
+;
+#X text 10 48 "dimensions(pix)(pix): width: height:" = width & height
+;
+#X text 11 177 "visible_rectangle(pix)(pix): width: height:" = width
+&;
+#X text 11 104 "flash-time(ms)(ms): intrrpt:" = flash-interrupt-time
+;
+#X text 411 62 selectable top-left corner of my_canvas in pixels.;
+#X text 415 35 in pixels.;
+#X text 11 76 "flash-time(ms)(ms): hold:" = flash-hold-time in msec
+=;
+#X text 405 76 duration of activity \, if a bang-object was activated
+;
+#X text 400 48 of the rectangular gui-object in pixels.;
+#X text 402 177 height of a visible \, deactivated rectangle in pixels.
+;
+#X text 14 224 "new&old" or "new-only" = the radiobutton-object changes
+its;
+#X text 441 224 state in 2 ways:;
+#X text 198 237 "new&old"-mode: output sends previous state off \,
+current;
+#X text 596 237 state on \;;
+#X text 197 250 "new-only"-mode: output sends only current state on.
+;
+#X text 14 280 "steady on click" or "jump on click" = the 2 slider-objects
+;
+#X text 481 322 immediately to new mouse-position \,;
+#X text 12 413 "label: font: fontsize:" = font-properties of label.
+;
+#X text 15 429 "colors:" = a click on radiobuttons "background:" \,
+;
+#X text 370 429 "front-color:" or "label-color:" activates the color-fields
+;
+#X text 174 193 if "init"-mode is selected \, the object displays and
+puts;
+#X text 15 266 "number:" = number of buttons of a radiobutton.;
+#X text 205 89 by any message-event or by a mouse-click.;
+#X text 388 104 in msec = duration of inactivity \, if an already;
+#X text 205 117 activated bang is activated once more.;
+#X text 11 132 "output-range: left: right:" = hslider-bounds;
+#X text 332 132 for input- as well as output-values.;
+#X text 332 146 for input- as well as output-values.;
+#X text 11 146 "output-range: bottom: top:" = vslider-bounds;
+#X text 12 193 "init" or "no init" =;
+#X text 571 193 out its previously saved value.;
+#X text 174 208 if "no init"-mode is selected \, nothing will happen.
+;
+#X text 433 280 react to mouse-click in 2 ways:;
+#X text 201 294 "steady on click"-mode: slider-knob stays in position
+\,;
+#X text 225 307 mouse and knob will move parallel \;;
+#X text 200 322 "jump on click"-mode: slider-knob jumps;
+#X text 224 338 positions of mouse and knob will be identical \;;
+#X text 402 353 receive-object with the same send-symbol-name.;
+#X text 11 368 "receive-symbol:" = a send-object with the same;
+#X text 11 353 "send-symbol:" = an output-message can be received by
+a;
+#X text 347 368 symbol-name can send an input-message to the gui-object.
+;
+#X text 13 383 "label: name:" = visible name of a gui-object \;;
+#X text 343 383 it will be moved together with the gui-object.;
+#X text 12 397 "label: x_off: y_off:" = coordinates of the label in
+;
+#X text 382 397 relation to top-left corner of gui-object.;
+#X text 207 444 on the right side which display the current color of
+the;
+#X text 605 444 item \;;
+#X text 11 161 "non-zero-value: value:" = toggle has 2;
+#X text 292 161 value-states: zero and this value.;
+#X text 208 460 to select a different color \, click on one of the
+30 small;
+#X text 614 459 preset-color-buttons \;;
+#X text 208 475 each color (background \, front \, label) can be tuned
+by its;
+#X text 235 490 RGB-values (0 .. 252 \, step 4) and a click on the
+set-button.;
+#X restore 287 361 pd properties;
+#N canvas 146 190 460 120 move 0;
+#X obj 0 0 my_canvas 8 460 120 empty empty how_to_move_gui_objects
+100 18 2 20 -225271 -42246;
+#X text 11 43 Select a gui-object \, then navigate the object by using
+the 4 direction-keys: UP \, DOWN \, LEFT or RIGHT.;
+#X text 12 70 If you press the SHIFT-Key too \, the object will move
+10 times faster.;
+#X restore 308 331 pd move;
+#N canvas 151 38 522 451 dollar 0;
+#X obj 0 0 my_canvas 8 560 160 empty empty the_dollar_thing 100 18
+2 20 -261681 -123526;
+#X text 10 39 if you want to send to \, or to receive from gui-objects
+;
+#X text 394 39 in abstractions \,;
+#X text 36 52 you have to write into the property-entry:;
+#X text 44 67 #1-label (instead of \$1-label).;
+#X text 25 103 type #0-uniquelabel (instead of \$0-uniquelabel).;
+#X text 9 88 if you want a unique send-receive-symbolname:;
+#X restore 299 391 pd dollar;
+#X obj 283 448 my_canvas 15 100 30 empty empty empty 20 12 2 20 -228992
+-66577;
+#N canvas 177 21 730 638 messages 0;
+#X obj 1 1 my_canvas 8 870 640 empty empty about_gui_messages 200 20
+2 18 -228992 -355;
+#X text 366 99 in pixels.;
+#X text 9 84 "size 15 128" = change width & height;
+#X text 9 159 "flashtime 50 600" = change flash-interrupt- and flash-hold
+;
+#X text 424 160 -time of bng-object.;
+#X text 9 174 "pos 150 170" = change the x-y-position of the top-left
+;
+#X text 400 173 corner of a gui-object in pixels \;;
+#X text 139 188 "pos 0 0" is the top-left corner of your window \;
+;
+#X text 143 204 the positive directions of x- and y-axes are right
+and down.;
+#X text 12 415 "receive togui" = change receive-name of object.;
+#X text 12 431 "label its_me" = change label-text of object.;
+#X text 12 446 "label_pos 20 8" = change offset-coordinates of label-text.
+;
+#X text 12 461 "label_font 0 10" = change font and fontsize of label-text.
+;
+#X text 12 340 "steady 1" change slider-knob-behaviour on mouse-click.
+;
+#X text 13 522 "lin" = change scale-mode of slider to linear.;
+#X text 14 537 "log" = change scale-mode of slider to logarithmical.
+;
+#X text 333 355 to output only the new state.;
+#X text 273 84 of sliders and vu in pixels.;
+#X text 12 477 "init 1" = change initial loadbang-mode of gui-objects
+;
+#X text 12 400 "send fromgui" = change send-name of gui-objects \,
+;
+#X text 12 325 "number 10" = change number of buttons of radio-button.
+;
+#X text 9 128 "range 0.1 10.0" = change slider-boundaries for;
+#X text 344 128 input- as well as output-values.;
+#X text 13 492 "set 64" = change only the inner state and display of
+gui-;
+#X text 11 33 all gui-objects (bng \, hsl \, vsl \, tgl \, rdb \, cnv
+and vu);
+#X text 9 113 "vis_size 800 600" = change width & height;
+#X text 309 113 of visual rectangle of my_canvas in pixels.;
+#X text 359 400 except vu and my_canvas.;
+#X text 395 477 except vu and cnv.;
+#X text 421 492 objects \, except bng and cnv \;;
+#X text 85 47 understand input-messages which change their properties.
+;
+#X text 11 222 "delta 15 17" = move the gui-object in relation to its
+;
+#X text 397 222 current position (in pixels).;
+#X text 333 371 to first release the previous button \,;
+#X text 144 385 then output the state of the new button.;
+#X text 12 371 "double_change" change radio-button-behaviour;
+#X text 12 355 "single_change" change radio-button-behaviour;
+#X text 147 507 no output will result.;
+#X text 9 99 "size 15" = change square-size of rdb \, bng and tgl;
+#X text 9 143 "nonzero 127.0" = change the nonzero-value of toggle.
+;
+#X text 15 552 "get_pos" = if my_canvas has a receive-name and a send-name
+;
+#X text 434 552 and you send the;
+#X text 272 237 front- and label-color of object with one of 30 presets.
+;
+#X text 277 252 label-color of vu and my_canvas with one of 30 presets.
+;
+#X text 504 282 (0 .. 255);
+#X text 558 568 coordinates.;
+#X text 149 568 message "get_pos" to it \, you receive the current
+x- and y-;
+#X text 85 59 except cnv has no inlet \, so you have to send messages
+;
+#X text 85 71 to its receive-label (edit properties).;
+#X text 11 237 "color 0 22 22" = change background- \,;
+#X text 11 252 "color 0 22" = change background- and;
+#X text 13 268 "color -1.67772e+07 (-1) -1" = change background- \,
+;
+#X text 364 267 (front-) and label-color of object with RGB-values.
+;
+#X text 149 283 the RGB-value will be calculated: -65536*RED-value
+;
+#X text 592 309 - 1;
+#X text 422 309 - BLUE-value (0 .. 255);
+#X text 394 296 - 256*GREEN-value (0 .. 255);
+#X restore 294 453 pd messages;
+#X obj 225 259 my_canvas 1 350 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 4 308 my_canvas 1 268 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 4 186 my_canvas 1 220 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 225 151 my_canvas 1 350 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 271 261 my_canvas 1 1 48 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 232 308 my_canvas 1 1 200 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 339 3 my_canvas 1 1 149 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 398 260 my_canvas 1 1 310 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 225 3 my_canvas 1 1 255 empty empty empty 20 12 2 20 -258699
+-66577;
+#X floatatom 276 84 4 0 0;
+#X obj 239 43 toggle 15 0 empty dsp_tgl empty 20 8 0 10 -370 -262144
+-1 0 1;
+#N canvas 145 31 380 506 dsp 0;
+#X msg 31 88 \; pd dsp \$1;
+#X obj 20 199 cputime;
+#X obj 20 178 t b b;
+#X text 15 11 dsp;
+#X text 48 439 (c) musil@iem.kug.ac.at;
+#X text 90 452 IEM KUG;
+#X text 59 65 1/0 = ON/OFF;
+#X text 97 313 CPU-load;
+#X obj 62 126 loadbang;
+#X obj 20 126 sel 1;
+#X text 65 464 graz \, austria 2001;
+#X text 64 12 turn dsp-kernel on & off \,;
+#X obj 20 240 t f f;
+#X text 65 408 average;
+#X text 177 405 peak;
+#X obj 211 154 f;
+#X obj 146 179 > -1;
+#X obj 169 155 f -1;
+#X obj 179 91 t f b f;
+#X obj 146 204 sel 1;
+#X obj 192 132 f -1;
+#X obj 20 154 metro 500;
+#X obj 20 220 * 0.2;
+#X text 74 37 -dsp-load in %;
+#X text 65 24 measure average- and peak-;
+#X obj 20 315 * 100;
+#X obj 20 360 int;
+#X obj 20 338 + 0.499;
+#X obj 20 383 * 0.01;
+#X obj 246 207 r pd;
+#X obj 246 231 route dsp;
+#X text 245 318 to toggle input;
+#X msg 246 283 \; dsp_tgl set \$1;
+#X obj 247 341 r dsp_tgl;
+#X obj 246 257 route float;
+#X obj 146 227 del 3990;
+#N canvas 305 120 336 257 once 0;
+#X text 7 204 (c) musil@iem.kug.ac.at;
+#X text 49 214 IEM KUG;
+#X text 24 223 graz \, austria 2001;
+#X text 8 6 once;
+#X obj 19 150 bang;
+#X obj 56 65 f 0;
+#X text 59 7 only the first message passes through;
+#X obj 19 127 t b a;
+#X obj 19 100 spigot;
+#X obj 119 63 f 1;
+#X obj 119 41 loadbang;
+#X obj 19 40 inlet;
+#X obj 49 183 outlet;
+#X connect 4 0 5 0;
+#X connect 5 0 8 1;
+#X connect 7 0 4 0;
+#X connect 7 1 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 1;
+#X connect 10 0 9 0;
+#X connect 11 0 8 0;
+#X restore 111 264 pd once;
+#N canvas 297 130 530 376 1p1z 0;
+#X text 7 315 (c) musil@iem.kug.ac.at;
+#X text 52 325 IEM KUG;
+#X obj 22 231 +;
+#X text 8 6 1p1z;
+#X text 24 334 graz \, austria 2001;
+#X text 104 22 y[n] = a0*x[n] + a1*x[n-1] + b1*y[n-1];
+#X text 169 53 a0;
+#X text 25 34 x[n];
+#X text 24 280 y[n];
+#X text 209 53 a1;
+#X text 249 53 b1;
+#X obj 284 52 loadbang;
+#X text 64 102 x[n-1];
+#X obj 40 205 +;
+#X obj 22 133 *;
+#X obj 40 160 *;
+#X obj 59 182 *;
+#X text 82 143 y[n-1];
+#X obj 284 72 t b b b;
+#X obj 40 98 f;
+#X obj 59 138 f;
+#X obj 22 71 t f b b;
+#X text 350 63 x[n-1]init;
+#X text 429 102 y[n-1]init;
+#X text 147 202 1.arg: <float> a0;
+#X text 147 213 2.arg: <float> a1;
+#X text 147 224 3.arg: <float> b1;
+#X text 63 5 <float> control-IIR-filter 1.order;
+#X obj 162 115 f 0.1;
+#X obj 202 142 f 0;
+#X obj 242 164 f 0.9;
+#X obj 22 49 inlet;
+#X obj 162 71 inlet;
+#X obj 202 71 inlet;
+#X obj 242 71 inlet;
+#X obj 356 80 inlet;
+#X obj 431 120 inlet;
+#X obj 22 264 outlet;
+#X connect 2 0 20 1;
+#X connect 2 0 37 0;
+#X connect 11 0 18 0;
+#X connect 13 0 2 1;
+#X connect 14 0 2 0;
+#X connect 15 0 13 0;
+#X connect 16 0 13 1;
+#X connect 18 0 28 0;
+#X connect 18 1 29 0;
+#X connect 18 2 30 0;
+#X connect 19 0 15 0;
+#X connect 20 0 16 0;
+#X connect 21 0 14 0;
+#X connect 21 0 19 1;
+#X connect 21 1 19 0;
+#X connect 21 2 20 0;
+#X connect 28 0 14 1;
+#X connect 29 0 15 1;
+#X connect 30 0 16 1;
+#X connect 31 0 21 0;
+#X connect 32 0 28 0;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 19 1;
+#X connect 36 0 20 1;
+#X restore 20 289 pd 1p1z 0.1 0 0.9;
+#X obj 20 65 inlet;
+#X obj 20 406 outlet;
+#X obj 211 405 outlet;
+#X connect 1 0 22 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 8 0 21 0;
+#X connect 9 0 21 0;
+#X connect 12 0 37 0;
+#X connect 15 0 17 1;
+#X connect 15 0 40 0;
+#X connect 16 0 19 0;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
+#X connect 18 1 17 0;
+#X connect 18 2 15 1;
+#X connect 19 0 15 0;
+#X connect 19 0 35 0;
+#X connect 20 0 17 1;
+#X connect 21 0 2 0;
+#X connect 22 0 12 0;
+#X connect 22 0 18 0;
+#X connect 25 0 27 0;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
+#X connect 28 0 39 0;
+#X connect 29 0 30 0;
+#X connect 30 0 34 0;
+#X connect 34 0 32 0;
+#X connect 35 0 20 0;
+#X connect 37 0 25 0;
+#X connect 38 0 0 0;
+#X connect 38 0 9 0;
+#X restore 239 63 pd dsp;
+#X text 238 99 mean;
+#X text 279 100 peak;
+#X text 289 63 % cpu;
+#X text 283 305 my_canvas = cnv;
+#X text 312 172 radiobutton = rdb;
+#X text 271 350 R;
+#X text 270 370 E;
+#X text 270 389 A;
+#X text 270 409 D;
+#X text 270 428 M;
+#X text 269 447 E;
+#X connect 17 0 26 0;
+#X connect 21 0 18 0;
+#X connect 21 0 16 0;
+#X connect 21 1 34 0;
+#X connect 21 2 19 0;
+#X connect 22 0 21 0;
+#X connect 27 0 29 0;
+#X connect 54 0 55 0;
+#X connect 55 0 38 0;
+#X connect 55 1 53 0;
diff --git a/iemabs/addl~.pd b/iemabs/addl~.pd
new file mode 100644
index 0000000..9730473
--- /dev/null
+++ b/iemabs/addl~.pd
@@ -0,0 +1,28 @@
+#N canvas 323 149 387 323 10;
+#X obj 22 42 inlet~;
+#X obj 35 67 inlet;
+#X obj 22 238 outlet~;
+#X text 14 266 (c) musil@iem.kug.ac.at;
+#X text 56 279 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 90 112 inlet;
+#X text 125 113 <float> interpolation_time [ms];
+#X text 31 291 graz \, austria 2001;
+#X text 69 239 ~signal_out~;
+#X obj 35 194 line~;
+#X obj 41 140 loadbang;
+#X text 119 191 2.arg: <float> interpolation_time [ms];
+#X text 72 66 <float> addition-coefficient or;
+#X text 119 180 1.arg: <float> addition-coefficient;
+#X obj 22 215 +~;
+#X text 49 9 signal-addition with line~ interpolation;
+#X text 72 78 <list> addition-coefficient + interpol_time [ms];
+#X obj 35 175 pack \$1 \$2;
+#X text 11 9 addl~;
+#X connect 0 0 15 0;
+#X connect 1 0 18 0;
+#X connect 6 0 18 1;
+#X connect 10 0 15 1;
+#X connect 11 0 18 0;
+#X connect 15 0 2 0;
+#X connect 18 0 10 0;
diff --git a/iemabs/all_guis-INTRO.pd b/iemabs/all_guis-INTRO.pd
new file mode 100644
index 0000000..cc3fe5c
--- /dev/null
+++ b/iemabs/all_guis-INTRO.pd
@@ -0,0 +1,19 @@
+#N canvas 254 125 455 353 10;
+#X obj 10 6 cnv 15 400 300 empty empty Gui_Gruppe 20 12 2 14 -216636
+-42246 0;
+#X obj 38 76 bng 25 250 50 0 bang bang bang 0 -6 192 8 -225271 -42246
+-1;
+#X obj 86 72 tgl 35 0 toggle toggle toggle 0 -6 192 8 -225280 -1109
+-1 0 1;
+#X obj 142 78 nbx 5 14 0.01 10 1 1 numbox numbox numbox 0 -6 192 10
+-228992 -355 -1 0.588209 256;
+#X obj 286 40 vsl 15 128 0 127 0 0 vslider vslider vslider 0 -8 192
+8 -195568 -33289 -1 3700 1;
+#X obj 26 195 hsl 128 15 0 127 0 0 hslider hslider hslider -2 -6 192
+8 -261689 -143491 -1 2600 1;
+#X obj 227 39 vradio 15 1 0 8 vdial vdial vdial 0 -6 192 8 -261681
+-90881 -1 1;
+#X obj 26 150 hradio 15 1 0 8 hdial hdial hdial 0 -6 192 8 -262131
+-123526 -1 1;
+#X obj 352 46 vu 15 120 vu vu -1 -8 64 8 -66577 -1 1 0;
+#X msg 340 263 \; vu -15 -3;
diff --git a/iemabs/all_guis-INTRO.txt b/iemabs/all_guis-INTRO.txt
new file mode 100644
index 0000000..37f44c2
--- /dev/null
+++ b/iemabs/all_guis-INTRO.txt
@@ -0,0 +1,123 @@
+HOW TO MOVE A GUI-OBJECT:
+
+Select a gui-object , then navigate the object by using the
+4 direction-keys: UP , DOWN , LEFT or RIGHT.
+If you press the SHIFT-Key too , the object will move 10 times faster.
+
+
+PROPERTIES-DIALOG-WINDOW:
+
+"dimensions(pix): size:" = square-size of the gui-objects in pixels.
+"dimensions(pix)(pix): width: height:" = width & height of the rectangular
+ gui-object in pixels.
+"selectable dimensions(pix): size:" = square-size of the selectable top-left
+ corner of my_canvas in pixels.
+"flash-time(ms)(ms): hold:" = flash-hold-time in msec = duration of activity,
+ if a bang-object was activated by any message-event
+ or by a mouse-click.
+"flash-time(ms)(ms): intrrpt:" = flash-interrupt-time in msec = duration
+ of inactivity , if an already activated bang is activated
+ once more.
+"output-range: left: right:" = hslider-bounds for input- as well as
+ output-values.
+"output-range: bottom: top:" = vslider-bounds for input- as well as
+ output-values.
+"non-zero-value: value:" = toggle has 2 value-states: zero and this value.
+"visible_rectangle(pix)(pix): width: height:" = width & height of a visible,
+ deactivated rectangle in pixels.
+"init" or "no init" = if "init"-mode is selected , the object displays and puts
+ out its previously saved value.
+ if "no init"-mode is selected, nothing will happen.
+"new&old" or "new-only" = the radiobutton-object changes its state in 2 ways:
+ "new&old"-mode: output sends previous state off, current state on;
+ "new-only"-mode: output sends only current state on.
+"number:" = number of buttons of a radiobutton.
+"steady on click" or "jump on click" = the 2 slider-objects
+ react to mouse-click in 2 ways:
+ "steady on click"-mode: slider-knob stays in position,
+ mouse and knob will move parallel;
+ "jump on click"-mode: slider-knob jumps immediately to new
+ mouse-position, positions of mouse and knob will be identical.
+"send-symbol:" = an output-message can be received by a receive-object
+ with the same send-symbol-name.
+"receive-symbol:" = a send-object with the same symbol-name can send
+ an input-message to the gui-object.
+"label: name:" = visible name of a gui-object; it will be moved together with
+ the gui-object.
+"label: x_off: y_off:" = coordinates of the label in relation to top-left
+ corner of gui-object.
+"label: font: fontsize:" = font-properties of label.
+"colors:" = a click on radiobuttons "background:", "front-color:" or
+ "label-color:" activates the color-fields on the right side
+ which display the current color of the item;
+ to select a different color, click on one of the 30 small
+ preset-color-buttons;
+ each color (background, front, label) can be tuned by its
+ RGB-values (0 .. 252, step 4) and a click on the set-buttons.
+
+
+THE DOLLAR-THING:
+
+if you want to send to, or to receive from gui-objects in abstractions,
+ you have to write into the property-entry:
+ #1-label (instead of $1-label).
+
+if you want a unique send-receive-symbolname:
+ type #0-uniquelabel (instead of $0-uniquelabel).
+
+
+GUI-MESSAGES:
+
+all gui-objects (bng, hsl, vsl, tgl, rdb, cnv and vu)
+ understand input-messages which change their properties.
+ except cnv has no input, so you have to send messages
+ to its receive-label (edit properties).
+
+"size 15 128" = change width & height of sliders and vu in pixels.
+"size 15" = change square-size of rdb, bng and tgl in pixels.
+"vis_size 800 600" = change width & height of visual rectangle
+ of my_canvas in pixels.
+"range 0.1 10.0" = change slider-boundaries for
+ input- as well as output-values.
+"nonzero 127.0" = change the nonzero-value of toggle.
+"flashtime 50 600" = change flash-interrupt- and
+ flash-hold-time of bng-object.
+"pos 150 170" = change the x-y-position of the top-left
+ corner of a gui-object in pixels;
+ "pos 0 0" is the top-left corner of your window;
+ the positive directions of x- and y-axes are right and down.
+"delta 15 17" = move the gui-object in relation to its
+ current position (in pixels).
+"color 0 22 22" = change background-, front- and
+ label-color of object with one of 30 presets.
+"color 0 22" = change background- and label-color
+ of vu and my_canvas with one of 30 presets.
+"color -16777216 (-1) -1" = change background-, (front-)
+ and label-color of object with RGB-values.
+ the RGB-value will be calculated:
+ -65536*RED-value (0 .. 255)
+ - 256*GREEN-value (0 .. 255)
+ - BLUE-value (0 .. 255) - 1.
+"number 10" = change number of buttons of radio-button.
+"steady 1" change slider-knob-behaviour on mouse-click.
+"single_change" change radio-button-behaviour
+ to output only the new state.
+"double_change" change radio-button-behaviour
+ to first release the previous button,
+ then output the state of the new button.
+"send fromgui" = change send-name of gui-objects,
+ except vu and cnv.
+"receive togui" = change receive-name of object.
+"label its_me" = change label-text of object.
+"label_pos 20 8" = change offset-coordinates of label-text.
+"label_font 0 10" = change font and fontsize of label-text.
+"init 1" = change initial loadbang-mode of gui-objects
+ except vu and cnv.
+"set 64" = change only the inner state and display
+ of gui-objects, except bng and cnv;
+ no output will result.
+"lin" = change scale-mode of slider to linear.
+"log" = change scale-mode of slider to logarithmical.
+"get_pos" = if my_canvas has a receive-name and a send-name
+ and you send the message "get_pos" to it,
+ you receive the current x- and y-coordinates.
diff --git a/iemabs/any.pd b/iemabs/any.pd
new file mode 100644
index 0000000..5531440
--- /dev/null
+++ b/iemabs/any.pd
@@ -0,0 +1,20 @@
+#N canvas 229 154 605 437 10;
+#X obj 37 84 inlet;
+#X obj 351 101 inlet;
+#X obj 37 330 outlet;
+#X text 14 358 (c) musil@iem.kug.ac.at;
+#X text 56 371 IEM KUG;
+#X text 31 383 graz \, austria 2002;
+#X obj 37 278 iem_anything_kernel;
+#X text 347 77 cold inlet = latch-inlet;
+#X text 39 62 hot inlet = bangout;
+#X text 248 17 a messages storage;
+#X text 237 278 any arguments are possible;
+#X obj 351 126 pre_inlet 1 1;
+#X obj 37 112 pre_inlet 1 0;
+#X text 17 15 any \, iem_anything;
+#X connect 0 0 12 0;
+#X connect 1 0 11 0;
+#X connect 6 0 2 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
diff --git a/iemabs/ap1c~.pd b/iemabs/ap1c~.pd
new file mode 100644
index 0000000..261ae1e
--- /dev/null
+++ b/iemabs/ap1c~.pd
@@ -0,0 +1,35 @@
+#N canvas 148 261 484 428 10;
+#X obj 22 42 inlet~;
+#X obj 52 65 inlet;
+#X obj 22 238 outlet~;
+#X text 17 380 (c) musil@iem.kug.ac.at;
+#X text 59 393 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 143 152 inlet;
+#X text 178 153 <float> interpolation_time [ms];
+#X text 28 209 ~filtered signal_out~;
+#X text 89 64 <float> -90_degree_frequency [Hz];
+#X text 34 405 graz \, austria 2001;
+#X text 124 235 1.arg: <float> -90_degree_frequency [Hz];
+#X text 11 9 ap1c~;
+#X text 66 10 allpass 1.order for filter-cascades;
+#X obj 87 90 inlet;
+#X obj 121 120 inlet;
+#X text 163 119 dummy;
+#X obj 52 266 outlet;
+#X obj 92 289 outlet;
+#X obj 127 312 outlet;
+#X obj 143 335 outlet;
+#X text 140 287 dummy;
+#X text 174 311 dummy;
+#X text 123 260 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 124 89 <float> frequency-shift [-];
+#X text 123 247 2.arg: <float> frequency-shift [-];
+#X obj 22 185 filter~ ap1c \$1 \$2 1 \$3;
+#X connect 0 0 26 0;
+#X connect 1 0 17 0;
+#X connect 1 0 26 1;
+#X connect 6 0 20 0;
+#X connect 6 0 26 4;
+#X connect 14 0 26 2;
+#X connect 26 0 2 0;
diff --git a/iemabs/ap1~.pd b/iemabs/ap1~.pd
new file mode 100644
index 0000000..bab38c9
--- /dev/null
+++ b/iemabs/ap1~.pd
@@ -0,0 +1,21 @@
+#N canvas 256 230 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 52 65 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 143 100 inlet;
+#X text 178 101 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X text 66 10 allpass 1.order;
+#X obj 22 133 filter~ ap1 \$1 1 0 \$2;
+#X text 89 64 <float> -90_degree_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 11 9 ap1~;
+#X text 84 182 1.arg: <float> -90_degree_frequency [Hz];
+#X text 84 193 2.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 10 0;
+#X connect 1 0 10 1;
+#X connect 6 0 10 4;
+#X connect 10 0 2 0;
diff --git a/iemabs/ap2c~.pd b/iemabs/ap2c~.pd
new file mode 100644
index 0000000..49c7a3d
--- /dev/null
+++ b/iemabs/ap2c~.pd
@@ -0,0 +1,38 @@
+#N canvas 117 241 450 407 10;
+#X obj 22 42 inlet~;
+#X obj 53 63 inlet;
+#X obj 22 233 outlet~;
+#X text 9 357 (c) musil@iem.kug.ac.at;
+#X text 51 370 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 85 88 inlet;
+#X text 194 155 <float> interpolation_time [ms];
+#X text 32 200 ~filtered signal_out~;
+#X obj 159 155 inlet;
+#X text 89 65 <float> -180_degree_frequency [Hz];
+#X text 26 382 graz \, austria 2001;
+#X text 12 9 ap2c~;
+#X text 60 8;
+#X text 58 9 allpass 2.order for filter-cascades;
+#X text 137 235 2.arg: <float> damping [-];
+#X text 137 244 3.arg: <float> frequency-shift [-];
+#X text 137 254 4.arg: <float> interpolation_time [ms] (opt.);
+#X obj 56 258 outlet;
+#X obj 88 283 outlet;
+#X obj 119 302 outlet;
+#X obj 160 322 outlet;
+#X text 129 282 dummy;
+#X text 159 301 dummy;
+#X text 124 88 <float> damping [-];
+#X text 137 226 1.arg: <float> -180_degree_frequency [Hz];
+#X obj 126 111 inlet;
+#X text 162 111 <float> frequency-shift [-];
+#X obj 22 181 filter~ ap2c \$1 \$2 \$3 \$4;
+#X connect 0 0 28 0;
+#X connect 1 0 18 0;
+#X connect 1 0 28 1;
+#X connect 6 0 28 2;
+#X connect 9 0 21 0;
+#X connect 9 0 28 4;
+#X connect 26 0 28 3;
+#X connect 28 0 2 0;
diff --git a/iemabs/ap2~.pd b/iemabs/ap2~.pd
new file mode 100644
index 0000000..54b8c07
--- /dev/null
+++ b/iemabs/ap2~.pd
@@ -0,0 +1,25 @@
+#N canvas 269 270 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 53 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 85 88 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 149 113 inlet;
+#X text 121 88 <float> quality [-];
+#X text 12 9 ap2~;
+#X text 60 8 allpass 2.order;
+#X text 89 65 <float> -180_degree_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X obj 22 134 filter~ ap2 \$1 \$2 1 \$3;
+#X text 82 174 1.arg: <float> -180_degree_frequency [Hz];
+#X text 82 183 2.arg: <float> quality [-];
+#X text 82 193 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 6 0 15 2;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/bng.pd b/iemabs/bng.pd
new file mode 100644
index 0000000..c529f5a
--- /dev/null
+++ b/iemabs/bng.pd
@@ -0,0 +1,265 @@
+#N canvas 158 62 445 357 10;
+#X obj 1 1 cnv 8 100 60 empty empty bng 20 20 1 18 -262144 -1109 0
+;
+#X text 10 288 (c) musil@iem.kug.ac.at;
+#X text 52 301 IEM KUG;
+#X text 27 313 graz \, austria 2001;
+#X text 118 61 click properties to;
+#X text 106 72 modify geometry \, colors \, etc.;
+#X obj 64 257 print;
+#N canvas 598 330 290 225 once 0;
+#X msg 38 73 1;
+#X obj 38 47 t b b;
+#X obj 68 124 sel 0;
+#X obj 68 103 f 0;
+#X obj 38 24 inlet;
+#X obj 68 154 outlet;
+#X connect 0 0 3 1;
+#X connect 1 0 0 0;
+#X connect 1 1 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 64 234 pd once;
+#X obj 36 258 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 3 130 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 36 173 bng 50 950 50 1 foo5_snd foo5_rcv big-bang 63 2 192 12
+-262131 -260818 -143491;
+#X msg 36 53 33;
+#X msg 50 75 -3.14;
+#X msg 73 117 11 22 33.33;
+#X msg 63 95 open xxx;
+#X msg 96 142 funny;
+#X text 101 11 gui-bang:;
+#X obj 202 135 s foo5_rcv;
+#X obj 202 155 r foo5_snd;
+#X obj 202 115 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 202 175 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X msg 4 53 0;
+#X text 125 205 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 124 216 for moving selected gui-objects;
+#N canvas 425 170 699 530 edit 0;
+#X obj 39 197 f;
+#X msg 17 176 bang;
+#X floatatom 55 175 3 63 88;
+#X floatatom 90 197 3 0 37;
+#X obj 39 220 pack 0 0;
+#X text 117 197 y-label;
+#X text 83 175 x-label;
+#X floatatom 259 143 3 8 75;
+#X text 286 143 size;
+#X obj 279 236 f;
+#X msg 257 215 bang;
+#X floatatom 295 214 3 -10 10;
+#X floatatom 330 236 3 -10 10;
+#X obj 279 259 pack 0 0;
+#X obj 304 348 f;
+#X msg 282 327 bang;
+#X floatatom 320 326 3 20 90;
+#X floatatom 355 348 3 150 200;
+#X obj 304 371 pack 0 0;
+#X text 323 214 x-delta;
+#X text 357 236 y-delta;
+#X text 348 326 x-position;
+#X text 382 348 y-position;
+#X obj 59 312 f;
+#X msg 37 291 bang;
+#X floatatom 75 290 3 0 2;
+#X floatatom 110 312 3 4 36;
+#X obj 59 335 pack 0 0;
+#X text 103 290 font;
+#X text 139 312 height;
+#X msg 36 399 \; foo5_rcv label blabla;
+#X msg 59 360 \; foo5_rcv label_font \$1 \$2;
+#X msg 39 245 \; foo5_rcv label_pos \$1 \$2;
+#X msg 47 135 \; foo5_rcv color \$1 \$2 \$3;
+#X msg 259 172 \; foo5_rcv size \$1;
+#X msg 279 284 \; foo5_rcv delta \$1 \$2;
+#X msg 304 396 \; foo5_rcv pos \$1 \$2;
+#X msg 483 133 \; foo5_rcv receive foo5a_rcv;
+#X msg 482 171 \; foo5a_rcv receive foo5_rcv;
+#X msg 483 50 \; foo5_rcv send foo5a_snd;
+#X msg 483 88 \; foo5_rcv send foo5_snd;
+#X text 526 349 no init;
+#X msg 505 368 \; foo5_rcv init 0;
+#X msg 512 435 \; foo5_rcv init 1;
+#X obj 493 260 f;
+#X msg 471 239 bang;
+#X floatatom 509 238 4 10 100;
+#X floatatom 544 261 5 100 3000;
+#X obj 493 283 pack 0 0;
+#X msg 493 308 \; foo5_rcv flashtime \$1 \$2;
+#X text 548 237 interrupt-time;
+#X text 585 262 hold-time;
+#X msg 36 435 \; foo5_rcv label big-bang;
+#X text 502 417 init bang on loadbang;
+#X text 519 221 flash-time:;
+#X obj 47 114 pack 0 0 0;
+#X obj 47 86 f;
+#X msg 24 38 bang;
+#X floatatom 63 36 3 0 29;
+#X floatatom 79 56 3 0 29;
+#X floatatom 112 72 3 0 29;
+#X text 91 36 background;
+#X text 106 56 front-color;
+#X text 140 73 label-color;
+#X msg 285 35 back;
+#X msg 285 55 front;
+#X msg 285 75 label;
+#X msg 247 35 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 96 pd RGB_____________;
+#X floatatom 327 65 3 0 255;
+#X floatatom 370 65 3 0 255;
+#X floatatom 413 66 3 0 255;
+#X text 34 10 preset-colors;
+#X text 296 7 RGB-colors;
+#X text 327 47 red;
+#X text 363 46 green;
+#X text 411 46 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 32 0;
+#X connect 7 0 34 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 35 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 36 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 31 0;
+#X connect 44 0 48 0;
+#X connect 45 0 44 0;
+#X connect 46 0 44 1;
+#X connect 47 0 48 1;
+#X connect 48 0 49 0;
+#X connect 55 0 33 0;
+#X connect 56 0 55 0;
+#X connect 57 0 56 0;
+#X connect 58 0 56 1;
+#X connect 59 0 55 1;
+#X connect 60 0 55 2;
+#X connect 64 0 68 0;
+#X connect 65 0 68 0;
+#X connect 66 0 68 0;
+#X connect 67 0 68 0;
+#X connect 68 0 55 0;
+#X connect 68 1 55 1;
+#X connect 68 2 55 2;
+#X connect 69 0 68 1;
+#X connect 70 0 68 2;
+#X connect 71 0 68 3;
+#X restore 297 144 pd edit;
+#X text 185 312 updated for Pd version 0.34;
+#X obj 179 11 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 248 31 bng 15 250 50 0 aaa aaa empty 20 8 192 8 -262144 -1 -1
+;
+#X connect 7 0 6 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 10 0 7 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 10 0;
+#X connect 18 0 20 0;
+#X connect 19 0 17 0;
+#X connect 21 0 10 0;
diff --git a/iemabs/bp2~.pd b/iemabs/bp2~.pd
new file mode 100644
index 0000000..895a826
--- /dev/null
+++ b/iemabs/bp2~.pd
@@ -0,0 +1,25 @@
+#N canvas 319 273 395 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 124 89 <float> Q [-];
+#X obj 22 134 filter~ bpq2 \$1 \$2 1 \$3;
+#X text 85 176 1.arg: <float> center_frequency [Hz];
+#X text 85 185 2.arg: <float> Q [-];
+#X text 85 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 12 9 bp2~;
+#X text 56 10 bandpass 2.order with Q-inlet (like bpq2~);
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 6 0 13 2;
+#X connect 9 0 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/bpq2~.pd b/iemabs/bpq2~.pd
new file mode 100644
index 0000000..130a453
--- /dev/null
+++ b/iemabs/bpq2~.pd
@@ -0,0 +1,25 @@
+#N canvas 319 273 395 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 124 89 <float> Q [-];
+#X obj 22 134 filter~ bpq2 \$1 \$2 1 \$3;
+#X text 12 9 bpq2~;
+#X text 56 10 bandpass 2.order with Q-inlet;
+#X text 85 176 1.arg: <float> center_frequency [Hz];
+#X text 85 185 2.arg: <float> Q [-];
+#X text 85 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 6 0 13 2;
+#X connect 9 0 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/bpw2~.pd b/iemabs/bpw2~.pd
new file mode 100644
index 0000000..c76ef81
--- /dev/null
+++ b/iemabs/bpw2~.pd
@@ -0,0 +1,25 @@
+#N canvas 315 262 395 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 190 112 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 155 112 inlet;
+#X text 92 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 12 9 bpw2~;
+#X text 56 10 bandpass 2.order with bandwidth-inlet;
+#X text 124 90 <float> bandwidth [Hz];
+#X obj 22 134 filter~ bpw2 \$1 \$2 1 \$3;
+#X text 97 174 1.arg: <float> center_frequency [Hz];
+#X text 97 183 2.arg: <float> bandwidth [Hz];
+#X text 97 192 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 6 0 15 2;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/bs2~.pd b/iemabs/bs2~.pd
new file mode 100644
index 0000000..f6a304f
--- /dev/null
+++ b/iemabs/bs2~.pd
@@ -0,0 +1,25 @@
+#N canvas 299 265 423 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 123 89 <float> Q [-];
+#X obj 22 136 filter~ bsq2 \$1 \$2 1 \$3;
+#X text 102 176 1.arg: <float> center_frequency [Hz];
+#X text 102 185 2.arg: <float> Q [-];
+#X text 102 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X text 11 9 bs2~;
+#X text 66 10 bandstop 2.order with Q-inlet (like bs2~);
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 6 0 13 2;
+#X connect 9 0 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/bsq2~.pd b/iemabs/bsq2~.pd
new file mode 100644
index 0000000..61bc8e4
--- /dev/null
+++ b/iemabs/bsq2~.pd
@@ -0,0 +1,25 @@
+#N canvas 299 265 389 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 123 89 <float> Q [-];
+#X text 11 9 bsq2~;
+#X text 66 10 bandstop 2.order with Q-inlet;
+#X obj 22 136 filter~ bsq2 \$1 \$2 1 \$3;
+#X text 102 176 1.arg: <float> center_frequency [Hz];
+#X text 102 185 2.arg: <float> Q [-];
+#X text 102 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 6 0 15 2;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/bsw2~.pd b/iemabs/bsw2~.pd
new file mode 100644
index 0000000..b3cbc6e
--- /dev/null
+++ b/iemabs/bsw2~.pd
@@ -0,0 +1,25 @@
+#N canvas 299 265 389 281 10;
+#X obj 22 42 inlet~;
+#X obj 55 65 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 88 89 inlet;
+#X text 191 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X obj 155 113 inlet;
+#X text 91 64 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 64 9 bandstop 2.order with bandwidth-inlet;
+#X text 123 89 <float> bandwidth [Hz];
+#X text 11 9 bsw2~;
+#X obj 22 136 filter~ bsw2 \$1 \$2 1 \$3;
+#X text 97 178 1.arg: <float> center_frequency [Hz];
+#X text 97 188 2.arg: <float> bandwidth [Hz];
+#X text 97 198 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 6 0 15 2;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/dbtofad.pd b/iemabs/dbtofad.pd
new file mode 100644
index 0000000..1d55fbd
--- /dev/null
+++ b/iemabs/dbtofad.pd
@@ -0,0 +1,16 @@
+#N canvas 204 221 600 306 10;
+#X obj 91 69 inlet;
+#X obj 91 154 transf_fader;
+#X obj 107 98 loadbang;
+#X obj 91 176 outlet;
+#X msg 107 119 pairs 0 0 40 6 70 24 80 36 88 48 94 60 98 72 102 96
+106 108 107.5 111 109 114 112 117 142 147;
+#X text 27 220 (c) musil@iem.kug.ac.at;
+#X text 64 233 IEM KUG;
+#X text 39 245 graz \, austria 2003;
+#X text 13 10 dbtofad;
+#X text 86 11 convert midi-db to fader-scale;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
diff --git a/iemabs/default.pd b/iemabs/default.pd
new file mode 100644
index 0000000..756b4bc
--- /dev/null
+++ b/iemabs/default.pd
@@ -0,0 +1,22 @@
+#N canvas 409 285 344 277 10;
+#X obj 17 142 f \$1;
+#X text 10 210 (c) musil@iem.kug.ac.at;
+#X text 51 223 IEM KUG;
+#X text 26 235 graz \, austria 2001;
+#X obj 17 50 inlet;
+#X obj 17 183 outlet;
+#X text 6 4 default;
+#X text 66 6 if input equal to zero \, then output argument;
+#X text 79 19 else output = input;
+#X obj 17 115 sel 0 1;
+#X obj 17 96 != 0;
+#X obj 17 71 t f f;
+#X obj 71 144 f;
+#X connect 0 0 5 0;
+#X connect 4 0 11 0;
+#X connect 9 0 0 0;
+#X connect 9 1 12 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 11 1 12 1;
+#X connect 12 0 5 0;
diff --git a/iemabs/divl~.pd b/iemabs/divl~.pd
new file mode 100644
index 0000000..0c95b71
--- /dev/null
+++ b/iemabs/divl~.pd
@@ -0,0 +1,28 @@
+#N canvas 324 150 406 323 10;
+#X obj 22 42 inlet~;
+#X obj 35 67 inlet;
+#X obj 22 238 outlet~;
+#X text 14 266 (c) musil@iem.kug.ac.at;
+#X text 56 279 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 90 112 inlet;
+#X text 125 113 <float> interpolation_time [ms];
+#X text 31 291 graz \, austria 2001;
+#X text 69 239 ~signal_out~;
+#X obj 35 194 line~;
+#X obj 41 135 loadbang;
+#X text 119 191 2.arg: <float> interpolation_time [ms];
+#X text 72 66 <float> division-coefficient or;
+#X text 72 78 <list> division-coefficient + interpol_time [ms];
+#X text 119 180 1.arg: <float> division-coefficient;
+#X obj 22 215 /~;
+#X text 49 9 signal-division with line~ interpolation;
+#X obj 35 176 pack \$1 \$2;
+#X text 11 9 divl~;
+#X connect 0 0 16 0;
+#X connect 1 0 18 0;
+#X connect 6 0 18 1;
+#X connect 10 0 16 1;
+#X connect 11 0 18 0;
+#X connect 16 0 2 0;
+#X connect 18 0 10 0;
diff --git a/iemabs/dsp.pd b/iemabs/dsp.pd
new file mode 100644
index 0000000..f4bc3a7
--- /dev/null
+++ b/iemabs/dsp.pd
@@ -0,0 +1,75 @@
+#N canvas 238 72 380 494 10;
+#X obj 20 65 inlet;
+#X obj 20 406 outlet;
+#X msg 31 88 \; pd dsp \$1;
+#X obj 20 199 cputime;
+#X obj 20 178 t b b;
+#X text 15 11 dsp;
+#X text 48 439 (c) musil@iem.kug.ac.at;
+#X text 90 452 IEM KUG;
+#X text 59 65 1/0 = ON/OFF;
+#X text 97 313 CPU-load;
+#X obj 62 126 loadbang;
+#X obj 20 126 sel 1;
+#X text 65 464 graz \, austria 2001;
+#X text 64 12 turn dsp-kernel on & off \,;
+#X obj 20 240 t f f;
+#X obj 51 263 once;
+#X obj 211 405 outlet;
+#X text 65 408 average;
+#X text 177 405 peak;
+#X obj 211 154 f;
+#X obj 146 179 > -1;
+#X obj 169 155 f -1;
+#X obj 179 91 t f b f;
+#X obj 146 204 sel 1;
+#X obj 192 132 f -1;
+#X obj 20 154 metro 500;
+#X obj 20 220 * 0.2;
+#X text 74 37 -dsp-load in %;
+#X text 65 24 measure average- and peak-;
+#X obj 20 292 1p1z 0.1 0 0.9;
+#X obj 20 315 * 100;
+#X obj 20 360 int;
+#X obj 20 338 + 0.499;
+#X obj 20 383 * 0.01;
+#X obj 246 207 r pd;
+#X obj 246 231 route dsp;
+#X text 245 318 to toggle input;
+#X msg 246 283 \; dsp_tgl set \$1;
+#X obj 247 341 r dsp_tgl;
+#X obj 246 257 route float;
+#X obj 146 227 del 3990;
+#X connect 0 0 2 0;
+#X connect 0 0 11 0;
+#X connect 3 0 26 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 10 0 25 0;
+#X connect 11 0 25 0;
+#X connect 14 0 29 0;
+#X connect 14 1 15 0;
+#X connect 15 0 29 5;
+#X connect 15 0 29 4;
+#X connect 19 0 21 1;
+#X connect 19 0 16 0;
+#X connect 20 0 23 0;
+#X connect 21 0 20 1;
+#X connect 22 0 20 0;
+#X connect 22 1 21 0;
+#X connect 22 2 19 1;
+#X connect 23 0 19 0;
+#X connect 23 0 40 0;
+#X connect 24 0 21 1;
+#X connect 25 0 4 0;
+#X connect 26 0 14 0;
+#X connect 26 0 22 0;
+#X connect 29 0 30 0;
+#X connect 30 0 32 0;
+#X connect 31 0 33 0;
+#X connect 32 0 31 0;
+#X connect 33 0 1 0;
+#X connect 34 0 35 0;
+#X connect 35 0 39 0;
+#X connect 39 0 37 0;
+#X connect 40 0 24 0;
diff --git a/iemabs/dsp~.pd b/iemabs/dsp~.pd
new file mode 100644
index 0000000..02fe3ab
--- /dev/null
+++ b/iemabs/dsp~.pd
@@ -0,0 +1,75 @@
+#N canvas 238 72 380 494 10;
+#X obj 20 65 inlet;
+#X obj 20 406 outlet;
+#X msg 31 88 \; pd dsp \$1;
+#X obj 20 199 cputime;
+#X obj 20 178 t b b;
+#X text 48 439 (c) musil@iem.kug.ac.at;
+#X text 90 452 IEM KUG;
+#X text 59 65 1/0 = ON/OFF;
+#X text 97 313 CPU-load;
+#X obj 62 126 loadbang;
+#X obj 20 126 sel 1;
+#X text 65 464 graz \, austria 2001;
+#X text 64 12 turn dsp-kernel on & off \,;
+#X obj 20 240 t f f;
+#X obj 51 263 once;
+#X obj 211 405 outlet;
+#X text 65 408 average;
+#X text 177 405 peak;
+#X obj 211 154 f;
+#X obj 146 179 > -1;
+#X obj 169 155 f -1;
+#X obj 179 91 t f b f;
+#X obj 146 204 sel 1;
+#X obj 192 132 f -1;
+#X obj 20 154 metro 500;
+#X obj 20 220 * 0.2;
+#X text 74 37 -dsp-load in %;
+#X text 65 24 measure average- and peak-;
+#X obj 20 292 1p1z 0.1 0 0.9;
+#X obj 20 315 * 100;
+#X obj 20 360 int;
+#X obj 20 338 + 0.499;
+#X obj 20 383 * 0.01;
+#X obj 246 207 r pd;
+#X obj 246 231 route dsp;
+#X text 245 318 to toggle input;
+#X msg 246 283 \; dsp_tgl set \$1;
+#X obj 247 341 r dsp_tgl;
+#X obj 246 257 route float;
+#X text 15 11 dsp~;
+#X obj 146 227 del 3990;
+#X connect 0 0 2 0;
+#X connect 0 0 10 0;
+#X connect 3 0 25 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 9 0 24 0;
+#X connect 10 0 24 0;
+#X connect 13 0 28 0;
+#X connect 13 1 14 0;
+#X connect 14 0 28 5;
+#X connect 14 0 28 4;
+#X connect 18 0 20 1;
+#X connect 18 0 15 0;
+#X connect 19 0 22 0;
+#X connect 20 0 19 1;
+#X connect 21 0 19 0;
+#X connect 21 1 20 0;
+#X connect 21 2 18 1;
+#X connect 22 0 18 0;
+#X connect 22 0 40 0;
+#X connect 23 0 20 1;
+#X connect 24 0 4 0;
+#X connect 25 0 13 0;
+#X connect 25 0 21 0;
+#X connect 28 0 29 0;
+#X connect 29 0 31 0;
+#X connect 30 0 32 0;
+#X connect 31 0 30 0;
+#X connect 32 0 1 0;
+#X connect 33 0 34 0;
+#X connect 34 0 38 0;
+#X connect 38 0 36 0;
+#X connect 40 0 23 0;
diff --git a/iemabs/fadtodb.pd b/iemabs/fadtodb.pd
new file mode 100644
index 0000000..5460d33
--- /dev/null
+++ b/iemabs/fadtodb.pd
@@ -0,0 +1,16 @@
+#N canvas 487 77 454 304 10;
+#X obj 91 69 inlet;
+#X msg 107 119 pairs 0 0 6 40 24 70 36 80 48 88 60 94 72 98 96 102
+108 106 111 107.5 114 109 117 112 147 142;
+#X obj 91 154 transf_fader;
+#X obj 107 98 loadbang;
+#X obj 91 176 outlet;
+#X text 26 201 (c) musil@iem.kug.ac.at;
+#X text 63 214 IEM KUG;
+#X text 38 226 graz \, austria 2003;
+#X text 14 10 fadtodb;
+#X text 87 11 convert fader-scale to midi-db;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
diff --git a/iemabs/fadtorms.pd b/iemabs/fadtorms.pd
new file mode 100644
index 0000000..616c3fa
--- /dev/null
+++ b/iemabs/fadtorms.pd
@@ -0,0 +1,18 @@
+#N canvas 318 237 454 304 10;
+#X obj 91 69 inlet;
+#X msg 107 119 pairs 0 0 6 40 24 70 36 80 48 88 60 94 72 98 96 102
+108 106 111 107.5 114 109 117 112 147 142;
+#X obj 91 154 transf_fader;
+#X obj 107 98 loadbang;
+#X obj 91 199 outlet;
+#X obj 91 177 dbtorms;
+#X text 21 228 (c) musil@iem.kug.ac.at;
+#X text 58 241 IEM KUG;
+#X text 33 253 graz \, austria 2003;
+#X text 13 10 fadtorms;
+#X text 86 11 convert fader-scale to rms-value;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 0 1 0;
+#X connect 5 0 4 0;
diff --git a/iemabs/gainvu~.pd b/iemabs/gainvu~.pd
new file mode 100644
index 0000000..7100941
--- /dev/null
+++ b/iemabs/gainvu~.pd
@@ -0,0 +1,38 @@
+#N canvas 157 220 299 360 10;
+#X obj 112 57 inlet;
+#X obj 32 167 line~;
+#X text 19 37 audio;
+#X obj 19 57 inlet~;
+#X obj 19 186 *~;
+#X obj 170 262 outlet;
+#X obj 112 139 pack 0 500;
+#X text 7 5 gainvu~;
+#X obj 19 262 outlet~;
+#X text 19 276 audio;
+#X obj 112 102 dbtorms;
+#X obj 197 57 inlet;
+#X text 197 41 interpol-time;
+#X obj 197 79 init \$1;
+#X obj 197 103 split 20;
+#X text 6 306 (c) musil@iem.kug.ac.at;
+#X text 48 319 IEM KUG;
+#X text 23 331 graz \, austria 2001;
+#X text 48 186 1.arg: <float> interpolation-time in ms;
+#X obj 170 239 prvu~;
+#X text 112 41 slider-128;
+#X text 182 278 vu;
+#X obj 98 264 outlet;
+#X obj 98 244 - 100;
+#X connect 0 0 10 0;
+#X connect 0 0 23 0;
+#X connect 1 0 4 1;
+#X connect 3 0 4 0;
+#X connect 4 0 8 0;
+#X connect 4 0 19 0;
+#X connect 6 0 1 0;
+#X connect 10 0 6 0;
+#X connect 11 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 1 6 1;
+#X connect 19 0 5 0;
+#X connect 23 0 22 0;
diff --git a/iemabs/gui-menu.pd b/iemabs/gui-menu.pd
new file mode 100644
index 0000000..42044ac
--- /dev/null
+++ b/iemabs/gui-menu.pd
@@ -0,0 +1,15 @@
+#N canvas 149 58 200 219 10;
+#X obj 23 126 bng 15 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X obj 78 127 toggle 15 0 empty empty empty 8 -8 0 10 0 22 22 0;
+#X obj 13 184 hslider 128 15 0 127 0 0 empty empty empty 8 -8 0 10 0 22 22 0;
+#X obj 115 25 vslider 15 128 0 127 0 0 empty empty empty 8 -8 0 10 0 22 22 0;
+#X obj 135 26 vu 15 120 empty empty 8 -8 0 10 2 22;
+#X obj 9 46 my_canvas 15 100 60 empty 20 12 2 20 10 2;
+#X obj 11 163 radiobut 15 1 0 8 empty empty empty 8 -8 0 10 0 22 22 0;
+#X text 134 161 rdb;
+#X text 147 183 hsl;
+#X text 113 5 vsl;
+#X text 140 5 vu;
+#X text 22 109 bng;
+#X text 76 109 tgl;
+#X text 11 26 my_canvas;
diff --git a/iemabs/hp10_bess~.pd b/iemabs/hp10_bess~.pd
new file mode 100644
index 0000000..dabb9ab
--- /dev/null
+++ b/iemabs/hp10_bess~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 406 302 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp10_bess~;
+#X text 81 5 highpass 10.order with bessel characteristic;
+#X obj 22 188 hp2c~ \$1 1.0215 0.265 \$2;
+#X obj 22 167 hp2c~ \$1 0.9393 0.2549 \$2;
+#X obj 22 146 hp2c~ \$1 0.7815 0.2351 \$2;
+#X obj 22 127 hp2c~ \$1 0.5604 0.2059 \$2;
+#X obj 22 107 hp2c~ \$1 0.2883 0.1665 \$2;
+#X connect 0 0 19 0;
+#X connect 1 0 19 1;
+#X connect 9 0 19 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 4 18 4;
diff --git a/iemabs/hp10_butt~.pd b/iemabs/hp10_butt~.pd
new file mode 100644
index 0000000..8860abe
--- /dev/null
+++ b/iemabs/hp10_butt~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 hp10_butt~;
+#X text 81 5 highpass 10.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 0.312869 1 \$2;
+#X obj 22 127 hp2c~ \$1 0.907981 1 \$2;
+#X obj 22 146 hp2c~ \$1 1.41421 1 \$2;
+#X obj 22 167 hp2c~ \$1 1.78201 1 \$2;
+#X obj 22 188 hp2c~ \$1 1.97538 1 \$2;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 9 0 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/hp10_cheb~.pd b/iemabs/hp10_cheb~.pd
new file mode 100644
index 0000000..1efe92a
--- /dev/null
+++ b/iemabs/hp10_cheb~.pd
@@ -0,0 +1,38 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 30 208 ~filtered signal_out~;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 97 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 97 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 5 5 hp10_cheb~;
+#X text 81 5 highpass 10.order with chebyshev characteristic;
+#X obj 22 107 hp2c~ \$1 0.045535 1.0277 \$2;
+#X obj 22 127 hp2c~ \$1 0.161621 1.2569 \$2;
+#X obj 22 148 hp2c~ \$1 0.393858 1.96655 \$2;
+#X obj 22 168 hp2c~ \$1 1.13986 4.51667 \$2;
+#X obj 22 189 hp2c~ \$1 6.36341 22.7468 \$2;
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/hp10_crit~.pd b/iemabs/hp10_crit~.pd
new file mode 100644
index 0000000..c35657d
--- /dev/null
+++ b/iemabs/hp10_crit~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp10_crit~;
+#X text 81 5 highpass 10.order with critical damping;
+#X obj 22 107 hp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 127 hp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 147 hp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 167 hp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 187 hp2c~ \$1 0.5358 0.0718 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/hp1c~.pd b/iemabs/hp1c~.pd
new file mode 100644
index 0000000..6b8d84a
--- /dev/null
+++ b/iemabs/hp1c~.pd
@@ -0,0 +1,35 @@
+#N canvas 325 243 413 348 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 196 outlet~;
+#X text 12 299 (c) musil@iem.kug.ac.at;
+#X text 54 312 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 134 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 88 93 inlet;
+#X text 29 324 graz \, austria 2001;
+#X obj 155 134 inlet;
+#X text 124 93 <float> frequency-shift [-];
+#X text 12 8 hp1c~;
+#X text 60 8 highpass 1.order for filter-cascades;
+#X obj 22 157 filter~ hp1c \$1 \$2 1 \$3;
+#X obj 55 214 outlet;
+#X obj 86 232 outlet;
+#X obj 115 251 outlet;
+#X obj 155 271 outlet;
+#X text 127 231 dummy;
+#X text 155 250 dummy;
+#X obj 123 113 inlet;
+#X text 158 113 dummy;
+#X text 120 192 1.arg: <float> cutoff_frequency [Hz];
+#X text 120 202 2.arg: <float> frequency-shift [-];
+#X text 120 212 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 1 0 16 0;
+#X connect 9 0 15 2;
+#X connect 11 0 15 4;
+#X connect 11 0 19 0;
+#X connect 15 0 2 0;
diff --git a/iemabs/hp1~.pd b/iemabs/hp1~.pd
new file mode 100644
index 0000000..95d9b8c
--- /dev/null
+++ b/iemabs/hp1~.pd
@@ -0,0 +1,21 @@
+#N canvas 274 213 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 52 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 89 64 <float> cutoff_frequency [Hz];
+#X obj 143 85 inlet;
+#X text 181 84 <float> interpolation_time [ms];
+#X text 12 8 hp1~;
+#X obj 22 123 filter~ hp1 \$1 1 0 \$2;
+#X text 28 157 ~filtered signal_out~;
+#X text 66 10 highpass 1.order;
+#X text 32 254 graz \, austria 2001;
+#X text 92 192 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 92 182 1.arg: <float> cutoff_frequency [Hz];
+#X connect 0 0 10 0;
+#X connect 1 0 10 1;
+#X connect 7 0 10 4;
+#X connect 10 0 2 0;
diff --git a/iemabs/hp2_bess~.pd b/iemabs/hp2_bess~.pd
new file mode 100644
index 0000000..1692275
--- /dev/null
+++ b/iemabs/hp2_bess~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 56 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 67 <float> cutoff_frequency [Hz];
+#X text 195 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 161 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp2_bess~;
+#X text 81 5 highpass 2.order with bessel characteristic;
+#X obj 22 107 hp2c~ \$1 1.3617 0.618 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/hp2_butt~.pd b/iemabs/hp2_butt~.pd
new file mode 100644
index 0000000..a244e70
--- /dev/null
+++ b/iemabs/hp2_butt~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 52 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 89 67 <float> cutoff_frequency [Hz];
+#X text 177 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 143 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp2_butt~;
+#X text 81 5 highpass 2.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 1.41421 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/hp2_cheb~.pd b/iemabs/hp2_cheb~.pd
new file mode 100644
index 0000000..30116f7
--- /dev/null
+++ b/iemabs/hp2_cheb~.pd
@@ -0,0 +1,22 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp2_cheb~;
+#X text 81 5 highpass 2.order with chebyshev characteristic;
+#X obj 22 106 hp2c~ \$1 1.3022 1.5515 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/hp2_crit~.pd b/iemabs/hp2_crit~.pd
new file mode 100644
index 0000000..626284c
--- /dev/null
+++ b/iemabs/hp2_crit~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 107 hp2c~ \$1 1.2872 0.4142 \$2;
+#X text 5 5 hp2_crit~;
+#X text 81 5 highpass 2.order with critical damping;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/hp2c~.pd b/iemabs/hp2c~.pd
new file mode 100644
index 0000000..d74adfa
--- /dev/null
+++ b/iemabs/hp2c~.pd
@@ -0,0 +1,37 @@
+#N canvas 406 261 408 347 10;
+#X obj 22 42 inlet~;
+#X obj 56 63 inlet;
+#X obj 22 193 outlet~;
+#X text 8 295 (c) musil@iem.kug.ac.at;
+#X text 50 308 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 64 <float> cutoff_frequency [Hz];
+#X obj 91 87 inlet;
+#X text 195 136 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 126 111 inlet;
+#X text 25 320 graz \, austria 2001;
+#X obj 161 136 inlet;
+#X text 127 87 <float> damping [-];
+#X text 162 111 <float> frequency-shift [-];
+#X text 12 8 hp2c~;
+#X text 60 8 highpass 2.order for filter-cascades;
+#X obj 22 157 filter~ hp2c \$1 \$2 \$3 \$4;
+#X obj 56 211 outlet;
+#X obj 88 236 outlet;
+#X obj 119 255 outlet;
+#X obj 161 274 outlet;
+#X text 129 235 dummy;
+#X text 159 254 dummy;
+#X text 128 190 1.arg: <float> cutoff_frequency [Hz];
+#X text 128 199 2.arg: <float> damping [-];
+#X text 128 208 3.arg: <float> frequency-shift [-];
+#X text 128 218 4.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 17 0;
+#X connect 1 0 17 1;
+#X connect 1 0 18 0;
+#X connect 7 0 17 2;
+#X connect 10 0 17 3;
+#X connect 12 0 17 4;
+#X connect 12 0 21 0;
+#X connect 17 0 2 0;
diff --git a/iemabs/hp2~.pd b/iemabs/hp2~.pd
new file mode 100644
index 0000000..5a5521a
--- /dev/null
+++ b/iemabs/hp2~.pd
@@ -0,0 +1,25 @@
+#N canvas 435 244 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 53 65 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 89 64 <float> cutoff_frequency [Hz];
+#X obj 85 89 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 28 157 ~filtered signal_out~;
+#X text 11 9 hp2~;
+#X text 66 10 highpass 2.order;
+#X obj 22 136 filter~ hp2 \$1 \$2 1 \$3;
+#X obj 149 112 inlet;
+#X text 120 89 <float> Q [-];
+#X text 32 254 graz \, austria 2001;
+#X text 88 177 1.arg: <float> cutoff_frequency [Hz];
+#X text 88 186 2.arg: <float> Q [-];
+#X text 88 196 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 7 0 12 2;
+#X connect 12 0 2 0;
+#X connect 13 0 12 4;
diff --git a/iemabs/hp3_bess~.pd b/iemabs/hp3_bess~.pd
new file mode 100644
index 0000000..fb6278f
--- /dev/null
+++ b/iemabs/hp3_bess~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp3_bess~;
+#X text 81 5 highpass 3.order with bessel characteristic;
+#X obj 22 129 hp1c~ \$1 0.756 \$2;
+#X obj 22 107 hp2c~ \$1 0.9996 0.4772 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
diff --git a/iemabs/hp3_butt~.pd b/iemabs/hp3_butt~.pd
new file mode 100644
index 0000000..f3abf0c
--- /dev/null
+++ b/iemabs/hp3_butt~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 406 302 10;
+#X obj 22 42 inlet~;
+#X obj 43 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 80 66 <float> cutoff_frequency [Hz];
+#X text 141 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 107 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp3_butt~;
+#X text 81 5 highpass 3.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 1 1 \$2;
+#X obj 22 129 hp1c~ \$1 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/hp3_cheb~.pd b/iemabs/hp3_cheb~.pd
new file mode 100644
index 0000000..31d94ea
--- /dev/null
+++ b/iemabs/hp3_cheb~.pd
@@ -0,0 +1,26 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 5 5 hp3_cheb~;
+#X text 81 5 highpass 3.order with chebyshev characteristic;
+#X obj 22 127 hp1c~ \$1 2.2156 \$2;
+#X obj 22 106 hp2c~ \$1 0.5442 1.2057 \$2;
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
diff --git a/iemabs/hp3_crit~.pd b/iemabs/hp3_crit~.pd
new file mode 100644
index 0000000..e7b9f15
--- /dev/null
+++ b/iemabs/hp3_crit~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp3_crit~;
+#X text 81 5 highpass 3.order with critical damping;
+#X obj 22 129 hp1c~ \$1 0.5098 \$2;
+#X obj 22 107 hp2c~ \$1 1.0197 0.2599 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
diff --git a/iemabs/hp4_bess~.pd b/iemabs/hp4_bess~.pd
new file mode 100644
index 0000000..c6b81fd
--- /dev/null
+++ b/iemabs/hp4_bess~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 406 302 10;
+#X obj 22 42 inlet~;
+#X obj 56 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 67 <float> cutoff_frequency [Hz];
+#X text 195 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 161 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp4_bess~;
+#X text 81 5 highpass 4.order with bessel characteristic;
+#X obj 22 107 hp2c~ \$1 0.7743 0.389 \$2;
+#X obj 22 127 hp2c~ \$1 1.3397 0.4889 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/hp4_butt~.pd b/iemabs/hp4_butt~.pd
new file mode 100644
index 0000000..e313e9b
--- /dev/null
+++ b/iemabs/hp4_butt~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 hp4_butt~;
+#X text 81 5 highpass 4.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 0.765367 1 \$2;
+#X obj 22 127 hp2c~ \$1 1.84776 1 \$2;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 9 0 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/hp4_cheb~.pd b/iemabs/hp4_cheb~.pd
new file mode 100644
index 0000000..f765f44
--- /dev/null
+++ b/iemabs/hp4_cheb~.pd
@@ -0,0 +1,26 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 5 5 hp4_cheb~;
+#X text 81 5 highpass 4.order with chebyshev characteristic;
+#X obj 22 106 hp2c~ \$1 0.303886 1.16973 \$2;
+#X obj 22 127 hp2c~ \$1 2.59037 4.13012 \$2;
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/hp4_crit~.pd b/iemabs/hp4_crit~.pd
new file mode 100644
index 0000000..a326cc9
--- /dev/null
+++ b/iemabs/hp4_crit~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 155 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 6 4 hp4_crit~;
+#X text 82 4 highpass 4.order with critical damping;
+#X obj 22 127 hp2c~ \$1 0.87 0.1892 \$2;
+#X obj 22 107 hp2c~ \$1 0.87 0.1892 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
diff --git a/iemabs/hp5_bess~.pd b/iemabs/hp5_bess~.pd
new file mode 100644
index 0000000..ac30fa4
--- /dev/null
+++ b/iemabs/hp5_bess~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp5_bess~;
+#X text 81 5 highpass 5.order with bessel characteristic;
+#X obj 22 147 hp1c~ \$1 0.6656 \$2;
+#X obj 22 107 hp2c~ \$1 0.6216 0.3245 \$2;
+#X obj 22 127 hp2c~ \$1 1.1402 0.4128 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 15 0;
+#X connect 17 1 15 1;
+#X connect 17 4 15 4;
diff --git a/iemabs/hp5_butt~.pd b/iemabs/hp5_butt~.pd
new file mode 100644
index 0000000..03f5800
--- /dev/null
+++ b/iemabs/hp5_butt~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 146 hp1c~ \$1 1 \$2;
+#X text 5 5 hp5_butt~;
+#X text 81 5 highpass 5.order with butterworth characteristic;
+#X obj 22 127 hp2c~ \$1 1.61803 1 \$2;
+#X obj 22 107 hp2c~ \$1 0.618034 1 \$2;
+#X connect 0 0 17 0;
+#X connect 1 0 17 1;
+#X connect 9 0 17 4;
+#X connect 13 0 2 0;
+#X connect 16 0 13 0;
+#X connect 16 1 13 1;
+#X connect 16 4 13 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
diff --git a/iemabs/hp5_cheb~.pd b/iemabs/hp5_cheb~.pd
new file mode 100644
index 0000000..56e64df
--- /dev/null
+++ b/iemabs/hp5_cheb~.pd
@@ -0,0 +1,30 @@
+#N canvas 350 22 421 301 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 172 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 195 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 205 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 4 6 hp5_cheb~;
+#X text 81 5 highpass 5.order with chebyshev characteristic;
+#X obj 22 148 hp1c~ \$1 3.5711 \$2;
+#X obj 22 127 hp2c~ \$1 1.128 2.4896 \$2;
+#X obj 22 107 hp2c~ \$1 0.1872 1.0814 \$2;
+#X connect 0 0 18 0;
+#X connect 1 0 18 1;
+#X connect 9 0 18 4;
+#X connect 16 0 2 0;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
diff --git a/iemabs/hp5_crit~.pd b/iemabs/hp5_crit~.pd
new file mode 100644
index 0000000..6438ee1
--- /dev/null
+++ b/iemabs/hp5_crit~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 167 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp5_crit~;
+#X text 81 5 highpass 5.order with critical damping;
+#X obj 22 150 hp1c~ \$1 0.3856 \$2;
+#X obj 22 107 hp2c~ \$1 0.7712 0.1487 \$2;
+#X obj 22 128 hp2c~ \$1 0.7712 0.1487 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 15 0;
+#X connect 17 1 15 1;
+#X connect 17 4 15 4;
diff --git a/iemabs/hp6_bess~.pd b/iemabs/hp6_bess~.pd
new file mode 100644
index 0000000..914b425
--- /dev/null
+++ b/iemabs/hp6_bess~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 406 302 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp6_bess~;
+#X text 81 5 highpass 6.order with bessel characteristic;
+#X obj 22 107 hp2c~ \$1 0.5131 0.2756 \$2;
+#X obj 22 127 hp2c~ \$1 0.9686 0.3505 \$2;
+#X obj 22 147 hp2c~ \$1 1.2217 0.3887 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/hp6_butt~.pd b/iemabs/hp6_butt~.pd
new file mode 100644
index 0000000..a49c247
--- /dev/null
+++ b/iemabs/hp6_butt~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 hp6_butt~;
+#X text 81 5 highpass 6.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 0.517638 1 \$2;
+#X obj 22 127 hp2c~ \$1 1.41421 1 \$2;
+#X obj 22 146 hp2c~ \$1 1.93185 1 \$2;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 9 0 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/hp6_cheb~.pd b/iemabs/hp6_cheb~.pd
new file mode 100644
index 0000000..c0081b9
--- /dev/null
+++ b/iemabs/hp6_cheb~.pd
@@ -0,0 +1,30 @@
+#N canvas 350 22 421 301 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 31 172 ~filtered signal_out~;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 195 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 205 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 4 6 hp6_cheb~;
+#X text 81 5 highpass 6.order with chebyshev characteristic;
+#X obj 22 107 hp2c~ \$1 0.129638 1.07658 \$2;
+#X obj 22 127 hp2c~ \$1 0.629161 1.91243 \$2;
+#X obj 22 148 hp2c~ \$1 3.84367 8.55286 \$2;
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/hp6_crit~.pd b/iemabs/hp6_crit~.pd
new file mode 100644
index 0000000..1dd3a15
--- /dev/null
+++ b/iemabs/hp6_crit~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp6_crit~;
+#X text 81 5 highpass 6.order with critical damping;
+#X obj 22 107 hp2c~ \$1 0.6999 0.1225 \$2;
+#X obj 22 127 hp2c~ \$1 0.6999 0.1225 \$2;
+#X obj 22 147 hp2c~ \$1 0.6999 0.1225 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/hp7_bess~.pd b/iemabs/hp7_bess~.pd
new file mode 100644
index 0000000..2029180
--- /dev/null
+++ b/iemabs/hp7_bess~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 hp7_bess~;
+#X text 81 5 highpass 7.order with bessel characteristic;
+#X obj 22 167 hp1c~ \$1 0.5937 \$2;
+#X obj 22 146 hp2c~ \$1 1.0944 0.3395 \$2;
+#X obj 21 127 hp2c~ \$1 0.8304 0.3011 \$2;
+#X obj 22 107 hp2c~ \$1 0.4332 0.2381 \$2;
+#X connect 0 0 18 0;
+#X connect 1 0 18 1;
+#X connect 9 0 18 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
diff --git a/iemabs/hp7_butt~.pd b/iemabs/hp7_butt~.pd
new file mode 100644
index 0000000..50124db
--- /dev/null
+++ b/iemabs/hp7_butt~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X obj 22 167 hp1c~ \$1 1 \$2;
+#X obj 22 146 hp2c~ \$1 1.80194 1 \$2;
+#X obj 22 127 hp2c~ \$1 1.24698 1 \$2;
+#X obj 22 107 hp2c~ \$1 0.445042 1 \$2;
+#X text 5 5 hp7_butt~;
+#X text 81 5 highpass 7.order with butterworth characteristic;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
+#X connect 14 1 13 1;
+#X connect 14 4 13 4;
+#X connect 15 0 14 0;
+#X connect 15 1 14 1;
+#X connect 15 4 14 4;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
diff --git a/iemabs/hp7_cheb~.pd b/iemabs/hp7_cheb~.pd
new file mode 100644
index 0000000..86ffbd3
--- /dev/null
+++ b/iemabs/hp7_cheb~.pd
@@ -0,0 +1,34 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 29 186 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 86 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 86 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp7_cheb~;
+#X text 81 5 highpass 7.order with chebyshev characteristic;
+#X obj 22 168 hp1c~ \$1 4.952 \$2;
+#X obj 22 148 hp2c~ \$1 1.6338 4.4899 \$2;
+#X obj 22 127 hp2c~ \$1 0.3987 1.5834 \$2;
+#X obj 22 107 hp2c~ \$1 0.0937 1.0423 \$2;
+#X connect 0 0 19 0;
+#X connect 1 0 19 1;
+#X connect 9 0 19 4;
+#X connect 16 0 2 0;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 4 18 4;
diff --git a/iemabs/hp7_crit~.pd b/iemabs/hp7_crit~.pd
new file mode 100644
index 0000000..ef8dfce
--- /dev/null
+++ b/iemabs/hp7_crit~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 hp7_crit~;
+#X text 81 5 highpass 7.order with critical damping;
+#X obj 22 167 hp1c~ \$1 0.3226 \$2;
+#X obj 22 107 hp2c~ \$1 0.6453 0.1041 \$2;
+#X obj 22 127 hp2c~ \$1 0.6453 0.1041 \$2;
+#X obj 22 147 hp2c~ \$1 0.6453 0.1041 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 15 0;
+#X connect 18 1 15 1;
+#X connect 18 4 15 4;
diff --git a/iemabs/hp8_bess~.pd b/iemabs/hp8_bess~.pd
new file mode 100644
index 0000000..8cb74aa
--- /dev/null
+++ b/iemabs/hp8_bess~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 406 302 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 hp8_bess~;
+#X text 81 5 highpass 8.order with bessel characteristic;
+#X obj 22 167 hp2c~ \$1 1.1112 0.3162 \$2;
+#X obj 22 146 hp2c~ \$1 0.9754 0.2979 \$2;
+#X obj 22 127 hp2c~ \$1 0.7202 0.2621 \$2;
+#X obj 22 107 hp2c~ \$1 0.3728 0.2087 \$2;
+#X connect 0 0 18 0;
+#X connect 1 0 18 1;
+#X connect 9 0 18 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
diff --git a/iemabs/hp8_butt~.pd b/iemabs/hp8_butt~.pd
new file mode 100644
index 0000000..2d35b79
--- /dev/null
+++ b/iemabs/hp8_butt~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 hp8_butt~;
+#X text 81 5 highpass 8.order with butterworth characteristic;
+#X obj 22 107 hp2c~ \$1 0.390181 1 \$2;
+#X obj 22 127 hp2c~ \$1 1.11114 1 \$2;
+#X obj 22 146 hp2c~ \$1 1.66294 1 \$2;
+#X obj 22 167 hp2c~ \$1 1.96157 1 \$2;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 9 0 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/hp8_cheb~.pd b/iemabs/hp8_cheb~.pd
new file mode 100644
index 0000000..0b6302f
--- /dev/null
+++ b/iemabs/hp8_cheb~.pd
@@ -0,0 +1,34 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 29 186 ~filtered signal_out~;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 86 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 86 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 5 5 hp8_cheb~;
+#X text 81 5 highpass 8.order with chebyshev characteristic;
+#X obj 22 107 hp2c~ \$1 0.071724 1.04322 \$2;
+#X obj 22 127 hp2c~ \$1 0.280641 1.43338 \$2;
+#X obj 22 148 hp2c~ \$1 0.891555 3.04263 \$2;
+#X obj 22 168 hp2c~ \$1 5.10194 14.7608 \$2;
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/hp8_crit~.pd b/iemabs/hp8_crit~.pd
new file mode 100644
index 0000000..a4218af
--- /dev/null
+++ b/iemabs/hp8_crit~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 hp8_crit~;
+#X text 81 5 highpass 8.order with critical damping;
+#X obj 22 107 hp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 127 hp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 147 hp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 167 hp2c~ \$1 0.6017 0.0905 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/hp9_bess~.pd b/iemabs/hp9_bess~.pd
new file mode 100644
index 0000000..67d00bb
--- /dev/null
+++ b/iemabs/hp9_bess~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 203 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp9_bess~;
+#X text 81 5 highpass 9.order with bessel characteristic;
+#X obj 22 189 hp1c~ \$1 0.5386 \$2;
+#X obj 22 168 hp2c~ \$1 1.0244 0.2834 \$2;
+#X obj 22 147 hp2c~ \$1 0.871 0.2636 \$2;
+#X obj 22 127 hp2c~ \$1 0.632 0.2311 \$2;
+#X obj 22 107 hp2c~ \$1 0.3257 0.1854 \$2;
+#X connect 0 0 19 0;
+#X connect 1 0 19 1;
+#X connect 9 0 19 4;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 1;
+#X connect 16 4 15 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 4 18 4;
diff --git a/iemabs/hp9_butt~.pd b/iemabs/hp9_butt~.pd
new file mode 100644
index 0000000..568c366
--- /dev/null
+++ b/iemabs/hp9_butt~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 185 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 189 hp1c~ \$1 1 \$2;
+#X text 5 5 hp9_butt~;
+#X text 81 5 highpass 9.order with butterworth characteristic;
+#X obj 22 168 hp2c~ \$1 1.87939 1 \$2;
+#X obj 22 147 hp2c~ \$1 1.53209 1 \$2;
+#X obj 22 127 hp2c~ \$1 1 1 \$2;
+#X obj 22 107 hp2c~ \$1 0.347296 1 \$2;
+#X connect 0 0 19 0;
+#X connect 1 0 19 1;
+#X connect 9 0 19 4;
+#X connect 13 0 2 0;
+#X connect 16 0 13 0;
+#X connect 16 1 13 1;
+#X connect 16 4 13 4;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 4 18 4;
diff --git a/iemabs/hp9_cheb~.pd b/iemabs/hp9_cheb~.pd
new file mode 100644
index 0000000..2760435
--- /dev/null
+++ b/iemabs/hp9_cheb~.pd
@@ -0,0 +1,38 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 97 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 97 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp9_cheb~;
+#X text 81 5 highpass 9.order with chebyshev characteristic;
+#X obj 22 189 hp1c~ \$1 6.3415 \$2;
+#X obj 22 168 hp2c~ \$1 2.1252 7.1711 \$2;
+#X obj 22 148 hp2c~ \$1 0.5624 2.3278 \$2;
+#X obj 22 127 hp2c~ \$1 0.2076 1.3166 \$2;
+#X obj 22 107 hp2c~ \$1 0.0562 1.0258 \$2;
+#X connect 0 0 20 0;
+#X connect 1 0 20 1;
+#X connect 9 0 20 4;
+#X connect 16 0 2 0;
+#X connect 17 0 16 0;
+#X connect 17 1 16 1;
+#X connect 17 4 16 4;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 18 4 17 4;
+#X connect 19 0 18 0;
+#X connect 19 1 18 1;
+#X connect 19 4 18 4;
+#X connect 20 0 19 0;
+#X connect 20 1 19 1;
+#X connect 20 4 19 4;
diff --git a/iemabs/hp9_crit~.pd b/iemabs/hp9_crit~.pd
new file mode 100644
index 0000000..cbf40fd
--- /dev/null
+++ b/iemabs/hp9_crit~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 416 312 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 203 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 hp9_crit~;
+#X text 81 5 highpass 9.order with critical damping;
+#X obj 22 189 hp1c~ \$1 0.2829 \$2;
+#X obj 22 107 hp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 127 hp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 147 hp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 167 hp2c~ \$1 0.5659 0.0801 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 15 0 2 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 15 0;
+#X connect 19 1 15 1;
+#X connect 19 4 15 4;
diff --git a/iemabs/hslider.pd b/iemabs/hslider.pd
new file mode 100644
index 0000000..24abfe1
--- /dev/null
+++ b/iemabs/hslider.pd
@@ -0,0 +1,303 @@
+#N canvas 239 208 390 413 10;
+#X obj 1 1 cnv 8 100 60 empty empty hslider=hsl 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 127 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 41 7 0 0;
+#X text 13 355 (c) musil@iem.kug.ac.at;
+#X text 55 368 IEM KUG;
+#X text 30 380 graz \, austria 2001;
+#X obj 38 149 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 41 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 41 107 hsl 101 15 25 75 0 1 foo1_snd foo1_rcv empty 8 -8 192
+10 -225280 -1109 -1 2000 1;
+#X text 174 11 gui-horicontal-slider:;
+#X floatatom 47 62 7 0 0;
+#X floatatom 116 150 9 0 0;
+#X obj 110 308 r goo2_snd;
+#X obj 145 248 s goo2_rcv;
+#X floatatom 105 40 7 0 0;
+#X floatatom 145 206 7 0 0;
+#X obj 60 170 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 60 147 pd once;
+#X obj 40 265 hsl 73 15 55 3520 1 1 goo2_snd goo2_rcv log.freq. 8 -8
+192 10 -42246 -260818 -90133 4800 1;
+#X obj 37 308 ftom;
+#X floatatom 37 330 9 0 0;
+#X floatatom 64 287 9 0 0;
+#X floatatom 110 329 9 0 0;
+#X text 175 176 click properties to;
+#X floatatom 37 203 8 0 0;
+#X obj 37 226 mtof;
+#X text 12 184 --------------------;
+#X text 163 187 modify geometry \, colors \, etc.;
+#X obj 105 82 s foo1_rcv;
+#X obj 116 130 r foo1_snd;
+#X msg 105 61 set \$1;
+#X msg 145 227 set \$1;
+#X text 197 120 (0.01 pixels);
+#X text 183 99 shift-click & drag;
+#X text 189 109 for fine-tuning;
+#X text 148 270 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 147 281 for moving selected gui-objects;
+#N canvas 207 113 716 530 edit 0;
+#X obj 32 220 f;
+#X msg 10 199 bang;
+#X floatatom 48 198 3 63 88;
+#X floatatom 83 220 3 0 37;
+#X obj 32 243 pack 0 0;
+#X text 110 220 y-label;
+#X text 76 198 x-label;
+#X obj 279 246 f;
+#X msg 257 225 bang;
+#X floatatom 295 224 3 -10 10;
+#X floatatom 330 246 3 -10 10;
+#X obj 279 269 pack 0 0;
+#X obj 292 358 f;
+#X msg 270 337 bang;
+#X floatatom 308 336 3 20 60;
+#X floatatom 343 358 3 150 200;
+#X obj 292 381 pack 0 0;
+#X text 323 224 x-delta;
+#X text 357 246 y-delta;
+#X text 336 336 x-position;
+#X text 370 358 y-position;
+#X obj 52 335 f;
+#X msg 30 314 bang;
+#X floatatom 68 313 3 0 2;
+#X floatatom 103 335 3 4 36;
+#X obj 52 358 pack 0 0;
+#X text 96 313 font;
+#X text 132 335 height;
+#X floatatom 476 188 1 0 1;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X msg 47 154 \; goo2_rcv color \$1 \$2 \$3;
+#X msg 32 268 \; goo2_rcv label_pos \$1 \$2;
+#X msg 52 383 \; goo2_rcv label_font \$1 \$2;
+#X msg 34 427 \; goo2_rcv label blabla;
+#X msg 292 406 \; goo2_rcv pos \$1 \$2;
+#X msg 279 294 \; goo2_rcv delta \$1 \$2;
+#X msg 475 21 \; goo2_rcv send goo2a_snd;
+#X msg 475 59 \; goo2_rcv send goo2_snd;
+#X msg 476 105 \; goo2_rcv receive goo2a_rcv;
+#X msg 476 143 \; goo2a_rcv receive goo2_rcv;
+#X msg 502 420 \; goo2_rcv init 0;
+#X msg 503 471 \; goo2_rcv init 1;
+#X text 520 188 steady;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 3 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X text 530 269 left-range-bound;
+#X text 586 291 right-range-bound;
+#X msg 486 339 \; goo2_rcv range \$1 \$2;
+#X msg 363 465 \; goo2_rcv log;
+#X msg 269 466 \; goo2_rcv lin;
+#X text 269 448 linear / logarithmical;
+#X obj 275 133 f;
+#X msg 250 112 bang;
+#X floatatom 291 111 3 15 73;
+#X floatatom 326 133 3 8 50;
+#X obj 275 156 pack 0 0;
+#X text 319 111 width;
+#X text 357 134 height;
+#X msg 275 181 \; goo2_rcv size \$1 \$2;
+#X msg 34 463 \; goo2_rcv label log.freq.;
+#X msg 476 212 \; goo2_rcv steady \$1;
+#X obj 47 100 pack 0 0 0;
+#X obj 47 72 f;
+#X msg 24 24 bang;
+#X floatatom 63 22 3 0 29;
+#X floatatom 79 42 3 0 29;
+#X floatatom 112 58 3 0 29;
+#X text 91 22 background;
+#X text 106 42 front-color;
+#X text 140 59 label-color;
+#X msg 277 22 back;
+#X msg 277 42 front;
+#X msg 277 62 label;
+#X msg 239 22 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 277 82 pd RGB_____________;
+#X floatatom 319 52 3 0 255;
+#X floatatom 362 52 3 0 255;
+#X floatatom 405 53 3 0 255;
+#X text 34 -1 preset-colors;
+#X text 290 1 RGB-colors;
+#X text 319 34 red;
+#X text 355 33 green;
+#X text 403 33 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 32 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 36 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 35 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 33 0;
+#X connect 28 0 64 0;
+#X connect 44 0 48 0;
+#X connect 45 0 44 0;
+#X connect 46 0 44 1;
+#X connect 47 0 48 1;
+#X connect 48 0 51 0;
+#X connect 55 0 59 0;
+#X connect 56 0 55 0;
+#X connect 57 0 55 1;
+#X connect 58 0 59 1;
+#X connect 59 0 62 0;
+#X connect 65 0 31 0;
+#X connect 66 0 65 0;
+#X connect 67 0 66 0;
+#X connect 68 0 66 1;
+#X connect 69 0 65 1;
+#X connect 70 0 65 2;
+#X connect 74 0 78 0;
+#X connect 75 0 78 0;
+#X connect 76 0 78 0;
+#X connect 77 0 78 0;
+#X connect 78 0 65 0;
+#X connect 78 1 65 1;
+#X connect 78 2 65 2;
+#X connect 79 0 78 1;
+#X connect 80 0 78 2;
+#X connect 81 0 78 3;
+#X restore 314 245 pd edit;
+#X text 187 379 updated for Pd version 0.34;
+#X obj 167 34 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 221 61 hsl 128 15 0 127 0 0 ddd ddd empty 20 8 192 8 -262144
+-1 -1 200 1;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 9 0 18 0;
+#X connect 11 0 2 0;
+#X connect 13 0 23 0;
+#X connect 15 0 31 0;
+#X connect 16 0 32 0;
+#X connect 18 0 17 0;
+#X connect 19 0 22 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 25 0 26 0;
+#X connect 26 0 19 0;
+#X connect 30 0 12 0;
+#X connect 31 0 29 0;
+#X connect 32 0 14 0;
diff --git a/iemabs/iem_anything.pd b/iemabs/iem_anything.pd
new file mode 100644
index 0000000..2378f7f
--- /dev/null
+++ b/iemabs/iem_anything.pd
@@ -0,0 +1,20 @@
+#N canvas 229 154 607 439 10;
+#X obj 37 84 inlet;
+#X obj 351 101 inlet;
+#X obj 37 330 outlet;
+#X text 14 358 (c) musil@iem.kug.ac.at;
+#X text 56 371 IEM KUG;
+#X text 31 383 graz \, austria 2002;
+#X obj 37 278 iem_anything_kernel;
+#X text 347 77 cold inlet = latch-inlet;
+#X text 39 62 hot inlet = bangout;
+#X text 248 17 a messages storage;
+#X text 237 278 any arguments are possible;
+#X obj 351 126 pre_inlet 1 1;
+#X obj 37 112 pre_inlet 1 0;
+#X text 17 15 any \, iem_anything;
+#X connect 0 0 12 0;
+#X connect 1 0 11 0;
+#X connect 6 0 2 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
diff --git a/iemabs/iem_append.pd b/iemabs/iem_append.pd
new file mode 100644
index 0000000..cfdae8b
--- /dev/null
+++ b/iemabs/iem_append.pd
@@ -0,0 +1,24 @@
+#N canvas 365 230 607 439 10;
+#X obj 37 121 inlet;
+#X obj 301 121 inlet;
+#X obj 37 305 outlet;
+#X text 14 358 (c) musil@iem.kug.ac.at;
+#X text 56 371 IEM KUG;
+#X text 35 61 hot inlet;
+#X text 297 60 cold inlet;
+#X obj 37 160 pre_inlet 1 0;
+#X text 258 271 initials-arguments:;
+#X text 119 14 merge the head-message in front of the tail-message
+;
+#X text 31 383 graz \, austria 2003;
+#X text 17 15 iem_append;
+#X text 35 76 head of output-message;
+#X text 296 74 tail of output-message;
+#X text 253 282 tail of output-message;
+#X obj 37 278 iem_append_kernel;
+#X obj 301 158 pre_inlet 1 1;
+#X connect 0 0 7 0;
+#X connect 1 0 16 0;
+#X connect 7 0 15 0;
+#X connect 15 0 2 0;
+#X connect 16 0 15 0;
diff --git a/iemabs/iem_prepend.pd b/iemabs/iem_prepend.pd
new file mode 100644
index 0000000..0da5880
--- /dev/null
+++ b/iemabs/iem_prepend.pd
@@ -0,0 +1,24 @@
+#N canvas 233 225 704 461 10;
+#X obj 53 113 inlet;
+#X obj 300 110 inlet;
+#X obj 53 349 outlet;
+#X text 14 399 (c) musil@iem.kug.ac.at;
+#X text 56 412 IEM KUG;
+#X text 35 61 hot inlet;
+#X text 297 60 cold inlet;
+#X text 35 76 tail of output-message;
+#X text 296 73 head of output-message;
+#X text 204 328 head of output-message;
+#X text 209 317 initials-arguments:;
+#X text 119 14 merge the head-message in front of the tail-message
+;
+#X text 31 424 graz \, austria 2003;
+#X obj 53 322 iem_prepend_kernel;
+#X obj 53 147 pre_inlet 1 0;
+#X obj 300 143 pre_inlet 1 1;
+#X text 17 15 iem_prepend;
+#X connect 0 0 14 0;
+#X connect 1 0 15 0;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
diff --git a/iemabs/iem_r.pd b/iemabs/iem_r.pd
new file mode 100644
index 0000000..cc6bd85
--- /dev/null
+++ b/iemabs/iem_r.pd
@@ -0,0 +1,22 @@
+#N canvas 550 264 460 310 10;
+#X obj 71 203 iem_receive_kernel;
+#X obj 128 74 inlet;
+#X obj 71 138 prepend_ascii 1;
+#X obj 170 145 prepend_ascii 2;
+#X obj 71 231 outlet;
+#X obj 128 98 route set clear;
+#X obj 170 120 bang;
+#X text 110 15 receive-object with changeable receive-label;
+#X text 164 175 1.arg: <symbol> or <float> receive-label;
+#X obj 39 101 symbol \$1;
+#X obj 39 81 loadbang;
+#X text 15 14 iem_r;
+#X connect 0 0 4 0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 5 0 2 0;
+#X connect 5 1 6 0;
+#X connect 6 0 3 0;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
diff --git a/iemabs/iem_receive.pd b/iemabs/iem_receive.pd
new file mode 100644
index 0000000..1f227e6
--- /dev/null
+++ b/iemabs/iem_receive.pd
@@ -0,0 +1,22 @@
+#N canvas 550 264 458 308 10;
+#X obj 71 203 iem_receive_kernel;
+#X obj 128 74 inlet;
+#X obj 71 138 prepend_ascii 1;
+#X obj 170 145 prepend_ascii 2;
+#X obj 71 231 outlet;
+#X obj 128 98 route set clear;
+#X obj 170 120 bang;
+#X text 110 15 receive-object with changeable receive-label;
+#X text 164 175 1.arg: <symbol> or <float> receive-label;
+#X text 15 14 iem_receive;
+#X obj 39 101 symbol \$1;
+#X obj 39 81 loadbang;
+#X connect 0 0 4 0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 5 0 2 0;
+#X connect 5 1 6 0;
+#X connect 6 0 3 0;
+#X connect 10 0 2 0;
+#X connect 11 0 10 0;
diff --git a/iemabs/iem_s.pd b/iemabs/iem_s.pd
new file mode 100644
index 0000000..37274f9
--- /dev/null
+++ b/iemabs/iem_s.pd
@@ -0,0 +1,22 @@
+#N canvas 92 248 458 308 10;
+#X obj 172 77 inlet;
+#X obj 110 148 prepend_ascii 1;
+#X obj 214 148 prepend_ascii 2;
+#X obj 172 101 route set clear;
+#X obj 214 123 bang;
+#X obj 71 78 inlet;
+#X obj 71 203 iem_send_kernel;
+#X text 217 175 1.arg: <symbol> or <float> send-label;
+#X text 110 15 send-object with changeable send-label;
+#X obj 110 102 symbol \$1;
+#X obj 110 82 loadbang;
+#X text 15 14 iem_s;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 3 0 1 0;
+#X connect 3 1 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 9 0 1 0;
+#X connect 10 0 9 0;
diff --git a/iemabs/iem_send.pd b/iemabs/iem_send.pd
new file mode 100644
index 0000000..4f2c62a
--- /dev/null
+++ b/iemabs/iem_send.pd
@@ -0,0 +1,22 @@
+#N canvas 92 248 458 308 10;
+#X obj 172 77 inlet;
+#X obj 110 148 prepend_ascii 1;
+#X obj 214 148 prepend_ascii 2;
+#X obj 172 101 route set clear;
+#X obj 214 123 bang;
+#X obj 71 78 inlet;
+#X obj 71 203 iem_send_kernel;
+#X text 217 175 1.arg: <symbol> or <float> send-label;
+#X text 15 14 iem_send;
+#X text 110 15 send-object with changeable send-label;
+#X obj 110 102 symbol \$1;
+#X obj 110 82 loadbang;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 3 0 1 0;
+#X connect 3 1 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 10 0 1 0;
+#X connect 11 0 10 0;
diff --git a/iemabs/init_popup.pd b/iemabs/init_popup.pd
new file mode 100644
index 0000000..8f5a570
--- /dev/null
+++ b/iemabs/init_popup.pd
@@ -0,0 +1,38 @@
+#N canvas 187 157 554 392 10;
+#X obj 187 219 textfile;
+#X obj 204 31 loadbang;
+#X obj 204 57 t b b b b;
+#X msg 203 162 rewind;
+#X obj 80 121 for++ 0 100000 20;
+#X obj 238 250 bang;
+#X msg 88 82 stop;
+#X obj 102 293 pack symbol float;
+#X obj 80 146 t b f;
+#X obj 102 317 pp set_pop_name;
+#X obj 102 350 outlet;
+#X obj 174 34 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X text 14 6 init_popup;
+#X obj 170 349 s \$2;
+#X text 330 223 1.arg: <sym> item-file-name;
+#X text 329 236 2.arg: <sym> send-name;
+#X obj 288 99 any \$1 cr;
+#X obj 288 124 pp read;
+#X connect 0 0 7 0;
+#X connect 0 1 5 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 1 3 0;
+#X connect 2 3 16 0;
+#X connect 3 0 0 0;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 9 0;
+#X connect 8 0 0 0;
+#X connect 8 1 7 1;
+#X connect 9 0 10 0;
+#X connect 9 0 13 0;
+#X connect 11 0 2 0;
+#X connect 16 0 17 0;
+#X connect 17 0 0 0;
diff --git a/iemabs/int_fract~.pd b/iemabs/int_fract~.pd
new file mode 100644
index 0000000..edf0ec2
--- /dev/null
+++ b/iemabs/int_fract~.pd
@@ -0,0 +1,35 @@
+#N canvas 323 149 549 327 10;
+#X obj 21 68 inlet~;
+#X obj 22 238 outlet~;
+#X text 14 277 (c) musil@iem.kug.ac.at;
+#X text 56 290 IEM KUG;
+#X text 61 68 ~signal_in~;
+#X text 31 302 graz \, austria 2003;
+#X obj 152 115 float24 12 582 912;
+#X obj 22 152 +~ 1.25829e+007;
+#X obj 22 178 -~ 1.25829e+007;
+#X obj 152 95 loadbang;
+#X text 278 112 1.5 * 2 ^ 23;
+#X text 11 9 int_fract~;
+#X text 143 34 and the fractal part of the float-number;
+#X text 120 12 signal-float-splitting to the;
+#X text 130 23 truncated signal-integer-number;
+#X obj 196 237 outlet~;
+#X text 69 239 ~signal_int~;
+#X text 243 238 ~signal_fract~;
+#X obj 22 125 -~ 0.5;
+#X obj 196 213 -~;
+#X text 235 253 fractal-part: 0 .. 1;
+#X text 68 252 integer-part;
+#X text 260 150 there is a little inaccuracy;
+#X text 265 162 each odd number has a fractal-part of 1;
+#X connect 0 0 18 0;
+#X connect 0 0 19 0;
+#X connect 6 0 7 1;
+#X connect 6 0 8 1;
+#X connect 7 0 8 0;
+#X connect 8 0 1 0;
+#X connect 8 0 19 1;
+#X connect 9 0 6 0;
+#X connect 18 0 7 0;
+#X connect 19 0 15 0;
diff --git a/iemabs/lp1.wav b/iemabs/lp1.wav
new file mode 100644
index 0000000..5f08a13
--- /dev/null
+++ b/iemabs/lp1.wav
Binary files differ
diff --git a/iemabs/lp10_bess~.pd b/iemabs/lp10_bess~.pd
new file mode 100644
index 0000000..60e2548
--- /dev/null
+++ b/iemabs/lp10_bess~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp10_bess~;
+#X text 81 5 lowpass 10.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.2883 0.1665 \$2;
+#X obj 22 127 lp2c~ \$1 0.5604 0.2059 \$2;
+#X obj 22 146 lp2c~ \$1 0.7815 0.2351 \$2;
+#X obj 22 167 lp2c~ \$1 0.9393 0.2549 \$2;
+#X obj 22 188 lp2c~ \$1 1.0215 0.265 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/lp10_butt~.pd b/iemabs/lp10_butt~.pd
new file mode 100644
index 0000000..d9d572e
--- /dev/null
+++ b/iemabs/lp10_butt~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X obj 22 107 lp2c~ \$1 0.312869 1 \$2;
+#X obj 22 127 lp2c~ \$1 0.907981 1 \$2;
+#X obj 22 146 lp2c~ \$1 1.41421 1 \$2;
+#X obj 22 167 lp2c~ \$1 1.78201 1 \$2;
+#X obj 22 188 lp2c~ \$1 1.97538 1 \$2;
+#X text 5 5 lp10_butt~;
+#X text 81 5 lowpass 10.order with butterworth characteristic;
+#X text 86 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 86 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 34 281 graz \, austria 2003;
+#X connect 0 0 10 0;
+#X connect 1 0 10 1;
+#X connect 9 0 10 4;
+#X connect 10 0 11 0;
+#X connect 10 1 11 1;
+#X connect 10 4 11 4;
+#X connect 11 0 12 0;
+#X connect 11 1 12 1;
+#X connect 11 4 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/lp10_cheb~.pd b/iemabs/lp10_cheb~.pd
new file mode 100644
index 0000000..f3878c6
--- /dev/null
+++ b/iemabs/lp10_cheb~.pd
@@ -0,0 +1,38 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 30 208 ~filtered signal_out~;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 5 5 lp10_cheb~;
+#X text 81 5 lowpass 10.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.045535 1.0277 \$2;
+#X obj 22 127 lp2c~ \$1 0.161621 1.2569 \$2;
+#X obj 22 148 lp2c~ \$1 0.393858 1.96655 \$2;
+#X obj 22 168 lp2c~ \$1 1.13986 4.51667 \$2;
+#X obj 22 189 lp2c~ \$1 6.36341 22.7468 \$2;
+#X text 97 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 97 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp10_crit~.pd b/iemabs/lp10_crit~.pd
new file mode 100644
index 0000000..ad1fd7f
--- /dev/null
+++ b/iemabs/lp10_crit~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp10_crit~;
+#X text 81 5 lowpass 10.order with critical damping;
+#X obj 22 107 lp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 127 lp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 147 lp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 167 lp2c~ \$1 0.5358 0.0718 \$2;
+#X obj 22 187 lp2c~ \$1 0.5358 0.0718 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/lp1c~.pd b/iemabs/lp1c~.pd
new file mode 100644
index 0000000..abee620
--- /dev/null
+++ b/iemabs/lp1c~.pd
@@ -0,0 +1,35 @@
+#N canvas 406 261 393 353 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 194 outlet~;
+#X text 11 297 (c) musil@iem.kug.ac.at;
+#X text 53 310 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 134 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 88 93 inlet;
+#X text 28 322 graz \, austria 2001;
+#X obj 155 134 inlet;
+#X text 124 93 <float> frequency-shift [-];
+#X text 12 8 lp1c~;
+#X text 60 8 lowpass 1.order for filter-cascades;
+#X obj 22 157 filter~ lp1c \$1 \$2 1 \$3;
+#X obj 55 214 outlet;
+#X obj 86 232 outlet;
+#X obj 115 251 outlet;
+#X obj 155 271 outlet;
+#X text 127 231 dummy;
+#X text 155 250 dummy;
+#X obj 123 113 inlet;
+#X text 158 113 dummy;
+#X text 120 192 1.arg: <float> cutoff_frequency [Hz];
+#X text 120 202 2.arg: <float> frequency-shift [-];
+#X text 120 212 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 1 0 16 0;
+#X connect 9 0 15 2;
+#X connect 11 0 15 4;
+#X connect 11 0 19 0;
+#X connect 15 0 2 0;
diff --git a/iemabs/lp1~.pd b/iemabs/lp1~.pd
new file mode 100644
index 0000000..e4cd8d3
--- /dev/null
+++ b/iemabs/lp1~.pd
@@ -0,0 +1,21 @@
+#N canvas 327 244 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 52 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 89 64 <float> cutoff_frequency [Hz];
+#X text 12 7 lp1~;
+#X obj 22 123 filter~ lp1 \$1 1 0 \$2;
+#X obj 143 85 inlet;
+#X text 181 84 <float> interpolation_time [ms];
+#X text 60 8 lowpass 1.order;
+#X text 32 153 ~filtered signal_out~;
+#X text 32 254 graz \, austria 2001;
+#X text 92 192 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 92 182 1.arg: <float> cutoff_frequency [Hz];
+#X connect 0 0 8 0;
+#X connect 1 0 8 1;
+#X connect 8 0 2 0;
+#X connect 9 0 8 4;
diff --git a/iemabs/lp2.wav b/iemabs/lp2.wav
new file mode 100644
index 0000000..1e3fe72
--- /dev/null
+++ b/iemabs/lp2.wav
Binary files differ
diff --git a/iemabs/lp2_bess~.pd b/iemabs/lp2_bess~.pd
new file mode 100644
index 0000000..08815f5
--- /dev/null
+++ b/iemabs/lp2_bess~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 56 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 67 <float> cutoff_frequency [Hz];
+#X text 195 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 161 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp2_bess~;
+#X text 81 5 lowpass 2.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 1.3617 0.618 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/lp2_butt~.pd b/iemabs/lp2_butt~.pd
new file mode 100644
index 0000000..996bb2b
--- /dev/null
+++ b/iemabs/lp2_butt~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 52 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 89 67 <float> cutoff_frequency [Hz];
+#X text 177 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 143 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp2_butt~;
+#X text 81 5 lowpass 2.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 1.41421 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/lp2_cheb~.pd b/iemabs/lp2_cheb~.pd
new file mode 100644
index 0000000..ab61306
--- /dev/null
+++ b/iemabs/lp2_cheb~.pd
@@ -0,0 +1,22 @@
+#N canvas 350 22 425 305 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 106 lp2c~ \$1 1.3022 1.5515 \$2;
+#X text 5 5 lp2_cheb~;
+#X text 81 5 lowpass 2.order with chebyshev characteristic;
+#X connect 0 0 14 0;
+#X connect 1 0 14 1;
+#X connect 9 0 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/lp2_crit~.pd b/iemabs/lp2_crit~.pd
new file mode 100644
index 0000000..24ccbea
--- /dev/null
+++ b/iemabs/lp2_crit~.pd
@@ -0,0 +1,21 @@
+#N canvas 350 22 416 312 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 107 lp2c~ \$1 1.2872 0.4142 \$2;
+#X text 5 5 lp2_crit~;
+#X text 81 5 lowpass 2.order with critical damping;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/lp2c~.pd b/iemabs/lp2c~.pd
new file mode 100644
index 0000000..213d159
--- /dev/null
+++ b/iemabs/lp2c~.pd
@@ -0,0 +1,37 @@
+#N canvas 400 218 405 377 10;
+#X obj 22 42 inlet~;
+#X obj 56 63 inlet;
+#X obj 22 194 outlet~;
+#X text 15 326 (c) musil@iem.kug.ac.at;
+#X text 57 339 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 64 <float> cutoff_frequency [Hz];
+#X obj 91 87 inlet;
+#X text 195 136 <float> interpolation_time [ms];
+#X text 32 176 ~filtered signal_out~;
+#X obj 126 111 inlet;
+#X text 32 351 graz \, austria 2001;
+#X text 12 8 lp2c~;
+#X text 60 8 lowpass 2.order for filter-cascades;
+#X obj 161 136 inlet;
+#X text 127 87 <float> damping [-];
+#X text 162 111 <float> frequency-shift [-];
+#X obj 22 157 filter~ lp2c \$1 \$2 \$3 \$4;
+#X obj 56 211 outlet;
+#X obj 88 236 outlet;
+#X obj 119 255 outlet;
+#X obj 161 274 outlet;
+#X text 129 235 dummy;
+#X text 159 254 dummy;
+#X text 128 190 1.arg: <float> cutoff_frequency [Hz];
+#X text 128 199 2.arg: <float> damping [-];
+#X text 128 208 3.arg: <float> frequency-shift [-];
+#X text 128 218 4.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 17 0;
+#X connect 1 0 17 1;
+#X connect 1 0 18 0;
+#X connect 7 0 17 2;
+#X connect 10 0 17 3;
+#X connect 14 0 17 4;
+#X connect 14 0 21 0;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp2~.pd b/iemabs/lp2~.pd
new file mode 100644
index 0000000..3096bb0
--- /dev/null
+++ b/iemabs/lp2~.pd
@@ -0,0 +1,25 @@
+#N canvas 406 261 375 281 10;
+#X obj 22 42 inlet~;
+#X obj 53 63 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 64 <float> cutoff_frequency [Hz];
+#X obj 85 88 inlet;
+#X text 184 113 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X text 12 8 lp2~;
+#X text 60 8 lowpass 2.order;
+#X obj 22 134 filter~ lp2 \$1 \$2 1 \$3;
+#X obj 149 113 inlet;
+#X text 121 88 <float> Q [-];
+#X text 32 254 graz \, austria 2001;
+#X text 88 177 1.arg: <float> cutoff_frequency [Hz];
+#X text 88 186 2.arg: <float> Q [-];
+#X text 88 196 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 7 0 12 2;
+#X connect 12 0 2 0;
+#X connect 13 0 12 4;
diff --git a/iemabs/lp3.wav b/iemabs/lp3.wav
new file mode 100644
index 0000000..b2b07bc
--- /dev/null
+++ b/iemabs/lp3.wav
Binary files differ
diff --git a/iemabs/lp3_bess~.pd b/iemabs/lp3_bess~.pd
new file mode 100644
index 0000000..d011ee1
--- /dev/null
+++ b/iemabs/lp3_bess~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp3_bess~;
+#X text 81 5 lowpass 3.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.9996 0.4772 \$2;
+#X obj 22 129 lp1c~ \$1 0.756 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp3_butt~.pd b/iemabs/lp3_butt~.pd
new file mode 100644
index 0000000..c34930c
--- /dev/null
+++ b/iemabs/lp3_butt~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 43 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 80 66 <float> cutoff_frequency [Hz];
+#X text 141 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 107 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp3_butt~;
+#X text 81 5 lowpass 3.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 1 1 \$2;
+#X obj 22 129 lp1c~ \$1 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp3_cheb~.pd b/iemabs/lp3_cheb~.pd
new file mode 100644
index 0000000..e5fb9c2
--- /dev/null
+++ b/iemabs/lp3_cheb~.pd
@@ -0,0 +1,26 @@
+#N canvas 350 22 425 305 10;
+#X obj 22 42 inlet~;
+#X obj 57 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 94 67 <float> cutoff_frequency [Hz];
+#X text 200 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 166 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp3_cheb~;
+#X text 81 5 lowpass 3.order with chebyshev characteristic;
+#X obj 21 106 lp2c~ \$1 0.5442 1.2057 \$2;
+#X obj 22 127 lp1c~ \$1 2.2156 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp3_crit~.pd b/iemabs/lp3_crit~.pd
new file mode 100644
index 0000000..9f7ba70
--- /dev/null
+++ b/iemabs/lp3_crit~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp3_crit~;
+#X text 81 5 lowpass 3.order with critical damping;
+#X obj 22 107 lp2c~ \$1 1.0197 0.2599 \$2;
+#X obj 22 129 lp1c~ \$1 0.5098 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp4_bess~.pd b/iemabs/lp4_bess~.pd
new file mode 100644
index 0000000..9128ba2
--- /dev/null
+++ b/iemabs/lp4_bess~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 56 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 93 67 <float> cutoff_frequency [Hz];
+#X text 195 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 161 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp4_bess~;
+#X text 81 5 lowpass 4.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.7743 0.389 \$2;
+#X obj 22 127 lp2c~ \$1 1.3397 0.4889 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp4_butt~.pd b/iemabs/lp4_butt~.pd
new file mode 100644
index 0000000..6f9d7a8
--- /dev/null
+++ b/iemabs/lp4_butt~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 lp4_butt~;
+#X text 81 5 lowpass 4.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 0.765367 1 \$2;
+#X obj 22 127 lp2c~ \$1 1.84776 1 \$2;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 9 0 12 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 2 0;
diff --git a/iemabs/lp4_cheb~.pd b/iemabs/lp4_cheb~.pd
new file mode 100644
index 0000000..d2a5c59
--- /dev/null
+++ b/iemabs/lp4_cheb~.pd
@@ -0,0 +1,26 @@
+#N canvas 350 22 421 301 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X text 35 281 graz \, austria 2001;
+#X obj 185 86 inlet;
+#X text 5 5 lp4_cheb~;
+#X text 81 5 lowpass 4.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.303886 1.16973 \$2;
+#X obj 22 127 lp2c~ \$1 2.59037 4.13012 \$2;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 10 0 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/lp4_crit~.pd b/iemabs/lp4_crit~.pd
new file mode 100644
index 0000000..e6f9c57
--- /dev/null
+++ b/iemabs/lp4_crit~.pd
@@ -0,0 +1,25 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 55 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 92 67 <float> cutoff_frequency [Hz];
+#X text 189 86 <float> interpolation_time [ms];
+#X text 30 148 ~filtered signal_out~;
+#X obj 155 86 inlet;
+#X text 79 180 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 190 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 6 4 lp4_crit~;
+#X text 82 4 lowpass 4.order with critical damping;
+#X obj 22 107 lp2c~ \$1 0.87 0.1892 \$2;
+#X obj 22 127 lp2c~ \$1 0.87 0.1892 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp5_bess~.pd b/iemabs/lp5_bess~.pd
new file mode 100644
index 0000000..4303873
--- /dev/null
+++ b/iemabs/lp5_bess~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp5_bess~;
+#X text 81 5 lowpass 5.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.6216 0.3245 \$2;
+#X obj 22 127 lp2c~ \$1 1.1402 0.4128 \$2;
+#X obj 22 147 lp1c~ \$1 0.6656 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp5_butt~.pd b/iemabs/lp5_butt~.pd
new file mode 100644
index 0000000..a241a6a
--- /dev/null
+++ b/iemabs/lp5_butt~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp5_butt~;
+#X text 81 5 lowpass 5.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 0.618034 1 \$2;
+#X obj 22 127 lp2c~ \$1 1.61803 1 \$2;
+#X obj 22 146 lp1c~ \$1 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp5_cheb~.pd b/iemabs/lp5_cheb~.pd
new file mode 100644
index 0000000..701373d
--- /dev/null
+++ b/iemabs/lp5_cheb~.pd
@@ -0,0 +1,30 @@
+#N canvas 350 22 423 303 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 172 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 79 195 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 205 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 4 6 lp5_cheb~;
+#X text 81 5 lowpass 5.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.1872 1.0814 \$2;
+#X obj 22 127 lp2c~ \$1 1.128 2.4896 \$2;
+#X obj 22 148 lp1c~ \$1 3.5711 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/lp5_crit~.pd b/iemabs/lp5_crit~.pd
new file mode 100644
index 0000000..c16341c
--- /dev/null
+++ b/iemabs/lp5_crit~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 167 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp5_crit~;
+#X text 81 5 lowpass 5.order with critical damping;
+#X obj 22 107 lp2c~ \$1 0.7712 0.1487 \$2;
+#X obj 22 128 lp2c~ \$1 0.7712 0.1487 \$2;
+#X obj 22 150 lp1c~ \$1 0.3856 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp6_bess~.pd b/iemabs/lp6_bess~.pd
new file mode 100644
index 0000000..8bdc169
--- /dev/null
+++ b/iemabs/lp6_bess~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp6_bess~;
+#X text 81 5 lowpass 6.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.5131 0.2756 \$2;
+#X obj 22 127 lp2c~ \$1 0.9686 0.3505 \$2;
+#X obj 22 147 lp2c~ \$1 1.2217 0.3887 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp6_butt~.pd b/iemabs/lp6_butt~.pd
new file mode 100644
index 0000000..2909901
--- /dev/null
+++ b/iemabs/lp6_butt~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 lp6_butt~;
+#X text 81 5 lowpass 6.order with butterworth characteristic;
+#X obj 22 127 lp2c~ \$1 1.41421 1 \$2;
+#X obj 22 107 lp2c~ \$1 0.517638 1 \$2;
+#X obj 22 146 lp2c~ \$1 1.93185 1 \$2;
+#X text 77 190 1.arg: <float> cutoff_frequency [Hz];
+#X text 77 200 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 12 0 14 0;
+#X connect 12 1 14 1;
+#X connect 12 4 14 4;
+#X connect 13 0 12 0;
+#X connect 13 1 12 1;
+#X connect 13 4 12 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/lp6_cheb~.pd b/iemabs/lp6_cheb~.pd
new file mode 100644
index 0000000..8550d8c
--- /dev/null
+++ b/iemabs/lp6_cheb~.pd
@@ -0,0 +1,30 @@
+#N canvas 350 22 421 301 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 31 172 ~filtered signal_out~;
+#X text 35 281 graz \, austria 2001;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 5 5 lp6_cheb~;
+#X text 81 5 lowpass 6.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.129638 1.07658 \$2;
+#X obj 22 127 lp2c~ \$1 0.629161 1.91243 \$2;
+#X obj 22 148 lp2c~ \$1 3.84367 8.55286 \$2;
+#X text 79 195 1.arg: <float> cutoff_frequency [Hz];
+#X text 79 205 2.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 14 0;
+#X connect 1 0 14 1;
+#X connect 10 0 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp6_crit~.pd b/iemabs/lp6_crit~.pd
new file mode 100644
index 0000000..8e1f473
--- /dev/null
+++ b/iemabs/lp6_crit~.pd
@@ -0,0 +1,29 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 31 164 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 81 189 1.arg: <float> cutoff_frequency [Hz];
+#X text 81 199 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 107 lp2c~ \$1 0.6999 0.1225 \$2;
+#X obj 22 127 lp2c~ \$1 0.6999 0.1225 \$2;
+#X obj 22 147 lp2c~ \$1 0.6999 0.1225 \$2;
+#X text 5 5 lp6_crit~;
+#X text 81 5 lowpass 6.order with critical damping;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 2 0;
diff --git a/iemabs/lp7_bess~.pd b/iemabs/lp7_bess~.pd
new file mode 100644
index 0000000..7c0547a
--- /dev/null
+++ b/iemabs/lp7_bess~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 412 308 10;
+#X obj 22 42 inlet~;
+#X obj 58 63 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 64 <float> cutoff_frequency [Hz];
+#X text 201 83 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 83 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 lp7_bess~;
+#X text 81 5 lowpass 7.order with bessel characteristic;
+#X obj 22 106 lp2c~ \$1 0.4332 0.2381 \$2;
+#X obj 22 126 lp2c~ \$1 0.8304 0.3011 \$2;
+#X obj 22 146 lp2c~ \$1 1.0944 0.3395 \$2;
+#X obj 22 167 lp1c~ \$1 0.5937 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/lp7_butt~.pd b/iemabs/lp7_butt~.pd
new file mode 100644
index 0000000..8eab1d4
--- /dev/null
+++ b/iemabs/lp7_butt~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 lp7_butt~;
+#X text 81 5 lowpass 7.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 0.445042 1 \$2;
+#X obj 22 127 lp2c~ \$1 1.24698 1 \$2;
+#X obj 22 146 lp2c~ \$1 1.80194 1 \$2;
+#X obj 22 167 lp1c~ \$1 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/lp7_cheb~.pd b/iemabs/lp7_cheb~.pd
new file mode 100644
index 0000000..4eb3c5f
--- /dev/null
+++ b/iemabs/lp7_cheb~.pd
@@ -0,0 +1,34 @@
+#N canvas 350 22 425 305 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 29 186 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 86 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 86 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp7_cheb~;
+#X text 81 5 lowpass 7.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.0937 1.0423 \$2;
+#X obj 22 127 lp2c~ \$1 0.3987 1.5834 \$2;
+#X obj 22 148 lp2c~ \$1 1.6338 4.4899 \$2;
+#X obj 22 168 lp1c~ \$1 4.952 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/lp7_crit~.pd b/iemabs/lp7_crit~.pd
new file mode 100644
index 0000000..91519f1
--- /dev/null
+++ b/iemabs/lp7_crit~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 201 85 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 85 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 lp7_crit~;
+#X text 81 5 lowpass 7.order with critical damping;
+#X obj 22 107 lp2c~ \$1 0.6453 0.1041 \$2;
+#X obj 22 127 lp2c~ \$1 0.6453 0.1041 \$2;
+#X obj 22 147 lp2c~ \$1 0.6453 0.1041 \$2;
+#X obj 22 167 lp1c~ \$1 0.3226 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/lp8_bess~.pd b/iemabs/lp8_bess~.pd
new file mode 100644
index 0000000..3b88164
--- /dev/null
+++ b/iemabs/lp8_bess~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 408 304 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X text 5 5 lp8_bess~;
+#X text 81 5 lowpass 8.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.3728 0.2087 \$2;
+#X obj 22 127 lp2c~ \$1 0.7202 0.2621 \$2;
+#X obj 22 146 lp2c~ \$1 0.9754 0.2979 \$2;
+#X obj 22 167 lp2c~ \$1 1.1112 0.3162 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 2 0;
diff --git a/iemabs/lp8_butt~.pd b/iemabs/lp8_butt~.pd
new file mode 100644
index 0000000..4c39b4a
--- /dev/null
+++ b/iemabs/lp8_butt~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 404 300 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 183 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 5 5 lp8_butt~;
+#X text 81 5 lowpass 8.order with butterworth characteristic;
+#X obj 22 127 lp2c~ \$1 1.11114 1 \$2;
+#X obj 22 146 lp2c~ \$1 1.66294 1 \$2;
+#X obj 22 167 lp2c~ \$1 1.96157 1 \$2;
+#X obj 22 107 lp2c~ \$1 0.390181 1 \$2;
+#X text 89 202 1.arg: <float> cutoff_frequency [Hz];
+#X text 89 212 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 12 4 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 2 0;
+#X connect 15 0 12 0;
+#X connect 15 1 12 1;
+#X connect 15 4 12 4;
diff --git a/iemabs/lp8_cheb~.pd b/iemabs/lp8_cheb~.pd
new file mode 100644
index 0000000..f299860
--- /dev/null
+++ b/iemabs/lp8_cheb~.pd
@@ -0,0 +1,34 @@
+#N canvas 350 22 421 301 10;
+#X obj 22 42 inlet~;
+#X obj 62 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 99 67 <float> cutoff_frequency [Hz];
+#X text 219 86 <float> interpolation_time [ms];
+#X text 29 186 ~filtered signal_out~;
+#X text 35 281 graz \, austria 2001;
+#X obj 185 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 5 5 lp8_cheb~;
+#X text 81 5 lowpass 8.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.071724 1.04322 \$2;
+#X obj 22 127 lp2c~ \$1 0.280641 1.43338 \$2;
+#X obj 22 148 lp2c~ \$1 0.891555 3.04263 \$2;
+#X obj 22 168 lp2c~ \$1 5.10194 14.7608 \$2;
+#X text 86 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 86 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 14 0;
+#X connect 1 0 14 1;
+#X connect 10 0 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/lp8_crit~.pd b/iemabs/lp8_crit~.pd
new file mode 100644
index 0000000..75d1d56
--- /dev/null
+++ b/iemabs/lp8_crit~.pd
@@ -0,0 +1,33 @@
+#N canvas 350 22 410 306 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 209 outlet~;
+#X text 18 235 (c) musil@iem.kug.ac.at;
+#X text 60 248 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 33 187 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 99 205 1.arg: <float> cutoff_frequency [Hz];
+#X text 99 215 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 260 graz \, austria 2003;
+#X obj 22 107 lp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 127 lp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 147 lp2c~ \$1 0.6017 0.0905 \$2;
+#X obj 22 167 lp2c~ \$1 0.6017 0.0905 \$2;
+#X text 5 5 lp8_crit~;
+#X text 81 5 lowpass 8.order with critical damping;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 2 0;
diff --git a/iemabs/lp9_bess~.pd b/iemabs/lp9_bess~.pd
new file mode 100644
index 0000000..bd5497b
--- /dev/null
+++ b/iemabs/lp9_bess~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 416 312 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 203 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp9_bess~;
+#X text 81 5 lowpass 9.order with bessel characteristic;
+#X obj 22 107 lp2c~ \$1 0.3257 0.1854 \$2;
+#X obj 22 127 lp2c~ \$1 0.632 0.2311 \$2;
+#X obj 22 147 lp2c~ \$1 0.871 0.2636 \$2;
+#X obj 22 168 lp2c~ \$1 1.0244 0.2834 \$2;
+#X obj 22 189 lp1c~ \$1 0.5386 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/lp9_butt~.pd b/iemabs/lp9_butt~.pd
new file mode 100644
index 0000000..b75660e
--- /dev/null
+++ b/iemabs/lp9_butt~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 414 310 10;
+#X obj 22 42 inlet~;
+#X obj 53 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 90 67 <float> cutoff_frequency [Hz];
+#X text 185 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 149 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp9_butt~;
+#X text 81 5 lowpass 9.order with butterworth characteristic;
+#X obj 22 107 lp2c~ \$1 0.347296 1 \$2;
+#X obj 22 127 lp2c~ \$1 1 1 \$2;
+#X obj 22 147 lp2c~ \$1 1.53209 1 \$2;
+#X obj 22 168 lp2c~ \$1 1.87939 1 \$2;
+#X obj 22 189 lp1c~ \$1 1 \$2;
+#X connect 0 0 15 0;
+#X connect 1 0 15 1;
+#X connect 9 0 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 2 0;
diff --git a/iemabs/lp9_cheb~.pd b/iemabs/lp9_cheb~.pd
new file mode 100644
index 0000000..40f97d9
--- /dev/null
+++ b/iemabs/lp9_cheb~.pd
@@ -0,0 +1,38 @@
+#N canvas 350 22 427 307 10;
+#X obj 22 42 inlet~;
+#X obj 58 66 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 67 <float> cutoff_frequency [Hz];
+#X text 201 86 <float> interpolation_time [ms];
+#X text 30 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 142 17 and +1 dB passband-ripple;
+#X text 97 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 97 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X text 5 5 lp9_cheb~;
+#X text 81 5 lowpass 9.order with chebyshev characteristic;
+#X obj 22 107 lp2c~ \$1 0.0562 1.0258 \$2;
+#X obj 22 127 lp2c~ \$1 0.2076 1.3166 \$2;
+#X obj 22 148 lp2c~ \$1 0.5624 2.3278 \$2;
+#X obj 22 168 lp2c~ \$1 2.1252 7.1711 \$2;
+#X obj 22 189 lp1c~ \$1 6.3415 \$2;
+#X connect 0 0 16 0;
+#X connect 1 0 16 1;
+#X connect 9 0 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 4 18 4;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 18 4 19 4;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 19 4 20 4;
+#X connect 20 0 2 0;
diff --git a/iemabs/lp9_crit~.pd b/iemabs/lp9_crit~.pd
new file mode 100644
index 0000000..5d8afcc
--- /dev/null
+++ b/iemabs/lp9_crit~.pd
@@ -0,0 +1,37 @@
+#N canvas 350 22 418 314 10;
+#X obj 22 42 inlet~;
+#X obj 58 65 inlet;
+#X obj 22 230 outlet~;
+#X text 18 256 (c) musil@iem.kug.ac.at;
+#X text 60 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 95 66 <float> cutoff_frequency [Hz];
+#X text 203 86 <float> interpolation_time [ms];
+#X text 33 208 ~filtered signal_out~;
+#X obj 167 86 inlet;
+#X text 95 226 1.arg: <float> cutoff_frequency [Hz];
+#X text 95 236 2.arg: <float> interpolation_time [ms] (opt.);
+#X text 35 281 graz \, austria 2003;
+#X obj 22 107 lp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 127 lp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 147 lp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 167 lp2c~ \$1 0.5659 0.0801 \$2;
+#X obj 22 189 lp1c~ \$1 0.2829 \$2;
+#X text 5 5 lp9_crit~;
+#X text 81 5 lowpass 9.order with critical damping;
+#X connect 0 0 13 0;
+#X connect 1 0 13 1;
+#X connect 9 0 13 4;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 13 4 14 4;
+#X connect 14 0 15 0;
+#X connect 14 1 15 1;
+#X connect 14 4 15 4;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 15 4 16 4;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 4 17 4;
+#X connect 17 0 2 0;
diff --git a/iemabs/maverage~.pd b/iemabs/maverage~.pd
new file mode 100644
index 0000000..57fc4e6
--- /dev/null
+++ b/iemabs/maverage~.pd
@@ -0,0 +1,27 @@
+#N canvas 167 77 540 340 10;
+#X text 28 56 ~~in~~;
+#X obj 30 71 inlet~;
+#X obj 30 248 outlet~;
+#X text 28 262 ~~out~~;
+#X obj 78 92 inlet;
+#X text 91 77 average-time <float> [ms];
+#X text 157 168 changing the average-time resets the calculation the first average-time milliseconds !!;
+#X obj 30 208 delwrite~ \$0-avrg_del \$1;
+#X obj 78 138 delread~ \$0-avrg_del \$2;
+#X text 191 208 1.arg: max. average-time <float> [ms] \; 2.arg: average-time <float> [ms];
+#X obj 78 113 t f f;
+#X text 80 11 moving average filter with IIR-solution;
+#X text 209 42 N = 0.001 * average-time_ms * samplerate;
+#X text 185 27 y[n] = (x[n] + x[n-1] + x[n-2] +...+ x[n-N]) / N;
+#X text 20 284 (c) musil@iem.kug.ac.at;
+#X text 62 297 IEM KUG;
+#X text 37 309 graz \, austria 2001;
+#X obj 30 165 mov_avrg_kern~ \$2;
+#X text 10 10 maverage~;
+#X connect 1 0 7 0;
+#X connect 1 0 17 0;
+#X connect 4 0 10 0;
+#X connect 8 0 17 1;
+#X connect 10 0 8 0;
+#X connect 10 1 17 2;
+#X connect 17 0 2 0;
diff --git a/iemabs/merge_any.pd b/iemabs/merge_any.pd
new file mode 100644
index 0000000..2d5be97
--- /dev/null
+++ b/iemabs/merge_any.pd
@@ -0,0 +1,20 @@
+#N canvas 233 225 603 435 10;
+#X obj 37 84 inlet;
+#X obj 204 86 inlet;
+#X obj 37 305 outlet;
+#X text 14 358 (c) musil@iem.kug.ac.at;
+#X text 56 371 IEM KUG;
+#X text 31 383 graz \, austria 2002;
+#X text 17 15 merge_any;
+#X text 115 16 merge 2 messages together;
+#X text 313 57 no args;
+#X text 39 62 hot inlet;
+#X text 200 62 cold inlet;
+#X obj 204 109 pre_inlet 1 1;
+#X obj 37 113 pre_inlet 1 0;
+#X obj 37 278 iem_append_kernel;
+#X connect 0 0 12 0;
+#X connect 1 0 11 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 0;
+#X connect 13 0 2 0;
diff --git a/iemabs/mull~.pd b/iemabs/mull~.pd
new file mode 100644
index 0000000..fd399d3
--- /dev/null
+++ b/iemabs/mull~.pd
@@ -0,0 +1,28 @@
+#N canvas 320 149 406 323 10;
+#X obj 22 42 inlet~;
+#X obj 35 67 inlet;
+#X obj 22 238 outlet~;
+#X text 14 266 (c) musil@iem.kug.ac.at;
+#X text 56 279 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 90 112 inlet;
+#X text 31 291 graz \, austria 2001;
+#X text 69 239 ~signal_out~;
+#X obj 22 215 *~;
+#X obj 35 194 line~;
+#X obj 41 146 loadbang;
+#X text 72 66 <float> multiplication-coefficient or;
+#X text 72 78 <list> multiplication-coefficient + interpol_time [ms];
+#X text 119 180 1.arg: <float> multiplication-coefficient;
+#X text 49 9 signal-multiplication with line~ interpolation;
+#X text 125 113 <float> interpolation_time [ms];
+#X text 119 191 2.arg: <float> interpolation_time [ms];
+#X obj 35 175 pack \$1 \$2;
+#X text 11 9 mull~;
+#X connect 0 0 9 0;
+#X connect 1 0 18 0;
+#X connect 6 0 18 1;
+#X connect 9 0 2 0;
+#X connect 10 0 9 1;
+#X connect 11 0 18 0;
+#X connect 18 0 10 0;
diff --git a/iemabs/my_canvas.pd b/iemabs/my_canvas.pd
new file mode 100644
index 0000000..06538ff
--- /dev/null
+++ b/iemabs/my_canvas.pd
@@ -0,0 +1,243 @@
+#N canvas 478 61 459 285 10;
+#X obj 1 1 cnv 15 300 60 foo10_snd foo10_rcv my_canvas=cnv 50 20 192
+17 -225280 -11904 0;
+#X text 4 232 (c) musil@iem.kug.ac.at;
+#X text 46 245 IEM KUG;
+#X text 21 257 graz \, austria 2001;
+#N canvas 215 80 699 530 edit 0;
+#X obj 39 226 f;
+#X msg 17 205 bang;
+#X floatatom 55 204 3 63 88;
+#X floatatom 90 226 3 0 37;
+#X obj 39 249 pack 0 0;
+#X text 117 226 y-label;
+#X text 83 204 x-label;
+#X obj 297 281 f;
+#X msg 275 260 bang;
+#X floatatom 313 259 3 -10 10;
+#X floatatom 348 281 3 -10 10;
+#X obj 297 304 pack 0 0;
+#X obj 309 396 f;
+#X msg 287 375 bang;
+#X floatatom 325 374 3 20 60;
+#X floatatom 360 396 3 150 200;
+#X obj 309 419 pack 0 0;
+#X text 341 259 x-delta;
+#X text 375 281 y-delta;
+#X text 353 374 x-position;
+#X text 387 396 y-position;
+#X obj 59 341 f;
+#X msg 37 320 bang;
+#X floatatom 75 319 3 0 2;
+#X floatatom 110 341 3 4 36;
+#X obj 59 364 pack 0 0;
+#X text 103 319 font;
+#X text 139 341 height;
+#X floatatom 275 183 3 2 20;
+#X msg 52 137 \; foo10_rcv color \$1 \$2;
+#X msg 39 274 \; foo10_rcv label_pos \$1 \$2;
+#X msg 59 390 \; foo10_rcv label_font \$1 \$2;
+#X msg 36 430 \; foo10_rcv label blabla;
+#X msg 36 466 \; foo10_rcv label my_canvas;
+#X msg 309 444 \; foo10_rcv pos \$1 \$2;
+#X msg 297 329 \; foo10_rcv delta \$1 \$2;
+#X obj 505 234 f;
+#X msg 483 213 bang;
+#X floatatom 521 212 5 100 1000;
+#X floatatom 556 234 4 50 500;
+#X obj 505 257 pack 0 0;
+#X text 566 212 width;
+#X text 594 236 height;
+#X msg 505 282 \; foo10_rcv vis_size \$1 \$2;
+#X msg 275 211 \; foo10_rcv size \$1;
+#X text 305 183 selectable size;
+#X msg 483 156 \; foo10a_rcv receive foo10_rcv;
+#X msg 483 119 \; foo10_rcv receive foo10a_rcv;
+#X msg 482 29 \; foo10_rcv send foo10a_snd;
+#X msg 482 67 \; foo10_rcv send foo10_snd;
+#X msg 509 372 \; foo10_rcv get_pos;
+#X obj 510 407 r foo10_snd;
+#X obj 510 428 unpack 0 0;
+#X floatatom 510 453 4 0 0;
+#X floatatom 575 452 4 0 0;
+#X text 490 452 x=;
+#X text 557 452 y=;
+#X obj 52 79 f;
+#X msg 29 31 bang;
+#X floatatom 68 29 3 0 29;
+#X floatatom 103 47 3 0 29;
+#X text 96 29 background;
+#X text 131 48 label-color;
+#X msg 290 25 back;
+#X msg 290 49 label;
+#X msg 252 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 97 135 route back label bang;
+#X obj 235 168 t b b b;
+#X connect 0 0 29 0;
+#X connect 1 0 25 0;
+#X connect 2 0 26 0;
+#X connect 3 0 27 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 1;
+#X connect 6 0 10 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 1;
+#X connect 9 0 11 1;
+#X connect 10 0 24 1;
+#X connect 11 0 23 1;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 28 0;
+#X connect 22 0 6 0;
+#X connect 23 0 21 0;
+#X connect 24 0 12 0;
+#X connect 25 0 20 0;
+#X connect 26 0 18 0;
+#X connect 27 0 17 0;
+#X connect 28 0 11 0;
+#X connect 28 0 10 0;
+#X connect 29 0 4 0;
+#X connect 29 1 7 0;
+#X connect 29 2 30 0;
+#X connect 30 0 24 0;
+#X connect 30 1 23 0;
+#X connect 30 2 28 0;
+#X restore 290 86 pd RGB_____________;
+#X floatatom 332 55 3 0 255;
+#X floatatom 375 55 3 0 255;
+#X floatatom 418 56 3 0 255;
+#X text 39 3 preset-colors;
+#X text 301 0 RGB-colors;
+#X text 332 37 red;
+#X text 368 36 green;
+#X text 416 36 blue;
+#X obj 52 104 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 30 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 35 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 31 0;
+#X connect 28 0 44 0;
+#X connect 36 0 40 0;
+#X connect 37 0 36 0;
+#X connect 38 0 36 1;
+#X connect 39 0 40 1;
+#X connect 40 0 43 0;
+#X connect 51 0 52 0;
+#X connect 52 0 53 0;
+#X connect 52 1 54 0;
+#X connect 57 0 75 0;
+#X connect 58 0 57 0;
+#X connect 59 0 57 1;
+#X connect 60 0 75 1;
+#X connect 63 0 66 0;
+#X connect 64 0 66 0;
+#X connect 65 0 66 0;
+#X connect 66 0 75 0;
+#X connect 66 1 75 1;
+#X connect 67 0 66 1;
+#X connect 68 0 66 2;
+#X connect 69 0 66 3;
+#X connect 75 0 29 0;
+#X restore 305 20 pd edit;
+#X floatatom 110 193 4 0 0;
+#X floatatom 147 193 4 0 0;
+#X text 121 209 x;
+#X text 158 209 y;
+#X obj 7 161 metro 100;
+#X obj 33 141 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1
+1;
+#X obj 110 145 r from_K1;
+#X floatatom 188 194 4 0 0;
+#X floatatom 225 194 4 0 0;
+#X text 198 210 x;
+#X text 236 210 y;
+#X obj 188 146 r from_K2;
+#X msg 7 185 \; to_K get_pos;
+#N canvas 506 290 395 395 room 1;
+#X obj 1 1 cnv 1 400 400 empty empty type...ctrl+e 150 140 2 17 -33289
+-24198 0;
+#X obj 15 16 cnv 1 1 360 empty empty move_K1_and_K2 115 160 2 17 -166441
+-24198 0;
+#X obj 374 15 cnv 1 1 360 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 15 15 cnv 1 360 1 empty empty empty 20 12 2 20 -166441 -66577
+0;
+#X obj 17 375 cnv 1 358 1 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 24 24 cnv 25 25 25 from_K1 to_K K1 1 13 194 14 -261681 -123526
+0;
+#X obj 342 342 cnv 25 25 25 from_K2 to_K K2 1 13 194 14 -225280 -1109
+0;
+#X restore 307 147 pd room;
+#X obj 110 169 unpack;
+#X obj 188 170 unpack;
+#X text 172 257 updated for Pd version 0.34;
+#X text 51 92 to modify geometry \, colors \, etc.;
+#X obj 2 115 cnv 1 470 1 empty empty empty 20 12 2 20 -261681 -66577
+0;
+#X text 40 78 of the light-blue;
+#X text 166 78 my_canvas-object \,;
+#X text 5 64 click the properties-dialog on the top-left corner;
+#X obj 361 195 r foo10_rcv;
+#X obj 403 215 s ggg;
+#X obj 187 236 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X connect 9 0 17 0;
+#X connect 10 0 9 0;
+#X connect 11 0 19 0;
+#X connect 16 0 20 0;
+#X connect 19 0 5 0;
+#X connect 19 1 6 0;
+#X connect 20 0 12 0;
+#X connect 20 1 13 0;
+#X connect 27 0 28 0;
diff --git a/iemabs/my_numbox.pd b/iemabs/my_numbox.pd
new file mode 100644
index 0000000..d9e7887
--- /dev/null
+++ b/iemabs/my_numbox.pd
@@ -0,0 +1,302 @@
+#N canvas 100 190 390 413 10;
+#X obj 1 1 cnv 8 100 60 empty empty my_numbox=nbx 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 127 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 41 7 0 0;
+#X text 13 355 (c) musil@iem.kug.ac.at;
+#X text 55 368 IEM KUG;
+#X text 30 380 graz \, austria 2001;
+#X obj 38 149 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 41 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 41 107 nbx 5 12 100 300 0 1 foo12_snd foo12_rcv lin. 46 7 192
+10 -261689 -90133 -44926 160;
+#X floatatom 47 62 7 0 0;
+#X floatatom 116 150 9 0 0;
+#X obj 110 308 r goo13_snd;
+#X obj 145 248 s goo13_rcv;
+#X floatatom 105 40 7 0 0;
+#X floatatom 145 206 7 0 0;
+#X obj 60 170 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 60 147 pd once;
+#X obj 37 248 nbx 5 16 55 3520 1 0 goo13_snd goo13_rcv Hz 68 9 192
+17 -225280 -1109 -260818 2057.51;
+#X obj 37 308 ftom;
+#X floatatom 37 330 9 0 0;
+#X floatatom 64 287 9 0 0;
+#X floatatom 110 329 9 0 0;
+#X text 175 176 click properties to;
+#X floatatom 37 203 8 0 0;
+#X obj 37 226 mtof;
+#X text 12 184 --------------------;
+#X text 163 187 modify geometry \, colors \, etc.;
+#X obj 105 82 s foo12_rcv;
+#X obj 116 130 r foo12_snd;
+#X msg 105 61 set \$1;
+#X msg 145 227 set \$1;
+#X text 197 120 (0.01 pixels);
+#X text 183 99 shift-click & drag;
+#X text 189 109 for fine-tuning;
+#X text 148 270 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 147 281 for moving selected gui-objects;
+#N canvas 207 113 716 530 edit 0;
+#X obj 32 220 f;
+#X msg 10 199 bang;
+#X floatatom 48 198 3 63 88;
+#X floatatom 83 220 3 0 37;
+#X obj 32 243 pack 0 0;
+#X text 110 220 y-label;
+#X text 76 198 x-label;
+#X obj 279 246 f;
+#X msg 257 225 bang;
+#X floatatom 295 224 3 -10 10;
+#X floatatom 330 246 3 -10 10;
+#X obj 279 269 pack 0 0;
+#X obj 292 358 f;
+#X msg 270 337 bang;
+#X floatatom 308 336 3 20 60;
+#X floatatom 343 358 3 150 200;
+#X obj 292 381 pack 0 0;
+#X text 323 224 x-delta;
+#X text 357 246 y-delta;
+#X text 336 336 x-position;
+#X text 370 358 y-position;
+#X obj 52 335 f;
+#X msg 30 314 bang;
+#X floatatom 68 313 3 0 2;
+#X floatatom 103 335 3 4 36;
+#X obj 52 358 pack 0 0;
+#X text 96 313 font;
+#X text 132 335 height;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X msg 47 154 \; goo13_rcv color \$1 \$2 \$3;
+#X msg 32 268 \; goo13_rcv label_pos \$1 \$2;
+#X msg 52 383 \; goo13_rcv label_font \$1 \$2;
+#X msg 34 427 \; goo13_rcv label blabla;
+#X msg 292 406 \; goo13_rcv pos \$1 \$2;
+#X msg 279 294 \; goo13_rcv delta \$1 \$2;
+#X msg 475 21 \; goo13_rcv send goo13a_snd;
+#X msg 475 59 \; goo13_rcv send goo13_snd;
+#X msg 476 105 \; goo13_rcv receive goo13a_rcv;
+#X msg 476 143 \; goo13a_rcv receive goo13_rcv;
+#X msg 502 420 \; goo13_rcv init 0;
+#X msg 503 471 \; goo13_rcv init 1;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 3 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X msg 486 339 \; goo13_rcv range \$1 \$2;
+#X msg 363 465 \; goo13_rcv log;
+#X msg 269 466 \; goo13_rcv lin;
+#X text 269 448 linear / logarithmical;
+#X obj 275 133 f;
+#X msg 250 112 bang;
+#X floatatom 291 111 3 1 15;
+#X floatatom 326 133 3 8 50;
+#X obj 275 156 pack 0 0;
+#X msg 275 181 \; goo13_rcv size \$1 \$2;
+#X msg 34 463 \; goo13_rcv label log.freq.;
+#X obj 47 100 pack 0 0 0;
+#X obj 47 72 f;
+#X msg 24 24 bang;
+#X floatatom 63 22 3 0 29;
+#X floatatom 79 42 3 0 29;
+#X floatatom 112 58 3 0 29;
+#X text 91 22 background;
+#X text 106 42 front-color;
+#X text 140 59 label-color;
+#X msg 277 22 back;
+#X msg 277 42 front;
+#X msg 277 62 label;
+#X msg 239 22 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 277 82 pd RGB_____________;
+#X floatatom 319 52 3 0 255;
+#X floatatom 362 52 3 0 255;
+#X floatatom 405 53 3 0 255;
+#X text 34 -1 preset-colors;
+#X text 290 1 RGB-colors;
+#X text 319 34 red;
+#X text 355 33 green;
+#X text 403 33 blue;
+#X text 319 111 width in digits;
+#X text 357 134 height in pix;
+#X text 530 269 minimum-bound;
+#X text 586 291 maximum-bound;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 31 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 35 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 32 0;
+#X connect 42 0 46 0;
+#X connect 43 0 42 0;
+#X connect 44 0 42 1;
+#X connect 45 0 46 1;
+#X connect 46 0 47 0;
+#X connect 51 0 55 0;
+#X connect 52 0 51 0;
+#X connect 53 0 51 1;
+#X connect 54 0 55 1;
+#X connect 55 0 56 0;
+#X connect 58 0 30 0;
+#X connect 59 0 58 0;
+#X connect 60 0 59 0;
+#X connect 61 0 59 1;
+#X connect 62 0 58 1;
+#X connect 63 0 58 2;
+#X connect 67 0 71 0;
+#X connect 68 0 71 0;
+#X connect 69 0 71 0;
+#X connect 70 0 71 0;
+#X connect 71 0 58 0;
+#X connect 71 1 58 1;
+#X connect 71 2 58 2;
+#X connect 72 0 71 1;
+#X connect 73 0 71 2;
+#X connect 74 0 71 3;
+#X restore 314 245 pd edit;
+#X text 187 379 updated for Pd version 0.34;
+#X obj 220 41 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X text 174 11 gui-number-box:;
+#X obj 220 56 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X obj 220 71 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 9 0 17 0;
+#X connect 10 0 2 0;
+#X connect 12 0 22 0;
+#X connect 14 0 30 0;
+#X connect 15 0 31 0;
+#X connect 17 0 16 0;
+#X connect 18 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 24 0 25 0;
+#X connect 25 0 18 0;
+#X connect 29 0 11 0;
+#X connect 30 0 28 0;
+#X connect 31 0 13 0;
diff --git a/iemabs/once.pd b/iemabs/once.pd
new file mode 100644
index 0000000..408a609
--- /dev/null
+++ b/iemabs/once.pd
@@ -0,0 +1,43 @@
+#N canvas 234 143 386 418 10;
+#X obj 89 162 spigot;
+#X obj 34 59 inlet;
+#X obj 89 111 t a b;
+#X obj 126 140 f 1;
+#X obj 89 194 t a b;
+#X obj 119 216 f 0;
+#X obj 89 247 outlet;
+#X obj 207 56 inlet;
+#X obj 207 79 bang;
+#X obj 207 102 f 1;
+#X text 22 336 (c) musil@iem.kug.ac.at;
+#X text 64 346 IEM KUG;
+#X text 21 314 (c) zmoelnig@iem.kug.ac.at;
+#X text 8 6 once;
+#X text 64 7 only the first message passes through;
+#X text 29 37 message in;
+#X text 29 289 message out (only once);
+#X text 203 36 anything to init once;
+#X text 39 355 graz \, austria 2003;
+#X obj 34 80 route bang;
+#X obj 34 110 t b b;
+#X obj 34 162 spigot;
+#X obj 34 194 t b b;
+#X connect 0 0 4 0;
+#X connect 1 0 19 0;
+#X connect 2 0 0 0;
+#X connect 2 1 3 0;
+#X connect 3 0 0 1;
+#X connect 3 0 21 1;
+#X connect 4 0 6 0;
+#X connect 4 1 5 0;
+#X connect 5 0 3 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 1;
+#X connect 19 0 20 0;
+#X connect 19 1 2 0;
+#X connect 20 0 21 0;
+#X connect 20 1 3 0;
+#X connect 21 0 22 0;
+#X connect 22 0 6 0;
+#X connect 22 1 5 0;
diff --git a/iemabs/output~.pd b/iemabs/output~.pd
new file mode 100644
index 0000000..964b10a
--- /dev/null
+++ b/iemabs/output~.pd
@@ -0,0 +1,27 @@
+#N canvas 191 63 365 293 10;
+#X obj 141 169 dbtorms;
+#X obj 94 87 inlet;
+#X text 94 64 level;
+#X obj 141 215 line~;
+#X obj 19 136 dac~;
+#X text 19 67 audio;
+#X text 151 151 show level;
+#X obj 19 87 inlet~;
+#X obj 19 109 *~;
+#X obj 20 223 outlet;
+#X msg 141 127 95;
+#X obj 141 193 pack 0 500;
+#X obj 20 200 pvu~;
+#X obj 141 106 r newbang;
+#X text 15 20 ouput~;
+#X connect 0 0 11 0;
+#X connect 1 0 0 0;
+#X connect 3 0 8 1;
+#X connect 7 0 8 0;
+#X connect 8 0 4 1;
+#X connect 8 0 4 0;
+#X connect 8 0 12 0;
+#X connect 10 0 0 0;
+#X connect 11 0 3 0;
+#X connect 12 0 9 0;
+#X connect 13 0 10 0;
diff --git a/iemabs/pink~.pd b/iemabs/pink~.pd
new file mode 100644
index 0000000..5d75d28
--- /dev/null
+++ b/iemabs/pink~.pd
@@ -0,0 +1,16 @@
+#N canvas 142 265 406 237 10;
+#X text 27 150 signal-out;
+#X obj 29 129 outlet~;
+#X obj 29 49 noise~;
+#X text 14 7 pink~;
+#X text 65 8 pink-noise-generator with -3 dB per oktave;
+#X text 13 178 (c) musil@iem.kug.ac.at;
+#X text 55 191 IEM KUG;
+#X text 30 203 graz \, austria 2001;
+#X obj 29 88 biquad~ 1.83221 -0.836851 0.271264 -0.456311 0.18969;
+#X obj 29 108 biquad~ 0.273097 0.087865 0.505803 0.171365 -0.03813;
+#X obj 29 68 biquad~ 1.98893 -0.988954 1.00554 -1.9889 0.983444;
+#X connect 2 0 10 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 10 0 8 0;
diff --git a/iemabs/popup.pd b/iemabs/popup.pd
new file mode 100644
index 0000000..3659af9
--- /dev/null
+++ b/iemabs/popup.pd
@@ -0,0 +1,25 @@
+#N canvas 194 110 646 379 10;
+#X obj 39 65 pop 6 17 0 0 play_cmd play_cmd play_cmd 82 9 192 17 -225280
+-1109 -260818 0 5 open rewind start stop quit;
+#X obj 105 196 init_popup help-popup.txt play_cmd;
+#X obj 25 196 r play_cmd;
+#X obj 25 218 route set_pop_name;
+#X text 11 9 popup = pop;
+#X obj 263 236 pp set;
+#X msg 263 258 0 open;
+#X obj 69 276 unpack float symbol;
+#X floatatom 69 299 5 0 0;
+#X symbolatom 197 300 10 0 0;
+#X obj 413 93 pop 7 14 0 0 empty empty empty 50 7 0 10 -262144 -1 -1
+0 1 pop;
+#X floatatom 413 128 5 0 0;
+#X symbolatom 460 129 10 0 0;
+#X connect 1 0 10 0;
+#X connect 2 0 3 0;
+#X connect 3 1 5 0;
+#X connect 3 1 7 0;
+#X connect 5 0 6 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
diff --git a/iemabs/pp.pd b/iemabs/pp.pd
new file mode 100644
index 0000000..3cc53b1
--- /dev/null
+++ b/iemabs/pp.pd
@@ -0,0 +1,24 @@
+#N canvas 233 225 706 463 10;
+#X obj 53 113 inlet;
+#X obj 300 110 inlet;
+#X obj 53 349 outlet;
+#X text 14 399 (c) musil@iem.kug.ac.at;
+#X text 56 412 IEM KUG;
+#X text 35 61 hot inlet;
+#X text 297 60 cold inlet;
+#X text 35 76 tail of output-message;
+#X text 296 73 head of output-message;
+#X text 204 328 head of output-message;
+#X text 209 317 initials-arguments:;
+#X text 119 14 merge the head-message in front of the tail-message
+;
+#X text 31 424 graz \, austria 2003;
+#X obj 53 322 iem_prepend_kernel;
+#X obj 53 147 pre_inlet 1 0;
+#X obj 300 143 pre_inlet 1 1;
+#X text 17 15 prepend;
+#X connect 0 0 14 0;
+#X connect 1 0 15 0;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
diff --git a/iemabs/prepend.pd b/iemabs/prepend.pd
new file mode 100644
index 0000000..33b3beb
--- /dev/null
+++ b/iemabs/prepend.pd
@@ -0,0 +1,24 @@
+#N canvas 233 225 704 461 10;
+#X obj 53 113 inlet;
+#X obj 300 110 inlet;
+#X obj 53 349 outlet;
+#X text 14 399 (c) musil@iem.kug.ac.at;
+#X text 56 412 IEM KUG;
+#X text 35 61 hot inlet;
+#X text 297 60 cold inlet;
+#X text 35 76 tail of output-message;
+#X text 296 73 head of output-message;
+#X text 204 328 head of output-message;
+#X text 209 317 initials-arguments:;
+#X text 119 14 merge the head-message in front of the tail-message
+;
+#X text 31 424 graz \, austria 2003;
+#X obj 53 322 iem_prepend_kernel;
+#X obj 53 147 pre_inlet 1 0;
+#X obj 300 143 pre_inlet 1 1;
+#X text 17 15 prepend;
+#X connect 0 0 14 0;
+#X connect 1 0 15 0;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
diff --git a/iemabs/radiobutton.pd b/iemabs/radiobutton.pd
new file mode 100644
index 0000000..3d05a8b
--- /dev/null
+++ b/iemabs/radiobutton.pd
@@ -0,0 +1,282 @@
+#N canvas 117 227 547 281 10;
+#X obj 1 1 cnv 8 100 60 empty empty radiobutton=rdb 20 20 1 18 -262144
+-1109 0;
+#X text 16 213 (c) musil@iem.kug.ac.at;
+#X text 58 226 IEM KUG;
+#X text 33 238 graz \, austria 2001;
+#X text 289 52 click properties to;
+#X text 277 63 modify geometry \, colors \, etc.;
+#X obj 356 172 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 355 124 s foo8_rcv;
+#X obj 356 150 r foo8_snd;
+#X obj 44 100 hdl 25 1 1 10 foo8_snd foo8_rcv radio_0_9 156 -8 192
+10 -99865 -262144 -260818 1;
+#X msg 44 142 \$1;
+#X floatatom 44 164 4 0 0;
+#X obj 44 186 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 89 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 89 140 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 221 66 set \$1;
+#X floatatom 221 45 4 0 9;
+#X floatatom 44 54 4 0 9;
+#X msg 122 45 7 0 -5.44;
+#X msg 126 67 3 3 4.55;
+#X obj 106 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X obj 123 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 140 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 157 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 174 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 191 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 208 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 225 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 242 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 82 178 print;
+#X text 183 11 gui-radiobutton:;
+#X floatatom 380 198 4 0 0;
+#X msg 380 172 \$1;
+#X msg 355 103 set \$1;
+#X floatatom 355 82 4 0 9;
+#X text 128 178 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 127 189 for moving selected gui-objects;
+#N canvas 222 207 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156;
+#X floatatom 93 198 3 -20 37;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10;
+#X floatatom 337 293 3 -10 10;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60;
+#X floatatom 351 412 3 100 200;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2;
+#X floatatom 113 313 3 4 36;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20;
+#X msg 47 125 \; foo8_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo8_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo8_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo8_rcv label blabla;
+#X msg 300 460 \; foo8_rcv pos \$1 \$2;
+#X msg 286 341 \; foo8_rcv delta \$1 \$2;
+#X msg 270 216 \; foo8_rcv size \$1;
+#X msg 482 171 \; foo8a_rcv receive foo8_rcv;
+#X msg 483 133 \; foo8_rcv receive foo8a_rcv;
+#X msg 483 88 \; foo8_rcv send foo8_snd;
+#X msg 483 50 \; foo8_rcv send foo8a_snd;
+#X msg 483 312 \; foo8_rcv init 0;
+#X msg 485 366 \; foo8_rcv init 1;
+#X msg 490 436 \; foo8_rcv single_change;
+#X msg 490 470 \; foo8_rcv double_change;
+#X text 491 417 changing-behavior;
+#X msg 482 254 \; foo8_rcv number \$1;
+#X text 526 228 number of buttons;
+#X msg 34 459 \; foo8_rcv label radio_0_9;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29;
+#X floatatom 79 46 3 0 29;
+#X floatatom 112 62 3 0 29;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255;
+#X floatatom 370 55 3 0 255;
+#X floatatom 413 56 3 0 255;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 34 0;
+#X connect 7 0 39 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 38 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 37 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 35 0;
+#X connect 32 0 49 0;
+#X connect 52 0 33 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 55 0 53 1;
+#X connect 56 0 52 1;
+#X connect 57 0 52 2;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 65 0 52 0;
+#X connect 65 1 52 1;
+#X connect 65 2 52 2;
+#X connect 66 0 65 1;
+#X connect 67 0 65 2;
+#X connect 68 0 65 3;
+#X restore 469 108 pd edit;
+#X text 251 232 updated for Pd version 0.34;
+#X obj 307 10 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 360 32 hdl 15 1 0 8 eee eee empty 20 8 192 8 -262144 -1 -1 7
+;
+#X connect 7 0 10 0;
+#X connect 9 0 6 0;
+#X connect 9 0 33 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 10 0 30 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 21 0;
+#X connect 15 2 22 0;
+#X connect 15 3 23 0;
+#X connect 15 4 24 0;
+#X connect 15 5 25 0;
+#X connect 15 6 26 0;
+#X connect 15 7 27 0;
+#X connect 15 8 28 0;
+#X connect 15 9 29 0;
+#X connect 16 0 10 0;
+#X connect 17 0 16 0;
+#X connect 18 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 33 0 32 0;
+#X connect 34 0 8 0;
+#X connect 35 0 34 0;
diff --git a/iemabs/rbpq2~.pd b/iemabs/rbpq2~.pd
new file mode 100644
index 0000000..3b10925
--- /dev/null
+++ b/iemabs/rbpq2~.pd
@@ -0,0 +1,25 @@
+#N canvas 313 255 413 281 10;
+#X obj 22 42 inlet~;
+#X obj 56 64 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 91 88 inlet;
+#X text 196 110 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 161 110 inlet;
+#X text 93 65 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 127 88 <float> Q [-];
+#X text 60 8 resonance-bandpass 2.order with Q-inlet;
+#X obj 22 134 filter~ rbpq2 \$1 \$2 1 \$3;
+#X text 12 9 rbpq2~;
+#X text 85 176 1.arg: <float> center_frequency [Hz];
+#X text 85 185 2.arg: <float> Q [-];
+#X text 85 194 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 14 0;
+#X connect 1 0 14 1;
+#X connect 6 0 14 2;
+#X connect 9 0 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/rbpw2~.pd b/iemabs/rbpw2~.pd
new file mode 100644
index 0000000..08128f4
--- /dev/null
+++ b/iemabs/rbpw2~.pd
@@ -0,0 +1,25 @@
+#N canvas 313 255 413 281 10;
+#X obj 22 42 inlet~;
+#X obj 56 64 inlet;
+#X obj 22 186 outlet~;
+#X text 15 229 (c) musil@iem.kug.ac.at;
+#X text 57 242 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 91 88 inlet;
+#X text 196 110 <float> interpolation_time [ms];
+#X text 32 153 ~filtered signal_out~;
+#X obj 161 110 inlet;
+#X text 93 65 <float> center_frequency [Hz];
+#X text 32 254 graz \, austria 2001;
+#X text 12 9 rbpw2~;
+#X text 60 8 resonance-bandpass 2.order with bandwidth-inlet;
+#X obj 22 134 filter~ rbpw2 \$1 \$2 1 \$3;
+#X text 127 88 <float> bandwith [Hz];
+#X text 97 174 1.arg: <float> center_frequency [Hz];
+#X text 97 183 2.arg: <float> bandwidth [Hz];
+#X text 97 192 3.arg: <float> interpolation_time [ms] (opt.);
+#X connect 0 0 14 0;
+#X connect 1 0 14 1;
+#X connect 6 0 14 2;
+#X connect 9 0 14 4;
+#X connect 14 0 2 0;
diff --git a/iemabs/receive2list.pd b/iemabs/receive2list.pd
new file mode 100644
index 0000000..afdfb24
--- /dev/null
+++ b/iemabs/receive2list.pd
@@ -0,0 +1,1868 @@
+#N canvas 193 1 736 662 10;
+#X obj 212 58 inlet;
+#X obj 391 621 bang;
+#X obj 297 237 bang;
+#X msg 297 260 doesn't understand this;
+#X obj 254 142 bang;
+#X obj 31 648 outlet;
+#X text 10 4 receive2list;
+#X msg 31 161 clear;
+#X text 255 73 set message: <float> para-index;
+#X text 316 85 + <symbol> para-receive-label;
+#X text 128 8 converts receive message to a message with prepending
+float-index;
+#X msg 382 645 only 200 receivers possible;
+#X obj 373 668 print receive2list-ERROR;
+#X obj 212 122 route add clear;
+#N canvas 373 81 515 541 iem_receive_x_10_1 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 35 155 pp 0;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 47 182 pp 1;
+#X obj 64 206 pp 2;
+#X obj 78 228 pp 3;
+#X obj 96 255 pp 4;
+#X obj 118 280 pp 5;
+#X obj 130 305 pp 6;
+#X obj 147 329 pp 7;
+#X obj 161 351 pp 8;
+#X obj 179 374 pp 9;
+#X obj 73 37 iiroute 0 9 ________________;
+#X connect 1 0 34 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 14 0;
+#X connect 5 0 25 0;
+#X connect 6 0 26 0;
+#X connect 7 0 27 0;
+#X connect 8 0 28 0;
+#X connect 9 0 29 0;
+#X connect 10 0 30 0;
+#X connect 11 0 31 0;
+#X connect 12 0 32 0;
+#X connect 13 0 33 0;
+#X connect 14 0 0 0;
+#X connect 15 0 4 0;
+#X connect 16 0 5 0;
+#X connect 17 0 6 0;
+#X connect 18 0 7 0;
+#X connect 19 0 8 0;
+#X connect 20 0 9 0;
+#X connect 21 0 10 0;
+#X connect 22 0 11 0;
+#X connect 23 0 12 0;
+#X connect 24 0 13 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 15 0;
+#X connect 34 1 16 0;
+#X connect 34 2 17 0;
+#X connect 34 3 18 0;
+#X connect 34 4 19 0;
+#X connect 34 5 20 0;
+#X connect 34 6 21 0;
+#X connect 34 7 22 0;
+#X connect 34 8 23 0;
+#X connect 34 9 24 0;
+#X connect 34 10 3 0;
+#X restore 31 188 pd iem_receive_x_10_1;
+#N canvas 170 98 499 525 iem_receive_x_10_2 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 10 19 ________________;
+#X obj 35 155 pp 10;
+#X obj 47 182 pp 11;
+#X obj 64 206 pp 12;
+#X obj 78 228 pp 13;
+#X obj 96 255 pp 14;
+#X obj 118 280 pp 15;
+#X obj 130 305 pp 16;
+#X obj 147 329 pp 17;
+#X obj 161 351 pp 18;
+#X obj 179 374 pp 19;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 44 209 pd iem_receive_x_10_2;
+#N canvas 170 98 499 525 iem_receive_x_10_3 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 20 29 ________________;
+#X obj 35 155 pp 20;
+#X obj 47 182 pp 21;
+#X obj 64 206 pp 22;
+#X obj 78 228 pp 23;
+#X obj 96 255 pp 24;
+#X obj 118 280 pp 25;
+#X obj 130 305 pp 26;
+#X obj 147 329 pp 27;
+#X obj 161 351 pp 28;
+#X obj 179 374 pp 29;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 56 231 pd iem_receive_x_10_3;
+#N canvas 170 98 499 525 iem_receive_x_10_4 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 30 39 ________________;
+#X obj 35 155 pp 30;
+#X obj 47 182 pp 31;
+#X obj 64 206 pp 32;
+#X obj 78 228 pp 33;
+#X obj 96 255 pp 34;
+#X obj 118 280 pp 35;
+#X obj 130 305 pp 36;
+#X obj 147 329 pp 37;
+#X obj 161 351 pp 38;
+#X obj 179 374 pp 39;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 69 252 pd iem_receive_x_10_4;
+#N canvas 170 98 497 523 iem_receive_x_10_5 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 40 49 ________________;
+#X obj 35 155 pp 40;
+#X obj 47 182 pp 41;
+#X obj 64 206 pp 42;
+#X obj 78 228 pp 43;
+#X obj 96 255 pp 44;
+#X obj 118 280 pp 45;
+#X obj 130 305 pp 46;
+#X obj 147 329 pp 47;
+#X obj 161 351 pp 48;
+#X obj 179 374 pp 49;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 81 273 pd iem_receive_x_10_5;
+#N canvas 170 98 499 525 iem_receive_x_10_6 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 50 59 ________________;
+#X obj 35 155 pp 50;
+#X obj 47 182 pp 51;
+#X obj 64 206 pp 52;
+#X obj 78 228 pp 53;
+#X obj 96 255 pp 54;
+#X obj 118 280 pp 55;
+#X obj 130 305 pp 56;
+#X obj 147 329 pp 57;
+#X obj 161 351 pp 58;
+#X obj 179 374 pp 59;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 94 294 pd iem_receive_x_10_6;
+#N canvas 170 98 497 523 iem_receive_x_10_7 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 60 69 ________________;
+#X obj 35 155 pp 60;
+#X obj 47 182 pp 61;
+#X obj 64 206 pp 62;
+#X obj 78 228 pp 63;
+#X obj 96 255 pp 64;
+#X obj 118 280 pp 65;
+#X obj 130 305 pp 66;
+#X obj 147 329 pp 67;
+#X obj 161 351 pp 68;
+#X obj 179 374 pp 69;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 106 316 pd iem_receive_x_10_7;
+#N canvas 170 98 497 523 iem_receive_x_10_8 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 70 79 ________________;
+#X obj 35 155 pp 70;
+#X obj 47 182 pp 71;
+#X obj 64 206 pp 72;
+#X obj 78 228 pp 73;
+#X obj 96 255 pp 74;
+#X obj 117 280 pp 75;
+#X obj 130 305 pp 76;
+#X obj 147 329 pp 77;
+#X obj 161 351 pp 78;
+#X obj 179 374 pp 79;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 119 337 pd iem_receive_x_10_8;
+#N canvas 170 98 497 523 iem_receive_x_10_9 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 80 89 ________________;
+#X obj 35 155 pp 80;
+#X obj 47 182 pp 81;
+#X obj 64 206 pp 82;
+#X obj 78 228 pp 83;
+#X obj 96 255 pp 84;
+#X obj 118 280 pp 85;
+#X obj 130 305 pp 86;
+#X obj 147 329 pp 87;
+#X obj 161 351 pp 88;
+#X obj 179 374 pp 89;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 130 360 pd iem_receive_x_10_9;
+#N canvas 170 98 497 523 iem_receive_x_10_10 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 90 99 ________________;
+#X obj 35 155 pp 90;
+#X obj 47 182 pp 91;
+#X obj 64 206 pp 92;
+#X obj 78 228 pp 93;
+#X obj 96 255 pp 94;
+#X obj 118 280 pp 95;
+#X obj 130 305 pp 96;
+#X obj 147 329 pp 97;
+#X obj 161 351 pp 98;
+#X obj 179 374 pp 99;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 143 381 pd iem_receive_x_10_10;
+#N canvas 170 98 497 523 iem_receive_x_10_11 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 100 109 ________________;
+#X obj 35 155 pp 100;
+#X obj 47 182 pp 101;
+#X obj 64 206 pp 102;
+#X obj 78 228 pp 103;
+#X obj 96 255 pp 104;
+#X obj 118 280 pp 105;
+#X obj 130 305 pp 106;
+#X obj 147 330 pp 107;
+#X obj 161 351 pp 108;
+#X obj 179 374 pp 109;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 155 403 pd iem_receive_x_10_11;
+#N canvas 170 98 497 523 iem_receive_x_10_12 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 110 119 ________________;
+#X obj 35 155 pp 110;
+#X obj 47 182 pp 111;
+#X obj 64 206 pp 112;
+#X obj 78 228 pp 113;
+#X obj 96 255 pp 114;
+#X obj 118 280 pp 115;
+#X obj 130 305 pp 116;
+#X obj 147 329 pp 117;
+#X obj 161 351 pp 118;
+#X obj 178 374 pp 119;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 168 424 pd iem_receive_x_10_12;
+#N canvas 170 98 499 525 iem_receive_x_10_13 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 120 129 ________________;
+#X obj 35 155 pp 120;
+#X obj 47 182 pp 121;
+#X obj 64 206 pp 122;
+#X obj 78 228 pp 123;
+#X obj 97 255 pp 124;
+#X obj 118 280 pp 125;
+#X obj 130 305 pp 126;
+#X obj 147 329 pp 127;
+#X obj 161 351 pp 128;
+#X obj 179 374 pp 129;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 180 445 pd iem_receive_x_10_13;
+#N canvas 170 98 497 523 iem_receive_x_10_14 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 130 139 ________________;
+#X obj 35 155 pp 130;
+#X obj 47 182 pp 131;
+#X obj 64 206 pp 132;
+#X obj 78 228 pp 133;
+#X obj 96 255 pp 134;
+#X obj 118 280 pp 135;
+#X obj 130 305 pp 136;
+#X obj 147 329 pp 137;
+#X obj 161 351 pp 138;
+#X obj 179 374 pp 139;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 193 466 pd iem_receive_x_10_14;
+#N canvas 170 98 497 523 iem_receive_x_10_15 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 140 149 ________________;
+#X obj 35 155 pp 140;
+#X obj 47 182 pp 141;
+#X obj 64 206 pp 142;
+#X obj 78 228 pp 143;
+#X obj 96 255 pp 144;
+#X obj 118 280 pp 145;
+#X obj 130 305 pp 146;
+#X obj 147 329 pp 147;
+#X obj 161 351 pp 148;
+#X obj 179 374 pp 149;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 205 488 pd iem_receive_x_10_15;
+#N canvas 170 98 499 525 iem_receive_x_10_16 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 150 159 ________________;
+#X obj 35 155 pp 150;
+#X obj 47 182 pp 151;
+#X obj 64 206 pp 152;
+#X obj 78 228 pp 153;
+#X obj 96 255 pp 154;
+#X obj 118 280 pp 155;
+#X obj 130 305 pp 156;
+#X obj 147 329 pp 157;
+#X obj 161 351 pp 158;
+#X obj 179 374 pp 159;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 218 509 pd iem_receive_x_10_16;
+#N canvas 170 98 501 527 iem_receive_x_10_17 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 160 169 ______________;
+#X obj 35 155 pp 160;
+#X obj 47 182 pp 161;
+#X obj 64 206 pp 162;
+#X obj 78 228 pp 163;
+#X obj 96 255 pp 164;
+#X obj 118 280 pp 165;
+#X obj 130 305 pp 166;
+#X obj 147 329 pp 167;
+#X obj 161 351 pp 168;
+#X obj 179 374 pp 169;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 227 531 pd iem_receive_x_10_17;
+#N canvas 170 98 499 525 iem_receive_x_10_18 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 170 179 ______________;
+#X obj 35 155 pp 170;
+#X obj 47 182 pp 171;
+#X obj 64 206 pp 172;
+#X obj 78 228 pp 173;
+#X obj 96 255 pp 174;
+#X obj 117 280 pp 175;
+#X obj 130 305 pp 176;
+#X obj 147 329 pp 177;
+#X obj 161 351 pp 178;
+#X obj 179 374 pp 179;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 240 552 pd iem_receive_x_10_18;
+#N canvas 170 98 499 525 iem_receive_x_10_19 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 73 37 iiroute 180 189 ______________;
+#X obj 35 155 pp 180;
+#X obj 47 182 pp 181;
+#X obj 64 206 pp 182;
+#X obj 78 228 pp 183;
+#X obj 96 255 pp 184;
+#X obj 118 280 pp 185;
+#X obj 130 305 pp 186;
+#X obj 147 329 pp 187;
+#X obj 161 351 pp 188;
+#X obj 179 374 pp 189;
+#X connect 1 0 24 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 25 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
+#X connect 24 2 16 0;
+#X connect 24 3 17 0;
+#X connect 24 4 18 0;
+#X connect 24 5 19 0;
+#X connect 24 6 20 0;
+#X connect 24 7 21 0;
+#X connect 24 8 22 0;
+#X connect 24 9 23 0;
+#X connect 24 10 3 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 251 575 pd iem_receive_x_10_19;
+#N canvas 170 98 501 527 iem_receive_x_10_20 0;
+#X obj 35 471 outlet;
+#X obj 73 16 inlet;
+#X obj 35 15 inlet;
+#X obj 382 469 outlet;
+#X obj 35 80 iem_r;
+#X obj 47 106 iem_r;
+#X obj 64 130 iem_r;
+#X obj 78 156 iem_r;
+#X obj 96 180 iem_r;
+#X obj 118 204 iem_r;
+#X obj 130 230 iem_r;
+#X obj 147 254 iem_r;
+#X obj 161 280 iem_r;
+#X obj 179 304 iem_r;
+#X obj 72 80 pp set;
+#X obj 86 106 pp set;
+#X obj 104 131 pp set;
+#X obj 118 156 pp set;
+#X obj 136 180 pp set;
+#X obj 157 204 pp set;
+#X obj 169 230 pp set;
+#X obj 187 254 pp set;
+#X obj 201 280 pp set;
+#X obj 219 304 pp set;
+#X obj 35 155 pp 190;
+#X obj 73 37 iiroute 190 199 ______________;
+#X obj 47 182 pp 191;
+#X obj 64 206 pp 192;
+#X obj 78 228 pp 193;
+#X obj 96 255 pp 194;
+#X obj 118 280 pp 195;
+#X obj 130 305 pp 196;
+#X obj 147 329 pp 197;
+#X obj 161 351 pp 198;
+#X obj 179 374 pp 199;
+#X connect 1 0 25 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 4 0 24 0;
+#X connect 5 0 26 0;
+#X connect 6 0 27 0;
+#X connect 7 0 28 0;
+#X connect 8 0 29 0;
+#X connect 9 0 30 0;
+#X connect 10 0 31 0;
+#X connect 11 0 32 0;
+#X connect 12 0 33 0;
+#X connect 13 0 34 0;
+#X connect 14 0 4 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 8 0;
+#X connect 19 0 9 0;
+#X connect 20 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 0 12 0;
+#X connect 23 0 13 0;
+#X connect 24 0 0 0;
+#X connect 25 0 14 0;
+#X connect 25 1 15 0;
+#X connect 25 2 16 0;
+#X connect 25 3 17 0;
+#X connect 25 4 18 0;
+#X connect 25 5 19 0;
+#X connect 25 6 20 0;
+#X connect 25 7 21 0;
+#X connect 25 8 22 0;
+#X connect 25 9 23 0;
+#X connect 25 10 3 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 28 0 0 0;
+#X connect 29 0 0 0;
+#X connect 30 0 0 0;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
+#X restore 264 596 pd iem_receive_x_10_20;
+#X text 322 157 1.arg: <float> max. number of receiveable parameters
+;
+#X msg 427 381 \; pd-iem_receive_x_10_20 clear;
+#X connect 0 0 13 0;
+#X connect 1 0 11 0;
+#X connect 2 0 3 0;
+#X connect 3 0 12 0;
+#X connect 4 0 7 0;
+#X connect 7 0 14 0;
+#X connect 7 0 15 0;
+#X connect 7 0 16 0;
+#X connect 7 0 17 0;
+#X connect 7 0 18 0;
+#X connect 7 0 19 0;
+#X connect 7 0 20 0;
+#X connect 7 0 21 0;
+#X connect 7 0 22 0;
+#X connect 7 0 23 0;
+#X connect 7 0 24 0;
+#X connect 7 0 25 0;
+#X connect 7 0 26 0;
+#X connect 7 0 27 0;
+#X connect 7 0 28 0;
+#X connect 7 0 29 0;
+#X connect 7 0 30 0;
+#X connect 7 0 31 0;
+#X connect 7 0 32 0;
+#X connect 7 0 33 0;
+#X connect 11 0 12 0;
+#X connect 13 0 14 1;
+#X connect 13 1 4 0;
+#X connect 13 2 2 0;
+#X connect 14 0 5 0;
+#X connect 14 1 15 1;
+#X connect 15 0 5 0;
+#X connect 15 1 16 1;
+#X connect 16 0 5 0;
+#X connect 16 1 17 1;
+#X connect 17 0 5 0;
+#X connect 17 1 18 1;
+#X connect 18 0 5 0;
+#X connect 18 1 19 1;
+#X connect 19 0 5 0;
+#X connect 19 1 20 1;
+#X connect 20 0 5 0;
+#X connect 20 1 21 1;
+#X connect 21 0 5 0;
+#X connect 21 1 22 1;
+#X connect 22 0 5 0;
+#X connect 22 1 23 1;
+#X connect 23 0 5 0;
+#X connect 23 1 24 1;
+#X connect 24 0 5 0;
+#X connect 24 1 25 1;
+#X connect 25 0 5 0;
+#X connect 25 1 26 1;
+#X connect 26 0 5 0;
+#X connect 26 1 27 1;
+#X connect 27 0 5 0;
+#X connect 27 1 28 1;
+#X connect 28 0 5 0;
+#X connect 28 1 29 1;
+#X connect 29 0 5 0;
+#X connect 29 1 30 1;
+#X connect 30 0 5 0;
+#X connect 30 1 31 1;
+#X connect 31 0 5 0;
+#X connect 31 1 32 1;
+#X connect 32 0 5 0;
+#X connect 32 1 33 1;
+#X connect 33 0 5 0;
+#X connect 33 1 1 0;
diff --git a/iemabs/rmstofad.pd b/iemabs/rmstofad.pd
new file mode 100644
index 0000000..4efc3a6
--- /dev/null
+++ b/iemabs/rmstofad.pd
@@ -0,0 +1,18 @@
+#N canvas 334 153 600 306 10;
+#X obj 91 69 inlet;
+#X obj 91 209 transf_fader;
+#X obj 107 153 loadbang;
+#X obj 91 231 outlet;
+#X msg 107 174 pairs 0 0 40 6 70 24 80 36 88 48 94 60 98 72 102 96
+106 108 107.5 111 109 114 112 117 142 147;
+#X obj 91 100 rmstodb;
+#X text 26 253 (c) musil@iem.kug.ac.at;
+#X text 63 266 IEM KUG;
+#X text 38 278 graz \, austria 2003;
+#X text 13 10 rmstofad;
+#X text 86 11 convert rms-value to fader-scale;
+#X connect 0 0 5 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
diff --git a/iemabs/round~.pd b/iemabs/round~.pd
new file mode 100644
index 0000000..a7b8396
--- /dev/null
+++ b/iemabs/round~.pd
@@ -0,0 +1,21 @@
+#N canvas 323 149 389 325 10;
+#X obj 22 42 inlet~;
+#X obj 22 238 outlet~;
+#X text 14 266 (c) musil@iem.kug.ac.at;
+#X text 56 279 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 69 239 ~signal_out~;
+#X text 11 9 round~;
+#X text 62 9 signal-float-rounding to a signal-integer-number;
+#X text 31 291 graz \, austria 2003;
+#X obj 140 112 float24 12 582 912;
+#X obj 22 152 +~ 1.25829e+007;
+#X obj 22 178 -~ 1.25829e+007;
+#X obj 140 92 loadbang;
+#X text 266 109 1.5 * 2 ^ 23;
+#X connect 0 0 10 0;
+#X connect 9 0 10 1;
+#X connect 9 0 11 1;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X connect 12 0 9 0;
diff --git a/iemabs/split3.pd b/iemabs/split3.pd
new file mode 100644
index 0000000..5a001e6
--- /dev/null
+++ b/iemabs/split3.pd
@@ -0,0 +1,32 @@
+#N canvas 363 140 456 333 10;
+#X obj 25 60 inlet;
+#X obj 26 231 outlet;
+#X text 19 273 (c) musil@iem.kug.ac.at;
+#X text 61 286 IEM KUG;
+#X obj 68 79 inlet;
+#X text 8 7 split3;
+#X obj 111 100 inlet;
+#X obj 72 212 outlet;
+#X obj 111 188 outlet;
+#X obj 25 135 moses \$1;
+#X obj 68 157 moses \$2;
+#X text 68 234 <float> output within;
+#X text 117 213 <float> output less than low-limit;
+#X text 155 189 <float> output greater than high-limit;
+#X text 61 58 <float> input;
+#X text 106 78 <float> low-limit;
+#X text 148 101 <float> high-limit;
+#X text 160 134 1.arg: <float> low-limit;
+#X text 160 146 2.arg: <float> high-limit;
+#X text 80 5 part a <float>-message into 3 ways:;
+#X text 36 298 graz \, austria 2001;
+#X text 141 40 3 greater than high-limit;
+#X text 141 30 2 less than low-limit \;;
+#X text 141 20 1 within low- and high-limit \;;
+#X connect 0 0 9 0;
+#X connect 4 0 9 1;
+#X connect 6 0 10 1;
+#X connect 9 0 7 0;
+#X connect 9 1 10 0;
+#X connect 10 0 1 0;
+#X connect 10 1 8 0;
diff --git a/iemabs/subl~.pd b/iemabs/subl~.pd
new file mode 100644
index 0000000..9bfbcc1
--- /dev/null
+++ b/iemabs/subl~.pd
@@ -0,0 +1,28 @@
+#N canvas 323 149 406 323 10;
+#X obj 22 42 inlet~;
+#X obj 35 67 inlet;
+#X obj 22 238 outlet~;
+#X text 14 266 (c) musil@iem.kug.ac.at;
+#X text 56 279 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X obj 90 112 inlet;
+#X text 125 113 <float> interpolation_time [ms];
+#X text 31 291 graz \, austria 2001;
+#X text 69 239 ~signal_out~;
+#X obj 35 194 line~;
+#X obj 41 143 loadbang;
+#X text 119 191 2.arg: <float> interpolation_time [ms];
+#X text 72 66 <float> subtraction-coefficient or;
+#X text 72 78 <list> subtraction-coefficient + interpol_time [ms];
+#X text 119 180 1.arg: <float> subtraction-coefficient;
+#X obj 22 215 -~;
+#X text 49 9 signal-subtraction with line~ interpolation;
+#X obj 35 175 pack \$1 \$2;
+#X text 11 9 subl~;
+#X connect 0 0 16 0;
+#X connect 1 0 18 0;
+#X connect 6 0 18 1;
+#X connect 10 0 16 1;
+#X connect 11 0 18 0;
+#X connect 16 0 2 0;
+#X connect 18 0 10 0;
diff --git a/iemabs/test1.mp3 b/iemabs/test1.mp3
new file mode 100644
index 0000000..d8d3ee2
--- /dev/null
+++ b/iemabs/test1.mp3
Binary files differ
diff --git a/iemabs/test_dollarg.pd b/iemabs/test_dollarg.pd
new file mode 100644
index 0000000..dced4d5
--- /dev/null
+++ b/iemabs/test_dollarg.pd
@@ -0,0 +1,42 @@
+#N canvas 75 94 754 539 10;
+#X obj 126 224 dollarg;
+#X obj 126 40 inlet;
+#X obj 32 387 outlet;
+#X obj 415 374 outlet;
+#X obj 251 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 420 352 5 0 0 0 - - -;
+#X obj 25 310 prepend set;
+#X msg 25 339 aa bb cc dd ee ff gg 33 44 55 66 77 88 99;
+#X floatatom 247 181 5 0 0 0 - - -;
+#X text 60 480 (c) musil@iem.kug.ac.at;
+#X text 102 493 IEM KUG;
+#X text 77 505 graz \, austria 2002;
+#X text 11 6 dollarg;
+#X text 93 7 receives the parent initial arguments <list> \, like a
+$n;
+#X text 250 61 into internal buffer and to output;
+#X text 83 406 or output float or symbol of list-atom at index (if
+input:;
+#X text 235 47 at creation-time dollarg copy parent initial arguments
+;
+#X text 302 88 pargs = parent arguments;
+#X text 302 101 n_pa = number of pargs;
+#X text 468 347 output n_pa (if input: n = 0 \, or bang);
+#X text 471 363 or output index of parg (if input: n != 0);
+#X text 475 378 or output 0 (if input: n > n_pa);
+#X text 82 389 output list of pargs (if input: n = 0 \, or bang);
+#X text 485 402 -n_pa <= n <= n_pa);
+#X text 276 149 if (input == bang) -> dollarg output all pargs;
+#X text 302 181 if (input = 0) -> dollarg output all pargs;
+#X text 302 195 if (input > 0) -> dollarg output the n-th parg;
+#X text 526 207 (n_pa + 1 + input)-th parg;
+#X text 304 208 if (input < 0) -> dollarg output the;
+#X connect 0 0 2 0;
+#X connect 0 0 6 0;
+#X connect 0 1 3 0;
+#X connect 0 1 5 0;
+#X connect 1 0 0 0;
+#X connect 4 0 0 0;
+#X connect 6 0 7 0;
+#X connect 8 0 0 0;
diff --git a/iemabs/testtone~.pd b/iemabs/testtone~.pd
new file mode 100644
index 0000000..bc7f490
--- /dev/null
+++ b/iemabs/testtone~.pd
@@ -0,0 +1,32 @@
+#N canvas 153 297 247 352 10;
+#X obj 25 58 inlet;
+#X obj 25 114 mtof;
+#X obj 25 142 pack 440 100;
+#X obj 25 163 line~;
+#X obj 25 206 outlet~;
+#X obj 100 210 outlet;
+#X obj 92 57 inlet;
+#X obj 25 185 osc~;
+#X obj 92 83 init \$1;
+#X obj 92 102 split 20;
+#X text 5 270 (c) musil@iem.kug.ac.at;
+#X text 47 283 IEM KUG;
+#X text 22 295 graz \, austria 2001;
+#X text 8 10 testtone~;
+#X text 28 40 midi;
+#X text 93 40 interpol-time;
+#X text 17 223 sig-cosine;
+#X text 96 225 frequency;
+#X text 95 169 1.arg: <float> interpol-;
+#X text 164 179 time in ms;
+#X obj 25 84 init 69;
+#X connect 0 0 20 0;
+#X connect 1 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 1 2 1;
+#X connect 20 0 1 0;
diff --git a/iemabs/toggle.pd b/iemabs/toggle.pd
new file mode 100644
index 0000000..b094dce
--- /dev/null
+++ b/iemabs/toggle.pd
@@ -0,0 +1,273 @@
+#N canvas 201 120 395 362 10;
+#X obj 1 1 cnv 8 100 60 empty empty toggle=tgl 20 20 1 18 -262144 -1109
+0;
+#X text 21 296 (c) musil@iem.kug.ac.at;
+#X text 63 309 IEM KUG;
+#X text 38 321 graz \, austria 2001;
+#X text 115 41 click properties to;
+#X text 103 52 modify geometry \, colors \, etc.;
+#X obj 168 113 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 168 179 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 168 133 s foo6_rcv;
+#X obj 168 159 r foo6_snd;
+#X text 153 14 gui-toggle:;
+#X obj 26 270 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 10 117 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 26 39 33;
+#X obj 26 180 tgl 60 1 foo6_snd foo6_rcv big_toggle 63 20 194 13 -228992
+-4033 -34 1 1;
+#X msg 42 79 1;
+#X msg 49 99 0;
+#X floatatom 26 249 4 0 0;
+#X msg 33 59 -0.001;
+#X msg 103 135 set 1;
+#X msg 108 157 set 0;
+#X obj 3 155 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 65 249 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 95 114 set -0.23;
+#X obj 189 93 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 188 179 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 93 93 0 3 4.55;
+#X msg 85 73 0.22 0 -5.44;
+#X msg 189 113 set \$1;
+#X text 96 222 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 95 233 for moving selected gui-objects;
+#N canvas 440 175 699 530 edit 0;
+#X msg 47 151 \; foo6_rcv color \$1 \$2 \$3;
+#X obj 47 126 pack 0 0 0;
+#X obj 47 98 f;
+#X msg 24 50 bang;
+#X floatatom 63 48 3 0 29;
+#X floatatom 79 68 3 0 29;
+#X floatatom 112 84 3 0 29;
+#X text 91 48 background;
+#X text 106 68 front-color;
+#X text 140 85 label-color;
+#X obj 49 223 f;
+#X msg 27 202 bang;
+#X floatatom 65 201 3 63 88;
+#X floatatom 100 223 3 0 37;
+#X obj 49 246 pack 0 0;
+#X text 127 223 y-label;
+#X text 93 201 x-label;
+#X msg 49 271 \; foo6_rcv label_pos \$1 \$2;
+#X floatatom 505 55 3 8 75;
+#X text 532 55 size;
+#X msg 505 76 \; foo6_rcv size \$1;
+#X obj 282 182 f;
+#X msg 260 161 bang;
+#X floatatom 298 160 3 -10 10;
+#X floatatom 333 182 3 -10 10;
+#X obj 282 205 pack 0 0;
+#X msg 282 230 \; foo6_rcv delta \$1 \$2;
+#X obj 296 301 f;
+#X msg 274 280 bang;
+#X floatatom 312 279 3 20 60;
+#X floatatom 347 301 3 150 200;
+#X obj 296 324 pack 0 0;
+#X msg 296 349 \; foo6_rcv pos \$1 \$2;
+#X text 326 160 x-delta;
+#X text 360 182 y-delta;
+#X text 340 279 x-position;
+#X text 374 301 y-position;
+#X obj 305 423 f;
+#X msg 283 402 bang;
+#X floatatom 321 401 3 -10 10;
+#X floatatom 356 423 3 -10 10;
+#X obj 305 446 pack 0 0;
+#X text 383 423 y-label;
+#X text 349 401 x-label;
+#X msg 305 471 \; foo6_rcv delta \$1 \$2;
+#X msg 499 140 \; foo6_rcv send foo6a_snd;
+#X msg 499 178 \; foo6_rcv send foo6_snd;
+#X msg 494 216 \; foo6_rcv receive foo6a_rcv;
+#X msg 494 254 \; foo6a_rcv receive foo6_rcv;
+#X msg 41 448 \; foo6_rcv label blabla;
+#X msg 41 484 \; foo6_rcv label big_toggle;
+#X obj 69 338 f;
+#X msg 47 317 bang;
+#X floatatom 85 316 3 0 2;
+#X floatatom 120 338 3 4 36;
+#X obj 69 361 pack 0 0;
+#X msg 69 386 \; foo6_rcv label_font \$1 \$2;
+#X text 113 316 font;
+#X text 149 338 height;
+#X floatatom 498 307 5 -200 200;
+#X text 542 307 nonzero-value;
+#X msg 498 331 \; foo6_rcv nonzero \$1;
+#X msg 503 412 \; foo6_rcv init 0;
+#X msg 510 479 \; foo6_rcv init 1;
+#X text 524 393 no init;
+#X text 500 461 init value on loadbang;
+#X msg 285 47 back;
+#X msg 285 67 front;
+#X msg 285 87 label;
+#X msg 247 47 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 108 pd RGB_____________;
+#X floatatom 327 77 3 0 255;
+#X floatatom 370 77 3 0 255;
+#X floatatom 413 78 3 0 255;
+#X text 34 22 preset-colors;
+#X text 296 19 RGB-colors;
+#X text 327 59 red;
+#X text 363 58 green;
+#X text 411 58 blue;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 1;
+#X connect 5 0 1 1;
+#X connect 6 0 1 2;
+#X connect 10 0 14 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 1;
+#X connect 13 0 14 1;
+#X connect 14 0 17 0;
+#X connect 18 0 20 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 26 0;
+#X connect 27 0 31 0;
+#X connect 28 0 27 0;
+#X connect 29 0 27 1;
+#X connect 30 0 31 1;
+#X connect 31 0 32 0;
+#X connect 37 0 41 0;
+#X connect 38 0 37 0;
+#X connect 39 0 37 1;
+#X connect 40 0 41 1;
+#X connect 41 0 44 0;
+#X connect 51 0 55 0;
+#X connect 52 0 51 0;
+#X connect 53 0 51 1;
+#X connect 54 0 55 1;
+#X connect 55 0 56 0;
+#X connect 59 0 61 0;
+#X connect 66 0 70 0;
+#X connect 67 0 70 0;
+#X connect 68 0 70 0;
+#X connect 69 0 70 0;
+#X connect 70 0 1 0;
+#X connect 70 1 1 1;
+#X connect 70 2 1 2;
+#X connect 71 0 70 1;
+#X connect 72 0 70 2;
+#X connect 73 0 70 3;
+#X restore 278 136 pd edit;
+#X text 191 320 updated for Pd version 0.34;
+#X obj 127 255 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 222 276 tgl 15 0 bbb bbb empty 20 8 192 8 -262144 -1 -1 1 1
+;
+#X connect 6 0 8 0;
+#X connect 9 0 7 0;
+#X connect 9 0 25 0;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X connect 14 0 17 0;
+#X connect 14 0 22 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
+#X connect 19 0 14 0;
+#X connect 20 0 14 0;
+#X connect 21 0 14 0;
+#X connect 23 0 14 0;
+#X connect 24 0 28 0;
+#X connect 26 0 14 0;
+#X connect 27 0 14 0;
+#X connect 28 0 8 0;
diff --git a/iemabs/unsig~.pd b/iemabs/unsig~.pd
new file mode 100644
index 0000000..a9d39b4
--- /dev/null
+++ b/iemabs/unsig~.pd
@@ -0,0 +1,24 @@
+#N canvas 320 149 271 319 10;
+#X obj 22 42 inlet~;
+#X text 13 256 (c) musil@iem.kug.ac.at;
+#X text 55 269 IEM KUG;
+#X text 62 42 ~signal_in~;
+#X text 30 281 graz \, austria 2001;
+#X text 12 8 unsig~;
+#X obj 22 221 outlet;
+#X text 69 222 float-out;
+#X text 67 9 grab every metrotime one sample;
+#X obj 22 195 snapshot~;
+#X obj 39 172 metro 300;
+#X obj 39 81 loadbang;
+#X obj 39 106 t b b;
+#X obj 64 128 f \$1;
+#X obj 64 148 sel 0;
+#X connect 0 0 9 0;
+#X connect 9 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
+#X connect 12 1 13 0;
+#X connect 13 0 14 0;
+#X connect 14 1 10 1;
diff --git a/iemabs/vcf_bp2~.pd b/iemabs/vcf_bp2~.pd
new file mode 100644
index 0000000..47bcfb6
--- /dev/null
+++ b/iemabs/vcf_bp2~.pd
@@ -0,0 +1,23 @@
+#N canvas 216 218 415 401 10;
+#X obj 22 42 inlet~;
+#X obj 22 288 outlet~;
+#X text 14 332 (c) musil@iem.kug.ac.at;
+#X text 56 345 IEM KUG;
+#X text 71 41 ~signal_in~;
+#X text 32 256 ~filtered signal_out~;
+#X text 138 283 no arg.;
+#X obj 67 69 inlet~;
+#X obj 133 98 inlet~;
+#X text 179 98 <signal> Q [-];
+#X text 31 357 graz \, austria 2003;
+#X text 130 20 for frequency and Q;
+#X text 113 70 <signal> center_frequency [Hz];
+#X obj 67 135 iem_cot4~;
+#X text 12 8 vcf_bp2~;
+#X text 85 8 bandpass 2.order with signal-inlets;
+#X obj 22 237 vcf_filter~ rbp;
+#X connect 0 0 16 0;
+#X connect 7 0 13 0;
+#X connect 8 0 16 2;
+#X connect 13 0 16 1;
+#X connect 16 0 1 0;
diff --git a/iemabs/vcf_bp4~.pd b/iemabs/vcf_bp4~.pd
new file mode 100644
index 0000000..efda8c7
--- /dev/null
+++ b/iemabs/vcf_bp4~.pd
@@ -0,0 +1,29 @@
+#N canvas 230 138 453 493 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 76 inlet~;
+#X obj 148 107 inlet~;
+#X text 194 107 <signal> Q [-];
+#X text 12 8 vcf_bp4~;
+#X text 110 77 <signal> center_frequency [Hz];
+#X obj 20 269 vcf_filter~ bp2;
+#X obj 20 307 vcf_filter~ bp2;
+#X text 135 6 bandpass 4.order with signal-inlets;
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 148 130 *~ 0.6432;
+#X obj 63 162 iem_cot4~;
+#X connect 0 0 12 0;
+#X connect 7 0 18 0;
+#X connect 8 0 17 0;
+#X connect 12 0 13 0;
+#X connect 13 0 1 0;
+#X connect 17 0 12 2;
+#X connect 17 0 13 2;
+#X connect 18 0 12 1;
+#X connect 18 0 13 1;
diff --git a/iemabs/vcf_bp6~.pd b/iemabs/vcf_bp6~.pd
new file mode 100644
index 0000000..c293e8a
--- /dev/null
+++ b/iemabs/vcf_bp6~.pd
@@ -0,0 +1,33 @@
+#N canvas 216 218 447 487 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 63 75 inlet~;
+#X obj 143 102 inlet~;
+#X text 189 102 <signal> Q [-];
+#X text 109 76 <signal> center_frequency [Hz];
+#X obj 20 283 vcf_filter~ bp2;
+#X obj 20 307 vcf_filter~ bp2;
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X text 12 8 vcf_bp6~;
+#X text 135 6 bandpass 6.order with signal-inlets;
+#X obj 20 258 vcf_filter~ bp2;
+#X obj 143 150 *~ 0.51;
+#X obj 62 164 iem_cot4~;
+#X connect 0 0 17 0;
+#X connect 7 0 19 0;
+#X connect 8 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 17 0 11 0;
+#X connect 18 0 17 2;
+#X connect 18 0 11 2;
+#X connect 18 0 12 2;
+#X connect 19 0 17 1;
+#X connect 19 0 11 1;
+#X connect 19 0 12 1;
diff --git a/iemabs/vcf_bp8~.pd b/iemabs/vcf_bp8~.pd
new file mode 100644
index 0000000..274aeca
--- /dev/null
+++ b/iemabs/vcf_bp8~.pd
@@ -0,0 +1,37 @@
+#N canvas 505 181 449 489 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 62 76 inlet~;
+#X obj 153 103 inlet~;
+#X text 199 103 <signal> Q [-];
+#X text 108 77 <signal> center_frequency [Hz];
+#X obj 20 283 vcf_filter~ bp2;
+#X obj 20 307 vcf_filter~ bp2;
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 20 258 vcf_filter~ bp2;
+#X text 12 8 vcf_bp8~;
+#X text 134 6 bandpass 8.order with signal-inlets;
+#X obj 20 229 vcf_filter~ bp2;
+#X obj 63 173 iem_cot4~;
+#X obj 153 134 *~ 0.4345;
+#X connect 0 0 18 0;
+#X connect 7 0 19 0;
+#X connect 8 0 20 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 15 0 11 0;
+#X connect 18 0 15 0;
+#X connect 19 0 11 1;
+#X connect 19 0 12 1;
+#X connect 19 0 15 1;
+#X connect 19 0 18 1;
+#X connect 20 0 18 2;
+#X connect 20 0 15 2;
+#X connect 20 0 11 2;
+#X connect 20 0 12 2;
diff --git a/iemabs/vcf_hp2~.pd b/iemabs/vcf_hp2~.pd
new file mode 100644
index 0000000..d526a54
--- /dev/null
+++ b/iemabs/vcf_hp2~.pd
@@ -0,0 +1,22 @@
+#N canvas 216 218 413 399 10;
+#X obj 22 42 inlet~;
+#X obj 22 288 outlet~;
+#X text 14 332 (c) musil@iem.kug.ac.at;
+#X text 56 345 IEM KUG;
+#X text 71 41 ~signal_in~;
+#X text 138 283 no arg.;
+#X obj 66 71 inlet~;
+#X obj 134 96 inlet~;
+#X text 180 96 <signal> Q [-];
+#X text 112 72 <signal> cutoff_frequency [Hz];
+#X text 31 357 graz \, austria 2003;
+#X text 130 20 for frequency and Q;
+#X text 12 8 vcf_hp2~;
+#X text 85 8 highpass 2.order with signal-inlets;
+#X obj 22 237 vcf_filter~ hp2;
+#X obj 65 208 iem_cot~;
+#X connect 0 0 14 0;
+#X connect 6 0 15 0;
+#X connect 7 0 14 2;
+#X connect 14 0 1 0;
+#X connect 15 0 14 1;
diff --git a/iemabs/vcf_hp4~.pd b/iemabs/vcf_hp4~.pd
new file mode 100644
index 0000000..0d50787
--- /dev/null
+++ b/iemabs/vcf_hp4~.pd
@@ -0,0 +1,29 @@
+#N canvas 216 218 445 485 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 77 inlet~;
+#X obj 147 104 inlet~;
+#X text 193 104 <signal> Q [-];
+#X text 110 78 <signal> cutoff_frequency [Hz];
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X text 12 8 vcf_hp4~;
+#X text 136 7 highpass 4.order with signal-inlets;
+#X obj 20 270 vcf_filter~ hp2;
+#X obj 20 307 vcf_filter~ hp2;
+#X obj 63 217 iem_cot4~;
+#X obj 148 132 iem_sqrt4~;
+#X connect 0 0 15 0;
+#X connect 7 0 17 0;
+#X connect 8 0 18 0;
+#X connect 15 0 16 0;
+#X connect 16 0 1 0;
+#X connect 17 0 15 1;
+#X connect 17 0 16 1;
+#X connect 18 0 15 2;
+#X connect 18 0 16 2;
diff --git a/iemabs/vcf_hp6~.pd b/iemabs/vcf_hp6~.pd
new file mode 100644
index 0000000..5d01a83
--- /dev/null
+++ b/iemabs/vcf_hp6~.pd
@@ -0,0 +1,33 @@
+#N canvas 216 218 453 493 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 77 inlet~;
+#X obj 141 104 inlet~;
+#X text 187 104 <signal> Q [-];
+#X text 110 78 <signal> cutoff_frequency [Hz];
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 20 283 vcf_filter~ hp2;
+#X obj 20 307 vcf_filter~ hp2;
+#X text 12 8 vcf_hp6~;
+#X text 136 7 highpass 6.order with signal-inlets;
+#X obj 20 259 vcf_filter~ hp2;
+#X obj 141 173 iem_pow4~ 0.333333;
+#X obj 63 170 iem_cot4~;
+#X connect 0 0 17 0;
+#X connect 7 0 19 0;
+#X connect 8 0 18 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 17 0 13 0;
+#X connect 18 0 17 2;
+#X connect 18 0 13 2;
+#X connect 18 0 14 2;
+#X connect 19 0 13 1;
+#X connect 19 0 14 1;
+#X connect 19 0 17 1;
diff --git a/iemabs/vcf_hp8~.pd b/iemabs/vcf_hp8~.pd
new file mode 100644
index 0000000..668a917
--- /dev/null
+++ b/iemabs/vcf_hp8~.pd
@@ -0,0 +1,39 @@
+#N canvas 216 218 453 493 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 76 inlet~;
+#X obj 133 102 inlet~;
+#X text 179 102 <signal> Q [-];
+#X text 110 77 <signal> cutoff_frequency [Hz];
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 20 283 vcf_filter~ hp2;
+#X obj 20 307 vcf_filter~ hp2;
+#X obj 20 259 vcf_filter~ hp2;
+#X text 12 8 vcf_hp8~;
+#X text 136 7 highpass 8.order with signal-inlets;
+#X obj 20 235 vcf_filter~ hp2;
+#X obj 63 159 iem_cot4~;
+#X obj 133 125 iem_sqrt4~;
+#X obj 133 146 iem_sqrt4~;
+#X connect 0 0 18 0;
+#X connect 7 0 19 0;
+#X connect 8 0 20 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 15 0 13 0;
+#X connect 18 0 15 0;
+#X connect 19 0 13 1;
+#X connect 19 0 14 1;
+#X connect 19 0 15 1;
+#X connect 19 0 18 1;
+#X connect 20 0 21 0;
+#X connect 21 0 18 2;
+#X connect 21 0 15 2;
+#X connect 21 0 13 2;
+#X connect 21 0 14 2;
diff --git a/iemabs/vcf_lp2~.pd b/iemabs/vcf_lp2~.pd
new file mode 100644
index 0000000..a064e01
--- /dev/null
+++ b/iemabs/vcf_lp2~.pd
@@ -0,0 +1,23 @@
+#N canvas 216 218 411 397 10;
+#X obj 22 42 inlet~;
+#X obj 22 288 outlet~;
+#X text 14 332 (c) musil@iem.kug.ac.at;
+#X text 56 345 IEM KUG;
+#X text 71 41 ~signal_in~;
+#X text 32 256 ~filtered signal_out~;
+#X text 12 8 vcf_lp2~;
+#X text 138 283 no arg.;
+#X obj 64 70 inlet~;
+#X obj 133 97 inlet~;
+#X text 179 97 <signal> Q [-];
+#X text 110 71 <signal> cutoff_frequency [Hz];
+#X obj 22 237 vcf_filter~ lp2;
+#X text 31 357 graz \, austria 2003;
+#X text 85 8 lowpass 2.order with signal-inlets;
+#X text 130 20 for frequency and Q;
+#X obj 63 206 iem_cot~;
+#X connect 0 0 12 0;
+#X connect 8 0 16 0;
+#X connect 9 0 12 2;
+#X connect 12 0 1 0;
+#X connect 16 0 12 1;
diff --git a/iemabs/vcf_lp4~.pd b/iemabs/vcf_lp4~.pd
new file mode 100644
index 0000000..7e68c84
--- /dev/null
+++ b/iemabs/vcf_lp4~.pd
@@ -0,0 +1,29 @@
+#N canvas 216 218 443 483 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 76 inlet~;
+#X obj 130 103 inlet~;
+#X text 176 103 <signal> Q [-];
+#X text 110 77 <signal> cutoff_frequency [Hz];
+#X text 12 8 vcf_lp4~;
+#X obj 20 270 vcf_filter~ lp2;
+#X obj 20 307 vcf_filter~ lp2;
+#X text 136 7 lowpass 4.order with signal-inlets;
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 63 216 iem_cot4~;
+#X obj 130 132 iem_sqrt4~;
+#X connect 0 0 12 0;
+#X connect 7 0 17 0;
+#X connect 8 0 18 0;
+#X connect 12 0 13 0;
+#X connect 13 0 1 0;
+#X connect 17 0 12 1;
+#X connect 17 0 13 1;
+#X connect 18 0 12 2;
+#X connect 18 0 13 2;
diff --git a/iemabs/vcf_lp6~.pd b/iemabs/vcf_lp6~.pd
new file mode 100644
index 0000000..d1d8390
--- /dev/null
+++ b/iemabs/vcf_lp6~.pd
@@ -0,0 +1,33 @@
+#N canvas 216 218 447 487 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 64 76 inlet~;
+#X obj 128 104 inlet~;
+#X text 174 104 <signal> Q [-];
+#X text 110 77 <signal> cutoff_frequency [Hz];
+#X obj 20 270 vcf_filter~ lp2;
+#X obj 20 307 vcf_filter~ lp2;
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X text 12 8 vcf_lp6~;
+#X text 136 7 lowpass 6.order with signal-inlets;
+#X obj 20 227 vcf_filter~ lp2;
+#X obj 63 161 iem_cot4~;
+#X obj 128 162 iem_pow4~ 0.333333;
+#X connect 0 0 17 0;
+#X connect 7 0 18 0;
+#X connect 8 0 19 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 17 0 11 0;
+#X connect 18 0 11 1;
+#X connect 18 0 12 1;
+#X connect 18 0 17 1;
+#X connect 19 0 17 2;
+#X connect 19 0 11 2;
+#X connect 19 0 12 2;
diff --git a/iemabs/vcf_lp8~.pd b/iemabs/vcf_lp8~.pd
new file mode 100644
index 0000000..96e3454
--- /dev/null
+++ b/iemabs/vcf_lp8~.pd
@@ -0,0 +1,39 @@
+#N canvas 216 218 449 489 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 63 76 inlet~;
+#X obj 132 102 inlet~;
+#X text 178 102 <signal> Q [-];
+#X text 109 77 <signal> cutoff_frequency [Hz];
+#X obj 20 285 vcf_filter~ lp2;
+#X obj 20 307 vcf_filter~ lp2;
+#X text 168 19 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 20 263 vcf_filter~ lp2;
+#X text 12 8 vcf_lp8~;
+#X text 136 7 lowpass 8.order with signal-inlets;
+#X obj 20 241 vcf_filter~ lp2;
+#X obj 63 163 iem_cot4~;
+#X obj 132 127 iem_sqrt4~;
+#X obj 132 150 iem_sqrt4~;
+#X connect 0 0 18 0;
+#X connect 7 0 19 0;
+#X connect 8 0 20 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 15 0 11 0;
+#X connect 18 0 15 0;
+#X connect 19 0 11 1;
+#X connect 19 0 12 1;
+#X connect 19 0 15 1;
+#X connect 19 0 18 1;
+#X connect 20 0 21 0;
+#X connect 21 0 18 2;
+#X connect 21 0 15 2;
+#X connect 21 0 11 2;
+#X connect 21 0 12 2;
diff --git a/iemabs/vcf_rbp2~.pd b/iemabs/vcf_rbp2~.pd
new file mode 100644
index 0000000..90beaac
--- /dev/null
+++ b/iemabs/vcf_rbp2~.pd
@@ -0,0 +1,23 @@
+#N canvas 216 218 413 399 10;
+#X obj 22 42 inlet~;
+#X obj 22 288 outlet~;
+#X text 14 332 (c) musil@iem.kug.ac.at;
+#X text 56 345 IEM KUG;
+#X text 71 41 ~signal_in~;
+#X text 32 256 ~filtered signal_out~;
+#X text 138 283 no arg.;
+#X obj 67 69 inlet~;
+#X obj 133 98 inlet~;
+#X text 179 98 <signal> Q [-];
+#X text 31 357 graz \, austria 2003;
+#X text 130 20 for frequency and Q;
+#X text 113 70 <signal> center_frequency [Hz];
+#X text 12 8 vcf_rbp2~;
+#X text 85 8 resonance-bandpass 2.order with signal-inlets;
+#X obj 22 237 vcf_filter~ rbp2;
+#X obj 67 135 iem_cot4~;
+#X connect 0 0 15 0;
+#X connect 7 0 16 0;
+#X connect 8 0 15 2;
+#X connect 15 0 1 0;
+#X connect 16 0 15 1;
diff --git a/iemabs/vcf_rbp4~.pd b/iemabs/vcf_rbp4~.pd
new file mode 100644
index 0000000..771a7a4
--- /dev/null
+++ b/iemabs/vcf_rbp4~.pd
@@ -0,0 +1,29 @@
+#N canvas 216 218 441 481 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 67 76 inlet~;
+#X obj 132 102 inlet~;
+#X text 178 102 <signal> Q [-];
+#X text 113 77 <signal> center_frequency [Hz];
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X text 12 8 vcf_rbp4~;
+#X text 114 6 resonance-bandpass 4.order with signal-inlets;
+#X obj 20 269 vcf_filter~ rbp2;
+#X obj 20 307 vcf_filter~ rbp2;
+#X obj 66 160 iem_cot4~;
+#X obj 132 151 *~ 0.6432;
+#X connect 0 0 15 0;
+#X connect 7 0 17 0;
+#X connect 8 0 18 0;
+#X connect 15 0 16 0;
+#X connect 16 0 1 0;
+#X connect 17 0 15 1;
+#X connect 17 0 16 1;
+#X connect 18 0 15 2;
+#X connect 18 0 16 2;
diff --git a/iemabs/vcf_rbp6~.pd b/iemabs/vcf_rbp6~.pd
new file mode 100644
index 0000000..1eda202
--- /dev/null
+++ b/iemabs/vcf_rbp6~.pd
@@ -0,0 +1,33 @@
+#N canvas 300 199 445 485 10;
+#X obj 20 48 inlet~;
+#X obj 20 358 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 67 77 inlet~;
+#X obj 135 103 inlet~;
+#X text 181 103 <signal> Q [-];
+#X text 113 78 <signal> center_frequency [Hz];
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 20 280 vcf_filter~ rbp2;
+#X obj 20 307 vcf_filter~ rbp2;
+#X text 12 8 vcf_rbp6~;
+#X text 114 6 resonance-bandpass 6.order with signal-inlets;
+#X obj 20 249 vcf_filter~ rbp2;
+#X obj 66 156 iem_cot4~;
+#X obj 136 147 *~ 0.51;
+#X connect 0 0 17 0;
+#X connect 7 0 18 0;
+#X connect 8 0 19 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 17 0 13 0;
+#X connect 18 0 13 1;
+#X connect 18 0 14 1;
+#X connect 18 0 17 1;
+#X connect 19 0 17 2;
+#X connect 19 0 13 2;
+#X connect 19 0 14 2;
diff --git a/iemabs/vcf_rbp8~.pd b/iemabs/vcf_rbp8~.pd
new file mode 100644
index 0000000..ed97d23
--- /dev/null
+++ b/iemabs/vcf_rbp8~.pd
@@ -0,0 +1,37 @@
+#N canvas 216 218 451 491 10;
+#X obj 20 48 inlet~;
+#X obj 21 357 outlet~;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 69 47 ~signal_in~;
+#X text 30 326 ~filtered signal_out~;
+#X text 136 353 no arg.;
+#X obj 66 78 inlet~;
+#X obj 132 101 inlet~;
+#X text 178 101 <signal> Q [-];
+#X text 112 79 <signal> center_frequency [Hz];
+#X text 167 20 for frequency and Q;
+#X text 29 427 graz \, austria 2003;
+#X obj 21 275 vcf_filter~ rbp2;
+#X obj 21 302 vcf_filter~ rbp2;
+#X obj 21 244 vcf_filter~ rbp2;
+#X obj 21 217 vcf_filter~ rbp2;
+#X text 114 6 resonance-bandpass 8.order with signal-inlets;
+#X text 12 8 vcf_rbp8~;
+#X obj 132 140 *~ 0.4345;
+#X obj 66 139 iem_cot4~;
+#X connect 0 0 16 0;
+#X connect 7 0 20 0;
+#X connect 8 0 19 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 15 0 13 0;
+#X connect 16 0 15 0;
+#X connect 19 0 16 2;
+#X connect 19 0 15 2;
+#X connect 19 0 13 2;
+#X connect 19 0 14 2;
+#X connect 20 0 13 1;
+#X connect 20 0 14 1;
+#X connect 20 0 15 1;
+#X connect 20 0 16 1;
diff --git a/iemabs/vdial.pd b/iemabs/vdial.pd
new file mode 100644
index 0000000..31df3e1
--- /dev/null
+++ b/iemabs/vdial.pd
@@ -0,0 +1,285 @@
+#N canvas 544 154 329 467 10;
+#X obj 1 1 cnv 8 100 60 empty empty vdial=vdl 20 20 1 18 -262144 -1109
+0;
+#X text 82 407 (c) musil@iem.kug.ac.at;
+#X text 124 420 IEM KUG;
+#X text 99 432 graz \, austria 2001;
+#X text 109 130 click properties to;
+#X text 97 141 modify geometry \, colors \, etc.;
+#X obj 60 254 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 59 206 s foo11_rcv;
+#X obj 60 232 r foo11_snd;
+#X obj 21 118 vdl 25 1 1 10 foo11_snd foo11_rcv radio_0_9 32 12 192
+10 -99865 -262144 -260818 0;
+#X msg 21 376 \$1;
+#X floatatom 21 398 4 0 0;
+#X obj 21 420 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 103 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X obj 103 368 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 157 73 set \$1;
+#X floatatom 157 52 4 0 9;
+#X floatatom 44 54 4 0 9;
+#X msg 84 50 7 0 -5.44;
+#X msg 88 72 3 3 4.55;
+#X obj 120 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 137 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 154 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 171 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 188 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 205 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 222 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 239 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 256 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 58 372 print;
+#X floatatom 84 280 4 0 0;
+#X msg 84 254 \$1;
+#X msg 59 185 set \$1;
+#X floatatom 59 164 4 0 9;
+#X text 60 334 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 59 345 for moving selected gui-objects;
+#N canvas 222 207 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156;
+#X floatatom 93 198 3 -20 37;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10;
+#X floatatom 337 293 3 -10 10;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60;
+#X floatatom 351 412 3 100 200;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2;
+#X floatatom 113 313 3 4 36;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20;
+#X msg 47 125 \; foo11_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo11_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo11_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo11_rcv label blabla;
+#X msg 300 460 \; foo11_rcv pos \$1 \$2;
+#X msg 286 341 \; foo11_rcv delta \$1 \$2;
+#X msg 270 216 \; foo11_rcv size \$1;
+#X msg 482 171 \; foo11a_rcv receive foo11_rcv;
+#X msg 483 133 \; foo11_rcv receive foo11a_rcv;
+#X msg 483 88 \; foo11_rcv send foo11_snd;
+#X msg 483 50 \; foo11_rcv send foo11a_snd;
+#X msg 483 312 \; foo11_rcv init 0;
+#X msg 485 366 \; foo11_rcv init 1;
+#X msg 490 436 \; foo11_rcv single_change;
+#X msg 490 470 \; foo11_rcv double_change;
+#X text 491 417 changing-behavior;
+#X msg 482 254 \; foo11_rcv number \$1;
+#X text 526 228 number of buttons;
+#X msg 34 459 \; foo11_rcv label radio_0_9;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29;
+#X floatatom 79 46 3 0 29;
+#X floatatom 112 62 3 0 29;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255;
+#X floatatom 370 55 3 0 255;
+#X floatatom 413 56 3 0 255;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 34 0;
+#X connect 7 0 39 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 38 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 37 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 35 0;
+#X connect 32 0 49 0;
+#X connect 52 0 33 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 55 0 53 1;
+#X connect 56 0 52 1;
+#X connect 57 0 52 2;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 65 0 52 0;
+#X connect 65 1 52 1;
+#X connect 65 2 52 2;
+#X connect 66 0 65 1;
+#X connect 67 0 65 2;
+#X connect 68 0 65 3;
+#X restore 166 220 pd edit;
+#X text 88 306 updated for Pd version 0.34;
+#X obj 257 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X text 117 12 gui-vertical dial:;
+#X obj 231 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X obj 244 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X connect 7 0 10 0;
+#X connect 9 0 6 0;
+#X connect 9 0 32 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 10 0 30 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 21 0;
+#X connect 15 2 22 0;
+#X connect 15 3 23 0;
+#X connect 15 4 24 0;
+#X connect 15 5 25 0;
+#X connect 15 6 26 0;
+#X connect 15 7 27 0;
+#X connect 15 8 28 0;
+#X connect 15 9 29 0;
+#X connect 16 0 10 0;
+#X connect 17 0 16 0;
+#X connect 18 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 32 0 31 0;
+#X connect 33 0 8 0;
+#X connect 34 0 33 0;
diff --git a/iemabs/vslider.pd b/iemabs/vslider.pd
new file mode 100644
index 0000000..c5b4a1c
--- /dev/null
+++ b/iemabs/vslider.pd
@@ -0,0 +1,302 @@
+#N canvas 143 181 467 416 10;
+#X obj 1 1 cnv 8 100 60 empty empty vslider=vsl 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 300 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 43 7 0 0;
+#X text 25 363 (c) musil@iem.kug.ac.at;
+#X text 67 376 IEM KUG;
+#X text 42 388 graz \, austria 2001;
+#X obj 38 324 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 47 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 47 63 7 0 0;
+#X floatatom 116 324 9 0 0;
+#X floatatom 106 42 7 0 0;
+#X floatatom 147 113 7 0 0;
+#X obj 75 249 ftom;
+#X floatatom 75 271 9 0 0;
+#X floatatom 111 244 9 0 0;
+#X floatatom 185 266 9 0 0;
+#X text 181 151 click properties to;
+#X floatatom 75 112 9 0 0;
+#X obj 75 134 mtof;
+#X text 166 12 gui-vertical-slider:;
+#X obj 38 162 vsl 15 101 100 300 0 1 foo3_snd foo3_rcv empty 8 -8 192
+10 -225280 -1109 -1 2500 1;
+#X obj 75 168 vsl 15 73 55 3520 1 1 goo4_snd goo4_rcv log.freq. 11
+-6 192 10 -261681 -260818 -90881 0 1;
+#X obj 185 244 r goo4_snd;
+#X obj 147 133 s goo4_rcv;
+#X text 202 65 (0.01 pixels);
+#X text 57 99 ------------------------------------------;
+#X text 57 286 --------------------------------------------;
+#X text 169 162 modify geometry \, colors \, etc.;
+#X obj 106 84 s foo3_rcv;
+#X obj 116 302 r foo3_snd;
+#X msg 106 63 set \$1;
+#X text 188 44 shift-click & drag;
+#X text 194 54 for fine-tuning;
+#X text 119 192 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 118 203 for moving selected gui-objects;
+#N canvas 239 379 699 530 edit 0;
+#X obj 37 233 f;
+#X msg 15 212 bang;
+#X floatatom 53 211 3 6 88;
+#X floatatom 88 233 3 -20 37;
+#X obj 37 256 pack 0 0;
+#X text 115 233 y-label;
+#X text 81 211 x-label;
+#X obj 287 271 f;
+#X msg 265 250 bang;
+#X floatatom 303 249 3 -10 10;
+#X floatatom 338 271 3 -10 10;
+#X obj 287 294 pack 0 0;
+#X obj 299 381 f;
+#X msg 277 360 bang;
+#X floatatom 315 359 3 20 90;
+#X floatatom 350 381 3 150 200;
+#X obj 299 404 pack 0 0;
+#X text 331 249 x-delta;
+#X text 365 271 y-delta;
+#X text 343 359 x-position;
+#X text 377 381 y-position;
+#X obj 57 348 f;
+#X msg 35 327 bang;
+#X floatatom 73 326 3 0 2;
+#X floatatom 108 348 3 4 36;
+#X obj 57 371 pack 0 0;
+#X text 101 326 font;
+#X text 137 348 height;
+#X floatatom 476 188 1 0 1;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X text 520 188 steady;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 4 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X text 269 469 linear / logarithmical;
+#X msg 47 158 \; goo4_rcv color \$1 \$2 \$3;
+#X msg 37 281 \; goo4_rcv label_pos \$1 \$2;
+#X msg 57 396 \; goo4_rcv label_font \$1 \$2;
+#X msg 40 442 \; goo4_rcv label blabla;
+#X msg 269 487 \; goo4_rcv lin;
+#X msg 363 486 \; goo4_rcv log;
+#X msg 299 429 \; goo4_rcv pos \$1 \$2;
+#X msg 287 319 \; goo4_rcv delta \$1 \$2;
+#X msg 475 21 \; goo4_rcv send goo4a_snd;
+#X msg 475 59 \; goo4_rcv send goo4_snd;
+#X msg 476 105 \; goo4_rcv receive goo4a_rcv;
+#X msg 476 143 \; goo4a_rcv receive goo4_rcv;
+#X msg 486 339 \; goo4_rcv range \$1 \$2;
+#X msg 502 420 \; goo4_rcv init 0;
+#X msg 503 471 \; goo4_rcv init 1;
+#X text 539 270 bottom-range-bound;
+#X text 586 292 top-range-bound;
+#X obj 286 160 f;
+#X msg 264 139 bang;
+#X floatatom 302 138 3 4 55;
+#X floatatom 337 160 3 15 73;
+#X obj 286 183 pack 0 0;
+#X msg 286 208 \; goo4_rcv size \$1 \$2;
+#X text 330 138 width;
+#X text 368 161 height;
+#X msg 41 478 \; goo4_rcv label log.freq.;
+#X msg 476 212 \; goo4_rcv steady \$1;
+#X obj 47 116 pack 0 0 0;
+#X obj 47 88 f;
+#X msg 24 40 bang;
+#X floatatom 63 38 3 0 29;
+#X floatatom 79 58 3 0 29;
+#X floatatom 112 74 3 0 29;
+#X text 91 38 background;
+#X text 106 58 front-color;
+#X text 140 75 label-color;
+#X msg 285 37 back;
+#X msg 285 57 front;
+#X msg 285 77 label;
+#X msg 247 37 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 98 pd RGB_____________;
+#X floatatom 327 67 3 0 255;
+#X floatatom 370 67 3 0 255;
+#X floatatom 413 68 3 0 255;
+#X text 34 12 preset-colors;
+#X text 296 9 RGB-colors;
+#X text 327 49 red;
+#X text 363 48 green;
+#X text 411 48 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 39 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 45 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 44 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 40 0;
+#X connect 28 0 64 0;
+#X connect 32 0 36 0;
+#X connect 33 0 32 0;
+#X connect 34 0 32 1;
+#X connect 35 0 36 1;
+#X connect 36 0 50 0;
+#X connect 55 0 59 0;
+#X connect 56 0 55 0;
+#X connect 57 0 55 1;
+#X connect 58 0 59 1;
+#X connect 59 0 60 0;
+#X connect 65 0 38 0;
+#X connect 66 0 65 0;
+#X connect 67 0 66 0;
+#X connect 68 0 66 1;
+#X connect 69 0 65 1;
+#X connect 70 0 65 2;
+#X connect 74 0 78 0;
+#X connect 75 0 78 0;
+#X connect 76 0 78 0;
+#X connect 77 0 78 0;
+#X connect 78 0 65 0;
+#X connect 78 1 65 1;
+#X connect 78 2 65 2;
+#X connect 79 0 78 1;
+#X connect 80 0 78 2;
+#X connect 81 0 78 3;
+#X restore 327 48 pd edit;
+#X text 218 387 updated for Pd version 0.34;
+#X obj 61 345 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 61 322 pd once;
+#X obj 250 87 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 377 110 vsl 15 128 0 127 0 0 ccc ccc empty 20 8 192 8 -262144
+-1 -1 3500 1;
+#X connect 1 0 7 0;
+#X connect 2 0 21 0;
+#X connect 3 0 21 0;
+#X connect 8 0 21 0;
+#X connect 9 0 2 0;
+#X connect 11 0 31 0;
+#X connect 12 0 24 0;
+#X connect 13 0 14 0;
+#X connect 18 0 19 0;
+#X connect 19 0 22 0;
+#X connect 21 0 1 0;
+#X connect 21 0 39 0;
+#X connect 22 0 15 0;
+#X connect 22 0 13 0;
+#X connect 23 0 16 0;
+#X connect 30 0 10 0;
+#X connect 31 0 29 0;
+#X connect 39 0 38 0;
diff --git a/iemabs/vu.pd b/iemabs/vu.pd
new file mode 100644
index 0000000..f57862c
--- /dev/null
+++ b/iemabs/vu.pd
@@ -0,0 +1,248 @@
+#N canvas 167 190 434 418 10;
+#X obj 1 1 cnv 8 100 60 empty empty vu 20 20 1 18 -262144 -1109 0;
+#X text 19 363 (c) musil@iem.kug.ac.at;
+#X text 61 376 IEM KUG;
+#X text 36 388 graz \, austria 2001;
+#X floatatom 177 129 7 -110 20;
+#X text 202 41 click properties to;
+#X text 190 52 modify geometry \, colors \, etc.;
+#X text 49 13 gui-vu-meter-display:;
+#X obj 99 39 tgl 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 12 179 vu 16 120 foo7_rcv vu-meter 60 0 64 10 -1 -16410 1 0
+;
+#X floatatom 11 332 6 0 0;
+#X floatatom 22 310 6 0 0;
+#X text 75 309 dB;
+#X text 63 333 dB;
+#X text 71 128 dB;
+#X text 80 148 dB;
+#X text 103 146 peak-level;
+#X text 101 125 rms-level;
+#X text 96 308 peak-level;
+#X text 83 332 rms-level;
+#X text 108 99 <list> of rms \, peak;
+#X obj 177 231 s foo7_rcv;
+#X obj 177 211 pack 0 0;
+#X floatatom 195 150 7 -110 20;
+#X obj 195 191 t b f;
+#X text 236 129 dB;
+#X text 255 151 dB;
+#X text 71 258 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 70 269 for moving selected gui-objects;
+#X floatatom 11 128 7 -110 20;
+#X floatatom 22 149 7 -110 20;
+#N canvas 236 62 699 530 edit 0;
+#X obj 37 222 f;
+#X msg 15 201 bang;
+#X floatatom 53 200 3 50 88;
+#X floatatom 88 222 3 0 37;
+#X obj 37 245 pack 0 0;
+#X text 115 222 y-label;
+#X text 81 200 x-label;
+#X obj 292 313 f;
+#X msg 270 292 bang;
+#X floatatom 308 291 3 -10 10;
+#X floatatom 343 313 3 -10 10;
+#X obj 292 336 pack 0 0;
+#X obj 304 435 f;
+#X msg 282 414 bang;
+#X floatatom 320 413 3 20 140;
+#X floatatom 355 435 3 150 200;
+#X obj 304 458 pack 0 0;
+#X text 336 291 x-delta;
+#X text 370 313 y-delta;
+#X text 348 413 x-position;
+#X text 382 435 y-position;
+#X obj 57 337 f;
+#X msg 35 316 bang;
+#X floatatom 73 315 3 0 2;
+#X floatatom 108 337 3 8 36;
+#X obj 57 360 pack 0 0;
+#X text 101 315 font;
+#X text 137 337 height;
+#X floatatom 471 106 1 0 1;
+#X msg 52 131 \; foo7_rcv color \$1 \$2;
+#X msg 37 270 \; foo7_rcv label_pos \$1 \$2;
+#X msg 57 386 \; foo7_rcv label_font \$1 \$2;
+#X msg 37 427 \; foo7_rcv label blabla;
+#X msg 292 361 \; foo7_rcv delta \$1 \$2;
+#X msg 304 483 \; foo7_rcv pos \$1 \$2;
+#X msg 469 23 \; foo7_rcv receive foo7a_rcv;
+#X msg 469 60 \; foo7a_rcv receive foo7_rcv;
+#X text 492 106 display scale;
+#X msg 471 132 \; foo7_rcv scale \$1;
+#X obj 279 193 f;
+#X msg 257 172 bang;
+#X floatatom 295 171 3 8 50;
+#X floatatom 330 193 3 110 200;
+#X obj 279 216 pack 0 0;
+#X text 323 171 width;
+#X text 357 193 height;
+#X msg 279 241 \; foo7_rcv size \$1 \$2;
+#X msg 37 463 \; foo7_rcv label vu-meter;
+#X obj 52 79 f;
+#X msg 29 31 bang;
+#X floatatom 68 29 3 0 29;
+#X floatatom 103 47 3 0 29;
+#X text 96 29 background;
+#X text 131 48 label-color;
+#X msg 290 25 back;
+#X msg 290 49 label;
+#X msg 252 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 97 135 route back label bang;
+#X obj 235 168 t b b b;
+#X connect 0 0 29 0;
+#X connect 1 0 25 0;
+#X connect 2 0 26 0;
+#X connect 3 0 27 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 1;
+#X connect 6 0 10 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 1;
+#X connect 9 0 11 1;
+#X connect 10 0 24 1;
+#X connect 11 0 23 1;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 28 0;
+#X connect 22 0 6 0;
+#X connect 23 0 21 0;
+#X connect 24 0 12 0;
+#X connect 25 0 20 0;
+#X connect 26 0 18 0;
+#X connect 27 0 17 0;
+#X connect 28 0 11 0;
+#X connect 28 0 10 0;
+#X connect 29 0 4 0;
+#X connect 29 1 7 0;
+#X connect 29 2 30 0;
+#X connect 30 0 24 0;
+#X connect 30 1 23 0;
+#X connect 30 2 28 0;
+#X restore 290 86 pd RGB_____________;
+#X floatatom 332 55 3 0 255;
+#X floatatom 375 55 3 0 255;
+#X floatatom 418 56 3 0 255;
+#X text 39 3 preset-colors;
+#X text 301 0 RGB-colors;
+#X text 332 37 red;
+#X text 368 36 green;
+#X text 416 36 blue;
+#X obj 52 104 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 30 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 33 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 31 0;
+#X connect 28 0 38 0;
+#X connect 39 0 43 0;
+#X connect 40 0 39 0;
+#X connect 41 0 39 1;
+#X connect 42 0 43 1;
+#X connect 43 0 46 0;
+#X connect 48 0 66 0;
+#X connect 49 0 48 0;
+#X connect 50 0 48 1;
+#X connect 51 0 66 1;
+#X connect 54 0 57 0;
+#X connect 55 0 57 0;
+#X connect 56 0 57 0;
+#X connect 57 0 66 0;
+#X connect 57 1 66 1;
+#X connect 58 0 57 1;
+#X connect 59 0 57 2;
+#X connect 60 0 57 3;
+#X connect 66 0 29 0;
+#X restore 313 188 pd edit;
+#N canvas 147 336 290 278 source 0;
+#X obj 40 95 random 102;
+#X obj 40 171 - 101;
+#X obj 40 205 pack 0 0;
+#X obj 40 45 metro 300;
+#X obj 40 69 t b b;
+#X obj 133 95 random 20;
+#X obj 40 117 t f f;
+#X obj 91 147 +;
+#X obj 91 172 - 101;
+#X obj 40 21 inlet;
+#X obj 40 230 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 1 5 0;
+#X connect 5 0 7 1;
+#X connect 6 0 1 0;
+#X connect 6 1 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 2 1;
+#X connect 9 0 3 0;
+#X restore 99 62 pd source;
+#X text 210 386 updated for Pd version 0.34;
+#X obj 186 301 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 263 94 s fff;
+#X connect 4 0 22 0;
+#X connect 8 0 32 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 22 0 21 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 0;
+#X connect 24 1 22 1;
+#X connect 29 0 9 0;
+#X connect 30 0 9 1;
+#X connect 32 0 9 0;
+#X connect 32 0 35 0;
diff --git a/iemabs/x_all_guis.pd b/iemabs/x_all_guis.pd
new file mode 100644
index 0000000..f6d3380
--- /dev/null
+++ b/iemabs/x_all_guis.pd
@@ -0,0 +1,20 @@
+#N canvas 205 322 280 271 10;
+#X obj 23 31 bng 15 250 50 532480 \$1 \$1 empty 20 8 192 8 -262144
+-1 -1;
+#X obj 23 63 tgl 15 1.06496e+06 \$2 \$2 empty 20 8 192 8 -262144 -1
+-1 0 1;
+#X obj 22 95 vsl 15 128 0 127 0 1.59744e+06 \$3 \$3 empty 20 8 192
+8 -262144 -1 -1 0 1;
+#X obj 65 30 hsl 128 15 0 127 0 2.12992e+06 \$4 \$4 empty 20 8 192
+8 -262144 -1 -1 0 1;
+#X obj 63 63 hdl 15 1 2.6624e+06 8 \$5 \$5 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 62 99 vu 15 120 \$6 empty 35 8 64 8 -66577 -1 1 49152;
+#X obj 115 99 cnv 15 100 60 \$7 \$7 \$7 20 12 917696 14 -233017 -66577
+3.72736e+06;
+#X obj 41 308 inlet;
+#X obj 41 334 outlet;
+#X obj 227 30 vdl 15 1 4.79232e+06 8 \$9 \$9 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 116 176 nbx 5 14 -1e+37 1e+37 0 4.25984e+06 \$8 \$8 empty 45
+7 192 10 -262144 -1 -1 0;
diff --git a/iemabs/xx_xx.wav b/iemabs/xx_xx.wav
new file mode 100644
index 0000000..28c317e
--- /dev/null
+++ b/iemabs/xx_xx.wav
@@ -0,0 +1,10 @@
+0.800011
+0.800011
+-0.571436
+-0.571436
+0.31429
+0.31429
+0.31429
+-0.657152
+0.671438
+0.671438
diff --git a/iemhelp/0.INTRO.txt b/iemhelp/0.INTRO.txt
new file mode 100644
index 0000000..eca41ee
--- /dev/null
+++ b/iemhelp/0.INTRO.txt
@@ -0,0 +1,177 @@
+contents of iemlib Release 1.15 from December 2003
+
+============================ DSP~ ===============================
+
+------------------------- filter~ -------------------------------
+FIR~ finite impuls response filter, with array-coefficients
+
+maverage~ moving average filter, (IIR + delay)
+
+ap1~ allpass 1.order
+ap2~ allpass 2.order
+bpq2~ bandpass 2.order with Q-inlet
+bpw2~ bandpass 2.order with bandwidth-inlet
+bsq2~ bandstop 2.order (notch) with Q-inlet
+bsw2~ bandstop 2.order (notch) with bandwidth-inlet
+hp1~ highpass 1.order
+hp2~ highpass 2.order
+lp1~ lowpass 1.order
+lp2~ lowpass 2.order
+rbpq2~ resonance-bandpass 2.order with Q-inlet
+rbpw2~ resonance-bandpass 2.order with bandwidth-inlet
+
+hml_shelf~ high-middle-low shelving-filter with freq- and gain-inlets
+lp1_t~ lowpass 1.order with time_constant inlet
+para_bp2~ parametrical bandpass 2. order with freq-, Q- and gain-inlet
+
+hp2_butt~, hp3_butt~, hp4_butt~, hp5_butt~, hp6_butt~, hp7_butt~,
+hp8_butt~, hp9_butt~, hp10_butt~
+ highpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+hp2_cheb~, hp3_cheb~, hp4_cheb~, hp5_cheb~, hp6_cheb~, hp7_cheb~,
+hp8_cheb~, hp9_cheb~, hp10_cheb~
+ highpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+hp2_bess~, hp3_bess~, hp4_bess~, hp5_bess~, hp6_bess~, hp7_bess~,
+hp8_bess~, hp9_bess~, hp10_bess~
+ highpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+hp2_crit~, hp3_crit~, hp4_crit~, hp5_crit~, hp6_crit~, hp7_crit~,
+hp8_crit~, hp9_crit~, hp10_crit~
+ highpass 2.3.4.5.6.7.8.9.10.order with critical damping
+lp2_butt~, lp3_butt~, lp4_butt~, lp5_butt~, lp6_butt~, lp7_butt~,
+lp8_butt~, lp9_butt~, lp10_butt~
+ lowpass 2.3.4.5.6.7.8.9.10.order with butterworth characteristic
+lp2_cheb~, lp3_cheb~, lp4_cheb~, lp5_cheb~, lp6_cheb~, lp7_cheb~,
+lp8_cheb~, lp9_cheb~, lp10_cheb~
+ lowpass 2.3.4.5.6.7.8.9.10.order with chebyshev characteristic
+lp2_bess~, lp3_bess~, lp4_bess~, lp5_bess~, lp6_bess~, lp7_bess~,
+lp8_bess~, lp9_bess~, lp10_bess~
+ lowpass 2.3.4.5.6.7.8.9.10.order with bessel characteristic
+lp2_crit~, lp3_crit~, lp4_crit~, lp5_crit~, lp6_crit~, lp7_crit~,
+lp8_crit~, lp9_crit~, lp10_crit~
+ lowpass 2.3.4.5.6.7.8.9.10.order with critical damping
+
+vcf_hp2~, vcf_hp4~, vcf_hp6~, vcf_hp8~
+ highpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_lp2~, vcf_lp4~, vcf_lp6~, vcf_lp8~
+ lowpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_bp2~, vcf_bp4~, vcf_bp6~, vcf_bp8~
+ bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+vcf_rbp2~, vcf_rbp4~, vcf_rbp6~, vcf_rbp8~
+ resonance-bandpass 2.4.6.8.order with freq- and Q-signal-inlets
+
+------------------------ arithmetic~ ----------------------------
+addl~ signal-addition with line~
+divl~ signal-divison with line~
+mull~ signal-multiplication with line~
+subl~ signal-subtraction with line~
+
+------------------------- converter~ ----------------------------
+prvu~ peak and rms VU-meter interface
+pvu~ peak VU-meter interface
+rvu~ rms VU-meter interface
+unsig~ signal to float converter
+
+------------------ t3~ - time-tagged-trigger --------------------
+-- inputmessages allow a sample-accurate access to signalshape --
+t3_sig~ time tagged trigger sig~
+t3_line~ time tagged trigger line~
+
+--------------------------- misc~ -------------------------------
+fade~ fade-in fade-out shaper (need line~)
+iem_blocksize~ blocksize of a window in samples
+iem_samplerate~ samplerate of a window in Hertz
+int_fract~ split signal-float to integer- and fractal-part
+LFO_noise~ downsampled 2-point interpolated white noise
+mp3play~ mp3 stereo player
+peakenv~ peak envelope shaper
+pink~ pink noise
+round~ round signal-float to nearest integer
+sin_phase~ output phase-difference of 2 sinewaves in samples
+
+========================= control ==============================
+
+------------- gui (included into millers pd) --------------------
+
+bng bang, display and generate a bang-message
+cnv canvas, colored background and text
+hdl horizontal dial, for multiplex usage
+hradio horizontal radiobutton, only float in/out
+hsl horizontal slider
+nbx numberbox, the second
+tgl 2 state toggle
+vdl vertical dial, for multiplex usage
+vradio vertical radiobutton, only float in/out
+vsl vertical slider
+vu vu-meter, display rms- + peak-level in dB
+
+--------------------- float operating -------------------------
+1p1z float-message-filter 1.order
+db2v db to rms
+dbtofad midi-db to fader-characteristic
+fadtodb fader-characteristic to midi-db
+fadtorms fader-characteristic to rms
+rmstofad rms to fader-characteristic
+round_zero round numbers near zero to zero
+speedlim reduce speed of a numeric stream
+split3 part a numeric stream into 3 ways
+split part a numeric stream into 2 ways (like moses)
+transf_fader partial linear characteristic diagram (like table)
+v2db rms to db
+wrap wraparound
+
+-------------------- symbol operating -------------------------
+mergefilename merge a list of symbols together
+splitfilename divide a symbol into 2 parts
+stripfilename strip n characters of a symbol
+unsymbol convert a symbol- to a anything-message
+
+------------------- anything operating ------------------------
+any store and recall any message (like f, or symbol)
+iem_append append a message to any messages (obsolete: merge_any)
+iem_prepend prepend a message to any messages (abbr. pp or prepend)
+
+-------------------------- init -------------------------------
+default replace initial-argument, if it is zero
+dollarg receive parent initial-arguments (abbr. $n)
+dsp control audio-engine, calculate dsp-performance (aka. dsp~)
+float24 store a 24-bit accurate float-number
+init initialize a message via loadbang (abbr. ii)
+once any message pass through only the first time
+
+------------------------- counter -----------------------------
+exp_inc exponential increment counter (bang triggered)
+for++ incremental counter (triggered by internal metro)
+modulo_counter endless loop counter (bang triggered)
+
+-------------------------- misc -------------------------------
+add2_comma add a comma-separated message to a messagebox
+bpe break point envelope controller
+f2note frequency to midi+cents+note
+gate interruptible message connection (like spigot)
+iem_i_route variation of route (abbr. iiroute)
+iem_receive catch "sent" messages (receive-name-input) (abbr. iem_r)
+iem_route improvement of route
+iem_sel_any control a message-box with multiple content
+iem_send send messages to named object (send-name-input)(ab. iem_s)
+pre_inlet output an identifier-message and then the incoming message
+prepend_ascii output an identifier-message and then the incoming message
+soundfile_info output header-info of a wav-file
+toggle_mess control a message-box with multiple content (abbr. tm)
+
+------------------- parameter handling ------------------------
+iem_pbank_csv parameter memory manager (csv-format) (like textfile)
+list2send array of send-objects
+receive2list array of receive-objects
+
+--------------- t3 - time-tagged-trigger ---------------------
+----------- a time-tag is prepended to each message -----------
+----- so these objects allow a sample-accurate access to ------
+---------- the signal-objects t3_sig~ and t3_line~ ------------
+t3_bpe time tagged trigger break point envelope
+t3_delay time tagged trigger delay
+t3_metro time tagged trigger metronom
+t3_timer time tagged trigger timer
+
+-------------- obsolete ---------------------------------------
+post_netreceive
+pre_netsend
+
diff --git a/iemhelp/7_guis-INTRO.pd b/iemhelp/7_guis-INTRO.pd
new file mode 100644
index 0000000..1e4c821
--- /dev/null
+++ b/iemhelp/7_guis-INTRO.pd
@@ -0,0 +1,813 @@
+#N canvas 153 19 564 568 10;
+#X obj -4 -4 my_canvas 15 600 700 empty empty gui-INTRO 237 20 2 14
+-261819 -143491;
+#X text 101 4 bng;
+#X obj 456 313 vslider 15 128 0 127 0 0 empty empty default_15x128
+8 -8 0 8 -262144 -1 -1 0 1;
+#X obj 354 42 toggle 100 1 empty empty 100_pix 8 -8 0 8 -250685 -24198
+-42246 1 1;
+#X obj 57 251 hslider 128 15 0 127 0 0 empty empty default_128x15 8
+-8 0 8 -262144 -1 -1 0 1;
+#X obj 78 226 hslider 20 8 0 19 0 0 empty empty min_20x8 8 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 478 326 vslider 8 20 0 19 0 0 empty empty min_8x20 8 -8 0 8
+-262144 -1 -1 0 1;
+#X obj 458 48 toggle 8 0 empty empty min_8 8 -8 0 8 -262144 -1 -1 0
+1;
+#X obj 458 71 toggle 15 0 empty empty default_15 8 -8 0 8 -262144 -1
+-1 0 1;
+#X obj 459 109 toggle 30 0 empty empty 30_pix 8 -8 0 8 -262144 -1 -1
+0 1;
+#X obj 101 88 bng 30 250 50 0 empty empty 30_pix 8 -8 0 8 -262144 -1
+-1;
+#X obj 412 304 vslider 30 250 0 249 0 1 empty empty 30x250 8 -8 0 8
+-184301 -42886 -42246 21800 1;
+#X obj 7 271 hslider 251 30 0 250 0 1 empty empty 251x30 8 -8 0 8 -147456
+-1109 -66577 12500 1;
+#X text 180 518 (c) musil@iem.kug.ac.at;
+#X text 222 531 IEM KUG;
+#X text 197 543 graz \, austria 2001;
+#X obj 40 343 vu 25 200 empty empty 8 -8 0 8 -1 -99865 1;
+#X obj 13 24 bng 75 5000 25 1 empty empty 75pix+init 8 -8 0 8 -262131
+-261458 -123526;
+#X obj 100 376 vu 15 120 empty empty 8 -8 0 8 -66577 -1 1;
+#X obj 186 375 vu 10 80 empty empty 8 -8 0 8 -66577 -1 1;
+#X text 99 313 vu;
+#N canvas 438 180 374 414 animate_vu 0;
+#X obj 40 211 t f f;
+#X obj 65 233 + 6;
+#X obj 40 257 pack 0 0;
+#X obj 78 94 toggle 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1
+0 1;
+#X obj 78 115 sel 0 1;
+#X obj 78 74 metro 4000;
+#X msg 100 137 30 3000;
+#X msg 78 167 -130 3000;
+#X obj 40 189 line -130 50;
+#X obj 78 51 inlet;
+#X obj 40 316 outlet;
+#X obj 87 316 outlet;
+#X obj 134 316 outlet;
+#X connect 0 0 2 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 1;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 1 6 0;
+#X connect 5 0 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 8 0 0 0;
+#X connect 9 0 5 0;
+#X restore 99 349 pd animate_vu;
+#X obj 99 331 toggle 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1
+1 1;
+#X text 360 8 toggle = tgl;
+#X text 68 198 hslider = hsl;
+#X text 430 271 vslider = vsl;
+#X obj 13 160 print initial_bang;
+#X obj 21 118 bng 15 250 50 0 empty empty default_15 8 -8 0 8 -262144
+-1 -1;
+#X obj 104 48 bng 8 250 50 0 empty empty min_8 8 -8 0 10 -262144 -1
+-1;
+#X obj 21 137 print no_initial_bang;
+#X obj 283 324 my_canvas 15 100 30 empty empty empty 20 12 2 20 -225271
+-66577;
+#X obj 283 355 my_canvas 15 100 30 empty empty empty 20 12 2 20 -225280
+-66577;
+#X obj 283 386 my_canvas 15 100 30 empty empty empty 20 12 2 20 -261681
+-66577;
+#X obj 283 417 my_canvas 15 100 30 empty empty empty 20 12 2 20 -257472
+-66577;
+#X obj 172 375 vu 10 80 empty empty 8 -8 0 8 -66577 -1 0;
+#X obj 310 203 radiobut 15 1 1 8 empty empty default_8*15 8 -8 0 8
+-262144 -1 -1 2;
+#X obj 254 223 radiobut 25 1 1 12 empty empty 12*25 8 -8 0 8 -1433
+-225280 -355 1;
+#N canvas 179 78 690 573 nervous 0;
+#X obj 10 23 toggle 55 1 empty start_nervously1 start_it 8 -8 0 10
+-260818 -1 -250685 0 1;
+#X obj 131 141 bng 51 1200 50 0 empty nerv_bng bang 8 -8 0 10 -253378
+-137031 -222091;
+#X obj 120 418 hslider 22 12 0 127 0 0 empty nerv_hsl h-slider 8 -8
+0 10 -71033 -66198 -128091 2100 1;
+#X obj 448 140 toggle 11 1 empty nerv_tgl toggle 8 -8 0 10 -141355
+-82199 -51488 0 1;
+#X obj 447 383 vslider 15 111 0 127 0 0 empty nerv_vsl v-slider 8 -8
+0 10 -150187 -73940 -248863 340 1;
+#N canvas 135 99 382 469 control 0;
+#X obj 19 21 inlet;
+#X obj 19 50 t b f;
+#X obj 19 153 del 900;
+#X obj 19 212 del 900;
+#X obj 19 93 del 100;
+#X obj 19 283 del 900;
+#X obj 33 125 f;
+#X obj 33 180 f;
+#X obj 33 245 f;
+#X obj 33 309 f;
+#N canvas 280 166 794 432 bng 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 234 368 pack 0 0 0;
+#X obj 250 29 metro 2000;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 145 % 120;
+#X obj 84 32 metro 100;
+#X obj 234 261 random 1.67772e+07;
+#X obj 266 283 random 1.67772e+07;
+#X obj 299 315 random 1.67772e+07;
+#X obj 84 11 inlet;
+#X msg 64 312 \; nerv_bng delta \$1 \$2;
+#X msg 234 390 \; nerv_bng color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_bng size \$1;
+#X msg 250 51 \; nerv_bng bang;
+#X obj 234 340 * -1;
+#X obj 266 316 * -1;
+#X obj 299 342 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 22 0;
+#X connect 11 0 3 0;
+#X connect 11 0 14 0;
+#X connect 11 0 18 0;
+#X connect 11 1 4 0;
+#X connect 11 1 19 0;
+#X connect 11 2 20 0;
+#X connect 12 0 23 0;
+#X connect 13 0 25 0;
+#X connect 14 0 16 0;
+#X connect 15 0 24 0;
+#X connect 16 0 15 0;
+#X connect 17 0 11 0;
+#X connect 18 0 26 0;
+#X connect 19 0 27 0;
+#X connect 20 0 28 0;
+#X connect 21 0 17 0;
+#X connect 21 0 13 0;
+#X connect 26 0 12 0;
+#X connect 27 0 12 1;
+#X connect 28 0 12 2;
+#X restore 114 143 pd bng;
+#N canvas 139 89 794 432 tgl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 144 % 120;
+#X obj 85 31 metro 100;
+#X obj 264 28 metro 1000;
+#X obj 85 10 inlet;
+#X msg 64 312 \; nerv_tgl delta \$1 \$2;
+#X msg 226 322 \; nerv_tgl color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_tgl size \$1;
+#X msg 264 51 \; nerv_tgl bang;
+#X obj 226 298 pack 0 0 0;
+#X obj 226 191 random 1.67772e+07;
+#X obj 258 213 random 1.67772e+07;
+#X obj 291 245 random 1.67772e+07;
+#X obj 226 270 * -1;
+#X obj 258 246 * -1;
+#X obj 291 272 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 18 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 23 0;
+#X connect 11 1 4 0;
+#X connect 11 1 24 0;
+#X connect 11 2 25 0;
+#X connect 12 0 14 0;
+#X connect 13 0 20 0;
+#X connect 14 0 13 0;
+#X connect 15 0 11 0;
+#X connect 16 0 21 0;
+#X connect 17 0 15 0;
+#X connect 17 0 16 0;
+#X connect 22 0 19 0;
+#X connect 23 0 26 0;
+#X connect 24 0 27 0;
+#X connect 25 0 28 0;
+#X connect 26 0 22 0;
+#X connect 27 0 22 1;
+#X connect 28 0 22 2;
+#X restore 114 198 pd tgl;
+#N canvas 322 99 794 432 hsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 188 + 8;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 561 155 % 30;
+#X obj 445 183 + 20;
+#X obj 446 149 % 110;
+#X obj 254 305 metro 1000;
+#X obj 254 327 random 846352;
+#X obj 254 350 % 130;
+#X obj 84 11 inlet;
+#X msg 64 321 \; nerv_hsl delta \$1 \$2;
+#X msg 254 373 \; nerv_hsl set \$1;
+#X msg 445 231 \; nerv_hsl size \$1 \$2;
+#X obj 245 202 pack 0 0 0;
+#X obj 245 95 random 1.67772e+07;
+#X obj 277 117 random 1.67772e+07;
+#X obj 310 149 random 1.67772e+07;
+#X obj 245 174 * -1;
+#X obj 277 150 * -1;
+#X obj 310 176 * -1;
+#X msg 245 229 \; nerv_hsl color \$1 \$2 \$3;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 24 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 28 0;
+#X connect 11 1 4 0;
+#X connect 11 1 14 0;
+#X connect 11 1 29 0;
+#X connect 11 2 30 0;
+#X connect 12 0 19 0;
+#X connect 13 0 15 1;
+#X connect 14 0 17 0;
+#X connect 15 0 26 0;
+#X connect 16 0 11 0;
+#X connect 17 0 13 0;
+#X connect 18 0 15 0;
+#X connect 18 0 22 1;
+#X connect 19 0 18 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 25 0;
+#X connect 23 0 16 0;
+#X connect 23 0 20 0;
+#X connect 27 0 34 0;
+#X connect 28 0 31 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 27 0;
+#X connect 32 0 27 1;
+#X connect 33 0 27 2;
+#X restore 112 263 pd hsl;
+#N canvas 148 132 794 432 vsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 241 299 metro 1000;
+#X obj 240 325 random 846352;
+#X obj 241 352 % 130;
+#X obj 561 155 % 110;
+#X obj 560 188 + 20;
+#X obj 446 149 % 30;
+#X obj 445 183 + 3;
+#X obj 84 11 inlet;
+#X msg 239 227 \; nerv_vsl color \$1 \$2 \$3;
+#X msg 445 231 \; nerv_vsl size \$1 \$2;
+#X msg 64 310 \; nerv_vsl delta \$1 \$2;
+#X msg 241 376 \; nerv_vsl set \$1;
+#X obj 239 203 pack 0 0 0;
+#X obj 239 96 random 1.67772e+07;
+#X obj 271 118 random 1.67772e+07;
+#X obj 304 150 random 1.67772e+07;
+#X obj 239 175 * -1;
+#X obj 271 151 * -1;
+#X obj 304 177 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 26 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 29 0;
+#X connect 11 1 4 0;
+#X connect 11 1 13 0;
+#X connect 11 1 30 0;
+#X connect 11 2 31 0;
+#X connect 12 0 21 0;
+#X connect 13 0 19 0;
+#X connect 14 0 25 0;
+#X connect 15 0 11 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 27 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 1;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 22 0 14 0;
+#X connect 23 0 15 0;
+#X connect 23 0 16 0;
+#X connect 28 0 24 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 34 0;
+#X connect 32 0 28 0;
+#X connect 33 0 28 1;
+#X connect 34 0 28 2;
+#X restore 113 327 pd vsl;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 6 1;
+#X connect 1 1 7 1;
+#X connect 1 1 8 1;
+#X connect 1 1 9 1;
+#X connect 2 0 3 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 8 0 12 0;
+#X connect 9 0 13 0;
+#X restore 10 85 pd control;
+#X connect 0 0 5 0;
+#X restore 295 424 pd nervous;
+#X floatatom 239 84 4 0 0;
+#N canvas 226 38 811 519 properties 0;
+#X obj 2 1 my_canvas 8 870 590 empty empty about_gui_properties 290
+20 2 18 -225280 -1109;
+#X text 12 62 "selectable dimensions(pix): size:" = square-size of
+the;
+#X text 10 35 "dimensions(pix): size:" = square-size of the gui-objects
+;
+#X text 10 48 "dimensions(pix)(pix): width: height:" = width & height
+;
+#X text 11 177 "visible_rectangle(pix)(pix): width: height:" = width
+&;
+#X text 11 104 "flash-time(ms)(ms): intrrpt:" = flash-interrupt-time
+;
+#X text 411 62 selectable top-left corner of my_canvas in pixels.;
+#X text 415 35 in pixels.;
+#X text 11 76 "flash-time(ms)(ms): hold:" = flash-hold-time in msec
+=;
+#X text 405 76 duration of activity \, if a bang-object was activated
+;
+#X text 400 48 of the rectangular gui-object in pixels.;
+#X text 402 177 height of a visible \, deactivated rectangle in pixels.
+;
+#X text 14 224 "new&old" or "new-only" = the radiobutton-object changes
+its;
+#X text 441 224 state in 2 ways:;
+#X text 198 237 "new&old"-mode: output sends previous state off \,
+current;
+#X text 596 237 state on \;;
+#X text 197 250 "new-only"-mode: output sends only current state on.
+;
+#X text 14 280 "steady on click" or "jump on click" = the 2 slider-objects
+;
+#X text 481 322 immediately to new mouse-position \,;
+#X text 12 413 "label: font: fontsize:" = font-properties of label.
+;
+#X text 15 429 "colors:" = a click on radiobuttons "background:" \,
+;
+#X text 370 429 "front-color:" or "label-color:" activates the color-fields
+;
+#X text 174 193 if "init"-mode is selected \, the object displays and
+puts;
+#X text 15 266 "number:" = number of buttons of a radiobutton.;
+#X text 205 89 by any message-event or by a mouse-click.;
+#X text 388 104 in msec = duration of inactivity \, if an already;
+#X text 205 117 activated bang is activated once more.;
+#X text 11 132 "output-range: left: right:" = hslider-bounds;
+#X text 332 132 for input- as well as output-values.;
+#X text 332 146 for input- as well as output-values.;
+#X text 11 146 "output-range: bottom: top:" = vslider-bounds;
+#X text 12 193 "init" or "no init" =;
+#X text 571 193 out its previously saved value.;
+#X text 174 208 if "no init"-mode is selected \, nothing will happen.
+;
+#X text 433 280 react to mouse-click in 2 ways:;
+#X text 201 294 "steady on click"-mode: slider-knob stays in position
+\,;
+#X text 225 307 mouse and knob will move parallel \;;
+#X text 200 322 "jump on click"-mode: slider-knob jumps;
+#X text 224 338 positions of mouse and knob will be identical \;;
+#X text 402 353 receive-object with the same send-symbol-name.;
+#X text 11 368 "receive-symbol:" = a send-object with the same;
+#X text 11 353 "send-symbol:" = an output-message can be received by
+a;
+#X text 347 368 symbol-name can send an input-message to the gui-object.
+;
+#X text 13 383 "label: name:" = visible name of a gui-object \;;
+#X text 343 383 it will be moved together with the gui-object.;
+#X text 12 397 "label: x_off: y_off:" = coordinates of the label in
+;
+#X text 382 397 relation to top-left corner of gui-object.;
+#X text 207 444 on the right side which display the current color of
+the;
+#X text 605 444 item \;;
+#X text 11 161 "non-zero-value: value:" = toggle has 2;
+#X text 292 161 value-states: zero and this value.;
+#X text 208 460 to select a different color \, click on one of the
+30 small;
+#X text 614 459 preset-color-buttons \;;
+#X text 208 475 each color (background \, front \, label) can be tuned
+by its;
+#X text 235 490 RGB-values (0 .. 252 \, step 4) and a click on the
+set-button.;
+#X restore 287 361 pd properties;
+#N canvas 146 190 460 120 move 0;
+#X obj 0 0 my_canvas 8 460 120 empty empty how_to_move_gui_objects
+100 18 2 20 -225271 -42246;
+#X text 11 43 Select a gui-object \, then navigate the object by using
+the 4 direction-keys: UP \, DOWN \, LEFT or RIGHT.;
+#X text 12 70 If you press the SHIFT-Key too \, the object will move
+10 times faster.;
+#X restore 308 331 pd move;
+#N canvas 151 38 522 451 dollar 0;
+#X obj 0 0 my_canvas 8 560 160 empty empty the_dollar_thing 100 18
+2 20 -261681 -123526;
+#X text 10 39 if you want to send to \, or to receive from gui-objects
+;
+#X text 394 39 in abstractions \,;
+#X text 36 52 you have to write into the property-entry:;
+#X text 44 67 #1-label (instead of \$1-label).;
+#X text 25 103 type #0-uniquelabel (instead of \$0-uniquelabel).;
+#X text 9 88 if you want a unique send-receive-symbolname:;
+#X restore 299 391 pd dollar;
+#X obj 283 448 my_canvas 15 100 30 empty empty empty 20 12 2 20 -228992
+-66577;
+#N canvas 177 21 730 638 messages 0;
+#X obj 1 1 my_canvas 8 870 640 empty empty about_gui_messages 200 20
+2 18 -228992 -355;
+#X text 366 99 in pixels.;
+#X text 9 84 "size 15 128" = change width & height;
+#X text 9 159 "flashtime 50 600" = change flash-interrupt- and flash-hold
+;
+#X text 424 160 -time of bng-object.;
+#X text 9 174 "pos 150 170" = change the x-y-position of the top-left
+;
+#X text 400 173 corner of a gui-object in pixels \;;
+#X text 139 188 "pos 0 0" is the top-left corner of your window \;
+;
+#X text 143 204 the positive directions of x- and y-axes are right
+and down.;
+#X text 12 415 "receive togui" = change receive-name of object.;
+#X text 12 431 "label its_me" = change label-text of object.;
+#X text 12 446 "label_pos 20 8" = change offset-coordinates of label-text.
+;
+#X text 12 461 "label_font 0 10" = change font and fontsize of label-text.
+;
+#X text 12 340 "steady 1" change slider-knob-behaviour on mouse-click.
+;
+#X text 13 522 "lin" = change scale-mode of slider to linear.;
+#X text 14 537 "log" = change scale-mode of slider to logarithmical.
+;
+#X text 333 355 to output only the new state.;
+#X text 273 84 of sliders and vu in pixels.;
+#X text 12 477 "init 1" = change initial loadbang-mode of gui-objects
+;
+#X text 12 400 "send fromgui" = change send-name of gui-objects \,
+;
+#X text 12 325 "number 10" = change number of buttons of radio-button.
+;
+#X text 9 128 "range 0.1 10.0" = change slider-boundaries for;
+#X text 344 128 input- as well as output-values.;
+#X text 13 492 "set 64" = change only the inner state and display of
+gui-;
+#X text 11 33 all gui-objects (bng \, hsl \, vsl \, tgl \, rdb \, cnv
+and vu);
+#X text 9 113 "vis_size 800 600" = change width & height;
+#X text 309 113 of visual rectangle of my_canvas in pixels.;
+#X text 359 400 except vu and my_canvas.;
+#X text 395 477 except vu and cnv.;
+#X text 421 492 objects \, except bng and cnv \;;
+#X text 85 47 understand input-messages which change their properties.
+;
+#X text 11 222 "delta 15 17" = move the gui-object in relation to its
+;
+#X text 397 222 current position (in pixels).;
+#X text 333 371 to first release the previous button \,;
+#X text 144 385 then output the state of the new button.;
+#X text 12 371 "double_change" change radio-button-behaviour;
+#X text 12 355 "single_change" change radio-button-behaviour;
+#X text 147 507 no output will result.;
+#X text 9 99 "size 15" = change square-size of rdb \, bng and tgl;
+#X text 9 143 "nonzero 127.0" = change the nonzero-value of toggle.
+;
+#X text 15 552 "get_pos" = if my_canvas has a receive-name and a send-name
+;
+#X text 434 552 and you send the;
+#X text 272 237 front- and label-color of object with one of 30 presets.
+;
+#X text 277 252 label-color of vu and my_canvas with one of 30 presets.
+;
+#X text 504 282 (0 .. 255);
+#X text 558 568 coordinates.;
+#X text 149 568 message "get_pos" to it \, you receive the current
+x- and y-;
+#X text 85 59 except cnv has no inlet \, so you have to send messages
+;
+#X text 85 71 to its receive-label (edit properties).;
+#X text 11 237 "color 0 22 22" = change background- \,;
+#X text 11 252 "color 0 22" = change background- and;
+#X text 13 268 "color -1.67772e+07 (-1) -1" = change background- \,
+;
+#X text 364 267 (front-) and label-color of object with RGB-values.
+;
+#X text 149 283 the RGB-value will be calculated: -65536*RED-value
+;
+#X text 592 309 - 1;
+#X text 422 309 - BLUE-value (0 .. 255);
+#X text 394 296 - 256*GREEN-value (0 .. 255);
+#X restore 294 453 pd messages;
+#X obj 225 259 my_canvas 1 350 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 4 308 my_canvas 1 268 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 4 186 my_canvas 1 220 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 225 151 my_canvas 1 350 1 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 271 261 my_canvas 1 1 48 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 232 308 my_canvas 1 1 200 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 339 3 my_canvas 1 1 149 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 398 260 my_canvas 1 1 310 empty empty empty 20 12 2 20 -258699
+-66577;
+#X obj 225 3 my_canvas 1 1 255 empty empty empty 20 12 2 20 -258699
+-66577;
+#X floatatom 276 84 4 0 0;
+#X obj 239 43 toggle 15 0 empty dsp_tgl empty 20 8 0 10 -370 -262144
+-1 0 1;
+#N canvas 145 31 380 506 dsp 0;
+#X msg 31 88 \; pd dsp \$1;
+#X obj 20 199 cputime;
+#X obj 20 178 t b b;
+#X text 15 11 dsp;
+#X text 48 439 (c) musil@iem.kug.ac.at;
+#X text 90 452 IEM KUG;
+#X text 59 65 1/0 = ON/OFF;
+#X text 97 313 CPU-load;
+#X obj 62 126 loadbang;
+#X obj 20 126 sel 1;
+#X text 65 464 graz \, austria 2001;
+#X text 64 12 turn dsp-kernel on & off \,;
+#X obj 20 240 t f f;
+#X text 65 408 average;
+#X text 177 405 peak;
+#X obj 211 154 f;
+#X obj 146 179 > -1;
+#X obj 169 155 f -1;
+#X obj 179 91 t f b f;
+#X obj 146 204 sel 1;
+#X obj 192 132 f -1;
+#X obj 20 154 metro 500;
+#X obj 20 220 * 0.2;
+#X text 74 37 -dsp-load in %;
+#X text 65 24 measure average- and peak-;
+#X obj 20 315 * 100;
+#X obj 20 360 int;
+#X obj 20 338 + 0.499;
+#X obj 20 383 * 0.01;
+#X obj 246 207 r pd;
+#X obj 246 231 route dsp;
+#X text 245 318 to toggle input;
+#X msg 246 283 \; dsp_tgl set \$1;
+#X obj 247 341 r dsp_tgl;
+#X obj 246 257 route float;
+#X obj 146 227 del 3990;
+#N canvas 305 120 336 257 once 0;
+#X text 7 204 (c) musil@iem.kug.ac.at;
+#X text 49 214 IEM KUG;
+#X text 24 223 graz \, austria 2001;
+#X text 8 6 once;
+#X obj 19 150 bang;
+#X obj 56 65 f 0;
+#X text 59 7 only the first message passes through;
+#X obj 19 127 t b a;
+#X obj 19 100 spigot;
+#X obj 119 63 f 1;
+#X obj 119 41 loadbang;
+#X obj 19 40 inlet;
+#X obj 49 183 outlet;
+#X connect 4 0 5 0;
+#X connect 5 0 8 1;
+#X connect 7 0 4 0;
+#X connect 7 1 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 1;
+#X connect 10 0 9 0;
+#X connect 11 0 8 0;
+#X restore 111 264 pd once;
+#N canvas 297 130 530 376 1p1z 0;
+#X text 7 315 (c) musil@iem.kug.ac.at;
+#X text 52 325 IEM KUG;
+#X obj 22 231 +;
+#X text 8 6 1p1z;
+#X text 24 334 graz \, austria 2001;
+#X text 104 22 y[n] = a0*x[n] + a1*x[n-1] + b1*y[n-1];
+#X text 169 53 a0;
+#X text 25 34 x[n];
+#X text 24 280 y[n];
+#X text 209 53 a1;
+#X text 249 53 b1;
+#X obj 284 52 loadbang;
+#X text 64 102 x[n-1];
+#X obj 40 205 +;
+#X obj 22 133 *;
+#X obj 40 160 *;
+#X obj 59 182 *;
+#X text 82 143 y[n-1];
+#X obj 284 72 t b b b;
+#X obj 40 98 f;
+#X obj 59 138 f;
+#X obj 22 71 t f b b;
+#X text 350 63 x[n-1]init;
+#X text 429 102 y[n-1]init;
+#X text 147 202 1.arg: <float> a0;
+#X text 147 213 2.arg: <float> a1;
+#X text 147 224 3.arg: <float> b1;
+#X text 63 5 <float> control-IIR-filter 1.order;
+#X obj 162 115 f 0.1;
+#X obj 202 142 f 0;
+#X obj 242 164 f 0.9;
+#X obj 22 49 inlet;
+#X obj 162 71 inlet;
+#X obj 202 71 inlet;
+#X obj 242 71 inlet;
+#X obj 356 80 inlet;
+#X obj 431 120 inlet;
+#X obj 22 264 outlet;
+#X connect 2 0 20 1;
+#X connect 2 0 37 0;
+#X connect 11 0 18 0;
+#X connect 13 0 2 1;
+#X connect 14 0 2 0;
+#X connect 15 0 13 0;
+#X connect 16 0 13 1;
+#X connect 18 0 28 0;
+#X connect 18 1 29 0;
+#X connect 18 2 30 0;
+#X connect 19 0 15 0;
+#X connect 20 0 16 0;
+#X connect 21 0 14 0;
+#X connect 21 0 19 1;
+#X connect 21 1 19 0;
+#X connect 21 2 20 0;
+#X connect 28 0 14 1;
+#X connect 29 0 15 1;
+#X connect 30 0 16 1;
+#X connect 31 0 21 0;
+#X connect 32 0 28 0;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 19 1;
+#X connect 36 0 20 1;
+#X restore 20 289 pd 1p1z 0.1 0 0.9;
+#X obj 20 65 inlet;
+#X obj 20 406 outlet;
+#X obj 211 405 outlet;
+#X connect 1 0 22 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 8 0 21 0;
+#X connect 9 0 21 0;
+#X connect 12 0 37 0;
+#X connect 15 0 17 1;
+#X connect 15 0 40 0;
+#X connect 16 0 19 0;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
+#X connect 18 1 17 0;
+#X connect 18 2 15 1;
+#X connect 19 0 15 0;
+#X connect 19 0 35 0;
+#X connect 20 0 17 1;
+#X connect 21 0 2 0;
+#X connect 22 0 12 0;
+#X connect 22 0 18 0;
+#X connect 25 0 27 0;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
+#X connect 28 0 39 0;
+#X connect 29 0 30 0;
+#X connect 30 0 34 0;
+#X connect 34 0 32 0;
+#X connect 35 0 20 0;
+#X connect 37 0 25 0;
+#X connect 38 0 0 0;
+#X connect 38 0 9 0;
+#X restore 239 63 pd dsp;
+#X text 238 99 mean;
+#X text 279 100 peak;
+#X text 289 63 % cpu;
+#X text 283 305 my_canvas = cnv;
+#X text 312 172 radiobutton = rdb;
+#X text 271 350 R;
+#X text 270 370 E;
+#X text 270 389 A;
+#X text 270 409 D;
+#X text 270 428 M;
+#X text 269 447 E;
+#X connect 17 0 26 0;
+#X connect 21 0 18 0;
+#X connect 21 0 16 0;
+#X connect 21 1 34 0;
+#X connect 21 2 19 0;
+#X connect 22 0 21 0;
+#X connect 27 0 29 0;
+#X connect 54 0 55 0;
+#X connect 55 0 38 0;
+#X connect 55 1 53 0;
diff --git a/iemhelp/all_guis-INTRO.pd b/iemhelp/all_guis-INTRO.pd
new file mode 100644
index 0000000..cc3fe5c
--- /dev/null
+++ b/iemhelp/all_guis-INTRO.pd
@@ -0,0 +1,19 @@
+#N canvas 254 125 455 353 10;
+#X obj 10 6 cnv 15 400 300 empty empty Gui_Gruppe 20 12 2 14 -216636
+-42246 0;
+#X obj 38 76 bng 25 250 50 0 bang bang bang 0 -6 192 8 -225271 -42246
+-1;
+#X obj 86 72 tgl 35 0 toggle toggle toggle 0 -6 192 8 -225280 -1109
+-1 0 1;
+#X obj 142 78 nbx 5 14 0.01 10 1 1 numbox numbox numbox 0 -6 192 10
+-228992 -355 -1 0.588209 256;
+#X obj 286 40 vsl 15 128 0 127 0 0 vslider vslider vslider 0 -8 192
+8 -195568 -33289 -1 3700 1;
+#X obj 26 195 hsl 128 15 0 127 0 0 hslider hslider hslider -2 -6 192
+8 -261689 -143491 -1 2600 1;
+#X obj 227 39 vradio 15 1 0 8 vdial vdial vdial 0 -6 192 8 -261681
+-90881 -1 1;
+#X obj 26 150 hradio 15 1 0 8 hdial hdial hdial 0 -6 192 8 -262131
+-123526 -1 1;
+#X obj 352 46 vu 15 120 vu vu -1 -8 64 8 -66577 -1 1 0;
+#X msg 340 263 \; vu -15 -3;
diff --git a/iemhelp/all_guis-INTRO.txt b/iemhelp/all_guis-INTRO.txt
new file mode 100644
index 0000000..7d525ba
--- /dev/null
+++ b/iemhelp/all_guis-INTRO.txt
@@ -0,0 +1,123 @@
+HOW TO MOVE A GUI-OBJECT:
+
+Select a gui-object , then navigate the object by using the
+4 direction-keys: UP , DOWN , LEFT or RIGHT.
+If you press the SHIFT-Key too , the object will move 10 times faster.
+
+
+PROPERTIES-DIALOG-WINDOW:
+
+"dimensions(pix): size:" = square-size of the gui-objects in pixels.
+"dimensions(pix)(pix): width: height:" = width & height of the rectangular
+ gui-object in pixels.
+"selectable dimensions(pix): size:" = square-size of the selectable top-left
+ corner of my_canvas in pixels.
+"flash-time(ms)(ms): hold:" = flash-hold-time in msec = duration of activity,
+ if a bang-object was activated by any message-event
+ or by a mouse-click.
+"flash-time(ms)(ms): intrrpt:" = flash-interrupt-time in msec = duration
+ of inactivity , if an already activated bang is activated
+ once more.
+"output-range: left: right:" = hslider-bounds for input- as well as
+ output-values.
+"output-range: bottom: top:" = vslider-bounds for input- as well as
+ output-values.
+"non-zero-value: value:" = toggle has 2 value-states: zero and this value.
+"visible_rectangle(pix)(pix): width: height:" = width & height of a visible,
+ deactivated rectangle in pixels.
+"init" or "no init" = if "init"-mode is selected , the object displays and puts
+ out its previously saved value.
+ if "no init"-mode is selected, nothing will happen.
+"new&old" or "new-only" = the radiobutton-object changes its state in 2 ways:
+ "new&old"-mode: output sends previous state off, current state on;
+ "new-only"-mode: output sends only current state on.
+"number:" = number of buttons of a radiobutton.
+"steady on click" or "jump on click" = the 2 slider-objects
+ react to mouse-click in 2 ways:
+ "steady on click"-mode: slider-knob stays in position,
+ mouse and knob will move parallel;
+ "jump on click"-mode: slider-knob jumps immediately to new
+ mouse-position, positions of mouse and knob will be identical.
+"send-symbol:" = an output-message can be received by a receive-object
+ with the same send-symbol-name.
+"receive-symbol:" = a send-object with the same symbol-name can send
+ an input-message to the gui-object.
+"label: name:" = visible name of a gui-object; it will be moved together with
+ the gui-object.
+"label: x_off: y_off:" = coordinates of the label in relation to top-left
+ corner of gui-object.
+"label: font: fontsize:" = font-properties of label.
+"colors:" = a click on radiobuttons "background:", "front-color:" or
+ "label-color:" activates the color-fields on the right side
+ which display the current color of the item;
+ to select a different color, click on one of the 30 small
+ preset-color-buttons;
+ each color (background, front, label) can be tuned by its
+ RGB-values (0 .. 252, step 4) and a click on the set-buttons.
+
+
+THE DOLLAR-THING:
+
+if you want to send to, or to receive from gui-objects in abstractions,
+ you have to write into the property-entry:
+ #1-label (instead of $1-label).
+
+if you want a unique send-receive-symbolname:
+ type #0-uniquelabel (instead of $0-uniquelabel).
+
+
+GUI-MESSAGES:
+
+all gui-objects (bng, hsl, vsl, tgl, rdb, cnv and vu)
+ understand input-messages which change their properties.
+ except cnv has no input, so you have to send messages
+ to its receive-label (edit properties).
+
+"size 15 128" = change width & height of sliders and vu in pixels.
+"size 15" = change square-size of rdb, bng and tgl in pixels.
+"vis_size 800 600" = change width & height of visual rectangle
+ of my_canvas in pixels.
+"range 0.1 10.0" = change slider-boundaries for
+ input- as well as output-values.
+"nonzero 127.0" = change the nonzero-value of toggle.
+"flashtime 50 600" = change flash-interrupt- and
+ flash-hold-time of bng-object.
+"pos 150 170" = change the x-y-position of the top-left
+ corner of a gui-object in pixels;
+ "pos 0 0" is the top-left corner of your window;
+ the positive directions of x- and y-axes are right and down.
+"delta 15 17" = move the gui-object in relation to its
+ current position (in pixels).
+"color 0 22 22" = change background-, front- and
+ label-color of object with one of 30 presets.
+"color 0 22" = change background- and label-color
+ of vu and my_canvas with one of 30 presets.
+"color -16777216 (-1) -1" = change background-, (front-)
+ and label-color of object with RGB-values.
+ the RGB-value will be calculated:
+ -65536*RED-value (0 .. 255)
+ - 256*GREEN-value (0 .. 255)
+ - BLUE-value (0 .. 255) - 1.
+"number 10" = change number of buttons of radio-button.
+"steady 1" change slider-knob-behaviour on mouse-click.
+"single_change" change radio-button-behaviour
+ to output only the new state.
+"double_change" change radio-button-behaviour
+ to first release the previous button,
+ then output the state of the new button.
+"send fromgui" = change send-name of gui-objects,
+ except vu and cnv.
+"receive togui" = change receive-name of object.
+"label its_me" = change label-text of object.
+"label_pos 20 8" = change offset-coordinates of label-text.
+"label_font 0 10" = change font and fontsize of label-text.
+"init 1" = change initial loadbang-mode of gui-objects
+ except vu and cnv.
+"set 64" = change only the inner state and display
+ of gui-objects, except bng and cnv;
+ no output will result.
+"lin" = change scale-mode of slider to linear.
+"log" = change scale-mode of slider to logarithmical.
+"get_pos" = if my_canvas has a receive-name and a send-name
+ and you send the message "get_pos" to it,
+ you receive the current x- and y-coordinates.
diff --git a/iemhelp/bng.pd b/iemhelp/bng.pd
new file mode 100644
index 0000000..c529f5a
--- /dev/null
+++ b/iemhelp/bng.pd
@@ -0,0 +1,265 @@
+#N canvas 158 62 445 357 10;
+#X obj 1 1 cnv 8 100 60 empty empty bng 20 20 1 18 -262144 -1109 0
+;
+#X text 10 288 (c) musil@iem.kug.ac.at;
+#X text 52 301 IEM KUG;
+#X text 27 313 graz \, austria 2001;
+#X text 118 61 click properties to;
+#X text 106 72 modify geometry \, colors \, etc.;
+#X obj 64 257 print;
+#N canvas 598 330 290 225 once 0;
+#X msg 38 73 1;
+#X obj 38 47 t b b;
+#X obj 68 124 sel 0;
+#X obj 68 103 f 0;
+#X obj 38 24 inlet;
+#X obj 68 154 outlet;
+#X connect 0 0 3 1;
+#X connect 1 0 0 0;
+#X connect 1 1 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 64 234 pd once;
+#X obj 36 258 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 3 130 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 36 173 bng 50 950 50 1 foo5_snd foo5_rcv big-bang 63 2 192 12
+-262131 -260818 -143491;
+#X msg 36 53 33;
+#X msg 50 75 -3.14;
+#X msg 73 117 11 22 33.33;
+#X msg 63 95 open xxx;
+#X msg 96 142 funny;
+#X text 101 11 gui-bang:;
+#X obj 202 135 s foo5_rcv;
+#X obj 202 155 r foo5_snd;
+#X obj 202 115 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 202 175 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X msg 4 53 0;
+#X text 125 205 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 124 216 for moving selected gui-objects;
+#N canvas 425 170 699 530 edit 0;
+#X obj 39 197 f;
+#X msg 17 176 bang;
+#X floatatom 55 175 3 63 88;
+#X floatatom 90 197 3 0 37;
+#X obj 39 220 pack 0 0;
+#X text 117 197 y-label;
+#X text 83 175 x-label;
+#X floatatom 259 143 3 8 75;
+#X text 286 143 size;
+#X obj 279 236 f;
+#X msg 257 215 bang;
+#X floatatom 295 214 3 -10 10;
+#X floatatom 330 236 3 -10 10;
+#X obj 279 259 pack 0 0;
+#X obj 304 348 f;
+#X msg 282 327 bang;
+#X floatatom 320 326 3 20 90;
+#X floatatom 355 348 3 150 200;
+#X obj 304 371 pack 0 0;
+#X text 323 214 x-delta;
+#X text 357 236 y-delta;
+#X text 348 326 x-position;
+#X text 382 348 y-position;
+#X obj 59 312 f;
+#X msg 37 291 bang;
+#X floatatom 75 290 3 0 2;
+#X floatatom 110 312 3 4 36;
+#X obj 59 335 pack 0 0;
+#X text 103 290 font;
+#X text 139 312 height;
+#X msg 36 399 \; foo5_rcv label blabla;
+#X msg 59 360 \; foo5_rcv label_font \$1 \$2;
+#X msg 39 245 \; foo5_rcv label_pos \$1 \$2;
+#X msg 47 135 \; foo5_rcv color \$1 \$2 \$3;
+#X msg 259 172 \; foo5_rcv size \$1;
+#X msg 279 284 \; foo5_rcv delta \$1 \$2;
+#X msg 304 396 \; foo5_rcv pos \$1 \$2;
+#X msg 483 133 \; foo5_rcv receive foo5a_rcv;
+#X msg 482 171 \; foo5a_rcv receive foo5_rcv;
+#X msg 483 50 \; foo5_rcv send foo5a_snd;
+#X msg 483 88 \; foo5_rcv send foo5_snd;
+#X text 526 349 no init;
+#X msg 505 368 \; foo5_rcv init 0;
+#X msg 512 435 \; foo5_rcv init 1;
+#X obj 493 260 f;
+#X msg 471 239 bang;
+#X floatatom 509 238 4 10 100;
+#X floatatom 544 261 5 100 3000;
+#X obj 493 283 pack 0 0;
+#X msg 493 308 \; foo5_rcv flashtime \$1 \$2;
+#X text 548 237 interrupt-time;
+#X text 585 262 hold-time;
+#X msg 36 435 \; foo5_rcv label big-bang;
+#X text 502 417 init bang on loadbang;
+#X text 519 221 flash-time:;
+#X obj 47 114 pack 0 0 0;
+#X obj 47 86 f;
+#X msg 24 38 bang;
+#X floatatom 63 36 3 0 29;
+#X floatatom 79 56 3 0 29;
+#X floatatom 112 72 3 0 29;
+#X text 91 36 background;
+#X text 106 56 front-color;
+#X text 140 73 label-color;
+#X msg 285 35 back;
+#X msg 285 55 front;
+#X msg 285 75 label;
+#X msg 247 35 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 96 pd RGB_____________;
+#X floatatom 327 65 3 0 255;
+#X floatatom 370 65 3 0 255;
+#X floatatom 413 66 3 0 255;
+#X text 34 10 preset-colors;
+#X text 296 7 RGB-colors;
+#X text 327 47 red;
+#X text 363 46 green;
+#X text 411 46 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 32 0;
+#X connect 7 0 34 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 35 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 36 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 31 0;
+#X connect 44 0 48 0;
+#X connect 45 0 44 0;
+#X connect 46 0 44 1;
+#X connect 47 0 48 1;
+#X connect 48 0 49 0;
+#X connect 55 0 33 0;
+#X connect 56 0 55 0;
+#X connect 57 0 56 0;
+#X connect 58 0 56 1;
+#X connect 59 0 55 1;
+#X connect 60 0 55 2;
+#X connect 64 0 68 0;
+#X connect 65 0 68 0;
+#X connect 66 0 68 0;
+#X connect 67 0 68 0;
+#X connect 68 0 55 0;
+#X connect 68 1 55 1;
+#X connect 68 2 55 2;
+#X connect 69 0 68 1;
+#X connect 70 0 68 2;
+#X connect 71 0 68 3;
+#X restore 297 144 pd edit;
+#X text 185 312 updated for Pd version 0.34;
+#X obj 179 11 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 248 31 bng 15 250 50 0 aaa aaa empty 20 8 192 8 -262144 -1 -1
+;
+#X connect 7 0 6 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 10 0 7 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 10 0;
+#X connect 18 0 20 0;
+#X connect 19 0 17 0;
+#X connect 21 0 10 0;
diff --git a/iemhelp/gui-menue.pd b/iemhelp/gui-menue.pd
new file mode 100644
index 0000000..728e354
--- /dev/null
+++ b/iemhelp/gui-menue.pd
@@ -0,0 +1,23 @@
+#N canvas 149 58 200 219 10;
+#X obj 23 126 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 78 127 toggle 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1
+0 1;
+#X obj 13 184 hslider 128 15 0 127 0 0 empty empty empty 8 -8 0 10
+-262144 -1 -1 0 1;
+#X obj 115 25 vslider 15 128 0 127 0 0 empty empty empty 8 -8 0 10
+-262144 -1 -1 0 1;
+#X obj 135 26 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1;
+#X obj 9 46 my_canvas 15 100 60 empty empty empty 20 12 2 20 -233017
+-66577;
+#X obj 11 163 radiobut 15 1 0 8 empty empty empty 8 -8 0 10 -262144
+-1 -1 0;
+#X text 134 161 rdb;
+#X text 147 183 hsl;
+#X text 113 5 vsl;
+#X text 140 5 vu;
+#X text 22 109 bng;
+#X text 76 109 tgl;
+#X text 11 26 my_canvas;
+#X text 1 25 |;
+#X text 1 32 v;
diff --git a/iemhelp/help-$n.pd b/iemhelp/help-$n.pd
new file mode 100644
index 0000000..6ed1ad3
--- /dev/null
+++ b/iemhelp/help-$n.pd
@@ -0,0 +1,92 @@
+#N canvas 50 236 950 393 10;
+#X floatatom 27 77 5 -14 14 0 - - -;
+#X obj 98 81 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 471 151 5 0 0 0 - - -;
+#X obj 471 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X symbolatom 202 218 10 0 0 0 - - -;
+#X floatatom 150 219 5 0 0 0 - - -;
+#X obj 98 156 route list float symbol;
+#X obj 98 181 pp set;
+#X obj 75 261 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 150 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 202 240 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 98 113 test_dollarg aa bb cc dd ee ff gg 33 44 55 66 77 88 99
+;
+#X text 25 309 (c) musil@iem.kug.ac.at;
+#X text 67 322 IEM KUG;
+#X text 42 334 graz \, austria 2002;
+#X text 11 6 dollarg;
+#X text 93 7 receives the parent initial arguments <list> \, like a
+$n;
+#X text 168 92 open test_dollarg abstraction;
+#X obj 330 45 dollarg;
+#X text 398 44 abbrv.;
+#X obj 448 44 $n 1;
+#X text 490 46 1.arg: n <float> (optional \, default 0);
+#X msg 98 261;
+#N canvas 8 40 450 300 reset________ 0;
+#X obj 48 41 inlet;
+#X obj 53 210 outlet;
+#X obj 48 73 route list float symbol;
+#X obj 121 212 outlet;
+#X obj 197 212 outlet;
+#X msg 53 187 set;
+#X obj 48 99 bang;
+#X obj 100 97 bang;
+#X obj 152 97 bang;
+#X msg 121 187 set 0;
+#X msg 197 186 set symbol;
+#X connect 0 0 2 0;
+#X connect 2 0 6 0;
+#X connect 2 1 7 0;
+#X connect 2 2 8 0;
+#X connect 5 0 1 0;
+#X connect 6 0 10 0;
+#X connect 6 0 9 0;
+#X connect 7 0 5 0;
+#X connect 7 0 10 0;
+#X connect 8 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 4 0;
+#X restore 125 134 pd reset________;
+#X msg 27 53 0;
+#X msg 63 53 1;
+#X msg 96 53 2;
+#X msg 211 53 -1;
+#X text 451 6 (like float \$1 \, or symbol \$1);
+#X text 559 91 eg. m = number of parent arguments + 1;
+#X text 531 64 if (n = 0) -> dollarg output all parent arguments;
+#X text 531 78 if (n > 0) -> dollarg output the n-th parent argument
+;
+#X text 532 102 if (n < 0) -> dollarg output the (m+n)-th parent argument
+;
+#X msg 173 53 -2;
+#X msg 135 53 12;
+#X connect 0 0 11 0;
+#X connect 1 0 11 0;
+#X connect 2 0 3 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 6 1 5 0;
+#X connect 6 2 4 0;
+#X connect 7 0 22 0;
+#X connect 7 0 8 0;
+#X connect 11 0 6 0;
+#X connect 11 0 23 0;
+#X connect 11 1 2 0;
+#X connect 23 0 22 0;
+#X connect 23 1 5 0;
+#X connect 23 2 4 0;
+#X connect 24 0 0 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
diff --git a/iemhelp/help-FIR~.pd b/iemhelp/help-FIR~.pd
new file mode 100644
index 0000000..6be02ec
--- /dev/null
+++ b/iemhelp/help-FIR~.pd
@@ -0,0 +1,59 @@
+#N canvas 345 25 511 611 10;
+#N canvas 0 0 450 300 graph1 0;
+#X array fir_coeff 256 float 0;
+#X coords 0 1 255 -1 256 140 1;
+#X restore 63 135 graph;
+#X obj 109 104 soundfiler;
+#X floatatom 4 113 5 0 0 0 - - -;
+#X text 47 64 % cpu;
+#X obj 4 43 dsp;
+#X obj 4 23 tgl 15 0 empty empty dsp_ON/OFF 2 -8 0 10 -225271 -42246
+-90881 1 1;
+#X text 9 512 (c) musil@iem.kug.ac.at;
+#X text 51 525 IEM KUG;
+#X floatatom 407 286 7 0 0 0 - - -;
+#X obj 325 165 dac~;
+#X obj 325 139 gainvu~ 300;
+#X obj 398 161 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X text 26 537 graz \, austria 2001;
+#X obj 458 8 vsl 15 128 0 127 0 1 empty empty gain -29 5 0 10 -225271
+-42246 -90881 9200 1;
+#X obj 325 12 noise~;
+#X floatatom 348 286 7 0 0 0 - - -;
+#X obj 109 21 bng 15 250 50 1 empty empty loadbang 8 -8 0 10 -225271
+-24198 -90881;
+#X msg 109 41 read -resize lp1.wav fir_coeff;
+#X msg 114 62 read -resize lp2.wav fir_coeff;
+#X msg 121 82 read -resize lp3.wav fir_coeff;
+#X obj 207 384 soundfiler;
+#N canvas 0 0 450 300 graph1 0;
+#X array fir_coeff2 256 float 0;
+#X coords 0 1 255 -1 256 140 1;
+#X restore 207 408 graph;
+#X msg 208 363 read -resize lp3.wav fir_coeff2;
+#X obj 208 343 bng 15 250 50 1 empty empty loadbang 8 -8 0 10 -225271
+-24198 -90881;
+#X msg 338 69 set fir_coeff 256;
+#X msg 334 96 set fir_coeff2 256;
+#X floatatom 19 90 5 0 0 0 - - -;
+#X text 4 130 20 .. 30;
+#X obj 325 36 FIR~ fir_coeff 256;
+#X connect 4 0 2 0;
+#X connect 4 1 26 0;
+#X connect 5 0 4 0;
+#X connect 10 0 9 0;
+#X connect 10 0 9 1;
+#X connect 10 2 11 0;
+#X connect 11 0 15 0;
+#X connect 11 1 8 0;
+#X connect 13 0 10 1;
+#X connect 14 0 28 0;
+#X connect 16 0 17 0;
+#X connect 17 0 1 0;
+#X connect 18 0 1 0;
+#X connect 19 0 1 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 24 0 28 0;
+#X connect 25 0 28 0;
+#X connect 28 0 10 0;
diff --git a/iemhelp/help-LFO_noise~.pd b/iemhelp/help-LFO_noise~.pd
new file mode 100644
index 0000000..91be5cc
--- /dev/null
+++ b/iemhelp/help-LFO_noise~.pd
@@ -0,0 +1,35 @@
+#N canvas 299 177 451 324 10;
+#X text 15 262 (c) musil@iem.kug.ac.at;
+#X text 57 275 IEM KUG;
+#X text 38 49 dsp ON/OFF;
+#X floatatom 212 173 7 0 0 0 - - -;
+#X text 279 175 dB;
+#X floatatom 21 89 5 0 0 0 - - -;
+#X text 69 90 % cpu;
+#X obj 21 69 dsp;
+#X obj 21 49 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 32 230 dac~;
+#X obj 32 205 gainvu~ 300;
+#X obj 259 51 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 352 74 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 9000 1;
+#X text 32 287 graz \, austria 2001;
+#X floatatom 324 223 7 0 0 0 - - -;
+#X text 382 225 dB;
+#X obj 32 142 LFO_noise~ 2;
+#X text 121 141 1.arg: cutoff-freq.;
+#X floatatom 32 116 4 0 500 0 - - -;
+#X text 15 7 LFO_noise~ : 2-point-interpolated time-stretched white
+noise;
+#X text 118 21 between -0.5 and +0.5;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 10 0 9 1;
+#X connect 10 1 14 0;
+#X connect 10 2 11 0;
+#X connect 11 1 3 0;
+#X connect 12 0 10 1;
+#X connect 16 0 10 0;
+#X connect 18 0 16 0;
diff --git a/iemhelp/help-add2_comma.pd b/iemhelp/help-add2_comma.pd
new file mode 100644
index 0000000..33bce04
--- /dev/null
+++ b/iemhelp/help-add2_comma.pd
@@ -0,0 +1,54 @@
+#N canvas 115 227 776 413 10;
+#X msg 25 63 aaa;
+#X msg 61 65 345;
+#X msg 103 66 symbol www;
+#X msg 199 65 123 987 3.14159;
+#X msg 238 126 open file 456;
+#X msg 199 91 1.9 -8.2;
+#X msg 243 154 write 67;
+#X msg 389 56 aaa;
+#X msg 425 58 345;
+#X msg 467 59 symbol www;
+#X msg 563 58 123 987 3.14159;
+#X msg 602 119 open file 456;
+#X msg 563 84 1.9 -8.2;
+#X msg 607 147 write 67;
+#X text 444 285 (c) musil@iem.kug.ac.at;
+#X text 481 298 IEM KUG;
+#X obj 458 158 add2_comma;
+#X obj 363 58 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 6 64 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1
+;
+#X msg 55 223 set;
+#X msg 27 248 add2 abc;
+#X text 456 310 graz \, austria 2003;
+#X msg 24 278 add2 11.55;
+#X obj 24 198 loadbang;
+#X text 13 4 add2_comma;
+#X text 110 4 add a comma after a message;
+#X msg 90 309;
+#X msg 457 187;
+#X obj 86 180 add2_comma;
+#X connect 0 0 28 0;
+#X connect 1 0 28 0;
+#X connect 2 0 28 0;
+#X connect 3 0 28 0;
+#X connect 4 0 28 0;
+#X connect 5 0 28 0;
+#X connect 6 0 28 0;
+#X connect 7 0 16 0;
+#X connect 8 0 16 0;
+#X connect 9 0 16 0;
+#X connect 10 0 16 0;
+#X connect 11 0 16 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 0;
+#X connect 16 0 27 0;
+#X connect 17 0 16 0;
+#X connect 18 0 28 0;
+#X connect 19 0 26 0;
+#X connect 20 0 26 0;
+#X connect 22 0 26 0;
+#X connect 23 0 19 0;
+#X connect 28 0 26 0;
diff --git a/iemhelp/help-addl~.pd b/iemhelp/help-addl~.pd
new file mode 100644
index 0000000..01cd179
--- /dev/null
+++ b/iemhelp/help-addl~.pd
@@ -0,0 +1,28 @@
+#N canvas 375 118 372 456 10;
+#X text 16 386 (c) musil@iem.kug.ac.at;
+#X text 58 399 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 85 199 9 0 22000 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 125 225 5 2 9999 0 - - -;
+#X text 168 224 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 15 364 2.arg:<float> interpolation_time [ms];
+#X text 13 8 addl~;
+#X text 79 8 signal addition with line~;
+#X obj 46 271 unsig~;
+#X floatatom 46 294 9 0 22000 0 - - -;
+#X obj 46 141 sig~ 1;
+#X obj 46 248 addl~ 0.5 2000;
+#X text 33 411 graz \, austria 2003;
+#X text 15 352 1.arg:<float> 2nd operand of addition;
+#X connect 3 0 16 1;
+#X connect 6 0 16 2;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 13 0 14 0;
+#X connect 15 0 16 0;
+#X connect 16 0 13 0;
diff --git a/iemhelp/help-any.pd b/iemhelp/help-any.pd
new file mode 100644
index 0000000..fee636c
--- /dev/null
+++ b/iemhelp/help-any.pd
@@ -0,0 +1,137 @@
+#N canvas 194 199 775 613 10;
+#X obj 21 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 48 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 89 206 print;
+#X obj 89 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 292 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 292 208 print;
+#X msg 343 210;
+#X obj 369 155 loadbang;
+#X msg 369 176 set;
+#X obj 26 225 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 26 280 print;
+#X obj 400 382 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 457 491 print;
+#X msg 457 56 88;
+#X msg 457 132 symbol www;
+#X msg 457 75 float 77;
+#X obj 137 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X msg 457 94 list 66;
+#X msg 457 113 www;
+#X msg 457 151 list www;
+#X msg 457 189 list 99 888 hhh;
+#X msg 457 208 float 99 888 hhh;
+#X msg 457 227 symbol 99 888 hhh;
+#X msg 457 170 99 888 hhh;
+#X msg 457 246 kkk jjj 345;
+#X msg 457 265 symbol kkk jjj 345;
+#X msg 457 284 list kkk jjj 345;
+#X msg 90 432;
+#X obj 137 376 loadbang;
+#X msg 123 401 set;
+#X obj 26 252 any open filename 55;
+#X obj 457 463 iem_anything;
+#X obj 90 400 any;
+#X obj 27 342 bang;
+#X obj 27 366 del 999;
+#X text 63 532 IEM KUG;
+#X msg 620 205 88;
+#X msg 619 281 symbol www;
+#X msg 619 224 float 77;
+#X msg 619 243 list 66;
+#X msg 619 262 www;
+#X msg 619 300 list www;
+#X msg 619 338 list 99 888 hhh;
+#X msg 619 357 float 99 888 hhh;
+#X msg 619 376 symbol 99 888 hhh;
+#X msg 619 319 99 888 hhh;
+#X msg 619 395 kkk jjj 345;
+#X msg 619 414 symbol kkk jjj 345;
+#X msg 619 433 list kkk jjj 345;
+#X msg 361 383 bang;
+#X obj 540 363 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X msg 501 364 bang;
+#X msg 106 307 set display this with 1 second delay;
+#X obj 123 342 bang;
+#X text 296 9 (like f or float for <float>-messages);
+#X text 131 9 is a latch for anything;
+#X obj 229 376 del 4999;
+#X text 32 520 (c) musil@iem.at;
+#X text 38 544 graz \, austria 2003;
+#X text 298 19 (or like symbol for <symbol>-messages);
+#X text 23 11 iem_anything;
+#X obj 104 85 iem_anything;
+#X text 195 85 arguments: any message;
+#X text 96 67 <-hot;
+#X text 146 67 cold->;
+#X text 134 35 abbr. any;
+#X obj 21 175 any;
+#X obj 48 175 any 88;
+#X obj 89 175 any www;
+#X obj 137 175 any symbol www;
+#X obj 292 175 any set 88;
+#X connect 0 0 66 0;
+#X connect 1 0 67 0;
+#X connect 3 0 68 0;
+#X connect 4 0 70 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 9 0 30 0;
+#X connect 11 0 31 0;
+#X connect 13 0 31 0;
+#X connect 14 0 31 0;
+#X connect 15 0 31 0;
+#X connect 16 0 69 0;
+#X connect 17 0 31 0;
+#X connect 18 0 31 0;
+#X connect 19 0 31 0;
+#X connect 20 0 31 0;
+#X connect 21 0 31 0;
+#X connect 22 0 31 0;
+#X connect 23 0 31 0;
+#X connect 24 0 31 0;
+#X connect 25 0 31 0;
+#X connect 26 0 31 0;
+#X connect 28 0 29 0;
+#X connect 29 0 27 0;
+#X connect 30 0 10 0;
+#X connect 31 0 12 0;
+#X connect 32 0 27 0;
+#X connect 33 0 34 0;
+#X connect 33 0 56 0;
+#X connect 34 0 32 0;
+#X connect 36 0 31 1;
+#X connect 37 0 31 1;
+#X connect 38 0 31 1;
+#X connect 39 0 31 1;
+#X connect 40 0 31 1;
+#X connect 41 0 31 1;
+#X connect 42 0 31 1;
+#X connect 43 0 31 1;
+#X connect 44 0 31 1;
+#X connect 45 0 31 1;
+#X connect 46 0 31 1;
+#X connect 47 0 31 1;
+#X connect 48 0 31 1;
+#X connect 49 0 31 0;
+#X connect 50 0 31 1;
+#X connect 51 0 31 1;
+#X connect 52 0 33 0;
+#X connect 52 0 32 1;
+#X connect 52 0 53 0;
+#X connect 53 0 29 0;
+#X connect 56 0 29 0;
+#X connect 66 0 2 0;
+#X connect 67 0 2 0;
+#X connect 68 0 2 0;
+#X connect 69 0 2 0;
+#X connect 70 0 5 0;
+#X connect 70 0 6 0;
diff --git a/iemhelp/help-ap1~.pd b/iemhelp/help-ap1~.pd
new file mode 100644
index 0000000..522439f
--- /dev/null
+++ b/iemhelp/help-ap1~.pd
@@ -0,0 +1,61 @@
+#N canvas 375 118 368 452 10;
+#X text 3 233 ~signal_in~;
+#X text 16 386 (c) musil@iem.kug.ac.at;
+#X text 58 399 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 79 164 3 15 133 0 - - -;
+#X obj 79 185 mtof;
+#X floatatom 79 206 9 0 22000 0 - - -;
+#X text 149 205 Hz;
+#X text 58 262 ~signal_out~;
+#X floatatom 146 289 7 0 0 0 - - -;
+#X text 203 290 dB;
+#X floatatom 110 163 9 0 22000 0 - - -;
+#X text 180 163 Hz;
+#X floatatom 46 119 3 15 133 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 108 227 5 2 9999 0 - - -;
+#X text 151 226 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 46 334 dac~;
+#X obj 46 309 gainvu~ 300;
+#X obj 203 167 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 259 178 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 9600 1;
+#X obj 46 141 testtone~ 200;
+#X text 33 411 graz \, austria 2001;
+#X obj 115 101 init 69;
+#X text 73 120 midi;
+#X text 15 362 2.arg:<float> interpolation_time [ms];
+#X obj 46 248 ap1~ 440 200;
+#X text 15 352 1.arg:<float> -90_degree_freq. [Hz];
+#X obj 14 266 +~;
+#X obj 14 287 *~ 0.5;
+#X text 58 287 (like lp1~);
+#X floatatom 234 327 7 0 0 0 - - -;
+#X text 291 328 dB;
+#X obj 11 13 cnv 8 1 1 empty empty ap1~ 1 2 1 18 -262144 -1109 0;
+#X text 79 8 allpass 1.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 29 1;
+#X connect 13 0 24 0;
+#X connect 16 0 29 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 34 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 29 0;
+#X connect 24 0 31 0;
+#X connect 24 1 11 0;
+#X connect 26 0 13 0;
+#X connect 29 0 31 1;
+#X connect 31 0 32 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-ap2~.pd b/iemhelp/help-ap2~.pd
new file mode 100644
index 0000000..7b293e9
--- /dev/null
+++ b/iemhelp/help-ap2~.pd
@@ -0,0 +1,65 @@
+#N canvas 375 118 366 485 10;
+#X text 9 240 ~signal_in~;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 83 150 3 15 133 0 - - -;
+#X obj 83 172 mtof;
+#X floatatom 83 193 9 0 22000 0 - - -;
+#X text 154 193 Hz;
+#X text 55 270 ~signal_out~;
+#X floatatom 163 285 7 0 0 0 - - -;
+#X text 222 287 dB;
+#X floatatom 123 151 9 0 22000 0 - - -;
+#X text 194 152 Hz;
+#X floatatom 52 111 3 15 133 0 - - -;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 62 80 % cpu;
+#X floatatom 145 233 5 2 9999 0 - - -;
+#X text 188 233 ms;
+#X obj 17 60 dsp;
+#X floatatom 114 213 4 0.01 1000 0 - - -;
+#X text 154 212 Q;
+#X text 57 372 2.arg:<float> Q [-];
+#X text 57 382 3.arg:<float> interpolation_time [ms];
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 53 344 dac~;
+#X obj 53 319 gainvu~ 300;
+#X obj 219 163 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 275 188 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 52 130 testtone~ 200;
+#X text 34 446 graz \, austria 2001;
+#X obj 120 93 init 69;
+#X text 79 112 midi;
+#X text 57 362 1.arg:<float> -180_degree_freq. [Hz];
+#X obj 52 255 ap2~ 440 2 200;
+#X obj 20 276 +~;
+#X obj 20 298 *~ 0.5;
+#X text 64 297 (like bs2~);
+#X floatatom 241 337 7 0 0 0 - - -;
+#X text 298 338 dB;
+#X obj 11 13 cnv 8 1 1 empty empty ap2~ 1 2 1 18 -262144 -1109 0;
+#X text 79 8 allpass 2.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 28 0;
+#X connect 16 0 33 3;
+#X connect 18 0 14 0;
+#X connect 19 0 33 2;
+#X connect 23 0 18 0;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 37 0;
+#X connect 25 2 26 0;
+#X connect 26 1 9 0;
+#X connect 27 0 25 1;
+#X connect 28 0 33 0;
+#X connect 28 0 34 0;
+#X connect 28 1 11 0;
+#X connect 30 0 13 0;
+#X connect 33 0 34 1;
+#X connect 34 0 35 0;
+#X connect 35 0 25 0;
diff --git a/iemhelp/help-bpe.pd b/iemhelp/help-bpe.pd
new file mode 100644
index 0000000..be035e8
--- /dev/null
+++ b/iemhelp/help-bpe.pd
@@ -0,0 +1,46 @@
+#N canvas 112 77 526 445 10;
+#X obj 118 183 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 365 93 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 57 87 0 0 1 1000 1 1000 2 500 1 500 1 2000 0 1000;
+#X obj 57 264 vsl 15 128 0 2 0 0 empty empty empty 8 -8 0 10 -262144
+-1 -1 0 1;
+#X text 9 4 bpe;
+#X text 59 4 break-point-envelope;
+#X text 49 51 list of pairs: value + relative time [ms];
+#X text 75 64 beginning with a pair: initial-value at 0 ms;
+#X text 346 78 a bang starts the envelope;
+#N canvas 0 0 450 300 graph1 0;
+#X array array99 61 float 0;
+#X coords 0 2 60 0 120 60 1;
+#X restore 127 293 graph;
+#X obj 57 231 line 0 100;
+#X obj 274 338 tabwrite array99;
+#X obj 365 295 timer;
+#X obj 365 317 * 0.01;
+#X obj 274 268 t f b;
+#X text 103 373 (c) musil@iem.kug.ac.at;
+#X text 145 386 IEM KUG;
+#X text 120 398 graz \, austria 2001;
+#X text 85 207 outlet 1 and 2: pair of value and time in ms;
+#X text 135 182 outlet 3: bang: end of envelope;
+#X obj 57 148 bpe _______;
+#X text 132 146 no arg.;
+#X msg 78 113 stop;
+#X obj 57 209 pack;
+#X text 106 112 stops envelope;
+#X connect 1 0 12 0;
+#X connect 1 0 20 0;
+#X connect 2 0 20 0;
+#X connect 10 0 3 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 1;
+#X connect 14 0 11 0;
+#X connect 14 1 12 1;
+#X connect 20 0 23 0;
+#X connect 20 1 23 1;
+#X connect 20 2 0 0;
+#X connect 22 0 20 0;
+#X connect 23 0 10 0;
diff --git a/iemhelp/help-bpq2~.pd b/iemhelp/help-bpq2~.pd
new file mode 100644
index 0000000..6f4ba3f
--- /dev/null
+++ b/iemhelp/help-bpq2~.pd
@@ -0,0 +1,59 @@
+#N canvas 375 118 373 485 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 34 446 graz \, austria 2001;
+#X text 8 265 ~signal_in~;
+#X floatatom 81 180 3 15 133 0 - - -;
+#X obj 81 199 mtof;
+#X floatatom 81 218 9 0 22000 0 - - -;
+#X text 145 219 Hz;
+#X text 63 294 ~signal_out~;
+#X floatatom 204 262 7 0 0 0 - - -;
+#X text 255 263 dB;
+#X floatatom 124 163 9 0 22000 0 - - -;
+#X text 188 164 Hz;
+#X floatatom 51 124 3 15 133 0 - - -;
+#X floatatom 142 260 5 2 9999 0 - - -;
+#X text 183 261 ms;
+#X obj 51 280 bpq2~ 440 10 200;
+#X floatatom 111 241 4 0.01 1000 0 - - -;
+#X text 144 241 Q;
+#X text 26 371 2.arg:<float> Q [-];
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X obj 51 339 dac~;
+#X obj 51 314 gainvu~ 300;
+#X obj 239 140 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 304 183 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 51 143 testtone~ 200;
+#X obj 115 109 init 69;
+#X text 78 125 midi;
+#X floatatom 298 329 7 0 0 0 - - -;
+#X text 349 330 dB;
+#X text 106 7 bandpass 2.order with Q-inlet;
+#X obj 14 13 cnv 8 1 1 empty empty bpq2~ 1 2 1 18 -262144 -1109 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 21 1;
+#X connect 18 0 31 0;
+#X connect 19 0 21 3;
+#X connect 21 0 28 0;
+#X connect 22 0 21 2;
+#X connect 28 0 27 0;
+#X connect 28 0 27 1;
+#X connect 28 1 34 0;
+#X connect 28 2 29 0;
+#X connect 29 1 14 0;
+#X connect 30 0 28 1;
+#X connect 31 0 21 0;
+#X connect 31 1 16 0;
+#X connect 32 0 18 0;
diff --git a/iemhelp/help-bpw2~.pd b/iemhelp/help-bpw2~.pd
new file mode 100644
index 0000000..75c397b
--- /dev/null
+++ b/iemhelp/help-bpw2~.pd
@@ -0,0 +1,59 @@
+#N canvas 375 118 373 485 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 34 446 graz \, austria 2001;
+#X text 8 265 ~signal_in~;
+#X floatatom 81 180 3 15 133 0 - - -;
+#X obj 81 199 mtof;
+#X floatatom 81 218 9 0 22000 0 - - -;
+#X text 145 219 Hz;
+#X text 63 294 ~signal_out~;
+#X floatatom 204 262 7 0 0 0 - - -;
+#X text 255 263 dB;
+#X floatatom 124 163 9 0 22000 0 - - -;
+#X text 188 164 Hz;
+#X floatatom 51 124 3 15 133 0 - - -;
+#X floatatom 142 260 5 2 9999 0 - - -;
+#X text 183 261 ms;
+#X floatatom 111 241 4 0.01 1000 0 - - -;
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X obj 51 339 dac~;
+#X obj 51 314 gainvu~ 300;
+#X obj 239 140 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 304 183 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 51 143 testtone~ 200;
+#X obj 115 109 init 69;
+#X text 78 125 midi;
+#X floatatom 298 329 7 0 0 0 - - -;
+#X text 349 330 dB;
+#X text 105 8 bandpass 2.order with bandwidth-inlet;
+#X text 144 241 bandwidth Hz;
+#X text 26 371 2.arg:<float> bandwidth [Hz];
+#X obj 51 280 bpw2~ 440 44 200;
+#X obj 13 15 cnv 8 1 1 empty empty bpw2~ 1 2 1 18 -262144 -1109 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 36 1;
+#X connect 18 0 28 0;
+#X connect 19 0 36 3;
+#X connect 21 0 36 2;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 31 0;
+#X connect 25 2 26 0;
+#X connect 26 1 14 0;
+#X connect 27 0 25 1;
+#X connect 28 0 36 0;
+#X connect 28 1 16 0;
+#X connect 29 0 18 0;
+#X connect 36 0 25 0;
diff --git a/iemhelp/help-bsq2~.pd b/iemhelp/help-bsq2~.pd
new file mode 100644
index 0000000..d20db92
--- /dev/null
+++ b/iemhelp/help-bsq2~.pd
@@ -0,0 +1,59 @@
+#N canvas 375 118 373 485 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 34 446 graz \, austria 2001;
+#X text 26 371 2.arg:<float> Q [-];
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 10 258 ~signal_in~;
+#X floatatom 81 174 3 15 133 0 - - -;
+#X obj 81 193 mtof;
+#X floatatom 81 212 9 0 22000 0 - - -;
+#X text 145 213 Hz;
+#X text 65 287 ~signal_out~;
+#X floatatom 188 283 7 0 0 0 - - -;
+#X text 239 284 dB;
+#X floatatom 126 156 9 0 22000 0 - - -;
+#X text 190 157 Hz;
+#X floatatom 53 117 3 15 133 0 - - -;
+#X floatatom 138 253 5 2 9999 0 - - -;
+#X text 179 254 ms;
+#X floatatom 109 234 4 0.01 1000 0 - - -;
+#X text 142 234 Q;
+#X obj 53 332 dac~;
+#X obj 53 307 gainvu~ 300;
+#X obj 235 161 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 294 176 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 53 136 testtone~ 200;
+#X obj 117 102 init 69;
+#X text 80 118 midi;
+#X obj 53 273 bsq2~ 440 1 200;
+#X floatatom 274 322 7 0 0 0 - - -;
+#X text 325 323 dB;
+#X text 95 6 bandstop 2.order with Q-inlet;
+#X obj 13 13 cnv 8 1 1 empty empty bsq2~ 1 2 1 18 -262144 -1109 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 33 1;
+#X connect 21 0 30 0;
+#X connect 22 0 33 3;
+#X connect 24 0 33 2;
+#X connect 27 0 26 0;
+#X connect 27 0 26 1;
+#X connect 27 1 34 0;
+#X connect 27 2 28 0;
+#X connect 28 1 17 0;
+#X connect 29 0 27 1;
+#X connect 30 0 33 0;
+#X connect 30 1 19 0;
+#X connect 31 0 21 0;
+#X connect 33 0 27 0;
diff --git a/iemhelp/help-bsw2~.pd b/iemhelp/help-bsw2~.pd
new file mode 100644
index 0000000..7709f94
--- /dev/null
+++ b/iemhelp/help-bsw2~.pd
@@ -0,0 +1,59 @@
+#N canvas 361 130 373 485 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 34 446 graz \, austria 2001;
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 26 371 2.arg:<float> bandwidth [Hz];
+#X text 8 264 ~signal_in~;
+#X floatatom 83 181 3 15 133 0 - - -;
+#X obj 83 200 mtof;
+#X floatatom 83 219 9 0 22000 0 - - -;
+#X text 147 220 Hz;
+#X text 63 293 ~signal_out~;
+#X floatatom 186 289 7 0 0 0 - - -;
+#X text 237 290 dB;
+#X floatatom 124 162 9 0 22000 0 - - -;
+#X text 188 163 Hz;
+#X floatatom 51 123 3 15 133 0 - - -;
+#X floatatom 148 257 5 2 9999 0 - - -;
+#X text 189 257 ms;
+#X floatatom 115 239 4 0.01 1000 0 - - -;
+#X obj 51 338 dac~;
+#X obj 51 313 gainvu~ 300;
+#X obj 233 167 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 292 182 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 51 142 testtone~ 200;
+#X obj 115 108 init 69;
+#X text 78 124 midi;
+#X floatatom 272 328 7 0 0 0 - - -;
+#X text 323 329 dB;
+#X text 148 238 bandwidth Hz;
+#X obj 51 279 bsw2~ 440 220 200;
+#X text 94 7 bandstop 2.order with bandwidth-inlet;
+#X obj 12 13 cnv 8 1 1 empty empty bsw2~ 1 2 1 18 -262144 -1109 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 35 1;
+#X connect 21 0 29 0;
+#X connect 22 0 35 3;
+#X connect 24 0 35 2;
+#X connect 26 0 25 0;
+#X connect 26 0 25 1;
+#X connect 26 1 32 0;
+#X connect 26 2 27 0;
+#X connect 27 1 17 0;
+#X connect 28 0 26 1;
+#X connect 29 0 35 0;
+#X connect 29 1 19 0;
+#X connect 30 0 21 0;
+#X connect 35 0 26 0;
diff --git a/iemhelp/help-db2v.pd b/iemhelp/help-db2v.pd
new file mode 100644
index 0000000..e46d3a4
--- /dev/null
+++ b/iemhelp/help-db2v.pd
@@ -0,0 +1,14 @@
+#N canvas 512 284 279 220 10;
+#X floatatom 23 99 9 0 0;
+#X text 21 131 (c) musil@iem.kug.ac.at;
+#X text 63 144 IEM KUG;
+#X text 57 75 no arg;
+#X obj 23 76 db2v;
+#X floatatom 23 52 9 0 0;
+#X text 85 53 input_level [dB];
+#X text 24 11 db2v;
+#X text 104 12 dB to value converter;
+#X text 87 102 output_value [-];
+#X text 38 156 graz \, austria 2001;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
diff --git a/iemhelp/help-dbtofad.pd b/iemhelp/help-dbtofad.pd
new file mode 100644
index 0000000..72bb62a
--- /dev/null
+++ b/iemhelp/help-dbtofad.pd
@@ -0,0 +1,17 @@
+#N canvas 6 6 351 330 10;
+#X floatatom 76 100 9 0 127 0 - - -;
+#X obj 68 158 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X obj 50 150 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 600 1;
+#X obj 100 128 - 100;
+#X text 139 100 midi-dB;
+#X obj 50 128 dbtofad;
+#X text 10 4 dbtofad;
+#X text 99 5 convert midi-db to fader-scale;
+#X text 147 236 (c) musil@iem.kug.ac.at;
+#X text 184 249 IEM KUG;
+#X text 159 261 graz \, austria 2003;
+#X connect 0 0 3 0;
+#X connect 0 0 5 0;
+#X connect 3 0 1 1;
+#X connect 5 0 2 0;
diff --git a/iemhelp/help-default.pd b/iemhelp/help-default.pd
new file mode 100644
index 0000000..7718043
--- /dev/null
+++ b/iemhelp/help-default.pd
@@ -0,0 +1,15 @@
+#N canvas 361 130 335 245 10;
+#X text 22 184 (c) musil@iem.kug.ac.at;
+#X text 64 197 IEM KUG;
+#X obj 25 87 default 50;
+#X obj 25 38 loadbang;
+#X text 39 209 graz \, austria 2003;
+#X obj 25 63 f \$1;
+#X obj 25 137 print default;
+#X floatatom 39 115 5 0 0 0 - - -;
+#X text 10 9 default;
+#X text 78 8 replace inital-argument \, if it is zero;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 5 0 2 0;
diff --git a/iemhelp/help-divl~.pd b/iemhelp/help-divl~.pd
new file mode 100644
index 0000000..94e3488
--- /dev/null
+++ b/iemhelp/help-divl~.pd
@@ -0,0 +1,28 @@
+#N canvas 375 118 374 458 10;
+#X text 16 386 (c) musil@iem.kug.ac.at;
+#X text 58 399 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 85 199 9 0 22000 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 125 225 5 2 9999 0 - - -;
+#X text 168 224 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 15 364 2.arg:<float> interpolation_time [ms];
+#X obj 46 271 unsig~;
+#X floatatom 46 294 9 0 22000 0 - - -;
+#X obj 46 141 sig~ 1;
+#X text 33 411 graz \, austria 2003;
+#X text 79 8 signal division with line~;
+#X text 15 352 1.arg:<float> 2nd operand of division;
+#X obj 46 248 divl~ 0.5 2000;
+#X text 13 8 divl~;
+#X connect 3 0 17 1;
+#X connect 6 0 17 2;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 12 0;
+#X connect 13 0 17 0;
+#X connect 17 0 11 0;
diff --git a/iemhelp/help-dollarg.pd b/iemhelp/help-dollarg.pd
new file mode 100644
index 0000000..6ed1ad3
--- /dev/null
+++ b/iemhelp/help-dollarg.pd
@@ -0,0 +1,92 @@
+#N canvas 50 236 950 393 10;
+#X floatatom 27 77 5 -14 14 0 - - -;
+#X obj 98 81 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 471 151 5 0 0 0 - - -;
+#X obj 471 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X symbolatom 202 218 10 0 0 0 - - -;
+#X floatatom 150 219 5 0 0 0 - - -;
+#X obj 98 156 route list float symbol;
+#X obj 98 181 pp set;
+#X obj 75 261 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 150 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 202 240 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 98 113 test_dollarg aa bb cc dd ee ff gg 33 44 55 66 77 88 99
+;
+#X text 25 309 (c) musil@iem.kug.ac.at;
+#X text 67 322 IEM KUG;
+#X text 42 334 graz \, austria 2002;
+#X text 11 6 dollarg;
+#X text 93 7 receives the parent initial arguments <list> \, like a
+$n;
+#X text 168 92 open test_dollarg abstraction;
+#X obj 330 45 dollarg;
+#X text 398 44 abbrv.;
+#X obj 448 44 $n 1;
+#X text 490 46 1.arg: n <float> (optional \, default 0);
+#X msg 98 261;
+#N canvas 8 40 450 300 reset________ 0;
+#X obj 48 41 inlet;
+#X obj 53 210 outlet;
+#X obj 48 73 route list float symbol;
+#X obj 121 212 outlet;
+#X obj 197 212 outlet;
+#X msg 53 187 set;
+#X obj 48 99 bang;
+#X obj 100 97 bang;
+#X obj 152 97 bang;
+#X msg 121 187 set 0;
+#X msg 197 186 set symbol;
+#X connect 0 0 2 0;
+#X connect 2 0 6 0;
+#X connect 2 1 7 0;
+#X connect 2 2 8 0;
+#X connect 5 0 1 0;
+#X connect 6 0 10 0;
+#X connect 6 0 9 0;
+#X connect 7 0 5 0;
+#X connect 7 0 10 0;
+#X connect 8 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 4 0;
+#X restore 125 134 pd reset________;
+#X msg 27 53 0;
+#X msg 63 53 1;
+#X msg 96 53 2;
+#X msg 211 53 -1;
+#X text 451 6 (like float \$1 \, or symbol \$1);
+#X text 559 91 eg. m = number of parent arguments + 1;
+#X text 531 64 if (n = 0) -> dollarg output all parent arguments;
+#X text 531 78 if (n > 0) -> dollarg output the n-th parent argument
+;
+#X text 532 102 if (n < 0) -> dollarg output the (m+n)-th parent argument
+;
+#X msg 173 53 -2;
+#X msg 135 53 12;
+#X connect 0 0 11 0;
+#X connect 1 0 11 0;
+#X connect 2 0 3 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 6 1 5 0;
+#X connect 6 2 4 0;
+#X connect 7 0 22 0;
+#X connect 7 0 8 0;
+#X connect 11 0 6 0;
+#X connect 11 0 23 0;
+#X connect 11 1 2 0;
+#X connect 23 0 22 0;
+#X connect 23 1 5 0;
+#X connect 23 2 4 0;
+#X connect 24 0 0 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 27 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 0 0;
diff --git a/iemhelp/help-dsp.pd b/iemhelp/help-dsp.pd
new file mode 100644
index 0000000..9786107
--- /dev/null
+++ b/iemhelp/help-dsp.pd
@@ -0,0 +1,16 @@
+#N canvas 361 130 333 243 10;
+#X text 24 167 (c) musil@iem.kug.ac.at;
+#X text 66 180 IEM KUG;
+#X text 41 42 dsp ON/OFF;
+#X floatatom 24 121 5 0 0;
+#X obj 24 62 dsp;
+#X obj 24 42 toggle 15 1 empty dsp_tgl empty 8 -8 0 10 0 22 22 0 1
+;
+#X text 41 192 graz \, austria 2001;
+#X text 72 122 % mean-cpu-load;
+#X floatatom 40 96 5 0 0;
+#X text 86 96 % peak-cpu-load;
+#X text -4 7 dsp : control audio \, measure dsp-load;
+#X connect 4 0 3 0;
+#X connect 4 1 8 0;
+#X connect 5 0 4 0;
diff --git a/iemhelp/help-dsp~.pd b/iemhelp/help-dsp~.pd
new file mode 100644
index 0000000..2588c4c
--- /dev/null
+++ b/iemhelp/help-dsp~.pd
@@ -0,0 +1,16 @@
+#N canvas 361 130 333 243 10;
+#X text 24 167 (c) musil@iem.kug.ac.at;
+#X text 66 180 IEM KUG;
+#X text 43 40 dsp ON/OFF;
+#X floatatom 24 121 5 0 0;
+#X obj 24 42 toggle 15 1 empty dsp_tgl empty 8 -8 0 10 0 22 22 0 1
+;
+#X text 41 192 graz \, austria 2001;
+#X text 72 122 % mean-cpu-load;
+#X floatatom 47 91 5 0 0;
+#X text 93 91 % peak-cpu-load;
+#X text -4 7 dsp~ : control audio \, measure dsp-load;
+#X obj 24 62 dsp~;
+#X connect 4 0 10 0;
+#X connect 10 0 3 0;
+#X connect 10 1 7 0;
diff --git a/iemhelp/help-exp_inc.pd b/iemhelp/help-exp_inc.pd
new file mode 100644
index 0000000..984ec62
--- /dev/null
+++ b/iemhelp/help-exp_inc.pd
@@ -0,0 +1,77 @@
+#N canvas 117 75 606 470 10;
+#X msg 23 256 reset;
+#X obj 64 255 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 189 282 6 0 0 0 - - -;
+#X floatatom 198 83 6 0 0 0 - - -;
+#X floatatom 103 340 6 0 0 0 - - -;
+#X obj 103 367 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X text 62 238 start;
+#X floatatom 107 281 6 0 0 0 - - -;
+#X text 197 44 abs. inc;
+#X text 185 241 rel. incr [%];
+#X text 31 389 initial-val needs reset and a bang for output it.;
+#X text 32 406 current-val outputs after next bang.;
+#X floatatom 272 280 6 0 0 0 - - -;
+#X obj 272 258 init 0;
+#X text 271 241 min-val;
+#X floatatom 332 283 6 0 0 0 - - -;
+#X text 331 244 max-val;
+#X obj 189 260 init 100;
+#X obj 107 259 init 625;
+#X text 108 242 initial-val;
+#X msg 25 60 reset;
+#X obj 66 59 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 105 144 6 0 0 0 - - -;
+#X obj 105 171 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X text 64 42 start;
+#X floatatom 109 85 6 0 0 0 - - -;
+#X floatatom 274 84 6 0 0 0 - - -;
+#X text 273 45 min-val;
+#X floatatom 334 87 6 0 0 0 - - -;
+#X text 333 48 max-val;
+#X text 110 46 initial-val;
+#X obj 109 63 init 8500;
+#X obj 198 61 init -250;
+#X text 13 6 exp_inc;
+#X text 77 6 linear and/or exponetial increment-counter \, bang controled
+;
+#X text 305 118 linear;
+#X text 297 312 exponetial;
+#X obj 274 62 init 300;
+#X obj 334 65 init 12000;
+#X obj 105 116 exp_inc 8500 0 -250 300 12000;
+#X obj 332 261 init 17000;
+#X obj 103 312 exp_inc 625 100 0 300 17000;
+#X text 195 160 1.arg: <float> initial-val;
+#X text 194 171 2.arg: <float> relative increment [%];
+#X text 194 182 3.arg: <float> absolute increment;
+#X text 196 194 4.arg: <float> min-val;
+#X text 196 205 5.arg: <float> max-val;
+#X connect 0 0 41 0;
+#X connect 1 0 41 0;
+#X connect 2 0 41 1;
+#X connect 3 0 39 2;
+#X connect 4 0 5 0;
+#X connect 7 0 41 0;
+#X connect 12 0 41 3;
+#X connect 13 0 12 0;
+#X connect 15 0 41 4;
+#X connect 17 0 2 0;
+#X connect 18 0 7 0;
+#X connect 20 0 39 0;
+#X connect 21 0 39 0;
+#X connect 22 0 23 0;
+#X connect 25 0 39 0;
+#X connect 26 0 39 3;
+#X connect 28 0 39 4;
+#X connect 31 0 25 0;
+#X connect 32 0 3 0;
+#X connect 37 0 26 0;
+#X connect 38 0 28 0;
+#X connect 39 0 22 0;
+#X connect 40 0 15 0;
+#X connect 41 0 4 0;
diff --git a/iemhelp/help-f2note.pd b/iemhelp/help-f2note.pd
new file mode 100644
index 0000000..e11b4b7
--- /dev/null
+++ b/iemhelp/help-f2note.pd
@@ -0,0 +1,21 @@
+#N canvas 320 113 337 256 10;
+#X floatatom 19 138 9 0 0;
+#X text 24 169 (c) musil@iem.kug.ac.at;
+#X text 61 182 IEM KUG;
+#X floatatom 19 36 9 8 24000;
+#X floatatom 84 91 6 0 0;
+#X obj 19 67 f2note 440;
+#X msg 51 114 g1;
+#X text 146 37 <float> input frequency;
+#X text 92 36 Hz;
+#X text 105 66 1.arg: <float> reference-frequency a1;
+#X text 132 92 cents;
+#X text 76 114 note;
+#X text 91 140 midi;
+#X text 4 2 f2note;
+#X text 58 1 converts frequency to notes + cents;
+#X text 36 194 graz \, austria 2001;
+#X connect 3 0 5 0;
+#X connect 5 0 0 0;
+#X connect 5 1 6 0;
+#X connect 5 2 4 0;
diff --git a/iemhelp/help-fade~.pd b/iemhelp/help-fade~.pd
new file mode 100644
index 0000000..1600741
--- /dev/null
+++ b/iemhelp/help-fade~.pd
@@ -0,0 +1,47 @@
+#N canvas 184 90 590 534 10;
+#X obj 93 163 line~;
+#X obj 16 85 dsp;
+#X floatatom 16 112 5 0 0 0 - - -;
+#X obj 16 59 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 59 269 tabwrite~ array99;
+#X obj 59 164 bang;
+#X msg 83 66 0 \, 1 10;
+#X msg 111 103 1 \, 0 10;
+#X msg 169 110 set _lin;
+#X msg 169 131 set _linsqrt;
+#X msg 169 152 set _sqrt;
+#X msg 169 172 set _sin;
+#X msg 170 193 set _sinhann;
+#X msg 170 215 set _hann;
+#X obj 93 242 fade~ _lin;
+#X obj 283 14 loadbang;
+#X text 332 459 Samples;
+#X text 229 259 (c) musil@iem.kug.ac.at;
+#X text 271 272 IEM KUG;
+#X text 246 284 graz \, austria 2001;
+#X text 11 6 fade~ a special signal waveshaper;
+#X text 59 19 input-range: 0 .. 1;
+#N canvas 0 0 452 302 graph1 0;
+#X array array99 442 float 0;
+#X coords 0 1 441 0 256 140 1;
+#X restore 64 318 graph;
+#X msg 282 39 \; array99 resize 442 \; array99 bounds 0 1 441 0 \;
+array99 xticks 0 100 5 \; array99 yticks 0 0.1 5 \; array99 xlabel
+-0.08 0 100 200 300 400 \; array99 ylabel -15.1 0 0.5 1;
+#X connect 0 0 14 0;
+#X connect 1 0 2 0;
+#X connect 3 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 0 0;
+#X connect 6 0 5 0;
+#X connect 7 0 0 0;
+#X connect 7 0 5 0;
+#X connect 8 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 13 0 14 0;
+#X connect 14 0 4 0;
+#X connect 15 0 23 0;
diff --git a/iemhelp/help-fadtodb.pd b/iemhelp/help-fadtodb.pd
new file mode 100644
index 0000000..d65fb8f
--- /dev/null
+++ b/iemhelp/help-fadtodb.pd
@@ -0,0 +1,17 @@
+#N canvas 157 156 349 328 10;
+#X floatatom 53 215 9 0 0 0 - - -;
+#X obj 71 69 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X obj 53 61 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 157 125 - 100;
+#X obj 53 195 fadtodb;
+#X text 116 215 midi-dB;
+#X text 185 181 (c) musil@iem.kug.ac.at;
+#X text 222 194 IEM KUG;
+#X text 197 206 graz \, austria 2003;
+#X text 10 3 fadtodb;
+#X text 83 4 convert fader-scale to midi-db;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 1;
+#X connect 4 0 0 0;
diff --git a/iemhelp/help-fadtorms.pd b/iemhelp/help-fadtorms.pd
new file mode 100644
index 0000000..7b7531a
--- /dev/null
+++ b/iemhelp/help-fadtorms.pd
@@ -0,0 +1,17 @@
+#N canvas 157 156 389 278 10;
+#X floatatom 53 215 9 0 0 0 - - -;
+#X obj 71 69 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X obj 53 61 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 157 125 v2db;
+#X obj 53 195 fadtorms;
+#X text 116 215 linear values;
+#X text 199 164 (c) musil@iem.kug.ac.at;
+#X text 236 177 IEM KUG;
+#X text 211 189 graz \, austria 2003;
+#X text 7 8 fadtorms;
+#X text 80 9 convert fader-scale to rms-value;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 1;
+#X connect 4 0 0 0;
diff --git a/iemhelp/help-float24.pd b/iemhelp/help-float24.pd
new file mode 100644
index 0000000..8d4cd93
--- /dev/null
+++ b/iemhelp/help-float24.pd
@@ -0,0 +1,74 @@
+#N canvas 53 141 914 390 10;
+#X obj 91 95 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 23 330 (c) musil@iem.kug.ac.at;
+#X text 65 343 IEM KUG;
+#X text 11 6 float24;
+#X floatatom 150 259 9 0 0 0 - - -;
+#X obj 91 117 float24 0.999999 762;
+#X obj 103 191 -;
+#X obj 91 145 t b f;
+#X obj 91 167 1;
+#X obj 227 116 float 1;
+#X obj 227 96 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 40 355 graz \, austria 2003;
+#X obj 239 186 -;
+#X obj 227 140 t b f;
+#X obj 227 162 1;
+#X text 277 112 then save and close the patch;
+#X text 277 123 then open the pach \, and click on both bangs;
+#X text 277 88 try to type the argument "0.999 999 762" without the
+spaces;
+#X text 278 100 into a float-object \,;
+#X text 79 7 concatenate a list of float-fragment-strings to a 23 bit
+accurate mantissa (usefull to save a number into an object with more
+then 6 decimals [7 .. 8 decimals]);
+#X obj 697 123 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 697 167 9 0 0 0 - - -;
+#X obj 697 144 float24 -12.3 4 56;
+#X obj 698 194 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 698 238 11 0 0 0 - - -;
+#X obj 698 264 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 698 330 11 0 0 0 - - -;
+#X obj 698 215 float24 0.00314159 26538;
+#X obj 698 285 float24 3.14159 26538;
+#X obj 698 308 cos;
+#X obj 694 16 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 694 82 11 0 0 0 - - -;
+#X obj 694 60 cos;
+#X obj 694 37 float 1.5708;
+#X obj 779 18 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 779 84 11 0 0 0 - - -;
+#X obj 779 62 cos;
+#X obj 779 39 float24 1.5707 963268;
+#X connect 0 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 8 0;
+#X connect 7 1 6 1;
+#X connect 8 0 6 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 12 0 4 0;
+#X connect 13 0 14 0;
+#X connect 13 1 12 1;
+#X connect 14 0 12 0;
+#X connect 20 0 22 0;
+#X connect 22 0 21 0;
+#X connect 23 0 27 0;
+#X connect 25 0 28 0;
+#X connect 27 0 24 0;
+#X connect 28 0 29 0;
+#X connect 29 0 26 0;
+#X connect 30 0 33 0;
+#X connect 32 0 31 0;
+#X connect 33 0 32 0;
+#X connect 34 0 37 0;
+#X connect 36 0 35 0;
+#X connect 37 0 36 0;
diff --git a/iemhelp/help-for++.pd b/iemhelp/help-for++.pd
new file mode 100644
index 0000000..3745012
--- /dev/null
+++ b/iemhelp/help-for++.pd
@@ -0,0 +1,71 @@
+#N canvas 324 220 744 400 10;
+#X text 9 235 (c) musil@iem.kug.ac.at;
+#X text 51 248 IEM KUG;
+#X text 26 260 graz \, austria 2001;
+#X obj 25 52 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 65 186 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 65 61 4 0 0 0 - - -;
+#X floatatom 115 88 4 0 0 0 - - -;
+#X floatatom 65 163 4 0 0 0 - - -;
+#X floatatom 165 110 4 0 0 0 - - -;
+#X text 7 8 for++;
+#X obj 65 132 for++ 10 20 200;
+#X obj 111 166 print;
+#X msg 25 71 start;
+#X msg 25 91 stop;
+#X text 64 47 <int> first number;
+#X text 115 72 <int> last number;
+#X obj 237 213 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X floatatom 237 190 4 0 0 0 - - -;
+#X obj 280 186 print;
+#X obj 237 143 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X text 235 44 2.arg: <int> last number;
+#X text 235 32 1.arg: <int> first number;
+#X obj 237 162 for++ 50 40 100;
+#X obj 165 166 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 337 193 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X text 67 9 counter in time-intervals;
+#X text 163 181 finished;
+#X text 336 208 finished;
+#X obj 237 264 print finished;
+#X obj 509 141 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 629 184 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X text 628 199 finished;
+#X obj 509 208 timer;
+#X obj 509 183 sel 0 1000;
+#X floatatom 509 231 5 0 0 0 - - -;
+#X obj 509 160 for++ 0 1000 1.234;
+#X text 235 56 3.arg: <float> increment-delay in ms;
+#X text 159 92 <float> increment-delay in ms;
+#X text 40 19 increment-step-size is allways 1 or -1;
+#X connect 3 0 10 0;
+#X connect 5 0 10 0;
+#X connect 6 0 10 1;
+#X connect 7 0 4 0;
+#X connect 8 0 10 2;
+#X connect 10 0 7 0;
+#X connect 10 0 11 0;
+#X connect 10 1 23 0;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X connect 17 0 16 0;
+#X connect 19 0 22 0;
+#X connect 22 0 17 0;
+#X connect 22 0 18 0;
+#X connect 22 1 24 0;
+#X connect 23 0 28 0;
+#X connect 24 0 28 0;
+#X connect 29 0 35 0;
+#X connect 32 0 34 0;
+#X connect 33 0 32 0;
+#X connect 33 1 32 1;
+#X connect 35 0 33 0;
+#X connect 35 1 30 0;
diff --git a/iemhelp/help-gate.pd b/iemhelp/help-gate.pd
new file mode 100644
index 0000000..be3af4c
--- /dev/null
+++ b/iemhelp/help-gate.pd
@@ -0,0 +1,29 @@
+#N canvas 400 182 406 345 10;
+#X text 12 294 (c) musil@iem.kug.ac.at;
+#X text 54 307 IEM KUG;
+#X text 29 319 graz \, austria 2001;
+#X obj 9 37 bng 15 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X msg 34 36 33;
+#X msg 51 58 -3.14;
+#X msg 74 100 11 22 33.33;
+#X msg 64 78 open xxx;
+#X msg 94 122 funny;
+#X text 7 8 gate;
+#X obj 95 176 toggle 15 0 empty empty empty 8 -8 0 10 0 22 22 0 1;
+#X obj 9 237 print;
+#X text 31 262 the original object spigot;
+#X obj 55 229 bng 15 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X text 37 272 (c) miller puckette;
+#X text 44 8 interrupt or continue a stream of messages;
+#X text 116 172 gate: ON / OFF;
+#X obj 9 206 gate 1;
+#X text 63 206 1.arg: control-state of gate [0/1] (opt.);
+#X connect 3 0 17 0;
+#X connect 4 0 17 0;
+#X connect 5 0 17 0;
+#X connect 6 0 17 0;
+#X connect 7 0 17 0;
+#X connect 8 0 17 0;
+#X connect 10 0 17 1;
+#X connect 17 0 11 0;
+#X connect 17 0 13 0;
diff --git a/iemhelp/help-hml_shelf~.pd b/iemhelp/help-hml_shelf~.pd
new file mode 100644
index 0000000..5b04544
--- /dev/null
+++ b/iemhelp/help-hml_shelf~.pd
@@ -0,0 +1,96 @@
+#N canvas 105 49 623 558 10;
+#X text 21 419 (c) musil@iem.kug.ac.at;
+#X text 63 432 IEM KUG;
+#X text 29 39 dsp ON/OFF;
+#X floatatom 435 513 7 0 0 0 - - -;
+#X text 491 514 dB;
+#X floatatom 120 158 9 0 22000 0 - - -;
+#X text 190 160 Hz;
+#X floatatom 47 110 3 15 133 0 - - -;
+#X floatatom 12 79 5 0 0 0 - - -;
+#X text 52 80 % cpu;
+#X floatatom 261 304 5 2 9999 0 - - -;
+#X text 303 304 ms;
+#X obj 12 59 dsp;
+#X obj 12 39 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 47 393 dac~;
+#X obj 47 368 gainvu~ 300;
+#X obj 426 387 vu 15 120 empty empty 8 -8 0 8 -66577 -1 1 0;
+#X obj 530 237 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 47 132 testtone~ 200;
+#X text 38 444 graz \, austria 2001;
+#X obj 114 93 init 69;
+#X text 74 111 midi;
+#X text 200 144 6.arg:<float> interpolation_time [ms];
+#X text 200 91 1.arg:<float> low_level [dB];
+#X text 200 101 2.arg:<float> low_freq. [Hz];
+#X text 200 112 3.arg:<float> medium_level [dB];
+#X text 200 122 4.arg:<float> high_freq. [Hz];
+#X text 200 133 5.arg:<float> high_level [dB];
+#X obj 47 328 hml_shelf~ 6 100 0 4000 -6 200;
+#X obj 328 213 vsl 15 49 27.5 440 1 1 empty empty low_freq. -8 -8 0
+8 -262144 -1 -1 1200 1;
+#X obj 81 216 vsl 15 81 -40 40 0 1 empty empty low_level -18 -8 0 8
+-262144 -1 -1 3000 1;
+#X obj 149 215 vsl 15 81 -40 40 0 1 empty empty mid_level -10 -8 0
+8 -262144 -1 -1 4000 1;
+#X obj 217 214 vsl 15 81 -40 40 0 1 empty empty high_level 0 -8 0 8
+-262144 -1 -1 3000 1;
+#X text 345 207 -440Hz;
+#X text 345 255 -27.5Hz;
+#X text 345 231 -110Hz;
+#X obj 399 213 vsl 15 49 880 14080 1 1 empty empty high_freq. -8 -8
+0 8 -262144 -1 -1 3800 1;
+#X text 416 207 -14080Hz;
+#X text 416 255 -880Hz;
+#X text 416 231 -3520Hz;
+#X floatatom 530 385 7 0 0 0 - - -;
+#X text 588 387 dB;
+#X floatatom 81 305 4 0 0 0 - - -;
+#X floatatom 149 304 4 0 0 0 - - -;
+#X floatatom 217 303 4 0 0 0 - - -;
+#X floatatom 328 305 8 0 0 0 - - -;
+#X floatatom 399 305 8 0 0 0 - - -;
+#X text 157 8 high-middle-low-shelving-filter;
+#X text 4 311 signal_in~;
+#X text 97 211 +40;
+#X text 99 250 0;
+#X text 97 290 -40;
+#X text 167 249 0;
+#X text 165 289 -40;
+#X text 165 210 +40;
+#X text 233 209 +40;
+#X text 235 248 0;
+#X text 233 288 -40;
+#X text 80 188 dB;
+#X text 147 186 dB;
+#X text 216 186 dB;
+#X text 54 346 signal_out~;
+#X obj 12 13 cnv 8 1 1 empty empty hml_shelf~ 1 2 1 18 -262144 -1109
+0;
+#X connect 7 0 18 0;
+#X connect 10 0 28 6;
+#X connect 12 0 8 0;
+#X connect 13 0 12 0;
+#X connect 15 0 14 0;
+#X connect 15 0 14 1;
+#X connect 15 1 40 0;
+#X connect 15 2 16 0;
+#X connect 16 1 3 0;
+#X connect 17 0 15 1;
+#X connect 18 0 28 0;
+#X connect 18 1 5 0;
+#X connect 20 0 7 0;
+#X connect 28 0 15 0;
+#X connect 29 0 45 0;
+#X connect 30 0 42 0;
+#X connect 31 0 43 0;
+#X connect 32 0 44 0;
+#X connect 36 0 46 0;
+#X connect 42 0 28 1;
+#X connect 43 0 28 3;
+#X connect 44 0 28 5;
+#X connect 45 0 28 2;
+#X connect 46 0 28 4;
diff --git a/iemhelp/help-hp10_butt~.pd b/iemhelp/help-hp10_butt~.pd
new file mode 100644
index 0000000..01505e7
--- /dev/null
+++ b/iemhelp/help-hp10_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 387 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 154 3 15 133 0 - - -;
+#X obj 96 173 mtof;
+#X floatatom 96 192 9 0 22000 0 - - -;
+#X text 160 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X obj 45 237 hp10_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp10_cheb~.pd b/iemhelp/help-hp10_cheb~.pd
new file mode 100644
index 0000000..2d1ad51
--- /dev/null
+++ b/iemhelp/help-hp10_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 149 3 15 133 0 - - -;
+#X obj 96 168 mtof;
+#X floatatom 96 187 9 0 22000 0 - - -;
+#X text 160 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X obj 45 237 hp10_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp10_crit~.pd b/iemhelp/help-hp10_crit~.pd
new file mode 100644
index 0000000..28cb9fd
--- /dev/null
+++ b/iemhelp/help-hp10_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 149 3 15 133 0 - - -;
+#X obj 96 168 mtof;
+#X floatatom 96 187 9 0 22000 0 - - -;
+#X text 160 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp10_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp1~.pd b/iemhelp/help-hp1~.pd
new file mode 100644
index 0000000..da99ae9
--- /dev/null
+++ b/iemhelp/help-hp1~.pd
@@ -0,0 +1,55 @@
+#N canvas 245 78 365 483 10;
+#X text 7 256 ~signal_in~;
+#X text 16 403 (c) musil@iem.kug.ac.at;
+#X text 58 416 IEM KUG;
+#X text 32 44 dsp ON/OFF;
+#X floatatom 83 173 3 15 133 0 - - -;
+#X obj 83 192 mtof;
+#X floatatom 83 211 9 0 22000 0 - - -;
+#X text 147 212 Hz;
+#X text 62 285 ~signal_out~;
+#X floatatom 180 265 7 0 0 0 - - -;
+#X text 231 266 dB;
+#X floatatom 123 154 9 0 22000 0 - - -;
+#X text 187 155 Hz;
+#X floatatom 50 115 3 15 133 0 - - -;
+#X floatatom 15 84 5 0 0 0 - - -;
+#X text 54 85 % cpu;
+#X floatatom 117 246 5 2 9999 0 - - -;
+#X text 158 247 ms;
+#X obj 15 64 dsp;
+#X obj 15 44 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 50 330 dac~;
+#X obj 50 305 gainvu~ 300;
+#X obj 227 143 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 291 174 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 50 134 testtone~ 200;
+#X text 33 428 graz \, austria 2001;
+#X obj 114 100 init 69;
+#X text 77 116 midi;
+#X text 14 355 1.arg:<float> cutoff_freq. [Hz];
+#X obj 50 271 hp1~ 440 200;
+#X text 14 365 2.arg:<float> interpolation_time [ms];
+#X floatatom 280 320 7 0 0 0 - - -;
+#X text 331 321 dB;
+#X obj 13 13 cnv 8 1 1 empty empty hp1~ 1 2 1 18 -262144 -1109 0;
+#X text 83 6 highpass 1.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 29 1;
+#X connect 13 0 24 0;
+#X connect 16 0 29 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 31 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 29 0;
+#X connect 24 1 11 0;
+#X connect 26 0 13 0;
+#X connect 29 0 21 0;
diff --git a/iemhelp/help-hp2_butt~.pd b/iemhelp/help-hp2_butt~.pd
new file mode 100644
index 0000000..3913e9b
--- /dev/null
+++ b/iemhelp/help-hp2_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 389 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 108 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X obj 45 237 hp2_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp2_cheb~.pd b/iemhelp/help-hp2_cheb~.pd
new file mode 100644
index 0000000..d1751a7
--- /dev/null
+++ b/iemhelp/help-hp2_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 hp2_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp2_crit~.pd b/iemhelp/help-hp2_crit~.pd
new file mode 100644
index 0000000..94b1b90
--- /dev/null
+++ b/iemhelp/help-hp2_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 379 448 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp2_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp2~.pd b/iemhelp/help-hp2~.pd
new file mode 100644
index 0000000..8b29a1d
--- /dev/null
+++ b/iemhelp/help-hp2~.pd
@@ -0,0 +1,59 @@
+#N canvas 278 100 398 463 10;
+#X text 6 249 ~signal_in~;
+#X text 15 396 (c) musil@iem.kug.ac.at;
+#X text 57 409 IEM KUG;
+#X text 31 37 dsp ON/OFF;
+#X floatatom 83 165 3 15 133 0 - - -;
+#X obj 83 184 mtof;
+#X floatatom 83 203 9 0 22000 0 - - -;
+#X text 147 204 Hz;
+#X text 61 278 ~signal_out~;
+#X floatatom 213 270 7 0 0 0 - - -;
+#X text 264 271 dB;
+#X floatatom 122 147 9 0 22000 0 - - -;
+#X text 186 148 Hz;
+#X floatatom 49 108 3 15 133 0 - - -;
+#X floatatom 14 77 5 0 0 0 - - -;
+#X text 54 78 % cpu;
+#X floatatom 152 244 5 2 9999 0 - - -;
+#X text 193 245 ms;
+#X obj 14 57 dsp;
+#X floatatom 117 226 4 0.01 1000 0 - - -;
+#X text 152 226 Q;
+#X text 14 358 2.arg:<float> Q [-];
+#X text 14 368 3.arg:<float> interpolation_time [ms];
+#X obj 14 37 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 49 323 dac~;
+#X obj 49 298 gainvu~ 300;
+#X obj 261 148 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 314 167 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 49 127 testtone~ 200;
+#X text 32 421 graz \, austria 2001;
+#X obj 113 93 init 69;
+#X text 76 109 midi;
+#X text 14 348 1.arg:<float> cutoff_freq. [Hz];
+#X obj 49 264 hp2~ 440 0.707 200;
+#X floatatom 301 313 7 0 0 0 - - -;
+#X text 352 314 dB;
+#X obj 13 13 cnv 8 1 1 empty empty hp2~ 1 2 1 18 -262144 -1109 0;
+#X text 83 6 highpass 2.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 28 0;
+#X connect 16 0 33 3;
+#X connect 18 0 14 0;
+#X connect 19 0 33 2;
+#X connect 23 0 18 0;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 34 0;
+#X connect 25 2 26 0;
+#X connect 26 1 9 0;
+#X connect 27 0 25 1;
+#X connect 28 0 33 0;
+#X connect 28 1 11 0;
+#X connect 30 0 13 0;
+#X connect 33 0 25 0;
diff --git a/iemhelp/help-hp3_butt~.pd b/iemhelp/help-hp3_butt~.pd
new file mode 100644
index 0000000..663b17a
--- /dev/null
+++ b/iemhelp/help-hp3_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 387 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X obj 45 237 hp3_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X text 152 236 <- double-click;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 31 1;
+#X connect 13 0 24 0;
+#X connect 16 0 31 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 31 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 31 0 21 0;
diff --git a/iemhelp/help-hp3_cheb~.pd b/iemhelp/help-hp3_cheb~.pd
new file mode 100644
index 0000000..31ea530
--- /dev/null
+++ b/iemhelp/help-hp3_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp3_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp3_crit~.pd b/iemhelp/help-hp3_crit~.pd
new file mode 100644
index 0000000..a28416d
--- /dev/null
+++ b/iemhelp/help-hp3_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp3_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp4_butt~.pd b/iemhelp/help-hp4_butt~.pd
new file mode 100644
index 0000000..4070aa4
--- /dev/null
+++ b/iemhelp/help-hp4_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 391 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 108 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X obj 45 237 hp4_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp4_cheb~.pd b/iemhelp/help-hp4_cheb~.pd
new file mode 100644
index 0000000..b7a18f2
--- /dev/null
+++ b/iemhelp/help-hp4_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 hp4_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp4_crit~.pd b/iemhelp/help-hp4_crit~.pd
new file mode 100644
index 0000000..2dd2227
--- /dev/null
+++ b/iemhelp/help-hp4_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp4_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp5_butt~.pd b/iemhelp/help-hp5_butt~.pd
new file mode 100644
index 0000000..e60a3ed
--- /dev/null
+++ b/iemhelp/help-hp5_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 391 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X text 29 394 graz \, austria 2003;
+#X obj 45 237 hp5_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp5_cheb~.pd b/iemhelp/help-hp5_cheb~.pd
new file mode 100644
index 0000000..6c6bf3c
--- /dev/null
+++ b/iemhelp/help-hp5_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp5_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp5_crit~.pd b/iemhelp/help-hp5_crit~.pd
new file mode 100644
index 0000000..48bb0ab
--- /dev/null
+++ b/iemhelp/help-hp5_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp5_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp6_butt~.pd b/iemhelp/help-hp6_butt~.pd
new file mode 100644
index 0000000..2fc57df
--- /dev/null
+++ b/iemhelp/help-hp6_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 389 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X obj 45 237 hp6_butt~ 440 200;
+#X text 29 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp6_cheb~.pd b/iemhelp/help-hp6_cheb~.pd
new file mode 100644
index 0000000..f9ba90e
--- /dev/null
+++ b/iemhelp/help-hp6_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 hp6_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp6_crit~.pd b/iemhelp/help-hp6_crit~.pd
new file mode 100644
index 0000000..ed5b146
--- /dev/null
+++ b/iemhelp/help-hp6_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp6_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp7_butt~.pd b/iemhelp/help-hp7_butt~.pd
new file mode 100644
index 0000000..b90af76
--- /dev/null
+++ b/iemhelp/help-hp7_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 391 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp7_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp7_cheb~.pd b/iemhelp/help-hp7_cheb~.pd
new file mode 100644
index 0000000..df6a19e
--- /dev/null
+++ b/iemhelp/help-hp7_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 hp7_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp7_crit~.pd b/iemhelp/help-hp7_crit~.pd
new file mode 100644
index 0000000..af21913
--- /dev/null
+++ b/iemhelp/help-hp7_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp7_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp8_butt~.pd b/iemhelp/help-hp8_butt~.pd
new file mode 100644
index 0000000..d5f4f8c
--- /dev/null
+++ b/iemhelp/help-hp8_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 389 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 155 3 15 133 0 - - -;
+#X obj 93 174 mtof;
+#X floatatom 93 193 9 0 22000 0 - - -;
+#X text 157 194 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 252 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 324 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 286 7 0 0 0 - - -;
+#X text 357 287 dB;
+#X text 152 236 <- double-click;
+#X obj 45 237 hp8_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp8_cheb~.pd b/iemhelp/help-hp8_cheb~.pd
new file mode 100644
index 0000000..f08bc61
--- /dev/null
+++ b/iemhelp/help-hp8_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 hp8_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-hp8_crit~.pd b/iemhelp/help-hp8_crit~.pd
new file mode 100644
index 0000000..ee43a55
--- /dev/null
+++ b/iemhelp/help-hp8_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp8_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp9_butt~.pd b/iemhelp/help-hp9_butt~.pd
new file mode 100644
index 0000000..58baf0e
--- /dev/null
+++ b/iemhelp/help-hp9_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 387 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp9_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp9_cheb~.pd b/iemhelp/help-hp9_cheb~.pd
new file mode 100644
index 0000000..fbac959
--- /dev/null
+++ b/iemhelp/help-hp9_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 149 3 15 133 0 - - -;
+#X obj 93 168 mtof;
+#X floatatom 93 187 9 0 22000 0 - - -;
+#X text 157 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp9_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-hp9_crit~.pd b/iemhelp/help-hp9_crit~.pd
new file mode 100644
index 0000000..fa656f2
--- /dev/null
+++ b/iemhelp/help-hp9_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 149 3 15 133 0 - - -;
+#X obj 93 168 mtof;
+#X floatatom 93 187 9 0 22000 0 - - -;
+#X text 157 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 hp9_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-iem_anything.pd b/iemhelp/help-iem_anything.pd
new file mode 100644
index 0000000..fee636c
--- /dev/null
+++ b/iemhelp/help-iem_anything.pd
@@ -0,0 +1,137 @@
+#N canvas 194 199 775 613 10;
+#X obj 21 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 48 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 89 206 print;
+#X obj 89 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 292 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 292 208 print;
+#X msg 343 210;
+#X obj 369 155 loadbang;
+#X msg 369 176 set;
+#X obj 26 225 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 26 280 print;
+#X obj 400 382 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 457 491 print;
+#X msg 457 56 88;
+#X msg 457 132 symbol www;
+#X msg 457 75 float 77;
+#X obj 137 148 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X msg 457 94 list 66;
+#X msg 457 113 www;
+#X msg 457 151 list www;
+#X msg 457 189 list 99 888 hhh;
+#X msg 457 208 float 99 888 hhh;
+#X msg 457 227 symbol 99 888 hhh;
+#X msg 457 170 99 888 hhh;
+#X msg 457 246 kkk jjj 345;
+#X msg 457 265 symbol kkk jjj 345;
+#X msg 457 284 list kkk jjj 345;
+#X msg 90 432;
+#X obj 137 376 loadbang;
+#X msg 123 401 set;
+#X obj 26 252 any open filename 55;
+#X obj 457 463 iem_anything;
+#X obj 90 400 any;
+#X obj 27 342 bang;
+#X obj 27 366 del 999;
+#X text 63 532 IEM KUG;
+#X msg 620 205 88;
+#X msg 619 281 symbol www;
+#X msg 619 224 float 77;
+#X msg 619 243 list 66;
+#X msg 619 262 www;
+#X msg 619 300 list www;
+#X msg 619 338 list 99 888 hhh;
+#X msg 619 357 float 99 888 hhh;
+#X msg 619 376 symbol 99 888 hhh;
+#X msg 619 319 99 888 hhh;
+#X msg 619 395 kkk jjj 345;
+#X msg 619 414 symbol kkk jjj 345;
+#X msg 619 433 list kkk jjj 345;
+#X msg 361 383 bang;
+#X obj 540 363 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X msg 501 364 bang;
+#X msg 106 307 set display this with 1 second delay;
+#X obj 123 342 bang;
+#X text 296 9 (like f or float for <float>-messages);
+#X text 131 9 is a latch for anything;
+#X obj 229 376 del 4999;
+#X text 32 520 (c) musil@iem.at;
+#X text 38 544 graz \, austria 2003;
+#X text 298 19 (or like symbol for <symbol>-messages);
+#X text 23 11 iem_anything;
+#X obj 104 85 iem_anything;
+#X text 195 85 arguments: any message;
+#X text 96 67 <-hot;
+#X text 146 67 cold->;
+#X text 134 35 abbr. any;
+#X obj 21 175 any;
+#X obj 48 175 any 88;
+#X obj 89 175 any www;
+#X obj 137 175 any symbol www;
+#X obj 292 175 any set 88;
+#X connect 0 0 66 0;
+#X connect 1 0 67 0;
+#X connect 3 0 68 0;
+#X connect 4 0 70 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 9 0 30 0;
+#X connect 11 0 31 0;
+#X connect 13 0 31 0;
+#X connect 14 0 31 0;
+#X connect 15 0 31 0;
+#X connect 16 0 69 0;
+#X connect 17 0 31 0;
+#X connect 18 0 31 0;
+#X connect 19 0 31 0;
+#X connect 20 0 31 0;
+#X connect 21 0 31 0;
+#X connect 22 0 31 0;
+#X connect 23 0 31 0;
+#X connect 24 0 31 0;
+#X connect 25 0 31 0;
+#X connect 26 0 31 0;
+#X connect 28 0 29 0;
+#X connect 29 0 27 0;
+#X connect 30 0 10 0;
+#X connect 31 0 12 0;
+#X connect 32 0 27 0;
+#X connect 33 0 34 0;
+#X connect 33 0 56 0;
+#X connect 34 0 32 0;
+#X connect 36 0 31 1;
+#X connect 37 0 31 1;
+#X connect 38 0 31 1;
+#X connect 39 0 31 1;
+#X connect 40 0 31 1;
+#X connect 41 0 31 1;
+#X connect 42 0 31 1;
+#X connect 43 0 31 1;
+#X connect 44 0 31 1;
+#X connect 45 0 31 1;
+#X connect 46 0 31 1;
+#X connect 47 0 31 1;
+#X connect 48 0 31 1;
+#X connect 49 0 31 0;
+#X connect 50 0 31 1;
+#X connect 51 0 31 1;
+#X connect 52 0 33 0;
+#X connect 52 0 32 1;
+#X connect 52 0 53 0;
+#X connect 53 0 29 0;
+#X connect 56 0 29 0;
+#X connect 66 0 2 0;
+#X connect 67 0 2 0;
+#X connect 68 0 2 0;
+#X connect 69 0 2 0;
+#X connect 70 0 5 0;
+#X connect 70 0 6 0;
diff --git a/iemhelp/help-iem_append.pd b/iemhelp/help-iem_append.pd
new file mode 100644
index 0000000..a322272
--- /dev/null
+++ b/iemhelp/help-iem_append.pd
@@ -0,0 +1,72 @@
+#N canvas 231 172 609 499 10;
+#X obj 117 376 print;
+#X msg 117 61 1;
+#X obj 238 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 117 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 117 149 11 22;
+#X msg 238 150 33 44;
+#X msg 238 63 3;
+#X msg 117 105 symbol foo;
+#X msg 238 107 symbol zyx;
+#X msg 117 83 float 1.1;
+#X msg 238 85 float 3.3;
+#X msg 117 127 set;
+#X msg 238 128 open;
+#X msg 117 172 list -55 -66;
+#X msg 238 172 list -77 -88;
+#X msg 238 195 list bbb 987;
+#X msg 117 195 list aaa 123;
+#X msg 117 218 jkl 555 uuu;
+#X msg 238 218 poi 777 ttt;
+#X obj 191 377 route bang float symbol list;
+#X obj 242 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 281 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 324 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 367 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 421 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 400 376 anything;
+#X text 262 39 bang clears message-buffer;
+#X text 75 421 (c) musil@iem.kug.ac.at;
+#X text 117 434 IEM KUG;
+#X text 218 302 initials-arguments:;
+#X text 109 7 merge the head-message in front of the tail-message;
+#X text 92 446 graz \, austria 2003;
+#X text 224 275 <- cold inlet;
+#X text 122 274 <- hot inlet;
+#X text 13 7 iem_append;
+#X text 34 284 head of output-message;
+#X text 226 285 tail of output-message;
+#X text 213 313 tail of output-message;
+#X obj 117 300 iem_append 0.5;
+#X connect 1 0 38 0;
+#X connect 2 0 38 1;
+#X connect 3 0 38 0;
+#X connect 4 0 38 0;
+#X connect 5 0 38 1;
+#X connect 6 0 38 1;
+#X connect 7 0 38 0;
+#X connect 8 0 38 1;
+#X connect 9 0 38 0;
+#X connect 10 0 38 1;
+#X connect 11 0 38 0;
+#X connect 12 0 38 1;
+#X connect 13 0 38 0;
+#X connect 14 0 38 1;
+#X connect 15 0 38 1;
+#X connect 16 0 38 0;
+#X connect 17 0 38 0;
+#X connect 18 0 38 1;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 19 2 22 0;
+#X connect 19 3 23 0;
+#X connect 19 4 24 0;
+#X connect 38 0 0 0;
+#X connect 38 0 19 0;
diff --git a/iemhelp/help-iem_blocksize~.pd b/iemhelp/help-iem_blocksize~.pd
new file mode 100644
index 0000000..05d275e
--- /dev/null
+++ b/iemhelp/help-iem_blocksize~.pd
@@ -0,0 +1,37 @@
+#N canvas 184 90 489 296 10;
+#X obj 12 66 dsp;
+#X floatatom 12 93 5 0 0 0 - - -;
+#X obj 12 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 47 217 (c) musil@iem.kug.ac.at;
+#X text 89 230 IEM KUG;
+#X text 64 242 graz \, austria 2003;
+#X obj 92 106 osc~ 440;
+#X floatatom 92 163 7 0 0 0 - - -;
+#X obj 92 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 40 37 <- toggle here;
+#N canvas 383 167 454 304 down 0;
+#X obj 98 74 inlet~;
+#X obj 188 79 block~ 32 1 0.5;
+#X obj 98 161 outlet;
+#X obj 98 132 iem_blocksize~;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X restore 305 132 pd down;
+#X floatatom 305 162 7 0 0 0 - - -;
+#X obj 305 182 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 11 6 iem_blocksize~;
+#X text 131 8 output the current blocksize of a window;
+#X obj 92 131 iem_blocksize~;
+#X text 143 163 Samples;
+#X text 354 161 Samples;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 6 0 10 0;
+#X connect 6 0 15 0;
+#X connect 7 0 8 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 15 0 7 0;
diff --git a/iemhelp/help-iem_i_route.pd b/iemhelp/help-iem_i_route.pd
new file mode 100644
index 0000000..4d0b3c7
--- /dev/null
+++ b/iemhelp/help-iem_i_route.pd
@@ -0,0 +1,132 @@
+#N canvas 167 225 749 365 10;
+#X floatatom 25 136 4 0 0 0 - - -;
+#X obj 25 161 iem_i_route 3 7;
+#X obj 25 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 45 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 65 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 85 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 105 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 133 189 4 0 0 0 - - -;
+#X obj 133 214 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 201 135 4 0 0 0 - - -;
+#X obj 569 132 print rejected;
+#X floatatom 469 20 4 0 0 0 - - -;
+#X obj 191 204 iiroute 2 5 _______;
+#X obj 191 182 pack 0 0;
+#X obj 201 157 t f f;
+#X floatatom 191 230 2 0 0 0 - - -;
+#X obj 191 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 223 230 2 0 0 0 - - -;
+#X obj 223 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 255 230 2 0 0 0 - - -;
+#X obj 255 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 287 230 2 0 0 0 - - -;
+#X obj 287 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 319 230 print rejected;
+#X obj 469 42 t f b f;
+#X obj 469 86 pack 0 s 0;
+#X obj 487 65 symbol gain;
+#X obj 469 108 iiroute 4 6 10;
+#X floatatom 469 300 5 0 0 0 - - -;
+#X floatatom 495 239 5 0 0 0 - - -;
+#X obj 469 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 319 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 495 257 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 521 178 5 0 0 0 - - -;
+#X obj 521 196 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 550 133 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 521 156 route gain delay;
+#X obj 495 218 route gain delay;
+#X obj 469 278 route gain delay;
+#X floatatom 566 176 5 0 0 0 - - -;
+#X obj 566 194 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 540 239 5 0 0 0 - - -;
+#X obj 540 257 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 514 300 5 0 0 0 - - -;
+#X obj 514 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 620 7 4 0 0 0 - - -;
+#X obj 620 29 t f b f;
+#X obj 624 93 pack 0 s 0;
+#X obj 638 52 symbol delay;
+#X obj 718 47 - 8;
+#X text 53 39 1.arg: <int> first route-item;
+#X text 53 52 2.arg: <int> last route-item;
+#X text 60 304 IEM KUG;
+#X text 33 290 (c) musil@iem.at;
+#X text 35 316 graz \, austria 2003;
+#X text 11 8 iem_i_route;
+#X text 102 8 route only list with prepending floats (integers);
+#X text 215 76 (opt. \, default 0);
+#X text 53 64 3.arg: <int> offset \, adding to first and last;
+#X obj 562 62 - 5;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 1 2 4 0;
+#X connect 1 3 5 0;
+#X connect 1 4 6 0;
+#X connect 1 5 7 0;
+#X connect 7 0 8 0;
+#X connect 9 0 14 0;
+#X connect 11 0 24 0;
+#X connect 12 0 15 0;
+#X connect 12 1 17 0;
+#X connect 12 2 19 0;
+#X connect 12 3 21 0;
+#X connect 12 4 23 0;
+#X connect 12 4 31 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 1 13 1;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 24 2 59 0;
+#X connect 25 0 27 0;
+#X connect 26 0 25 1;
+#X connect 27 0 38 0;
+#X connect 27 1 37 0;
+#X connect 27 2 36 0;
+#X connect 27 3 10 0;
+#X connect 27 3 35 0;
+#X connect 28 0 30 0;
+#X connect 29 0 32 0;
+#X connect 33 0 34 0;
+#X connect 36 0 33 0;
+#X connect 36 1 39 0;
+#X connect 37 0 29 0;
+#X connect 37 1 41 0;
+#X connect 38 0 28 0;
+#X connect 38 1 43 0;
+#X connect 39 0 40 0;
+#X connect 41 0 42 0;
+#X connect 43 0 44 0;
+#X connect 45 0 46 0;
+#X connect 46 0 47 0;
+#X connect 46 1 48 0;
+#X connect 46 2 49 0;
+#X connect 47 0 27 0;
+#X connect 48 0 47 1;
+#X connect 49 0 47 2;
+#X connect 59 0 25 2;
diff --git a/iemhelp/help-iem_pbank.pbank b/iemhelp/help-iem_pbank.pbank
new file mode 100644
index 0000000..d6b1249
--- /dev/null
+++ b/iemhelp/help-iem_pbank.pbank
@@ -0,0 +1,10 @@
+1,2,3,4,5,6,abc;
+11,12,13,14,15,16,def;
+21,22,23,24,25,26,ghi;
+31,32,33,34,35,36,jkl;
+41,42,43,44,45,46,mno;
+51,52,53,54,55,56,pqr;
+61,62,63,64,65,66,stu;
+71,72,73,74,75,76,vwx;
+81,82,83,84,85,86,y_z;
+91,92,93,94,95,96,+-+;
diff --git a/iemhelp/help-iem_pbank_csv.pd b/iemhelp/help-iem_pbank_csv.pd
new file mode 100644
index 0000000..84c6ec0
--- /dev/null
+++ b/iemhelp/help-iem_pbank_csv.pd
@@ -0,0 +1,158 @@
+#N canvas 24 9 930 567 10;
+#X obj 188 46 pp 0;
+#X floatatom 188 23 5 0 0 0 - - -;
+#X floatatom 224 31 5 0 0 0 - - -;
+#X floatatom 260 43 5 0 0 0 - - -;
+#X floatatom 295 52 5 0 0 0 - - -;
+#X floatatom 330 61 5 0 0 0 - - -;
+#X obj 224 54 pp 1;
+#X obj 260 66 pp 2;
+#X obj 295 75 pp 3;
+#X obj 330 84 pp 4;
+#X text 25 482 2.arg: <float> nr. of lines = parameter-sets;
+#X text 329 31 input: <list> of <float> para-index;
+#X text 370 43 + <float/sym> parameter;
+#X obj 593 112 openpanel;
+#X obj 593 91 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X obj 681 94 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X obj 681 115 savepanel;
+#X obj 227 421 print out;
+#X floatatom 378 347 5 0 9 0 - - -;
+#X text 380 328 <float> line number for recall and store;
+#X msg 346 222 recall;
+#X msg 323 247 store;
+#X text 654 221 the 2nd symbol of read- or write-message;
+#X text 655 235 should have 3 characters:;
+#X text 656 251 1st char is the kind of separator:;
+#X text 672 262 b .. blank or space;
+#X text 671 272 c .. colon;
+#X text 671 281 s .. semicolon;
+#X text 671 291 t .. tabulator;
+#X text 429 339 0 <= n < number of lines;
+#X text 251 119 prepend column-number of parameter;
+#X text 654 309 2nd char is the kind of end_of_line:;
+#X text 669 320 b .. blank or space + return;
+#X text 668 330 c .. colon + return;
+#X text 668 339 s .. semicolon + return;
+#X text 668 349 r .. return only;
+#X text 655 364 3nd char is the kind of operating-system:;
+#X text 670 375 l .. linux;
+#X text 669 384 w .. windows;
+#X text 671 395 m .. macintosh;
+#X text 8 2 iem_pbank_csv;
+#X text 109 2 parameter-bank with csv-syntax;
+#X obj 39 282 pp 0;
+#X msg 369 195 recall 1 5;
+#X floatatom 366 71 5 0 0 0 - - -;
+#X obj 366 94 pp 5;
+#X symbolatom 401 78 10 0 0 0 - - -;
+#X obj 401 102 pp 6;
+#X msg 593 137 read \$1 csl;
+#X obj 398 394 loadbang;
+#X obj 398 436 pp add;
+#X msg 398 415 0 aaa \, 1 bbb \, 2 ccc \, 3 ddd \, 4 eee \, 5 fff \,
+6 ggg;
+#X obj 479 482 r aaa;
+#X floatatom 479 505 5 0 0 0 - - -;
+#X floatatom 514 505 5 0 0 0 - - -;
+#X obj 514 482 r bbb;
+#X floatatom 549 505 5 0 0 0 - - -;
+#X obj 549 482 r ccc;
+#X symbolatom 692 505 10 0 0 0 - - -;
+#X obj 479 526 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 514 527 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 549 527 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 692 528 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 692 482 r ggg;
+#X floatatom 585 505 5 0 0 0 - - -;
+#X floatatom 620 505 5 0 0 0 - - -;
+#X floatatom 655 505 5 0 0 0 - - -;
+#X obj 585 526 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 620 527 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 655 527 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 585 482 r ddd;
+#X obj 620 482 r eee;
+#X obj 655 482 r fff;
+#X obj 227 372 iem_pbank_csv 7 10;
+#X obj 330 457 list2send 7;
+#X msg 16 197 1.1 2.1 3.1 4.1 5.1 6.1 aa1;
+#X msg 39 220 1.2 2.2 3.2 4.2 5.2 6.2 bb2;
+#X msg 61 244 1.3 2.3 3.3 4.3 5.3 6.3 cc3;
+#X text 386 55 stored in input-buffer;
+#X text 25 472 1.arg: <float> nr. of parameters;
+#X text 18 168 list of all parameters of a line;
+#X text 41 179 stored in input-buffer;
+#X msg 682 137 write \$1 csl;
+#X text 361 246 store input-buffer to memory-line of 2nd input;
+#X text 390 222 recall memory-line to input-buffer;
+#X text 398 231 and output all parameter of this line;
+#X obj 330 403 pp from;
+#X msg 542 167 read iemhelp/help-iem_pbank.pbank csl;
+#X msg 547 190 read help-iem_pbank.pbank csl;
+#X obj 21 357 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 38 355 output input-buffer;
+#X msg 387 168 recall 3 2;
+#X obj 130 424 print zzz;
+#X connect 0 0 73 0;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 7 0;
+#X connect 4 0 8 0;
+#X connect 5 0 9 0;
+#X connect 6 0 73 0;
+#X connect 7 0 73 0;
+#X connect 8 0 73 0;
+#X connect 9 0 73 0;
+#X connect 13 0 48 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 82 0;
+#X connect 18 0 73 1;
+#X connect 20 0 73 0;
+#X connect 21 0 73 0;
+#X connect 42 0 73 0;
+#X connect 43 0 73 0;
+#X connect 44 0 45 0;
+#X connect 45 0 73 0;
+#X connect 46 0 47 0;
+#X connect 47 0 73 0;
+#X connect 48 0 73 0;
+#X connect 49 0 51 0;
+#X connect 50 0 74 0;
+#X connect 51 0 50 0;
+#X connect 52 0 53 0;
+#X connect 53 0 59 0;
+#X connect 54 0 60 0;
+#X connect 55 0 54 0;
+#X connect 56 0 61 0;
+#X connect 57 0 56 0;
+#X connect 58 0 62 0;
+#X connect 63 0 58 0;
+#X connect 64 0 67 0;
+#X connect 65 0 68 0;
+#X connect 66 0 69 0;
+#X connect 70 0 64 0;
+#X connect 71 0 65 0;
+#X connect 72 0 66 0;
+#X connect 73 0 17 0;
+#X connect 73 1 86 0;
+#X connect 73 1 92 0;
+#X connect 75 0 42 0;
+#X connect 76 0 42 0;
+#X connect 77 0 42 0;
+#X connect 82 0 73 0;
+#X connect 86 0 74 0;
+#X connect 87 0 73 0;
+#X connect 88 0 73 0;
+#X connect 89 0 73 0;
+#X connect 91 0 73 0;
diff --git a/iemhelp/help-iem_prepend.pd b/iemhelp/help-iem_prepend.pd
new file mode 100644
index 0000000..c330b74
--- /dev/null
+++ b/iemhelp/help-iem_prepend.pd
@@ -0,0 +1,72 @@
+#N canvas 231 172 611 501 10;
+#X obj 117 376 print;
+#X msg 117 61 1;
+#X obj 238 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 117 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 117 149 11 22;
+#X msg 238 150 33 44;
+#X msg 238 63 3;
+#X msg 117 105 symbol foo;
+#X msg 238 107 symbol zyx;
+#X msg 117 83 float 1.1;
+#X msg 238 85 float 3.3;
+#X msg 117 127 set;
+#X msg 238 128 open;
+#X msg 117 172 list -55 -66;
+#X msg 238 172 list -77 -88;
+#X msg 238 195 list bbb 987;
+#X msg 117 195 list aaa 123;
+#X msg 117 218 jkl 555 uuu;
+#X msg 238 218 poi 777 ttt;
+#X obj 191 377 route bang float symbol list;
+#X obj 242 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 281 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 324 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 367 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 421 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 400 376 anything;
+#X text 262 39 bang clears message-buffer;
+#X text 75 421 (c) musil@iem.kug.ac.at;
+#X text 117 434 IEM KUG;
+#X text 13 7 iem_prepend;
+#X text 213 313 head of output-message;
+#X text 218 302 initials-arguments:;
+#X text 109 7 merge the head-message in front of the tail-message;
+#X text 92 446 graz \, austria 2003;
+#X text 34 284 tail of output-message;
+#X text 226 285 head of output-message;
+#X text 224 275 <- cold inlet;
+#X text 122 274 <- hot inlet;
+#X obj 117 300 iem_prepend set;
+#X connect 1 0 38 0;
+#X connect 2 0 38 1;
+#X connect 3 0 38 0;
+#X connect 4 0 38 0;
+#X connect 5 0 38 1;
+#X connect 6 0 38 1;
+#X connect 7 0 38 0;
+#X connect 8 0 38 1;
+#X connect 9 0 38 0;
+#X connect 10 0 38 1;
+#X connect 11 0 38 0;
+#X connect 12 0 38 1;
+#X connect 13 0 38 0;
+#X connect 14 0 38 1;
+#X connect 15 0 38 1;
+#X connect 16 0 38 0;
+#X connect 17 0 38 0;
+#X connect 18 0 38 1;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 19 2 22 0;
+#X connect 19 3 23 0;
+#X connect 19 4 24 0;
+#X connect 38 0 0 0;
+#X connect 38 0 19 0;
diff --git a/iemhelp/help-iem_receive.pd b/iemhelp/help-iem_receive.pd
new file mode 100644
index 0000000..e59d7ef
--- /dev/null
+++ b/iemhelp/help-iem_receive.pd
@@ -0,0 +1,39 @@
+#N canvas 115 112 637 338 10;
+#X obj 62 204 iem_receive aaa;
+#X obj 222 204 iem_r bbb;
+#X floatatom 62 236 5 0 0 0 - - -;
+#X floatatom 222 236 5 0 0 0 - - -;
+#X msg 66 60 \; aaa 33 \; bbb 44;
+#X obj 108 232 print a;
+#X obj 271 231 print b;
+#X msg 62 172 set ccc;
+#X msg 222 173 set ddd;
+#X msg 401 61 \; ccc 55 \; ddd 66;
+#X msg 35 147 set aaa;
+#X msg 200 147 set bbb;
+#X msg 124 178 clear;
+#X msg 287 178 clear;
+#X text 11 12 iem_receive;
+#X text 106 12 receive-object with changeable receive-label;
+#X text 287 204 1.arg: <symbol> or <float> receive-label;
+#X floatatom 82 257 5 0 0 0 - - -;
+#X obj 54 260 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 236 261 5 0 0 0 - - -;
+#X obj 208 264 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 155 60 \; aaa set 11 \; bbb set 22;
+#X connect 0 0 2 0;
+#X connect 0 0 5 0;
+#X connect 1 0 3 0;
+#X connect 1 0 6 0;
+#X connect 2 0 17 0;
+#X connect 2 0 18 0;
+#X connect 3 0 19 0;
+#X connect 3 0 20 0;
+#X connect 7 0 0 0;
+#X connect 8 0 1 0;
+#X connect 10 0 0 0;
+#X connect 11 0 1 0;
+#X connect 12 0 0 0;
+#X connect 13 0 1 0;
diff --git a/iemhelp/help-iem_route.pd b/iemhelp/help-iem_route.pd
new file mode 100644
index 0000000..79d68b7
--- /dev/null
+++ b/iemhelp/help-iem_route.pd
@@ -0,0 +1,41 @@
+#N canvas 318 30 489 283 10;
+#X obj 26 113 route red black;
+#X msg 26 79 red;
+#X msg 61 79 black;
+#X msg 26 139 3;
+#X msg 76 139 4;
+#X floatatom 26 173 4 0 0;
+#X obj 157 115 route red black;
+#X msg 157 81 red;
+#X msg 192 81 black;
+#X floatatom 157 175 4 0 0;
+#X obj 157 144 f 3;
+#X obj 207 143 f 4;
+#X text 30 211 OK;
+#X text 156 210 failed !;
+#X msg 299 81 red;
+#X msg 334 81 black;
+#X floatatom 299 175 4 0 0;
+#X obj 299 144 f 3;
+#X obj 363 142 f 4;
+#X obj 299 115 iem_route red black;
+#X text 298 209 that's the difference;
+#X text 35 30 iem_route quite similar to route \, except....;
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 6 0 10 0;
+#X connect 6 1 11 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 14 0 19 0;
+#X connect 15 0 19 0;
+#X connect 17 0 16 0;
+#X connect 18 0 16 0;
+#X connect 19 0 17 0;
+#X connect 19 1 18 0;
diff --git a/iemhelp/help-iem_samplerate~.pd b/iemhelp/help-iem_samplerate~.pd
new file mode 100644
index 0000000..f7aca46
--- /dev/null
+++ b/iemhelp/help-iem_samplerate~.pd
@@ -0,0 +1,37 @@
+#N canvas 184 90 489 296 10;
+#X obj 12 66 dsp;
+#X floatatom 12 93 5 0 0 0 - - -;
+#X obj 12 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 47 217 (c) musil@iem.kug.ac.at;
+#X text 89 230 IEM KUG;
+#X text 64 242 graz \, austria 2003;
+#X obj 92 131 iem_samplerate~;
+#X obj 92 106 osc~ 440;
+#X floatatom 92 163 7 0 0 0 - - -;
+#X text 143 163 Hz;
+#X obj 92 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 40 37 <- toggle here;
+#N canvas 383 167 452 302 down 0;
+#X obj 98 74 inlet~;
+#X obj 188 79 block~ 32 1 0.5;
+#X obj 98 132 iem_samplerate~;
+#X obj 98 161 outlet;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X restore 305 132 pd down;
+#X floatatom 305 162 7 0 0 0 - - -;
+#X text 356 162 Hz;
+#X obj 305 182 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 131 8 output the current samplerate of a window;
+#X text 11 6 iem_samplerate~;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 7 0 12 0;
+#X connect 8 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 15 0;
diff --git a/iemhelp/help-iem_sel_any.pd b/iemhelp/help-iem_sel_any.pd
new file mode 100644
index 0000000..3718715
--- /dev/null
+++ b/iemhelp/help-iem_sel_any.pd
@@ -0,0 +1,53 @@
+#N canvas 480 230 729 405 10;
+#X obj 356 313 print;
+#X obj 145 137 modulo_counter 4 0;
+#X floatatom 145 159 2 0 3 0 - - -;
+#X obj 472 46 loadbang;
+#X obj 145 111 bang;
+#X floatatom 237 87 5 0 3 0 - - -;
+#X obj 237 110 t b f;
+#X obj 237 66 init 0;
+#X text 85 337 (c) musil@iem.kug.ac.at;
+#X text 127 350 IEM KUG;
+#X msg 90 152 0;
+#X msg 90 173 1;
+#X msg 90 193 2;
+#X msg 90 214 3;
+#X text 371 290 2.outlet: pure message (symbol becomes anything-selector)
+;
+#X text 234 284 1.outlet:;
+#X text 12 7 iem_sel_any;
+#X obj 472 96 pp add;
+#X msg 472 71 0 aa \, 1 bbb \, 2 cccc \, 3 ddddd;
+#X text 102 362 graz \, austria 2003;
+#X text 162 7 control a message-box with multiple content;
+#X text 378 267 1.arg: <float> max. number of messages;
+#X msg 396 206 clear;
+#X text 401 223 <clear> message : clears content;
+#X text 171 171 <float> message-index;
+#X text 511 141 adds a new entry into object;
+#X obj 277 268 iem_sel_any 10;
+#X text 462 126 <add> message + <float> index + <symbol> entry;
+#X text 147 295 <set> message + <symbol> entry;
+#X text 45 84 click here ->;
+#X obj 145 84 cnv 15 34 17 empty empty empty 20 12 0 14 -225280 -66577
+0;
+#X msg 145 84 ddddd;
+#X connect 1 0 2 0;
+#X connect 2 0 26 0;
+#X connect 3 0 18 0;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 6 0 1 0;
+#X connect 6 1 1 1;
+#X connect 7 0 5 0;
+#X connect 10 0 26 0;
+#X connect 11 0 26 0;
+#X connect 12 0 26 0;
+#X connect 13 0 26 0;
+#X connect 17 0 26 0;
+#X connect 18 0 17 0;
+#X connect 22 0 26 0;
+#X connect 26 0 31 0;
+#X connect 26 1 0 0;
+#X connect 31 0 4 0;
diff --git a/iemhelp/help-iem_send.pd b/iemhelp/help-iem_send.pd
new file mode 100644
index 0000000..1debc06
--- /dev/null
+++ b/iemhelp/help-iem_send.pd
@@ -0,0 +1,62 @@
+#N canvas 115 112 707 469 10;
+#X floatatom 43 317 5 0 0 0 - - -;
+#X msg 136 107 set ccc;
+#X msg 363 104 set ddd;
+#X msg 109 82 set aaa;
+#X msg 341 78 set bbb;
+#X msg 198 113 clear;
+#X msg 428 109 clear;
+#X floatatom 57 342 5 0 0 0 - - -;
+#X obj 29 345 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 42 144 iem_send aaa;
+#X obj 292 144 iem_s bbb;
+#X obj 43 291 r aaa;
+#X obj 167 291 r bbb;
+#X obj 321 294 r ccc;
+#X obj 457 294 r ddd;
+#X floatatom 167 316 5 0 0 0 - - -;
+#X floatatom 181 341 5 0 0 0 - - -;
+#X obj 153 344 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 321 318 5 0 0 0 - - -;
+#X floatatom 335 343 5 0 0 0 - - -;
+#X obj 307 346 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 457 319 5 0 0 0 - - -;
+#X floatatom 471 344 5 0 0 0 - - -;
+#X obj 443 347 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 357 144 1.arg: <symbol> or <float> send-label;
+#X floatatom 14 76 5 0 0 0 - - -;
+#X text 11 12 iem_send;
+#X text 106 12 send-object with changeable send-label;
+#X floatatom 48 77 5 0 0 0 - - -;
+#X msg 48 98 set \$1;
+#X floatatom 261 80 5 0 0 0 - - -;
+#X floatatom 295 81 5 0 0 0 - - -;
+#X msg 295 102 set \$1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 0;
+#X connect 1 0 9 1;
+#X connect 2 0 10 1;
+#X connect 3 0 9 1;
+#X connect 4 0 10 1;
+#X connect 5 0 9 1;
+#X connect 6 0 10 1;
+#X connect 11 0 0 0;
+#X connect 12 0 15 0;
+#X connect 13 0 18 0;
+#X connect 14 0 21 0;
+#X connect 15 0 16 0;
+#X connect 15 0 17 0;
+#X connect 18 0 19 0;
+#X connect 18 0 20 0;
+#X connect 21 0 22 0;
+#X connect 21 0 23 0;
+#X connect 25 0 9 0;
+#X connect 28 0 29 0;
+#X connect 29 0 9 0;
+#X connect 30 0 10 0;
+#X connect 31 0 32 0;
+#X connect 32 0 10 0;
diff --git a/iemhelp/help-ii.pd b/iemhelp/help-ii.pd
new file mode 100644
index 0000000..2abc26c
--- /dev/null
+++ b/iemhelp/help-ii.pd
@@ -0,0 +1,46 @@
+#N canvas 156 133 532 351 10;
+#X msg 81 54 2.5;
+#X msg 20 54 bang;
+#X msg 121 55 23 64;
+#X text 55 249 the above can be abbreviated as:;
+#X msg 168 55 symbol dog;
+#X msg 260 55 open myfile 888;
+#X obj 20 106 init;
+#X obj 287 249 ii;
+#X obj 20 133 print x1;
+#X obj 95 107 init 44;
+#X obj 95 132 print x2;
+#X obj 190 134 print x3;
+#X obj 190 109 init www;
+#X obj 274 110 init symbol www;
+#X obj 274 134 print x4;
+#X obj 21 179 ii open file 22;
+#X obj 21 203 print x5;
+#X obj 144 180 ii list open file 22;
+#X obj 144 203 print x6;
+#X obj 301 181 ii list 6 7 8;
+#X obj 301 204 print x7;
+#X obj 409 181 ii 9 8 7;
+#X obj 409 204 print x8;
+#X obj 412 138 print x9;
+#X obj 412 112 init float 77;
+#X msg 389 58 11 22 33 aa bb cc;
+#X text 17 282 (c) musil@iem.kug.ac.at;
+#X text 59 295 IEM KUG;
+#X text 34 307 graz \, austria 2001;
+#X text 18 17 init : initialize anything by loadbang;
+#X connect 0 0 6 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 4 0 6 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 9 0 10 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 24 0 23 0;
+#X connect 25 0 6 0;
diff --git a/iemhelp/help-iiroute.pd b/iemhelp/help-iiroute.pd
new file mode 100644
index 0000000..4d0b3c7
--- /dev/null
+++ b/iemhelp/help-iiroute.pd
@@ -0,0 +1,132 @@
+#N canvas 167 225 749 365 10;
+#X floatatom 25 136 4 0 0 0 - - -;
+#X obj 25 161 iem_i_route 3 7;
+#X obj 25 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 45 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 65 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 85 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1
+-1;
+#X obj 105 197 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 133 189 4 0 0 0 - - -;
+#X obj 133 214 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 201 135 4 0 0 0 - - -;
+#X obj 569 132 print rejected;
+#X floatatom 469 20 4 0 0 0 - - -;
+#X obj 191 204 iiroute 2 5 _______;
+#X obj 191 182 pack 0 0;
+#X obj 201 157 t f f;
+#X floatatom 191 230 2 0 0 0 - - -;
+#X obj 191 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 223 230 2 0 0 0 - - -;
+#X obj 223 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 255 230 2 0 0 0 - - -;
+#X obj 255 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X floatatom 287 230 2 0 0 0 - - -;
+#X obj 287 255 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144
+-1 -1;
+#X obj 319 230 print rejected;
+#X obj 469 42 t f b f;
+#X obj 469 86 pack 0 s 0;
+#X obj 487 65 symbol gain;
+#X obj 469 108 iiroute 4 6 10;
+#X floatatom 469 300 5 0 0 0 - - -;
+#X floatatom 495 239 5 0 0 0 - - -;
+#X obj 469 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 319 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 495 257 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 521 178 5 0 0 0 - - -;
+#X obj 521 196 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 550 133 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 521 156 route gain delay;
+#X obj 495 218 route gain delay;
+#X obj 469 278 route gain delay;
+#X floatatom 566 176 5 0 0 0 - - -;
+#X obj 566 194 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 540 239 5 0 0 0 - - -;
+#X obj 540 257 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 514 300 5 0 0 0 - - -;
+#X obj 514 318 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 620 7 4 0 0 0 - - -;
+#X obj 620 29 t f b f;
+#X obj 624 93 pack 0 s 0;
+#X obj 638 52 symbol delay;
+#X obj 718 47 - 8;
+#X text 53 39 1.arg: <int> first route-item;
+#X text 53 52 2.arg: <int> last route-item;
+#X text 60 304 IEM KUG;
+#X text 33 290 (c) musil@iem.at;
+#X text 35 316 graz \, austria 2003;
+#X text 11 8 iem_i_route;
+#X text 102 8 route only list with prepending floats (integers);
+#X text 215 76 (opt. \, default 0);
+#X text 53 64 3.arg: <int> offset \, adding to first and last;
+#X obj 562 62 - 5;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 1 2 4 0;
+#X connect 1 3 5 0;
+#X connect 1 4 6 0;
+#X connect 1 5 7 0;
+#X connect 7 0 8 0;
+#X connect 9 0 14 0;
+#X connect 11 0 24 0;
+#X connect 12 0 15 0;
+#X connect 12 1 17 0;
+#X connect 12 2 19 0;
+#X connect 12 3 21 0;
+#X connect 12 4 23 0;
+#X connect 12 4 31 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 1 13 1;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 24 2 59 0;
+#X connect 25 0 27 0;
+#X connect 26 0 25 1;
+#X connect 27 0 38 0;
+#X connect 27 1 37 0;
+#X connect 27 2 36 0;
+#X connect 27 3 10 0;
+#X connect 27 3 35 0;
+#X connect 28 0 30 0;
+#X connect 29 0 32 0;
+#X connect 33 0 34 0;
+#X connect 36 0 33 0;
+#X connect 36 1 39 0;
+#X connect 37 0 29 0;
+#X connect 37 1 41 0;
+#X connect 38 0 28 0;
+#X connect 38 1 43 0;
+#X connect 39 0 40 0;
+#X connect 41 0 42 0;
+#X connect 43 0 44 0;
+#X connect 45 0 46 0;
+#X connect 46 0 47 0;
+#X connect 46 1 48 0;
+#X connect 46 2 49 0;
+#X connect 47 0 27 0;
+#X connect 48 0 47 1;
+#X connect 49 0 47 2;
+#X connect 59 0 25 2;
diff --git a/iemhelp/help-init.pd b/iemhelp/help-init.pd
new file mode 100644
index 0000000..a387140
--- /dev/null
+++ b/iemhelp/help-init.pd
@@ -0,0 +1,46 @@
+#N canvas 156 133 530 349 10;
+#X msg 81 54 2.5;
+#X msg 20 54 bang;
+#X msg 121 55 23 64;
+#X text 55 249 the above can be abbreviated as:;
+#X msg 168 55 symbol dog;
+#X msg 260 55 open myfile 888;
+#X obj 20 106 init;
+#X obj 287 249 ii;
+#X obj 20 133 print x1;
+#X obj 95 107 init 44;
+#X obj 95 132 print x2;
+#X obj 190 134 print x3;
+#X obj 190 109 init www;
+#X obj 274 110 init symbol www;
+#X obj 274 134 print x4;
+#X obj 21 179 ii open file 22;
+#X obj 21 203 print x5;
+#X obj 144 180 ii list open file 22;
+#X obj 144 203 print x6;
+#X obj 301 181 ii list 6 7 8;
+#X obj 301 204 print x7;
+#X obj 409 181 ii 9 8 7;
+#X obj 409 204 print x8;
+#X obj 412 138 print x9;
+#X obj 412 112 init float 77;
+#X msg 389 58 11 22 33 aa bb cc;
+#X text 17 282 (c) musil@iem.kug.ac.at;
+#X text 59 295 IEM KUG;
+#X text 34 307 graz \, austria 2001;
+#X text 18 17 init : initialize anything by loadbang;
+#X connect 0 0 6 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 4 0 6 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 9 0 10 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 24 0 23 0;
+#X connect 25 0 6 0;
diff --git a/iemhelp/help-int_fract~.pd b/iemhelp/help-int_fract~.pd
new file mode 100644
index 0000000..0b53455
--- /dev/null
+++ b/iemhelp/help-int_fract~.pd
@@ -0,0 +1,32 @@
+#N canvas 375 118 408 332 10;
+#X text 11 273 (c) musil@iem.kug.ac.at;
+#X text 53 286 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 45 225 7 0 0 0 - - -;
+#X floatatom 46 119 7 0 0 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 9 5 round~;
+#X obj 46 141 sig~;
+#X obj 45 203 unsig~;
+#X text 120 168 no arg;
+#X text 28 298 graz \, austria 2003;
+#X obj 45 170 int_fract~;
+#X floatatom 101 224 7 0 0 0 - - -;
+#X obj 101 202 unsig~;
+#X text 12 239 truncated int;
+#X text 102 239 fractal part;
+#X text 87 28 and the fractal part of the float-number;
+#X text 64 6 signal-float-splitting to the;
+#X text 74 17 truncated signal-integer-number;
+#X connect 4 0 10 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 14 0;
+#X connect 11 0 3 0;
+#X connect 14 0 11 0;
+#X connect 14 1 16 0;
+#X connect 16 0 15 0;
diff --git a/iemhelp/help-list2send.pd b/iemhelp/help-list2send.pd
new file mode 100644
index 0000000..6661874
--- /dev/null
+++ b/iemhelp/help-list2send.pd
@@ -0,0 +1,83 @@
+#N canvas 163 45 792 556 10;
+#X msg 209 141 0 aaa \, 1 bbb \, 2 ccc \, 3 ddd \, 4 eee;
+#X text 296 119 init;
+#X obj 209 120 loadbang;
+#X msg 260 167 clear;
+#X text 199 62 the corresponding prepend-floats and receive-symbols
+;
+#X text 199 49 with a prepended float.;
+#X text 200 76 have to be inputed via a set message.;
+#X text 41 505 IEM KUG;
+#X text 15 516 graz \, austria 2003;
+#X text 13 492 (c) musil@iem.at;
+#X text 10 13 list2send;
+#X obj 209 162 pp add;
+#X obj 68 391 r aaa;
+#X floatatom 68 414 5 0 0 0 - - -;
+#X floatatom 103 414 5 0 0 0 - - -;
+#X obj 103 391 r bbb;
+#X floatatom 138 414 5 0 0 0 - - -;
+#X obj 138 391 r ccc;
+#X obj 197 390 r ddd;
+#X floatatom 197 415 8 0 0 0 - - -;
+#X obj 281 391 r eee;
+#X symbolatom 281 414 10 0 0 0 - - -;
+#X obj 68 435 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 103 436 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 138 436 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 197 437 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 281 437 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 23 143 pp 0;
+#X floatatom 23 125 5 0 0 0 - - -;
+#X floatatom 67 127 5 0 0 0 - - -;
+#X obj 67 145 pp 1;
+#X floatatom 109 128 5 0 0 0 - - -;
+#X obj 109 146 pp 2;
+#X floatatom 152 128 8 0 0 0 - - -;
+#X obj 152 147 pp 3;
+#X symbolatom 30 205 10 0 0 0 - - -;
+#X obj 30 225 pp 4;
+#X floatatom 460 129 5 0 0 0 - - -;
+#X obj 460 147 pp set 1;
+#X msg 469 184 set_all 1.1 2.2 3.3 4.4444 abcdefg;
+#X msg 448 224 all 0.1 0.2 0.3 0.45678 zyxwvu;
+#X obj 209 217 list2send 5;
+#X msg 421 326 from 3 0.9876 lmnop;
+#X msg 442 286 set_from 3 2.2222 zzzzzz;
+#X text 131 14 convert some kind of lists to a sended message;
+#X text 109 247 1.arg: <float> max. number of sended parameters;
+#X connect 0 0 11 0;
+#X connect 2 0 0 0;
+#X connect 3 0 41 0;
+#X connect 11 0 41 0;
+#X connect 12 0 13 0;
+#X connect 13 0 22 0;
+#X connect 14 0 23 0;
+#X connect 15 0 14 0;
+#X connect 16 0 24 0;
+#X connect 17 0 16 0;
+#X connect 18 0 19 0;
+#X connect 19 0 25 0;
+#X connect 20 0 21 0;
+#X connect 21 0 26 0;
+#X connect 27 0 41 0;
+#X connect 28 0 27 0;
+#X connect 29 0 30 0;
+#X connect 30 0 41 0;
+#X connect 31 0 32 0;
+#X connect 32 0 41 0;
+#X connect 33 0 34 0;
+#X connect 34 0 41 0;
+#X connect 35 0 36 0;
+#X connect 36 0 41 0;
+#X connect 37 0 38 0;
+#X connect 38 0 41 0;
+#X connect 39 0 41 0;
+#X connect 40 0 41 0;
+#X connect 42 0 41 0;
+#X connect 43 0 41 0;
diff --git a/iemhelp/help-lp10_butt~.pd b/iemhelp/help-lp10_butt~.pd
new file mode 100644
index 0000000..16ac2d4
--- /dev/null
+++ b/iemhelp/help-lp10_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 154 3 15 133 0 - - -;
+#X obj 96 173 mtof;
+#X floatatom 96 192 9 0 22000 0 - - -;
+#X text 160 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X obj 45 237 lp10_butt~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-lp10_cheb~.pd b/iemhelp/help-lp10_cheb~.pd
new file mode 100644
index 0000000..777ef3f
--- /dev/null
+++ b/iemhelp/help-lp10_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 367 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 149 3 15 133 0 - - -;
+#X obj 96 168 mtof;
+#X floatatom 96 187 9 0 22000 0 - - -;
+#X text 160 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp10_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp10_crit~.pd b/iemhelp/help-lp10_crit~.pd
new file mode 100644
index 0000000..3ba99ad
--- /dev/null
+++ b/iemhelp/help-lp10_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 96 149 3 15 133 0 - - -;
+#X obj 96 168 mtof;
+#X floatatom 96 187 9 0 22000 0 - - -;
+#X text 160 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 148 217 5 2 9999 0 - - -;
+#X text 189 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp10_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp1_t~.pd b/iemhelp/help-lp1_t~.pd
new file mode 100644
index 0000000..eeb2d18
--- /dev/null
+++ b/iemhelp/help-lp1_t~.pd
@@ -0,0 +1,56 @@
+#N canvas 152 8 561 548 10;
+#X text 109 239 ~signal_in~;
+#X text 12 499 (c) musil@iem.kug.ac.at;
+#X text 54 512 IEM KUG;
+#X text 38 33 dsp ON/OFF;
+#X floatatom 191 175 5 0 1005 0 - - -;
+#X text 172 273 ~signal_out~;
+#X floatatom 21 73 5 0 0 0 - - -;
+#X text 60 74 % cpu;
+#X floatatom 231 225 5 2 9999 0 - - -;
+#X text 273 226 ms;
+#X obj 21 53 dsp;
+#X obj 21 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X text 29 524 graz \, austria 2001;
+#X text 292 265 2.arg:<float> interpolation_time [ms];
+#X text 234 174 ms;
+#X obj 152 255 lp1_t~ 0.5 200;
+#X text 234 210 interpolation_time [ms];
+#X text 230 159 time_constant [ms];
+#X text 292 254 1.arg:<float> time_constant [ms];
+#X obj 152 100 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 74 197 t b;
+#X obj 152 153 sig~;
+#N canvas 0 0 450 300 graph1 0;
+#X array scope 400 float 0;
+#X coords 0 1 399 0 400 80 1;
+#X restore 39 349 graph;
+#X obj 74 306 tabwrite~ scope;
+#X msg 217 115 0.2;
+#X msg 248 115 0.5;
+#X msg 278 116 1.5;
+#X msg 270 503 \; scope xticks 0 22 2;
+#X obj 270 482 loadbang;
+#X text 79 431 1;
+#X text 123 431 2;
+#X text 168 431 3 ms;
+#X floatatom 162 130 5 0 0 0 - - -;
+#X obj 13 13 cnv 8 1 1 empty empty lp1_t~ 1 2 1 18 -262144 -1109 0
+;
+#X text 102 8 lowpass 1.order with time_constant-inlet;
+#X connect 4 0 15 1;
+#X connect 8 0 15 2;
+#X connect 10 0 6 0;
+#X connect 11 0 10 0;
+#X connect 15 0 23 0;
+#X connect 19 0 20 0;
+#X connect 19 0 21 0;
+#X connect 19 0 32 0;
+#X connect 20 0 23 0;
+#X connect 21 0 15 0;
+#X connect 24 0 4 0;
+#X connect 25 0 4 0;
+#X connect 26 0 4 0;
+#X connect 28 0 27 0;
diff --git a/iemhelp/help-lp1~.pd b/iemhelp/help-lp1~.pd
new file mode 100644
index 0000000..2aad09c
--- /dev/null
+++ b/iemhelp/help-lp1~.pd
@@ -0,0 +1,55 @@
+#N canvas 257 125 373 456 10;
+#X text 13 245 ~signal_in~;
+#X text 22 392 (c) musil@iem.kug.ac.at;
+#X text 64 405 IEM KUG;
+#X text 38 33 dsp ON/OFF;
+#X floatatom 89 162 3 15 133 0 - - -;
+#X obj 89 181 mtof;
+#X floatatom 89 200 9 0 22000 0 - - -;
+#X text 153 201 Hz;
+#X text 68 274 ~signal_out~;
+#X floatatom 195 258 7 0 0 0 - - -;
+#X text 246 259 dB;
+#X floatatom 129 143 9 0 22000 0 - - -;
+#X text 193 144 Hz;
+#X floatatom 56 104 3 15 133 0 - - -;
+#X floatatom 21 73 5 0 0 0 - - -;
+#X text 60 74 % cpu;
+#X floatatom 123 235 5 2 9999 0 - - -;
+#X text 164 236 ms;
+#X obj 21 53 dsp;
+#X obj 21 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 56 319 dac~;
+#X obj 56 294 gainvu~ 300;
+#X obj 234 136 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 295 163 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 56 123 testtone~ 200;
+#X text 39 417 graz \, austria 2001;
+#X obj 120 89 init 69;
+#X text 83 105 midi;
+#X text 21 344 1.arg:<float> cutoff_freq. [Hz];
+#X text 21 354 2.arg:<float> interpolation_time [ms];
+#X obj 56 260 lp1~ 440 200;
+#X floatatom 266 309 7 0 0 0 - - -;
+#X text 317 310 dB;
+#X obj 13 13 cnv 8 1 1 empty empty lp1~ 1 2 1 18 -262144 -1109 0;
+#X text 83 6 lowpass 1.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 30 1;
+#X connect 13 0 24 0;
+#X connect 16 0 30 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 31 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 30 0;
+#X connect 24 1 11 0;
+#X connect 26 0 13 0;
+#X connect 30 0 21 0;
diff --git a/iemhelp/help-lp2_butt~.pd b/iemhelp/help-lp2_butt~.pd
new file mode 100644
index 0000000..a830874
--- /dev/null
+++ b/iemhelp/help-lp2_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp2_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp2_cheb~.pd b/iemhelp/help-lp2_cheb~.pd
new file mode 100644
index 0000000..c408d25
--- /dev/null
+++ b/iemhelp/help-lp2_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 393 graz \, austria 2003;
+#X obj 45 237 lp2_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp2_crit~.pd b/iemhelp/help-lp2_crit~.pd
new file mode 100644
index 0000000..e8c8513
--- /dev/null
+++ b/iemhelp/help-lp2_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 379 448 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp2_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp2~.pd b/iemhelp/help-lp2~.pd
new file mode 100644
index 0000000..6fe74a8
--- /dev/null
+++ b/iemhelp/help-lp2~.pd
@@ -0,0 +1,60 @@
+#N canvas 285 129 387 460 10;
+#X text 11 255 ~signal_in~;
+#X text 24 389 (c) musil@iem.kug.ac.at;
+#X text 66 402 IEM KUG;
+#X text 36 43 dsp ON/OFF;
+#X floatatom 88 171 3 15 133 0 - - -;
+#X obj 88 190 mtof;
+#X floatatom 88 209 9 0 22000 0 - - -;
+#X text 152 210 Hz;
+#X text 66 284 ~signal_out~;
+#X floatatom 191 284 7 0 0 0 - - -;
+#X text 242 285 dB;
+#X floatatom 127 153 9 0 22000 0 - - -;
+#X text 191 154 Hz;
+#X floatatom 54 114 3 15 133 0 - - -;
+#X floatatom 19 83 5 0 0 0 - - -;
+#X text 61 83 % cpu;
+#X floatatom 157 250 5 2 9999 0 - - -;
+#X text 198 251 ms;
+#X obj 19 63 dsp;
+#X floatatom 122 232 4 0.01 1000 0 - - -;
+#X text 157 232 Q;
+#X text 88 354 2.arg:<float> Q [-];
+#X text 88 364 3.arg:<float> interpolation_time [ms];
+#X obj 19 43 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 54 329 dac~;
+#X obj 54 304 gainvu~ 300;
+#X obj 236 162 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 296 173 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 54 133 testtone~ 200;
+#X text 41 414 graz \, austria 2001;
+#X obj 118 99 init 69;
+#X text 81 115 midi;
+#X obj 54 270 lp2~ 440 0.707 200;
+#X text 88 344 1.arg:<float> cutoff_freq. [Hz];
+#X floatatom 278 319 7 0 0 0 - - -;
+#X text 329 320 dB;
+#X text 45 62 performance: 0.22 % at 400 MHz-Pentium \, sr=44100;
+#X obj 13 13 cnv 8 1 1 empty empty lp2~ 1 2 1 18 -262144 -1109 0;
+#X text 83 6 lowpass 2.order;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 28 0;
+#X connect 16 0 32 3;
+#X connect 18 0 14 0;
+#X connect 19 0 32 2;
+#X connect 23 0 18 0;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 34 0;
+#X connect 25 2 26 0;
+#X connect 26 1 9 0;
+#X connect 27 0 25 1;
+#X connect 28 0 32 0;
+#X connect 28 1 11 0;
+#X connect 30 0 13 0;
+#X connect 32 0 25 0;
diff --git a/iemhelp/help-lp3_butt~.pd b/iemhelp/help-lp3_butt~.pd
new file mode 100644
index 0000000..8c427ae
--- /dev/null
+++ b/iemhelp/help-lp3_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp3_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp3_cheb~.pd b/iemhelp/help-lp3_cheb~.pd
new file mode 100644
index 0000000..9465d1d
--- /dev/null
+++ b/iemhelp/help-lp3_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 371 440 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 393 graz \, austria 2003;
+#X obj 45 237 lp3_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp3_crit~.pd b/iemhelp/help-lp3_crit~.pd
new file mode 100644
index 0000000..02082bd
--- /dev/null
+++ b/iemhelp/help-lp3_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 377 446 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp3_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp4_butt~.pd b/iemhelp/help-lp4_butt~.pd
new file mode 100644
index 0000000..c1d88bd
--- /dev/null
+++ b/iemhelp/help-lp4_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp4_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp4_cheb~.pd b/iemhelp/help-lp4_cheb~.pd
new file mode 100644
index 0000000..18f4d4d
--- /dev/null
+++ b/iemhelp/help-lp4_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 66 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 lp4_cheb~ 440 200;
+#X text 28 393 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-lp4_crit~.pd b/iemhelp/help-lp4_crit~.pd
new file mode 100644
index 0000000..c3c89bc
--- /dev/null
+++ b/iemhelp/help-lp4_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 377 446 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 129 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp4_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp5_butt~.pd b/iemhelp/help-lp5_butt~.pd
new file mode 100644
index 0000000..88114f1
--- /dev/null
+++ b/iemhelp/help-lp5_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp5_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp5_cheb~.pd b/iemhelp/help-lp5_cheb~.pd
new file mode 100644
index 0000000..8536f61
--- /dev/null
+++ b/iemhelp/help-lp5_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp5_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp5_crit~.pd b/iemhelp/help-lp5_crit~.pd
new file mode 100644
index 0000000..f4b4dfd
--- /dev/null
+++ b/iemhelp/help-lp5_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 377 446 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp5_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp6_butt~.pd b/iemhelp/help-lp6_butt~.pd
new file mode 100644
index 0000000..c09b8d8
--- /dev/null
+++ b/iemhelp/help-lp6_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp6_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp6_cheb~.pd b/iemhelp/help-lp6_cheb~.pd
new file mode 100644
index 0000000..79bd95d
--- /dev/null
+++ b/iemhelp/help-lp6_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 369 438 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X obj 45 237 lp6_cheb~ 440 200;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 1;
+#X connect 13 0 24 0;
+#X connect 16 0 32 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 32 0 21 0;
diff --git a/iemhelp/help-lp6_crit~.pd b/iemhelp/help-lp6_crit~.pd
new file mode 100644
index 0000000..f070345
--- /dev/null
+++ b/iemhelp/help-lp6_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp6_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp7_butt~.pd b/iemhelp/help-lp7_butt~.pd
new file mode 100644
index 0000000..53f64a0
--- /dev/null
+++ b/iemhelp/help-lp7_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp7_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp7_cheb~.pd b/iemhelp/help-lp7_cheb~.pd
new file mode 100644
index 0000000..e581d27
--- /dev/null
+++ b/iemhelp/help-lp7_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 367 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp7_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp7_crit~.pd b/iemhelp/help-lp7_crit~.pd
new file mode 100644
index 0000000..5b338b8
--- /dev/null
+++ b/iemhelp/help-lp7_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 375 444 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp7_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp8_butt~.pd b/iemhelp/help-lp8_butt~.pd
new file mode 100644
index 0000000..10b68ff
--- /dev/null
+++ b/iemhelp/help-lp8_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp8_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp8_cheb~.pd b/iemhelp/help-lp8_cheb~.pd
new file mode 100644
index 0000000..d7d6fe6
--- /dev/null
+++ b/iemhelp/help-lp8_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 367 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X obj 45 237 lp8_cheb~ 440 200;
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 29 1;
+#X connect 13 0 24 0;
+#X connect 16 0 29 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 30 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 29 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 29 0 21 0;
diff --git a/iemhelp/help-lp8_crit~.pd b/iemhelp/help-lp8_crit~.pd
new file mode 100644
index 0000000..4d3b76a
--- /dev/null
+++ b/iemhelp/help-lp8_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 148 3 15 133 0 - - -;
+#X obj 93 167 mtof;
+#X floatatom 93 186 9 0 22000 0 - - -;
+#X text 157 187 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 216 5 2 9999 0 - - -;
+#X text 183 217 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 151 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp8_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp9_butt~.pd b/iemhelp/help-lp9_butt~.pd
new file mode 100644
index 0000000..ce2648f
--- /dev/null
+++ b/iemhelp/help-lp9_butt~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 385 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 154 3 15 133 0 - - -;
+#X obj 93 173 mtof;
+#X floatatom 93 192 9 0 22000 0 - - -;
+#X text 157 193 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 205 253 7 0 0 0 - - -;
+#X text 257 254 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 49 52 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 257 131 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 329 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 40 319 1.arg:<float> cutoff_freq. [Hz];
+#X text 40 329 2.arg:<float> interpolation_time [ms];
+#X floatatom 305 288 7 0 0 0 - - -;
+#X text 357 289 dB;
+#X text 157 236 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp9_butt~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp9_cheb~.pd b/iemhelp/help-lp9_cheb~.pd
new file mode 100644
index 0000000..0328ec1
--- /dev/null
+++ b/iemhelp/help-lp9_cheb~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 367 436 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 149 3 15 133 0 - - -;
+#X obj 93 168 mtof;
+#X floatatom 93 187 9 0 22000 0 - - -;
+#X text 157 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp9_cheb~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-lp9_crit~.pd b/iemhelp/help-lp9_crit~.pd
new file mode 100644
index 0000000..4e41dc4
--- /dev/null
+++ b/iemhelp/help-lp9_crit~.pd
@@ -0,0 +1,54 @@
+#N canvas 280 180 373 442 10;
+#X text 2 222 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 27 10 dsp ON/OFF;
+#X floatatom 93 149 3 15 133 0 - - -;
+#X obj 93 168 mtof;
+#X floatatom 93 187 9 0 22000 0 - - -;
+#X text 157 188 Hz;
+#X text 57 251 ~signal_out~;
+#X floatatom 200 252 7 0 0 0 - - -;
+#X text 251 253 dB;
+#X floatatom 118 120 9 0 22000 0 - - -;
+#X text 182 121 Hz;
+#X floatatom 45 81 3 15 133 0 - - -;
+#X floatatom 10 50 5 0 0 0 - - -;
+#X text 50 51 % cpu;
+#X floatatom 142 217 5 2 9999 0 - - -;
+#X text 183 218 ms;
+#X obj 10 30 dsp;
+#X obj 10 10 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 45 296 dac~;
+#X obj 45 271 gainvu~ 300;
+#X obj 256 130 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 320 140 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 45 100 testtone~ 200;
+#X obj 109 64 init 69;
+#X text 72 82 midi;
+#X text 59 320 1.arg:<float> cutoff_freq. [Hz];
+#X text 59 330 2.arg:<float> interpolation_time [ms];
+#X floatatom 286 288 7 0 0 0 - - -;
+#X text 337 289 dB;
+#X text 159 238 <- double-click;
+#X text 28 394 graz \, austria 2003;
+#X obj 45 237 lp9_crit~ 440 200;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 24 0;
+#X connect 16 0 33 2;
+#X connect 18 0 14 0;
+#X connect 19 0 18 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 29 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 33 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 33 0 21 0;
diff --git a/iemhelp/help-maverage~.pd b/iemhelp/help-maverage~.pd
new file mode 100644
index 0000000..6e9d42d
--- /dev/null
+++ b/iemhelp/help-maverage~.pd
@@ -0,0 +1,45 @@
+#N canvas 97 84 726 424 10;
+#X floatatom 23 284 9 0 0 0 - - -;
+#X text 15 360 (c) musil@iem.kug.ac.at;
+#X text 57 373 IEM KUG;
+#X text 41 44 dsp ON/OFF;
+#X obj 22 65 dsp;
+#X floatatom 22 86 5 0 0 0 - - -;
+#X text 68 87 % cpu;
+#X obj 23 265 unsig~;
+#X obj 22 45 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 36 151 noise~;
+#X obj 22 215 +~;
+#X floatatom 160 286 9 0 0 0 - - -;
+#X obj 160 267 unsig~;
+#X text 7 9 maverage~ : moving average filter;
+#X text 261 167 changing the average-time resets the calculation the
+first average-time milliseconds !!;
+#X text 276 241 1.arg: max. average-time <float> [ms] \; 2.arg: average-time
+<float> [ms];
+#X text 162 49 N = 0.001 * average-time_ms * samplerate;
+#X text 138 34 y[n] = (x[n] + x[n-1] + x[n-2] +...+ x[n-N]) / N;
+#X text 226 9 with IIR-solution;
+#X obj 22 126 sig~ 0.75;
+#X obj 36 177 *~ 0.25;
+#X obj 160 248 maverage~ 1000 500;
+#X floatatom 263 219 5 0 1000 0 - - -;
+#X text 300 217 ms;
+#X text 21 298 noisy signal;
+#X text 157 303 signal after filtering;
+#X text 157 313 only DC is measured;
+#X text 262 200 <float> average-time <float> [ms] (1.45 .. 1000 ms)
+;
+#X text 32 385 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 7 0 0 0;
+#X connect 8 0 4 0;
+#X connect 9 0 20 0;
+#X connect 10 0 7 0;
+#X connect 10 0 21 0;
+#X connect 12 0 11 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 1;
+#X connect 21 0 12 0;
+#X connect 22 0 21 1;
diff --git a/iemhelp/help-merge_any.pd b/iemhelp/help-merge_any.pd
new file mode 100644
index 0000000..8719f61
--- /dev/null
+++ b/iemhelp/help-merge_any.pd
@@ -0,0 +1,77 @@
+#N canvas 231 172 769 459 10;
+#X obj 66 348 print;
+#X msg 66 60 1;
+#X obj 187 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 66 39 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 66 148 11 22;
+#X msg 187 149 33 44;
+#X msg 187 62 3;
+#X msg 66 104 symbol foo;
+#X msg 187 106 symbol zyx;
+#X msg 66 82 float 1.1;
+#X msg 187 84 float 3.3;
+#X msg 66 126 set;
+#X msg 187 127 open;
+#X msg 66 171 list -55 -66;
+#X msg 187 171 list -77 -88;
+#X msg 187 194 list bbb 987;
+#X msg 66 194 list aaa 123;
+#X msg 66 217 jkl 555 uuu;
+#X msg 187 217 poi 777 ttt;
+#X obj 140 349 route bang float symbol list;
+#X obj 191 367 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 230 367 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 273 367 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 316 367 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 370 367 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 349 348 anything;
+#X text 211 38 bang clears message-buffer;
+#X text 24 393 (c) musil@iem.kug.ac.at;
+#X text 66 406 IEM KUG;
+#X text 41 418 graz \, austria 2002;
+#X text 13 7 merge_any;
+#X text 99 7 merge 2 messages together;
+#X msg 144 323 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+22 23;
+#X msg 147 297 a b c d e f g h i j k l m n o p q r s t u v;
+#X obj 66 272 merge_any 22 33 44;
+#X text 422 257 initials-arguments:;
+#X text 186 244 <- cold inlet;
+#X text 71 243 <- hot inlet;
+#X text 22 252 head of output-message;
+#X text 185 253 tail of output-message;
+#X text 417 268 tail of output-message;
+#X connect 1 0 34 0;
+#X connect 2 0 34 1;
+#X connect 3 0 34 0;
+#X connect 4 0 34 0;
+#X connect 5 0 34 1;
+#X connect 6 0 34 1;
+#X connect 7 0 34 0;
+#X connect 8 0 34 1;
+#X connect 9 0 34 0;
+#X connect 10 0 34 1;
+#X connect 11 0 34 0;
+#X connect 12 0 34 1;
+#X connect 13 0 34 0;
+#X connect 14 0 34 1;
+#X connect 15 0 34 1;
+#X connect 16 0 34 0;
+#X connect 17 0 34 0;
+#X connect 18 0 34 1;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 19 2 22 0;
+#X connect 19 3 23 0;
+#X connect 19 4 24 0;
+#X connect 32 0 34 0;
+#X connect 33 0 34 1;
+#X connect 34 0 0 0;
+#X connect 34 0 19 0;
diff --git a/iemhelp/help-mergefilename.pd b/iemhelp/help-mergefilename.pd
new file mode 100644
index 0000000..b16e122
--- /dev/null
+++ b/iemhelp/help-mergefilename.pd
@@ -0,0 +1,48 @@
+#N canvas 82 111 622 444 10;
+#X text 25 368 (c) musil@iem.kug.ac.at;
+#X text 76 381 IEM KUG;
+#X text 42 393 graz \, austria 2002;
+#X text 236 398 updated for Pd version 0.35;
+#X msg 389 153 separator $;
+#X msg 389 88 separator @;
+#X msg 389 109 separator :;
+#X obj 33 316 mergefilename;
+#X msg 22 82 C:/program/pd/my_project my_foo.pd;
+#X obj 33 338 print path+file;
+#X msg 389 46 separator /;
+#N canvas 4 20 450 300 /SUBPATCH/ 0;
+#X obj 101 31 inlet;
+#X obj 100 59 outlet;
+#X connect 0 0 1 0;
+#X restore 389 276 pd;
+#X msg 389 174 separator z;
+#X msg 389 195 separator _;
+#X msg 389 216 separator .;
+#X text 8 1 mergefilename: merge a list of symbols and floats to a
+;
+#X msg 404 241 separator;
+#X msg 389 67 separator space;
+#X msg 55 111 /home/me my_first_patch.pd;
+#X msg 389 131 separator 2;
+#X text 134 317 1.arg: <symbol> separator-character (opt.);
+#X msg 91 159 aaa bbb ccc ddd eeee;
+#X msg 119 204 11 22 33 44;
+#X text 466 45 <- click here;
+#X obj 423 318 mergefilename /;
+#X text 80 17 symbol \, connected by a separator (default: "");
+#X connect 4 0 11 0;
+#X connect 5 0 11 0;
+#X connect 6 0 11 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 10 0 11 0;
+#X connect 11 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X connect 14 0 11 0;
+#X connect 16 0 11 0;
+#X connect 17 0 11 0;
+#X connect 18 0 7 0;
+#X connect 19 0 11 0;
+#X connect 21 0 7 0;
+#X connect 22 0 7 0;
diff --git a/iemhelp/help-modulo_counter.pd b/iemhelp/help-modulo_counter.pd
new file mode 100644
index 0000000..f5b5ee3
--- /dev/null
+++ b/iemhelp/help-modulo_counter.pd
@@ -0,0 +1,19 @@
+#N canvas 167 267 521 293 10;
+#X msg 27 97 bang;
+#X floatatom 75 164 5 0 0;
+#X floatatom 75 72 5 1 100;
+#X floatatom 203 76 5 0 99;
+#X obj 75 135 modulo_counter 10 5;
+#X text 13 12 modulo_counter:;
+#X text 7 233 (c) musil@iem.kug.ac.at;
+#X text 49 246 IEM KUG;
+#X text 24 258 graz \, austria 2001;
+#X text 261 195 (optional) default 0;
+#X text 161 182 2.arg: <float> initial-value (0 .. max - 1);
+#X text 161 168 1.arg: <float> maximum;
+#X text 36 54 <float> maximum;
+#X text 202 56 <float> initial-value (0 .. max - 1);
+#X connect 0 0 4 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 4 0 1 0;
diff --git a/iemhelp/help-mp3play~.pd b/iemhelp/help-mp3play~.pd
new file mode 100644
index 0000000..bd5e662
--- /dev/null
+++ b/iemhelp/help-mp3play~.pd
@@ -0,0 +1,146 @@
+#N canvas 219 14 743 601 10;
+#X obj 118 308 mp3play~;
+#X msg 130 153 start;
+#X msg 145 177 stop;
+#X msg 157 201 pause;
+#X msg 118 91 open \$1;
+#X obj 118 71 openpanel;
+#X msg 118 50 bang;
+#X text 18 5 MPEG LAYER III PLAYER;
+#N canvas 217 0 624 445 output 0;
+#X obj 451 183 t b;
+#X obj 451 133 f;
+#X obj 451 83 inlet;
+#X text 457 52 mute;
+#X obj 451 208 f;
+#X msg 538 201 0;
+#X msg 451 108 bang;
+#X obj 451 158 moses 1;
+#X obj 538 176 t b f;
+#X obj 510 140 moses 1;
+#X obj 141 131 dbtorms;
+#X obj 510 115 r master-lvl;
+#X obj 141 45 r master-lvl;
+#X obj 451 233 s master-lvl;
+#X obj 80 141 inlet~;
+#X obj 312 64 inlet;
+#X text 312 41 level;
+#X obj 312 123 s master-lvl;
+#X msg 141 251 set \$1;
+#X obj 141 314 outlet;
+#X msg 327 87 \; pd dsp 1;
+#X obj 141 177 line~;
+#X obj 80 215 *~;
+#X obj 41 245 dac~;
+#X obj 141 154 pack 0 50;
+#X text 52 115 audio;
+#X text 151 113 show level;
+#X obj 26 141 inlet~;
+#X obj 26 214 *~;
+#X obj 152 202 loadbang;
+#X msg 152 228 95;
+#X connect 0 0 4 0;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 1 0;
+#X connect 7 0 0 0;
+#X connect 7 1 8 0;
+#X connect 8 0 5 0;
+#X connect 9 1 4 1;
+#X connect 10 0 24 0;
+#X connect 11 0 1 1;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 12 0 18 0;
+#X connect 14 0 22 0;
+#X connect 15 0 17 0;
+#X connect 15 0 20 0;
+#X connect 18 0 19 0;
+#X connect 21 0 28 1;
+#X connect 21 0 22 1;
+#X connect 22 0 23 1;
+#X connect 24 0 21 0;
+#X connect 27 0 28 0;
+#X connect 28 0 23 0;
+#X connect 29 0 30 0;
+#X connect 30 0 19 0;
+#X restore 116 450 pd output;
+#X floatatom 154 427 0 0 0 0 - - -;
+#X msg 192 432 MUTE;
+#X text 227 431 <-- output amplitude;
+#X text 247 335 player bangs out here when finished;
+#X text 171 151 start the player;
+#X text 203 195 push pause to interrupt. push pause again (or play)
+to resume playing;
+#X text 155 51 click here to select file;
+#X obj 169 334 print EOF;
+#X msg 166 224 open_again;
+#X text 250 224 reopen the file after stop;
+#X text 181 170 stop the player and close the file. You habe to push
+stop before you open a new file.;
+#X text 27 487 The player supports mono and stereo MPEG Layer III files.
+Any bitrate is supported - but we have tested 128Kb/s and 32 Kb/s only.
+;
+#X text 27 528 The sample rate of the output depends on the system
+sample rate of pd:;
+#X text 25 555 If the sample rate of pd is set to 44100 \, files having
+the sample rates of 44100 \, 22050 and 11025 are correctly played \,
+other files will be transposed.;
+#X text 18 20 V 0.1 Thomas Musil \, Norbert Math - IEM;
+#X floatatom 152 392 8 0 0 0 - - -;
+#X text 218 393 sec;
+#X floatatom 169 283 6 0 0 0 - - -;
+#X msg 178 247 open_again_at;
+#X text 222 283 offset in sec;
+#X obj 38 72 openpanel;
+#X msg 38 51 bang;
+#X msg 38 122 open_at \$1;
+#X text 126 121 open_at: open a selected file to play \, beginning
+at offset;
+#X text 173 90 open: open a selected file to play;
+#X text 281 247 reopen the file at offset after stop;
+#X text 181 308 no argument \, mp3play~ prints file-header to console
+;
+#X text 258 392 current playing-time;
+#X obj 18 225 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 0
+1;
+#X obj 18 245 dsp;
+#X floatatom 18 303 5 0 0 0 - - -;
+#X text 65 303 %;
+#X text 457 433 (c) musil@iem.kug.ac.at;
+#X text 499 446 IEM KUG;
+#X text 474 458 graz \, austria 2001;
+#X obj 152 365 speedlim 50;
+#X floatatom 34 271 5 0 0 0 - - -;
+#X text 77 273 %;
+#X msg 517 291 open test1.mp3;
+#X obj 554 237 loadbang;
+#X text 518 309 this music is composed;
+#X text 529 319 by Bernhard Lang;
+#X text 508 329 "Hommage an Martin Arnold";
+#X connect 0 0 8 0;
+#X connect 0 1 8 1;
+#X connect 0 2 44 0;
+#X connect 0 3 16 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 8 2;
+#X connect 10 0 8 3;
+#X connect 17 0 0 0;
+#X connect 26 0 0 1;
+#X connect 27 0 0 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 0 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 38 1 45 0;
+#X connect 44 0 24 0;
+#X connect 47 0 0 0;
diff --git a/iemhelp/help-mull~.pd b/iemhelp/help-mull~.pd
new file mode 100644
index 0000000..a0599c0
--- /dev/null
+++ b/iemhelp/help-mull~.pd
@@ -0,0 +1,28 @@
+#N canvas 375 118 372 456 10;
+#X text 16 386 (c) musil@iem.kug.ac.at;
+#X text 58 399 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 85 199 9 0 22000 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 125 225 5 2 9999 0 - - -;
+#X text 168 224 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 15 364 2.arg:<float> interpolation_time [ms];
+#X obj 46 271 unsig~;
+#X floatatom 46 294 9 0 22000 0 - - -;
+#X obj 46 141 sig~ 1;
+#X text 33 411 graz \, austria 2003;
+#X text 13 8 mull~;
+#X text 79 8 signal multiplication with line~;
+#X text 15 352 1.arg:<float> 2nd operand of multiplication;
+#X obj 46 248 mull~ 0.5 2000;
+#X connect 3 0 18 1;
+#X connect 6 0 18 2;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 12 0;
+#X connect 13 0 18 0;
+#X connect 18 0 11 0;
diff --git a/iemhelp/help-once.pd b/iemhelp/help-once.pd
new file mode 100644
index 0000000..4f16104
--- /dev/null
+++ b/iemhelp/help-once.pd
@@ -0,0 +1,30 @@
+#N canvas 231 172 397 462 10;
+#X obj 66 326 print;
+#X msg 66 133 1;
+#X obj 301 113 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 66 112 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 66 197 11 22;
+#X msg 66 153 symbol foo;
+#X msg 66 175 set;
+#X msg 66 218 list aaa 123;
+#X msg 66 241 jkl 555 uuu;
+#X text 24 393 (c) musil@iem.kug.ac.at;
+#X text 66 406 IEM KUG;
+#X text 41 418 graz \, austria 2003;
+#X obj 66 272 once;
+#X text 13 7 once;
+#X text 69 6 only the first message passes through;
+#X text 48 86 message in;
+#X text 80 292 message out (only once);
+#X text 239 92 anything to init once;
+#X connect 1 0 12 0;
+#X connect 2 0 12 1;
+#X connect 3 0 12 0;
+#X connect 4 0 12 0;
+#X connect 5 0 12 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 12 0;
+#X connect 12 0 0 0;
diff --git a/iemhelp/help-para_bp2~.pd b/iemhelp/help-para_bp2~.pd
new file mode 100644
index 0000000..f8df480
--- /dev/null
+++ b/iemhelp/help-para_bp2~.pd
@@ -0,0 +1,64 @@
+#N canvas 460 77 403 463 10;
+#X text 5 265 ~signal_in~;
+#X text 14 403 (c) musil@iem.kug.ac.at;
+#X text 56 416 IEM KUG;
+#X text 30 44 dsp ON/OFF;
+#X floatatom 81 161 3 15 133 0 - - -;
+#X obj 81 180 mtof;
+#X floatatom 81 199 9 0 22000 0 - - -;
+#X text 145 200 Hz;
+#X text 60 294 ~signal_out~;
+#X floatatom 207 279 7 0 0 0 - - -;
+#X text 258 280 dB;
+#X floatatom 121 154 9 0 22000 0 - - -;
+#X text 185 155 Hz;
+#X floatatom 48 115 3 15 133 0 - - -;
+#X floatatom 13 84 5 0 0 0 - - -;
+#X text 53 85 % cpu;
+#X floatatom 181 256 5 2 9999 0 - - -;
+#X text 222 257 ms;
+#X obj 13 64 dsp;
+#X floatatom 114 218 4 0.01 1000 0 - - -;
+#X text 150 218 Q;
+#X text 95 351 2.arg:<float> Q [-];
+#X text 95 341 1.arg:<float> center_freq. [Hz];
+#X obj 13 44 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 48 347 dac~;
+#X obj 48 322 gainvu~ 300;
+#X obj 253 157 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 315 191 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 48 134 testtone~ 200;
+#X obj 112 98 init 69;
+#X text 75 116 midi;
+#X text 95 371 4.arg:<float> interpolation_time [ms];
+#X text 95 361 3.arg:<float> level [dB];
+#X obj 48 280 para_bp2~ 440 2 -12 200;
+#X floatatom 147 237 6 -40 40 0 - - -;
+#X text 191 238 dB;
+#X floatatom 302 339 7 0 0 0 - - -;
+#X text 353 340 dB;
+#X text 137 2 parametric bandpass 2.order;
+#X obj 7 7 cnv 8 1 1 empty empty para_bp2~ 1 2 1 18 -262144 -1109 0
+;
+#X text 31 428 graz \, austria 2003;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 1;
+#X connect 13 0 28 0;
+#X connect 16 0 33 4;
+#X connect 18 0 14 0;
+#X connect 19 0 33 2;
+#X connect 23 0 18 0;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 36 0;
+#X connect 25 2 26 0;
+#X connect 26 1 9 0;
+#X connect 27 0 25 1;
+#X connect 28 0 33 0;
+#X connect 28 1 11 0;
+#X connect 29 0 13 0;
+#X connect 33 0 25 0;
+#X connect 34 0 33 3;
diff --git a/iemhelp/help-peakenv~.pd b/iemhelp/help-peakenv~.pd
new file mode 100644
index 0000000..9abb649
--- /dev/null
+++ b/iemhelp/help-peakenv~.pd
@@ -0,0 +1,35 @@
+#N canvas 190 268 477 426 10;
+#X msg 10 143 0;
+#X msg 43 143 1;
+#X obj 45 168 sig~;
+#X floatatom 45 336 9 0 0 0 - - -;
+#X msg 148 207 reset;
+#X msg 81 144 10;
+#X text 50 207 ~signal_in~;
+#X text 11 369 (c) musil@iem.kug.ac.at;
+#X text 53 382 IEM KUG;
+#X text 42 39 dsp ON/OFF;
+#X obj 14 59 dsp;
+#X floatatom 14 80 3 0 0 0 - - -;
+#X text 41 81 % cpu;
+#X obj 45 237 peakenv~ 1000;
+#X text 123 337 1.output: <sig> peak-envelope;
+#X text 29 394 graz \, austria 2002;
+#X text 136 255 (output_envelope decrements about 63% in this time)
+;
+#X obj 45 260 unsig~ 50;
+#X text 187 206 resets peak-envelope to 0;
+#X text 133 241 1.arg: <float> time-constant [ms] (default: 0 ms);
+#X text 9 7 peakenv~;
+#X text 86 4 signal-peak-envelope;
+#X obj 14 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 13 0;
+#X connect 4 0 13 0;
+#X connect 5 0 2 0;
+#X connect 10 0 11 0;
+#X connect 13 0 17 0;
+#X connect 17 0 3 0;
+#X connect 22 0 10 0;
diff --git a/iemhelp/help-pink~.pd b/iemhelp/help-pink~.pd
new file mode 100644
index 0000000..b64318e
--- /dev/null
+++ b/iemhelp/help-pink~.pd
@@ -0,0 +1,31 @@
+#N canvas 257 125 341 335 10;
+#X text 15 262 (c) musil@iem.kug.ac.at;
+#X text 57 275 IEM KUG;
+#X text 38 49 dsp ON/OFF;
+#X floatatom 171 169 7 0 0 0 - - -;
+#X text 222 170 dB;
+#X floatatom 21 89 5 0 0 0 - - -;
+#X text 69 90 % cpu;
+#X obj 21 69 dsp;
+#X obj 21 49 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 32 230 dac~;
+#X obj 32 205 gainvu~ 300;
+#X obj 210 47 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 271 74 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X text 32 287 graz \, austria 2001;
+#X floatatom 243 223 7 0 0 0 - - -;
+#X text 301 225 dB;
+#X text 72 157 no arg;
+#X obj 32 157 pink~;
+#X text 15 7 pink~ : pink noise with -3 dB per octave;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 10 0 9 1;
+#X connect 10 1 14 0;
+#X connect 10 2 11 0;
+#X connect 11 1 3 0;
+#X connect 12 0 10 1;
+#X connect 17 0 10 0;
diff --git a/iemhelp/help-post_netreceive.pd b/iemhelp/help-post_netreceive.pd
new file mode 100644
index 0000000..9ace195
--- /dev/null
+++ b/iemhelp/help-post_netreceive.pd
@@ -0,0 +1,109 @@
+#N canvas 153 56 742 548 10;
+#X msg 4 186 clear;
+#X floatatom 33 95 5 0 0 0 - - -;
+#X obj 82 124 pp 1;
+#X floatatom 82 98 5 0 0 0 - - -;
+#X floatatom 135 100 5 0 0 0 - - -;
+#X obj 33 121 pp 0;
+#X obj 135 126 pp 2;
+#X obj 15 345 r aaa;
+#X floatatom 15 368 5 0 0 0 - - -;
+#X floatatom 61 367 5 0 0 0 - - -;
+#X floatatom 108 367 5 0 0 0 - - -;
+#X obj 61 344 r bbbb;
+#X obj 108 344 r ccccc;
+#X obj 305 62 loadbang;
+#X text 37 39 to sended messages without this float-index;
+#X obj 135 421 nbx 5 28 -1e+037 1e+037 0 0 aaa aaa aaa -68 13 192 28
+-225280 -1109 -260818 21 256;
+#X obj 135 457 nbx 5 28 -1e+037 1e+037 0 0 bbbb bbbb bbbb -88 13 192
+28 -225280 -1109 -260818 22 256;
+#X obj 135 492 nbx 5 28 -1e+037 1e+037 0 0 ccccc ccccc ccccc -110 13
+192 28 -225280 -1109 -260818 23 256;
+#X msg 295 112 bbbb 1;
+#X msg 287 89 aaa 0;
+#X msg 481 186 fetch_all_parameters 3;
+#X obj 55 317 print abc;
+#X floatatom 178 394 5 0 0 0 - - -;
+#X obj 182 345 r vu_level;
+#X msg 306 133 set ccccc 2;
+#X msg 318 156 vu_level 3;
+#X floatatom 183 82 5 0 0 0 - - -;
+#X msg 196 105 \$1 \$1;
+#X obj 186 131 pp 3;
+#X obj 182 368 unpack;
+#X floatatom 221 394 5 0 0 0 - - -;
+#X obj 382 392 vu 15 120 vu_level empty 35 8 64 8 -66577 -1 1 0;
+#X floatatom 15 393 5 0 0 0 - - -;
+#X floatatom 61 392 5 0 0 0 - - -;
+#X floatatom 108 392 5 0 0 0 - - -;
+#X obj 55 295 post_netreceive 0 80;
+#X msg 471 226 all_parameters 1 2 3;
+#X msg 441 272 set_all_parameters 21 22 23;
+#X obj 217 208 pp set_item_name;
+#X msg 482 162 fetch_all_parameters 5;
+#X obj 432 168 pp 4;
+#X msg 409 120 33 44 55;
+#X msg 496 120 99 88 77;
+#X msg 331 180 gg_list 4;
+#X obj 489 359 r gg_list;
+#X obj 489 381 unpack 0 0 0;
+#X floatatom 489 412 5 0 0 0 - - -;
+#X floatatom 527 410 5 0 0 0 - - -;
+#X floatatom 567 407 5 0 0 0 - - -;
+#X text 11 6 post_netreceive;
+#X text 27 26 convert message-lists with a prepended float-index;
+#X text 193 294 1.arg: minimum-index;
+#X text 193 306 2.arg: maximum-index;
+#X text 441 292 output to the first 3 send-symbols;
+#X text 441 301 these 3 numbers with a prepended set message;
+#X text 474 241 output to the first 3 send-symbols;
+#X text 474 249 these 3 numbers;
+#X text 487 203 send the first 3 parameters;
+#X text 21 64 send the number;
+#X text 15 73 to the corresp. send-sym;
+#X text 361 57 set_item_name: send-symbol + para-index;
+#X msg 348 110 ccccc 2;
+#X connect 0 0 35 0;
+#X connect 1 0 5 0;
+#X connect 2 0 35 0;
+#X connect 3 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 35 0;
+#X connect 6 0 35 0;
+#X connect 7 0 8 0;
+#X connect 8 0 32 0;
+#X connect 9 0 33 0;
+#X connect 10 0 34 0;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 13 0 19 0;
+#X connect 13 0 18 0;
+#X connect 13 0 24 0;
+#X connect 13 0 25 0;
+#X connect 13 0 43 0;
+#X connect 18 0 38 0;
+#X connect 19 0 38 0;
+#X connect 20 0 35 0;
+#X connect 23 0 29 0;
+#X connect 24 0 38 0;
+#X connect 25 0 38 0;
+#X connect 26 0 27 0;
+#X connect 27 0 28 0;
+#X connect 28 0 35 0;
+#X connect 29 0 22 0;
+#X connect 29 1 30 0;
+#X connect 35 0 21 0;
+#X connect 36 0 35 0;
+#X connect 37 0 35 0;
+#X connect 38 0 35 0;
+#X connect 39 0 35 0;
+#X connect 40 0 35 0;
+#X connect 41 0 40 0;
+#X connect 42 0 40 0;
+#X connect 43 0 38 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 45 1 47 0;
+#X connect 45 2 48 0;
+#X connect 61 0 38 0;
diff --git a/iemhelp/help-pp.pd b/iemhelp/help-pp.pd
new file mode 100644
index 0000000..47a1bbd
--- /dev/null
+++ b/iemhelp/help-pp.pd
@@ -0,0 +1,72 @@
+#N canvas 231 172 613 503 10;
+#X obj 117 376 print;
+#X msg 117 61 1;
+#X obj 238 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 117 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 117 149 11 22;
+#X msg 238 150 33 44;
+#X msg 238 63 3;
+#X msg 117 105 symbol foo;
+#X msg 238 107 symbol zyx;
+#X msg 117 83 float 1.1;
+#X msg 238 85 float 3.3;
+#X msg 117 127 set;
+#X msg 238 128 open;
+#X msg 117 172 list -55 -66;
+#X msg 238 172 list -77 -88;
+#X msg 238 195 list bbb 987;
+#X msg 117 195 list aaa 123;
+#X msg 117 218 jkl 555 uuu;
+#X msg 238 218 poi 777 ttt;
+#X obj 191 377 route bang float symbol list;
+#X obj 242 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 281 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 324 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 367 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 421 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 400 376 anything;
+#X text 262 39 bang clears message-buffer;
+#X text 75 421 (c) musil@iem.kug.ac.at;
+#X text 117 434 IEM KUG;
+#X text 213 313 head of output-message;
+#X text 218 302 initials-arguments:;
+#X text 109 7 merge the head-message in front of the tail-message;
+#X text 92 446 graz \, austria 2003;
+#X text 34 284 tail of output-message;
+#X text 226 285 head of output-message;
+#X text 224 275 <- cold inlet;
+#X text 122 274 <- hot inlet;
+#X text 13 7 pp;
+#X obj 117 300 pp set;
+#X connect 1 0 38 0;
+#X connect 2 0 38 1;
+#X connect 3 0 38 0;
+#X connect 4 0 38 0;
+#X connect 5 0 38 1;
+#X connect 6 0 38 1;
+#X connect 7 0 38 0;
+#X connect 8 0 38 1;
+#X connect 9 0 38 0;
+#X connect 10 0 38 1;
+#X connect 11 0 38 0;
+#X connect 12 0 38 1;
+#X connect 13 0 38 0;
+#X connect 14 0 38 1;
+#X connect 15 0 38 1;
+#X connect 16 0 38 0;
+#X connect 17 0 38 0;
+#X connect 18 0 38 1;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 19 2 22 0;
+#X connect 19 3 23 0;
+#X connect 19 4 24 0;
+#X connect 38 0 0 0;
+#X connect 38 0 19 0;
diff --git a/iemhelp/help-pre_inlet.pd b/iemhelp/help-pre_inlet.pd
new file mode 100644
index 0000000..4090b22
--- /dev/null
+++ b/iemhelp/help-pre_inlet.pd
@@ -0,0 +1,39 @@
+#N canvas 231 172 606 462 10;
+#X msg 79 243 jkl 555 uuu;
+#X text 24 393 (c) musil@iem.kug.ac.at;
+#X text 66 406 IEM KUG;
+#X text 13 7 pre_inlet;
+#X obj 66 272 pre_inlet 1 0;
+#X obj 66 348 print first;
+#X obj 195 272 pre_inlet 1 1;
+#X obj 195 348 print second;
+#X obj 320 272 pre_inlet 1 2;
+#X msg 208 243 abc ghj 78;
+#X msg 333 243 zyx 3.17;
+#X obj 320 348 print third;
+#X text 41 418 graz \, austria 2003;
+#X text 104 48 you can use it for externals with more than one message-inlets
+;
+#X text 117 182 2.arg: <float> number (0 .. 8.0e+06) \, you can interprete
+as;
+#X text 175 195 the inlet-index (inlet-selector-number);
+#X text 100 9 before an incoming message will be relesed to outlet
+\,;
+#X text 112 23 a message of 2 items (symbol + float) will be sent;
+#X msg 485 242 sss 3.17;
+#X obj 472 271 pre_inlet 3 123;
+#X obj 472 347 print xxx;
+#X text 115 125 1.arg: <float> ascii-number (1 .. 255) \, which will
+be;
+#X text 154 140 interpreted as a character \, which will be used as
+a;
+#X text 155 153 selector-symbol for a message (creates a denormal symbol)
+;
+#X connect 0 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 8 0 11 0;
+#X connect 9 0 6 0;
+#X connect 10 0 8 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
diff --git a/iemhelp/help-pre_netsend.pd b/iemhelp/help-pre_netsend.pd
new file mode 100644
index 0000000..dada619
--- /dev/null
+++ b/iemhelp/help-pre_netsend.pd
@@ -0,0 +1,45 @@
+#N canvas 59 233 591 312 10;
+#X msg 294 123 clear;
+#X obj 369 51 loadbang;
+#X obj 340 173 pre_netsend 80;
+#X obj 31 206 r aaa;
+#X floatatom 31 229 5 0 0 0 - - -;
+#X floatatom 93 231 5 0 0 0 - - -;
+#X floatatom 168 231 5 0 0 0 - - -;
+#X obj 93 208 r bbbb;
+#X obj 168 209 r ccccc;
+#X msg 226 206 \; bbbb 5.556;
+#X obj 340 227 unpack 0 0;
+#X floatatom 340 249 5 0 0 0 - - -;
+#X floatatom 405 250 5 0 0 0 - - -;
+#X obj 340 198 route send;
+#X obj 340 148 pp set_item_name;
+#X msg 350 81 aaa 0;
+#X msg 359 103 bbbb 1;
+#X msg 369 125 ccccc 2;
+#X text 4 3 pre_netsend;
+#X text 99 2 receive messages without prepended float-index and;
+#X text 87 15 convert to message-lists with a prepended float-index
+;
+#X obj 125 77 nbx 5 28 -1e+037 1e+037 0 0 aaa aaa aaa -68 13 192 28
+-225280 -1109 -260818 0 256;
+#X obj 125 113 nbx 5 28 -1e+037 1e+037 0 0 bbbb bbbb bbbb -88 13 192
+28 -225280 -1109 -260818 0 256;
+#X obj 125 148 nbx 5 28 -1e+037 1e+037 0 0 ccccc ccccc ccccc -110 13
+192 28 -225280 -1109 -260818 0 256;
+#X text 305 35 set_item_name: receive-symbol + para-index;
+#X connect 0 0 2 0;
+#X connect 1 0 15 0;
+#X connect 1 0 16 0;
+#X connect 1 0 17 0;
+#X connect 2 0 13 0;
+#X connect 3 0 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 13 0 10 0;
+#X connect 14 0 2 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 14 0;
diff --git a/iemhelp/help-prepend.pd b/iemhelp/help-prepend.pd
new file mode 100644
index 0000000..83e1504
--- /dev/null
+++ b/iemhelp/help-prepend.pd
@@ -0,0 +1,72 @@
+#N canvas 231 172 613 503 10;
+#X obj 117 376 print;
+#X msg 117 61 1;
+#X obj 238 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 117 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 117 149 11 22;
+#X msg 238 150 33 44;
+#X msg 238 63 3;
+#X msg 117 105 symbol foo;
+#X msg 238 107 symbol zyx;
+#X msg 117 83 float 1.1;
+#X msg 238 85 float 3.3;
+#X msg 117 127 set;
+#X msg 238 128 open;
+#X msg 117 172 list -55 -66;
+#X msg 238 172 list -77 -88;
+#X msg 238 195 list bbb 987;
+#X msg 117 195 list aaa 123;
+#X msg 117 218 jkl 555 uuu;
+#X msg 238 218 poi 777 ttt;
+#X obj 191 377 route bang float symbol list;
+#X obj 242 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 281 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 324 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 367 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 421 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 400 376 anything;
+#X text 262 39 bang clears message-buffer;
+#X text 75 421 (c) musil@iem.kug.ac.at;
+#X text 117 434 IEM KUG;
+#X text 213 313 head of output-message;
+#X text 218 302 initials-arguments:;
+#X text 109 7 merge the head-message in front of the tail-message;
+#X text 92 446 graz \, austria 2003;
+#X text 34 284 tail of output-message;
+#X text 226 285 head of output-message;
+#X text 224 275 <- cold inlet;
+#X text 122 274 <- hot inlet;
+#X text 13 7 prepend;
+#X obj 117 300 prepend set;
+#X connect 1 0 38 0;
+#X connect 2 0 38 1;
+#X connect 3 0 38 0;
+#X connect 4 0 38 0;
+#X connect 5 0 38 1;
+#X connect 6 0 38 1;
+#X connect 7 0 38 0;
+#X connect 8 0 38 1;
+#X connect 9 0 38 0;
+#X connect 10 0 38 1;
+#X connect 11 0 38 0;
+#X connect 12 0 38 1;
+#X connect 13 0 38 0;
+#X connect 14 0 38 1;
+#X connect 15 0 38 1;
+#X connect 16 0 38 0;
+#X connect 17 0 38 0;
+#X connect 18 0 38 1;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 19 2 22 0;
+#X connect 19 3 23 0;
+#X connect 19 4 24 0;
+#X connect 38 0 0 0;
+#X connect 38 0 19 0;
diff --git a/iemhelp/help-prepend_ascii.pd b/iemhelp/help-prepend_ascii.pd
new file mode 100644
index 0000000..aadd3db
--- /dev/null
+++ b/iemhelp/help-prepend_ascii.pd
@@ -0,0 +1,42 @@
+#N canvas 244 76 683 462 10;
+#X msg 94 245 jkl 555 uuu;
+#X text 24 393 (c) musil@iem.kug.ac.at;
+#X text 66 406 IEM KUG;
+#X msg 208 243 abc ghj 78;
+#X msg 433 242 zyx 3.17;
+#X text 41 418 graz \, austria 2003;
+#X text 118 104 1.arg: <float> ascii-number (1 .. 255) \, which will
+be;
+#X text 157 119 interpreted as a character \, which will be used as
+a;
+#X text 158 132 selector-symbol for a message (creates a denormal symbol)
+;
+#X text 13 7 prepend_ascii;
+#X obj 66 272 prepend_ascii 1;
+#X obj 195 272 prepend_ascii 2 open ttt 666;
+#X obj 52 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 68 215 44;
+#X msg 99 214 symbol hhh;
+#X obj 420 271 prepend_ascii 3 55 66;
+#X obj 66 348 print xxx;
+#X obj 195 348 print yyy;
+#X obj 420 347 print zzz;
+#X text 127 9 prepends the list-arguments in front of an incomming
+;
+#X text 128 22 message \, the first item of the arguments has to be
+;
+#X text 126 36 a integer between 1 and 255 and will be interpreted
+;
+#X text 125 51 as a ascii-character \, which will be converted to;
+#X text 126 64 a selector-symbol;
+#X text 105 160 nth.arg: anything;
+#X connect 0 0 10 0;
+#X connect 3 0 11 0;
+#X connect 4 0 15 0;
+#X connect 10 0 16 0;
+#X connect 11 0 17 0;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 18 0;
diff --git a/iemhelp/help-prvu~.pd b/iemhelp/help-prvu~.pd
new file mode 100644
index 0000000..73b6142
--- /dev/null
+++ b/iemhelp/help-prvu~.pd
@@ -0,0 +1,135 @@
+#N canvas 210 11 724 591 10;
+#X msg 167 246 0;
+#X msg 468 246 0.5;
+#X msg 540 246 1;
+#X obj 96 283 sig~;
+#X floatatom 96 481 9 0 0 0 - - -;
+#X floatatom 163 435 9 0 0 0 - - -;
+#X msg 96 189 reset;
+#X msg 96 223 start;
+#X msg 96 206 stop;
+#X msg 357 246 0.1;
+#X msg 321 246 0.01;
+#X msg 279 246 0.001;
+#X msg 237 246 0.0001;
+#X msg 194 246 1e-005;
+#X msg 390 246 0.25;
+#X msg 427 246 0.316;
+#X msg 499 246 0.707;
+#X msg 570 246 1.414;
+#X msg 612 246 2;
+#X msg 645 246 10;
+#X text 27 352 ~signal_in~;
+#X text 201 47 (periode between 2 output-events);
+#X text 99 534 (c) musil@iem.kug.ac.at;
+#X text 116 559 graz \, austria 2000;
+#X text 141 547 IEM KUG;
+#X text 32 42 dsp ON/OFF;
+#X obj 14 61 dsp;
+#X floatatom 14 82 3 0 0 0 - - -;
+#X text 41 83 % cpu;
+#X obj 96 395 unpack 0 0 0;
+#X floatatom 129 458 9 0 0 0 - - -;
+#X text 195 459 2.item: <float> peak_level [dB];
+#X text 160 482 1.item: <float> rms_level [dB];
+#X obj 14 40 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 25 381 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X floatatom 96 261 9 0 0 0 - - -;
+#X obj 125 303 phasor~;
+#X obj 125 322 cos~;
+#X obj 96 339 *~;
+#X floatatom 24 524 6 0 0 0 - - -;
+#X floatatom 34 508 6 0 0 0 - - -;
+#X text 181 151 4.arg:<float>overflow_threshold [dB] (default: -0.01
+dB);
+#X text 200 85 (repeat the peak on output until peakholdtime);
+#X text 106 377 output: <list> of 3 items:;
+#X text 229 435 3.item: <float> overflow_per_metrotime_counter [-]
+;
+#X msg 96 51 t_metro \$1;
+#X msg 96 89 t_hold \$1;
+#X msg 96 127 t_release \$1;
+#X msg 96 166 threshold \$1;
+#X floatatom 96 34 9 50 500 0 - - -;
+#X floatatom 96 72 9 10 5000 0 - - -;
+#X floatatom 96 110 9 50 2000 0 - - -;
+#X text 204 120 (output_level decrements by about 8.6 dB = 63% during
+this;
+#X text 556 120 time);
+#X floatatom 96 149 9 -120 30 0 - - -;
+#X text 201 162 (output_overflow_counter increments by 1 per metrotime
+\, if;
+#X text 553 162 peaklevel > threshold);
+#X obj 24 557 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 540 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 21 170 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 218 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 233 * 0.99;
+#X obj 21 252 + 0.01;
+#X obj 21 199 metro 2567;
+#X obj 96 361 prvu~;
+#X text 181 36 1.arg:<float>metrotime [ms] (default: 300 ms);
+#X text 181 109 3.arg:<float>releasetime [ms] (default: 300 ms);
+#X text 180 74 2.arg:<float>peakholdtime [ms] (default: 1000 ms);
+#X obj 125 283 sig~ 10001;
+#X text 7 8 prvu~;
+#X text 67 8 peak- rms- vu-meter;
+#X text 134 188 reset peak- and rms-level to;
+#X text 307 188 -99.9 dB and overflow_counter to 0;
+#X text 134 205 stop the metro-clock of prvu~;
+#X text 134 223 start the metro-clock of prvu~;
+#X text 78 509 dB;
+#X text 68 525 dB;
+#X obj 167 361 prvu~ 300 1000 300 -0.01;
+#X connect 0 0 35 0;
+#X connect 1 0 35 0;
+#X connect 2 0 35 0;
+#X connect 3 0 38 0;
+#X connect 6 0 64 0;
+#X connect 7 0 64 0;
+#X connect 8 0 64 0;
+#X connect 9 0 35 0;
+#X connect 10 0 35 0;
+#X connect 11 0 35 0;
+#X connect 12 0 35 0;
+#X connect 13 0 35 0;
+#X connect 14 0 35 0;
+#X connect 15 0 35 0;
+#X connect 16 0 35 0;
+#X connect 17 0 35 0;
+#X connect 18 0 35 0;
+#X connect 19 0 35 0;
+#X connect 26 0 27 0;
+#X connect 29 0 4 0;
+#X connect 29 1 30 0;
+#X connect 29 2 5 0;
+#X connect 33 0 26 0;
+#X connect 34 0 39 0;
+#X connect 34 1 40 0;
+#X connect 35 0 3 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 1;
+#X connect 38 0 64 0;
+#X connect 39 0 57 0;
+#X connect 40 0 58 0;
+#X connect 45 0 64 0;
+#X connect 46 0 64 0;
+#X connect 47 0 64 0;
+#X connect 48 0 64 0;
+#X connect 49 0 45 0;
+#X connect 50 0 46 0;
+#X connect 51 0 47 0;
+#X connect 54 0 48 0;
+#X connect 59 0 63 0;
+#X connect 60 0 61 0;
+#X connect 61 0 62 0;
+#X connect 62 0 35 0;
+#X connect 63 0 60 0;
+#X connect 64 0 29 0;
+#X connect 64 0 34 0;
+#X connect 68 0 36 0;
diff --git a/iemhelp/help-pvu~.pd b/iemhelp/help-pvu~.pd
new file mode 100644
index 0000000..70786fd
--- /dev/null
+++ b/iemhelp/help-pvu~.pd
@@ -0,0 +1,117 @@
+#N canvas 210 11 726 593 10;
+#X msg 167 246 0;
+#X msg 468 246 0.5;
+#X msg 540 246 1;
+#X obj 96 283 sig~;
+#X floatatom 115 415 9 0 0 0 - - -;
+#X msg 96 189 reset;
+#X msg 96 223 start;
+#X msg 96 206 stop;
+#X msg 357 246 0.1;
+#X msg 321 246 0.01;
+#X msg 279 246 0.001;
+#X msg 237 246 0.0001;
+#X msg 194 246 1e-005;
+#X msg 390 246 0.25;
+#X msg 427 246 0.316;
+#X msg 499 246 0.707;
+#X msg 570 246 1.414;
+#X msg 612 246 2;
+#X msg 645 246 10;
+#X text 27 352 ~signal_in~;
+#X text 201 81 (periode between 2 output-events);
+#X text 99 534 (c) musil@iem.kug.ac.at;
+#X text 116 559 graz \, austria 2000;
+#X text 141 547 IEM KUG;
+#X text 32 42 dsp ON/OFF;
+#X obj 14 61 dsp;
+#X floatatom 14 82 3 0 0 0 - - -;
+#X text 41 83 % cpu;
+#X floatatom 96 435 9 0 0 0 - - -;
+#X obj 14 40 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 25 381 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X floatatom 96 261 9 0 0 0 - - -;
+#X obj 125 303 phasor~;
+#X obj 125 322 cos~;
+#X obj 96 339 *~;
+#X floatatom 34 508 6 0 0 0 - - -;
+#X msg 96 85 t_metro \$1;
+#X msg 96 127 t_release \$1;
+#X msg 96 166 threshold \$1;
+#X floatatom 96 68 9 50 500 0 - - -;
+#X floatatom 96 110 9 50 2000 0 - - -;
+#X text 204 120 (output_level decrements by about 8.6 dB = 63% during
+this;
+#X text 556 120 time);
+#X floatatom 96 149 9 -120 30 0 - - -;
+#X text 201 162 (output_overflow_counter increments by 1 per metrotime
+\, if;
+#X text 553 162 peaklevel > threshold);
+#X obj 34 540 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 21 170 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 218 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 233 * 0.99;
+#X obj 21 252 + 0.01;
+#X obj 21 199 metro 2567;
+#X text 181 70 1.arg:<float>metrotime [ms] (default: 300 ms);
+#X obj 125 283 sig~ 10001;
+#X text 78 509 dB;
+#X text 7 8 pvu~;
+#X text 67 8 peak-vu-meter;
+#X obj 96 361 pvu~;
+#X text 181 415 2.outlet: <float> overflow_per_metrotime_counter [-]
+;
+#X text 162 436 1.outlet: <float> peak_level [dB];
+#X text 134 188 reset peak-level to;
+#X text 256 189 -199.9 dB and overflow_counter to 0;
+#X text 134 204 stop the metro-clock of pvu~;
+#X text 134 223 start the metro-clock of pvu~;
+#X text 181 109 2.arg:<float>releasetime [ms] (default: 300 ms);
+#X text 181 151 3.arg:<float>overflow_threshold [dB] (default: -0.01
+dB);
+#X obj 150 361 pvu~ 300 300 -0.01;
+#X connect 0 0 31 0;
+#X connect 1 0 31 0;
+#X connect 2 0 31 0;
+#X connect 3 0 34 0;
+#X connect 5 0 57 0;
+#X connect 6 0 57 0;
+#X connect 7 0 57 0;
+#X connect 8 0 31 0;
+#X connect 9 0 31 0;
+#X connect 10 0 31 0;
+#X connect 11 0 31 0;
+#X connect 12 0 31 0;
+#X connect 13 0 31 0;
+#X connect 14 0 31 0;
+#X connect 15 0 31 0;
+#X connect 16 0 31 0;
+#X connect 17 0 31 0;
+#X connect 18 0 31 0;
+#X connect 25 0 26 0;
+#X connect 29 0 25 0;
+#X connect 30 1 35 0;
+#X connect 31 0 3 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 1;
+#X connect 34 0 57 0;
+#X connect 35 0 46 0;
+#X connect 36 0 57 0;
+#X connect 37 0 57 0;
+#X connect 38 0 57 0;
+#X connect 39 0 36 0;
+#X connect 40 0 37 0;
+#X connect 43 0 38 0;
+#X connect 47 0 51 0;
+#X connect 48 0 49 0;
+#X connect 49 0 50 0;
+#X connect 50 0 31 0;
+#X connect 51 0 48 0;
+#X connect 53 0 32 0;
+#X connect 57 0 28 0;
+#X connect 57 0 30 1;
+#X connect 57 1 4 0;
diff --git a/iemhelp/help-rbpq2~.pd b/iemhelp/help-rbpq2~.pd
new file mode 100644
index 0000000..6b8feb8
--- /dev/null
+++ b/iemhelp/help-rbpq2~.pd
@@ -0,0 +1,59 @@
+#N canvas 375 118 375 487 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 26 371 2.arg:<float> Q [-];
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 9 265 ~signal_in~;
+#X floatatom 82 180 3 15 133 0 - - -;
+#X obj 82 199 mtof;
+#X floatatom 82 218 9 0 22000 0 - - -;
+#X text 146 219 Hz;
+#X text 64 294 ~signal_out~;
+#X floatatom 187 287 7 0 0 0 - - -;
+#X text 238 288 dB;
+#X floatatom 125 163 9 0 22000 0 - - -;
+#X text 189 164 Hz;
+#X floatatom 52 124 3 15 133 0 - - -;
+#X floatatom 143 260 5 2 9999 0 - - -;
+#X text 184 261 ms;
+#X floatatom 112 240 4 0.01 1000 0 - - -;
+#X text 145 240 Q;
+#X obj 52 339 dac~;
+#X obj 52 314 gainvu~ 300;
+#X obj 234 165 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 289 183 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8900 1;
+#X obj 52 143 testtone~ 200;
+#X obj 116 107 init 69;
+#X text 79 125 midi;
+#X obj 52 280 rbpq2~ 440 2 200;
+#X floatatom 265 331 7 0 0 0 - - -;
+#X text 312 331 dB;
+#X text 99 7 resonance-bandpass 2.order with Q-inlet;
+#X obj 4 13 cnv 8 1 1 empty empty rbpq2~ 1 2 1 18 -262144 -1109 0;
+#X text 34 446 graz \, austria 2003;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 32 1;
+#X connect 20 0 29 0;
+#X connect 21 0 32 3;
+#X connect 23 0 32 2;
+#X connect 26 0 25 0;
+#X connect 26 0 25 1;
+#X connect 26 1 33 0;
+#X connect 26 2 27 0;
+#X connect 27 1 16 0;
+#X connect 28 0 26 1;
+#X connect 29 0 32 0;
+#X connect 29 1 18 0;
+#X connect 30 0 20 0;
+#X connect 32 0 26 0;
diff --git a/iemhelp/help-rbpw2~.pd b/iemhelp/help-rbpw2~.pd
new file mode 100644
index 0000000..fca79fd
--- /dev/null
+++ b/iemhelp/help-rbpw2~.pd
@@ -0,0 +1,59 @@
+#N canvas 361 130 413 485 10;
+#X text 17 421 (c) musil@iem.kug.ac.at;
+#X text 59 434 IEM KUG;
+#X text 34 40 dsp ON/OFF;
+#X floatatom 17 80 5 0 0 0 - - -;
+#X text 55 81 % cpu;
+#X obj 17 60 dsp;
+#X obj 17 40 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X text 26 361 1.arg:<float> center_freq. [Hz];
+#X text 26 381 3.arg:<float> interpolation_time [ms];
+#X text 26 371 2.arg:<float> bandwidth [Hz];
+#X text 7 260 ~signal_in~;
+#X floatatom 84 175 3 15 133 0 - - -;
+#X obj 84 194 mtof;
+#X floatatom 84 213 9 0 22000 0 - - -;
+#X text 148 214 Hz;
+#X text 62 289 ~signal_out~;
+#X floatatom 201 282 7 0 0 0 - - -;
+#X text 252 283 dB;
+#X floatatom 123 158 9 0 22000 0 - - -;
+#X text 187 159 Hz;
+#X floatatom 50 119 3 15 133 0 - - -;
+#X floatatom 153 255 5 2 9999 0 - - -;
+#X text 194 256 ms;
+#X floatatom 118 235 4 0.01 1000 0 - - -;
+#X obj 50 334 dac~;
+#X obj 50 309 gainvu~ 300;
+#X obj 248 160 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 303 178 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 8700 1;
+#X obj 50 138 testtone~ 200;
+#X obj 114 102 init 69;
+#X text 77 120 midi;
+#X floatatom 279 324 7 0 0 0 - - -;
+#X text 330 325 dB;
+#X obj 50 276 rbpw2~ 440 220 200;
+#X text 151 236 bandwidth Hz;
+#X text 100 4 resonance-bandpass 2.order with bandwidth-inlet;
+#X obj 5 10 cnv 8 1 1 empty empty rbpw2~ 1 2 1 18 -262144 -1109 0;
+#X text 34 446 graz \, austria 2003;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 33 1;
+#X connect 20 0 28 0;
+#X connect 21 0 33 3;
+#X connect 23 0 33 2;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 31 0;
+#X connect 25 2 26 0;
+#X connect 26 1 16 0;
+#X connect 27 0 25 1;
+#X connect 28 0 33 0;
+#X connect 28 1 18 0;
+#X connect 29 0 20 0;
+#X connect 33 0 25 0;
diff --git a/iemhelp/help-receive2list.pd b/iemhelp/help-receive2list.pd
new file mode 100644
index 0000000..63d4b8d
--- /dev/null
+++ b/iemhelp/help-receive2list.pd
@@ -0,0 +1,98 @@
+#N canvas 302 119 590 526 10;
+#X obj 210 164 receive2list;
+#X floatatom 210 394 5 0 0 0 - - -;
+#X floatatom 230 359 5 0 0 0 - - -;
+#X floatatom 250 323 5 0 0 0 - - -;
+#X floatatom 270 286 5 0 0 0 - - -;
+#X text 297 93 init;
+#X floatatom 24 94 5 0 0 0 - - -;
+#X obj 24 114 s aaa;
+#X floatatom 63 94 5 0 0 0 - - -;
+#X floatatom 103 94 5 0 0 0 - - -;
+#X floatatom 142 73 5 0 0 0 - - -;
+#X obj 63 114 s bbb;
+#X obj 103 114 s ccc;
+#X obj 142 115 s ddd;
+#X obj 25 251 s eee;
+#X msg 25 158 symbol abc;
+#X msg 31 180 symbol xyz;
+#X obj 210 94 loadbang;
+#X text 10 13 receive2list;
+#X text 119 11 convert received message to a list;
+#X text 121 38 the corresponding prepend-floats and receive-symbols
+;
+#X text 121 25 with a prepended float.;
+#X text 122 52 have to be inputed via a set message.;
+#X text 48 479 IEM KUG;
+#X text 22 490 graz \, austria 2003;
+#X text 20 466 (c) musil@iem.at;
+#X obj 142 93 pp set;
+#X obj 210 413 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 230 376 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 250 340 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 270 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 272 143 clear;
+#X floatatom 295 304 5 0 0 0 - - -;
+#X floatatom 234 415 5 0 0 0 - - -;
+#X floatatom 252 377 5 0 0 0 - - -;
+#X floatatom 271 341 5 0 0 0 - - -;
+#X text 294 164 no argument;
+#X text 338 174 (max. 200 convertions);
+#X msg 481 119 300 xxx;
+#X obj 210 136 pp add;
+#X symbolatom 361 278 10 0 0 0 - - -;
+#X symbolatom 382 303 10 0 0 0 - - -;
+#X obj 361 303 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 290 261 symbol;
+#X symbolatom 45 230 10 0 0 0 - - -;
+#X floatatom 32 312 5 0 0 0 - - -;
+#X msg 59 351 22 33 44 55;
+#X obj 67 375 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 42 204 set fgh;
+#X obj 310 220 print out5;
+#X obj 32 401 s fff;
+#X obj 210 188 iem_route 0 1 2 3 4 5;
+#X symbolatom 44 329 10 0 0 0 - - -;
+#X msg 210 115 0 aaa \, 1 bbb \, 2 ccc \, 3 ddd \, 4 eee;
+#X connect 0 0 51 0;
+#X connect 1 0 27 0;
+#X connect 1 0 33 0;
+#X connect 2 0 28 0;
+#X connect 2 0 34 0;
+#X connect 3 0 29 0;
+#X connect 3 0 35 0;
+#X connect 4 0 30 0;
+#X connect 4 0 32 0;
+#X connect 6 0 7 0;
+#X connect 8 0 11 0;
+#X connect 9 0 12 0;
+#X connect 10 0 26 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 53 0;
+#X connect 26 0 13 0;
+#X connect 31 0 0 0;
+#X connect 38 0 39 0;
+#X connect 39 0 0 0;
+#X connect 40 0 41 0;
+#X connect 40 0 42 0;
+#X connect 43 0 40 0;
+#X connect 44 0 14 0;
+#X connect 45 0 50 0;
+#X connect 46 0 50 0;
+#X connect 47 0 50 0;
+#X connect 48 0 14 0;
+#X connect 51 0 1 0;
+#X connect 51 1 2 0;
+#X connect 51 2 3 0;
+#X connect 51 3 4 0;
+#X connect 51 4 43 0;
+#X connect 51 5 49 0;
+#X connect 52 0 50 0;
+#X connect 53 0 39 0;
diff --git a/iemhelp/help-rmstofad.pd b/iemhelp/help-rmstofad.pd
new file mode 100644
index 0000000..bd79766
--- /dev/null
+++ b/iemhelp/help-rmstofad.pd
@@ -0,0 +1,22 @@
+#N canvas 157 156 332 297 10;
+#X floatatom 90 38 9 0 1300 0 - - -;
+#X obj 88 137 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X obj 70 129 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 123 107 v2db;
+#X obj 70 107 rmstofad;
+#X floatatom 90 78 9 0 12 0 - - -;
+#X text 149 77 linear value;
+#X text 151 209 (c) musil@iem.kug.ac.at;
+#X text 188 222 IEM KUG;
+#X text 163 234 graz \, austria 2003;
+#X text 8 6 rmstofad;
+#X text 81 7 convert rms-value to fader-scale;
+#X text 153 38 linear value in percent;
+#X obj 90 57 * 0.01;
+#X connect 0 0 13 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 5 0 4 0;
+#X connect 13 0 5 0;
diff --git a/iemhelp/help-round_zero.pd b/iemhelp/help-round_zero.pd
new file mode 100644
index 0000000..d628291
--- /dev/null
+++ b/iemhelp/help-round_zero.pd
@@ -0,0 +1,18 @@
+#N canvas 158 131 554 326 10;
+#X obj 55 160 round_zero 1e-006;
+#X msg 55 78 -1e-007;
+#X text 10 8 round_zero;
+#X text 122 9 round very small numbers between plus and minus 1 argument
+to zero;
+#X obj 55 183 print rounded;
+#X msg 116 78 1e-007;
+#X msg 67 114 -1e-005;
+#X msg 128 114 1e-005;
+#X text 27 247 (c) musil@iem.kug.ac.at;
+#X text 64 260 IEM KUG;
+#X text 39 272 graz \, austria 2003;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
diff --git a/iemhelp/help-round~.pd b/iemhelp/help-round~.pd
new file mode 100644
index 0000000..3a97265
--- /dev/null
+++ b/iemhelp/help-round~.pd
@@ -0,0 +1,25 @@
+#N canvas 375 118 322 334 10;
+#X text 11 265 (c) musil@iem.kug.ac.at;
+#X text 53 278 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 45 225 7 0 0 0 - - -;
+#X floatatom 46 119 7 0 0 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 9 5 round~;
+#X obj 46 141 sig~;
+#X obj 46 170 round~;
+#X obj 45 203 unsig~;
+#X text 96 168 no arg;
+#X text 28 290 graz \, austria 2003;
+#X text 76 16 a signal-integer-number;
+#X text 73 5 signal-float-rounding to;
+#X connect 4 0 10 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 3 0;
diff --git a/iemhelp/help-rvu~.pd b/iemhelp/help-rvu~.pd
new file mode 100644
index 0000000..e07b9d8
--- /dev/null
+++ b/iemhelp/help-rvu~.pd
@@ -0,0 +1,109 @@
+#N canvas 210 11 726 593 10;
+#X msg 167 190 0;
+#X msg 468 191 0.5;
+#X msg 540 191 1;
+#X obj 96 229 sig~;
+#X floatatom 96 343 9 0 0 0 - - -;
+#X msg 96 135 reset;
+#X msg 96 169 start;
+#X msg 96 152 stop;
+#X msg 357 190 0.1;
+#X msg 321 190 0.01;
+#X msg 279 190 0.001;
+#X msg 237 190 0.0001;
+#X msg 194 190 1e-005;
+#X msg 390 191 0.25;
+#X msg 427 191 0.316;
+#X msg 499 191 0.707;
+#X msg 570 191 1.414;
+#X msg 612 191 2;
+#X msg 645 191 10;
+#X text 27 298 ~signal_in~;
+#X text 201 47 (periode between 2 output-events);
+#X text 99 480 (c) musil@iem.kug.ac.at;
+#X text 116 505 graz \, austria 2000;
+#X text 141 493 IEM KUG;
+#X text 32 42 dsp ON/OFF;
+#X obj 14 61 dsp;
+#X floatatom 14 82 3 0 0 0 - - -;
+#X text 41 83 % cpu;
+#X text 160 344 1.item: <float> rms_level [dB];
+#X obj 14 40 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 25 327 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X floatatom 96 207 9 0 0 0 - - -;
+#X obj 125 249 phasor~;
+#X obj 125 268 cos~;
+#X obj 96 285 *~;
+#X floatatom 24 470 6 0 0 0 - - -;
+#X floatatom 34 454 6 0 0 0 - - -;
+#X msg 96 51 t_metro \$1;
+#X msg 96 97 t_release \$1;
+#X floatatom 96 34 9 50 500 0 - - -;
+#X floatatom 96 80 9 50 2000 0 - - -;
+#X text 204 90 (output_level decrements by about 8.6 dB = 63% during
+this;
+#X text 556 91 time);
+#X obj 24 503 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 486 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 21 116 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 164 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 21 179 * 0.99;
+#X obj 21 198 + 0.01;
+#X obj 21 145 metro 2567;
+#X text 181 36 1.arg:<float>metrotime [ms] (default: 300 ms);
+#X obj 125 229 sig~ 10001;
+#X text 78 455 dB;
+#X text 68 471 dB;
+#X text 7 8 rvu~;
+#X text 67 7 rms- vu-meter;
+#X text 181 79 2.arg:<float>releasetime [ms] (default: 300 ms);
+#X obj 96 307 rvu~;
+#X text 106 323 output: <float>:;
+#X text 134 134 reset rms-level to -99.9 dB;
+#X text 134 151 stop the metro-clock of rvu~;
+#X text 134 169 start the metro-clock of rvu~;
+#X connect 0 0 31 0;
+#X connect 1 0 31 0;
+#X connect 2 0 31 0;
+#X connect 3 0 34 0;
+#X connect 5 0 57 0;
+#X connect 6 0 57 0;
+#X connect 7 0 57 0;
+#X connect 8 0 31 0;
+#X connect 9 0 31 0;
+#X connect 10 0 31 0;
+#X connect 11 0 31 0;
+#X connect 12 0 31 0;
+#X connect 13 0 31 0;
+#X connect 14 0 31 0;
+#X connect 15 0 31 0;
+#X connect 16 0 31 0;
+#X connect 17 0 31 0;
+#X connect 18 0 31 0;
+#X connect 25 0 26 0;
+#X connect 29 0 25 0;
+#X connect 30 0 35 0;
+#X connect 30 1 36 0;
+#X connect 31 0 3 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 1;
+#X connect 34 0 57 0;
+#X connect 35 0 43 0;
+#X connect 36 0 44 0;
+#X connect 37 0 57 0;
+#X connect 38 0 57 0;
+#X connect 39 0 37 0;
+#X connect 40 0 38 0;
+#X connect 45 0 49 0;
+#X connect 46 0 47 0;
+#X connect 47 0 48 0;
+#X connect 48 0 31 0;
+#X connect 49 0 46 0;
+#X connect 51 0 32 0;
+#X connect 57 0 30 0;
+#X connect 57 0 4 0;
diff --git a/iemhelp/help-sin_phase~.pd b/iemhelp/help-sin_phase~.pd
new file mode 100644
index 0000000..1ef78e7
--- /dev/null
+++ b/iemhelp/help-sin_phase~.pd
@@ -0,0 +1,61 @@
+#N canvas 375 118 484 456 10;
+#X text 12 402 (c) musil@iem.kug.ac.at;
+#X text 54 415 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 155 63 3 15 133 0 - - -;
+#X obj 155 81 mtof;
+#X floatatom 155 102 9 0 22000 0 - - -;
+#X text 214 101 Hz;
+#X floatatom 294 158 6 -360 360 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X text 10 7 sin_phase~;
+#X text 105 8 calculate phase-difference between 2;
+#X text 105 20 sine-waves \, in samples (signal-out);
+#X obj 155 241 sin_phase~;
+#X obj 209 216 cos~;
+#X obj 154 220 cos~;
+#X obj 154 198 +~ 0;
+#X obj 155 122 phasor~ 440;
+#X text 340 155 percent;
+#X text 29 427 graz \, austria 2003;
+#X text 180 61 midi-pitch;
+#X text 295 140 phase-difference;
+#X obj 156 264 lp1~ 10 100;
+#X obj 157 286 unsig~;
+#X floatatom 157 372 5 0 0 0 - - -;
+#X obj 157 308 / 44100;
+#X floatatom 92 326 5 0 0 0 - - -;
+#X obj 157 330 * 10;
+#X obj 157 350 * 360;
+#X text 195 371 degree;
+#X obj 61 268 unsig~;
+#X floatatom 61 291 5 0 0 0 - - -;
+#X obj 294 181 / 360;
+#X obj 268 116 f;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 19 0;
+#X connect 5 0 35 0;
+#X connect 7 0 34 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 0;
+#X connect 15 0 24 0;
+#X connect 15 0 32 0;
+#X connect 16 0 15 1;
+#X connect 17 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 16 0;
+#X connect 19 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 27 0;
+#X connect 25 0 28 0;
+#X connect 27 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 26 0;
+#X connect 32 0 33 0;
+#X connect 34 0 18 1;
+#X connect 35 0 29 1;
diff --git a/iemhelp/help-soundfile_info.pd b/iemhelp/help-soundfile_info.pd
new file mode 100644
index 0000000..e469be4
--- /dev/null
+++ b/iemhelp/help-soundfile_info.pd
@@ -0,0 +1,34 @@
+#N canvas 153 56 717 404 10;
+#X obj 31 45 openpanel;
+#X obj 31 26 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 31 92 read \$1;
+#X obj 31 166 soundfile_info;
+#X obj 31 217 print;
+#X text 40 146 "read"-message needs a symbol (soundfile in wave format)
+;
+#X symbolatom 131 75 66 0 0 0 - - -;
+#X text 50 184 "list"-message output with 7 items;
+#X text 91 224 4.item: <float> header-size in bytes;
+#X text 91 194 1.item: <float> samplerate in Hz;
+#X text 91 204 2.item: <symbol> file-name;
+#X text 91 214 3.item: <float> multi-channel-sound-data-length in samples
+;
+#X text 91 234 5.item: <float> number of channels;
+#X text 91 244 6.item: <float> single-sample-size in bytes;
+#X text 7 2 soundfile_info;
+#X text 130 2 show the header-data of a wav-file;
+#X text 24 303 (c) musil@iem.kug.ac.at;
+#X text 61 316 IEM KUG;
+#X text 36 328 graz \, austria 2003;
+#X text 91 254 7.item: <symbol> endianness ("l" for little);
+#X text 260 264 ("b" for big);
+#X text 214 279 (eg. little endian "wav" is natural format on Intel-machines)
+;
+#X text 214 314 (eg. big endian "aiff" is natural format on Macintosh-machines)
+;
+#X connect 0 0 2 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
diff --git a/iemhelp/help-speedlim.pd b/iemhelp/help-speedlim.pd
new file mode 100644
index 0000000..0ef0e74
--- /dev/null
+++ b/iemhelp/help-speedlim.pd
@@ -0,0 +1,30 @@
+#N canvas 465 200 396 309 10;
+#X msg 173 43 1000;
+#X msg 176 65 200;
+#X floatatom 67 86 4 0 0 0 - - -;
+#X floatatom 46 152 4 0 0 0 - - -;
+#X obj 95 150 t f b b;
+#X obj 117 174 timer;
+#X obj 95 200 pack 0 0;
+#X obj 95 225 print;
+#X msg 179 86 20;
+#X obj 67 115 speedlim 20;
+#X text 6 7 speedlim : speedlimit for float-message;
+#X text 153 115 1.arg: lock-time in ms;
+#X text 188 220 (c) musil@iem.kug.ac.at;
+#X text 230 233 IEM KUG;
+#X obj 46 171 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 205 245 graz \, austria 2003;
+#X connect 0 0 9 1;
+#X connect 1 0 9 1;
+#X connect 2 0 9 0;
+#X connect 3 0 14 0;
+#X connect 4 0 6 0;
+#X connect 4 1 5 0;
+#X connect 4 2 5 1;
+#X connect 5 0 6 1;
+#X connect 6 0 7 0;
+#X connect 8 0 9 1;
+#X connect 9 0 3 0;
+#X connect 9 0 4 0;
diff --git a/iemhelp/help-split.pd b/iemhelp/help-split.pd
new file mode 100644
index 0000000..02cef99
--- /dev/null
+++ b/iemhelp/help-split.pd
@@ -0,0 +1,25 @@
+#N canvas 168 213 423 343 10;
+#X text 15 275 (c) musil@iem.kug.ac.at;
+#X text 57 288 IEM KUG;
+#X text 32 300 graz \, austria 2001;
+#X obj 21 212 bng 15 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X obj 58 170 bng 15 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X text 41 253 (c) miller puckette;
+#X text 7 8 split;
+#X obj 21 130 split 5;
+#X text 35 243 the original object moses;
+#X floatatom 21 65 4 0 0;
+#X floatatom 58 109 4 0 0;
+#X floatatom 21 192 4 0 0;
+#X floatatom 58 150 4 0 0;
+#X text 19 50 input_value <float>;
+#X text 52 8 part <float>-messages into less and greater equal than limit;
+#X text 60 94 limit <float>;
+#X text 92 150 output: input greater equal than limit;
+#X text 55 193 output: input less than limit;
+#X connect 7 0 11 0;
+#X connect 7 1 12 0;
+#X connect 9 0 7 0;
+#X connect 10 0 7 1;
+#X connect 11 0 3 0;
+#X connect 12 0 4 0;
diff --git a/iemhelp/help-split3.pd b/iemhelp/help-split3.pd
new file mode 100644
index 0000000..cfe7ba4
--- /dev/null
+++ b/iemhelp/help-split3.pd
@@ -0,0 +1,30 @@
+#N canvas 290 163 427 323 10;
+#X floatatom 19 243 9 0 0;
+#X text 18 276 (c) musil@iem.kug.ac.at;
+#X text 55 289 IEM KUG;
+#X floatatom 19 76 9 0 0;
+#X text 15 11 split3;
+#X floatatom 64 99 9 0 0;
+#X floatatom 110 123 9 0 0;
+#X floatatom 64 218 9 0 0;
+#X floatatom 110 192 9 0 0;
+#X text 81 75 <float> input;
+#X text 127 99 <float> low-limit;
+#X text 83 244 <float> output within;
+#X text 128 219 <float> output less than low-limit;
+#X text 175 193 <float> output greater than high-limit;
+#X text 175 123 <float> high-limit;
+#X text 129 147 1.arg: <float> low-limit;
+#X text 129 159 2.arg: <float> high-limit;
+#X text 30 301 graz \, austria 2001;
+#X obj 19 152 split3 -7.5 13.5;
+#X text 77 11 part a <float>-message into 3 ways:;
+#X text 138 46 3 greater than high-limit;
+#X text 138 36 2 less than low-limit \;;
+#X text 138 26 1 within low- and high-limit \;;
+#X connect 3 0 18 0;
+#X connect 5 0 18 1;
+#X connect 6 0 18 2;
+#X connect 18 0 0 0;
+#X connect 18 1 7 0;
+#X connect 18 2 8 0;
diff --git a/iemhelp/help-splitfilename.pd b/iemhelp/help-splitfilename.pd
new file mode 100644
index 0000000..396c066
--- /dev/null
+++ b/iemhelp/help-splitfilename.pd
@@ -0,0 +1,67 @@
+#N canvas 150 53 673 562 10;
+#X text 23 436 (c) musil@iem.kug.ac.at;
+#X text 65 449 IEM KUG;
+#X text 40 461 graz \, austria 2002;
+#X text 232 457 updated for Pd version 0.35;
+#X text 9 1 splitfilename: split into path and filename;
+#X obj 53 391 print path;
+#X obj 139 391 print file;
+#X msg 389 153 separator $;
+#X msg 389 88 separator @;
+#X msg 389 109 separator :;
+#X msg 25 74 C:/program/pd/my_project my_foo.pd;
+#X obj 63 338 print path+file;
+#X msg 389 46 separator /;
+#N canvas 4 20 450 300 /SUBPATCH/ 0;
+#X obj 101 31 inlet;
+#X obj 100 59 outlet;
+#X connect 0 0 1 0;
+#X restore 389 276 pd;
+#X msg 389 174 separator z;
+#X msg 389 195 separator _;
+#X msg 389 216 separator .;
+#X text 120 19 (separator is last "/");
+#X msg 389 67 separator space;
+#X msg 54 98 /home/me my_first_patch.pd;
+#X text 156 368 1.arg: <symbol> separator-character (opt. \, default
+"/");
+#X msg 405 250 separator;
+#X msg 389 131 separator 2;
+#X msg 534 78 separator backslash;
+#X msg 534 97 separator leftbrace;
+#X msg 534 116 separator rightbrace;
+#X msg 534 135 separator dollar;
+#X msg 534 154 separator comma;
+#X msg 534 173 separator semi;
+#N canvas 4 20 450 300 /SUBPATCH/ 0;
+#X obj 101 31 inlet;
+#X obj 100 59 outlet;
+#X connect 0 0 1 0;
+#X restore 534 255 pd;
+#X obj 53 315 mergefilename /;
+#X obj 53 368 splitfilename /;
+#X connect 7 0 13 0;
+#X connect 8 0 13 0;
+#X connect 9 0 13 0;
+#X connect 10 0 30 0;
+#X connect 12 0 13 0;
+#X connect 13 0 30 0;
+#X connect 13 0 31 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
+#X connect 16 0 13 0;
+#X connect 18 0 13 0;
+#X connect 19 0 30 0;
+#X connect 21 0 13 0;
+#X connect 22 0 13 0;
+#X connect 23 0 29 0;
+#X connect 24 0 29 0;
+#X connect 25 0 29 0;
+#X connect 26 0 29 0;
+#X connect 27 0 29 0;
+#X connect 28 0 29 0;
+#X connect 29 0 13 0;
+#X connect 30 0 11 0;
+#X connect 30 0 31 0;
+#X connect 31 0 5 0;
+#X connect 31 1 6 0;
diff --git a/iemhelp/help-stripfilename.pd b/iemhelp/help-stripfilename.pd
new file mode 100644
index 0000000..224b797
--- /dev/null
+++ b/iemhelp/help-stripfilename.pd
@@ -0,0 +1,24 @@
+#N canvas 183 294 490 264 10;
+#X obj 87 75 symbol;
+#X text 15 181 (c) musil@iem.kug.ac.at;
+#X text 57 194 IEM KUG;
+#X text 32 206 graz \, austria 2002;
+#X msg 87 43 abcdefghijk;
+#X text 233 199 updated for Pd version 0.35;
+#X msg 26 59 set 2;
+#X text 116 14 characters of a symbol;
+#X text 10 1 stripfilename: strip the first or last;
+#X obj 47 138 stripfilename -5;
+#X msg 11 39 set -7;
+#X obj 47 160 print;
+#X text 190 92 1.arg: <float> number of first;
+#X text 227 105 or last characters to strip;
+#X text 218 132 if positiv -> first;
+#X text 218 144 if negativ -> last;
+#X msg 40 81 set 8;
+#X connect 0 0 9 0;
+#X connect 4 0 0 0;
+#X connect 6 0 9 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 16 0 9 0;
diff --git a/iemhelp/help-subl~.pd b/iemhelp/help-subl~.pd
new file mode 100644
index 0000000..d363d5f
--- /dev/null
+++ b/iemhelp/help-subl~.pd
@@ -0,0 +1,28 @@
+#N canvas 375 118 374 458 10;
+#X text 16 386 (c) musil@iem.kug.ac.at;
+#X text 58 399 IEM KUG;
+#X text 28 48 dsp ON/OFF;
+#X floatatom 85 199 9 0 22000 0 - - -;
+#X floatatom 11 88 5 0 0 0 - - -;
+#X text 46 87 % cpu;
+#X floatatom 125 225 5 2 9999 0 - - -;
+#X text 168 224 ms;
+#X obj 11 68 dsp;
+#X obj 11 48 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 15 364 2.arg:<float> interpolation_time [ms];
+#X obj 46 271 unsig~;
+#X floatatom 46 294 9 0 22000 0 - - -;
+#X obj 46 141 sig~ 1;
+#X text 33 411 graz \, austria 2003;
+#X text 13 8 subl~;
+#X text 79 8 signal subtraction with line~;
+#X obj 46 248 subl~ 0.5 2000;
+#X text 15 352 1.arg:<float> 2nd operand of subtraction;
+#X connect 3 0 17 1;
+#X connect 6 0 17 2;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 12 0;
+#X connect 13 0 17 0;
+#X connect 17 0 11 0;
diff --git a/iemhelp/help-t3_bpe.pd b/iemhelp/help-t3_bpe.pd
new file mode 100644
index 0000000..53ffa33
--- /dev/null
+++ b/iemhelp/help-t3_bpe.pd
@@ -0,0 +1,101 @@
+#N canvas 100 17 528 582 10;
+#N canvas 0 0 450 300 graph1 0;
+#X array array99 259 float 0;
+#X coords 0 1 258 0 256 140 1;
+#X restore 96 43 graph;
+#X obj 68 458 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 35 355 stop;
+#X obj 68 527 tabwrite~ array99;
+#X obj 7 433 loadbang;
+#X obj 14 38 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1 1
+;
+#X floatatom 14 105 5 0 0 0 - - -;
+#X floatatom 30 83 3 0 0 0 - - -;
+#X obj 14 60 dsp;
+#X obj 91 381 t3_bpe;
+#X obj 81 283 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 91 316 t b b;
+#X obj 91 418 t3_line~ 0;
+#X obj 91 349 f 0.04;
+#X floatatom 128 265 5 0 0 0 - - -;
+#X obj 128 287 / 44.1;
+#X text 171 267 Samples;
+#X obj 91 455 fade~ lin;
+#X obj 147 363 pack 0 0 1 1.5 1 0.5 0 1.5;
+#X text 184 250 pre-delay;
+#X floatatom 256 264 5 0 0 0 - - -;
+#X obj 256 286 / 44.1;
+#X text 299 266 Samples;
+#X text 312 249 attack;
+#X floatatom 364 263 5 0 0 0 - - -;
+#X obj 364 285 / 44.1;
+#X text 407 265 Samples;
+#X text 420 248 sustain;
+#X floatatom 364 344 5 0 0 0 - - -;
+#X obj 364 366 / 44.1;
+#X text 407 346 Samples;
+#X text 420 329 release;
+#X obj 256 242 init 34;
+#X obj 364 241 init 55;
+#X obj 364 322 init 70;
+#X obj 128 243 init 70;
+#X text 12 10 t3_bpe;
+#X text 105 9 time-tagged trigger break point envelope;
+#X msg 239 421 set _lin;
+#X msg 239 442 set _linsqrt;
+#X msg 239 463 set _sqrt;
+#X msg 239 483 set _sin;
+#X msg 240 504 set _sinhann;
+#X msg 240 526 set _hann;
+#X msg 381 70 \; array99 resize 259 \; array99 bounds 0 0 258 1 \;
+array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08
+0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1;
+#X obj 381 47 loadbang;
+#X obj 91 477 *~ 0.8;
+#X obj 91 499 +~ 0.1;
+#X text 354 505 (c) musil@iem.kug.ac.at;
+#X text 396 518 IEM KUG;
+#X text 371 530 graz \, austria 2001;
+#X text 363 184 Samples;
+#X floatatom 156 387 8 0 0 0 - - -;
+#X text 213 388 t3_bang if finished;
+#X connect 1 0 3 0;
+#X connect 2 0 9 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 8 0 6 0;
+#X connect 8 1 7 0;
+#X connect 9 0 12 0;
+#X connect 9 1 12 1;
+#X connect 9 2 52 0;
+#X connect 10 0 1 0;
+#X connect 10 0 11 0;
+#X connect 11 0 13 0;
+#X connect 11 1 18 0;
+#X connect 12 0 17 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 13 1;
+#X connect 17 0 46 0;
+#X connect 18 0 9 0;
+#X connect 20 0 21 0;
+#X connect 21 0 18 3;
+#X connect 24 0 25 0;
+#X connect 25 0 18 5;
+#X connect 28 0 29 0;
+#X connect 29 0 18 7;
+#X connect 32 0 20 0;
+#X connect 33 0 24 0;
+#X connect 34 0 28 0;
+#X connect 35 0 14 0;
+#X connect 38 0 17 0;
+#X connect 39 0 17 0;
+#X connect 40 0 17 0;
+#X connect 41 0 17 0;
+#X connect 42 0 17 0;
+#X connect 43 0 17 0;
+#X connect 45 0 44 0;
+#X connect 46 0 47 0;
+#X connect 47 0 3 0;
diff --git a/iemhelp/help-t3_delay.pd b/iemhelp/help-t3_delay.pd
new file mode 100644
index 0000000..fcb852a
--- /dev/null
+++ b/iemhelp/help-t3_delay.pd
@@ -0,0 +1,75 @@
+#N canvas 100 58 492 561 10;
+#N canvas 0 0 450 300 graph1 0;
+#X array array99 259 float 0;
+#X coords 0 1 258 0 259 140 1;
+#X restore 108 48 graph;
+#X obj 95 238 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 243 478 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 95 400 t3_del 0.5;
+#X obj 28 454 t3_timer;
+#X floatatom 28 502 5 0 0 0 - - -;
+#X msg 154 455 \$1 0.9;
+#X obj 95 303 f 0.04;
+#X floatatom 132 241 5 0 0 0 - - -;
+#X msg 95 455 \$1 0.1;
+#X obj 133 486 t3_sig~ 0.1;
+#X obj 132 263 / 44.1;
+#X text 175 255 Samples;
+#X floatatom 196 352 5 0 0 0 - - -;
+#X obj 196 374 / 44.1;
+#X text 237 362 Samples;
+#X msg 43 327 stop;
+#X obj 243 521 tabwrite~ array99;
+#X obj 132 219 init 80;
+#X obj 196 330 init 30;
+#X obj 401 53 loadbang;
+#X obj 14 38 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1 1
+;
+#X floatatom 14 105 5 0 0 0 - - -;
+#X floatatom 30 83 3 0 0 0 - - -;
+#X obj 14 60 dsp;
+#X obj 95 327 t3_del 0;
+#X obj 28 478 * 44.1;
+#X text 71 503 Samples;
+#X text 12 10 t3_delay;
+#X text 106 9 time-tagged trigger delay;
+#X obj 95 355 t f f;
+#X text 379 189 Samples;
+#X msg 401 80 \; array99 resize 259 \; array99 bounds 0 0 258 1 \;
+array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08
+0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1;
+#X obj 243 429 loadbang;
+#X text 299 331 (c) musil@iem.kug.ac.at;
+#X text 341 344 IEM KUG;
+#X text 316 356 graz \, austria 2001;
+#X text 172 240 pre_delay;
+#X text 238 350 duration;
+#X connect 1 0 2 0;
+#X connect 1 0 7 0;
+#X connect 2 0 17 0;
+#X connect 3 0 4 1;
+#X connect 3 0 9 0;
+#X connect 4 0 26 0;
+#X connect 6 0 10 0;
+#X connect 7 0 25 0;
+#X connect 8 0 11 0;
+#X connect 9 0 10 0;
+#X connect 10 0 17 0;
+#X connect 11 0 7 1;
+#X connect 13 0 14 0;
+#X connect 14 0 3 1;
+#X connect 16 0 3 0;
+#X connect 18 0 8 0;
+#X connect 19 0 13 0;
+#X connect 20 0 32 0;
+#X connect 21 0 24 0;
+#X connect 24 0 22 0;
+#X connect 24 1 23 0;
+#X connect 25 0 30 0;
+#X connect 26 0 5 0;
+#X connect 30 0 3 0;
+#X connect 30 0 4 0;
+#X connect 30 1 6 0;
+#X connect 33 0 2 0;
diff --git a/iemhelp/help-t3_line~.pd b/iemhelp/help-t3_line~.pd
new file mode 100644
index 0000000..26a952a
--- /dev/null
+++ b/iemhelp/help-t3_line~.pd
@@ -0,0 +1,93 @@
+#N canvas 124 45 501 580 10;
+#N canvas 0 0 450 300 graph1 0;
+#X array array99 259 float 0;
+#X coords 0 1 258 0 256 140 1;
+#X restore 97 36 graph;
+#X obj 64 239 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 243 478 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 64 401 t3_del 0.5;
+#X obj 64 304 f 0.04;
+#X floatatom 101 242 5 0 0 0 - - -;
+#X obj 101 264 / 44.1;
+#X text 144 244 Samples;
+#X floatatom 129 354 5 0 0 0 - - -;
+#X obj 129 376 / 44.1;
+#X text 172 354 Samples;
+#X msg 12 328 stop;
+#X obj 243 521 tabwrite~ array99;
+#X obj 101 220 init 80;
+#X obj 129 332 init 30;
+#X obj 243 448 loadbang;
+#X obj 14 38 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1 1
+;
+#X floatatom 14 105 5 0 0 0 - - -;
+#X floatatom 30 83 3 0 0 0 - - -;
+#X obj 14 60 dsp;
+#X obj 64 327 t3_del 0;
+#X text 12 10 t3_delay;
+#X text 106 9 time-tagged trigger delay;
+#X obj 102 487 t3_line~ 0.1;
+#X obj 64 353 t f f;
+#X obj 17 455 pack 0 0.1 0.2;
+#X obj 122 456 pack 0 0.9 0.2;
+#X floatatom 233 255 5 0 0 0 - - -;
+#X obj 233 277 / 44.1;
+#X text 276 255 Samples;
+#X floatatom 351 257 5 0 0 0 - - -;
+#X obj 351 279 / 44.1;
+#X text 394 257 Samples;
+#X text 407 238 attack;
+#X text 286 237 release;
+#X obj 351 235 init 12;
+#X text 183 334 sustain + attack;
+#X obj 233 233 init 25;
+#X text 155 223 pre-delay;
+#X obj 314 365 t b f;
+#X obj 319 391 - 0;
+#X floatatom 319 416 5 0 0 0 - - -;
+#X text 365 419 Samples;
+#X text 365 396 sustain;
+#X msg 386 62 \; array99 resize 259 \; array99 bounds 0 0 258 1 \;
+array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08
+0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1;
+#X obj 386 39 loadbang;
+#X text 364 178 Samples;
+#X text 325 455 (c) musil@iem.kug.ac.at;
+#X text 367 468 IEM KUG;
+#X text 342 480 graz \, austria 2001;
+#X connect 1 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 12 0;
+#X connect 3 0 25 0;
+#X connect 4 0 20 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 1;
+#X connect 8 0 9 0;
+#X connect 8 0 40 0;
+#X connect 9 0 3 1;
+#X connect 11 0 3 0;
+#X connect 13 0 5 0;
+#X connect 14 0 8 0;
+#X connect 15 0 2 0;
+#X connect 16 0 19 0;
+#X connect 19 0 17 0;
+#X connect 19 1 18 0;
+#X connect 20 0 24 0;
+#X connect 23 0 12 0;
+#X connect 24 0 3 0;
+#X connect 24 1 26 0;
+#X connect 25 0 23 0;
+#X connect 26 0 23 0;
+#X connect 27 0 28 0;
+#X connect 28 0 25 2;
+#X connect 30 0 31 0;
+#X connect 30 0 39 0;
+#X connect 31 0 26 2;
+#X connect 35 0 30 0;
+#X connect 37 0 27 0;
+#X connect 39 0 40 0;
+#X connect 39 1 40 1;
+#X connect 40 0 41 0;
+#X connect 45 0 44 0;
diff --git a/iemhelp/help-t3_metro.pd b/iemhelp/help-t3_metro.pd
new file mode 100644
index 0000000..1b72bd5
--- /dev/null
+++ b/iemhelp/help-t3_metro.pd
@@ -0,0 +1,99 @@
+#N canvas 228 46 463 570 10;
+#N canvas 0 0 450 300 graph1 0;
+#X array array99 259 float 0;
+#X coords 0 1 258 0 256 140 1;
+#X restore 89 33 graph;
+#X obj 91 427 t f b;
+#X obj 91 475 pack 0 0;
+#X obj 227 448 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#N canvas 161 0 158 259 toggle 0;
+#X obj 38 25 inlet;
+#X obj 38 178 outlet;
+#X obj 38 53 f;
+#X obj 38 79 == 0;
+#X obj 38 130 * 0.8;
+#X obj 38 152 + 0.1;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 2 1;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X restore 121 452 pd toggle;
+#X msg 91 331 start \$1;
+#X msg 215 517 stop;
+#X floatatom 128 234 5 0 0 0 - - -;
+#X obj 128 258 / 44.1;
+#X text 171 235 Samples;
+#X floatatom 240 264 5 0 0 0 - - -;
+#X obj 240 288 / 44.1;
+#X text 283 264 Samples;
+#X obj 91 283 f 0.04;
+#X obj 91 234 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 227 473 tabwrite~ array99;
+#X obj 91 499 t3_sig~ 0.1;
+#X obj 128 208 init 30;
+#X obj 227 422 loadbang;
+#X obj 11 33 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1 1
+;
+#X floatatom 11 100 5 0 0 0 - - -;
+#X floatatom 27 78 3 0 0 0 - - -;
+#X obj 11 55 dsp;
+#X obj 91 307 t3_del 0;
+#X obj 240 241 init 10;
+#X text 8 7 t3_metro;
+#X text 108 7 time-tagged trigger variable metronom;
+#X obj 91 392 t3_metro 1.46;
+#X obj 204 321 +;
+#X obj 204 345 change -1;
+#X obj 204 368 clip 0.01 1e+006;
+#X obj 360 377 t b f;
+#X obj 360 310 random 32000;
+#X obj 360 332 - 16000;
+#X obj 360 354 / 100000;
+#X obj 215 496 del 9000;
+#X obj 384 40 loadbang;
+#X msg 384 67 \; array99 resize 259 \; array99 bounds 0 0 258 1 \;
+array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08
+0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1;
+#X text 356 176 Samples;
+#X text 294 410 (c) musil@iem.kug.ac.at;
+#X text 336 423 IEM KUG;
+#X text 311 435 graz \, austria 2001;
+#X connect 1 0 2 0;
+#X connect 1 1 4 0;
+#X connect 1 1 32 0;
+#X connect 2 0 16 0;
+#X connect 3 0 15 0;
+#X connect 3 0 35 0;
+#X connect 4 0 2 1;
+#X connect 5 0 27 0;
+#X connect 6 0 27 0;
+#X connect 7 0 8 0;
+#X connect 8 0 13 1;
+#X connect 10 0 11 0;
+#X connect 11 0 28 0;
+#X connect 13 0 23 0;
+#X connect 14 0 13 0;
+#X connect 14 0 3 0;
+#X connect 16 0 15 0;
+#X connect 17 0 7 0;
+#X connect 18 0 3 0;
+#X connect 19 0 22 0;
+#X connect 22 0 20 0;
+#X connect 22 1 21 0;
+#X connect 23 0 5 0;
+#X connect 24 0 10 0;
+#X connect 27 0 1 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 27 1;
+#X connect 31 0 28 0;
+#X connect 31 1 28 1;
+#X connect 32 0 33 0;
+#X connect 33 0 34 0;
+#X connect 34 0 31 0;
+#X connect 35 0 6 0;
+#X connect 36 0 37 0;
diff --git a/iemhelp/help-t3_sig~.pd b/iemhelp/help-t3_sig~.pd
new file mode 100644
index 0000000..16f7213
--- /dev/null
+++ b/iemhelp/help-t3_sig~.pd
@@ -0,0 +1,69 @@
+#N canvas 174 106 503 410 10;
+#X floatatom 62 268 8 0 0;
+#X obj 164 371 dac~;
+#X obj 164 317 *~ 0.2;
+#X obj 164 342 hp1~ 5;
+#X floatatom 280 201 8 0 0;
+#X obj 164 293 t3_sig~;
+#X obj 215 226 t3_del 0.1;
+#X msg 164 254 \$1 1;
+#X obj 10 63 dsp;
+#X floatatom 26 85 3 0 0;
+#X floatatom 10 109 5 0 0;
+#X obj 10 42 toggle 15 1 empty empty empty 20 8 0 10 0 22 22 1 1;
+#X obj 164 182 t3_metro 5;
+#X msg 140 115 start 0;
+#X msg 176 139 stop;
+#X obj 280 153 for++ 1 1000 5;
+#X obj 280 177 / 200;
+#X obj 280 7 loadbang;
+#X obj 280 31 bng 15 250 50 0 empty empty empty 20 8 0 10 0 22 22;
+#X msg 215 254 \$1 -1;
+#X obj 280 54 metro 10010;
+#X obj 376 72 del 5005;
+#X obj 376 97 t b b;
+#X obj 280 94 t b b;
+#X msg 292 120 1 1000 5;
+#X msg 406 121 1000 1 5;
+#X obj 62 245 t3_timer;
+#X text 5 6 t3_sig~;
+#X text 76 4 time-tagged trigger sig~;
+#X msg 397 23 stop;
+#X text 240 297 (c) musil@iem.kug.ac.at;
+#X text 282 310 IEM KUG;
+#X text 257 322 graz \, austria 2001;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 0 1 1;
+#X connect 4 0 6 1;
+#X connect 5 0 2 0;
+#X connect 6 0 19 0;
+#X connect 6 0 26 1;
+#X connect 7 0 5 0;
+#X connect 8 0 10 0;
+#X connect 8 1 9 0;
+#X connect 11 0 8 0;
+#X connect 12 0 7 0;
+#X connect 12 0 6 0;
+#X connect 12 0 26 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 15 0 16 0;
+#X connect 16 0 4 0;
+#X connect 17 0 18 0;
+#X connect 18 0 20 0;
+#X connect 18 0 13 0;
+#X connect 19 0 5 0;
+#X connect 20 0 21 0;
+#X connect 20 0 23 0;
+#X connect 21 0 22 0;
+#X connect 22 0 15 0;
+#X connect 22 1 25 0;
+#X connect 23 0 15 0;
+#X connect 23 1 24 0;
+#X connect 24 0 15 0;
+#X connect 25 0 15 0;
+#X connect 26 0 0 0;
+#X connect 29 0 20 0;
+#X connect 29 0 15 0;
+#X connect 29 0 21 0;
diff --git a/iemhelp/help-t3_timer.pd b/iemhelp/help-t3_timer.pd
new file mode 100644
index 0000000..4aea1cf
--- /dev/null
+++ b/iemhelp/help-t3_timer.pd
@@ -0,0 +1,22 @@
+#N canvas 231 195 312 288 10;
+#X obj 73 119 t3_del 11.11;
+#X msg 22 79 0.55;
+#X obj 22 48 bng 25 250 50 0 empty empty empty 8 -8 0 10 0 22 22;
+#X obj 22 145 t3_timer;
+#X floatatom 22 170 6 0 0;
+#X text 15 214 (c) musil@iem.kug.ac.at;
+#X text 57 227 IEM KUG;
+#X text 32 239 graz \, austria 2001;
+#X text 88 22 measure time-difference;
+#X text 87 37 between 2 t3_bang-events;
+#X text 6 4 t3_timer;
+#X floatatom 152 93 6 0 0;
+#X text 203 93 ms;
+#X text 72 170 ms;
+#X text 84 5 time-tagged trigger timer;
+#X connect 0 0 3 1;
+#X connect 1 0 0 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 11 0 0 1;
diff --git a/iemhelp/help-toggle_mess.pd b/iemhelp/help-toggle_mess.pd
new file mode 100644
index 0000000..fad2f56
--- /dev/null
+++ b/iemhelp/help-toggle_mess.pd
@@ -0,0 +1,69 @@
+#N canvas 339 48 606 572 10;
+#X obj 222 135 print color;
+#X obj 138 310 print sentence;
+#X obj 113 499 print number;
+#X obj 48 446 tm 4 8 99 2 -77;
+#X obj 40 100 toggle_mess red 178 green 333 blue -999;
+#X obj 174 135 pp set;
+#X msg 174 157 green;
+#X obj 128 333 pp set;
+#X msg 128 355 print;
+#X msg 40 197 print;
+#X obj 98 521 pp set;
+#X msg 98 543 4;
+#X msg 48 403 4;
+#X obj 93 398 init set 0;
+#X obj 178 42 init set 2;
+#X floatatom 308 129 4 0 0 0 - - -;
+#X floatatom 217 281 4 0 0 0 - - -;
+#X floatatom 148 471 4 0 0 0 - - -;
+#X text 224 510 (c) musil@iem.kug.ac.at;
+#X text 266 523 IEM KUG;
+#X text 241 535 graz \, austria 2001;
+#X text 8 7 toggle_mess :;
+#X text 259 253 n arguments: <float> or <sym>;
+#X text 279 329 left outlet: to message-inlet;
+#X text 281 342 middle outlet: float or symbol as anything;
+#X text 281 355 right outlet: float circle-index;
+#X text 300 158 left inlet: from message-outlet;
+#X text 300 172 set-message: initiate internal index;
+#X text 301 187 bang: output without increment;
+#X text 300 203 anything-message: output with;
+#X text 386 217 incrementation of index;
+#X msg 110 43 set 3;
+#X obj 106 69 t b a;
+#X obj 84 223 t b a;
+#X obj 84 202 init set 1;
+#X obj 93 420 t b a;
+#X text 120 6 control a message-box with circular different content
+;
+#X msg 40 53 green;
+#X obj 40 252 tm print this word by word;
+#X connect 3 0 12 0;
+#X connect 3 1 2 0;
+#X connect 3 1 10 0;
+#X connect 3 2 17 0;
+#X connect 4 0 37 0;
+#X connect 4 1 0 0;
+#X connect 4 1 5 0;
+#X connect 4 2 15 0;
+#X connect 5 0 6 0;
+#X connect 7 0 8 0;
+#X connect 9 0 38 0;
+#X connect 10 0 11 0;
+#X connect 12 0 3 0;
+#X connect 13 0 35 0;
+#X connect 14 0 32 0;
+#X connect 31 0 32 0;
+#X connect 32 0 4 0;
+#X connect 32 1 4 0;
+#X connect 33 0 38 0;
+#X connect 33 1 38 0;
+#X connect 34 0 33 0;
+#X connect 35 0 3 0;
+#X connect 35 1 3 0;
+#X connect 37 0 4 0;
+#X connect 38 0 9 0;
+#X connect 38 1 1 0;
+#X connect 38 1 7 0;
+#X connect 38 2 16 0;
diff --git a/iemhelp/help-transf_fader.pd b/iemhelp/help-transf_fader.pd
new file mode 100644
index 0000000..26dddf5
--- /dev/null
+++ b/iemhelp/help-transf_fader.pd
@@ -0,0 +1,30 @@
+#N canvas 69 66 629 391 10;
+#X floatatom 69 56 9 0 0 0 - - -;
+#X floatatom 69 214 9 0 0 0 - - -;
+#X obj 69 152 transf_fader;
+#X text 12 8 transf_fader;
+#X text 123 9 transforms a slider range;
+#X obj 493 118 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X text 68 36 input from slider 0..147;
+#X text 63 239 output to dbtorms;
+#X obj 476 110 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 1;
+#X obj 502 262 - 100;
+#X msg 103 88 pairs 0 0 6 40 24 70 36 80 48 88 60 94 72 98 96 102 108
+106 111 107.5 114 109 117 112 147 142;
+#X obj 444 271 dbtorms;
+#X obj 570 310 v2db;
+#X obj 561 120 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0;
+#X text 160 127 pairs of break-points: input / output;
+#X text 20 285 (c) musil@iem.kug.ac.at;
+#X text 57 298 IEM KUG;
+#X text 32 310 graz \, austria 2003;
+#X connect 0 0 2 0;
+#X connect 1 0 9 0;
+#X connect 1 0 11 0;
+#X connect 2 0 1 0;
+#X connect 8 0 0 0;
+#X connect 9 0 5 1;
+#X connect 10 0 2 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 1;
diff --git a/iemhelp/help-unsig~.pd b/iemhelp/help-unsig~.pd
new file mode 100644
index 0000000..32148fd
--- /dev/null
+++ b/iemhelp/help-unsig~.pd
@@ -0,0 +1,27 @@
+#N canvas 487 158 390 304 10;
+#X floatatom 22 215 9 0 0 0 - - -;
+#X text 28 155 ~signal_in~;
+#X text 24 243 (c) musil@iem.kug.ac.at;
+#X text 66 256 IEM KUG;
+#X text 41 44 dsp ON/OFF;
+#X obj 22 65 dsp;
+#X floatatom 22 86 5 0 0 0 - - -;
+#X text 62 88 % cpu;
+#X text 41 268 graz \, austria 2001;
+#X obj 22 171 unsig~;
+#X obj 22 125 osc~ 0.03;
+#X obj 22 45 tgl 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X text 14 5 unsig~;
+#X text 75 18 convert signal to float;
+#X floatatom 110 214 9 0 0 0 - - -;
+#X obj 110 153 unsig~ 1000;
+#X text 177 191 (opt. 300 ms);
+#X text 125 178 1.arg: <float> metro-time in ms;
+#X text 78 5 counterpart to sig~;
+#X connect 5 0 6 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 10 0 15 0;
+#X connect 11 0 5 0;
+#X connect 15 0 14 0;
diff --git a/iemhelp/help-unsymbol.pd b/iemhelp/help-unsymbol.pd
new file mode 100644
index 0000000..aa48660
--- /dev/null
+++ b/iemhelp/help-unsymbol.pd
@@ -0,0 +1,20 @@
+#N canvas 402 159 302 241 10;
+#X obj 10 71 symbol;
+#X msg 10 44 blabla;
+#X obj 10 99 print a;
+#X obj 88 71 symbol;
+#X msg 88 44 foo3;
+#X obj 88 125 print b;
+#X obj 158 100 unsym;
+#X obj 88 100 unsymbol;
+#X text 72 17 to an anything selector;
+#X text 2 4 unsymbol: converts a symbol;
+#X text 225 100 no arg.;
+#X text 10 161 (c) musil@iem.kug.ac.at;
+#X text 52 174 IEM KUG;
+#X text 27 186 graz \, austria 2001;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 7 0 5 0;
diff --git a/iemhelp/help-v2db.pd b/iemhelp/help-v2db.pd
new file mode 100644
index 0000000..aca5694
--- /dev/null
+++ b/iemhelp/help-v2db.pd
@@ -0,0 +1,14 @@
+#N canvas 158 78 279 220 10;
+#X floatatom 23 99 9 0 0;
+#X text 21 131 (c) musil@iem.kug.ac.at;
+#X text 63 144 IEM KUG;
+#X text 57 75 no arg;
+#X floatatom 23 52 9 0 0;
+#X text 24 12 v2db;
+#X text 104 13 value to dB converter;
+#X text 90 102 output_level [dB];
+#X text 90 52 input_value [-];
+#X obj 23 76 v2db;
+#X text 38 156 graz \, austria 2001;
+#X connect 4 0 9 0;
+#X connect 9 0 0 0;
diff --git a/iemhelp/help-vcf_bp2~.pd b/iemhelp/help-vcf_bp2~.pd
new file mode 100644
index 0000000..018b71a
--- /dev/null
+++ b/iemhelp/help-vcf_bp2~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 469 471 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_bp2~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 bandpass 2.order with signal-inlets for;
+#X obj 95 311 vcf_bp2~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_bp4~.pd b/iemhelp/help-vcf_bp4~.pd
new file mode 100644
index 0000000..b94e1af
--- /dev/null
+++ b/iemhelp/help-vcf_bp4~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 471 473 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 95 311 vcf_bp4~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 136 5 bandpass 4.order with signal-inlets for;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_bp4~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 34 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 32 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 32 1;
+#X connect 31 0 32 2;
+#X connect 32 0 21 0;
+#X connect 33 0 30 0;
+#X connect 34 0 31 0;
+#X connect 39 0 4 0;
+#X connect 40 0 17 0;
diff --git a/iemhelp/help-vcf_bp6~.pd b/iemhelp/help-vcf_bp6~.pd
new file mode 100644
index 0000000..989f6c6
--- /dev/null
+++ b/iemhelp/help-vcf_bp6~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 475 477 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 168 140 9 0 22000 0 - - -;
+#X text 243 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_bp6~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 bandpass 6.order with signal-inlets for;
+#X obj 95 311 vcf_bp6~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_bp8~.pd b/iemhelp/help-vcf_bp8~.pd
new file mode 100644
index 0000000..8df6b78
--- /dev/null
+++ b/iemhelp/help-vcf_bp8~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 473 475 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_bp8~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 bandpass 8.order with signal-inlets for;
+#X obj 95 311 vcf_bp8~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_hp2~.pd b/iemhelp/help-vcf_hp2~.pd
new file mode 100644
index 0000000..b05bae9
--- /dev/null
+++ b/iemhelp/help-vcf_hp2~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 454 496 10;
+#X text 16 291 ~signal_in~;
+#X text 22 417 (c) musil@iem.kug.ac.at;
+#X text 65 431 IEM KUG;
+#X text 33 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 168 140 9 0 22000 0 - - -;
+#X text 243 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 16 73 5 0 0 0 - - -;
+#X text 58 73 % cpu;
+#X obj 16 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 16 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 157 16 frequency and Q;
+#X text 39 442 graz \, austria 2003;
+#X obj 47 128 init 69;
+#X obj 27 221 init 0.707;
+#X text 154 3 highpass 2.order with signal-inlets for;
+#X obj 95 311 vcf_hp2~;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_hp2~ 1 2 1 18 -262144 -1109
+0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 39 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 39 1;
+#X connect 31 0 39 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 39 0 21 0;
diff --git a/iemhelp/help-vcf_hp4~.pd b/iemhelp/help-vcf_hp4~.pd
new file mode 100644
index 0000000..5598ba1
--- /dev/null
+++ b/iemhelp/help-vcf_hp4~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 441 483 10;
+#X text 16 291 ~signal_in~;
+#X text 16 418 (c) musil@iem.kug.ac.at;
+#X text 59 432 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 165 14 frequency and Q;
+#X text 33 443 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X text 133 1 highass 4.order with signal-inlets for;
+#X obj 95 311 vcf_hp4~;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_hp4~ 1 2 1 18 -262144 -1109
+0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 39 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 39 1;
+#X connect 31 0 39 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 39 0 21 0;
diff --git a/iemhelp/help-vcf_hp6~.pd b/iemhelp/help-vcf_hp6~.pd
new file mode 100644
index 0000000..7543602
--- /dev/null
+++ b/iemhelp/help-vcf_hp6~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 443 485 10;
+#X text 16 291 ~signal_in~;
+#X text 16 418 (c) musil@iem.kug.ac.at;
+#X text 59 432 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 165 14 frequency and Q;
+#X text 33 443 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_hp6~ 1 2 1 18 -262144 -1109
+0;
+#X text 133 1 highass 6.order with signal-inlets for;
+#X obj 95 311 vcf_hp6~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_hp8~.pd b/iemhelp/help-vcf_hp8~.pd
new file mode 100644
index 0000000..df12bf9
--- /dev/null
+++ b/iemhelp/help-vcf_hp8~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 443 485 10;
+#X text 16 291 ~signal_in~;
+#X text 16 418 (c) musil@iem.kug.ac.at;
+#X text 59 432 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 165 14 frequency and Q;
+#X text 33 443 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_hp8~ 1 2 1 18 -262144 -1109
+0;
+#X text 133 1 highass 8.order with signal-inlets for;
+#X obj 95 311 vcf_hp8~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_lp2~.pd b/iemhelp/help-vcf_lp2~.pd
new file mode 100644
index 0000000..3e22be1
--- /dev/null
+++ b/iemhelp/help-vcf_lp2~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 450 492 10;
+#X text 16 291 ~signal_in~;
+#X text 22 417 (c) musil@iem.kug.ac.at;
+#X text 65 431 IEM KUG;
+#X text 33 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 168 140 9 0 22000 0 - - -;
+#X text 243 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 16 73 5 0 0 0 - - -;
+#X text 58 73 % cpu;
+#X obj 16 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 16 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 95 311 vcf_lp2~;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 189 17 frequency and Q;
+#X text 153 3 lowpass 2.order with signal-inlets for;
+#X text 39 442 graz \, austria 2003;
+#X obj 47 128 init 69;
+#X obj 27 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_lp2~ 1 2 1 18 -262144 -1109
+0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 33 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 34 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 30 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 21 0;
+#X connect 31 0 30 1;
+#X connect 32 0 30 2;
+#X connect 33 0 31 0;
+#X connect 34 0 32 0;
+#X connect 38 0 4 0;
+#X connect 39 0 17 0;
diff --git a/iemhelp/help-vcf_lp4~.pd b/iemhelp/help-vcf_lp4~.pd
new file mode 100644
index 0000000..f0d775a
--- /dev/null
+++ b/iemhelp/help-vcf_lp4~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 439 478 10;
+#X text 16 291 ~signal_in~;
+#X text 24 420 (c) musil@iem.kug.ac.at;
+#X text 67 434 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X obj 95 311 vcf_lp4~;
+#X text 156 14 frequency and Q;
+#X text 133 1 lowpass 4.order with signal-inlets for;
+#X text 41 445 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_lp4~ 1 2 1 18 -262144 -1109
+0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 34 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 34 1;
+#X connect 31 0 34 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 34 0 21 0;
+#X connect 38 0 4 0;
+#X connect 39 0 17 0;
diff --git a/iemhelp/help-vcf_lp6~.pd b/iemhelp/help-vcf_lp6~.pd
new file mode 100644
index 0000000..7760dc8
--- /dev/null
+++ b/iemhelp/help-vcf_lp6~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 441 480 10;
+#X text 16 291 ~signal_in~;
+#X text 24 420 (c) musil@iem.kug.ac.at;
+#X text 67 434 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 156 14 frequency and Q;
+#X text 41 445 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_lp6~ 1 2 1 18 -262144 -1109
+0;
+#X text 133 1 lowpass 6.order with signal-inlets for;
+#X obj 95 311 vcf_lp6~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_lp8~.pd b/iemhelp/help-vcf_lp8~.pd
new file mode 100644
index 0000000..fbd434a
--- /dev/null
+++ b/iemhelp/help-vcf_lp8~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 441 480 10;
+#X text 16 291 ~signal_in~;
+#X text 24 420 (c) musil@iem.kug.ac.at;
+#X text 67 434 IEM KUG;
+#X text 32 33 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 73 5 0 0 0 - - -;
+#X text 57 73 % cpu;
+#X obj 15 53 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 33 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 10;
+#X obj 146 260 pack 0 10;
+#X text 156 14 frequency and Q;
+#X text 41 445 graz \, austria 2003;
+#X obj 41 128 init 69;
+#X obj 25 221 init 0.707;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_lp8~ 1 2 1 18 -262144 -1109
+0;
+#X text 133 1 lowpass 8.order with signal-inlets for;
+#X obj 95 311 vcf_lp8~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 36 0 4 0;
+#X connect 37 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_rbp2~.pd b/iemhelp/help-vcf_rbp2~.pd
new file mode 100644
index 0000000..81a40c4
--- /dev/null
+++ b/iemhelp/help-vcf_rbp2~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 469 471 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_rbp2~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 resonance-bandpass 2.order with signal-inlets for;
+#X obj 95 311 vcf_rbp2~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_rbp4~.pd b/iemhelp/help-vcf_rbp4~.pd
new file mode 100644
index 0000000..81cc33e
--- /dev/null
+++ b/iemhelp/help-vcf_rbp4~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 473 475 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_rbp4~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 resonance-bandpass 4.order with signal-inlets for;
+#X obj 95 311 vcf_rbp4~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_rbp6~.pd b/iemhelp/help-vcf_rbp6~.pd
new file mode 100644
index 0000000..b9818f5
--- /dev/null
+++ b/iemhelp/help-vcf_rbp6~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 475 477 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_rbp6~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 resonance-bandpass 6.order with signal-inlets for;
+#X obj 95 311 vcf_rbp6~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-vcf_rbp8~.pd b/iemhelp/help-vcf_rbp8~.pd
new file mode 100644
index 0000000..751f538
--- /dev/null
+++ b/iemhelp/help-vcf_rbp8~.pd
@@ -0,0 +1,68 @@
+#N canvas 213 130 475 477 10;
+#X text 16 291 ~signal_in~;
+#X text 30 417 (c) musil@iem.kug.ac.at;
+#X text 73 431 IEM KUG;
+#X text 32 34 dsp ON/OFF;
+#X floatatom 104 145 3 15 133 0 - - -;
+#X obj 104 168 mtof;
+#X floatatom 104 191 9 0 22000 0 - - -;
+#X text 174 190 Hz;
+#X text 101 336 ~signal_out~;
+#X floatatom 232 325 7 0 0 0 - - -;
+#X text 289 327 dB;
+#X floatatom 181 140 9 0 22000 0 - - -;
+#X text 256 139 Hz;
+#X floatatom 95 96 3 15 133 0 - - -;
+#X floatatom 15 74 5 0 0 0 - - -;
+#X text 57 74 % cpu;
+#X obj 15 54 dsp;
+#X floatatom 146 238 7 0.01 1000 0 - - -;
+#X text 205 239 Q;
+#X obj 15 34 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 95 382 dac~;
+#X obj 95 357 gainvu~ 300;
+#X obj 277 203 vu 15 120 empty empty 8 -8 0 10 -66577 -1 1 0;
+#X obj 333 226 vsl 15 128 0 127 0 1 empty empty empty 8 -8 0 10 -262144
+-1 -1 10000 1;
+#X obj 95 118 testtone~ 200;
+#X obj 162 79 init 69;
+#X text 122 97 midi;
+#X floatatom 326 374 7 0 0 0 - - -;
+#X text 382 375 dB;
+#X text 159 308 no arg.;
+#X obj 104 282 line~;
+#X obj 146 282 line~;
+#X obj 104 213 pack 0 30;
+#X obj 146 260 pack 0 30;
+#X text 139 18 frequency and Q;
+#X text 47 442 graz \, austria 2003;
+#X obj 12 12 cnv 8 1 1 empty empty vcf_rbp8~ 1 2 1 18 -262144 -1109
+0;
+#X obj 43 128 init 69;
+#X obj 28 221 init 0.707;
+#X text 136 5 resonance-bandpass 8.order with signal-inlets for;
+#X obj 95 311 vcf_rbp8~;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 32 0;
+#X connect 13 0 24 0;
+#X connect 16 0 14 0;
+#X connect 17 0 33 0;
+#X connect 19 0 16 0;
+#X connect 21 0 20 0;
+#X connect 21 0 20 1;
+#X connect 21 1 27 0;
+#X connect 21 2 22 0;
+#X connect 22 1 9 0;
+#X connect 23 0 21 1;
+#X connect 24 0 40 0;
+#X connect 24 1 11 0;
+#X connect 25 0 13 0;
+#X connect 30 0 40 1;
+#X connect 31 0 40 2;
+#X connect 32 0 30 0;
+#X connect 33 0 31 0;
+#X connect 37 0 4 0;
+#X connect 38 0 17 0;
+#X connect 40 0 21 0;
diff --git a/iemhelp/help-wrap.pd b/iemhelp/help-wrap.pd
new file mode 100644
index 0000000..5a4d89e
--- /dev/null
+++ b/iemhelp/help-wrap.pd
@@ -0,0 +1,16 @@
+#N canvas 69 66 334 324 10;
+#X floatatom 40 70 9 0 0 0 - - -;
+#X floatatom 40 156 9 0 0 0 - - -;
+#X text 17 221 (c) musil@iem.kug.ac.at;
+#X text 54 234 IEM KUG;
+#X text 29 246 graz \, austria 2003;
+#X obj 40 92 / 100;
+#X floatatom 40 115 9 0 0 0 - - -;
+#X text 76 10 wraparound between 0 and +1;
+#X text 78 132 no arg.;
+#X obj 40 133 wrap;
+#X text 11 9 wrap;
+#X connect 0 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 9 0 1 0;
diff --git a/iemhelp/hslider.pd b/iemhelp/hslider.pd
new file mode 100644
index 0000000..24abfe1
--- /dev/null
+++ b/iemhelp/hslider.pd
@@ -0,0 +1,303 @@
+#N canvas 239 208 390 413 10;
+#X obj 1 1 cnv 8 100 60 empty empty hslider=hsl 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 127 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 41 7 0 0;
+#X text 13 355 (c) musil@iem.kug.ac.at;
+#X text 55 368 IEM KUG;
+#X text 30 380 graz \, austria 2001;
+#X obj 38 149 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 41 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 41 107 hsl 101 15 25 75 0 1 foo1_snd foo1_rcv empty 8 -8 192
+10 -225280 -1109 -1 2000 1;
+#X text 174 11 gui-horicontal-slider:;
+#X floatatom 47 62 7 0 0;
+#X floatatom 116 150 9 0 0;
+#X obj 110 308 r goo2_snd;
+#X obj 145 248 s goo2_rcv;
+#X floatatom 105 40 7 0 0;
+#X floatatom 145 206 7 0 0;
+#X obj 60 170 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 60 147 pd once;
+#X obj 40 265 hsl 73 15 55 3520 1 1 goo2_snd goo2_rcv log.freq. 8 -8
+192 10 -42246 -260818 -90133 4800 1;
+#X obj 37 308 ftom;
+#X floatatom 37 330 9 0 0;
+#X floatatom 64 287 9 0 0;
+#X floatatom 110 329 9 0 0;
+#X text 175 176 click properties to;
+#X floatatom 37 203 8 0 0;
+#X obj 37 226 mtof;
+#X text 12 184 --------------------;
+#X text 163 187 modify geometry \, colors \, etc.;
+#X obj 105 82 s foo1_rcv;
+#X obj 116 130 r foo1_snd;
+#X msg 105 61 set \$1;
+#X msg 145 227 set \$1;
+#X text 197 120 (0.01 pixels);
+#X text 183 99 shift-click & drag;
+#X text 189 109 for fine-tuning;
+#X text 148 270 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 147 281 for moving selected gui-objects;
+#N canvas 207 113 716 530 edit 0;
+#X obj 32 220 f;
+#X msg 10 199 bang;
+#X floatatom 48 198 3 63 88;
+#X floatatom 83 220 3 0 37;
+#X obj 32 243 pack 0 0;
+#X text 110 220 y-label;
+#X text 76 198 x-label;
+#X obj 279 246 f;
+#X msg 257 225 bang;
+#X floatatom 295 224 3 -10 10;
+#X floatatom 330 246 3 -10 10;
+#X obj 279 269 pack 0 0;
+#X obj 292 358 f;
+#X msg 270 337 bang;
+#X floatatom 308 336 3 20 60;
+#X floatatom 343 358 3 150 200;
+#X obj 292 381 pack 0 0;
+#X text 323 224 x-delta;
+#X text 357 246 y-delta;
+#X text 336 336 x-position;
+#X text 370 358 y-position;
+#X obj 52 335 f;
+#X msg 30 314 bang;
+#X floatatom 68 313 3 0 2;
+#X floatatom 103 335 3 4 36;
+#X obj 52 358 pack 0 0;
+#X text 96 313 font;
+#X text 132 335 height;
+#X floatatom 476 188 1 0 1;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X msg 47 154 \; goo2_rcv color \$1 \$2 \$3;
+#X msg 32 268 \; goo2_rcv label_pos \$1 \$2;
+#X msg 52 383 \; goo2_rcv label_font \$1 \$2;
+#X msg 34 427 \; goo2_rcv label blabla;
+#X msg 292 406 \; goo2_rcv pos \$1 \$2;
+#X msg 279 294 \; goo2_rcv delta \$1 \$2;
+#X msg 475 21 \; goo2_rcv send goo2a_snd;
+#X msg 475 59 \; goo2_rcv send goo2_snd;
+#X msg 476 105 \; goo2_rcv receive goo2a_rcv;
+#X msg 476 143 \; goo2a_rcv receive goo2_rcv;
+#X msg 502 420 \; goo2_rcv init 0;
+#X msg 503 471 \; goo2_rcv init 1;
+#X text 520 188 steady;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 3 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X text 530 269 left-range-bound;
+#X text 586 291 right-range-bound;
+#X msg 486 339 \; goo2_rcv range \$1 \$2;
+#X msg 363 465 \; goo2_rcv log;
+#X msg 269 466 \; goo2_rcv lin;
+#X text 269 448 linear / logarithmical;
+#X obj 275 133 f;
+#X msg 250 112 bang;
+#X floatatom 291 111 3 15 73;
+#X floatatom 326 133 3 8 50;
+#X obj 275 156 pack 0 0;
+#X text 319 111 width;
+#X text 357 134 height;
+#X msg 275 181 \; goo2_rcv size \$1 \$2;
+#X msg 34 463 \; goo2_rcv label log.freq.;
+#X msg 476 212 \; goo2_rcv steady \$1;
+#X obj 47 100 pack 0 0 0;
+#X obj 47 72 f;
+#X msg 24 24 bang;
+#X floatatom 63 22 3 0 29;
+#X floatatom 79 42 3 0 29;
+#X floatatom 112 58 3 0 29;
+#X text 91 22 background;
+#X text 106 42 front-color;
+#X text 140 59 label-color;
+#X msg 277 22 back;
+#X msg 277 42 front;
+#X msg 277 62 label;
+#X msg 239 22 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 277 82 pd RGB_____________;
+#X floatatom 319 52 3 0 255;
+#X floatatom 362 52 3 0 255;
+#X floatatom 405 53 3 0 255;
+#X text 34 -1 preset-colors;
+#X text 290 1 RGB-colors;
+#X text 319 34 red;
+#X text 355 33 green;
+#X text 403 33 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 32 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 36 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 35 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 33 0;
+#X connect 28 0 64 0;
+#X connect 44 0 48 0;
+#X connect 45 0 44 0;
+#X connect 46 0 44 1;
+#X connect 47 0 48 1;
+#X connect 48 0 51 0;
+#X connect 55 0 59 0;
+#X connect 56 0 55 0;
+#X connect 57 0 55 1;
+#X connect 58 0 59 1;
+#X connect 59 0 62 0;
+#X connect 65 0 31 0;
+#X connect 66 0 65 0;
+#X connect 67 0 66 0;
+#X connect 68 0 66 1;
+#X connect 69 0 65 1;
+#X connect 70 0 65 2;
+#X connect 74 0 78 0;
+#X connect 75 0 78 0;
+#X connect 76 0 78 0;
+#X connect 77 0 78 0;
+#X connect 78 0 65 0;
+#X connect 78 1 65 1;
+#X connect 78 2 65 2;
+#X connect 79 0 78 1;
+#X connect 80 0 78 2;
+#X connect 81 0 78 3;
+#X restore 314 245 pd edit;
+#X text 187 379 updated for Pd version 0.34;
+#X obj 167 34 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 221 61 hsl 128 15 0 127 0 0 ddd ddd empty 20 8 192 8 -262144
+-1 -1 200 1;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 9 0 18 0;
+#X connect 11 0 2 0;
+#X connect 13 0 23 0;
+#X connect 15 0 31 0;
+#X connect 16 0 32 0;
+#X connect 18 0 17 0;
+#X connect 19 0 22 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 25 0 26 0;
+#X connect 26 0 19 0;
+#X connect 30 0 12 0;
+#X connect 31 0 29 0;
+#X connect 32 0 14 0;
diff --git a/iemhelp/lp1.wav b/iemhelp/lp1.wav
new file mode 100644
index 0000000..4c4c97d
--- /dev/null
+++ b/iemhelp/lp1.wav
Binary files differ
diff --git a/iemhelp/lp2.wav b/iemhelp/lp2.wav
new file mode 100644
index 0000000..1e3fe72
--- /dev/null
+++ b/iemhelp/lp2.wav
Binary files differ
diff --git a/iemhelp/lp3.wav b/iemhelp/lp3.wav
new file mode 100644
index 0000000..defc6b1
--- /dev/null
+++ b/iemhelp/lp3.wav
Binary files differ
diff --git a/iemhelp/my_canvas.pd b/iemhelp/my_canvas.pd
new file mode 100644
index 0000000..06538ff
--- /dev/null
+++ b/iemhelp/my_canvas.pd
@@ -0,0 +1,243 @@
+#N canvas 478 61 459 285 10;
+#X obj 1 1 cnv 15 300 60 foo10_snd foo10_rcv my_canvas=cnv 50 20 192
+17 -225280 -11904 0;
+#X text 4 232 (c) musil@iem.kug.ac.at;
+#X text 46 245 IEM KUG;
+#X text 21 257 graz \, austria 2001;
+#N canvas 215 80 699 530 edit 0;
+#X obj 39 226 f;
+#X msg 17 205 bang;
+#X floatatom 55 204 3 63 88;
+#X floatatom 90 226 3 0 37;
+#X obj 39 249 pack 0 0;
+#X text 117 226 y-label;
+#X text 83 204 x-label;
+#X obj 297 281 f;
+#X msg 275 260 bang;
+#X floatatom 313 259 3 -10 10;
+#X floatatom 348 281 3 -10 10;
+#X obj 297 304 pack 0 0;
+#X obj 309 396 f;
+#X msg 287 375 bang;
+#X floatatom 325 374 3 20 60;
+#X floatatom 360 396 3 150 200;
+#X obj 309 419 pack 0 0;
+#X text 341 259 x-delta;
+#X text 375 281 y-delta;
+#X text 353 374 x-position;
+#X text 387 396 y-position;
+#X obj 59 341 f;
+#X msg 37 320 bang;
+#X floatatom 75 319 3 0 2;
+#X floatatom 110 341 3 4 36;
+#X obj 59 364 pack 0 0;
+#X text 103 319 font;
+#X text 139 341 height;
+#X floatatom 275 183 3 2 20;
+#X msg 52 137 \; foo10_rcv color \$1 \$2;
+#X msg 39 274 \; foo10_rcv label_pos \$1 \$2;
+#X msg 59 390 \; foo10_rcv label_font \$1 \$2;
+#X msg 36 430 \; foo10_rcv label blabla;
+#X msg 36 466 \; foo10_rcv label my_canvas;
+#X msg 309 444 \; foo10_rcv pos \$1 \$2;
+#X msg 297 329 \; foo10_rcv delta \$1 \$2;
+#X obj 505 234 f;
+#X msg 483 213 bang;
+#X floatatom 521 212 5 100 1000;
+#X floatatom 556 234 4 50 500;
+#X obj 505 257 pack 0 0;
+#X text 566 212 width;
+#X text 594 236 height;
+#X msg 505 282 \; foo10_rcv vis_size \$1 \$2;
+#X msg 275 211 \; foo10_rcv size \$1;
+#X text 305 183 selectable size;
+#X msg 483 156 \; foo10a_rcv receive foo10_rcv;
+#X msg 483 119 \; foo10_rcv receive foo10a_rcv;
+#X msg 482 29 \; foo10_rcv send foo10a_snd;
+#X msg 482 67 \; foo10_rcv send foo10_snd;
+#X msg 509 372 \; foo10_rcv get_pos;
+#X obj 510 407 r foo10_snd;
+#X obj 510 428 unpack 0 0;
+#X floatatom 510 453 4 0 0;
+#X floatatom 575 452 4 0 0;
+#X text 490 452 x=;
+#X text 557 452 y=;
+#X obj 52 79 f;
+#X msg 29 31 bang;
+#X floatatom 68 29 3 0 29;
+#X floatatom 103 47 3 0 29;
+#X text 96 29 background;
+#X text 131 48 label-color;
+#X msg 290 25 back;
+#X msg 290 49 label;
+#X msg 252 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 97 135 route back label bang;
+#X obj 235 168 t b b b;
+#X connect 0 0 29 0;
+#X connect 1 0 25 0;
+#X connect 2 0 26 0;
+#X connect 3 0 27 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 1;
+#X connect 6 0 10 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 1;
+#X connect 9 0 11 1;
+#X connect 10 0 24 1;
+#X connect 11 0 23 1;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 28 0;
+#X connect 22 0 6 0;
+#X connect 23 0 21 0;
+#X connect 24 0 12 0;
+#X connect 25 0 20 0;
+#X connect 26 0 18 0;
+#X connect 27 0 17 0;
+#X connect 28 0 11 0;
+#X connect 28 0 10 0;
+#X connect 29 0 4 0;
+#X connect 29 1 7 0;
+#X connect 29 2 30 0;
+#X connect 30 0 24 0;
+#X connect 30 1 23 0;
+#X connect 30 2 28 0;
+#X restore 290 86 pd RGB_____________;
+#X floatatom 332 55 3 0 255;
+#X floatatom 375 55 3 0 255;
+#X floatatom 418 56 3 0 255;
+#X text 39 3 preset-colors;
+#X text 301 0 RGB-colors;
+#X text 332 37 red;
+#X text 368 36 green;
+#X text 416 36 blue;
+#X obj 52 104 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 30 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 35 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 31 0;
+#X connect 28 0 44 0;
+#X connect 36 0 40 0;
+#X connect 37 0 36 0;
+#X connect 38 0 36 1;
+#X connect 39 0 40 1;
+#X connect 40 0 43 0;
+#X connect 51 0 52 0;
+#X connect 52 0 53 0;
+#X connect 52 1 54 0;
+#X connect 57 0 75 0;
+#X connect 58 0 57 0;
+#X connect 59 0 57 1;
+#X connect 60 0 75 1;
+#X connect 63 0 66 0;
+#X connect 64 0 66 0;
+#X connect 65 0 66 0;
+#X connect 66 0 75 0;
+#X connect 66 1 75 1;
+#X connect 67 0 66 1;
+#X connect 68 0 66 2;
+#X connect 69 0 66 3;
+#X connect 75 0 29 0;
+#X restore 305 20 pd edit;
+#X floatatom 110 193 4 0 0;
+#X floatatom 147 193 4 0 0;
+#X text 121 209 x;
+#X text 158 209 y;
+#X obj 7 161 metro 100;
+#X obj 33 141 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1
+1;
+#X obj 110 145 r from_K1;
+#X floatatom 188 194 4 0 0;
+#X floatatom 225 194 4 0 0;
+#X text 198 210 x;
+#X text 236 210 y;
+#X obj 188 146 r from_K2;
+#X msg 7 185 \; to_K get_pos;
+#N canvas 506 290 395 395 room 1;
+#X obj 1 1 cnv 1 400 400 empty empty type...ctrl+e 150 140 2 17 -33289
+-24198 0;
+#X obj 15 16 cnv 1 1 360 empty empty move_K1_and_K2 115 160 2 17 -166441
+-24198 0;
+#X obj 374 15 cnv 1 1 360 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 15 15 cnv 1 360 1 empty empty empty 20 12 2 20 -166441 -66577
+0;
+#X obj 17 375 cnv 1 358 1 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 24 24 cnv 25 25 25 from_K1 to_K K1 1 13 194 14 -261681 -123526
+0;
+#X obj 342 342 cnv 25 25 25 from_K2 to_K K2 1 13 194 14 -225280 -1109
+0;
+#X restore 307 147 pd room;
+#X obj 110 169 unpack;
+#X obj 188 170 unpack;
+#X text 172 257 updated for Pd version 0.34;
+#X text 51 92 to modify geometry \, colors \, etc.;
+#X obj 2 115 cnv 1 470 1 empty empty empty 20 12 2 20 -261681 -66577
+0;
+#X text 40 78 of the light-blue;
+#X text 166 78 my_canvas-object \,;
+#X text 5 64 click the properties-dialog on the top-left corner;
+#X obj 361 195 r foo10_rcv;
+#X obj 403 215 s ggg;
+#X obj 187 236 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X connect 9 0 17 0;
+#X connect 10 0 9 0;
+#X connect 11 0 19 0;
+#X connect 16 0 20 0;
+#X connect 19 0 5 0;
+#X connect 19 1 6 0;
+#X connect 20 0 12 0;
+#X connect 20 1 13 0;
+#X connect 27 0 28 0;
diff --git a/iemhelp/my_numbox.pd b/iemhelp/my_numbox.pd
new file mode 100644
index 0000000..d9e7887
--- /dev/null
+++ b/iemhelp/my_numbox.pd
@@ -0,0 +1,302 @@
+#N canvas 100 190 390 413 10;
+#X obj 1 1 cnv 8 100 60 empty empty my_numbox=nbx 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 127 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 41 7 0 0;
+#X text 13 355 (c) musil@iem.kug.ac.at;
+#X text 55 368 IEM KUG;
+#X text 30 380 graz \, austria 2001;
+#X obj 38 149 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 41 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 41 107 nbx 5 12 100 300 0 1 foo12_snd foo12_rcv lin. 46 7 192
+10 -261689 -90133 -44926 160;
+#X floatatom 47 62 7 0 0;
+#X floatatom 116 150 9 0 0;
+#X obj 110 308 r goo13_snd;
+#X obj 145 248 s goo13_rcv;
+#X floatatom 105 40 7 0 0;
+#X floatatom 145 206 7 0 0;
+#X obj 60 170 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 60 147 pd once;
+#X obj 37 248 nbx 5 16 55 3520 1 0 goo13_snd goo13_rcv Hz 68 9 192
+17 -225280 -1109 -260818 2057.51;
+#X obj 37 308 ftom;
+#X floatatom 37 330 9 0 0;
+#X floatatom 64 287 9 0 0;
+#X floatatom 110 329 9 0 0;
+#X text 175 176 click properties to;
+#X floatatom 37 203 8 0 0;
+#X obj 37 226 mtof;
+#X text 12 184 --------------------;
+#X text 163 187 modify geometry \, colors \, etc.;
+#X obj 105 82 s foo12_rcv;
+#X obj 116 130 r foo12_snd;
+#X msg 105 61 set \$1;
+#X msg 145 227 set \$1;
+#X text 197 120 (0.01 pixels);
+#X text 183 99 shift-click & drag;
+#X text 189 109 for fine-tuning;
+#X text 148 270 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 147 281 for moving selected gui-objects;
+#N canvas 207 113 716 530 edit 0;
+#X obj 32 220 f;
+#X msg 10 199 bang;
+#X floatatom 48 198 3 63 88;
+#X floatatom 83 220 3 0 37;
+#X obj 32 243 pack 0 0;
+#X text 110 220 y-label;
+#X text 76 198 x-label;
+#X obj 279 246 f;
+#X msg 257 225 bang;
+#X floatatom 295 224 3 -10 10;
+#X floatatom 330 246 3 -10 10;
+#X obj 279 269 pack 0 0;
+#X obj 292 358 f;
+#X msg 270 337 bang;
+#X floatatom 308 336 3 20 60;
+#X floatatom 343 358 3 150 200;
+#X obj 292 381 pack 0 0;
+#X text 323 224 x-delta;
+#X text 357 246 y-delta;
+#X text 336 336 x-position;
+#X text 370 358 y-position;
+#X obj 52 335 f;
+#X msg 30 314 bang;
+#X floatatom 68 313 3 0 2;
+#X floatatom 103 335 3 4 36;
+#X obj 52 358 pack 0 0;
+#X text 96 313 font;
+#X text 132 335 height;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X msg 47 154 \; goo13_rcv color \$1 \$2 \$3;
+#X msg 32 268 \; goo13_rcv label_pos \$1 \$2;
+#X msg 52 383 \; goo13_rcv label_font \$1 \$2;
+#X msg 34 427 \; goo13_rcv label blabla;
+#X msg 292 406 \; goo13_rcv pos \$1 \$2;
+#X msg 279 294 \; goo13_rcv delta \$1 \$2;
+#X msg 475 21 \; goo13_rcv send goo13a_snd;
+#X msg 475 59 \; goo13_rcv send goo13_snd;
+#X msg 476 105 \; goo13_rcv receive goo13a_rcv;
+#X msg 476 143 \; goo13a_rcv receive goo13_rcv;
+#X msg 502 420 \; goo13_rcv init 0;
+#X msg 503 471 \; goo13_rcv init 1;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 3 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X msg 486 339 \; goo13_rcv range \$1 \$2;
+#X msg 363 465 \; goo13_rcv log;
+#X msg 269 466 \; goo13_rcv lin;
+#X text 269 448 linear / logarithmical;
+#X obj 275 133 f;
+#X msg 250 112 bang;
+#X floatatom 291 111 3 1 15;
+#X floatatom 326 133 3 8 50;
+#X obj 275 156 pack 0 0;
+#X msg 275 181 \; goo13_rcv size \$1 \$2;
+#X msg 34 463 \; goo13_rcv label log.freq.;
+#X obj 47 100 pack 0 0 0;
+#X obj 47 72 f;
+#X msg 24 24 bang;
+#X floatatom 63 22 3 0 29;
+#X floatatom 79 42 3 0 29;
+#X floatatom 112 58 3 0 29;
+#X text 91 22 background;
+#X text 106 42 front-color;
+#X text 140 59 label-color;
+#X msg 277 22 back;
+#X msg 277 42 front;
+#X msg 277 62 label;
+#X msg 239 22 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 277 82 pd RGB_____________;
+#X floatatom 319 52 3 0 255;
+#X floatatom 362 52 3 0 255;
+#X floatatom 405 53 3 0 255;
+#X text 34 -1 preset-colors;
+#X text 290 1 RGB-colors;
+#X text 319 34 red;
+#X text 355 33 green;
+#X text 403 33 blue;
+#X text 319 111 width in digits;
+#X text 357 134 height in pix;
+#X text 530 269 minimum-bound;
+#X text 586 291 maximum-bound;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 31 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 35 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 32 0;
+#X connect 42 0 46 0;
+#X connect 43 0 42 0;
+#X connect 44 0 42 1;
+#X connect 45 0 46 1;
+#X connect 46 0 47 0;
+#X connect 51 0 55 0;
+#X connect 52 0 51 0;
+#X connect 53 0 51 1;
+#X connect 54 0 55 1;
+#X connect 55 0 56 0;
+#X connect 58 0 30 0;
+#X connect 59 0 58 0;
+#X connect 60 0 59 0;
+#X connect 61 0 59 1;
+#X connect 62 0 58 1;
+#X connect 63 0 58 2;
+#X connect 67 0 71 0;
+#X connect 68 0 71 0;
+#X connect 69 0 71 0;
+#X connect 70 0 71 0;
+#X connect 71 0 58 0;
+#X connect 71 1 58 1;
+#X connect 71 2 58 2;
+#X connect 72 0 71 1;
+#X connect 73 0 71 2;
+#X connect 74 0 71 3;
+#X restore 314 245 pd edit;
+#X text 187 379 updated for Pd version 0.34;
+#X obj 220 41 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X text 174 11 gui-number-box:;
+#X obj 220 56 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X obj 220 71 nbx 3 12 -1e+37 1e+37 0 0 iii iii empty 20 8 192 10 -262144
+-1 -1 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 9 0 17 0;
+#X connect 10 0 2 0;
+#X connect 12 0 22 0;
+#X connect 14 0 30 0;
+#X connect 15 0 31 0;
+#X connect 17 0 16 0;
+#X connect 18 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 24 0 25 0;
+#X connect 25 0 18 0;
+#X connect 29 0 11 0;
+#X connect 30 0 28 0;
+#X connect 31 0 13 0;
diff --git a/iemhelp/popup.pd b/iemhelp/popup.pd
new file mode 100644
index 0000000..3659af9
--- /dev/null
+++ b/iemhelp/popup.pd
@@ -0,0 +1,25 @@
+#N canvas 194 110 646 379 10;
+#X obj 39 65 pop 6 17 0 0 play_cmd play_cmd play_cmd 82 9 192 17 -225280
+-1109 -260818 0 5 open rewind start stop quit;
+#X obj 105 196 init_popup help-popup.txt play_cmd;
+#X obj 25 196 r play_cmd;
+#X obj 25 218 route set_pop_name;
+#X text 11 9 popup = pop;
+#X obj 263 236 pp set;
+#X msg 263 258 0 open;
+#X obj 69 276 unpack float symbol;
+#X floatatom 69 299 5 0 0;
+#X symbolatom 197 300 10 0 0;
+#X obj 413 93 pop 7 14 0 0 empty empty empty 50 7 0 10 -262144 -1 -1
+0 1 pop;
+#X floatatom 413 128 5 0 0;
+#X symbolatom 460 129 10 0 0;
+#X connect 1 0 10 0;
+#X connect 2 0 3 0;
+#X connect 3 1 5 0;
+#X connect 3 1 7 0;
+#X connect 5 0 6 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
diff --git a/iemhelp/radiobutton.pd b/iemhelp/radiobutton.pd
new file mode 100644
index 0000000..3d05a8b
--- /dev/null
+++ b/iemhelp/radiobutton.pd
@@ -0,0 +1,282 @@
+#N canvas 117 227 547 281 10;
+#X obj 1 1 cnv 8 100 60 empty empty radiobutton=rdb 20 20 1 18 -262144
+-1109 0;
+#X text 16 213 (c) musil@iem.kug.ac.at;
+#X text 58 226 IEM KUG;
+#X text 33 238 graz \, austria 2001;
+#X text 289 52 click properties to;
+#X text 277 63 modify geometry \, colors \, etc.;
+#X obj 356 172 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 355 124 s foo8_rcv;
+#X obj 356 150 r foo8_snd;
+#X obj 44 100 hdl 25 1 1 10 foo8_snd foo8_rcv radio_0_9 156 -8 192
+10 -99865 -262144 -260818 1;
+#X msg 44 142 \$1;
+#X floatatom 44 164 4 0 0;
+#X obj 44 186 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 89 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 89 140 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 221 66 set \$1;
+#X floatatom 221 45 4 0 9;
+#X floatatom 44 54 4 0 9;
+#X msg 122 45 7 0 -5.44;
+#X msg 126 67 3 3 4.55;
+#X obj 106 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X obj 123 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 140 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 157 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 174 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 191 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 208 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 225 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 242 161 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 82 178 print;
+#X text 183 11 gui-radiobutton:;
+#X floatatom 380 198 4 0 0;
+#X msg 380 172 \$1;
+#X msg 355 103 set \$1;
+#X floatatom 355 82 4 0 9;
+#X text 128 178 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 127 189 for moving selected gui-objects;
+#N canvas 222 207 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156;
+#X floatatom 93 198 3 -20 37;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10;
+#X floatatom 337 293 3 -10 10;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60;
+#X floatatom 351 412 3 100 200;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2;
+#X floatatom 113 313 3 4 36;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20;
+#X msg 47 125 \; foo8_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo8_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo8_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo8_rcv label blabla;
+#X msg 300 460 \; foo8_rcv pos \$1 \$2;
+#X msg 286 341 \; foo8_rcv delta \$1 \$2;
+#X msg 270 216 \; foo8_rcv size \$1;
+#X msg 482 171 \; foo8a_rcv receive foo8_rcv;
+#X msg 483 133 \; foo8_rcv receive foo8a_rcv;
+#X msg 483 88 \; foo8_rcv send foo8_snd;
+#X msg 483 50 \; foo8_rcv send foo8a_snd;
+#X msg 483 312 \; foo8_rcv init 0;
+#X msg 485 366 \; foo8_rcv init 1;
+#X msg 490 436 \; foo8_rcv single_change;
+#X msg 490 470 \; foo8_rcv double_change;
+#X text 491 417 changing-behavior;
+#X msg 482 254 \; foo8_rcv number \$1;
+#X text 526 228 number of buttons;
+#X msg 34 459 \; foo8_rcv label radio_0_9;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29;
+#X floatatom 79 46 3 0 29;
+#X floatatom 112 62 3 0 29;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255;
+#X floatatom 370 55 3 0 255;
+#X floatatom 413 56 3 0 255;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 34 0;
+#X connect 7 0 39 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 38 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 37 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 35 0;
+#X connect 32 0 49 0;
+#X connect 52 0 33 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 55 0 53 1;
+#X connect 56 0 52 1;
+#X connect 57 0 52 2;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 65 0 52 0;
+#X connect 65 1 52 1;
+#X connect 65 2 52 2;
+#X connect 66 0 65 1;
+#X connect 67 0 65 2;
+#X connect 68 0 65 3;
+#X restore 469 108 pd edit;
+#X text 251 232 updated for Pd version 0.34;
+#X obj 307 10 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 360 32 hdl 15 1 0 8 eee eee empty 20 8 192 8 -262144 -1 -1 7
+;
+#X connect 7 0 10 0;
+#X connect 9 0 6 0;
+#X connect 9 0 33 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 10 0 30 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 21 0;
+#X connect 15 2 22 0;
+#X connect 15 3 23 0;
+#X connect 15 4 24 0;
+#X connect 15 5 25 0;
+#X connect 15 6 26 0;
+#X connect 15 7 27 0;
+#X connect 15 8 28 0;
+#X connect 15 9 29 0;
+#X connect 16 0 10 0;
+#X connect 17 0 16 0;
+#X connect 18 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 33 0 32 0;
+#X connect 34 0 8 0;
+#X connect 35 0 34 0;
diff --git a/iemhelp/test1.mp3 b/iemhelp/test1.mp3
new file mode 100644
index 0000000..d8d3ee2
--- /dev/null
+++ b/iemhelp/test1.mp3
Binary files differ
diff --git a/iemhelp/test_dollarg.pd b/iemhelp/test_dollarg.pd
new file mode 100644
index 0000000..dced4d5
--- /dev/null
+++ b/iemhelp/test_dollarg.pd
@@ -0,0 +1,42 @@
+#N canvas 75 94 754 539 10;
+#X obj 126 224 dollarg;
+#X obj 126 40 inlet;
+#X obj 32 387 outlet;
+#X obj 415 374 outlet;
+#X obj 251 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 420 352 5 0 0 0 - - -;
+#X obj 25 310 prepend set;
+#X msg 25 339 aa bb cc dd ee ff gg 33 44 55 66 77 88 99;
+#X floatatom 247 181 5 0 0 0 - - -;
+#X text 60 480 (c) musil@iem.kug.ac.at;
+#X text 102 493 IEM KUG;
+#X text 77 505 graz \, austria 2002;
+#X text 11 6 dollarg;
+#X text 93 7 receives the parent initial arguments <list> \, like a
+$n;
+#X text 250 61 into internal buffer and to output;
+#X text 83 406 or output float or symbol of list-atom at index (if
+input:;
+#X text 235 47 at creation-time dollarg copy parent initial arguments
+;
+#X text 302 88 pargs = parent arguments;
+#X text 302 101 n_pa = number of pargs;
+#X text 468 347 output n_pa (if input: n = 0 \, or bang);
+#X text 471 363 or output index of parg (if input: n != 0);
+#X text 475 378 or output 0 (if input: n > n_pa);
+#X text 82 389 output list of pargs (if input: n = 0 \, or bang);
+#X text 485 402 -n_pa <= n <= n_pa);
+#X text 276 149 if (input == bang) -> dollarg output all pargs;
+#X text 302 181 if (input = 0) -> dollarg output all pargs;
+#X text 302 195 if (input > 0) -> dollarg output the n-th parg;
+#X text 526 207 (n_pa + 1 + input)-th parg;
+#X text 304 208 if (input < 0) -> dollarg output the;
+#X connect 0 0 2 0;
+#X connect 0 0 6 0;
+#X connect 0 1 3 0;
+#X connect 0 1 5 0;
+#X connect 1 0 0 0;
+#X connect 4 0 0 0;
+#X connect 6 0 7 0;
+#X connect 8 0 0 0;
diff --git a/iemhelp/toggle.pd b/iemhelp/toggle.pd
new file mode 100644
index 0000000..b094dce
--- /dev/null
+++ b/iemhelp/toggle.pd
@@ -0,0 +1,273 @@
+#N canvas 201 120 395 362 10;
+#X obj 1 1 cnv 8 100 60 empty empty toggle=tgl 20 20 1 18 -262144 -1109
+0;
+#X text 21 296 (c) musil@iem.kug.ac.at;
+#X text 63 309 IEM KUG;
+#X text 38 321 graz \, austria 2001;
+#X text 115 41 click properties to;
+#X text 103 52 modify geometry \, colors \, etc.;
+#X obj 168 113 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 168 179 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 168 133 s foo6_rcv;
+#X obj 168 159 r foo6_snd;
+#X text 153 14 gui-toggle:;
+#X obj 26 270 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 10 117 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 26 39 33;
+#X obj 26 180 tgl 60 1 foo6_snd foo6_rcv big_toggle 63 20 194 13 -228992
+-4033 -34 1 1;
+#X msg 42 79 1;
+#X msg 49 99 0;
+#X floatatom 26 249 4 0 0;
+#X msg 33 59 -0.001;
+#X msg 103 135 set 1;
+#X msg 108 157 set 0;
+#X obj 3 155 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 65 249 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 95 114 set -0.23;
+#X obj 189 93 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 188 179 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 93 93 0 3 4.55;
+#X msg 85 73 0.22 0 -5.44;
+#X msg 189 113 set \$1;
+#X text 96 222 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 95 233 for moving selected gui-objects;
+#N canvas 440 175 699 530 edit 0;
+#X msg 47 151 \; foo6_rcv color \$1 \$2 \$3;
+#X obj 47 126 pack 0 0 0;
+#X obj 47 98 f;
+#X msg 24 50 bang;
+#X floatatom 63 48 3 0 29;
+#X floatatom 79 68 3 0 29;
+#X floatatom 112 84 3 0 29;
+#X text 91 48 background;
+#X text 106 68 front-color;
+#X text 140 85 label-color;
+#X obj 49 223 f;
+#X msg 27 202 bang;
+#X floatatom 65 201 3 63 88;
+#X floatatom 100 223 3 0 37;
+#X obj 49 246 pack 0 0;
+#X text 127 223 y-label;
+#X text 93 201 x-label;
+#X msg 49 271 \; foo6_rcv label_pos \$1 \$2;
+#X floatatom 505 55 3 8 75;
+#X text 532 55 size;
+#X msg 505 76 \; foo6_rcv size \$1;
+#X obj 282 182 f;
+#X msg 260 161 bang;
+#X floatatom 298 160 3 -10 10;
+#X floatatom 333 182 3 -10 10;
+#X obj 282 205 pack 0 0;
+#X msg 282 230 \; foo6_rcv delta \$1 \$2;
+#X obj 296 301 f;
+#X msg 274 280 bang;
+#X floatatom 312 279 3 20 60;
+#X floatatom 347 301 3 150 200;
+#X obj 296 324 pack 0 0;
+#X msg 296 349 \; foo6_rcv pos \$1 \$2;
+#X text 326 160 x-delta;
+#X text 360 182 y-delta;
+#X text 340 279 x-position;
+#X text 374 301 y-position;
+#X obj 305 423 f;
+#X msg 283 402 bang;
+#X floatatom 321 401 3 -10 10;
+#X floatatom 356 423 3 -10 10;
+#X obj 305 446 pack 0 0;
+#X text 383 423 y-label;
+#X text 349 401 x-label;
+#X msg 305 471 \; foo6_rcv delta \$1 \$2;
+#X msg 499 140 \; foo6_rcv send foo6a_snd;
+#X msg 499 178 \; foo6_rcv send foo6_snd;
+#X msg 494 216 \; foo6_rcv receive foo6a_rcv;
+#X msg 494 254 \; foo6a_rcv receive foo6_rcv;
+#X msg 41 448 \; foo6_rcv label blabla;
+#X msg 41 484 \; foo6_rcv label big_toggle;
+#X obj 69 338 f;
+#X msg 47 317 bang;
+#X floatatom 85 316 3 0 2;
+#X floatatom 120 338 3 4 36;
+#X obj 69 361 pack 0 0;
+#X msg 69 386 \; foo6_rcv label_font \$1 \$2;
+#X text 113 316 font;
+#X text 149 338 height;
+#X floatatom 498 307 5 -200 200;
+#X text 542 307 nonzero-value;
+#X msg 498 331 \; foo6_rcv nonzero \$1;
+#X msg 503 412 \; foo6_rcv init 0;
+#X msg 510 479 \; foo6_rcv init 1;
+#X text 524 393 no init;
+#X text 500 461 init value on loadbang;
+#X msg 285 47 back;
+#X msg 285 67 front;
+#X msg 285 87 label;
+#X msg 247 47 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 108 pd RGB_____________;
+#X floatatom 327 77 3 0 255;
+#X floatatom 370 77 3 0 255;
+#X floatatom 413 78 3 0 255;
+#X text 34 22 preset-colors;
+#X text 296 19 RGB-colors;
+#X text 327 59 red;
+#X text 363 58 green;
+#X text 411 58 blue;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 1;
+#X connect 5 0 1 1;
+#X connect 6 0 1 2;
+#X connect 10 0 14 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 1;
+#X connect 13 0 14 1;
+#X connect 14 0 17 0;
+#X connect 18 0 20 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 26 0;
+#X connect 27 0 31 0;
+#X connect 28 0 27 0;
+#X connect 29 0 27 1;
+#X connect 30 0 31 1;
+#X connect 31 0 32 0;
+#X connect 37 0 41 0;
+#X connect 38 0 37 0;
+#X connect 39 0 37 1;
+#X connect 40 0 41 1;
+#X connect 41 0 44 0;
+#X connect 51 0 55 0;
+#X connect 52 0 51 0;
+#X connect 53 0 51 1;
+#X connect 54 0 55 1;
+#X connect 55 0 56 0;
+#X connect 59 0 61 0;
+#X connect 66 0 70 0;
+#X connect 67 0 70 0;
+#X connect 68 0 70 0;
+#X connect 69 0 70 0;
+#X connect 70 0 1 0;
+#X connect 70 1 1 1;
+#X connect 70 2 1 2;
+#X connect 71 0 70 1;
+#X connect 72 0 70 2;
+#X connect 73 0 70 3;
+#X restore 278 136 pd edit;
+#X text 191 320 updated for Pd version 0.34;
+#X obj 127 255 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 222 276 tgl 15 0 bbb bbb empty 20 8 192 8 -262144 -1 -1 1 1
+;
+#X connect 6 0 8 0;
+#X connect 9 0 7 0;
+#X connect 9 0 25 0;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X connect 14 0 17 0;
+#X connect 14 0 22 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
+#X connect 19 0 14 0;
+#X connect 20 0 14 0;
+#X connect 21 0 14 0;
+#X connect 23 0 14 0;
+#X connect 24 0 28 0;
+#X connect 26 0 14 0;
+#X connect 27 0 14 0;
+#X connect 28 0 8 0;
diff --git a/iemhelp/vdial.pd b/iemhelp/vdial.pd
new file mode 100644
index 0000000..31df3e1
--- /dev/null
+++ b/iemhelp/vdial.pd
@@ -0,0 +1,285 @@
+#N canvas 544 154 329 467 10;
+#X obj 1 1 cnv 8 100 60 empty empty vdial=vdl 20 20 1 18 -262144 -1109
+0;
+#X text 82 407 (c) musil@iem.kug.ac.at;
+#X text 124 420 IEM KUG;
+#X text 99 432 graz \, austria 2001;
+#X text 109 130 click properties to;
+#X text 97 141 modify geometry \, colors \, etc.;
+#X obj 60 254 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 21 54 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 59 206 s foo11_rcv;
+#X obj 60 232 r foo11_snd;
+#X obj 21 118 vdl 25 1 1 10 foo11_snd foo11_rcv radio_0_9 32 12 192
+10 -99865 -262144 -260818 0;
+#X msg 21 376 \$1;
+#X floatatom 21 398 4 0 0;
+#X obj 21 420 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 103 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X obj 103 368 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 157 73 set \$1;
+#X floatatom 157 52 4 0 9;
+#X floatatom 44 54 4 0 9;
+#X msg 84 50 7 0 -5.44;
+#X msg 88 72 3 3 4.55;
+#X obj 120 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 137 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 154 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 171 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 188 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 205 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 222 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 239 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 256 389 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 58 372 print;
+#X floatatom 84 280 4 0 0;
+#X msg 84 254 \$1;
+#X msg 59 185 set \$1;
+#X floatatom 59 164 4 0 9;
+#X text 60 334 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 59 345 for moving selected gui-objects;
+#N canvas 222 207 699 530 edit 0;
+#X obj 42 198 f;
+#X msg 20 177 bang;
+#X floatatom 58 176 3 63 156;
+#X floatatom 93 198 3 -20 37;
+#X obj 42 221 pack 0 0;
+#X text 120 198 y-label;
+#X text 86 176 x-label;
+#X floatatom 270 187 3 8 50;
+#X text 297 187 size;
+#X obj 286 293 f;
+#X msg 264 272 bang;
+#X floatatom 302 271 3 -10 10;
+#X floatatom 337 293 3 -10 10;
+#X obj 286 316 pack 0 0;
+#X obj 300 412 f;
+#X msg 278 391 bang;
+#X floatatom 316 390 3 20 60;
+#X floatatom 351 412 3 100 200;
+#X obj 300 435 pack 0 0;
+#X text 330 271 x-delta;
+#X text 364 293 y-delta;
+#X text 344 390 x-position;
+#X text 378 412 y-position;
+#X obj 62 313 f;
+#X msg 40 292 bang;
+#X floatatom 78 291 3 0 2;
+#X floatatom 113 313 3 4 36;
+#X obj 62 336 pack 0 0;
+#X text 106 291 font;
+#X text 142 313 height;
+#X text 504 293 no init;
+#X text 475 348 init value on loadbang;
+#X floatatom 482 228 5 2 20;
+#X msg 47 125 \; foo11_rcv color \$1 \$2 \$3;
+#X msg 42 246 \; foo11_rcv label_pos \$1 \$2;
+#X msg 62 361 \; foo11_rcv label_font \$1 \$2;
+#X msg 34 423 \; foo11_rcv label blabla;
+#X msg 300 460 \; foo11_rcv pos \$1 \$2;
+#X msg 286 341 \; foo11_rcv delta \$1 \$2;
+#X msg 270 216 \; foo11_rcv size \$1;
+#X msg 482 171 \; foo11a_rcv receive foo11_rcv;
+#X msg 483 133 \; foo11_rcv receive foo11a_rcv;
+#X msg 483 88 \; foo11_rcv send foo11_snd;
+#X msg 483 50 \; foo11_rcv send foo11a_snd;
+#X msg 483 312 \; foo11_rcv init 0;
+#X msg 485 366 \; foo11_rcv init 1;
+#X msg 490 436 \; foo11_rcv single_change;
+#X msg 490 470 \; foo11_rcv double_change;
+#X text 491 417 changing-behavior;
+#X msg 482 254 \; foo11_rcv number \$1;
+#X text 526 228 number of buttons;
+#X msg 34 459 \; foo11_rcv label radio_0_9;
+#X obj 47 104 pack 0 0 0;
+#X obj 47 76 f;
+#X msg 24 28 bang;
+#X floatatom 63 26 3 0 29;
+#X floatatom 79 46 3 0 29;
+#X floatatom 112 62 3 0 29;
+#X text 91 26 background;
+#X text 106 46 front-color;
+#X text 140 63 label-color;
+#X msg 285 25 back;
+#X msg 285 45 front;
+#X msg 285 65 label;
+#X msg 247 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 86 pd RGB_____________;
+#X floatatom 327 55 3 0 255;
+#X floatatom 370 55 3 0 255;
+#X floatatom 413 56 3 0 255;
+#X text 34 0 preset-colors;
+#X text 296 -3 RGB-colors;
+#X text 327 37 red;
+#X text 363 36 green;
+#X text 411 36 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 34 0;
+#X connect 7 0 39 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 1;
+#X connect 13 0 38 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 1;
+#X connect 18 0 37 0;
+#X connect 23 0 27 0;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 27 1;
+#X connect 27 0 35 0;
+#X connect 32 0 49 0;
+#X connect 52 0 33 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 55 0 53 1;
+#X connect 56 0 52 1;
+#X connect 57 0 52 2;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 65 0 52 0;
+#X connect 65 1 52 1;
+#X connect 65 2 52 2;
+#X connect 66 0 65 1;
+#X connect 67 0 65 2;
+#X connect 68 0 65 3;
+#X restore 166 220 pd edit;
+#X text 88 306 updated for Pd version 0.34;
+#X obj 257 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X text 117 12 gui-vertical dial:;
+#X obj 231 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X obj 244 46 vdl 8 1 0 8 hhh hhh empty 20 8 192 8 -262144 -1 -1 6
+;
+#X connect 7 0 10 0;
+#X connect 9 0 6 0;
+#X connect 9 0 32 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 10 0 30 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 21 0;
+#X connect 15 2 22 0;
+#X connect 15 3 23 0;
+#X connect 15 4 24 0;
+#X connect 15 5 25 0;
+#X connect 15 6 26 0;
+#X connect 15 7 27 0;
+#X connect 15 8 28 0;
+#X connect 15 9 29 0;
+#X connect 16 0 10 0;
+#X connect 17 0 16 0;
+#X connect 18 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 32 0 31 0;
+#X connect 33 0 8 0;
+#X connect 34 0 33 0;
diff --git a/iemhelp/vslider.pd b/iemhelp/vslider.pd
new file mode 100644
index 0000000..c5b4a1c
--- /dev/null
+++ b/iemhelp/vslider.pd
@@ -0,0 +1,302 @@
+#N canvas 143 181 467 416 10;
+#X obj 1 1 cnv 8 100 60 empty empty vslider=vsl 20 20 1 18 -262144
+-1109 0;
+#X floatatom 38 300 9 0 0;
+#X msg 47 84 set \$1;
+#X floatatom 38 43 7 0 0;
+#X text 25 363 (c) musil@iem.kug.ac.at;
+#X text 67 376 IEM KUG;
+#X text 42 388 graz \, austria 2001;
+#X obj 38 324 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 18 47 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 47 63 7 0 0;
+#X floatatom 116 324 9 0 0;
+#X floatatom 106 42 7 0 0;
+#X floatatom 147 113 7 0 0;
+#X obj 75 249 ftom;
+#X floatatom 75 271 9 0 0;
+#X floatatom 111 244 9 0 0;
+#X floatatom 185 266 9 0 0;
+#X text 181 151 click properties to;
+#X floatatom 75 112 9 0 0;
+#X obj 75 134 mtof;
+#X text 166 12 gui-vertical-slider:;
+#X obj 38 162 vsl 15 101 100 300 0 1 foo3_snd foo3_rcv empty 8 -8 192
+10 -225280 -1109 -1 2500 1;
+#X obj 75 168 vsl 15 73 55 3520 1 1 goo4_snd goo4_rcv log.freq. 11
+-6 192 10 -261681 -260818 -90881 0 1;
+#X obj 185 244 r goo4_snd;
+#X obj 147 133 s goo4_rcv;
+#X text 202 65 (0.01 pixels);
+#X text 57 99 ------------------------------------------;
+#X text 57 286 --------------------------------------------;
+#X text 169 162 modify geometry \, colors \, etc.;
+#X obj 106 84 s foo3_rcv;
+#X obj 116 302 r foo3_snd;
+#X msg 106 63 set \$1;
+#X text 188 44 shift-click & drag;
+#X text 194 54 for fine-tuning;
+#X text 119 192 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 118 203 for moving selected gui-objects;
+#N canvas 239 379 699 530 edit 0;
+#X obj 37 233 f;
+#X msg 15 212 bang;
+#X floatatom 53 211 3 6 88;
+#X floatatom 88 233 3 -20 37;
+#X obj 37 256 pack 0 0;
+#X text 115 233 y-label;
+#X text 81 211 x-label;
+#X obj 287 271 f;
+#X msg 265 250 bang;
+#X floatatom 303 249 3 -10 10;
+#X floatatom 338 271 3 -10 10;
+#X obj 287 294 pack 0 0;
+#X obj 299 381 f;
+#X msg 277 360 bang;
+#X floatatom 315 359 3 20 90;
+#X floatatom 350 381 3 150 200;
+#X obj 299 404 pack 0 0;
+#X text 331 249 x-delta;
+#X text 365 271 y-delta;
+#X text 343 359 x-position;
+#X text 377 381 y-position;
+#X obj 57 348 f;
+#X msg 35 327 bang;
+#X floatatom 73 326 3 0 2;
+#X floatatom 108 348 3 4 36;
+#X obj 57 371 pack 0 0;
+#X text 101 326 font;
+#X text 137 348 height;
+#X floatatom 476 188 1 0 1;
+#X text 523 401 no init;
+#X text 493 453 init value on loadbang;
+#X text 520 188 steady;
+#X obj 486 291 f;
+#X msg 464 270 bang;
+#X floatatom 502 269 4 55 440;
+#X floatatom 537 291 6 440 3520;
+#X obj 486 314 pack 0 0;
+#X text 269 469 linear / logarithmical;
+#X msg 47 158 \; goo4_rcv color \$1 \$2 \$3;
+#X msg 37 281 \; goo4_rcv label_pos \$1 \$2;
+#X msg 57 396 \; goo4_rcv label_font \$1 \$2;
+#X msg 40 442 \; goo4_rcv label blabla;
+#X msg 269 487 \; goo4_rcv lin;
+#X msg 363 486 \; goo4_rcv log;
+#X msg 299 429 \; goo4_rcv pos \$1 \$2;
+#X msg 287 319 \; goo4_rcv delta \$1 \$2;
+#X msg 475 21 \; goo4_rcv send goo4a_snd;
+#X msg 475 59 \; goo4_rcv send goo4_snd;
+#X msg 476 105 \; goo4_rcv receive goo4a_rcv;
+#X msg 476 143 \; goo4a_rcv receive goo4_rcv;
+#X msg 486 339 \; goo4_rcv range \$1 \$2;
+#X msg 502 420 \; goo4_rcv init 0;
+#X msg 503 471 \; goo4_rcv init 1;
+#X text 539 270 bottom-range-bound;
+#X text 586 292 top-range-bound;
+#X obj 286 160 f;
+#X msg 264 139 bang;
+#X floatatom 302 138 3 4 55;
+#X floatatom 337 160 3 15 73;
+#X obj 286 183 pack 0 0;
+#X msg 286 208 \; goo4_rcv size \$1 \$2;
+#X text 330 138 width;
+#X text 368 161 height;
+#X msg 41 478 \; goo4_rcv label log.freq.;
+#X msg 476 212 \; goo4_rcv steady \$1;
+#X obj 47 116 pack 0 0 0;
+#X obj 47 88 f;
+#X msg 24 40 bang;
+#X floatatom 63 38 3 0 29;
+#X floatatom 79 58 3 0 29;
+#X floatatom 112 74 3 0 29;
+#X text 91 38 background;
+#X text 106 58 front-color;
+#X text 140 75 label-color;
+#X msg 285 37 back;
+#X msg 285 57 front;
+#X msg 285 77 label;
+#X msg 247 37 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 196 269 bang;
+#X msg 187 295 0;
+#X msg 214 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 359 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 343 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 97 135 route back front label bang;
+#X obj 343 362 f;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 235 168 t b b b b;
+#X connect 0 0 28 0;
+#X connect 1 0 32 0;
+#X connect 2 0 33 0;
+#X connect 3 0 34 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 14 1;
+#X connect 5 0 15 1;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 1;
+#X connect 8 0 15 1;
+#X connect 9 0 14 1;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 15 1;
+#X connect 13 0 31 1;
+#X connect 14 0 30 1;
+#X connect 15 0 29 1;
+#X connect 21 0 22 0;
+#X connect 21 1 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 23 1 24 1;
+#X connect 24 0 35 0;
+#X connect 27 0 6 0;
+#X connect 28 0 4 0;
+#X connect 28 1 7 0;
+#X connect 28 2 10 0;
+#X connect 28 3 36 0;
+#X connect 29 0 26 0;
+#X connect 30 0 25 0;
+#X connect 31 0 16 0;
+#X connect 32 0 24 0;
+#X connect 33 0 22 0;
+#X connect 34 0 21 0;
+#X connect 35 0 15 0;
+#X connect 35 0 14 0;
+#X connect 35 0 13 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 36 2 29 0;
+#X connect 36 3 35 0;
+#X restore 285 98 pd RGB_____________;
+#X floatatom 327 67 3 0 255;
+#X floatatom 370 67 3 0 255;
+#X floatatom 413 68 3 0 255;
+#X text 34 12 preset-colors;
+#X text 296 9 RGB-colors;
+#X text 327 49 red;
+#X text 363 48 green;
+#X text 411 48 blue;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 39 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 45 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 44 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 40 0;
+#X connect 28 0 64 0;
+#X connect 32 0 36 0;
+#X connect 33 0 32 0;
+#X connect 34 0 32 1;
+#X connect 35 0 36 1;
+#X connect 36 0 50 0;
+#X connect 55 0 59 0;
+#X connect 56 0 55 0;
+#X connect 57 0 55 1;
+#X connect 58 0 59 1;
+#X connect 59 0 60 0;
+#X connect 65 0 38 0;
+#X connect 66 0 65 0;
+#X connect 67 0 66 0;
+#X connect 68 0 66 1;
+#X connect 69 0 65 1;
+#X connect 70 0 65 2;
+#X connect 74 0 78 0;
+#X connect 75 0 78 0;
+#X connect 76 0 78 0;
+#X connect 77 0 78 0;
+#X connect 78 0 65 0;
+#X connect 78 1 65 1;
+#X connect 78 2 65 2;
+#X connect 79 0 78 1;
+#X connect 80 0 78 2;
+#X connect 81 0 78 3;
+#X restore 327 48 pd edit;
+#X text 218 387 updated for Pd version 0.34;
+#X obj 61 345 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 61 322 pd once;
+#X obj 250 87 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 377 110 vsl 15 128 0 127 0 0 ccc ccc empty 20 8 192 8 -262144
+-1 -1 3500 1;
+#X connect 1 0 7 0;
+#X connect 2 0 21 0;
+#X connect 3 0 21 0;
+#X connect 8 0 21 0;
+#X connect 9 0 2 0;
+#X connect 11 0 31 0;
+#X connect 12 0 24 0;
+#X connect 13 0 14 0;
+#X connect 18 0 19 0;
+#X connect 19 0 22 0;
+#X connect 21 0 1 0;
+#X connect 21 0 39 0;
+#X connect 22 0 15 0;
+#X connect 22 0 13 0;
+#X connect 23 0 16 0;
+#X connect 30 0 10 0;
+#X connect 31 0 29 0;
+#X connect 39 0 38 0;
diff --git a/iemhelp/vu.pd b/iemhelp/vu.pd
new file mode 100644
index 0000000..f57862c
--- /dev/null
+++ b/iemhelp/vu.pd
@@ -0,0 +1,248 @@
+#N canvas 167 190 434 418 10;
+#X obj 1 1 cnv 8 100 60 empty empty vu 20 20 1 18 -262144 -1109 0;
+#X text 19 363 (c) musil@iem.kug.ac.at;
+#X text 61 376 IEM KUG;
+#X text 36 388 graz \, austria 2001;
+#X floatatom 177 129 7 -110 20;
+#X text 202 41 click properties to;
+#X text 190 52 modify geometry \, colors \, etc.;
+#X text 49 13 gui-vu-meter-display:;
+#X obj 99 39 tgl 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1 1 1
+;
+#X obj 12 179 vu 16 120 foo7_rcv vu-meter 60 0 64 10 -1 -16410 1 0
+;
+#X floatatom 11 332 6 0 0;
+#X floatatom 22 310 6 0 0;
+#X text 75 309 dB;
+#X text 63 333 dB;
+#X text 71 128 dB;
+#X text 80 148 dB;
+#X text 103 146 peak-level;
+#X text 101 125 rms-level;
+#X text 96 308 peak-level;
+#X text 83 332 rms-level;
+#X text 108 99 <list> of rms \, peak;
+#X obj 177 231 s foo7_rcv;
+#X obj 177 211 pack 0 0;
+#X floatatom 195 150 7 -110 20;
+#X obj 195 191 t b f;
+#X text 236 129 dB;
+#X text 255 151 dB;
+#X text 71 258 UP- \, DOWN- \, LEFT- or RIGHT-key;
+#X text 70 269 for moving selected gui-objects;
+#X floatatom 11 128 7 -110 20;
+#X floatatom 22 149 7 -110 20;
+#N canvas 236 62 699 530 edit 0;
+#X obj 37 222 f;
+#X msg 15 201 bang;
+#X floatatom 53 200 3 50 88;
+#X floatatom 88 222 3 0 37;
+#X obj 37 245 pack 0 0;
+#X text 115 222 y-label;
+#X text 81 200 x-label;
+#X obj 292 313 f;
+#X msg 270 292 bang;
+#X floatatom 308 291 3 -10 10;
+#X floatatom 343 313 3 -10 10;
+#X obj 292 336 pack 0 0;
+#X obj 304 435 f;
+#X msg 282 414 bang;
+#X floatatom 320 413 3 20 140;
+#X floatatom 355 435 3 150 200;
+#X obj 304 458 pack 0 0;
+#X text 336 291 x-delta;
+#X text 370 313 y-delta;
+#X text 348 413 x-position;
+#X text 382 435 y-position;
+#X obj 57 337 f;
+#X msg 35 316 bang;
+#X floatatom 73 315 3 0 2;
+#X floatatom 108 337 3 8 36;
+#X obj 57 360 pack 0 0;
+#X text 101 315 font;
+#X text 137 337 height;
+#X floatatom 471 106 1 0 1;
+#X msg 52 131 \; foo7_rcv color \$1 \$2;
+#X msg 37 270 \; foo7_rcv label_pos \$1 \$2;
+#X msg 57 386 \; foo7_rcv label_font \$1 \$2;
+#X msg 37 427 \; foo7_rcv label blabla;
+#X msg 292 361 \; foo7_rcv delta \$1 \$2;
+#X msg 304 483 \; foo7_rcv pos \$1 \$2;
+#X msg 469 23 \; foo7_rcv receive foo7a_rcv;
+#X msg 469 60 \; foo7a_rcv receive foo7_rcv;
+#X text 492 106 display scale;
+#X msg 471 132 \; foo7_rcv scale \$1;
+#X obj 279 193 f;
+#X msg 257 172 bang;
+#X floatatom 295 171 3 8 50;
+#X floatatom 330 193 3 110 200;
+#X obj 279 216 pack 0 0;
+#X text 323 171 width;
+#X text 357 193 height;
+#X msg 279 241 \; foo7_rcv size \$1 \$2;
+#X msg 37 463 \; foo7_rcv label vu-meter;
+#X obj 52 79 f;
+#X msg 29 31 bang;
+#X floatatom 68 29 3 0 29;
+#X floatatom 103 47 3 0 29;
+#X text 96 29 background;
+#X text 131 48 label-color;
+#X msg 290 25 back;
+#X msg 290 49 label;
+#X msg 252 25 bang;
+#N canvas 15 207 606 448 RGB_____________ 0;
+#X obj 97 56 inlet;
+#X obj 262 53 inlet;
+#X obj 339 55 inlet;
+#X obj 405 56 inlet;
+#X obj 97 270 bang;
+#X msg 77 295 0;
+#X msg 104 295 1;
+#X obj 146 268 bang;
+#X msg 132 295 0;
+#X msg 160 295 1;
+#X obj 265 313 spigot;
+#X obj 312 313 spigot;
+#X obj 249 385 outlet;
+#X text 93 33 select;
+#X text 267 28 red;
+#X text 337 30 green;
+#X text 409 30 blue;
+#X obj 405 102 t b f;
+#X obj 339 160 +;
+#X obj 339 185 t b f;
+#X obj 339 216 +;
+#X obj 296 385 outlet;
+#X obj 28 180 loadbang;
+#X obj 296 361 f;
+#X obj 249 361 f;
+#X obj 262 79 * -65536;
+#X obj 339 80 * -256;
+#X obj 405 80 * -1;
+#X obj 339 247 - 1;
+#X obj 97 135 route back label bang;
+#X obj 235 168 t b b b;
+#X connect 0 0 29 0;
+#X connect 1 0 25 0;
+#X connect 2 0 26 0;
+#X connect 3 0 27 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 1;
+#X connect 6 0 10 1;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 1;
+#X connect 9 0 11 1;
+#X connect 10 0 24 1;
+#X connect 11 0 23 1;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 28 0;
+#X connect 22 0 6 0;
+#X connect 23 0 21 0;
+#X connect 24 0 12 0;
+#X connect 25 0 20 0;
+#X connect 26 0 18 0;
+#X connect 27 0 17 0;
+#X connect 28 0 11 0;
+#X connect 28 0 10 0;
+#X connect 29 0 4 0;
+#X connect 29 1 7 0;
+#X connect 29 2 30 0;
+#X connect 30 0 24 0;
+#X connect 30 1 23 0;
+#X connect 30 2 28 0;
+#X restore 290 86 pd RGB_____________;
+#X floatatom 332 55 3 0 255;
+#X floatatom 375 55 3 0 255;
+#X floatatom 418 56 3 0 255;
+#X text 39 3 preset-colors;
+#X text 301 0 RGB-colors;
+#X text 332 37 red;
+#X text 368 36 green;
+#X text 416 36 blue;
+#X obj 52 104 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 4 1;
+#X connect 4 0 30 0;
+#X connect 7 0 11 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 1;
+#X connect 11 0 33 0;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 16 1;
+#X connect 16 0 34 0;
+#X connect 21 0 25 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 25 1;
+#X connect 25 0 31 0;
+#X connect 28 0 38 0;
+#X connect 39 0 43 0;
+#X connect 40 0 39 0;
+#X connect 41 0 39 1;
+#X connect 42 0 43 1;
+#X connect 43 0 46 0;
+#X connect 48 0 66 0;
+#X connect 49 0 48 0;
+#X connect 50 0 48 1;
+#X connect 51 0 66 1;
+#X connect 54 0 57 0;
+#X connect 55 0 57 0;
+#X connect 56 0 57 0;
+#X connect 57 0 66 0;
+#X connect 57 1 66 1;
+#X connect 58 0 57 1;
+#X connect 59 0 57 2;
+#X connect 60 0 57 3;
+#X connect 66 0 29 0;
+#X restore 313 188 pd edit;
+#N canvas 147 336 290 278 source 0;
+#X obj 40 95 random 102;
+#X obj 40 171 - 101;
+#X obj 40 205 pack 0 0;
+#X obj 40 45 metro 300;
+#X obj 40 69 t b b;
+#X obj 133 95 random 20;
+#X obj 40 117 t f f;
+#X obj 91 147 +;
+#X obj 91 172 - 101;
+#X obj 40 21 inlet;
+#X obj 40 230 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 1 5 0;
+#X connect 5 0 7 1;
+#X connect 6 0 1 0;
+#X connect 6 1 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 2 1;
+#X connect 9 0 3 0;
+#X restore 99 62 pd source;
+#X text 210 386 updated for Pd version 0.34;
+#X obj 186 301 x_7_guis aaa bbb ccc ddd eee fff ggg;
+#X obj 263 94 s fff;
+#X connect 4 0 22 0;
+#X connect 8 0 32 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 22 0 21 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 0;
+#X connect 24 1 22 1;
+#X connect 29 0 9 0;
+#X connect 30 0 9 1;
+#X connect 32 0 9 0;
+#X connect 32 0 35 0;
diff --git a/iemhelp/x_all_guis.pd b/iemhelp/x_all_guis.pd
new file mode 100644
index 0000000..f6d3380
--- /dev/null
+++ b/iemhelp/x_all_guis.pd
@@ -0,0 +1,20 @@
+#N canvas 205 322 280 271 10;
+#X obj 23 31 bng 15 250 50 532480 \$1 \$1 empty 20 8 192 8 -262144
+-1 -1;
+#X obj 23 63 tgl 15 1.06496e+06 \$2 \$2 empty 20 8 192 8 -262144 -1
+-1 0 1;
+#X obj 22 95 vsl 15 128 0 127 0 1.59744e+06 \$3 \$3 empty 20 8 192
+8 -262144 -1 -1 0 1;
+#X obj 65 30 hsl 128 15 0 127 0 2.12992e+06 \$4 \$4 empty 20 8 192
+8 -262144 -1 -1 0 1;
+#X obj 63 63 hdl 15 1 2.6624e+06 8 \$5 \$5 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 62 99 vu 15 120 \$6 empty 35 8 64 8 -66577 -1 1 49152;
+#X obj 115 99 cnv 15 100 60 \$7 \$7 \$7 20 12 917696 14 -233017 -66577
+3.72736e+06;
+#X obj 41 308 inlet;
+#X obj 41 334 outlet;
+#X obj 227 30 vdl 15 1 4.79232e+06 8 \$9 \$9 empty 20 8 192 8 -262144
+-1 -1 0;
+#X obj 116 176 nbx 5 14 -1e+37 1e+37 0 4.25984e+06 \$8 \$8 empty 45
+7 192 10 -262144 -1 -1 0;
diff --git a/lib/iem_mp3.pd_linux b/lib/iem_mp3.pd_linux
new file mode 100755
index 0000000..2315d74
--- /dev/null
+++ b/lib/iem_mp3.pd_linux
Binary files differ
diff --git a/lib/iem_t3_lib.pd_linux b/lib/iem_t3_lib.pd_linux
new file mode 100755
index 0000000..c7e74f1
--- /dev/null
+++ b/lib/iem_t3_lib.pd_linux
Binary files differ
diff --git a/lib/iemlib1.pd_linux b/lib/iemlib1.pd_linux
new file mode 100755
index 0000000..34a4a02
--- /dev/null
+++ b/lib/iemlib1.pd_linux
Binary files differ
diff --git a/lib/iemlib2.pd_linux b/lib/iemlib2.pd_linux
new file mode 100755
index 0000000..a8a13fd
--- /dev/null
+++ b/lib/iemlib2.pd_linux
Binary files differ
diff --git a/src/iem_mp3/iem_mp3.c b/src/iem_mp3/iem_mp3.c
new file mode 100644
index 0000000..5b45515
--- /dev/null
+++ b/src/iem_mp3/iem_mp3.c
@@ -0,0 +1,35 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_mp3 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+
+static t_class *iem_mp3_class;
+
+static void *iem_mp3_new(void)
+{
+ t_object *x = (t_object *)pd_new(iem_mp3_class);
+
+ return (x);
+}
+
+void sigmp3play_setup(void);
+
+/* ------------------------ setup routine ------------------------- */
+
+void iem_mp3_setup(void)
+{
+ iem_mp3_class = class_new(gensym("iem_mp3"), iem_mp3_new, 0,
+ sizeof(t_object), CLASS_NOINLET, 0);
+
+ sigmp3play_setup();
+
+ post("iem_mp3 (R-1.15) library loaded!");
+}
diff --git a/src/iem_mp3/iem_mp3.dsp b/src/iem_mp3/iem_mp3.dsp
new file mode 100644
index 0000000..9fe129d
--- /dev/null
+++ b/src/iem_mp3/iem_mp3.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iem_mp3" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iem_mp3 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "iem_mp3.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "iem_mp3.mak" CFG="iem_mp3 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "iem_mp3 - Win32 Release" (basierend auf "Win32 (x86) External Target")
+!MESSAGE "iem_mp3 - Win32 Debug" (basierend auf "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "iem_mp3 - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_mp3.exe"
+# PROP Bsc_Name "iem_mp3.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "iem_mp3 - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_mp3.exe"
+# PROP Bsc_Name "iem_mp3.bsc"
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "iem_mp3 - Win32 Release"
+# Name "iem_mp3 - Win32 Debug"
+
+!IF "$(CFG)" == "iem_mp3 - Win32 Release"
+
+!ELSEIF "$(CFG)" == "iem_mp3 - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/src/iem_mp3/iem_mp3.dsw b/src/iem_mp3/iem_mp3.dsw
new file mode 100644
index 0000000..f352ffa
--- /dev/null
+++ b/src/iem_mp3/iem_mp3.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iem_mp3"=.\iem_mp3.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/iem_mp3/iemlib.h b/src/iem_mp3/iemlib.h
new file mode 100644
index 0000000..d518565
--- /dev/null
+++ b/src/iem_mp3/iemlib.h
@@ -0,0 +1,98 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifndef __IEMLIB_H__
+#define __IEMLIB_H__
+
+
+#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
+#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
+#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
+#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
+#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
+#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
+#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
+
+
+#ifdef NT
+int sys_noloadbang;
+//t_symbol *iemgui_key_sym=0;
+#include <io.h>
+#else
+extern int sys_noloadbang;
+//extern t_symbol *iemgui_key_sym;
+#include <unistd.h>
+#endif
+
+#define DEFDELVS 64
+#define XTRASAMPS 4
+#define SAMPBLK 4
+
+
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#else
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#else
+#ifdef __FreeBSD__
+#include <machine/endian.h>
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif
+#ifdef __linux__
+
+#include <endian.h>
+
+#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+
+#include <sys/types.h>
+#define int32 int32_t
+
+#else
+#ifdef MACOSX
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 int /* a data type that has 32 bits */
+
+#endif /* MACOSX */
+#endif /* __linux__ */
+#endif /* MSW */
+#endif /* SGI */
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+#endif
diff --git a/src/iem_mp3/makefile b/src/iem_mp3/makefile
new file mode 100644
index 0000000..601a96f
--- /dev/null
+++ b/src/iem_mp3/makefile
@@ -0,0 +1,50 @@
+current: all
+
+.SUFFIXES: .pd_linux
+
+INCLUDE = -I. -I/usr/local/src/pd-0.36-0/src
+
+LDFLAGS = -export-dynamic -shared
+LIB = -ldl -lm -lpthread
+
+#select either the DBG and OPT compiler flags below:
+
+CFLAGS = -DPD -DUNIX -Wall -W -Werror -Wno-unused \
+ -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer \
+ -DDL_OPEN
+
+SYSTEM = $(shell uname -m)
+
+# the sources
+
+SRC = sigmp3play.c \
+ iem_mp3.c
+
+TARGET = iem_mp3.pd_linux
+
+
+OBJ = $(SRC:.c=.o)
+
+#
+# ------------------ targets ------------------------------------
+#
+
+clean:
+ rm ../../lib/$(TARGET)
+ rm *.o
+
+all: $(OBJ)
+
+ @echo :: $(OBJ)
+
+ ld $(LDFLAGS) -o $(TARGET) *.o $(LIB)
+ strip --strip-unneeded $(TARGET)
+ mv $(TARGET) ../../lib
+ rm *.o
+
+$(OBJ) : %.o : %.c
+ touch $*.c
+ cc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+
+
+
diff --git a/src/iem_mp3/makefile_win b/src/iem_mp3/makefile_win
new file mode 100644
index 0000000..d6b7fa1
--- /dev/null
+++ b/src/iem_mp3/makefile_win
@@ -0,0 +1,38 @@
+
+all: ..\..\lib\iem_mp3.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+ $(VIS_CPP_PATH)\lib\libc.lib \
+ $(VIS_CPP_PATH)\lib\oldnames.lib \
+ $(VIS_CPP_PATH)\lib\kernel32.lib \
+ $(VIS_CPP_PATH)\lib\wsock32.lib \
+ $(VIS_CPP_PATH)\lib\winmm.lib \
+ $(PD_INST_PATH)\bin\pthreadVC.lib \
+ $(PD_INST_PATH)\bin\pd.lib
+
+
+SRC = sigmp3play.c \
+ iem_mp3.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+ cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\..\lib\iem_mp3.dll: $(OBJ)
+ link $(PD_WIN_L_FLAGS) /dll /export:iem_mp3_setup \
+ /out:..\..\lib\iem_mp3.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+ del *.obj
diff --git a/src/iem_mp3/sigmp3play.c b/src/iem_mp3/sigmp3play.c
new file mode 100644
index 0000000..1a1204d
--- /dev/null
+++ b/src/iem_mp3/sigmp3play.c
@@ -0,0 +1,3865 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_mp3 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+/*
+ sigmp3play.c - Mpeg Layer III Player for PD
+ Version:0.1
+ 05-18-2000
+ written by Thomas Musil (musil@iem.kug.ac.at), Norbert Math (math@iem.kug.ac.at)
+ IEM Graz
+
+ debugged for windows 013-03-2003
+
+ This MPEG Player is based on the mpglib 0.2 by Michael Hipp which comes with mpg123-0.59r
+
+ please see the README file for copyright notices!
+
+ */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <ctype.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <math.h>
+
+#ifndef NT
+#include <sys/signal.h>
+#include <unistd.h>
+#endif
+
+
+#define IEM_MPEG1
+
+#ifdef _WIN32
+# undef WIN32
+# define WIN32
+
+# define M_PI 3.14159265358979323846
+# define M_SQRT2 1.41421356237309504880
+# define REAL_IS_FLOAT
+# define NEW_DCT9
+
+# define random rand
+# define srandom srand
+
+#endif
+
+#ifdef REAL_IS_FLOAT
+# define real float
+#elif defined(REAL_IS_LONG_DOUBLE)
+# define real long double
+#else
+# define real double
+#endif
+
+#ifdef __GNUC__
+#define INLINE inline
+#else
+#define INLINE
+#endif
+
+/* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */
+#define AUDIOBUFSIZE 16384
+
+#define FALSE 0
+#define TRUE 1
+#define SBLIMIT 32
+#define SSLIMIT 18
+#define MPG_MD_STEREO 0
+#define MPG_MD_JOINT_STEREO 1
+#define MPG_MD_DUAL_CHANNEL 2
+#define MPG_MD_MONO 3
+
+#define MAXFRAMESIZE 1792
+/* Pre Shift fo 16 to 8 bit converter table */
+#define AUSHIFT (3)
+#define BOOL int
+#define MP3_EX -2
+#define MP3_ERR -1
+#define MP3_OK 0
+#define MP3_NEED_MORE 1
+
+#define WRITE_SAMPLE(samples,sum,clip) \
+ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
+ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
+ else { *(samples) = sum; }
+
+
+#define HDRCMPMASK 0xfffffd00
+
+
+#define MY_MP3_MALLOC_IN_SIZE 16384
+#define MY_MP3_MALLOC_IN_SIZE2 8192
+#define MY_MP3_MALLOC_OUT_SIZE 65536
+#define MY_MP3_MALLOC_FN 400
+#define MY_MP3_CHSAMP_PER_FRAME 1152
+
+struct iemmp3_frame
+{
+ int stereo;
+ int jsbound;
+ int single;
+ int lsf;
+ int mpeg25;
+ int header_change;
+ int lay;
+ int error_protection;
+ int bitrate_index;
+ int sampling_frequency;
+ int padding;
+ int extension;
+ int mode;
+ int mode_ext;
+ int copyright;
+ int original;
+ int emphasis;
+ int framesize; /* computed framesize */
+};
+
+struct iemmp3_gr_info_s
+{
+ int scfsi;
+ unsigned part2_3_length;
+ unsigned big_values;
+ unsigned scalefac_compress;
+ unsigned block_type;
+ unsigned mixed_block_flag;
+ unsigned table_select[3];
+ unsigned subblock_gain[3];
+ unsigned maxband[3];
+ unsigned maxbandl;
+ unsigned maxb;
+ unsigned region1start;
+ unsigned region2start;
+ unsigned preflag;
+ unsigned scalefac_scale;
+ unsigned count1table_select;
+ real *full_gain[3];
+ real *pow2gain;
+};
+
+struct iemmp3_III_sideinfo
+{
+ unsigned main_data_begin;
+ unsigned private_bits;
+ struct
+ {
+ struct iemmp3_gr_info_s gr[2];
+ } ch[2];
+};
+
+struct iemmp3_buf
+{
+ unsigned char *pnt;
+ long size;
+ long pos;
+ struct iemmp3_buf *next;
+ struct iemmp3_buf *prev;
+};
+
+struct iemmp3Struct
+{
+ struct iemmp3_buf *head,*tail;
+ int bsize;
+ int framesize;
+ int fsizeold;
+ struct iemmp3_frame fr;
+ unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
+ real hybrid_block[2][2][SBLIMIT*SSLIMIT];
+ int hybrid_blc[2];
+ unsigned long header;
+ int bsnum;
+ real synth_buffs[2][2][0x110];
+ int synth_bo;
+};
+
+struct iemmp3_bandInfoStruct
+{
+ short longIdx[23];
+ short longDiff[22];
+ short shortIdx[14];
+ short shortDiff[13];
+};
+
+struct iemmp3_newHuff
+{
+ unsigned int linbits;
+ short *table;
+};
+
+
+typedef struct _sigmp3play
+{
+ t_object x_obj;
+ float length_sec;
+ int samp_per_frame;
+ int frame_counter;
+ int time1_bang0_handle;
+ float time_factor;
+ int *begframeseek;
+ int curframeseek;
+ int maxframeseek;
+ char *filename;
+ float offset_sec;
+ int file_is_open;
+ int play_state;
+ int mp3_encode_size;
+ int mp3_out_index;
+ int file_size;
+ int file_block_num;
+ int file_remain;
+ int mp_is_init;
+ int mp3_ch;
+ int mp3_sr;
+ int mp3_byterate;
+ int obj_sr;
+ int obj_n;
+ int down;
+ float scale;
+ FILE *fh;
+ char *mp3inbuf;
+ char *mp3outbuf;
+ struct iemmp3Struct mp;
+ t_clock *x_clock;
+ t_outlet *x_bangout;
+ t_outlet *x_floatout;
+ t_canvas *x_canvas;
+} t_sigmp3play;
+
+
+
+static BOOL InitMP3 (struct iemmp3Struct *mp);
+static BOOL InitAgainMP3(struct iemmp3Struct *mp);
+static void ExitMP3 (struct iemmp3Struct *mp);
+static int decodeMP3 (struct iemmp3Struct *mp, char *in, int isize, char *out, int osize, int *done);
+static void make_decode_tables (long scaleval);
+static void init_layer3 (int down_sample_sblimit);
+static int decode_header (struct iemmp3_frame *fr,unsigned long newhead);
+static int do_layer3(struct iemmp3_frame *fr,unsigned char *pcm_sample,int *pcm_point,int *err);
+static int set_pointer(long backstep);
+static int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt);
+static int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt);
+static struct iemmp3_buf *addbuf(struct iemmp3Struct *mp,char *buf,int size);
+static void remove_buf(struct iemmp3Struct *mp);
+static int read_head(struct iemmp3Struct *mp);
+static int read_buf_byte(struct iemmp3Struct *mp,int *err);
+static int III_get_side_info_2(struct iemmp3_III_sideinfo *si,int stereo, int ms_stereo,long sfreq,int single);
+#ifdef IEM_MPEG1
+static int III_get_side_info_1(struct iemmp3_III_sideinfo *si,int stereo,int ms_stereo,long sfreq,int single);
+static int III_get_scale_factors_1(int *scf,struct iemmp3_gr_info_s *gr_info);
+#endif
+static int III_get_scale_factors_2(int *scf,struct iemmp3_gr_info_s *gr_info,int i_stereo);
+static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,struct iemmp3_gr_info_s *gr_info,int sfreq,int part2bits);
+static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,struct iemmp3_gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf);
+static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct iemmp3_gr_info_s *gr_info);
+static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT],int ch,struct iemmp3_gr_info_s *gr_info);
+static void dct64(real *a,real *b,real *c);
+static void dct64_1(real *out0,real *out1,real *b1,real *b2,real *samples);
+static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf);
+static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts);
+static unsigned int getbits(int number_of_bits);
+static unsigned int getbits_fast(int number_of_bits);
+static unsigned int get1bit(void);
+
+static void sigmp3play_tick(t_sigmp3play *x);
+
+
+struct iemmp3Struct *iemmp3_gmp;
+
+int iemmp3_tabsel_123[2][3][16] = {
+ { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
+ {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
+ {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
+
+ { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
+ {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
+ {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
+};
+
+long iemmp3_freqs[9] = { 44100, 48000, 32000,
+22050, 24000, 16000 ,
+11025 , 12000 , 8000 };
+
+int iemmp3_bitindex;
+unsigned char *iemmp3_wordpointer;
+
+static real iemmp3_ispow[8207];
+static real iemmp3_aa_ca[8],iemmp3_aa_cs[8];
+static real iemmp3_COS1[12][6];
+static real iemmp3_win[4][36];
+static real iemmp3_win1[4][36];
+static real iemmp3_gainpow2[256+118+4];
+static real iemmp3_COS9[9];
+static real iemmp3_COS6_1,iemmp3_COS6_2;
+static real iemmp3_tfcos36[9];
+static real iemmp3_tfcos12[3];
+
+int iemmp3_longLimit[9][23];
+int iemmp3_shortLimit[9][14];
+
+struct iemmp3_bandInfoStruct bandInfo[9] = {
+
+ /* MPEG 1.0 */
+ { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
+ {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
+ {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
+ {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
+
+ { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
+ {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
+ {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
+ {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
+
+ { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
+ {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
+ {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
+ {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
+
+ /* MPEG 2.0 */
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
+ {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
+ {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
+
+ { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
+ {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
+ {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
+ {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
+
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
+ {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
+ /* MPEG 2.5 */
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
+ {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18} },
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
+ {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18} },
+ { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
+ {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
+ {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
+ {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
+};
+
+static int iemmp3_mapbuf0[9][152];
+static int iemmp3_mapbuf1[9][156];
+static int iemmp3_mapbuf2[9][44];
+static int *iemmp3_map[9][3];
+static int *iemmp3_mapend[9][3];
+
+static unsigned int iemmp3_n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
+static unsigned int iemmp3_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
+
+static real iemmp3_tan1_1[16],iemmp3_tan2_1[16],iemmp3_tan1_2[16],iemmp3_tan2_2[16];
+static real iemmp3_pow1_1[2][16],iemmp3_pow2_1[2][16],iemmp3_pow1_2[2][16],iemmp3_pow2_2[2][16];
+
+static int iemmp3_pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
+static int iemmp3_pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+real iemmp3_decwin[512+32];
+static real iemmp3_cos64[16],iemmp3_cos32[8],iemmp3_cos16[4],iemmp3_cos8[2],iemmp3_cos4[1];
+real *iemmp3_pnts[] = { iemmp3_cos64,iemmp3_cos32,iemmp3_cos16,iemmp3_cos8,iemmp3_cos4 };
+
+static long iemmp3_intwinbase[] = {
+ 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
+ -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
+ -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
+ -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
+ -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
+ -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
+ -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
+ -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
+ -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
+ 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
+ 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
+ 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
+ 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
+ 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
+ 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
+ -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
+ -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
+ -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
+ -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
+ -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
+ -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
+ 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
+ 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
+ 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
+ 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
+ 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
+
+static short iemmp3_tab0[] =
+{
+ 0
+};
+
+static short iemmp3_tab1[] =
+{
+ -5, -3, -1, 17, 1, 16, 0
+};
+
+static short iemmp3_tab2[] =
+{
+ -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1,
+ 16, 0
+};
+
+static short iemmp3_tab3[] =
+{
+ -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1,
+ 1, 0
+};
+
+static short iemmp3_tab5[] =
+{
+ -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19,
+ 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16,
+ 0
+};
+
+static short iemmp3_tab6[] =
+{
+ -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19,
+ 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16,
+ 0
+};
+
+static short iemmp3_tab7[] =
+{
+ -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83,
+ -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1,
+ 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7,
+ -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18,
+ -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0
+};
+
+static short iemmp3_tab8[] =
+{
+ -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83,
+ -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52,
+ 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4,
+ 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1,
+ 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0
+};
+
+static short iemmp3_tab9[] =
+{
+ -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1,
+ 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67,
+ -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5,
+ -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2,
+ 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0
+};
+
+static short iemmp3_tab10[] =
+{
+ -125,-121,-111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118,
+ 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3,
+ -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1,
+ 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23,
+ -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81,
+ -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7,
+ -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1,
+ 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1,
+ 2, 32, 17, -1, 1, 16, 0
+};
+
+static short iemmp3_tab11[] =
+{
+ -121,-113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117,
+ -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55,
+ -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114,
+ -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96,
+ -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38,
+ 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1,
+ 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50,
+ -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2,
+ 32, 17, -3, -1, 1, 16, 0
+};
+
+static short iemmp3_tab12[] =
+{
+ -115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87,
+ 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115,
+ 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7,
+ 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5,
+ -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37,
+ 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4,
+ 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3,
+ -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1,
+ 2, 32, 0, 17, -1, 1, 16
+};
+
+static short iemmp3_tab13[] =
+{
+ -509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13, -9,
+ -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238,
+ 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1,
+ 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249,
+ 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158,
+ -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1,
+ 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245,
+ 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1,
+ 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15,
+ -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1,
+ 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1,
+ 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1,
+ 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3,
+ -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1,
+ 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5,
+ -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167,
+ 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76,
+ 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137,
+ 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106,
+ -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43,
+ -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178,
+ -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1,
+ 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161,
+ -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88,
+ -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1,
+ 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25,
+ 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100,
+ 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113,
+ -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38,
+ -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6,
+ 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81,
+ -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11,
+ -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3,
+ -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short iemmp3_tab15[] =
+{
+ -495,-445,-355,-263,-183,-115, -77, -43, -27, -13, -7, -3, -1, 255, 239,
+ -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237,
+ 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3,
+ -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219,
+ -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173,
+ -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246,
+ -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9,
+ -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243,
+ 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1,
+ 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1,
+ 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3,
+ -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5,
+ -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124,
+ 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1,
+ 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183,
+ -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76,
+ -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1,
+ 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15,
+ -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106,
+ -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5,
+ -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74,
+ -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1,
+ 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134,
+ 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29,
+ -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7,
+ -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7,
+ -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86,
+ -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100,
+ 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69,
+ -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9,
+ -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1,
+ 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20,
+ 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48,
+ 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16,
+ 0
+};
+
+static short iemmp3_tab16[] =
+{
+ -509,-503,-461,-323,-103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223,
+ 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3,
+ -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5,
+ -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19,
+ -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1,
+ 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5,
+ -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125,
+ 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13,
+ -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3,
+ -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186,
+ -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1,
+ 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169,
+ -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213,
+ -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154,
+ 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1,
+ 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1,
+ 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45,
+ -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107,
+ -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12,
+ -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1,
+ 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74,
+ 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33,
+ -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3,
+ -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147,
+ -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1,
+ 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3,
+ -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1,
+ 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3,
+ -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1,
+ 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9,
+ -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33,
+ -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20,
+ -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1,
+ 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short iemmp3_tab24[] =
+{
+ -451,-117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1,
+ 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9,
+ -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79,
+ 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31,
+ 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1,
+ 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3,
+ -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3,
+ -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255,-235,
+ -143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3,
+ -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9,
+ -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1,
+ 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185,
+ 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199,
+ 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3,
+ -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3,
+ -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196,
+ -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1,
+ 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1,
+ 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10,
+ 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9,
+ 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165,
+ 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135,
+ -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104,
+ -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3,
+ -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3,
+ -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7,
+ -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86,
+ 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15,
+ -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84,
+ -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1,
+ 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5,
+ 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5,
+ -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1,
+ 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16,
+ 0
+};
+
+static short iemmp3_tab_c0[] =
+{
+ -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5,
+ 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8,
+ 0
+};
+
+static short iemmp3_tab_c1[] =
+{
+ -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9,
+ 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1,
+ 0
+};
+
+
+
+static struct iemmp3_newHuff iemmp3_ht[] =
+{
+ { /* 0 */ 0 , iemmp3_tab0 } ,
+ { /* 2 */ 0 , iemmp3_tab1 } ,
+ { /* 3 */ 0 , iemmp3_tab2 } ,
+ { /* 3 */ 0 , iemmp3_tab3 } ,
+ { /* 0 */ 0 , iemmp3_tab0 } ,
+ { /* 4 */ 0 , iemmp3_tab5 } ,
+ { /* 4 */ 0 , iemmp3_tab6 } ,
+ { /* 6 */ 0 , iemmp3_tab7 } ,
+ { /* 6 */ 0 , iemmp3_tab8 } ,
+ { /* 6 */ 0 , iemmp3_tab9 } ,
+ { /* 8 */ 0 , iemmp3_tab10 } ,
+ { /* 8 */ 0 , iemmp3_tab11 } ,
+ { /* 8 */ 0 , iemmp3_tab12 } ,
+ { /* 16 */ 0 , iemmp3_tab13 } ,
+ { /* 0 */ 0 , iemmp3_tab0 } ,
+ { /* 16 */ 0 , iemmp3_tab15 } ,
+
+ { /* 16 */ 1 , iemmp3_tab16 } ,
+ { /* 16 */ 2 , iemmp3_tab16 } ,
+ { /* 16 */ 3 , iemmp3_tab16 } ,
+ { /* 16 */ 4 , iemmp3_tab16 } ,
+ { /* 16 */ 6 , iemmp3_tab16 } ,
+ { /* 16 */ 8 , iemmp3_tab16 } ,
+ { /* 16 */ 10, iemmp3_tab16 } ,
+ { /* 16 */ 13, iemmp3_tab16 } ,
+ { /* 16 */ 4 , iemmp3_tab24 } ,
+ { /* 16 */ 5 , iemmp3_tab24 } ,
+ { /* 16 */ 6 , iemmp3_tab24 } ,
+ { /* 16 */ 7 , iemmp3_tab24 } ,
+ { /* 16 */ 8 , iemmp3_tab24 } ,
+ { /* 16 */ 9 , iemmp3_tab24 } ,
+ { /* 16 */ 11, iemmp3_tab24 } ,
+ { /* 16 */ 13, iemmp3_tab24 }
+};
+
+static struct iemmp3_newHuff iemmp3_htc[] =
+{
+ { /* 1 , 1 , */ 0 , iemmp3_tab_c0 } ,
+ { /* 1 , 1 , */ 0 , iemmp3_tab_c1 }
+};
+
+
+static t_class *sigmp3play_class;
+
+
+
+static BOOL InitMP3(struct iemmp3Struct *mp)
+{
+ memset(mp,0,sizeof(struct iemmp3Struct));
+
+ mp->framesize = 0;
+ mp->fsizeold = -1;
+ mp->bsize = 0;
+ mp->head = mp->tail = NULL;
+ mp->fr.single = -1;
+ mp->bsnum = 0;
+ mp->synth_bo = 1;
+
+ make_decode_tables(32767);
+ init_layer3(SBLIMIT);
+
+ return !0;
+}
+
+static BOOL InitAgainMP3(struct iemmp3Struct *mp)
+{
+ memset(mp,0,sizeof(struct iemmp3Struct));
+
+ mp->framesize = 0;
+ mp->fsizeold = -1;
+ mp->bsize = 0;
+ mp->head = mp->tail = NULL;
+ mp->fr.single = -1;
+ mp->bsnum = 0;
+ mp->synth_bo = 1;
+
+ return !0;
+}
+
+static void ExitMP3(struct iemmp3Struct *mp)
+{
+ struct iemmp3_buf *b,*bn;
+
+ b = mp->tail;
+ while(b)
+ {
+ free(b->pnt);
+ bn = b->next;
+ free(b);
+ b = bn;
+ }
+}
+
+static int decodeMP3(struct iemmp3Struct *mp, char *in, int isize, char *out, int osize, int *done)
+{
+ int len,error=1;
+
+ iemmp3_gmp = mp;
+
+ if(osize < 4608)
+ {
+ post("To less out space\n");
+ return MP3_ERR;
+ }
+
+ if(in)
+ {
+ if(addbuf(mp,in,isize) == NULL)
+ {
+ return MP3_ERR;
+ }
+ }
+
+ /* First decode header */
+ if(mp->framesize == 0)
+ {
+ if(mp->bsize < 4)
+ {
+ return MP3_NEED_MORE;
+ }
+ if(!read_head(mp))
+ return MP3_EX;
+ if(decode_header(&mp->fr,mp->header) == MP3_EX)
+ return MP3_EX;
+ mp->framesize = mp->fr.framesize;
+ }
+
+ if(mp->fr.framesize > mp->bsize)
+ return MP3_NEED_MORE;
+
+ iemmp3_wordpointer = mp->bsspace[mp->bsnum] + 512;
+ mp->bsnum = (mp->bsnum + 1) & 0x1;
+ iemmp3_bitindex = 0;
+
+ len = 0;
+ while(len < mp->framesize)
+ {
+ int nlen;
+ int blen = mp->tail->size - mp->tail->pos;
+ if( (mp->framesize - len) <= blen)
+ {
+ nlen = mp->framesize-len;
+ }
+ else
+ {
+ nlen = blen;
+ }
+ memcpy(iemmp3_wordpointer+len,mp->tail->pnt+mp->tail->pos,nlen);
+ len += nlen;
+ mp->tail->pos += nlen;
+ mp->bsize -= nlen;
+ if(mp->tail->pos == mp->tail->size)
+ {
+ remove_buf(mp);
+ }
+ }
+
+ *done = 0;
+ if(mp->fr.error_protection)
+ getbits(16);
+ do_layer3(&mp->fr,(unsigned char *) out,done,&error);
+ if(!error)
+ return MP3_EX;
+
+ mp->fsizeold = mp->framesize;
+ mp->framesize = 0;
+
+ return MP3_OK;
+}
+
+static void make_decode_tables(long scaleval)
+{
+ int i,j,k,kr,divv;
+ real *table,*costab;
+
+ for(i=0;i<5;i++)
+ {
+ kr=0x10>>i; divv=0x40>>i;
+ costab = iemmp3_pnts[i];
+ for(k=0;k<kr;k++)
+ costab[k] = 1.0 / (2.0 * cos(M_PI * ((double) k * 2.0 + 1.0) / (double) divv));
+ }
+
+ table = iemmp3_decwin;
+ scaleval = -scaleval;
+ for(i=0,j=0;i<256;i++,j++,table+=32)
+ {
+ if(table < iemmp3_decwin+512+16)
+ table[16] = table[0] = (double) iemmp3_intwinbase[j] / 65536.0 * (double) scaleval;
+ if(i % 32 == 31)
+ table -= 1023;
+ if(i % 64 == 63)
+ scaleval = - scaleval;
+ }
+
+ for( /* i=256 */ ;i<512;i++,j--,table+=32)
+ {
+ if(table < iemmp3_decwin+512+16)
+ table[16] = table[0] = (double) iemmp3_intwinbase[j] / 65536.0 * (double) scaleval;
+ if(i % 32 == 31)
+ table -= 1023;
+ if(i % 64 == 63)
+ scaleval = - scaleval;
+ }
+}
+
+
+static void init_layer3(int down_sample_sblimit)
+{
+ int i,j,k,l;
+
+ for(i=-256;i<118+4;i++)
+ iemmp3_gainpow2[i+256] = pow((double)2.0,-0.25 * (double) (i+210) );
+
+ for(i=0;i<8207;i++)
+ iemmp3_ispow[i] = pow((double)i,(double)4.0/3.0);
+
+ for (i=0;i<8;i++)
+ {
+ static double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
+ double sq=sqrt(1.0+Ci[i]*Ci[i]);
+ iemmp3_aa_cs[i] = 1.0/sq;
+ iemmp3_aa_ca[i] = Ci[i]/sq;
+ }
+
+ for(i=0;i<18;i++)
+ {
+ iemmp3_win[0][i] = iemmp3_win[1][i] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+0) +1) ) / cos ( M_PI * (double) (2*(i+0) +19) / 72.0 );
+ iemmp3_win[0][i+18] = iemmp3_win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+18)+1) ) / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
+ }
+ for(i=0;i<6;i++)
+ {
+ iemmp3_win[1][i+18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
+ iemmp3_win[3][i+12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
+ iemmp3_win[1][i+24] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 );
+ iemmp3_win[1][i+30] = iemmp3_win[3][i] = 0.0;
+ iemmp3_win[3][i+6 ] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 );
+ }
+
+ for(i=0;i<9;i++)
+ iemmp3_COS9[i] = cos( M_PI / 18.0 * (double) i);
+
+ for(i=0;i<9;i++)
+ iemmp3_tfcos36[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 );
+ for(i=0;i<3;i++)
+ iemmp3_tfcos12[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 );
+
+ iemmp3_COS6_1 = cos( M_PI / 6.0 * (double) 1);
+ iemmp3_COS6_2 = cos( M_PI / 6.0 * (double) 2);
+
+ for(i=0;i<12;i++)
+ {
+ iemmp3_win[2][i] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 );
+ for(j=0;j<6;j++)
+ iemmp3_COS1[i][j] = cos( M_PI / 24.0 * (double) ((2*i+7)*(2*j+1)) );
+ }
+
+ for(j=0;j<4;j++)
+ {
+ static int len[4] = { 36,36,12,36 };
+ for(i=0;i<len[j];i+=2)
+ iemmp3_win1[j][i] = + iemmp3_win[j][i];
+ for(i=1;i<len[j];i+=2)
+ iemmp3_win1[j][i] = - iemmp3_win[j][i];
+ }
+
+ for(i=0;i<16;i++)
+ {
+ double t = tan( (double) i * M_PI / 12.0 );
+ iemmp3_tan1_1[i] = t / (1.0+t);
+ iemmp3_tan2_1[i] = 1.0 / (1.0 + t);
+ iemmp3_tan1_2[i] = M_SQRT2 * t / (1.0+t);
+ iemmp3_tan2_2[i] = M_SQRT2 / (1.0 + t);
+
+ for(j=0;j<2;j++)
+ {
+ double base = pow(2.0,-0.25*(j+1.0));
+ double p1=1.0,p2=1.0;
+ if(i > 0)
+ {
+ if( i & 1 )
+ p1 = pow(base,(i+1.0)*0.5);
+ else
+ p2 = pow(base,i*0.5);
+ }
+ iemmp3_pow1_1[j][i] = p1;
+ iemmp3_pow2_1[j][i] = p2;
+ iemmp3_pow1_2[j][i] = M_SQRT2 * p1;
+ iemmp3_pow2_2[j][i] = M_SQRT2 * p2;
+ }
+ }
+
+ for(j=0;j<9;j++)
+ {
+ struct iemmp3_bandInfoStruct *bi = &bandInfo[j];
+ int *mp;
+ int cb,lwin;
+ short *bdf;
+
+ mp = iemmp3_map[j][0] = iemmp3_mapbuf0[j];
+ bdf = bi->longDiff;
+ for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++)
+ {
+ *mp++ = (*bdf) >> 1;
+ *mp++ = i;
+ *mp++ = 3;
+ *mp++ = cb;
+ }
+ bdf = bi->shortDiff+3;
+ for(cb=3;cb<13;cb++)
+ {
+ int l = (*bdf++) >> 1;
+ for(lwin=0;lwin<3;lwin++)
+ {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6*l;
+ }
+ iemmp3_mapend[j][0] = mp;
+
+ mp = iemmp3_map[j][1] = iemmp3_mapbuf1[j];
+ bdf = bi->shortDiff+0;
+ for(i=0,cb=0;cb<13;cb++)
+ {
+ int l = (*bdf++) >> 1;
+ for(lwin=0;lwin<3;lwin++)
+ {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6*l;
+ }
+ iemmp3_mapend[j][1] = mp;
+
+ mp = iemmp3_map[j][2] = iemmp3_mapbuf2[j];
+ bdf = bi->longDiff;
+ for(cb = 0; cb < 22 ; cb++)
+ {
+ *mp++ = (*bdf++) >> 1;
+ *mp++ = cb;
+ }
+ iemmp3_mapend[j][2] = mp;
+ }
+
+ for(j=0;j<9;j++)
+ {
+ for(i=0;i<23;i++)
+ {
+ iemmp3_longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
+ if(iemmp3_longLimit[j][i] > (down_sample_sblimit) )
+ iemmp3_longLimit[j][i] = down_sample_sblimit;
+ }
+ for(i=0;i<14;i++)
+ {
+ iemmp3_shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
+ if(iemmp3_shortLimit[j][i] > (down_sample_sblimit) )
+ iemmp3_shortLimit[j][i] = down_sample_sblimit;
+ }
+ }
+
+ for(i=0;i<5;i++)
+ {
+ for(j=0;j<6;j++)
+ {
+ for(k=0;k<6;k++)
+ {
+ int n = k + j * 6 + i * 36;
+ iemmp3_slen2[n] = i|(j<<3)|(k<<6)|(3<<12);
+ }
+ }
+ }
+ for(i=0;i<4;i++)
+ {
+ for(j=0;j<4;j++)
+ {
+ for(k=0;k<4;k++)
+ {
+ int n = k + j * 4 + i * 16;
+ iemmp3_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12);
+ }
+ }
+ }
+ for(i=0;i<4;i++)
+ {
+ for(j=0;j<3;j++)
+ {
+ int n = j + i * 3;
+ iemmp3_slen2[n+244] = i|(j<<3) | (5<<12);
+ iemmp3_n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15);
+ }
+ }
+
+ for(i=0;i<5;i++)
+ {
+ for(j=0;j<5;j++)
+ {
+ for(k=0;k<4;k++)
+ {
+ for(l=0;l<4;l++)
+ {
+ int n = l + k * 4 + j * 16 + i * 80;
+ iemmp3_n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12);
+ }
+ }
+ }
+ }
+ for(i=0;i<5;i++)
+ {
+ for(j=0;j<5;j++)
+ {
+ for(k=0;k<4;k++)
+ {
+ int n = k + j * 4 + i * 20;
+ iemmp3_n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12);
+ }
+ }
+ }
+}
+
+static void remove_buf(struct iemmp3Struct *mp)
+{
+ struct iemmp3_buf *buf = mp->tail;
+
+ mp->tail = buf->next;
+ if(mp->tail)
+ mp->tail->prev = NULL;
+ else
+ {
+ mp->tail = mp->head = NULL;
+ }
+ free(buf->pnt);
+ free(buf);
+}
+
+static struct iemmp3_buf *addbuf(struct iemmp3Struct *mp,char *buf,int size)
+{
+ struct iemmp3_buf *nbuf;
+
+ nbuf = malloc( sizeof(struct iemmp3_buf) );
+ if(!nbuf)
+ {
+ post("Out of memory!\n");
+ return NULL;
+ }
+ nbuf->pnt = malloc(size);
+ if(!nbuf->pnt)
+ {
+ free(nbuf);
+ return NULL;
+ }
+ nbuf->size = size;
+ memcpy(nbuf->pnt,buf,size);
+ nbuf->next = NULL;
+ nbuf->prev = mp->head;
+ nbuf->pos = 0;
+ if(!mp->tail)
+ {
+ mp->tail = nbuf;
+ }
+ else
+ {
+ mp->head->next = nbuf;
+ }
+ mp->head = nbuf;
+ mp->bsize += size;
+ return nbuf;
+}
+
+static int read_buf_byte(struct iemmp3Struct *mp,int *err)
+{
+ unsigned int b;
+ int pos;
+
+ pos = mp->tail->pos;
+ while(pos >= mp->tail->size)
+ {
+ remove_buf(mp);
+ pos = mp->tail->pos;
+ if(!mp->tail)
+ {
+ post("Fatal error!\n");
+ *err = 0;
+ return(0);
+ }
+ }
+ b = mp->tail->pnt[pos];
+ mp->bsize--;
+ mp->tail->pos++;
+ return(b);
+}
+
+static int read_head(struct iemmp3Struct *mp)
+{
+ unsigned long head;
+ int error=1;
+
+ head = read_buf_byte(mp,&error);
+ head <<= 8;
+ head |= read_buf_byte(mp,&error);
+ head <<= 8;
+ head |= read_buf_byte(mp,&error);
+ head <<= 8;
+ head |= read_buf_byte(mp,&error);
+ mp->header = head;
+ return(error);
+}
+
+static int decode_header(struct iemmp3_frame *fr,unsigned long newhead)
+{
+ if( newhead & (1<<20) )
+ {
+ fr->lsf = (newhead & (1<<19)) ? 0x0 : 0x1;
+ fr->mpeg25 = 0;
+ }
+ else
+ {
+ fr->lsf = 1;
+ fr->mpeg25 = 1;
+ }
+ fr->lay = 4-((newhead>>17)&3);
+ if( ((newhead>>10)&0x3) == 0x3)
+ {
+ post("Stream error");
+ return(MP3_EX);
+ }
+ if(fr->mpeg25)
+ {
+ fr->sampling_frequency = 6 + ((newhead>>10)&0x3);
+ }
+ else
+ fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3);
+ fr->error_protection = ((newhead>>16)&0x1)^0x1;
+ if(fr->mpeg25) /* allow Bitrate change for 2.5 ... */
+ fr->bitrate_index = ((newhead>>12)&0xf);
+ fr->bitrate_index = ((newhead>>12)&0xf);
+ fr->padding = ((newhead>>9)&0x1);
+ fr->extension = ((newhead>>8)&0x1);
+ fr->mode = ((newhead>>6)&0x3);
+ fr->mode_ext = ((newhead>>4)&0x3);
+ fr->copyright = ((newhead>>3)&0x1);
+ fr->original = ((newhead>>2)&0x1);
+ fr->emphasis = newhead & 0x3;
+ fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2;
+ if(!fr->bitrate_index)
+ {
+ post("Free format not supported.\n");
+ return(0);
+ }
+ switch(fr->lay)
+ {
+ case 1:
+ post("Layer I not supported!\n");
+ break;
+ case 2:
+ post("Layer II not supported!\n");
+ break;
+ case 3:
+ fr->framesize = (long) iemmp3_tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
+ fr->framesize /= iemmp3_freqs[fr->sampling_frequency]<<(fr->lsf);
+ fr->framesize = fr->framesize + fr->padding - 4;
+ //post("Framesize: %d",fr->framesize);
+ break;
+ default:
+ post("Sorry, unknown layer type.\n");
+ return (0);
+ }
+ return(1);
+}
+
+static unsigned int getbits(int number_of_bits)
+{
+ unsigned long rval;
+
+ if(!number_of_bits)
+ return 0;
+ {
+ rval = iemmp3_wordpointer[0];
+ rval <<= 8;
+ rval |= iemmp3_wordpointer[1];
+ rval <<= 8;
+ rval |= iemmp3_wordpointer[2];
+ rval <<= iemmp3_bitindex;
+ rval &= 0xffffff;
+ iemmp3_bitindex += number_of_bits;
+ rval >>= (24-number_of_bits);
+ iemmp3_wordpointer += (iemmp3_bitindex>>3);
+ iemmp3_bitindex &= 7;
+ }
+ return rval;
+}
+
+static unsigned int getbits_fast(int number_of_bits)
+{
+ unsigned long rval;
+
+ {
+ rval = iemmp3_wordpointer[0];
+ rval <<= 8;
+ rval |= iemmp3_wordpointer[1];
+ rval <<= iemmp3_bitindex;
+ rval &= 0xffff;
+ iemmp3_bitindex += number_of_bits;
+ rval >>= (16-number_of_bits);
+ iemmp3_wordpointer += (iemmp3_bitindex>>3);
+ iemmp3_bitindex &= 7;
+ }
+ return rval;
+}
+
+static unsigned int get1bit(void)
+{
+ unsigned char rval;
+ rval = *iemmp3_wordpointer << iemmp3_bitindex;
+
+ iemmp3_bitindex++;
+ iemmp3_wordpointer += (iemmp3_bitindex>>3);
+ iemmp3_bitindex &= 7;
+
+ return rval>>7;
+}
+
+static int do_layer3(struct iemmp3_frame *fr,unsigned char *pcm_sample,int *pcm_point,int *err)
+{
+ int gr, ch, ss,clip=0;
+ int scalefacs[39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
+ struct iemmp3_III_sideinfo sideinfo;
+ int stereo = fr->stereo;
+ int single = fr->single;
+ int ms_stereo,i_stereo;
+ int sfreq = fr->sampling_frequency;
+ int stereo1,granules;
+
+ if(stereo == 1)
+ { /* stream is mono */
+ stereo1 = 1;
+ single = 0;
+ }
+ else if(single >= 0) /* stream is stereo, but force to mono */
+ stereo1 = 1;
+ else
+ stereo1 = 2;
+
+ if(fr->mode == MPG_MD_JOINT_STEREO)
+ {
+ ms_stereo = fr->mode_ext & 0x2;
+ i_stereo = fr->mode_ext & 0x1;
+ }
+ else
+ ms_stereo = i_stereo = 0;
+
+ if(fr->lsf)
+ {
+ granules = 1;
+ if(!III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single))
+ {
+ *err = 0;
+ return 0;
+ }
+ }
+ else
+ {
+ granules = 2;
+#ifdef IEM_MPEG1
+ if(!III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single))
+ {
+ *err = 0;
+ return 0;
+ }
+#else
+ post("Not supported\n");
+#endif
+ }
+
+ if(set_pointer(sideinfo.main_data_begin) == MP3_ERR)
+ return 0;
+
+ for (gr=0;gr<granules;gr++)
+ {
+ static real hybridIn[2][SBLIMIT][SSLIMIT];
+ static real hybridOut[2][SSLIMIT][SBLIMIT];
+
+ {
+ struct iemmp3_gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
+ long part2bits;
+ if(fr->lsf)
+ part2bits = III_get_scale_factors_2(scalefacs,gr_info,0);
+ else
+ {
+#ifdef IEM_MPEG1
+ part2bits = III_get_scale_factors_1(scalefacs,gr_info);
+#else
+ post("Not supported\n");
+#endif
+ }
+ if(III_dequantize_sample(hybridIn[0], scalefacs,gr_info,sfreq,part2bits))
+ return clip;
+ }
+ if(stereo == 2)
+ {
+ struct iemmp3_gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
+ long part2bits;
+ if(fr->lsf)
+ part2bits = III_get_scale_factors_2(scalefacs,gr_info,i_stereo);
+ else
+ {
+#ifdef IEM_MPEG1
+ part2bits = III_get_scale_factors_1(scalefacs,gr_info);
+#else
+ post("Not supported\n");
+#endif
+ }
+
+ if(III_dequantize_sample(hybridIn[1],scalefacs,gr_info,sfreq,part2bits))
+ return clip;
+
+ if(ms_stereo)
+ {
+ int i;
+ for(i=0;i<SBLIMIT*SSLIMIT;i++)
+ {
+ real tmp0,tmp1;
+ tmp0 = ((real *) hybridIn[0])[i];
+ tmp1 = ((real *) hybridIn[1])[i];
+ ((real *) hybridIn[1])[i] = tmp0 - tmp1;
+ ((real *) hybridIn[0])[i] = tmp0 + tmp1;
+ }
+ }
+
+ if(i_stereo)
+ III_i_stereo(hybridIn,scalefacs,gr_info,sfreq,ms_stereo,fr->lsf);
+
+ if(ms_stereo || i_stereo || (single == 3) )
+ {
+ if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
+ sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
+ else
+ gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
+ }
+
+ switch(single)
+ {
+ case 3:
+ {
+ register unsigned int i;
+ register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
+ for(i=0;i<SSLIMIT*gr_info->maxb;i++,in0++)
+ *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */
+ }
+ break;
+ case 1:
+ {
+ register unsigned int i;
+ register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
+ for(i=0;i<SSLIMIT*gr_info->maxb;i++)
+ *in0++ = *in1++;
+ }
+ break;
+ }
+ }
+
+ for(ch=0;ch<stereo1;ch++)
+ {
+ struct iemmp3_gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
+ III_antialias(hybridIn[ch],gr_info);
+ III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info);
+ }
+
+ for(ss=0;ss<SSLIMIT;ss++)
+ {
+ if(single >= 0)
+ {
+ clip += synth_1to1_mono(hybridOut[0][ss],pcm_sample,pcm_point);
+ }
+ else
+ {
+ int p1 = *pcm_point;
+ clip += synth_1to1(hybridOut[0][ss],0,pcm_sample,&p1);
+ clip += synth_1to1(hybridOut[1][ss],1,pcm_sample,pcm_point);
+ }
+ }
+ }
+
+ return clip;
+}
+
+static int III_get_side_info_2(struct iemmp3_III_sideinfo *si,int stereo,
+ int ms_stereo,long sfreq,int single)
+{
+ int ch;
+ int powdiff = (single == 3) ? 4 : 0;
+
+ si->main_data_begin = getbits(8);
+ if (stereo == 1)
+ si->private_bits = get1bit();
+ else
+ si->private_bits = getbits_fast(2);
+
+ for (ch=0; ch<stereo; ch++)
+ {
+ register struct iemmp3_gr_info_s *gr_info = &(si->ch[ch].gr[0]);
+
+ gr_info->part2_3_length = getbits(12);
+ gr_info->big_values = getbits_fast(9);
+ if(gr_info->big_values > 288)
+ {
+ post("big_values too large!\n");
+ gr_info->big_values = 288;
+ }
+ gr_info->pow2gain = iemmp3_gainpow2+256 - getbits_fast(8) + powdiff;
+ if(ms_stereo)
+ gr_info->pow2gain += 2;
+ gr_info->scalefac_compress = getbits(9);
+ /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */
+ if(get1bit())
+ {
+ int i;
+ gr_info->block_type = getbits_fast(2);
+ gr_info->mixed_block_flag = get1bit();
+ gr_info->table_select[0] = getbits_fast(5);
+ gr_info->table_select[1] = getbits_fast(5);
+ /*
+ * table_select[2] not needed, because there is no region2,
+ * but to satisfy some verifications tools we set it either.
+ */
+ gr_info->table_select[2] = 0;
+ for(i=0;i<3;i++)
+ gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
+ if(gr_info->block_type == 0)
+ {
+ post("Blocktype == 0 and window-switching == 1 not allowed.\n");
+ return(0);
+ }
+ /* region_count/start parameters are implicit in this case. */
+ /* check this again! */
+ if(gr_info->block_type == 2)
+ gr_info->region1start = 36>>1;
+ else if(sfreq == 8)
+ /* check this for 2.5 and sfreq=8 */
+ gr_info->region1start = 108>>1;
+ else
+ gr_info->region1start = 54>>1;
+ gr_info->region2start = 576>>1;
+ }
+ else
+ {
+ int i,r0c,r1c;
+ for (i=0; i<3; i++)
+ gr_info->table_select[i] = getbits_fast(5);
+ r0c = getbits_fast(4);
+ r1c = getbits_fast(3);
+ gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
+ gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
+ gr_info->block_type = 0;
+ gr_info->mixed_block_flag = 0;
+ }
+ gr_info->scalefac_scale = get1bit();
+ gr_info->count1table_select = get1bit();
+ }
+ return(1);
+}
+
+
+#ifdef IEM_MPEG1
+static int III_get_side_info_1(struct iemmp3_III_sideinfo *si,int stereo,
+ int ms_stereo,long sfreq,int single)
+{
+ int ch, gr;
+ int powdiff = (single == 3) ? 4 : 0;
+
+ si->main_data_begin = getbits(9);
+ if (stereo == 1)
+ si->private_bits = getbits_fast(5);
+ else
+ si->private_bits = getbits_fast(3);
+
+ for (ch=0; ch<stereo; ch++)
+ {
+ si->ch[ch].gr[0].scfsi = -1;
+ si->ch[ch].gr[1].scfsi = getbits_fast(4);
+ }
+
+ for (gr=0; gr<2; gr++)
+ {
+ for (ch=0; ch<stereo; ch++)
+ {
+ register struct iemmp3_gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
+
+ gr_info->part2_3_length = getbits(12);
+ gr_info->big_values = getbits_fast(9);
+ if(gr_info->big_values > 288)
+ {
+ post("big_values too large!\n");
+ gr_info->big_values = 288;
+ }
+ gr_info->pow2gain = iemmp3_gainpow2+256 - getbits_fast(8) + powdiff;
+ if(ms_stereo)
+ gr_info->pow2gain += 2;
+ gr_info->scalefac_compress = getbits_fast(4);
+ /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */
+ if(get1bit())
+ {
+ int i;
+
+ gr_info->block_type = getbits_fast(2);
+ gr_info->mixed_block_flag = get1bit();
+ gr_info->table_select[0] = getbits_fast(5);
+ gr_info->table_select[1] = getbits_fast(5);
+ /*
+ * table_select[2] not needed, because there is no region2,
+ * but to satisfy some verifications tools we set it either.
+ */
+ gr_info->table_select[2] = 0;
+ for(i=0;i<3;i++)
+ gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
+
+ if(gr_info->block_type == 0)
+ {
+ post("Blocktype == 0 and window-switching == 1 not allowed.\n");
+ return(0);
+ }
+ /* region_count/start parameters are implicit in this case. */
+ gr_info->region1start = 36>>1;
+ gr_info->region2start = 576>>1;
+ }
+ else
+ {
+ int i,r0c,r1c;
+ for (i=0; i<3; i++)
+ gr_info->table_select[i] = getbits_fast(5);
+ r0c = getbits_fast(4);
+ r1c = getbits_fast(3);
+ gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
+ gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
+ gr_info->block_type = 0;
+ gr_info->mixed_block_flag = 0;
+ }
+ gr_info->preflag = get1bit();
+ gr_info->scalefac_scale = get1bit();
+ gr_info->count1table_select = get1bit();
+ }
+ }
+ return(1);
+}
+#endif
+
+static int set_pointer(long backstep)
+{
+ unsigned char *bsbufold;
+ if(iemmp3_gmp->fsizeold < 0 && backstep > 0)
+ {
+ post("Can't step back %ld!\n",backstep);
+ return MP3_ERR;
+ }
+ bsbufold = iemmp3_gmp->bsspace[iemmp3_gmp->bsnum] + 512;
+ iemmp3_wordpointer -= backstep;
+ if (backstep)
+ memcpy(iemmp3_wordpointer,bsbufold+iemmp3_gmp->fsizeold-backstep,backstep);
+ iemmp3_bitindex = 0;
+ return MP3_OK;
+}
+
+#ifdef IEM_MPEG1
+static int III_get_scale_factors_1(int *scf,struct iemmp3_gr_info_s *gr_info)
+{
+ static unsigned char slen[2][16] = {
+ {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
+ {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
+ };
+ int numbits;
+ int num0 = slen[0][gr_info->scalefac_compress];
+ int num1 = slen[1][gr_info->scalefac_compress];
+
+ if (gr_info->block_type == 2)
+ {
+ int i=18;
+
+ numbits = (num0 + num1) * 18;
+ if (gr_info->mixed_block_flag)
+ {
+ for (i=8;i;i--)
+ *scf++ = getbits_fast(num0);
+ i = 9;
+ numbits -= num0; /* num0 * 17 + num1 * 18 */
+ }
+
+ for (;i;i--)
+ *scf++ = getbits_fast(num0);
+ for (i = 18; i; i--)
+ *scf++ = getbits_fast(num1);
+ *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */
+ }
+ else
+ {
+ int i;
+ int scfsi = gr_info->scfsi;
+
+ if(scfsi < 0)
+ { /* scfsi < 0 => granule == 0 */
+ for(i=11;i;i--)
+ *scf++ = getbits_fast(num0);
+ for(i=10;i;i--)
+ *scf++ = getbits_fast(num1);
+ numbits = (num0 + num1) * 10 + num0;
+ }
+ else
+ {
+ numbits = 0;
+ if(!(scfsi & 0x8))
+ {
+ for (i=6;i;i--)
+ *scf++ = getbits_fast(num0);
+ numbits += num0 * 6;
+ }
+ else
+ {
+ *scf++ = 0; *scf++ = 0; *scf++ = 0; /* set to ZERO necessary? */
+ *scf++ = 0; *scf++ = 0; *scf++ = 0;
+ }
+
+ if(!(scfsi & 0x4))
+ {
+ for (i=5;i;i--)
+ *scf++ = getbits_fast(num0);
+ numbits += num0 * 5;
+ }
+ else
+ {
+ *scf++ = 0; *scf++ = 0; *scf++ = 0; /* set to ZERO necessary? */
+ *scf++ = 0; *scf++ = 0;
+ }
+
+ if(!(scfsi & 0x2))
+ {
+ for(i=5;i;i--)
+ *scf++ = getbits_fast(num1);
+ numbits += num1 * 5;
+ }
+ else
+ {
+ *scf++ = 0; *scf++ = 0; *scf++ = 0; /* set to ZERO necessary? */
+ *scf++ = 0; *scf++ = 0;
+ }
+
+ if(!(scfsi & 0x1))
+ {
+ for (i=5;i;i--)
+ *scf++ = getbits_fast(num1);
+ numbits += num1 * 5;
+ }
+ else
+ {
+ *scf++ = 0; *scf++ = 0; *scf++ = 0; /* set to ZERO necessary? */
+ *scf++ = 0; *scf++ = 0;
+ }
+ }
+
+ *scf++ = 0; /* no l[21] in original sources */
+ }
+ return numbits;
+}
+#endif
+
+static int III_get_scale_factors_2(int *scf,struct iemmp3_gr_info_s *gr_info,int i_stereo)
+{
+ unsigned char *pnt;
+ int i,j;
+ unsigned int slen;
+ int n = 0;
+ int numbits = 0;
+
+ static unsigned char stab[3][6][4] = {
+ { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
+ { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } ,
+ { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
+ {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
+ { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
+ { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } };
+
+ if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */
+ slen = iemmp3_slen2[gr_info->scalefac_compress>>1];
+ else
+ slen = iemmp3_n_slen2[gr_info->scalefac_compress];
+
+ gr_info->preflag = (slen>>15) & 0x1;
+
+ n = 0;
+ if( gr_info->block_type == 2 )
+ {
+ n++;
+ if(gr_info->mixed_block_flag)
+ n++;
+ }
+
+ pnt = stab[n][(slen>>12)&0x7];
+
+ for(i=0;i<4;i++)
+ {
+ int num = slen & 0x7;
+ slen >>= 3;
+ if(num)
+ {
+ for(j=0;j<(int)(pnt[i]);j++)
+ *scf++ = getbits_fast(num);
+ numbits += pnt[i] * num;
+ }
+ else
+ {
+ for(j=0;j<(int)(pnt[i]);j++)
+ *scf++ = 0;
+ }
+ }
+
+ n = (n << 1) + 1;
+ for(i=0;i<n;i++)
+ *scf++ = 0;
+
+ return numbits;
+}
+
+
+
+static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
+ struct iemmp3_gr_info_s *gr_info,int sfreq,int part2bits)
+{
+ int shift = 1 + gr_info->scalefac_scale;
+ real *xrpnt = (real *) xr;
+ int l[3],l3;
+ int part2remain = gr_info->part2_3_length - part2bits;
+ int *me;
+
+ {
+ int bv = gr_info->big_values;
+ int region1 = gr_info->region1start;
+ int region2 = gr_info->region2start;
+
+ l3 = ((576>>1)-bv)>>1;
+ /*
+ * we may lose the 'odd' bit here !!
+ * check this later again
+ */
+ if(bv <= region1)
+ {
+ l[0] = bv; l[1] = 0; l[2] = 0;
+ }
+ else
+ {
+ l[0] = region1;
+ if(bv <= region2)
+ {
+ l[1] = bv - l[0]; l[2] = 0;
+ }
+ else
+ {
+ l[1] = region2 - l[0]; l[2] = bv - region2;
+ }
+ }
+ }
+
+ if(gr_info->block_type == 2)
+ {
+ /*
+ * decoding with short or mixed mode BandIndex table
+ */
+ int i,max[4];
+ int step=0,lwin=0,cb=0;
+ register real v = 0.0;
+ register int *m,mc;
+
+ if(gr_info->mixed_block_flag)
+ {
+ max[3] = -1;
+ max[0] = max[1] = max[2] = 2;
+ m = iemmp3_map[sfreq][0];
+ me = iemmp3_mapend[sfreq][0];
+ }
+ else
+ {
+ max[0] = max[1] = max[2] = max[3] = -1;
+ /* max[3] not really needed in this case */
+ m = iemmp3_map[sfreq][1];
+ me = iemmp3_mapend[sfreq][1];
+ }
+
+ mc = 0;
+ for(i=0;i<2;i++)
+ {
+ int lp = l[i];
+ struct iemmp3_newHuff *h = iemmp3_ht+gr_info->table_select[i];
+ for(;lp;lp--,mc--)
+ {
+ register int x,y;
+ if( (!mc) )
+ {
+ mc = *m++;
+ xrpnt = ((real *) xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if(lwin == 3)
+ {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else
+ {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+ {
+ register short *val = h->table;
+ while((y=*val++)<0)
+ {
+ if (get1bit())
+ val -= y;
+ part2remain--;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+ if(x == 15)
+ {
+ max[lwin] = cb;
+ part2remain -= h->linbits+1;
+ x += getbits(h->linbits);
+ if(get1bit())
+ *xrpnt = -iemmp3_ispow[x] * v;
+ else
+ *xrpnt = iemmp3_ispow[x] * v;
+ }
+ else if(x)
+ {
+ max[lwin] = cb;
+ if(get1bit())
+ *xrpnt = -iemmp3_ispow[x] * v;
+ else
+ *xrpnt = iemmp3_ispow[x] * v;
+ part2remain--;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ if(y == 15)
+ {
+ max[lwin] = cb;
+ part2remain -= h->linbits+1;
+ y += getbits(h->linbits);
+ if(get1bit())
+ *xrpnt = -iemmp3_ispow[y] * v;
+ else
+ *xrpnt = iemmp3_ispow[y] * v;
+ }
+ else if(y)
+ {
+ max[lwin] = cb;
+ if(get1bit())
+ *xrpnt = -iemmp3_ispow[y] * v;
+ else
+ *xrpnt = iemmp3_ispow[y] * v;
+ part2remain--;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+ for(;l3 && (part2remain > 0);l3--)
+ {
+ struct iemmp3_newHuff *h = iemmp3_htc+gr_info->count1table_select;
+ register short *val = h->table,a;
+
+ while((a=*val++)<0)
+ {
+ part2remain--;
+ if(part2remain < 0)
+ {
+ part2remain++;
+ a = 0;
+ break;
+ }
+ if (get1bit())
+ val -= a;
+ }
+
+ for(i=0;i<4;i++)
+ {
+ if(!(i & 1))
+ {
+ if(!mc)
+ {
+ mc = *m++;
+ xrpnt = ((real *) xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if(lwin == 3)
+ {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else
+ {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+ mc--;
+ }
+ if( (a & (0x8>>i)) )
+ {
+ max[lwin] = cb;
+ part2remain--;
+ if(part2remain < 0)
+ {
+ part2remain++;
+ break;
+ }
+ if(get1bit())
+ *xrpnt = -v;
+ else
+ *xrpnt = v;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+
+ while( m < me )
+ {
+ if(!mc)
+ {
+ mc = *m++;
+ xrpnt = ((real *) xr) + *m++;
+ if( (*m++) == 3)
+ step = 1;
+ else
+ step = 3;
+ m++; /* cb */
+ }
+ mc--;
+ *xrpnt = 0.0;
+ xrpnt += step;
+ *xrpnt = 0.0;
+ xrpnt += step;
+ /* we could add a little opt. here:
+ * if we finished a band for window 3 or a long band
+ * further bands could copied in a simple loop without a
+ * special 'map' decoding
+ */
+ }
+
+ gr_info->maxband[0] = max[0]+1;
+ gr_info->maxband[1] = max[1]+1;
+ gr_info->maxband[2] = max[2]+1;
+ gr_info->maxbandl = max[3]+1;
+
+ {
+ int rmax = max[0] > max[1] ? max[0] : max[1];
+ rmax = (rmax > max[2] ? rmax : max[2]) + 1;
+ gr_info->maxb = rmax ? iemmp3_shortLimit[sfreq][rmax] : iemmp3_longLimit[sfreq][max[3]+1];
+ }
+
+ }
+ else
+ {
+ /*
+ * decoding with 'long' BandIndex table (block_type != 2)
+ */
+ int *pretab = gr_info->preflag ? iemmp3_pretab1 : iemmp3_pretab2;
+ int i,max = -1;
+ int cb = 0;
+ register int *m = iemmp3_map[sfreq][2];
+ register real v = 0.0;
+ register int mc = 0;
+
+ /*
+ * long hash table values
+ */
+ for(i=0;i<3;i++)
+ {
+ int lp = l[i];
+ struct iemmp3_newHuff *h = iemmp3_ht+gr_info->table_select[i];
+
+ for(;lp;lp--,mc--)
+ {
+ int x,y;
+
+ if(!mc)
+ {
+ mc = *m++;
+ v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
+ cb = *m++;
+ }
+ {
+ register short *val = h->table;
+ while((y=*val++)<0)
+ {
+ if (get1bit())
+ val -= y;
+ part2remain--;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+ if (x == 15)
+ {
+ max = cb;
+ part2remain -= h->linbits+1;
+ x += getbits(h->linbits);
+ if(get1bit())
+ *xrpnt++ = -iemmp3_ispow[x] * v;
+ else
+ *xrpnt++ = iemmp3_ispow[x] * v;
+ }
+ else if(x)
+ {
+ max = cb;
+ if(get1bit())
+ *xrpnt++ = -iemmp3_ispow[x] * v;
+ else
+ *xrpnt++ = iemmp3_ispow[x] * v;
+ part2remain--;
+ }
+ else
+ *xrpnt++ = 0.0;
+
+ if (y == 15)
+ {
+ max = cb;
+ part2remain -= h->linbits+1;
+ y += getbits(h->linbits);
+ if(get1bit())
+ *xrpnt++ = -iemmp3_ispow[y] * v;
+ else
+ *xrpnt++ = iemmp3_ispow[y] * v;
+ }
+ else if(y)
+ {
+ max = cb;
+ if(get1bit())
+ *xrpnt++ = -iemmp3_ispow[y] * v;
+ else
+ *xrpnt++ = iemmp3_ispow[y] * v;
+ part2remain--;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+ /*
+ * short (count1table) values
+ */
+ for(;l3 && (part2remain > 0);l3--)
+ {
+ struct iemmp3_newHuff *h = iemmp3_htc+gr_info->count1table_select;
+ register short *val = h->table,a;
+
+ while((a=*val++)<0)
+ {
+ part2remain--;
+ if(part2remain < 0)
+ {
+ part2remain++;
+ a = 0;
+ break;
+ }
+ if (get1bit())
+ val -= a;
+ }
+
+ for(i=0;i<4;i++)
+ {
+ if(!(i & 1))
+ {
+ if(!mc)
+ {
+ mc = *m++;
+ cb = *m++;
+ v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
+ }
+ mc--;
+ }
+ if ( (a & (0x8>>i)) )
+ {
+ max = cb;
+ part2remain--;
+ if(part2remain < 0)
+ {
+ part2remain++;
+ break;
+ }
+ if(get1bit())
+ *xrpnt++ = -v;
+ else
+ *xrpnt++ = v;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+ /*
+ * zero part
+ */
+ for(i=(&xr[SBLIMIT][0]-xrpnt)>>1;i;i--)
+ {
+ *xrpnt++ = 0.0;
+ *xrpnt++ = 0.0;
+ }
+
+ gr_info->maxbandl = max+1;
+ gr_info->maxb = iemmp3_longLimit[sfreq][gr_info->maxbandl];
+ }
+
+ while( part2remain > 16 )
+ {
+ getbits(16); /* Dismiss stuffing Bits */
+ part2remain -= 16;
+ }
+ if(part2remain > 0)
+ getbits(part2remain);
+ else if(part2remain < 0)
+ {
+ post("mpg123: Can't rewind stream by %d bits!\n",-part2remain);
+ return 1; /* -> error */
+ }
+ return 0;
+}
+
+static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
+ struct iemmp3_gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
+{
+ real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
+ struct iemmp3_bandInfoStruct *bi = &bandInfo[sfreq];
+ real *tab1,*tab2;
+
+ if(lsf)
+ {
+ int p = gr_info->scalefac_compress & 0x1;
+ if(ms_stereo)
+ {
+ tab1 = iemmp3_pow1_2[p]; tab2 = iemmp3_pow2_2[p];
+ }
+ else
+ {
+ tab1 = iemmp3_pow1_1[p]; tab2 = iemmp3_pow2_1[p];
+ }
+ }
+ else
+ {
+ if(ms_stereo)
+ {
+ tab1 = iemmp3_tan1_2; tab2 = iemmp3_tan2_2;
+ }
+ else
+ {
+ tab1 = iemmp3_tan1_1; tab2 = iemmp3_tan2_1;
+ }
+ }
+
+ if (gr_info->block_type == 2)
+ {
+ int lwin,do_l = 0;
+ if( gr_info->mixed_block_flag )
+ do_l = 1;
+
+ for (lwin=0;lwin<3;lwin++) /* process each window */
+ {
+ /* get first band with zero values */
+ int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */
+ if(sfb > 3)
+ do_l = 0;
+
+ for(;sfb<12;sfb++)
+ {
+ is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
+ if(is_p != 7) {
+ real t1,t2;
+ sb = bi->shortDiff[sfb];
+ idx = bi->shortIdx[sfb] + lwin;
+ t1 = tab1[is_p]; t2 = tab2[is_p];
+ for (; sb > 0; sb--,idx+=3)
+ {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ }
+
+#if 1
+ /* in the original: copy 10 to 11 , here: copy 11 to 12
+ maybe still wrong??? (copy 12 to 13?) */
+ is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
+ sb = bi->shortDiff[12];
+ idx = bi->shortIdx[12] + lwin;
+#else
+ is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
+ sb = bi->shortDiff[11];
+ idx = bi->shortIdx[11] + lwin;
+#endif
+ if(is_p != 7)
+ {
+ real t1,t2;
+ t1 = tab1[is_p]; t2 = tab2[is_p];
+ for ( ; sb > 0; sb--,idx+=3 )
+ {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ } /* end for(lwin; .. ; . ) */
+
+ if (do_l)
+ {
+ /* also check l-part, if ALL bands in the three windows are 'empty'
+ * and mode = mixed_mode
+ */
+ int sfb = gr_info->maxbandl;
+ int idx = bi->longIdx[sfb];
+
+ for ( ; sfb<8; sfb++ )
+ {
+ int sb = bi->longDiff[sfb];
+ int is_p = scalefac[sfb]; /* scale: 0-15 */
+ if(is_p != 7) {
+ real t1,t2;
+ t1 = tab1[is_p]; t2 = tab2[is_p];
+ for ( ; sb > 0; sb--,idx++)
+ {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+ }
+ }
+ else /* ((gr_info->block_type != 2)) */
+ {
+ int sfb = gr_info->maxbandl;
+ int is_p,idx = bi->longIdx[sfb];
+ for ( ; sfb<21; sfb++)
+ {
+ int sb = bi->longDiff[sfb];
+ is_p = scalefac[sfb]; /* scale: 0-15 */
+ if(is_p != 7) {
+ real t1,t2;
+ t1 = tab1[is_p]; t2 = tab2[is_p];
+ for ( ; sb > 0; sb--,idx++)
+ {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+
+ is_p = scalefac[20]; /* copy l-band 20 to l-band 21 */
+ if(is_p != 7)
+ {
+ int sb;
+ real t1 = tab1[is_p],t2 = tab2[is_p];
+
+ for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ )
+ {
+ real v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ } /* ... */
+}
+
+
+static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct iemmp3_gr_info_s *gr_info)
+{
+ int sblim;
+
+ if(gr_info->block_type == 2)
+ {
+ if(!gr_info->mixed_block_flag)
+ return;
+ sblim = 1;
+ }
+ else {
+ sblim = gr_info->maxb-1;
+ }
+
+ /* 31 alias-reduction operations between each pair of sub-bands */
+ /* with 8 butterflies between each pair */
+
+ {
+ int sb;
+ real *xr1=(real *) xr[1];
+
+ for(sb=sblim;sb;sb--,xr1+=10)
+ {
+ int ss;
+ real *cs=iemmp3_aa_cs,*ca=iemmp3_aa_ca;
+ real *xr2 = xr1;
+
+ for(ss=7;ss>=0;ss--)
+ { /* upper and lower butterfly inputs */
+ register real bu = *--xr2,bd = *xr1;
+ *xr2 = (bu * (*cs) ) - (bd * (*ca) );
+ *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
+ }
+ }
+ }
+}
+
+static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT],
+ int ch,struct iemmp3_gr_info_s *gr_info)
+{
+ real *tspnt = (real *) tsOut;
+ real (*block)[2][SBLIMIT*SSLIMIT] = iemmp3_gmp->hybrid_block;
+ int *blc = iemmp3_gmp->hybrid_blc;
+ real *rawout1,*rawout2;
+ int bt;
+ unsigned int sb = 0;
+
+ {
+ int b = blc[ch];
+ rawout1=block[b][ch];
+ b=-b+1;
+ rawout2=block[b][ch];
+ blc[ch] = b;
+ }
+
+
+ if(gr_info->mixed_block_flag) {
+ sb = 2;
+ dct36(fsIn[0],rawout1,rawout2,iemmp3_win[0],tspnt);
+ dct36(fsIn[1],rawout1+18,rawout2+18,iemmp3_win1[0],tspnt+1);
+ rawout1 += 36; rawout2 += 36; tspnt += 2;
+ }
+
+ bt = gr_info->block_type;
+ if(bt == 2) {
+ for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
+ dct12(fsIn[sb],rawout1,rawout2,iemmp3_win[2],tspnt);
+ dct12(fsIn[sb+1],rawout1+18,rawout2+18,iemmp3_win1[2],tspnt+1);
+ }
+ }
+ else {
+ for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
+ dct36(fsIn[sb],rawout1,rawout2,iemmp3_win[bt],tspnt);
+ dct36(fsIn[sb+1],rawout1+18,rawout2+18,iemmp3_win1[bt],tspnt+1);
+ }
+ }
+
+ for(;sb<SBLIMIT;sb++,tspnt++) {
+ int i;
+ for(i=0;i<SSLIMIT;i++) {
+ tspnt[i*SBLIMIT] = *rawout1++;
+ *rawout2++ = 0.0;
+ }
+ }
+}
+
+static void dct64_1(real *out0,real *out1,real *b1,real *b2,real *samples)
+{
+
+ {
+ register real *costab = iemmp3_pnts[0];
+
+ b1[0x00] = samples[0x00] + samples[0x1F];
+ b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0];
+
+ b1[0x01] = samples[0x01] + samples[0x1E];
+ b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1];
+
+ b1[0x02] = samples[0x02] + samples[0x1D];
+ b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2];
+
+ b1[0x03] = samples[0x03] + samples[0x1C];
+ b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3];
+
+ b1[0x04] = samples[0x04] + samples[0x1B];
+ b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4];
+
+ b1[0x05] = samples[0x05] + samples[0x1A];
+ b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5];
+
+ b1[0x06] = samples[0x06] + samples[0x19];
+ b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6];
+
+ b1[0x07] = samples[0x07] + samples[0x18];
+ b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7];
+
+ b1[0x08] = samples[0x08] + samples[0x17];
+ b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8];
+
+ b1[0x09] = samples[0x09] + samples[0x16];
+ b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9];
+
+ b1[0x0A] = samples[0x0A] + samples[0x15];
+ b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA];
+
+ b1[0x0B] = samples[0x0B] + samples[0x14];
+ b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB];
+
+ b1[0x0C] = samples[0x0C] + samples[0x13];
+ b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC];
+
+ b1[0x0D] = samples[0x0D] + samples[0x12];
+ b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD];
+
+ b1[0x0E] = samples[0x0E] + samples[0x11];
+ b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE];
+
+ b1[0x0F] = samples[0x0F] + samples[0x10];
+ b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF];
+ }
+
+
+ {
+ register real *costab = iemmp3_pnts[1];
+
+ b2[0x00] = b1[0x00] + b1[0x0F];
+ b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0];
+ b2[0x01] = b1[0x01] + b1[0x0E];
+ b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1];
+ b2[0x02] = b1[0x02] + b1[0x0D];
+ b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2];
+ b2[0x03] = b1[0x03] + b1[0x0C];
+ b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3];
+ b2[0x04] = b1[0x04] + b1[0x0B];
+ b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4];
+ b2[0x05] = b1[0x05] + b1[0x0A];
+ b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5];
+ b2[0x06] = b1[0x06] + b1[0x09];
+ b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6];
+ b2[0x07] = b1[0x07] + b1[0x08];
+ b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7];
+
+ b2[0x10] = b1[0x10] + b1[0x1F];
+ b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0];
+ b2[0x11] = b1[0x11] + b1[0x1E];
+ b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1];
+ b2[0x12] = b1[0x12] + b1[0x1D];
+ b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2];
+ b2[0x13] = b1[0x13] + b1[0x1C];
+ b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3];
+ b2[0x14] = b1[0x14] + b1[0x1B];
+ b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4];
+ b2[0x15] = b1[0x15] + b1[0x1A];
+ b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5];
+ b2[0x16] = b1[0x16] + b1[0x19];
+ b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6];
+ b2[0x17] = b1[0x17] + b1[0x18];
+ b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7];
+ }
+
+ {
+ register real *costab = iemmp3_pnts[2];
+
+ b1[0x00] = b2[0x00] + b2[0x07];
+ b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0];
+ b1[0x01] = b2[0x01] + b2[0x06];
+ b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1];
+ b1[0x02] = b2[0x02] + b2[0x05];
+ b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2];
+ b1[0x03] = b2[0x03] + b2[0x04];
+ b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3];
+
+ b1[0x08] = b2[0x08] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0];
+ b1[0x09] = b2[0x09] + b2[0x0E];
+ b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1];
+ b1[0x0A] = b2[0x0A] + b2[0x0D];
+ b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2];
+ b1[0x0B] = b2[0x0B] + b2[0x0C];
+ b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3];
+
+ b1[0x10] = b2[0x10] + b2[0x17];
+ b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0];
+ b1[0x11] = b2[0x11] + b2[0x16];
+ b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1];
+ b1[0x12] = b2[0x12] + b2[0x15];
+ b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2];
+ b1[0x13] = b2[0x13] + b2[0x14];
+ b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3];
+
+ b1[0x18] = b2[0x18] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0];
+ b1[0x19] = b2[0x19] + b2[0x1E];
+ b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1];
+ b1[0x1A] = b2[0x1A] + b2[0x1D];
+ b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2];
+ b1[0x1B] = b2[0x1B] + b2[0x1C];
+ b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3];
+ }
+
+ {
+ register real const cos0 = iemmp3_pnts[3][0];
+ register real const cos1 = iemmp3_pnts[3][1];
+
+ b2[0x00] = b1[0x00] + b1[0x03];
+ b2[0x03] = (b1[0x00] - b1[0x03]) * cos0;
+ b2[0x01] = b1[0x01] + b1[0x02];
+ b2[0x02] = (b1[0x01] - b1[0x02]) * cos1;
+
+ b2[0x04] = b1[0x04] + b1[0x07];
+ b2[0x07] = (b1[0x07] - b1[0x04]) * cos0;
+ b2[0x05] = b1[0x05] + b1[0x06];
+ b2[0x06] = (b1[0x06] - b1[0x05]) * cos1;
+
+ b2[0x08] = b1[0x08] + b1[0x0B];
+ b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0;
+ b2[0x09] = b1[0x09] + b1[0x0A];
+ b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1;
+
+ b2[0x0C] = b1[0x0C] + b1[0x0F];
+ b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0;
+ b2[0x0D] = b1[0x0D] + b1[0x0E];
+ b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1;
+
+ b2[0x10] = b1[0x10] + b1[0x13];
+ b2[0x13] = (b1[0x10] - b1[0x13]) * cos0;
+ b2[0x11] = b1[0x11] + b1[0x12];
+ b2[0x12] = (b1[0x11] - b1[0x12]) * cos1;
+
+ b2[0x14] = b1[0x14] + b1[0x17];
+ b2[0x17] = (b1[0x17] - b1[0x14]) * cos0;
+ b2[0x15] = b1[0x15] + b1[0x16];
+ b2[0x16] = (b1[0x16] - b1[0x15]) * cos1;
+
+ b2[0x18] = b1[0x18] + b1[0x1B];
+ b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0;
+ b2[0x19] = b1[0x19] + b1[0x1A];
+ b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1;
+
+ b2[0x1C] = b1[0x1C] + b1[0x1F];
+ b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0;
+ b2[0x1D] = b1[0x1D] + b1[0x1E];
+ b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1;
+ }
+
+ {
+ register real const cos0 = iemmp3_pnts[4][0];
+
+ b1[0x00] = b2[0x00] + b2[0x01];
+ b1[0x01] = (b2[0x00] - b2[0x01]) * cos0;
+ b1[0x02] = b2[0x02] + b2[0x03];
+ b1[0x03] = (b2[0x03] - b2[0x02]) * cos0;
+ b1[0x02] += b1[0x03];
+
+ b1[0x04] = b2[0x04] + b2[0x05];
+ b1[0x05] = (b2[0x04] - b2[0x05]) * cos0;
+ b1[0x06] = b2[0x06] + b2[0x07];
+ b1[0x07] = (b2[0x07] - b2[0x06]) * cos0;
+ b1[0x06] += b1[0x07];
+ b1[0x04] += b1[0x06];
+ b1[0x06] += b1[0x05];
+ b1[0x05] += b1[0x07];
+
+ b1[0x08] = b2[0x08] + b2[0x09];
+ b1[0x09] = (b2[0x08] - b2[0x09]) * cos0;
+ b1[0x0A] = b2[0x0A] + b2[0x0B];
+ b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0;
+ b1[0x0A] += b1[0x0B];
+
+ b1[0x0C] = b2[0x0C] + b2[0x0D];
+ b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0;
+ b1[0x0E] = b2[0x0E] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0;
+ b1[0x0E] += b1[0x0F];
+ b1[0x0C] += b1[0x0E];
+ b1[0x0E] += b1[0x0D];
+ b1[0x0D] += b1[0x0F];
+
+ b1[0x10] = b2[0x10] + b2[0x11];
+ b1[0x11] = (b2[0x10] - b2[0x11]) * cos0;
+ b1[0x12] = b2[0x12] + b2[0x13];
+ b1[0x13] = (b2[0x13] - b2[0x12]) * cos0;
+ b1[0x12] += b1[0x13];
+
+ b1[0x14] = b2[0x14] + b2[0x15];
+ b1[0x15] = (b2[0x14] - b2[0x15]) * cos0;
+ b1[0x16] = b2[0x16] + b2[0x17];
+ b1[0x17] = (b2[0x17] - b2[0x16]) * cos0;
+ b1[0x16] += b1[0x17];
+ b1[0x14] += b1[0x16];
+ b1[0x16] += b1[0x15];
+ b1[0x15] += b1[0x17];
+
+ b1[0x18] = b2[0x18] + b2[0x19];
+ b1[0x19] = (b2[0x18] - b2[0x19]) * cos0;
+ b1[0x1A] = b2[0x1A] + b2[0x1B];
+ b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0;
+ b1[0x1A] += b1[0x1B];
+
+ b1[0x1C] = b2[0x1C] + b2[0x1D];
+ b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0;
+ b1[0x1E] = b2[0x1E] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0;
+ b1[0x1E] += b1[0x1F];
+ b1[0x1C] += b1[0x1E];
+ b1[0x1E] += b1[0x1D];
+ b1[0x1D] += b1[0x1F];
+ }
+
+ out0[0x10*16] = b1[0x00];
+ out0[0x10*12] = b1[0x04];
+ out0[0x10* 8] = b1[0x02];
+ out0[0x10* 4] = b1[0x06];
+ out0[0x10* 0] = b1[0x01];
+ out1[0x10* 0] = b1[0x01];
+ out1[0x10* 4] = b1[0x05];
+ out1[0x10* 8] = b1[0x03];
+ out1[0x10*12] = b1[0x07];
+
+ b1[0x08] += b1[0x0C];
+ out0[0x10*14] = b1[0x08];
+ b1[0x0C] += b1[0x0a];
+ out0[0x10*10] = b1[0x0C];
+ b1[0x0A] += b1[0x0E];
+ out0[0x10* 6] = b1[0x0A];
+ b1[0x0E] += b1[0x09];
+ out0[0x10* 2] = b1[0x0E];
+ b1[0x09] += b1[0x0D];
+ out1[0x10* 2] = b1[0x09];
+ b1[0x0D] += b1[0x0B];
+ out1[0x10* 6] = b1[0x0D];
+ b1[0x0B] += b1[0x0F];
+ out1[0x10*10] = b1[0x0B];
+ out1[0x10*14] = b1[0x0F];
+
+ b1[0x18] += b1[0x1C];
+ out0[0x10*15] = b1[0x10] + b1[0x18];
+ out0[0x10*13] = b1[0x18] + b1[0x14];
+ b1[0x1C] += b1[0x1a];
+ out0[0x10*11] = b1[0x14] + b1[0x1C];
+ out0[0x10* 9] = b1[0x1C] + b1[0x12];
+ b1[0x1A] += b1[0x1E];
+ out0[0x10* 7] = b1[0x12] + b1[0x1A];
+ out0[0x10* 5] = b1[0x1A] + b1[0x16];
+ b1[0x1E] += b1[0x19];
+ out0[0x10* 3] = b1[0x16] + b1[0x1E];
+ out0[0x10* 1] = b1[0x1E] + b1[0x11];
+ b1[0x19] += b1[0x1D];
+ out1[0x10* 1] = b1[0x11] + b1[0x19];
+ out1[0x10* 3] = b1[0x19] + b1[0x15];
+ b1[0x1D] += b1[0x1B];
+ out1[0x10* 5] = b1[0x15] + b1[0x1D];
+ out1[0x10* 7] = b1[0x1D] + b1[0x13];
+ b1[0x1B] += b1[0x1F];
+ out1[0x10* 9] = b1[0x13] + b1[0x1B];
+ out1[0x10*11] = b1[0x1B] + b1[0x17];
+ out1[0x10*13] = b1[0x17] + b1[0x1F];
+ out1[0x10*15] = b1[0x1F];
+}
+
+/*
+ * the call via dct64 is a trick to force GCC to use
+ * (new) registers for the b1,b2 pointer to the bufs[xx] field
+ */
+void dct64(real *a,real *b,real *c)
+{
+ real bufs[0x40];
+ dct64_1(a,b,bufs,bufs+0x20,c);
+}
+
+static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
+{
+ {
+ register real *in = inbuf;
+
+ in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
+ in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
+ in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
+ in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
+ in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
+ in[2] +=in[1]; in[1] +=in[0];
+
+ in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
+ in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
+
+
+ {
+
+#define MACRO0(v) { \
+ real tmp; \
+ out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; \
+ out2[8-(v)] = tmp * w[26-(v)]; } \
+ sum0 -= sum1; \
+ ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \
+ ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)];
+#define MACRO1(v) { \
+ real sum0,sum1; \
+ sum0 = tmp1a + tmp2a; \
+ sum1 = (tmp1b + tmp2b) * iemmp3_tfcos36[(v)]; \
+ MACRO0(v); }
+#define MACRO2(v) { \
+ real sum0,sum1; \
+ sum0 = tmp2a - tmp1a; \
+ sum1 = (tmp2b - tmp1b) * iemmp3_tfcos36[(v)]; \
+ MACRO0(v); }
+
+ register const real *c = iemmp3_COS9;
+ register real *out2 = o2;
+ register real *w = wintab;
+ register real *out1 = o1;
+ register real *ts = tsbuf;
+
+ real ta33,ta66,tb33,tb66;
+
+ ta33 = in[2*3+0] * c[3];
+ ta66 = in[2*6+0] * c[6];
+ tb33 = in[2*3+1] * c[3];
+ tb66 = in[2*6+1] * c[6];
+
+ {
+ real tmp1a,tmp2a,tmp1b,tmp2b;
+ tmp1a = in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7];
+ tmp1b = in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7];
+ tmp2a = in[2*0+0] + in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8];
+ tmp2b = in[2*0+1] + in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8];
+
+ MACRO1(0);
+ MACRO2(8);
+ }
+
+ {
+ real tmp1a,tmp2a,tmp1b,tmp2b;
+ tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3];
+ tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3];
+ tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0];
+ tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1];
+
+ MACRO1(1);
+ MACRO2(7);
+ }
+
+ {
+ real tmp1a,tmp2a,tmp1b,tmp2b;
+ tmp1a = in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1];
+ tmp1b = in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1];
+ tmp2a = in[2*0+0] - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4];
+ tmp2b = in[2*0+1] - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4];
+
+ MACRO1(2);
+ MACRO2(6);
+ }
+
+ {
+ real tmp1a,tmp2a,tmp1b,tmp2b;
+ tmp1a = in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5];
+ tmp1b = in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5];
+ tmp2a = in[2*0+0] - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2];
+ tmp2b = in[2*0+1] - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2];
+
+ MACRO1(3);
+ MACRO2(5);
+ }
+
+ {
+ real sum0,sum1;
+ sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
+ sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * iemmp3_tfcos36[4];
+ MACRO0(4);
+ }
+ }
+
+ }
+}
+
+/*
+ * new DCT12
+ */
+static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts)
+{
+#define DCT12_PART1 \
+ in5 = in[5*3]; \
+ in5 += (in4 = in[4*3]); \
+ in4 += (in3 = in[3*3]); \
+ in3 += (in2 = in[2*3]); \
+ in2 += (in1 = in[1*3]); \
+ in1 += (in0 = in[0*3]); \
+ \
+ in5 += in3; in3 += in1; \
+ \
+ in2 *= iemmp3_COS6_1; \
+ in3 *= iemmp3_COS6_1; \
+
+#define DCT12_PART2 \
+ in0 += in4 * iemmp3_COS6_2; \
+ \
+ in4 = in0 + in2; \
+ in0 -= in2; \
+ \
+ in1 += in5 * iemmp3_COS6_2; \
+ \
+ in5 = (in1 + in3) * iemmp3_tfcos12[0]; \
+ in1 = (in1 - in3) * iemmp3_tfcos12[2]; \
+ \
+ in3 = in4 + in5; \
+ in4 -= in5; \
+ \
+ in2 = in0 + in1; \
+ in0 -= in1;
+
+
+ {
+ real in0,in1,in2,in3,in4,in5;
+ register real *out1 = rawout1;
+ ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
+ ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
+
+ DCT12_PART1
+
+ {
+ real tmp0,tmp1 = (in0 - in4);
+ {
+ real tmp2 = (in1 - in5) * iemmp3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
+ ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
+ ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
+ ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
+ ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
+ ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
+ ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
+
+ ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0];
+ ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
+ ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2];
+ ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
+ }
+
+ in++;
+
+ {
+ real in0,in1,in2,in3,in4,in5;
+ register real *out2 = rawout2;
+
+ DCT12_PART1
+
+ {
+ real tmp0,tmp1 = (in0 - in4);
+ {
+ real tmp2 = (in1 - in5) * iemmp3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[5-1] = tmp0 * wi[11-1];
+ out2[0+1] = tmp0 * wi[6+1];
+ ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
+ ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ out2[5-0] = in2 * wi[11-0];
+ out2[0+0] = in2 * wi[6+0];
+ out2[0+2] = in3 * wi[6+2];
+ out2[5-2] = in3 * wi[11-2];
+
+ ts[(12+0)*SBLIMIT] += in0 * wi[0];
+ ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
+ ts[(12+2)*SBLIMIT] += in4 * wi[2];
+ ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
+ }
+
+ in++;
+
+ {
+ real in0,in1,in2,in3,in4,in5;
+ register real *out2 = rawout2;
+ out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
+
+ DCT12_PART1
+
+ {
+ real tmp0,tmp1 = (in0 - in4);
+ {
+ real tmp2 = (in1 - in5) * iemmp3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[11-1] = tmp0 * wi[11-1];
+ out2[6 +1] = tmp0 * wi[6+1];
+ out2[0+1] += tmp1 * wi[1];
+ out2[5-1] += tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ out2[11-0] = in2 * wi[11-0];
+ out2[6 +0] = in2 * wi[6+0];
+ out2[6 +2] = in3 * wi[6+2];
+ out2[11-2] = in3 * wi[11-2];
+
+ out2[0+0] += in0 * wi[0];
+ out2[5-0] += in0 * wi[5-0];
+ out2[0+2] += in4 * wi[2];
+ out2[5-2] += in4 * wi[5-2];
+ }
+}
+
+static int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt)
+{
+ short samples_tmp[64];
+ short *tmp1 = samples_tmp;
+ int i,ret;
+ int pnt1 = 0;
+
+ ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
+ samples += *pnt;
+
+ for(i=0;i<32;i++)
+ {
+ *( (short *) samples) = *tmp1;
+ samples += 2;
+ tmp1 += 2;
+ }
+ *pnt += 64;
+
+ return ret;
+}
+
+
+static int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt)
+{
+ static const int step = 2;
+ int bo;
+ short *samples = (short *) (out + *pnt);
+
+ real *b0,(*buf)[0x110];
+ int clip = 0;
+ int bo1;
+
+ bo = iemmp3_gmp->synth_bo;
+
+ if(!channel)
+ {
+ bo--;
+ bo &= 0xf;
+ buf = iemmp3_gmp->synth_buffs[0];
+ }
+ else
+ {
+ samples++;
+ buf = iemmp3_gmp->synth_buffs[1];
+ }
+
+ if(bo & 0x1)
+ {
+ b0 = buf[0];
+ bo1 = bo;
+ dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
+ }
+ else
+ {
+ b0 = buf[1];
+ bo1 = bo+1;
+ dct64(buf[0]+bo,buf[1]+bo+1,bandPtr);
+ }
+
+ iemmp3_gmp->synth_bo = bo;
+
+ {
+ register int j;
+ real *window = iemmp3_decwin + 16 - bo1;
+
+ for (j=16;j;j--,b0+=0x10,window+=0x20,samples+=step)
+ {
+ real sum;
+ sum = window[0x0] * b0[0x0];
+ sum -= window[0x1] * b0[0x1];
+ sum += window[0x2] * b0[0x2];
+ sum -= window[0x3] * b0[0x3];
+ sum += window[0x4] * b0[0x4];
+ sum -= window[0x5] * b0[0x5];
+ sum += window[0x6] * b0[0x6];
+ sum -= window[0x7] * b0[0x7];
+ sum += window[0x8] * b0[0x8];
+ sum -= window[0x9] * b0[0x9];
+ sum += window[0xA] * b0[0xA];
+ sum -= window[0xB] * b0[0xB];
+ sum += window[0xC] * b0[0xC];
+ sum -= window[0xD] * b0[0xD];
+ sum += window[0xE] * b0[0xE];
+ sum -= window[0xF] * b0[0xF];
+ WRITE_SAMPLE(samples,sum,clip);
+ }
+
+ {
+ real sum;
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples,sum,clip);
+ b0-=0x10,window-=0x20,samples+=step;
+ }
+ window += bo1<<1;
+
+ for (j=15;j;j--,b0-=0x10,window-=0x20,samples+=step)
+ {
+ real sum;
+ sum = -window[-0x1] * b0[0x0];
+ sum -= window[-0x2] * b0[0x1];
+ sum -= window[-0x3] * b0[0x2];
+ sum -= window[-0x4] * b0[0x3];
+ sum -= window[-0x5] * b0[0x4];
+ sum -= window[-0x6] * b0[0x5];
+ sum -= window[-0x7] * b0[0x6];
+ sum -= window[-0x8] * b0[0x7];
+ sum -= window[-0x9] * b0[0x8];
+ sum -= window[-0xA] * b0[0x9];
+ sum -= window[-0xB] * b0[0xA];
+ sum -= window[-0xC] * b0[0xB];
+ sum -= window[-0xD] * b0[0xC];
+ sum -= window[-0xE] * b0[0xD];
+ sum -= window[-0xF] * b0[0xE];
+ sum -= window[-0x0] * b0[0xF];
+ WRITE_SAMPLE(samples,sum,clip);
+ }
+ }
+ *pnt += 128;
+
+ return clip;
+}
+
+
+
+static void *sigmp3play_new(void)
+{
+ char *vec;
+ t_sigmp3play *x = (t_sigmp3play *)pd_new(sigmp3play_class);
+
+ x->file_is_open = 0;
+ x->play_state = 0;
+ x->mp3_encode_size = 0;
+ x->mp3_out_index = 0;
+ x->file_block_num = 0;
+ x->file_remain = 0;
+ x->file_size = 0;
+ x->mp3_ch = 1;
+ x->mp3_sr = 44100;
+ x->obj_sr = 44100;
+ x->obj_n = 1;
+ x->samp_per_frame = 1152;
+ x->mp3_byterate = 11;
+ x->down = 0;
+ x->scale = 1.0/32768.0;
+ x->offset_sec = 0.0;
+ x->fh = (FILE *)0L;
+ x->mp3inbuf = (char *)getzbytes(MY_MP3_MALLOC_IN_SIZE);
+ x->mp3outbuf = (char *)getzbytes(MY_MP3_MALLOC_OUT_SIZE);
+ x->filename = (char *)getzbytes(MY_MP3_MALLOC_FN);
+ x->begframeseek = (int *)0;
+ x->curframeseek = 0;
+ x->maxframeseek = 0;
+ x->frame_counter = 0;
+ x->time1_bang0_handle = 0;
+ x->time_factor = 0.0;
+ vec = x->filename;
+ *vec = 0;
+ InitMP3(&(x->mp));
+ x->mp_is_init = 1;
+ x->x_clock = clock_new(x, (t_method)sigmp3play_tick);
+ outlet_new(&x->x_obj, &s_signal);
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_floatout = outlet_new(&x->x_obj, &s_float);
+ x->x_bangout = outlet_new(&x->x_obj, &s_bang);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1"));
+ x->x_canvas = canvas_getcurrent();
+ return (x);
+}
+
+static void sigmp3play_cleanup(t_sigmp3play *x)
+{
+ x->file_is_open = 0;
+ fclose(x->fh);
+ x->play_state = 0;
+ x->mp3_out_index = 0;
+ x->mp_is_init = 0;
+ ExitMP3(&(x->mp));
+ x->time1_bang0_handle = 0;
+ clock_delay(x->x_clock, 0);
+}
+
+static int sigmp3play_read_frame_length_first(t_sigmp3play *x, int *frsz)
+{
+ int framesize, lsf, bitrate_index, sampling_frequency, padding, mpeg25, lay, ret=MP3_EX;
+ int version, syncword;
+ unsigned long head;
+ unsigned char chead;
+
+ *frsz = 0;
+ if((x->file_size) >= 4)
+ {
+ fread(&chead, 1, sizeof(char), x->fh);
+ head = (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ syncword = (head >> 20) & 0x0fff;
+ version = ((head >> 19) & 0x01) ? 0 : 1;
+ if((syncword & 0x01) == 0)
+ version = 2;
+ if(version == 0)
+ x->samp_per_frame = 1152;
+ else
+ x->samp_per_frame = 576;
+
+ if(head & (1<<20))
+ {
+ lsf = (head & (1<<19)) ? 0x0 : 0x1;
+ mpeg25 = 0;
+ }
+ else
+ {
+ lsf = 1;
+ mpeg25 = 1;
+ }
+ lay = 4-((head>>17)&3);
+ if(((head>>10)&0x3) == 0x3)
+ {
+ post("Stream error");
+ return(MP3_EX);
+ }
+ if(mpeg25)
+ sampling_frequency = 6 + ((head>>10)&0x3);
+ else
+ sampling_frequency = ((head>>10)&0x3) + (lsf*3);
+ x->mp3_sr = (int)iemmp3_freqs[sampling_frequency];
+ if(mpeg25)
+ bitrate_index = ((head>>12)&0xf);
+ bitrate_index = ((head>>12)&0xf);
+ padding = ((head>>9)&0x1);
+ if(!bitrate_index)
+ {
+ post("Free format not supported.\n");
+ return(MP3_EX);
+ }
+ switch(lay)
+ {
+ case 1:
+ post("Layer I not supported!\n");
+ break;
+ case 2:
+ post("Layer II not supported!\n");
+ break;
+ case 3:
+ framesize = iemmp3_tabsel_123[lsf][2][bitrate_index]*144000;
+ framesize /= (iemmp3_freqs[sampling_frequency] << lsf);
+ framesize += padding;
+ *frsz = framesize;
+ ret = 0;
+ break;
+ default:
+ post("Sorry, unknown layer type.\n");
+ break;
+ }
+ return(ret);
+ }
+ else
+ {
+ return(1);
+ }
+}
+
+static int sigmp3play_read_frame_length_next(t_sigmp3play *x, int *frsz, int frame_counter)
+{
+ int framesize, lsf, bitrate_index, sampling_frequency, *begframeseek=x->begframeseek;
+ unsigned long head;
+ unsigned char chead;
+
+ *frsz = 0;
+ if(begframeseek[frame_counter] < ((x->file_size) - 4))
+ {
+ fread(&chead, 1, sizeof(char), x->fh);
+ head = (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ fread(&chead, 1, sizeof(char), x->fh);
+ head <<= 8;
+ head |= (unsigned int)chead;
+ if(head & (1<<20))
+ {
+ lsf = (head & (1<<19)) ? 0x0 : 0x1;
+ sampling_frequency = ((head>>10)&0x3) + (lsf*3);
+ }
+ else
+ {
+ lsf = 1;
+ sampling_frequency = 6 + ((head>>10)&0x3);
+ }
+ bitrate_index = ((head>>12)&0xf);
+ framesize = iemmp3_tabsel_123[lsf][2][bitrate_index]*144000;
+ framesize /= (iemmp3_freqs[sampling_frequency] << lsf);
+ framesize += ((head>>9)&0x1);
+ *frsz = framesize;
+ return(0);
+ }
+ else
+ return(1);
+}
+
+static int sigmp3play_calc_frames(t_sigmp3play *x)
+{
+ int *begframeseek=x->begframeseek, i, maxframeseek, framesize, frame_counter;
+ float length;
+
+ fseek(x->fh,0,SEEK_SET);
+ if(!sigmp3play_read_frame_length_first(x, &framesize))
+ {
+ if(framesize <= 0)
+ {
+ return(MP3_EX);
+ }
+ i = framesize - 6;
+ maxframeseek = (x->file_size) / i;
+ if(!begframeseek)
+ {
+ x->begframeseek = (int *)getzbytes((maxframeseek)*sizeof(int));
+ x->maxframeseek = maxframeseek;
+ }
+ else
+ {
+ if(maxframeseek > (x->maxframeseek))
+ {
+ freebytes(x->begframeseek, (x->maxframeseek)*sizeof(int));
+ x->begframeseek = (int *)getzbytes((maxframeseek)*sizeof(int));
+ x->maxframeseek = maxframeseek;
+ }
+ }
+ begframeseek = x->begframeseek;
+ begframeseek[0] = 0;
+ begframeseek[1] = framesize;
+ frame_counter = 1;
+ /*x->curframeseek = maxframeseek;*/
+ fseek(x->fh, begframeseek[1], SEEK_SET);
+ while(!sigmp3play_read_frame_length_next(x, &framesize, frame_counter))
+ {
+ begframeseek[frame_counter+1] = begframeseek[frame_counter] + framesize;
+ frame_counter++;
+ fseek(x->fh, begframeseek[frame_counter], SEEK_SET);
+ };
+ frame_counter--;
+ length = (float)(frame_counter)*(float)(x->samp_per_frame) / (float)(x->mp3_sr);
+ x->length_sec = length;
+ x->time_factor = length / (float)(frame_counter);
+ x->curframeseek = frame_counter;
+ fseek(x->fh,0,SEEK_SET);
+ return(MP3_OK);
+ }
+ else
+ return(MP3_EX);
+}
+
+static void sigmp3play_do_open(t_sigmp3play *x, char *str, int calc_it)
+{
+ int mp3_sr, obj_sr;
+ int file_size, size, mp3_encode_return=MP3_OK, mp3_read_length, i, j, *begframeseek;
+ static char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
+ static char *layers[4] = { "Unknown" , "I", "II", "III" };
+ char completefilename[400];
+
+ if(x->file_is_open)
+ {
+ post("mp3play-ERROR: file is already open, please stop it first!");
+ }
+ else if(*str == 0)
+ {
+ post("mp3play-ERROR: there is no filename to open");
+ }
+ else
+ {
+ if(str[0] == '/')
+ {
+ strcpy(completefilename, str);
+ }
+ else if(((str[0] >= 'A')&&(str[0] <= 'Z')||
+ (str[0] >= 'a')&&(str[0] <= 'z'))&&
+ (str[1] == ':')&&(str[2] == '/'))
+ {
+ strcpy(completefilename, str);
+ }
+ else
+ {
+ strcpy(completefilename, canvas_getdir(x->x_canvas)->s_name);
+ strcat(completefilename, "/");
+ strcat(completefilename, str);
+ }
+
+ if((x->fh = fopen(completefilename, "rb")) == NULL)
+ {
+ post("mp3play-ERROR: cannot open %s", completefilename);
+ }
+ else
+ {
+ strcpy(x->filename, completefilename);
+ fseek(x->fh,0,SEEK_END);
+ file_size = (int)ftell(x->fh);
+ x->file_size = file_size;
+ if(!x->mp_is_init)
+ {
+ InitAgainMP3(&(x->mp));
+ x->mp_is_init = 1;
+ }
+ if(calc_it)
+ mp3_encode_return = sigmp3play_calc_frames(x);
+ if(mp3_encode_return == MP3_EX)
+ {
+ sigmp3play_cleanup(x);
+ return;
+ }
+ if(x->frame_counter)
+ x->frame_counter = (int)(x->offset_sec / x->time_factor);
+ i = x->frame_counter;
+ if(i > (x->curframeseek - 1))
+ i = x->curframeseek - 1;
+ begframeseek = x->begframeseek;
+ j = begframeseek[i];
+ fseek(x->fh,j,SEEK_SET);
+ x->file_block_num = (file_size-j) / MY_MP3_MALLOC_IN_SIZE;
+ x->file_remain = (file_size-j) - (x->file_block_num)*MY_MP3_MALLOC_IN_SIZE;
+ if(x->file_block_num)
+ {
+ mp3_read_length = MY_MP3_MALLOC_IN_SIZE;
+ x->file_block_num--;
+ }
+ else
+ {
+ mp3_read_length = x->file_remain;
+ x->file_remain = 0;
+ }
+ if(mp3_read_length > 0)
+ {
+ fread(x->mp3inbuf, mp3_read_length, sizeof(char), x->fh);
+ mp3_encode_return = decodeMP3(&(x->mp), x->mp3inbuf, mp3_read_length, x->mp3outbuf,
+ MY_MP3_MALLOC_IN_SIZE2, &size);
+ if(mp3_encode_return == MP3_EX)
+ {
+ sigmp3play_cleanup(x);
+ return;
+ }
+ post ("MPEG %s, Layer: %s, Freq: %ld, mode: %s, modext: %d, BPF : %d",
+ x->mp.fr.mpeg25 ? "2.5" : (x->mp.fr.lsf ? "2.0" : "1.0"),
+ layers[x->mp.fr.lay],iemmp3_freqs[x->mp.fr.sampling_frequency],
+ modes[x->mp.fr.mode],x->mp.fr.mode_ext,x->mp.fr.framesize+4);
+ post ("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.",
+ x->mp.fr.stereo,x->mp.fr.copyright?"Yes":"No",
+ x->mp.fr.original?"Yes":"No",x->mp.fr.error_protection?"Yes":"No",
+ x->mp.fr.emphasis);
+ post ("Bitrate: %d Kbits/s, Extension value: %d",
+ iemmp3_tabsel_123[x->mp.fr.lsf][x->mp.fr.lay-1]
+ [x->mp.fr.bitrate_index],x->mp.fr.extension);
+ post ("Original Soundfile-Length : %.3f sec.\n",x->length_sec);
+
+ x->mp3_byterate = 128*iemmp3_tabsel_123[x->mp.fr.lsf][x->mp.fr.lay-1][x->mp.fr.bitrate_index];
+ /* 1024/8 */
+
+ if(x->mp.fr.stereo == 2)
+ x->mp3_ch = 2;
+ else if(x->mp.fr.stereo == 1)
+ x->mp3_ch = 1;
+ else
+ {
+ x->mp3_ch = 1;
+ post("mp3_play~ WARNING: unknown number of channels : %d channels",
+ x->mp.fr.stereo);
+ }
+ mp3_sr = (int)(iemmp3_freqs[x->mp.fr.sampling_frequency]);
+ obj_sr = x->obj_sr;
+ x->mp3_sr = mp3_sr;
+ if(mp3_sr == obj_sr)
+ {
+ x->down = 0;
+ }
+ else if(2*mp3_sr == obj_sr)
+ {
+ x->down = 1;
+ }
+ else if(4*mp3_sr == obj_sr)
+ {
+ x->down = 2;
+ }
+ else if(mp3_sr == 2*obj_sr)
+ {
+ x->down = -1;
+ }
+ else if(mp3_sr == 4*obj_sr)
+ {
+ x->down = -2;
+ }
+ else
+ {
+ post("mp3_play~ WARNING: playing the filesamplerate of %d Hz at %d Hz", mp3_sr,obj_sr);
+ x->down = 0;
+ }
+
+ if(mp3_encode_return == MP3_OK)
+ {
+ x->file_is_open = 1;
+ x->mp3_encode_size = size * sizeof(char) / sizeof(short);
+ }
+ else
+ {
+ x->file_is_open = 0;
+ x->mp3_out_index = 0;
+ fclose(x->fh);
+ }
+ }
+ else
+ {
+ x->file_is_open = 0;
+ fclose(x->fh);
+ }
+ }
+ x->play_state = 2;
+ x->mp3_out_index = 0;
+ }
+}
+
+static t_int *sigmp3play_perform(t_int *w)
+{
+ t_sigmp3play *x = (t_sigmp3play *)(w[1]);
+ t_float *out1 = (t_float *)(w[2]);
+ t_float *out2 = (t_float *)(w[3]);
+ int n = (int)(w[4]);
+ short *ivec = (short *)(x->mp3outbuf);
+ int size, mp3_encode_return, mp3_read_length, mp3_ch, down;
+ float scale = x->scale, outa, outb;
+ int mp3_out_index = x->mp3_out_index;
+
+ if (!x->file_is_open)
+ goto sigmp3play_labelzero;
+ if (x->play_state != 1)
+ goto sigmp3play_labelzero;
+
+ if(mp3_out_index >= x->mp3_encode_size)
+ {
+ x->frame_counter++;
+ x->time1_bang0_handle = 1;
+ clock_delay(x->x_clock, 0);
+ mp3_out_index = 0;
+ mp3_encode_return = decodeMP3(&(x->mp), NULL, 0, x->mp3outbuf,
+ MY_MP3_MALLOC_IN_SIZE2, &size);
+ if(mp3_encode_return == MP3_OK)
+ x->mp3_encode_size = size * sizeof(char) / sizeof(short);
+ else if(mp3_encode_return == MP3_EX)
+ {
+ sigmp3play_cleanup(x);
+ goto sigmp3play_labelzero;
+ }
+ else
+ {
+ if(x->file_block_num > 0)
+ {
+ mp3_read_length = MY_MP3_MALLOC_IN_SIZE;
+ x->file_block_num--;
+ }
+ else if(x->file_remain > 0)
+ {
+ mp3_read_length = x->file_remain;
+ x->file_remain = 0;
+ }
+ else
+ {
+ sigmp3play_cleanup(x);
+ goto sigmp3play_labelzero;
+ }
+
+ fread(x->mp3inbuf, mp3_read_length, sizeof(char), x->fh);
+ mp3_encode_return = decodeMP3(&(x->mp), x->mp3inbuf, mp3_read_length,
+ x->mp3outbuf, MY_MP3_MALLOC_IN_SIZE2, &size);
+ x->mp3_encode_size = size * sizeof(char) / sizeof(short);
+ if(mp3_encode_return == MP3_EX)
+ {
+ sigmp3play_cleanup(x);
+ goto sigmp3play_labelzero;
+ }
+ }
+ }
+
+ mp3_ch = x->mp3_ch;
+ down = x->down;
+ if(mp3_ch == 2)
+ {
+ if(down == 0)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + 2*n;
+ while (n--)
+ {
+ *out1++ = scale * (float)(*ivec++);
+ *out2++ = scale * (float)(*ivec++);
+ }
+ }
+ else if(down == 1)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + n;
+ n /= 2;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ outb = scale * (float)(*ivec++);
+ *out1++ = outa;
+ *out2++ = outb;
+ *out1++ = outa;
+ *out2++ = outb;
+ }
+ }
+ else if(down == 2)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + n/2;
+ n /= 4;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ outb = scale * (float)(*ivec++);
+ *out1++ = outa;
+ *out2++ = outb;
+ *out1++ = outa;
+ *out2++ = outb;
+ *out1++ = outa;
+ *out2++ = outb;
+ *out1++ = outa;
+ *out2++ = outb;
+ }
+ }
+ else if(down == -1)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + 4*n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ outb = scale * (float)(*ivec);
+ ivec += 3;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ else if(down == -2)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + 8*n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ outb = scale * (float)(*ivec);
+ ivec += 7;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ }
+ else
+ {
+ if(down == 0)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ else if(down == 1)
+ {
+ ivec += mp3_out_index;
+ n /= 2;
+ x->mp3_out_index = mp3_out_index + n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ *out1++ = outa;
+ *out2++ = outa;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ else if(down == 2)
+ {
+ ivec += mp3_out_index;
+ n /= 4;
+ x->mp3_out_index = mp3_out_index + n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec++);
+ *out1++ = outa;
+ *out2++ = outa;
+ *out1++ = outa;
+ *out2++ = outa;
+ *out1++ = outa;
+ *out2++ = outa;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ else if(down == -1)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + 2*n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec);
+ ivec += 2;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ else if(down == -2)
+ {
+ ivec += mp3_out_index;
+ x->mp3_out_index = mp3_out_index + 4*n;
+ while (n--)
+ {
+ outa = scale * (float)(*ivec);
+ ivec += 4;
+ *out1++ = outa;
+ *out2++ = outa;
+ }
+ }
+ }
+ return (w+5);
+
+sigmp3play_labelzero:
+
+ while (n--)
+ {
+ *out1++ = 0;
+ *out2++ = 0;
+ }
+ return (w+5);
+}
+
+static void sigmp3play_dsp(t_sigmp3play *x, t_signal **sp)
+{
+ x->obj_sr = (int)(sp[0]->s_sr);
+ x->obj_n = (int)(sp[0]->s_n);
+ dsp_add(sigmp3play_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+
+
+static void sigmp3play_stop(t_sigmp3play *x)
+{
+ if(x->file_is_open)
+ {
+ x->file_block_num = 0;
+ x->file_remain = 0;
+ }
+}
+
+static void sigmp3play_start(t_sigmp3play *x)
+{
+ if(x->file_is_open)
+ {
+ x->play_state = 1;
+ }
+}
+
+static void sigmp3play_ft1(t_sigmp3play *x, t_floatarg offset)
+{
+ if(offset < 0.0)
+ offset = 0.0;
+ x->offset_sec = (float)offset;
+}
+
+static void sigmp3play_pause(t_sigmp3play *x)
+{
+ if(x->file_is_open)
+ {
+ if(x->play_state == 0)
+ x->play_state = 1;
+ else if(x->play_state == 1)
+ x->play_state = 0;
+ }
+}
+
+static void sigmp3play_open(t_sigmp3play *x, t_symbol *s)
+{
+ x->frame_counter = 0;
+ sigmp3play_do_open(x, (char *)s->s_name, 1);
+}
+
+static void sigmp3play_open_again(t_sigmp3play *x)
+{
+ x->frame_counter = 0;
+ sigmp3play_do_open(x, x->filename, 0);
+}
+
+static void sigmp3play_open_at(t_sigmp3play *x, t_symbol *s)
+{
+ x->frame_counter = 1;
+ sigmp3play_do_open(x, (char *)s->s_name, 1);
+}
+
+static void sigmp3play_open_again_at(t_sigmp3play *x)
+{
+ x->frame_counter = 1;
+ sigmp3play_do_open(x, x->filename, 0);
+}
+
+
+static void sigmp3play_tick(t_sigmp3play *x)
+{
+ if(x->time1_bang0_handle)
+ {
+ outlet_float(x->x_floatout, (float)(x->frame_counter)*(x->time_factor));
+ }
+ else
+ {
+ outlet_bang(x->x_bangout);
+ }
+}
+
+static void sigmp3play_free(t_sigmp3play *x)
+{
+ if(x->mp_is_init)
+ ExitMP3(&(x->mp));
+ if(x->begframeseek)
+ freebytes(x->begframeseek, (x->maxframeseek)*sizeof(int));
+ freebytes(x->filename, MY_MP3_MALLOC_FN);
+ freebytes(x->mp3outbuf, MY_MP3_MALLOC_OUT_SIZE);
+ freebytes(x->mp3inbuf, MY_MP3_MALLOC_IN_SIZE);
+ clock_free(x->x_clock);
+}
+
+void sigmp3play_setup(void)
+{
+ sigmp3play_class = class_new(gensym("mp3play~"), (t_newmethod)sigmp3play_new,
+ (t_method)sigmp3play_free, sizeof(t_sigmp3play), 0, 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_dsp, gensym("dsp"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_start, gensym("start"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_ft1,
+ gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_stop, gensym("stop"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_pause, gensym("pause"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_open_again_at, gensym("open_again_at"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_open, gensym("open"), A_DEFSYM, 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_open_again, gensym("open_again"), 0);
+ class_addmethod(sigmp3play_class, (t_method)sigmp3play_open_at, gensym("open_at"), A_DEFSYM, 0);
+ class_sethelpsymbol(sigmp3play_class, gensym("iemhelp/help-mp3play~"));
+ /*post("\nmp3play~ written by thomas musil & norbert math\nV 0.1 iem graz
+ austria 05 2000\n");*/
+}
+
diff --git a/src/iem_t3_lib/iem_t3_lib.c b/src/iem_t3_lib/iem_t3_lib.c
new file mode 100644
index 0000000..1e19576
--- /dev/null
+++ b/src/iem_t3_lib/iem_t3_lib.c
@@ -0,0 +1,65 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+/*
+#include <ctype.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifndef NT
+#include <sys/signal.h>
+#include <unistd.h>
+#endif
+
+#ifdef NT
+#include <io.h>
+#endif
+ */
+
+static t_class *iem_t3_lib_class;
+
+static void *iem_t3_lib_new(void)
+{
+ t_object *x = (t_object *)pd_new(iem_t3_lib_class);
+
+ return (x);
+}
+
+void sigt3_line_setup(void);
+void sigt3_sig_setup(void);
+void t3_bpe_setup(void);
+void t3_delay_setup(void);
+void t3_metro_setup(void);
+void t3_timer_setup(void);
+
+/* ------------------------ setup routine ------------------------- */
+
+void iem_t3_lib_setup(void)
+{
+ iem_t3_lib_class = class_new(gensym("iem_t3_lib"), iem_t3_lib_new, 0,
+ sizeof(t_object), CLASS_NOINLET, 0);
+
+ sigt3_line_setup();
+ sigt3_sig_setup();
+ t3_bpe_setup();
+ t3_delay_setup();
+ t3_metro_setup();
+ t3_timer_setup();
+
+ post("iem_t3_lib (R-1.15) library loaded!");
+}
diff --git a/src/iem_t3_lib/iem_t3_lib.dsp b/src/iem_t3_lib/iem_t3_lib.dsp
new file mode 100644
index 0000000..e6a61be
--- /dev/null
+++ b/src/iem_t3_lib/iem_t3_lib.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iem_t3_lib" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iem_t3_lib - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "iem_t3_lib.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "iem_t3_lib.mak" CFG="iem_t3_lib - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "iem_t3_lib - Win32 Release" (basierend auf "Win32 (x86) External Target")
+!MESSAGE "iem_t3_lib - Win32 Debug" (basierend auf "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "iem_t3_lib - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_t3_lib.exe"
+# PROP Bsc_Name "iem_t3_lib.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "iem_t3_lib - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_t3_lib.exe"
+# PROP Bsc_Name "iem_t3_lib.bsc"
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "iem_t3_lib - Win32 Release"
+# Name "iem_t3_lib - Win32 Debug"
+
+!IF "$(CFG)" == "iem_t3_lib - Win32 Release"
+
+!ELSEIF "$(CFG)" == "iem_t3_lib - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/src/iem_t3_lib/iem_t3_lib.dsw b/src/iem_t3_lib/iem_t3_lib.dsw
new file mode 100644
index 0000000..2b4e202
--- /dev/null
+++ b/src/iem_t3_lib/iem_t3_lib.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iem_t3_lib"=.\iem_t3_lib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/iem_t3_lib/iemlib.h b/src/iem_t3_lib/iemlib.h
new file mode 100644
index 0000000..d518565
--- /dev/null
+++ b/src/iem_t3_lib/iemlib.h
@@ -0,0 +1,98 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifndef __IEMLIB_H__
+#define __IEMLIB_H__
+
+
+#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
+#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
+#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
+#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
+#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
+#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
+#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
+
+
+#ifdef NT
+int sys_noloadbang;
+//t_symbol *iemgui_key_sym=0;
+#include <io.h>
+#else
+extern int sys_noloadbang;
+//extern t_symbol *iemgui_key_sym;
+#include <unistd.h>
+#endif
+
+#define DEFDELVS 64
+#define XTRASAMPS 4
+#define SAMPBLK 4
+
+
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#else
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#else
+#ifdef __FreeBSD__
+#include <machine/endian.h>
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif
+#ifdef __linux__
+
+#include <endian.h>
+
+#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+
+#include <sys/types.h>
+#define int32 int32_t
+
+#else
+#ifdef MACOSX
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 int /* a data type that has 32 bits */
+
+#endif /* MACOSX */
+#endif /* __linux__ */
+#endif /* MSW */
+#endif /* SGI */
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+#endif
diff --git a/src/iem_t3_lib/makefile b/src/iem_t3_lib/makefile
new file mode 100644
index 0000000..34d19d6
--- /dev/null
+++ b/src/iem_t3_lib/makefile
@@ -0,0 +1,56 @@
+current: all
+
+.SUFFIXES: .pd_linux
+
+INCLUDE = -I. -I/usr/local/src/pd/src
+
+LDFLAGS = -export-dynamic -shared
+LIB = -ldl -lm -lpthread
+
+#select either the DBG and OPT compiler flags below:
+
+CFLAGS = -DPD -DUNIX -Wall -W -Werror -Wno-unused \
+ -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer \
+ -DDL_OPEN
+
+SYSTEM = $(shell uname -m)
+
+# the sources
+
+SRC = sigt3_line.c \
+ sigt3_sig.c \
+ t3_bpe.c \
+ t3_delay.c \
+ t3_metro.c \
+ t3_timer.c \
+ iem_t3_lib.c
+
+TARGET = iem_t3_lib.pd_linux
+
+
+OBJ = $(SRC:.c=.o)
+
+#
+# ------------------ targets ------------------------------------
+#
+
+clean:
+ rm ../../lib/$(TARGET)
+ rm *.o
+
+all: $(OBJ)
+
+ @echo :: $(OBJ)
+
+ ld $(LDFLAGS) -o $(TARGET) *.o $(LIB)
+ strip --strip-unneeded $(TARGET)
+ mv $(TARGET) ../../lib
+ rm *.o
+
+$(OBJ) : %.o : %.c
+ touch $*.c
+ cc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+
+
+
+
diff --git a/src/iem_t3_lib/makefile_win b/src/iem_t3_lib/makefile_win
new file mode 100644
index 0000000..6f31894
--- /dev/null
+++ b/src/iem_t3_lib/makefile_win
@@ -0,0 +1,43 @@
+
+all: ..\..\lib\iem_t3_lib.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+ $(VIS_CPP_PATH)\lib\libc.lib \
+ $(VIS_CPP_PATH)\lib\oldnames.lib \
+ $(VIS_CPP_PATH)\lib\kernel32.lib \
+ $(VIS_CPP_PATH)\lib\wsock32.lib \
+ $(VIS_CPP_PATH)\lib\winmm.lib \
+ $(PD_INST_PATH)\bin\pthreadVC.lib \
+ $(PD_INST_PATH)\bin\pd.lib
+
+
+SRC = sigt3_line.c \
+ sigt3_sig.c \
+ t3_bpe.c \
+ t3_delay.c \
+ t3_metro.c \
+ t3_timer.c \
+ iem_t3_lib.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+ cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\..\lib\iem_t3_lib.dll: $(OBJ)
+ link $(PD_WIN_L_FLAGS) /dll /export:iem_t3_lib_setup \
+ /out:..\..\lib\iem_t3_lib.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+ del *.obj
diff --git a/src/iem_t3_lib/sigt3_line.c b/src/iem_t3_lib/sigt3_line.c
new file mode 100644
index 0000000..525f7f7
--- /dev/null
+++ b/src/iem_t3_lib/sigt3_line.c
@@ -0,0 +1,279 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- t3_line~ ------------------------------ */
+static t_class *sigt3_line_class;
+
+typedef struct _sigt3_line
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ float *x_beg;
+ double x_cur_val;
+ double x_dst_val;
+ double x_inlet_val;
+ double x_inc64;
+ double x_inc;
+ double x_ms2samps;
+ double x_ticks2ms;
+ double x_inlet_time;
+ double x_dst_time;
+ int x_cur_samps;
+ int x_dur_samps;
+ int x_n;
+ int x_t3_bang_samps;
+ int x_transient;
+} t_sigt3_line;
+
+static void sigt3_line_nontransient(float *vec, t_sigt3_line *x, int n)
+{
+ int cur_samps = x->x_cur_samps, i;
+ double inc = x->x_inc;
+ double cur_val = x->x_cur_val;
+
+ if(cur_samps)
+ {
+ if(cur_samps > n)
+ {
+ x->x_cur_samps -= n;
+ while(n--)
+ {
+ cur_val += inc;
+ *vec++ = (float)cur_val;
+ }
+ x->x_cur_val += x->x_inc64;
+ }
+ else if(cur_samps == n)
+ {
+ x->x_cur_samps = 0;
+ while(n--)
+ {
+ cur_val += inc;
+ *vec++ = (float)cur_val;
+ }
+ x->x_cur_val = x->x_dst_val;
+ }
+ else
+ {
+ for(i=0; i<cur_samps; i++)
+ {
+ cur_val += inc;
+ *vec++ = (float)cur_val;
+ }
+ x->x_cur_val = cur_val = x->x_dst_val;
+ for(i=cur_samps; i<n; i++)
+ *vec++ = (float)cur_val;
+ x->x_cur_samps = 0;
+ }
+ }
+ else
+ {
+ while(n--)
+ *vec++ = (float)cur_val;
+ }
+}
+
+static t_int *sigt3_line_perform(t_int *w)
+{
+ t_float *out = (t_float *)(w[1]);
+ t_sigt3_line *x = (t_sigt3_line *)(w[2]);
+ int n = (int)(w[3]);
+
+ if(x->x_transient)
+ {
+ float *trans = x->x_beg;
+
+ while(n--)
+ *out++ = *trans++;
+ x->x_transient = 0;
+ }
+ else
+ sigt3_line_nontransient(out, x, n);
+ return(w+4);
+}
+
+static void sigt3_line_tick(t_sigt3_line *x)
+{
+ float *trans = x->x_beg;
+ int n = x->x_n, t3_bang_samps, cur_samps, i;
+ double inc, cur_val;
+
+ if(!x->x_transient)
+ sigt3_line_nontransient(trans, x, n);
+ t3_bang_samps = x->x_t3_bang_samps;
+ x->x_dst_val = x->x_inlet_val;
+ if(x->x_inlet_time <= 0.0)
+ {
+ x->x_inlet_time = 0.0;
+ x->x_dst_time = 0.0;
+ x->x_dur_samps = 0;
+ x->x_cur_samps = 0;
+ cur_val = x->x_cur_val = x->x_dst_val;
+ for(i=t3_bang_samps; i<n; i++)
+ trans[i] = (float)cur_val;
+ }
+ else
+ {
+ int diff, end;
+
+ x->x_dst_time = x->x_inlet_time;
+ x->x_inlet_time = 0.0;
+ cur_samps = (int)(x->x_dst_time * x->x_ms2samps);
+ if(!cur_samps)
+ cur_samps = 1;
+ x->x_dur_samps = cur_samps;
+ x->x_cur_samps = cur_samps;
+ cur_val = x->x_cur_val = (double)trans[t3_bang_samps];
+ inc = x->x_inc = (x->x_dst_val - cur_val)/(double)cur_samps;
+ x->x_inc64 = (double)x->x_n * inc;
+ diff = n - t3_bang_samps;
+ if(cur_samps > diff)
+ {
+ for(i=t3_bang_samps; i<n; i++)
+ {
+ cur_val += inc;
+ trans[i] = (float)cur_val;
+ }
+ x->x_cur_val += (double)diff * inc;
+ x->x_cur_samps -= diff;
+ }
+ else if(cur_samps == diff)
+ {
+ for(i=t3_bang_samps; i<n; i++)
+ {
+ cur_val += inc;
+ trans[i] = (float)cur_val;
+ }
+ x->x_cur_val = x->x_dst_val;
+ x->x_cur_samps = 0;
+ }
+ else
+ {
+ end = t3_bang_samps + cur_samps;
+ for(i=t3_bang_samps; i<end; i++)
+ {
+ cur_val += inc;
+ trans[i] = (float)cur_val;
+ }
+ cur_val = x->x_cur_val = x->x_dst_val;
+ x->x_cur_samps = 0;
+ for(i=end; i<n; i++)
+ trans[i] = (float)cur_val;
+ }
+ }
+ x->x_transient = 1;
+}
+
+static void sigt3_line_list(t_sigt3_line *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac >= 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1))
+ {
+ int t3_bang_samps, ticks;
+ double time;
+
+ x->x_inlet_val = (double)atom_getfloatarg(1, ac, av);
+ t3_bang_samps = (int)((float)atom_getfloatarg(0, ac, av)*x->x_ms2samps);
+ if(t3_bang_samps < 0)
+ t3_bang_samps = 0;
+ ticks = t3_bang_samps / x->x_n;
+ x->x_t3_bang_samps = t3_bang_samps - x->x_n * ticks;
+ if((ac >= 3)&&IS_A_FLOAT(av,2))
+ {
+ time = (double)atom_getfloatarg(2, ac, av);
+ if(time < 0.0)
+ time = 0.0;
+ x->x_inlet_time = time;
+ }
+ if(ticks < 1)
+ sigt3_line_tick(x);
+ else
+ clock_delay(x->x_clock, (double)ticks * x->x_ticks2ms);
+ }
+}
+
+static void sigt3_line_ft1(t_sigt3_line *x, t_float time)
+{
+ if(time < 0.0)
+ time = 0.0;
+ x->x_inlet_time = (double)time;
+}
+
+static void sigt3_line_stop(t_sigt3_line *x)
+{
+ clock_unset(x->x_clock);
+ x->x_cur_samps = x->x_dur_samps = x->x_transient = 0;
+ x->x_inc = x->x_inc64 = x->x_inlet_time = x->x_dst_time = 0.0;
+}
+
+static void sigt3_line_dsp(t_sigt3_line *x, t_signal **sp)
+{
+ int i;
+ float val, *trans;
+
+ if(sp[0]->s_n > x->x_n)
+ {
+ freebytes(x->x_beg, x->x_n*sizeof(float));
+ x->x_n = (int)sp[0]->s_n;
+ x->x_beg = (float *)getbytes(x->x_n*sizeof(float));
+ }
+ else
+ x->x_n = (int)sp[0]->s_n;
+ i = x->x_n;
+ val = x->x_cur_val;
+ trans = x->x_beg;
+ while(i--)
+ *trans++ = val;
+ x->x_ms2samps = 0.001*(double)sp[0]->s_sr;
+ x->x_ticks2ms = (double)x->x_n / x->x_ms2samps;
+ dsp_add(sigt3_line_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+}
+
+static void sigt3_line_free(t_sigt3_line *x)
+{
+ if(x->x_beg)
+ freebytes(x->x_beg, x->x_n*sizeof(float));
+ clock_free(x->x_clock);
+}
+
+static void *sigt3_line_new(t_floatarg init_val)
+{
+ t_sigt3_line *x = (t_sigt3_line *)pd_new(sigt3_line_class);
+ int i;
+
+ x->x_n = (int)sys_getblksize();
+ x->x_beg = (float *)getbytes(x->x_n*sizeof(float));
+ x->x_inlet_val = x->x_cur_val = x->x_dst_val = init_val;
+ x->x_t3_bang_samps = x->x_cur_samps = x->x_dur_samps = x->x_transient = 0;
+ x->x_inlet_time = x->x_dst_time = 0.0;
+ x->x_inc64 = x->x_inc = 0.0;
+ x->x_ms2samps = 0.001 * (double)sys_getsr();
+ x->x_ticks2ms = (double)x->x_n / x->x_ms2samps;
+ x->x_clock = clock_new(x, (t_method)sigt3_line_tick);
+ outlet_new(&x->x_obj, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1"));
+ return (x);
+}
+
+void sigt3_line_setup(void)
+{
+ sigt3_line_class = class_new(gensym("t3_line~"), (t_newmethod)sigt3_line_new,
+ (t_method)sigt3_line_free, sizeof(t_sigt3_line), 0, A_DEFFLOAT, 0);
+ class_addmethod(sigt3_line_class, (t_method)sigt3_line_dsp, gensym("dsp"), 0);
+ class_addmethod(sigt3_line_class, (t_method)sigt3_line_stop, gensym("stop"), 0);
+ class_addmethod(sigt3_line_class, (t_method)sigt3_line_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addlist(sigt3_line_class, (t_method)sigt3_line_list);
+ class_sethelpsymbol(sigt3_line_class, gensym("iemhelp/help-t3_line~"));
+}
diff --git a/src/iem_t3_lib/sigt3_sig.c b/src/iem_t3_lib/sigt3_sig.c
new file mode 100644
index 0000000..84429b6
--- /dev/null
+++ b/src/iem_t3_lib/sigt3_sig.c
@@ -0,0 +1,200 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- sigt3_sig~ ------------------------------ */
+static t_class *sigt3_sig_class;
+
+typedef struct _sigt3_sig
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ float x_old_val;
+ float x_new_val;
+ float *x_beg;
+ int x_n;
+ int x_t3_bang_samps;
+ int x_transient;
+ float x_ms2samps;
+ float x_ticks2ms;
+} t_sigt3_sig;
+
+static void sigt3_sig_tick(t_sigt3_sig *x)
+{
+ float *trans = x->x_beg, val;
+ int n = x->x_n, t3_bang_samps, i;
+
+ t3_bang_samps = x->x_t3_bang_samps;
+ if(!x->x_transient)
+ {
+ val = x->x_old_val;
+ for(i=0; i<t3_bang_samps; i++)
+ trans[i] = val;
+ x->x_transient = 1;
+ }
+ val = x->x_old_val = x->x_new_val;
+ for(i=t3_bang_samps; i<n; i++)
+ trans[i] = val;
+}
+
+static void sigt3_sig_stop(t_sigt3_sig *x)
+{
+ clock_unset(x->x_clock);
+ x->x_new_val = x->x_old_val;
+}
+
+static void sigt3_sig_list(t_sigt3_sig *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1))
+ {
+ int n = x->x_n, t3_bang_samps, ticks;
+
+ t3_bang_samps = (int)((float)atom_getfloatarg(0, ac, av)*x->x_ms2samps);
+ x->x_new_val = (float)atom_getfloatarg(1, ac, av);
+ if(t3_bang_samps < 0)
+ t3_bang_samps = 0;
+ ticks = t3_bang_samps / n;
+ x->x_t3_bang_samps = t3_bang_samps - n*ticks;
+ if(ticks < 1)
+ sigt3_sig_tick(x);
+ else
+ clock_delay(x->x_clock, (double)ticks * (double)x->x_ticks2ms);
+ }
+}
+
+static t_int *sigt3_sig_perform(t_int *w)
+{
+ t_float *out = (t_float *)(w[1]);
+ t_sigt3_sig *x = (t_sigt3_sig *)(w[2]);
+ int n = (int)(w[3]);
+
+ if(x->x_transient)
+ {
+ float *trans = x->x_beg;
+
+ while(n--)
+ *out++ = *trans++;
+ x->x_transient = 0;
+ }
+ else
+ {
+ float val = x->x_new_val;
+
+ while(n--)
+ *out++ = val;
+ }
+ return (w+4);
+}
+
+static t_int *sigt3_sig_perf8(t_int *w)
+{
+ t_float *out = (t_float *)(w[1]);
+ t_sigt3_sig *x = (t_sigt3_sig *)(w[2]);
+ int n = (int)(w[3]), i;
+
+ if(x->x_transient)
+ {
+ float *trans = x->x_beg;
+
+ for(i=0; i<n; i+=8, out+=8, trans+=8)
+ {
+ out[0] = trans[0];
+ out[1] = trans[1];
+ out[2] = trans[2];
+ out[3] = trans[3];
+ out[4] = trans[4];
+ out[5] = trans[5];
+ out[6] = trans[6];
+ out[7] = trans[7];
+ }
+ x->x_transient = 0;
+ }
+ else
+ {
+ float val = x->x_new_val;
+
+ for(i=0; i<n; i+=8, out+=8)
+ {
+ out[0] = val;
+ out[1] = val;
+ out[2] = val;
+ out[3] = val;
+ out[4] = val;
+ out[5] = val;
+ out[6] = val;
+ out[7] = val;
+ }
+ }
+ return (w+4);
+}
+
+static void sigt3_sig_dsp(t_sigt3_sig *x, t_signal **sp)
+{
+ int i;
+ float *trans, val;
+
+ if(sp[0]->s_n > x->x_n)
+ {
+ freebytes(x->x_beg, x->x_n*sizeof(float));
+ x->x_n = sp[0]->s_n;
+ x->x_beg = (float *)getbytes(x->x_n*sizeof(float));
+ }
+ else
+ x->x_n = sp[0]->s_n;
+ x->x_ms2samps = 0.001*(float)sp[0]->s_sr;
+ x->x_ticks2ms = (float)x->x_n / x->x_ms2samps;
+ i = x->x_n;
+ val = x->x_new_val;
+ trans = x->x_beg;
+ while(i--)
+ *trans++ = val;
+
+ if((sp[0]->s_n)&7)
+ dsp_add(sigt3_sig_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+ else
+ dsp_add(sigt3_sig_perf8, 3, sp[0]->s_vec, x, sp[0]->s_n);
+}
+
+static void sigt3_sig_free(t_sigt3_sig *x)
+{
+ if(x->x_beg)
+ freebytes(x->x_beg, x->x_n*sizeof(float));
+ clock_free(x->x_clock);
+}
+
+static void *sigt3_sig_new(t_floatarg init_val)
+{
+ t_sigt3_sig *x = (t_sigt3_sig *)pd_new(sigt3_sig_class);
+
+ x->x_new_val = x->x_old_val = init_val;
+ x->x_n = (int)sys_getblksize();
+ x->x_beg = (float *)getbytes(x->x_n*sizeof(float));
+ x->x_t3_bang_samps = x->x_transient = 0;
+ x->x_ms2samps = 0.001 * (float)sys_getsr();
+ x->x_ticks2ms = (float)x->x_n / x->x_ms2samps;
+ x->x_clock = clock_new(x, (t_method)sigt3_sig_tick);
+ outlet_new(&x->x_obj, &s_signal);
+ return (x);
+}
+
+void sigt3_sig_setup(void)
+{
+ sigt3_sig_class = class_new(gensym("t3_sig~"), (t_newmethod)sigt3_sig_new,
+ (t_method)sigt3_sig_free, sizeof(t_sigt3_sig), 0, A_DEFFLOAT, 0);
+ class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_dsp, gensym("dsp"), 0);
+ class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_stop, gensym("stop"), 0);
+ class_addlist(sigt3_sig_class, (t_method)sigt3_sig_list);
+ class_sethelpsymbol(sigt3_sig_class, gensym("iemhelp/help-t3_sig~"));
+}
diff --git a/src/iem_t3_lib/t3_bpe.c b/src/iem_t3_lib/t3_bpe.c
new file mode 100644
index 0000000..6a2dbe0
--- /dev/null
+++ b/src/iem_t3_lib/t3_bpe.c
@@ -0,0 +1,142 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------------------------ t3_bpe ---------------------------- */
+static t_class *t3_bpe_class;
+
+typedef struct _t3_bpe
+{
+ t_object x_obj;
+ t_atom x_at[2];
+ t_clock *x_clock;
+ int x_maxnum;
+ int x_curnum;
+ int x_curindex;
+ t_atom *x_beg;
+ double x_t3_bang;
+ double x_ticks2ms;
+ int x_hit;
+ void *x_out_val;
+ void *x_out_time;
+ void *x_out_finished;
+} t_t3_bpe;
+
+static void t3_bpe_stop(t_t3_bpe *x)
+{
+ clock_unset(x->x_clock);
+}
+
+static void t3_bpe_tick(t_t3_bpe *x)
+{
+ t_atom *vec = x->x_beg;
+ float val;
+ double dticks, time;
+ int iticks;
+
+ if(x->x_curindex >= x->x_curnum)
+ {
+ t3_bpe_stop(x);
+ outlet_float(x->x_out_finished, x->x_t3_bang);
+ }
+ else
+ {
+ x->x_hit = 0;
+ vec += x->x_curindex;
+ val = atom_getfloat(vec++);
+ time = (double)atom_getfloat(vec);
+ outlet_float(x->x_out_time, (float)time);
+ x->x_at[1].a_w.w_float = val;
+ x->x_at[0].a_w.w_float = x->x_t3_bang;
+ outlet_list(x->x_obj.ob_outlet, &s_list, 2, x->x_at);
+ dticks = (time + x->x_t3_bang)/x->x_ticks2ms;
+ iticks = (int)dticks;
+ x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms;
+ if(!x->x_hit)
+ clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms);
+ x->x_curindex += 2;
+ }
+}
+
+static void t3_bpe_float(t_t3_bpe *x, t_floatarg f)
+{
+ double dticks;
+ int iticks;
+
+ if(x->x_curnum)
+ {
+ x->x_curindex = 0;
+ dticks = (double)f/x->x_ticks2ms;
+ iticks = (int)dticks;
+ x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms;
+ clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms);
+ x->x_hit = 1;
+ }
+}
+
+static void t3_bpe_list(t_t3_bpe *x, t_symbol *s, int ac, t_atom *av)
+{
+ int n = ac & 0xfffffffe, i;
+ t_atom *vec = x->x_beg;
+ if(n > x->x_maxnum)
+ {
+ freebytes(x->x_beg, x->x_maxnum*sizeof(t_atom));
+ x->x_maxnum = 2 + n;
+ x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom));
+ vec = x->x_beg;
+ }
+ x->x_curnum = n;
+ for(i=0; i<n; i++)
+ {
+ *vec++ = *av++;
+ }
+}
+
+static void t3_bpe_free(t_t3_bpe *x)
+{
+ freebytes(x->x_beg, x->x_maxnum*sizeof(t_atom));
+ clock_free(x->x_clock);
+}
+
+static void *t3_bpe_new(void)
+{
+ t_t3_bpe *x = (t_t3_bpe *)pd_new(t3_bpe_class);
+
+ x->x_t3_bang = 0.0;
+ x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr();
+ x->x_curindex = 0;
+ x->x_maxnum = 20;
+ x->x_curnum = 0;
+ x->x_hit = 0;
+ x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom));
+ x->x_clock = clock_new(x, (t_method)t3_bpe_tick);
+ outlet_new(&x->x_obj, &s_list);
+ x->x_out_time = outlet_new(&x->x_obj, &s_float);
+ x->x_out_finished = outlet_new(&x->x_obj, &s_float);
+ x->x_at[0].a_type = A_FLOAT;
+ x->x_at[1].a_type = A_FLOAT;
+ return (x);
+}
+
+void t3_bpe_setup(void)
+{
+ t3_bpe_class = class_new(gensym("t3_bpe"), (t_newmethod)t3_bpe_new,
+ (t_method)t3_bpe_free, sizeof(t_t3_bpe), 0, 0);
+ class_addmethod(t3_bpe_class, (t_method)t3_bpe_stop, gensym("stop"), 0);
+ class_addfloat(t3_bpe_class, (t_method)t3_bpe_float);
+ class_addlist(t3_bpe_class, (t_method)t3_bpe_list);
+ class_sethelpsymbol(t3_bpe_class, gensym("iemhelp/help-t3_bpe"));
+}
+
diff --git a/src/iem_t3_lib/t3_delay.c b/src/iem_t3_lib/t3_delay.c
new file mode 100644
index 0000000..a422718
--- /dev/null
+++ b/src/iem_t3_lib/t3_delay.c
@@ -0,0 +1,97 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------------------------ t3_delay ---------------------------- */
+static t_class *t3_delay_class;
+
+typedef struct _t3_delay
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ double x_deltime;
+ double x_ticks2ms;
+ double x_t3_bang;
+} t_t3_delay;
+
+static void t3_delay_tick(t_t3_delay *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_t3_bang);
+}
+
+static void t3_delay_stop(t_t3_delay *x)
+{
+ clock_unset(x->x_clock);
+}
+
+static void t3_delay_float(t_t3_delay *x, t_floatarg t3_bang)
+{
+ double dticks;
+ int iticks;
+
+ if(t3_bang < 0)
+ t3_bang = 0;
+ dticks = (x->x_deltime + (double)t3_bang)/x->x_ticks2ms;
+ iticks = (int)dticks;
+ x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms;
+ clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms);
+}
+
+static void t3_delay_ft1(t_t3_delay *x, t_floatarg f)
+{
+ if(f < 0)
+ f = 0;
+ x->x_deltime = f;
+}
+
+static void t3_delay_list(t_t3_delay *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1))
+ {
+ t3_delay_ft1(x, atom_getfloatarg(1, ac, av));
+ t3_delay_float(x, atom_getfloatarg(0, ac, av));
+ }
+}
+
+static void t3_delay_free(t_t3_delay *x)
+{
+ clock_free(x->x_clock);
+}
+
+static void *t3_delay_new(t_floatarg f)
+{
+ t_t3_delay *x = (t_t3_delay *)pd_new(t3_delay_class);
+
+ x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr();
+ t3_delay_ft1(x, f);
+ x->x_clock = clock_new(x, (t_method)t3_delay_tick);
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1"));
+ return (x);
+}
+
+void t3_delay_setup(void)
+{
+ t3_delay_class = class_new(gensym("t3_delay"), (t_newmethod)t3_delay_new,
+ (t_method)t3_delay_free, sizeof(t_t3_delay), 0, A_DEFFLOAT, 0);
+ class_addcreator((t_newmethod)t3_delay_new, gensym("t3_del"), A_DEFFLOAT, 0);
+ class_addmethod(t3_delay_class, (t_method)t3_delay_stop, gensym("stop"), 0);
+ class_addmethod(t3_delay_class, (t_method)t3_delay_ft1,
+ gensym("ft1"), A_FLOAT, 0);
+ class_addfloat(t3_delay_class, (t_method)t3_delay_float);
+ class_addlist(t3_delay_class, (t_method)t3_delay_list);
+ class_sethelpsymbol(t3_delay_class, gensym("iemhelp/help-t3_delay"));
+}
+
diff --git a/src/iem_t3_lib/t3_metro.c b/src/iem_t3_lib/t3_metro.c
new file mode 100644
index 0000000..b33ad7e
--- /dev/null
+++ b/src/iem_t3_lib/t3_metro.c
@@ -0,0 +1,121 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------------------------ t3_metro ---------------------------- */
+static t_class *t3_metro_class;
+
+typedef struct _t3_metro
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ double x_metrotime;
+ double x_ticks2ms;
+ double x_t3_bang;
+ int x_hit;
+ void *x_out_next;
+} t_t3_metro;
+
+static void t3_metro_stop(t_t3_metro *x)
+{
+ clock_unset(x->x_clock);
+}
+
+static void t3_metro_tick(t_t3_metro *x)
+{
+ double dticks;
+ int iticks;
+
+ x->x_hit = 0;
+ outlet_float(x->x_out_next, x->x_metrotime);
+ outlet_float(x->x_obj.ob_outlet, x->x_t3_bang);
+ dticks = (x->x_metrotime + x->x_t3_bang)/x->x_ticks2ms;
+ iticks = (int)dticks;
+ x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms;
+ if(!x->x_hit)
+ clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms);
+}
+
+static void t3_metro_float(t_t3_metro *x, t_floatarg t3_bang)
+{
+ double dticks;
+ int iticks;
+
+ if(t3_bang < 0)
+ t3_bang = 0;
+ dticks = (double)t3_bang/x->x_ticks2ms;
+ iticks = (int)dticks;
+ x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms;
+ clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms);
+ x->x_hit = 1;
+}
+
+static void t3_metro_start(t_t3_metro *x, t_floatarg f)
+{
+ t3_metro_float(x, f);
+ x->x_hit = 1;
+}
+
+static void t3_metro_ft1(t_t3_metro *x, t_floatarg f)
+{
+ if(f < 0.01) f = 0.01;
+ x->x_metrotime = (double)f;
+}
+
+static void t3_metro_list(t_t3_metro *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1))
+ {
+ t3_metro_ft1(x, atom_getfloatarg(1, ac, av));
+ t3_metro_float(x, atom_getfloatarg(0, ac, av));
+ }
+}
+
+static void t3_metro_free(t_t3_metro *x)
+{
+ clock_free(x->x_clock);
+}
+
+static void *t3_metro_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_t3_metro *x = (t_t3_metro *)pd_new(t3_metro_class);
+
+ x->x_metrotime = 10.0;
+ x->x_t3_bang = 0.0;
+ x->x_hit = 0;
+ if((ac == 1)&&IS_A_FLOAT(av,0))
+ {
+ t3_metro_ft1(x, atom_getfloatarg(0, ac, av));
+ }
+ x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr();
+ x->x_clock = clock_new(x, (t_method)t3_metro_tick);
+ outlet_new(&x->x_obj, &s_float);
+ x->x_out_next = outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1"));
+ return (x);
+}
+
+void t3_metro_setup(void)
+{
+ t3_metro_class = class_new(gensym("t3_metro"), (t_newmethod)t3_metro_new,
+ (t_method)t3_metro_free, sizeof(t_t3_metro), 0, A_GIMME, 0);
+ class_addmethod(t3_metro_class, (t_method)t3_metro_stop, gensym("stop"), 0);
+ class_addmethod(t3_metro_class, (t_method)t3_metro_start, gensym("start"), A_FLOAT, 0);
+ class_addmethod(t3_metro_class, (t_method)t3_metro_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addfloat(t3_metro_class, (t_method)t3_metro_float);
+ class_addlist(t3_metro_class, (t_method)t3_metro_list);
+ class_sethelpsymbol(t3_metro_class, gensym("iemhelp/help-t3_metro"));
+}
+
diff --git a/src/iem_t3_lib/t3_timer.c b/src/iem_t3_lib/t3_timer.c
new file mode 100644
index 0000000..c52a926
--- /dev/null
+++ b/src/iem_t3_lib/t3_timer.c
@@ -0,0 +1,55 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iem_t3_lib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- t3_timer ------------------------------ */
+static t_class *t3_timer_class;
+
+typedef struct _t3_timer
+{
+ t_object x_obj;
+ double x_settime;
+ double x_t3_off;
+} t_t3_timer;
+
+static void t3_timer_float(t_t3_timer *x, t_float t3_bang)
+{
+ x->x_settime = (double)clock_getsystime();
+ x->x_t3_off = (double)t3_bang;
+}
+
+static void t3_timer_ft1(t_t3_timer *x, t_float t3_bang)
+{
+ outlet_float(x->x_obj.ob_outlet, clock_gettimesince(x->x_settime)
+ + (double)t3_bang - x->x_t3_off);
+}
+
+static void *t3_timer_new(void)
+{
+ t_t3_timer *x = (t_t3_timer *)pd_new(t3_timer_class);
+ t3_timer_float(x, 0.0);
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ return (x);
+}
+
+void t3_timer_setup(void)
+{
+ t3_timer_class = class_new(gensym("t3_timer"), (t_newmethod)t3_timer_new, 0,
+ sizeof(t_t3_timer), 0, 0);
+ class_addfloat(t3_timer_class, t3_timer_float);
+ class_addmethod(t3_timer_class, (t_method)t3_timer_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_sethelpsymbol(t3_timer_class, gensym("iemhelp/help-t3_timer"));
+}
diff --git a/src/iemlib1/biquad_freq_resp.c b/src/iemlib1/biquad_freq_resp.c
new file mode 100644
index 0000000..3ebe25d
--- /dev/null
+++ b/src/iemlib1/biquad_freq_resp.c
@@ -0,0 +1,92 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* --------------------------- biquad_freq_resp ----------------------------- */
+
+typedef struct _biquad_freq_resp
+{
+ t_object x_obj;
+ float a0;
+ float a1;
+ float a2;
+ float b1;
+ float b2;
+ t_outlet *x_out_re;
+ t_outlet *x_out_im;
+} t_biquad_freq_resp;
+
+static t_class *biquad_freq_resp_class;
+
+static void biquad_freq_resp_float(t_biquad_freq_resp *x, t_float f)
+{
+ float re1, im1, re2, im2;
+ float c, s, a;
+
+ if(f < 0.0f)
+ f = 0.0f;
+ else if(f > 180.0f)
+ f = 180.0;
+ f *= 3.14159265f;
+ f /= 180.0f;
+
+ c = cos(f);
+ s = sin(f);
+
+ re1 = x->a0 + x->a1*c + x->a2*(c*c - s*s);
+ im1 = x->a1*s + x->a2*2.0f*(s*c);
+ re2 = 1.0f - x->b1*c - x->b2*(c*c - s*s);
+ im2 = -x->b1*s - x->b2*2.0f*(s*c);
+ a = re2*re2 + im2*im2;
+ outlet_float(x->x_out_im, (re1*im2 - re2*im1)/a);/* because z^-1 = e^-jwt, negative sign */
+ outlet_float(x->x_out_re, (re1*re2 + im1*im2)/a);
+
+}
+/* y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
+
+static void biquad_freq_resp_list(t_biquad_freq_resp *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if((argc == 5)&&IS_A_FLOAT(argv,4)&&IS_A_FLOAT(argv,3)&&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,0))
+ {
+ x->b1 = (float)atom_getfloatarg(0, argc, argv);
+ x->b2 = (float)atom_getfloatarg(1, argc, argv);
+ x->a0 = (float)atom_getfloatarg(2, argc, argv);
+ x->a1 = (float)atom_getfloatarg(3, argc, argv);
+ x->a2 = (float)atom_getfloatarg(4, argc, argv);
+ }
+}
+
+static void *biquad_freq_resp_new(void)
+{
+ t_biquad_freq_resp *x = (t_biquad_freq_resp *)pd_new(biquad_freq_resp_class);
+ x->x_out_re = outlet_new(&x->x_obj, &s_float);
+ x->x_out_im = outlet_new(&x->x_obj, &s_float);
+ x->b1 = 0.0f;
+ x->b2 = 0.0f;
+ x->a0 = 0.0f;
+ x->a1 = 0.0f;
+ x->a2 = 0.0f;
+ return (x);
+}
+
+void biquad_freq_resp_setup(void)
+{
+ biquad_freq_resp_class = class_new(gensym("biquad_freq_resp"), (t_newmethod)biquad_freq_resp_new, 0,
+ sizeof(t_biquad_freq_resp), 0, 0);
+ class_addfloat(biquad_freq_resp_class, biquad_freq_resp_float);
+ class_addlist(biquad_freq_resp_class, (t_method)biquad_freq_resp_list);
+ class_sethelpsymbol(biquad_freq_resp_class, gensym("iemhelp/help-biquad_freq_resp"));
+} \ No newline at end of file
diff --git a/src/iemlib1/db2v.c b/src/iemlib1/db2v.c
new file mode 100644
index 0000000..bbf1c21
--- /dev/null
+++ b/src/iemlib1/db2v.c
@@ -0,0 +1,45 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- db2v - dB to value converter. ----------------- */
+
+static t_class *db2v_class;
+
+float db2v(float f)
+{
+ return (f <= -199.9 ? 0 : exp(0.11512925465 * f));
+}
+
+static void db2v_float(t_object *x, t_float f)
+{
+ outlet_float(x->ob_outlet, db2v(f));
+}
+
+static void *db2v_new(void)
+{
+ t_object *x = (t_object *)pd_new(db2v_class);
+ outlet_new(x, &s_float);
+ return (x);
+}
+
+void db2v_setup(void)
+{
+ db2v_class = class_new(gensym("db2v"), db2v_new, 0,
+ sizeof(t_object), 0, 0);
+ class_addfloat(db2v_class, (t_method)db2v_float);
+ class_sethelpsymbol(db2v_class, gensym("iemhelp/help-db2v"));
+}
diff --git a/src/iemlib1/f2note.c b/src/iemlib1/f2note.c
new file mode 100644
index 0000000..4df6612
--- /dev/null
+++ b/src/iemlib1/f2note.c
@@ -0,0 +1,189 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------ frequency to note plus cents converter --------- */
+
+typedef struct _f2note
+{
+ t_object x_obj;
+ void *x_outlet_midi;
+ void *x_outlet_note;
+ void *x_outlet_cent;
+ int x_centomidi;
+ float x_refhz;
+ float x_refexp;
+ float x_reflog;
+ t_symbol *x_set;
+} t_f2note;
+
+static t_class *f2note_class;
+
+float f2note_mtof(t_f2note *x, float midi)
+{
+ return(x->x_refexp * exp(0.057762265047 * midi));
+}
+
+float f2note_ftom(t_f2note *x, float freq)
+{
+ return (freq > 0 ? 17.31234049 * log(x->x_reflog * freq) : -1500);
+}
+
+void f2note_calc_ref(t_f2note *x)
+{
+ float ln2=log(2.0);
+
+ x->x_refexp = x->x_refhz*exp(-5.75*ln2);
+ x->x_reflog = 1.0/x->x_refexp;
+}
+
+static void f2note_make_note(char *str, int midi)
+{
+ int j,k,l=0;
+
+ j = midi / 12;
+ k = midi % 12;
+ if(k <= 5)
+ {
+ if(k <= 2)
+ {
+ if(k==0)
+ str[l]='c';
+ else if(k==1)
+ {
+ str[l++]='#';
+ str[l]='c';
+ }
+ else
+ str[l]='d';
+ }
+ else
+ {
+ if(k==3)
+ {
+ str[l++]='#';
+ str[l]='d';
+ }
+ else if(k==4)
+ str[l]='e';
+ else
+ str[l]='f';
+ }
+ }
+ else
+ {
+ if(k <= 8)
+ {
+ if(k==6)
+ {
+ str[l++]='#';
+ str[l]='f';
+ }
+ else if(k==7)
+ str[l]='g';
+ else
+ {
+ str[l++]='#';
+ str[l]='g';
+ }
+ }
+ else
+ {
+ if(k==9)
+ str[l]='a';
+ else if(k==10)
+ {
+ str[l++]='#';
+ str[l]='a';
+ }
+ else
+ str[l]='h';
+ }
+ }
+
+ if(j < 4)
+ {
+ str[l] -= 'a';
+ str[l] += 'A';
+ }
+ l++;
+ if(j < 3)
+ {
+ str[l++] = '0' + (char)(3 - j);
+ }
+ else if(j > 4)
+ {
+ str[l++] = '0' + (char)(j - 4);
+ }
+ str[l] = 0;
+}
+
+static void f2note_bang(t_f2note *x)
+{
+ int i,j;
+ t_atom at;
+ char s[4];
+
+ i = (x->x_centomidi + 50)/100;
+ j = x->x_centomidi - 100*i;
+ outlet_float(x->x_outlet_cent, (float)j);
+ f2note_make_note(s, i);
+ SETSYMBOL(&at, gensym(s));
+ outlet_anything(x->x_outlet_note, x->x_set, 1, &at);
+ outlet_float(x->x_outlet_midi, 0.01*(float)(x->x_centomidi));
+}
+
+static void f2note_float(t_f2note *x, t_floatarg freq)
+{
+ x->x_centomidi = (int)(100.0*f2note_ftom(x, freq) + 0.5);
+ f2note_bang(x);
+}
+
+void f2note_ref(t_f2note *x, t_floatarg ref)
+{
+ x->x_refhz = ref;
+ f2note_calc_ref(x);
+}
+
+static void *f2note_new(t_floatarg ref)
+{
+ t_f2note *x = (t_f2note *)pd_new(f2note_class);
+
+ if(ref == 0.0)
+ ref=440.0;
+ x->x_refhz = ref;
+ x->x_centomidi = (int)(100.0*ref + 0.499);
+ f2note_calc_ref(x);
+ x->x_outlet_midi = outlet_new(&x->x_obj, &s_float);
+ x->x_outlet_note = outlet_new(&x->x_obj, &s_list);
+ x->x_outlet_cent = outlet_new(&x->x_obj, &s_float);
+ x->x_set = gensym("set");
+ return (x);
+}
+
+static void f2note_free(t_f2note *x)
+{
+}
+
+void f2note_setup(void)
+{
+ f2note_class = class_new(gensym("f2note"), (t_newmethod)f2note_new, (t_method)f2note_free,
+ sizeof(t_f2note), 0, A_DEFFLOAT, 0);
+ class_addbang(f2note_class,f2note_bang);
+ class_addfloat(f2note_class,f2note_float);
+ class_addmethod(f2note_class, (t_method)f2note_ref, gensym("ref"), A_FLOAT, 0);
+ class_sethelpsymbol(f2note_class, gensym("iemhelp/help-f2note"));
+}
diff --git a/src/iemlib1/forpp.c b/src/iemlib1/forpp.c
new file mode 100644
index 0000000..3e98539
--- /dev/null
+++ b/src/iemlib1/forpp.c
@@ -0,0 +1,192 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- forpp ------------------------------ */
+
+typedef struct _forpp
+{
+ t_object x_obj;
+ int x_beg;
+ int x_end;
+ float x_delay;
+ int x_cur;
+ int x_incr;
+ void *x_out_end;
+ void *x_clock;
+ void *x_clock2;
+} t_forpp;
+
+static t_class *forpp_class;
+
+static void forpp_tick2(t_forpp *x)
+{
+ outlet_bang(x->x_out_end);
+ clock_unset(x->x_clock2);
+}
+
+static void forpp_tick(t_forpp *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_cur);
+ x->x_cur += x->x_incr;
+ if(x->x_incr > 0)
+ {
+ if(x->x_cur <= x->x_end)
+ clock_delay(x->x_clock, x->x_delay);
+ else
+ {
+ clock_unset(x->x_clock);
+ clock_delay(x->x_clock2, x->x_delay);
+ }
+ }
+ else
+ {
+ if(x->x_cur >= x->x_end)
+ clock_delay(x->x_clock, x->x_delay);
+ else
+ {
+ clock_unset(x->x_clock);
+ clock_delay(x->x_clock2, x->x_delay);
+ }
+ }
+}
+
+static void forpp_bang(t_forpp *x)
+{
+ x->x_cur = x->x_beg;
+ outlet_float(x->x_obj.ob_outlet, x->x_cur);
+ x->x_cur += x->x_incr;
+ if(x->x_incr > 0)
+ {
+ if(x->x_cur <= x->x_end)
+ clock_delay(x->x_clock, x->x_delay);
+ else
+ {
+ clock_unset(x->x_clock);
+ clock_delay(x->x_clock2, x->x_delay);
+ }
+ }
+ else
+ {
+ if(x->x_cur >= x->x_end)
+ clock_delay(x->x_clock, x->x_delay);
+ else
+ {
+ clock_unset(x->x_clock);
+ clock_delay(x->x_clock2, x->x_delay);
+ }
+ }
+
+}
+
+static void forpp_start(t_forpp *x)
+{
+ forpp_bang(x);
+}
+
+static void forpp_stop(t_forpp *x)
+{
+ if(x->x_incr > 0)
+ x->x_cur = x->x_end + 1;
+ else
+ x->x_cur = x->x_end - 1;
+ clock_unset(x->x_clock);
+ clock_unset(x->x_clock2);
+}
+
+static void forpp_float(t_forpp *x, t_float beg)
+{
+ x->x_beg = (int)beg;
+ if(x->x_end < x->x_beg)
+ x->x_incr = -1;
+ else
+ x->x_incr = 1;
+}
+
+static void forpp_ft1(t_forpp *x, t_float end)
+{
+ x->x_end = (int)end;
+ if(x->x_end < x->x_beg)
+ x->x_incr = -1;
+ else
+ x->x_incr = 1;
+}
+
+static void forpp_ft2(t_forpp *x, t_float delay)
+{
+ if(delay < 0.0)
+ delay = 0.0;
+ x->x_delay = delay;
+}
+
+static void forpp_list(t_forpp *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(argc == 2)
+ {
+ forpp_float(x, atom_getfloatarg(0, argc, argv));
+ forpp_ft1(x, atom_getfloatarg(1, argc, argv));
+ }
+ else if(argc == 3)
+ {
+ forpp_float(x, atom_getfloatarg(0, argc, argv));
+ forpp_ft1(x, atom_getfloatarg(1, argc, argv));
+ forpp_ft2(x, atom_getfloatarg(2, argc, argv));
+ }
+}
+
+static void *forpp_new(t_floatarg beg, t_floatarg end, t_floatarg delay)
+{
+ t_forpp *x = (t_forpp *)pd_new(forpp_class);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ outlet_new(&x->x_obj, &s_float);
+ x->x_out_end = outlet_new(&x->x_obj, &s_bang);
+ x->x_clock = clock_new(x, (t_method)forpp_tick);
+ x->x_clock2 = clock_new(x, (t_method)forpp_tick2);
+ x->x_beg = (int)beg;
+ x->x_end = (int)end;
+ if(x->x_end < x->x_beg)
+ x->x_incr = -1;
+ else
+ x->x_incr = 1;
+ if(delay < 0.0)
+ delay = 0.0;
+ x->x_delay = delay;
+ x->x_cur = x->x_beg;
+ return(x);
+}
+
+static void forpp_ff(t_forpp *x)
+{
+ clock_free(x->x_clock);
+ clock_free(x->x_clock2);
+}
+
+void forpp_setup(void)
+{
+ forpp_class = class_new(gensym("for++"), (t_newmethod)forpp_new,
+ (t_method)forpp_ff, sizeof(t_forpp),
+ 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addbang(forpp_class, forpp_bang);
+ class_addfloat(forpp_class, forpp_float);
+ class_addlist(forpp_class, forpp_list);
+ class_addmethod(forpp_class, (t_method)forpp_start, gensym("start"), 0);
+ class_addmethod(forpp_class, (t_method)forpp_stop, gensym("stop"), 0);
+ class_addmethod(forpp_class, (t_method)forpp_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(forpp_class, (t_method)forpp_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_sethelpsymbol(forpp_class, gensym("iemhelp/help-for++"));
+}
diff --git a/src/iemlib1/gate.c b/src/iemlib1/gate.c
new file mode 100644
index 0000000..957ee07
--- /dev/null
+++ b/src/iemlib1/gate.c
@@ -0,0 +1,84 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- gate ------------------------------ */
+
+typedef struct _gate
+{
+ t_object x_obj;
+ float x_state;
+} t_gate;
+
+static t_class *gate_class;
+
+static void gate_bang(t_gate *x)
+{
+ if(x->x_state != 0)
+ outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void gate_pointer(t_gate *x, t_gpointer *gp)
+{
+ if(x->x_state != 0)
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}
+
+static void gate_float(t_gate *x, t_floatarg f)
+{
+ if(x->x_state != 0)
+ outlet_float(x->x_obj.ob_outlet, f);
+}
+
+static void gate_symbol(t_gate *x, t_symbol *s)
+{
+ if(x->x_state != 0)
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void gate_list(t_gate *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(x->x_state != 0)
+ outlet_list(x->x_obj.ob_outlet, s, argc, argv);
+}
+
+static void gate_anything(t_gate *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(x->x_state != 0)
+ outlet_anything(x->x_obj.ob_outlet, s, argc, argv);
+}
+
+static void *gate_new(t_floatarg f)
+{
+ t_gate *x = (t_gate *)pd_new(gate_class);
+ floatinlet_new(&x->x_obj, &x->x_state);
+ outlet_new(&x->x_obj, 0);
+ x->x_state = (f==0.0)?0:1;
+ return (x);
+}
+
+void gate_setup(void)
+{
+ gate_class = class_new(gensym("gate"), (t_newmethod)gate_new, 0,
+ sizeof(t_gate), 0, A_DEFFLOAT, 0);
+ class_addbang(gate_class, gate_bang);
+ class_addpointer(gate_class, gate_pointer);
+ class_addfloat(gate_class, gate_float);
+ class_addsymbol(gate_class, gate_symbol);
+ class_addlist(gate_class, gate_list);
+ class_addanything(gate_class, gate_anything);
+ class_sethelpsymbol(gate_class, gensym("iemhelp/help-gate"));
+}
diff --git a/src/iemlib1/iemlib.h b/src/iemlib1/iemlib.h
new file mode 100644
index 0000000..cc882b1
--- /dev/null
+++ b/src/iemlib1/iemlib.h
@@ -0,0 +1,98 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifndef __IEMLIB_H__
+#define __IEMLIB_H__
+
+
+#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
+#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
+#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
+#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
+#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
+#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
+#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
+
+
+#ifdef NT
+int sys_noloadbang;
+//t_symbol *iemgui_key_sym=0;
+#include <io.h>
+#else
+extern int sys_noloadbang;
+//extern t_symbol *iemgui_key_sym;
+#include <unistd.h>
+#endif
+
+#define DEFDELVS 64
+#define XTRASAMPS 4
+#define SAMPBLK 4
+
+
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#else
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#else
+#ifdef __FreeBSD__
+#include <machine/endian.h>
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif
+#ifdef __linux__
+
+#include <endian.h>
+
+#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+
+#include <sys/types.h>
+#define int32 int32_t
+
+#else
+#ifdef __APPLE__
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 int /* a data type that has 32 bits */
+
+#endif /* __APPLE__ */
+#endif /* __linux__ */
+#endif /* MSW */
+#endif /* SGI */
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+#endif
diff --git a/src/iemlib1/iemlib1.c b/src/iemlib1/iemlib1.c
new file mode 100644
index 0000000..3700c40
--- /dev/null
+++ b/src/iemlib1/iemlib1.c
@@ -0,0 +1,82 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+
+static t_class *iemlib1_class;
+
+static void *iemlib1_new(void)
+{
+ t_object *x = (t_object *)pd_new(iemlib1_class);
+
+ return (x);
+}
+
+void biquad_freq_resp_setup(void);
+void db2v_setup(void);
+void f2note_setup(void);
+void forpp_setup(void);
+void gate_setup(void);
+void sigfilter_setup(void);
+void sigFIR_setup(void);
+void sighml_shelf_setup(void);
+void sigiem_cot4_setup(void);
+void sigiem_delay_setup(void);
+void sigiem_sqrt4_setup(void);
+void sigiem_pow4_setup(void);
+void siglp1_t_setup(void);
+void sigmov_avrg_kern_setup(void);
+void sigpara_bp2_setup(void);
+void sigpeakenv_setup(void);
+void sigprvu_setup(void);
+void sigpvu_setup(void);
+void sigrvu_setup(void);
+void sigsin_phase_setup(void);
+void sigvcf_filter_setup(void);
+void soundfile_info_setup(void);
+void split_setup(void);
+void v2db_setup(void);
+
+/* ------------------------ setup routine ------------------------- */
+
+void iemlib1_setup(void)
+{
+ iemlib1_class = class_new(gensym("iemlib1"), iemlib1_new, 0,
+ sizeof(t_object), CLASS_NOINLET, 0);
+
+ biquad_freq_resp_setup();
+ db2v_setup();
+ f2note_setup();
+ forpp_setup();
+ gate_setup();
+ sigfilter_setup();
+ sigFIR_setup();
+ sighml_shelf_setup();
+ sigiem_cot4_setup();
+ sigiem_delay_setup();
+ sigiem_sqrt4_setup();
+ sigiem_pow4_setup();
+ siglp1_t_setup();
+ sigmov_avrg_kern_setup();
+ sigpara_bp2_setup();
+ sigpeakenv_setup();
+ sigprvu_setup();
+ sigpvu_setup();
+ sigrvu_setup();
+ sigsin_phase_setup();
+ sigvcf_filter_setup();
+ soundfile_info_setup();
+ split_setup();
+ v2db_setup();
+
+ post("iemlib1 (R-1.15) library loaded!");
+}
diff --git a/src/iemlib1/iemlib1.dsp b/src/iemlib1/iemlib1.dsp
new file mode 100644
index 0000000..7d63ad2
--- /dev/null
+++ b/src/iemlib1/iemlib1.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iemlib1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iemlib1 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "iemlib1.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "iemlib1.mak" CFG="iemlib1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "iemlib1 - Win32 Release" (basierend auf "Win32 (x86) External Target")
+!MESSAGE "iemlib1 - Win32 Debug" (basierend auf "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "iemlib1 - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iemlib1.exe"
+# PROP Bsc_Name "iemlib1.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "iemlib1 - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iemlib1.exe"
+# PROP Bsc_Name "iemlib1.bsc"
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "iemlib1 - Win32 Release"
+# Name "iemlib1 - Win32 Debug"
+
+!IF "$(CFG)" == "iemlib1 - Win32 Release"
+
+!ELSEIF "$(CFG)" == "iemlib1 - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/src/iemlib1/iemlib1.dsw b/src/iemlib1/iemlib1.dsw
new file mode 100644
index 0000000..c8260a7
--- /dev/null
+++ b/src/iemlib1/iemlib1.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iemlib1"=.\iemlib1.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/iemlib1/makefile b/src/iemlib1/makefile
new file mode 100644
index 0000000..c8148cf
--- /dev/null
+++ b/src/iemlib1/makefile
@@ -0,0 +1,72 @@
+current: all
+
+.SUFFIXES: .pd_linux
+
+INCLUDE = -I. -I/usr/local/src/pd/src
+
+LDFLAGS = -export-dynamic -shared
+LIB = -ldl -lm -lpthread
+
+#select either the DBG and OPT compiler flags below:
+
+CFLAGS = -DPD -DUNIX -Wall -W -Werror -Wno-unused \
+ -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer \
+ -DDL_OPEN
+
+SYSTEM = $(shell uname -m)
+
+# the sources
+
+SRC = biquad_freq_resp.c \
+ db2v.c \
+ f2note.c \
+ forpp.c \
+ gate.c \
+ sigfilter.c \
+ sigFIR.c \
+ sighml_shelf.c \
+ sigiem_cot4.c \
+ sigiem_delay.c \
+ sigiem_pow4.c \
+ sigiem_sqrt4.c \
+ siglp1_t.c \
+ sigmov_avrg_kern.c \
+ sigpara_bp2.c \
+ sigpeakenv.c \
+ sigprvu.c \
+ sigpvu.c \
+ sigrvu.c \
+ sigsin_phase.c \
+ sigvcf_filter.c \
+ soundfile_info.c \
+ split.c \
+ v2db.c \
+ iemlib1.c
+
+TARGET = iemlib1.pd_linux
+
+
+OBJ = $(SRC:.c=.o)
+
+#
+# ------------------ targets ------------------------------------
+#
+
+clean:
+ rm ../../lib/$(TARGET)
+ rm *.o
+
+all: $(OBJ)
+ @echo :: $(OBJ)
+ ld $(LDFLAGS) -o $(TARGET) *.o $(LIB)
+ strip --strip-unneeded $(TARGET)
+ mv $(TARGET) ../../lib
+ rm *.o
+
+$(OBJ) : %.o : %.c
+ touch $*.c
+ cc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+
+
+
+
diff --git a/src/iemlib1/makefile.darwin b/src/iemlib1/makefile.darwin
new file mode 100644
index 0000000..338310e
--- /dev/null
+++ b/src/iemlib1/makefile.darwin
@@ -0,0 +1,72 @@
+current: all
+
+.SUFFIXES: .pd_darwin
+
+INCLUDE = -I. -I/usr/local/src/pd-0.37-1test6/src
+
+LDFLAGS = -export-dynamic -shared
+LIB = -ldl -lm -lpthread
+
+#select either the DBG and OPT compiler flags below:
+
+CFLAGS = -DPD -DUNIX -g -Wall -W -Werror -Wno-unused \
+ -Wno-parentheses -Wno-switch -O2 $(INCLUDE) $(UCFLAGS) $(AFLAGS) \
+
+MACOSXLINKFLAGS = -bundle -bundle_loader /usr/local/src/pd-0.37-1test6/bin/pd
+
+SYSTEM = $(shell uname -m)
+
+# the sources
+
+SRC = biquad_freq_resp.c \
+ db2v.c \
+ f2note.c \
+ forpp.c \
+ gate.c \
+ sigfilter.c \
+ sigFIR.c \
+ sighml_shelf.c \
+ sigiem_cot4.c \
+ sigiem_delay.c \
+ sigiem_pow4.c \
+ sigiem_sqrt4.c \
+ siglp1_t.c \
+ sigmov_avrg_kern.c \
+ sigpara_bp2.c \
+ sigpeakenv.c \
+ sigprvu.c \
+ sigpvu.c \
+ sigrvu.c \
+ sigsin_phase.c \
+ sigvcf_filter.c \
+ soundfile_info.c \
+ split.c \
+ v2db.c \
+ iemlib1.c
+
+TARGET = iemlib1.pd_darwin
+
+
+OBJ = $(SRC:.c=.o)
+
+#
+# ------------------ targets ------------------------------------
+#
+
+clean:
+ rm ../../lib/$(TARGET)
+ rm *.o
+
+all: $(OBJ)
+ @echo :: $(OBJ)
+ $(CC) $(MACOSXLINKFLAGS) -o $(TARGET) *.o $(LIB)
+ strip --strip-unneeded $(TARGET)
+ mv $(TARGET) ../../lib
+
+$(OBJ) : %.o : %.c
+ touch $*.c
+ $(CC) $(CFLAGS) -DPD $(INCLUDE) -c -o $*.o $*.c
+
+
+
+
diff --git a/src/iemlib1/makefile_win b/src/iemlib1/makefile_win
new file mode 100644
index 0000000..8ab353c
--- /dev/null
+++ b/src/iemlib1/makefile_win
@@ -0,0 +1,61 @@
+
+all: ..\..\lib\iemlib1.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+ $(VIS_CPP_PATH)\lib\libc.lib \
+ $(VIS_CPP_PATH)\lib\oldnames.lib \
+ $(VIS_CPP_PATH)\lib\kernel32.lib \
+ $(VIS_CPP_PATH)\lib\wsock32.lib \
+ $(VIS_CPP_PATH)\lib\winmm.lib \
+ $(PD_INST_PATH)\bin\pthreadVC.lib \
+ $(PD_INST_PATH)\bin\pd.lib
+
+
+SRC = biquad_freq_resp.c \
+ db2v.c \
+ f2note.c \
+ forpp.c \
+ gate.c \
+ sigfilter.c \
+ sigFIR.c \
+ sighml_shelf.c \
+ sigiem_cot4.c \
+ sigiem_delay.c \
+ sigiem_sqrt4.c \
+ sigiem_pow4.c \
+ siglp1_t.c \
+ sigmov_avrg_kern.c \
+ sigpara_bp2.c \
+ sigpeakenv.c \
+ sigprvu.c \
+ sigpvu.c \
+ sigrvu.c \
+ sigsin_phase.c \
+ sigvcf_filter.c \
+ soundfile_info.c \
+ split.c \
+ v2db.c \
+ iemlib1.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+ cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\..\lib\iemlib1.dll: $(OBJ)
+ link $(PD_WIN_L_FLAGS) /dll /export:iemlib1_setup \
+ /out:..\..\lib\iemlib1.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+ del *.obj
diff --git a/src/iemlib1/sigFIR.c b/src/iemlib1/sigFIR.c
new file mode 100644
index 0000000..51c9de0
--- /dev/null
+++ b/src/iemlib1/sigFIR.c
@@ -0,0 +1,177 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* ---------- FIR~ - FIR-filter with table~-coef ----------- */
+
+typedef struct sigFIR
+{
+ t_object x_obj;
+ float *x_coef_beg;
+ float *x_history_beg;
+ int x_rw_index;
+ int x_fir_order;
+ t_symbol *x_table_name;
+ float x_msi;
+} t_sigFIR;
+
+t_class *sigFIR_class;
+
+static t_int *sigFIR_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigFIR *x = (t_sigFIR *)(w[3]);
+ int n = (t_int)(w[4]);
+ int rw_index = x->x_rw_index;
+ int i, j;
+ int order = x->x_fir_order;
+ int ord16 = order / 16;
+ float sum=0.0f;
+ float *coef = x->x_coef_beg;
+ float *write_hist1=x->x_history_beg;
+ float *write_hist2;
+ float *read_hist;
+ float *coef_vec;
+ float *hist_vec;
+
+ if(!coef)
+ goto sigFIRperfzero;
+
+ write_hist1 = x->x_history_beg;
+ write_hist2 = write_hist1 + order;
+ read_hist = write_hist2;
+
+ for(i=0; i<n; i++)
+ {
+ write_hist1[rw_index] = in[i];
+ write_hist2[rw_index] = in[i];
+
+ sum = 0.0f;
+ coef_vec = coef;
+ hist_vec = &read_hist[rw_index];
+ for(j=0; j<ord16; j++)
+ {
+ sum += coef_vec[0] * hist_vec[0];
+ sum += coef_vec[1] * hist_vec[-1];
+ sum += coef_vec[2] * hist_vec[-2];
+ sum += coef_vec[3] * hist_vec[-3];
+ sum += coef_vec[4] * hist_vec[-4];
+ sum += coef_vec[5] * hist_vec[-5];
+ sum += coef_vec[6] * hist_vec[-6];
+ sum += coef_vec[7] * hist_vec[-7];
+ sum += coef_vec[8] * hist_vec[-8];
+ sum += coef_vec[9] * hist_vec[-9];
+ sum += coef_vec[10] * hist_vec[-10];
+ sum += coef_vec[11] * hist_vec[-11];
+ sum += coef_vec[12] * hist_vec[-12];
+ sum += coef_vec[13] * hist_vec[-13];
+ sum += coef_vec[14] * hist_vec[-14];
+ sum += coef_vec[15] * hist_vec[-15];
+ coef_vec += 16;
+ hist_vec -= 16;
+ }
+ for(j=ord16*16; j<order; j++)
+ {
+ sum += coef[j] * read_hist[rw_index-j];
+ }
+ out[i] = sum;
+
+ rw_index++;
+ if(rw_index >= order)
+ rw_index -= order;
+ }
+
+ x->x_rw_index = rw_index;
+ return(w+5);
+
+sigFIRperfzero:
+
+ while(n--)
+ *out++ = 0.0f;
+ return(w+5);
+}
+
+void sigFIR_set(t_sigFIR *x, t_symbol *table_name, t_floatarg forder)
+{
+ t_garray *ga;
+ int table_size;
+ int order = (int)forder;
+
+ x->x_table_name = table_name;
+ if(!(ga = (t_garray *)pd_findbyclass(x->x_table_name, garray_class)))
+ {
+ if(*table_name->s_name)
+ error("FIR~: %s: no such table~", x->x_table_name->s_name);
+ x->x_coef_beg = 0;
+ }
+ else if(!garray_getfloatarray(ga, &table_size, &x->x_coef_beg))
+ {
+ error("%s: bad template for FIR~", x->x_table_name->s_name);
+ x->x_coef_beg = 0;
+ }
+ else if(table_size < order)
+ {
+ error("FIR~: tablesize %d < order %d !!!!", table_size, order);
+ x->x_coef_beg = 0;
+ }
+ else
+ garray_usedindsp(ga);
+ x->x_rw_index = 0;
+ if(order > x->x_fir_order)/* resize */
+ x->x_history_beg = (float *)resizebytes(x->x_history_beg, 2*x->x_fir_order*sizeof(float), 2*order*sizeof(float));
+ x->x_fir_order = order;
+}
+
+static void sigFIR_dsp(t_sigFIR *x, t_signal **sp)
+{
+ sigFIR_set(x, x->x_table_name, x->x_fir_order);
+ dsp_add(sigFIR_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigFIR_new(t_symbol *ref, t_floatarg np)
+{
+ t_sigFIR *x = (t_sigFIR *)pd_new(sigFIR_class);
+
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0;
+ x->x_table_name = ref;
+ x->x_coef_beg = 0;
+ if((int)np < 1)
+ np = 1.0;
+ x->x_fir_order = (int)np;
+ x->x_history_beg = (float *)getbytes((2*x->x_fir_order)*sizeof(float));
+ x->x_rw_index = 0;
+ return(x);
+}
+
+static void sigFIR_free(t_sigFIR *x)
+{
+ if(x->x_history_beg)
+ freebytes(x->x_history_beg, (2*x->x_fir_order)*sizeof(float));
+}
+
+void sigFIR_setup(void)
+{
+ sigFIR_class = class_new(gensym("FIR~"), (t_newmethod)sigFIR_new,
+ (t_method)sigFIR_free, sizeof(t_sigFIR), 0, A_DEFSYM, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigFIR_class, t_sigFIR, x_msi);
+ class_addmethod(sigFIR_class, (t_method)sigFIR_dsp, gensym("dsp"), 0);
+ class_addmethod(sigFIR_class, (t_method)sigFIR_set,
+ gensym("set"), A_SYMBOL, A_FLOAT, 0);
+ class_sethelpsymbol(sigFIR_class, gensym("iemhelp/help-FIR~"));
+}
diff --git a/src/iemlib1/sigfilter.c b/src/iemlib1/sigfilter.c
new file mode 100644
index 0000000..6a05206
--- /dev/null
+++ b/src/iemlib1/sigfilter.c
@@ -0,0 +1,822 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* ---------- filter~ - slow dynamic filter 1. and 2. order ----------- */
+
+typedef struct sigfilter
+{
+ t_object x_obj;
+ float wn1;
+ float wn2;
+ float a0;
+ float a1;
+ float a2;
+ float b1;
+ float b2;
+ float sr;
+ float cur_f;
+ float cur_l;
+ float cur_a;
+ float cur_b;
+ float delta_f;
+ float delta_a;
+ float delta_b;
+ float end_f;
+ float end_a;
+ float end_b;
+ float ticks_per_interpol_time;
+ float rcp_ticks;
+ float interpol_time;
+ int ticks;
+ int counter_f;
+ int counter_a;
+ int counter_b;
+ int inv;
+ int hp;
+ int first_order;
+ int event_mask;
+ void (*calc)();
+ void *x_debug_outlet;
+ t_atom x_at[5];
+ float x_msi;
+} t_sigfilter;
+
+t_class *sigfilter_class;
+
+static void sigfilter_snafu(t_sigfilter *x)
+{
+
+}
+
+static void sigfilter_lp1(t_sigfilter *x)
+{
+ float al;
+
+ al = x->cur_a * x->cur_l;
+ x->a0 = 1.0f/(1.0f + al);
+ x->a1 = x->a0;
+ x->b1 = (al - 1.0f)*x->a0;
+}
+
+static void sigfilter_lp2(t_sigfilter *x)
+{
+ float l, al, bl2, rcp;
+
+ l = x->cur_l;
+ al = l*x->cur_a;
+ bl2 = l*l*x->cur_b + 1.0f;
+ rcp = 1.0f/(al + bl2);
+ x->a0 = rcp;
+ x->a1 = 2.0f*rcp;
+ x->a2 = x->a0;
+ x->b1 = rcp*2.0f*(bl2 - 2.0f);
+ x->b2 = rcp*(al - bl2);
+}
+
+static void sigfilter_hp1(t_sigfilter *x)
+{
+ float al, rcp;
+
+ al = x->cur_a * x->cur_l;
+ rcp = 1.0f/(1.0f + al);
+ x->a0 = rcp*al;
+ x->a1 = -x->a0;
+ x->b1 = rcp*(al - 1.0f);
+}
+
+static void sigfilter_hp2(t_sigfilter *x)
+{
+ float l, al, bl2, rcp;
+
+ l = x->cur_l;
+ bl2 = l*l*x->cur_b + 1.0f;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + bl2);
+ x->a0 = rcp*(bl2 - 1.0f);
+ x->a1 = -2.0f*x->a0;
+ x->a2 = x->a0;
+ x->b1 = rcp*2.0f*(bl2 - 2.0f);
+ x->b2 = rcp*(al - bl2);
+}
+
+static void sigfilter_rp2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*l;
+ x->a2 = -x->a0;
+ x->b1 = rcp*2.0f*(l2 - 2.0f);
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_bp2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*al;
+ x->a2 = -x->a0;
+ x->b1 = rcp*2.0f*(l2 - 2.0f);
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_bs2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*l2;
+ x->a1 = rcp*2.0f*(2.0f - l2);
+ x->a2 = x->a0;
+ x->b1 = -x->a1;
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_rpw2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a/x->cur_f;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*l;
+ x->a2 = -x->a0;
+ x->b1 = rcp*2.0f*(l2 - 2.0f);
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_bpw2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a/x->cur_f;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*al;
+ x->a2 = -x->a0;
+ x->b1 = rcp*2.0f*(l2 - 2.0f);
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_bsw2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0f;
+ al = l*x->cur_a/x->cur_f;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*l2;
+ x->a1 = rcp*2.0f*(2.0f - l2);
+ x->a2 = x->a0;
+ x->b1 = -x->a1;
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigfilter_ap1(t_sigfilter *x)
+{
+ float al;
+
+ al = x->cur_a * x->cur_l;
+ x->a0 = (1.0f - al)/(1.0f + al);
+ x->b1 = -x->a0;
+}
+
+static void sigfilter_ap2(t_sigfilter *x)
+{
+ float l, al, bl2, rcp;
+
+ l = x->cur_l;
+ bl2 = l*l*x->cur_b + 1.0f;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + bl2);
+ x->a1 = rcp*2.0f*(2.0f - bl2);
+ x->a0 = rcp*(bl2 - al);
+ x->b1 = -x->a1;
+ x->b2 = -x->a0;
+}
+
+/*static void sigfilter_bp2(t_sigfilter *x)
+{
+ float l, al, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0;
+ al = l*x->cur_a;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*al;
+ x->a2 = -x->a0;
+ x->b1 = rcp*2.0f*(2.0f - l2);
+ x->b2 = rcp*(l2 - al);
+}*/
+
+static void sigfilter_dsp_tick(t_sigfilter *x)
+{
+ if(x->event_mask)
+ {
+ if(x->counter_f)
+ {
+ float l, si, co;
+
+ if(x->counter_f <= 1)
+ {
+ x->cur_f = x->end_f;
+ x->counter_f = 0;
+ x->event_mask &= 6;/*set event_mask_bit 0 = 0*/
+ }
+ else
+ {
+ x->counter_f--;
+ x->cur_f *= x->delta_f;
+ }
+ l = x->cur_f * x->sr;
+ if(l < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(l > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(l);
+ co = cos(l);
+ x->cur_l = co/si;
+ }
+ }
+ if(x->counter_a)
+ {
+ if(x->counter_a <= 1)
+ {
+ x->cur_a = x->end_a;
+ x->counter_a = 0;
+ x->event_mask &= 5;/*set event_mask_bit 1 = 0*/
+ }
+ else
+ {
+ x->counter_a--;
+ x->cur_a *= x->delta_a;
+ }
+ }
+ if(x->counter_b)
+ {
+ if(x->counter_b <= 1)
+ {
+ x->cur_b = x->end_b;
+ x->counter_b = 0;
+ x->event_mask &= 3;/*set event_mask_bit 2 = 0*/
+ }
+ else
+ {
+ x->counter_b--;
+ x->cur_b *= x->delta_b;
+ }
+ }
+
+ (*(x->calc))(x);
+
+ /* stability check */
+ if(x->first_order)
+ {
+ if(x->b1 <= -0.9999998f)
+ x->b1 = -0.9999998f;
+ else if(x->b1 >= 0.9999998f)
+ x->b1 = 0.9999998f;
+ }
+ else
+ {
+ float discriminant = x->b1 * x->b1 + 4.0f * x->b2;
+
+ if(x->b1 <= -1.9999996f)
+ x->b1 = -1.9999996f;
+ else if(x->b1 >= 1.9999996f)
+ x->b1 = 1.9999996f;
+
+ if(x->b2 <= -0.9999998f)
+ x->b2 = -0.9999998f;
+ else if(x->b2 >= 0.9999998f)
+ x->b2 = 0.9999998f;
+
+ if(discriminant >= 0.0f)
+ {
+ if(0.9999998f - x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f - x->b1;
+ if(0.9999998f + x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f + x->b1;
+ }
+ }
+ }
+}
+
+static t_int *sigfilter_perform_2o(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigfilter *x = (t_sigfilter *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn0, wn1=x->wn1, wn2=x->wn2;
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sigfilter_dsp_tick(x);
+ for(i=0; i<n; i++)
+ {
+ wn0 = *in++ + b1*wn1 + b2*wn2;
+ *out++ = a0*wn0 + a1*wn1 + a2*wn2;
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->wn1 = wn1;
+ x->wn2 = wn2;
+ return(w+5);
+}
+/* yn0 = *out;
+ xn0 = *in;
+ *************
+ yn0 = a0*xn0 + a1*xn1 + a2*xn2 + b1*yn1 + b2*yn2;
+ yn2 = yn1;
+ yn1 = yn0;
+ xn2 = xn1;
+ xn1 = xn0;
+ *************************
+ y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
+
+static t_int *sigfilter_perf8_2o(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigfilter *x = (t_sigfilter *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn[10];
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sigfilter_dsp_tick(x);
+ wn[0] = x->wn2;
+ wn[1] = x->wn1;
+ for(i=0; i<n; i+=8, in+=8, out+=8)
+ {
+ wn[2] = in[0] + b1*wn[1] + b2*wn[0];
+ out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
+ wn[3] = in[1] + b1*wn[2] + b2*wn[1];
+ out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
+ wn[4] = in[2] + b1*wn[3] + b2*wn[2];
+ out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
+ wn[5] = in[3] + b1*wn[4] + b2*wn[3];
+ out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
+ wn[6] = in[4] + b1*wn[5] + b2*wn[4];
+ out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
+ wn[7] = in[5] + b1*wn[6] + b2*wn[5];
+ out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
+ wn[8] = in[6] + b1*wn[7] + b2*wn[6];
+ out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
+ wn[9] = in[7] + b1*wn[8] + b2*wn[7];
+ out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
+ wn[0] = wn[8];
+ wn[1] = wn[9];
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn[0]))
+ wn[0] = 0.0f;
+ if(PD_BADFLOAT(wn[1]))
+ wn[1] = 0.0f;
+
+ x->wn1 = wn[1];
+ x->wn2 = wn[0];
+ return(w+5);
+}
+
+static t_int *sigfilter_perform_1o(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigfilter *x = (t_sigfilter *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn0, wn1=x->wn1;
+ float a0=x->a0, a1=x->a1;
+ float b1=x->b1;
+
+ sigfilter_dsp_tick(x);
+ for(i=0; i<n; i++)
+ {
+ wn0 = *in++ + b1*wn1;
+ *out++ = a0*wn0 + a1*wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->wn1 = wn1;
+ return(w+5);
+}
+
+static t_int *sigfilter_perf8_1o(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigfilter *x = (t_sigfilter *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn[9];
+ float a0=x->a0, a1=x->a1;
+ float b1=x->b1;
+
+ sigfilter_dsp_tick(x);
+ wn[0] = x->wn1;
+ for(i=0; i<n; i+=8, in+=8, out+=8)
+ {
+ wn[1] = in[0] + b1*wn[0];
+ out[0] = a0*wn[1] + a1*wn[0];
+ wn[2] = in[1] + b1*wn[1];
+ out[1] = a0*wn[2] + a1*wn[1];
+ wn[3] = in[2] + b1*wn[2];
+ out[2] = a0*wn[3] + a1*wn[2];
+ wn[4] = in[3] + b1*wn[3];
+ out[3] = a0*wn[4] + a1*wn[3];
+ wn[5] = in[4] + b1*wn[4];
+ out[4] = a0*wn[5] + a1*wn[4];
+ wn[6] = in[5] + b1*wn[5];
+ out[5] = a0*wn[6] + a1*wn[5];
+ wn[7] = in[6] + b1*wn[6];
+ out[6] = a0*wn[7] + a1*wn[6];
+ wn[8] = in[7] + b1*wn[7];
+ out[7] = a0*wn[8] + a1*wn[7];
+ wn[0] = wn[8];
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn[0]))
+ wn[0] = 0.0f;
+
+ x->wn1 = wn[0];
+ return(w+5);
+}
+
+static void sigfilter_ft4(t_sigfilter *x, t_floatarg t)
+{
+ int i = (int)((x->ticks_per_interpol_time)*t+0.49999f);
+
+ x->interpol_time = t;
+ if(i <= 0)
+ {
+ x->ticks = 1;
+ x->rcp_ticks = 1.0;
+ }
+ else
+ {
+ x->ticks = i;
+ x->rcp_ticks = 1.0 / (float)i;
+ }
+}
+
+static void sigfilter_ft3(t_sigfilter *x, t_floatarg b)
+{
+ if(b <= 0.0f)
+ b = 0.000001f;
+ if(x->hp)
+ b = 1.0 / b;
+ if(b != x->cur_b)
+ {
+ x->end_b = b;
+ x->counter_b = x->ticks;
+ x->delta_b = exp(log(b/x->cur_b)*x->rcp_ticks);
+ x->event_mask |= 4;/*set event_mask_bit 2 = 1*/
+ }
+}
+
+static void sigfilter_ft2(t_sigfilter *x, t_floatarg a)
+{
+ if(a <= 0.0f)
+ a = 0.000001f;
+ if(x->inv)
+ a = 1.0f / a;
+ if(x->hp)
+ a /= x->cur_b;
+ if(a != x->cur_a)
+ {
+ x->end_a = a;
+ x->counter_a = x->ticks;
+ x->delta_a = exp(log(a/x->cur_a)*x->rcp_ticks);
+ x->event_mask |= 2;/*set event_mask_bit 1 = 1*/
+ }
+}
+
+static void sigfilter_ft1(t_sigfilter *x, t_floatarg f)
+{
+ if(f <= 0.0f)
+ f = 0.000001f;
+ if(f != x->cur_f)
+ {
+ x->end_f = f;
+ x->counter_f = x->ticks;
+ x->delta_f = exp(log(f/x->cur_f)*x->rcp_ticks);
+ x->event_mask |= 1;/*set event_mask_bit 0 = 1*/
+ }
+}
+
+static void sigfilter_print(t_sigfilter *x)
+{
+// post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
+ x->x_at[0].a_w.w_float = x->b1;
+ x->x_at[1].a_w.w_float = x->b2;
+ x->x_at[2].a_w.w_float = x->a0;
+ x->x_at[3].a_w.w_float = x->a1;
+ x->x_at[4].a_w.w_float = x->a2;
+ outlet_list(x->x_debug_outlet, &s_list, 5, x->x_at);
+}
+
+static void sigfilter_dsp(t_sigfilter *x, t_signal **sp)
+{
+ float si, co, f;
+ int i, n=(int)sp[0]->s_n;
+
+ x->sr = 3.14159265358979323846f / (float)(sp[0]->s_sr);
+ x->ticks_per_interpol_time = 0.001f * (float)(sp[0]->s_sr) / (float)n;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time)+0.49999f);
+ if(i <= 0)
+ {
+ x->ticks = 1;
+ x->rcp_ticks = 1.0f;
+ }
+ else
+ {
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ }
+ f = x->cur_f * x->sr;
+ if(f < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(f > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(f);
+ co = cos(f);
+ x->cur_l = co/si;
+ }
+ if(x->first_order)
+ {
+ if(n&7)
+ dsp_add(sigfilter_perform_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ else
+ dsp_add(sigfilter_perf8_1o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ }
+ else
+ {
+ if(n&7)
+ dsp_add(sigfilter_perform_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ else
+ dsp_add(sigfilter_perf8_2o, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ }
+}
+
+static void *sigfilter_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_sigfilter *x = (t_sigfilter *)pd_new(sigfilter_class);
+ char *filt_name;
+ int i;
+ float si, co, f=0.0f, a=0.0f, b=0.0f, interpol=0.0f;
+ t_symbol *filt_typ=gensym("");
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft3"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
+ x->x_msi = 0.0f;
+
+ x->x_at[0].a_type = A_FLOAT;
+ x->x_at[1].a_type = A_FLOAT;
+ x->x_at[2].a_type = A_FLOAT;
+ x->x_at[3].a_type = A_FLOAT;
+ x->x_at[4].a_type = A_FLOAT;
+
+ x->event_mask = 1;
+ x->counter_f = 1;
+ x->counter_a = 0;
+ x->counter_b = 0;
+ x->delta_f = 0.0f;
+ x->delta_a = 0.0f;
+ x->delta_b = 0.0f;
+ x->interpol_time = 0.0f;
+ x->wn1 = 0.0f;
+ x->wn2 = 0.0f;
+ x->a0 = 0.0f;
+ x->a1 = 0.0f;
+ x->a2 = 0.0f;
+ x->b1 = 0.0f;
+ x->b2 = 0.0f;
+ x->sr = 3.14159265358979323846f / 44100.0f;
+ x->calc = sigfilter_snafu;
+ x->first_order = 0;
+ if((argc == 5)&&IS_A_FLOAT(argv,4)&&IS_A_FLOAT(argv,3)&&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,1)&&IS_A_SYMBOL(argv,0))
+ {
+ filt_typ = atom_getsymbolarg(0, argc, argv);
+ f = (float)atom_getfloatarg(1, argc, argv);
+ a = (float)atom_getfloatarg(2, argc, argv);
+ b = (float)atom_getfloatarg(3, argc, argv);
+ interpol = (float)atom_getfloatarg(4, argc, argv);
+ }
+ filt_name = (char *)filt_typ->s_name;
+ x->cur_f = f;
+ f *= x->sr;
+ if(f < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(f > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(f);
+ co = cos(f);
+ x->cur_l = co/si;
+ }
+ if(a <= 0.0f)
+ a = 0.000001f;
+ if(b <= 0.0f)
+ b = 0.000001f;
+ x->cur_b = b;
+
+ if(interpol <= 0.0f)
+ interpol = 0.0f;
+ x->interpol_time = interpol;
+ x->ticks_per_interpol_time = 0.001f * 44100.0f / 64.0f;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time)+0.49999f);
+ if(i <= 0)
+ {
+ x->ticks = 1;
+ x->rcp_ticks = 1.0f;
+ }
+ else
+ {
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ }
+
+ x->calc = sigfilter_snafu;
+
+ x->cur_a = 1.0f/a; /*a was Q*/
+ x->inv = 1;
+ x->hp = 0;
+
+ if(filt_name)
+ {
+ if(!strcmp(filt_name,"ap1"))
+ {
+ x->calc = sigfilter_ap1;
+ x->a1 = 1.0f;
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"ap2"))
+ {
+ x->calc = sigfilter_ap2;
+ x->a2 = 1.0f;
+ }
+ else if(!strcmp(filt_name,"ap1c"))
+ {
+ x->calc = sigfilter_ap1;
+ x->a1 = 1.0f;
+ x->inv = 0;
+ x->cur_a = a; /*a was damping*/
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"ap2c"))
+ {
+ x->calc = sigfilter_ap2;
+ x->a2 = 1.0f;
+ x->inv = 0;
+ x->cur_a = a; /*a was damping*/
+ }
+ else if(!strcmp(filt_name,"bpq2"))
+ {
+ x->calc = sigfilter_bp2;
+ }
+ else if(!strcmp(filt_name,"rbpq2"))
+ {
+ x->calc = sigfilter_rp2;
+ }
+ else if(!strcmp(filt_name,"bsq2"))
+ {
+ x->calc = sigfilter_bs2;
+ }
+ else if(!strcmp(filt_name,"bpw2"))
+ {
+ x->calc = sigfilter_bpw2;
+ x->inv = 0;
+ x->cur_a = a; /*a was bw*/
+ }
+ else if(!strcmp(filt_name,"rbpw2"))
+ {
+ x->calc = sigfilter_rpw2;
+ x->inv = 0;
+ x->cur_a = a; /*a was bw*/
+ }
+ else if(!strcmp(filt_name,"bsw2"))
+ {
+ x->calc = sigfilter_bsw2;
+ x->inv = 0;
+ x->cur_a = a; /*a was bw*/
+ }
+ else if(!strcmp(filt_name,"hp1"))
+ {
+ x->calc = sigfilter_hp1;
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"hp2"))
+ {
+ x->calc = sigfilter_hp2;
+ }
+ else if(!strcmp(filt_name,"lp1"))
+ {
+ x->calc = sigfilter_lp1;
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"lp2"))
+ {
+ x->calc = sigfilter_lp2;
+ }
+ else if(!strcmp(filt_name,"hp1c"))
+ {
+ x->calc = sigfilter_hp1;
+ x->cur_a = 1.0f / a;
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"hp2c"))
+ {
+ x->calc = sigfilter_hp2;
+ x->inv = 0;
+ x->cur_a = a / b;
+ x->cur_b = 1.0f / b;
+ x->hp = 1;
+ }
+ else if(!strcmp(filt_name,"lp1c"))
+ {
+ x->calc = sigfilter_lp1;
+ x->inv = 0;
+ x->cur_a = a; /*a was damping*/
+ x->first_order = 1;
+ }
+ else if(!strcmp(filt_name,"lp2c"))
+ {
+ x->calc = sigfilter_lp2;
+ x->inv = 0;
+ x->cur_a = a; /*a was damping*/
+ }
+ else
+ {
+ post("filter~-Error: 1. initial-arguments: <sym> kind: \
+ lp1, lp2, hp1, hp2, \
+ lp1c, lp2c, hp1c, hp2c, \
+ ap1, ap2, ap1c, ap2c, \
+ bpq2, rbpq2, bsq2, \
+ bpw2, rbpw2, bsw2!");
+ }
+ x->end_f = x->cur_f;
+ x->end_a = x->cur_a;
+ x->end_b = x->cur_b;
+ }
+ return (x);
+}
+
+void sigfilter_setup(void)
+{
+ sigfilter_class = class_new(gensym("filter~"), (t_newmethod)sigfilter_new,
+ 0, sizeof(t_sigfilter), 0, A_GIMME, 0);
+ CLASS_MAINSIGNALIN(sigfilter_class, t_sigfilter, x_msi);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_dsp, gensym("dsp"), 0);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_ft3, gensym("ft3"), A_FLOAT, 0);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_ft4, gensym("ft4"), A_FLOAT, 0);
+ class_addmethod(sigfilter_class, (t_method)sigfilter_print, gensym("print"), 0);
+ class_sethelpsymbol(sigfilter_class, gensym("iemhelp/help-filter~"));
+}
diff --git a/src/iemlib1/sighml_shelf.c b/src/iemlib1/sighml_shelf.c
new file mode 100644
index 0000000..ef209d1
--- /dev/null
+++ b/src/iemlib1/sighml_shelf.c
@@ -0,0 +1,558 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* ---------- hml_shelf~ - high-middle-low-shelving filter ----------- */
+
+typedef struct sighml_shelf
+{
+ t_object x_obj;
+ float wn1;
+ float wn2;
+ float a0;
+ float a1;
+ float a2;
+ float b1;
+ float b2;
+ float sr;
+ float cur_lf;
+ float cur_hf;
+ float cur_lg;
+ float cur_mg;
+ float cur_hg;
+ float delta_lf;
+ float delta_hf;
+ float delta_lg;
+ float delta_mg;
+ float delta_hg;
+ float end_lf;
+ float end_hf;
+ float end_lg;
+ float end_mg;
+ float end_hg;
+ float ticks_per_interpol_time;
+ float rcp_ticks;
+ float interpol_time;
+ int ticks;
+ int counter_lf;
+ int counter_hf;
+ int counter_lg;
+ int counter_mg;
+ int counter_hg;
+ int event_mask;
+ void *x_debug_outlet;
+ t_atom x_at[5];
+ float x_msi;
+} t_sighml_shelf;
+
+t_class *sighml_shelf_class;
+
+static void sighml_shelf_calc(t_sighml_shelf *x)
+{
+ float rf = x->cur_hf/x->cur_lf;
+ float mf = x->cur_hf*x->cur_lf;
+ float lg = x->cur_lg;
+ float rcplg = 1.0f/lg;
+ float mg = x->cur_mg;
+ float rcpmg = 1.0f/mg;
+ float hg = x->cur_hg;
+ float rcphg = 1.0f/hg;
+ float f = mf*x->sr;
+ float l = cos(f)/sin(f);
+ float k1 = rf*l;
+ float k2 = l/rf;
+ float k3 = l*l;
+ float k4 = k3*hg;
+ float k5 = k3*rcphg;
+ float k6 = rcplg + k5;
+ float k7 = rcpmg*k1 + k2*rcplg*rcphg*mg;
+ float k8 = lg + k4;
+ float k9 = mg*k1 + k2*lg*hg*rcpmg;
+ float k10 = 1.0f/(k6 + k7);
+
+ x->b2 = k10*(k7 - k6);
+ x->b1 = k10*2.0f*(k5 - rcplg);
+ x->a2 = k10*(k8 - k9);
+ x->a1 = k10*2.0f*(lg - k4);
+ x->a0 = k10*(k8 + k9);
+}
+/*
+high- & low- shelving-filter:
+L....sqrt(lowlevel);
+rL...rsqrt(lowlevel);
+M....sqrt(mediumlevel);
+rM...rsqrt(mediumlevel);
+H....sqrt(highlevel);
+rH...rsqrt(highlevel);
+V....sqrt(highfrequency/lowfrequency);
+P....j*2*pi*f/(2*pi*V*lowfrequency);
+
+Y/X = [M/(1/M)] * [(L/M + PV)/(M/L + PV)] * [(1 + HP/(VM))/(1 + MP/(VH))];
+Y/X = (L + P*(M*V + L*H/(V*M)) + P*P*H) / (rL + P*(rM*V + rL*rH/(V*rM)) + P*P*rH);
+
+hlshlv: lowlevel: ll; mediumlevel: lm; highlevel: hl; lowfrequency: fl; highfrequency: fh; samplerate: sr;
+ {
+ V = sqrt(fh/fl);
+ f = fl*V;
+ L = sqrt(ll);
+ rL = 1.0/L;
+ M = sqrt(lm);
+ rM = 1.0/M;
+ H = sqrt(lh);
+ rH = 1.0/H;
+
+ l = cot(f*3.14159265358979323846/sr);
+ k1 = V*l;
+ k2 = l/V;
+ l2 = l*l;
+ l3 = l2*H;
+ l4 = l2*rH;
+ m1 = k2*L*H*rM;
+ m2 = k2*rL*rH*M;
+ n1 = rL + l4;
+ n2 = rM*k1 + m2;
+ p1 = L + l3;
+ p2 = M*k1 + m1;
+ a012 = 1.0/(n1 + n2);
+
+ b2 = a012*(n2 - n1);
+ b1 = a012*2.0*(l4 - rL);
+ a2 = a012*(p1 - p2);
+ a1 = a012*2.0*(L - l3);
+ a0 = a012*(p1 + p2);
+
+
+
+
+
+
+ rf = sqrt(fh/fl);
+ mf = fl*rf;
+ L = sqrt(ll);
+ rL = 1.0/L;
+ M = sqrt(lm);
+ rM = 1.0/M;
+ H = sqrt(lh);
+ rH = 1.0/H;
+
+ l = cot(fm*3.14159265358979323846/sr);
+ k1 = V*l;
+ k2 = l/V;
+ k3 = l*l;
+ k4 = k3*H;
+ k5 = k3*rH;
+ k6 = rL + k5;
+ k7 = rM*k1 + k2*rL*rH*M;
+ k8 = L + k4;
+ k9 = M*k1 + k2*L*H*rM;
+ k10 = 1.0/(k6 + k7);
+
+ b2 = k10*(k7 - k6);
+ b1 = k10*2.0*(k5 - rL);
+ a2 = k10*(k8 - k9);
+ a1 = k10*2.0*(L - k4);
+ a0 = k10*(k8 + k9);
+*/
+
+static void sighml_shelf_dsp_tick(t_sighml_shelf *x)
+{
+ if(x->event_mask)
+ {
+ float discriminant;
+
+ if(x->counter_lg)
+ {
+ if(x->counter_lg <= 1)
+ {
+ x->cur_lg = x->end_lg;
+ x->counter_lg = 0;
+ x->event_mask &= 30;/*set event_mask_bit 0 = 0*/
+ }
+ else
+ {
+ x->counter_lg--;
+ x->cur_lg *= x->delta_lg;
+ }
+ }
+ if(x->counter_lf)
+ {
+ if(x->counter_lf <= 1)
+ {
+ x->cur_lf = x->end_lf;
+ x->counter_lf = 0;
+ x->event_mask &= 29;/*set event_mask_bit 1 = 0*/
+ }
+ else
+ {
+ x->counter_lf--;
+ x->cur_lf *= x->delta_lf;
+ }
+ }
+ if(x->counter_mg)
+ {
+ if(x->counter_mg <= 1)
+ {
+ x->cur_mg = x->end_mg;
+ x->counter_mg = 0;
+ x->event_mask &= 27;/*set event_mask_bit 2 = 0*/
+ }
+ else
+ {
+ x->counter_mg--;
+ x->cur_mg *= x->delta_mg;
+ }
+ }
+ if(x->counter_hf)
+ {
+ if(x->counter_hf <= 1)
+ {
+ x->cur_hf = x->end_hf;
+ x->counter_hf = 0;
+ x->event_mask &= 23;/*set event_mask_bit 3 = 0*/
+ }
+ else
+ {
+ x->counter_hf--;
+ x->cur_hf *= x->delta_hf;
+ }
+ }
+ if(x->counter_hg)
+ {
+ if(x->counter_hg <= 1)
+ {
+ x->cur_hg = x->end_hg;
+ x->counter_hg = 0;
+ x->event_mask &= 15;/*set event_mask_bit 4 = 0*/
+ }
+ else
+ {
+ x->counter_hg--;
+ x->cur_hg *= x->delta_hg;
+ }
+ }
+ sighml_shelf_calc(x);
+
+ /* stability check */
+
+ discriminant = x->b1 * x->b1 + 4.0f * x->b2;
+ if(x->b1 <= -1.9999996f)
+ x->b1 = -1.9999996f;
+ else if(x->b1 >= 1.9999996f)
+ x->b1 = 1.9999996f;
+
+ if(x->b2 <= -0.9999998f)
+ x->b2 = -0.9999998f;
+ else if(x->b2 >= 0.9999998f)
+ x->b2 = 0.9999998f;
+
+ if(discriminant >= 0.0f)
+ {
+ if(0.9999998f - x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f - x->b1;
+ if(0.9999998f + x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f + x->b1;
+ }
+ }
+}
+
+static t_int *sighml_shelf_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sighml_shelf *x = (t_sighml_shelf *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn0, wn1=x->wn1, wn2=x->wn2;
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sighml_shelf_dsp_tick(x);
+ for(i=0; i<n; i++)
+ {
+ wn0 = *in++ + b1*wn1 + b2*wn2;
+ *out++ = a0*wn0 + a1*wn1 + a2*wn2;
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->wn1 = wn1;
+ x->wn2 = wn2;
+ return(w+5);
+}
+/* yn0 = *out;
+ xn0 = *in;
+ *************
+ yn0 = a0*xn0 + a1*xn1 + a2*xn2 + b1*yn1 + b2*yn2;
+ yn2 = yn1;
+ yn1 = yn0;
+ xn2 = xn1;
+ xn1 = xn0;
+ *************************
+ y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
+
+static t_int *sighml_shelf_perf8(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sighml_shelf *x = (t_sighml_shelf *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn[10];
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sighml_shelf_dsp_tick(x);
+ wn[0] = x->wn2;
+ wn[1] = x->wn1;
+ for(i=0; i<n; i+=8, in+=8, out+=8)
+ {
+ wn[2] = in[0] + b1*wn[1] + b2*wn[0];
+ out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
+ wn[3] = in[1] + b1*wn[2] + b2*wn[1];
+ out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
+ wn[4] = in[2] + b1*wn[3] + b2*wn[2];
+ out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
+ wn[5] = in[3] + b1*wn[4] + b2*wn[3];
+ out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
+ wn[6] = in[4] + b1*wn[5] + b2*wn[4];
+ out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
+ wn[7] = in[5] + b1*wn[6] + b2*wn[5];
+ out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
+ wn[8] = in[6] + b1*wn[7] + b2*wn[6];
+ out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
+ wn[9] = in[7] + b1*wn[8] + b2*wn[7];
+ out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
+ wn[0] = wn[8];
+ wn[1] = wn[9];
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn[0]))
+ wn[0] = 0.0f;
+ if(PD_BADFLOAT(wn[1]))
+ wn[1] = 0.0f;
+
+ x->wn1 = wn[1];
+ x->wn2 = wn[0];
+ return(w+5);
+}
+
+static void sighml_shelf_ft6(t_sighml_shelf *x, t_floatarg t)
+{
+ int i = (int)((x->ticks_per_interpol_time)*t);
+
+ x->interpol_time = t;
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+}
+
+static void sighml_shelf_ft5(t_sighml_shelf *x, t_floatarg hl)
+{
+ float hg = exp(0.057564627325 * hl);
+
+ if(hg != x->cur_hg)
+ {
+ x->end_hg = hg;
+ x->counter_hg = x->ticks;
+ x->delta_hg = exp(log(hg/x->cur_hg)*x->rcp_ticks);
+ x->event_mask |= 16;/*set event_mask_bit 4 = 1*/
+ }
+}
+
+static void sighml_shelf_ft4(t_sighml_shelf *x, t_floatarg hf)
+{
+ float sqhf;
+
+ if(hf <= 0.0f)
+ hf = 0.000001f;
+ sqhf = sqrt(hf);
+ if(sqhf != x->cur_hf)
+ {
+ x->end_hf = sqhf;
+ x->counter_hf = x->ticks;
+ x->delta_hf = exp(log(sqhf/x->cur_hf)*x->rcp_ticks);
+ x->event_mask |= 8;/*set event_mask_bit 3 = 1*/
+ }
+}
+
+static void sighml_shelf_ft3(t_sighml_shelf *x, t_floatarg ml)
+{
+ float mg = exp(0.057564627325 * ml);
+
+ if(mg != x->cur_mg)
+ {
+ x->end_mg = mg;
+ x->counter_mg = x->ticks;
+ x->delta_mg = exp(log(mg/x->cur_mg)*x->rcp_ticks);
+ x->event_mask |= 4;/*set event_mask_bit 2 = 1*/
+ }
+}
+
+static void sighml_shelf_ft2(t_sighml_shelf *x, t_floatarg lf)
+{
+ float sqlf;
+
+ if(lf <= 0.0f)
+ lf = 0.000001f;
+ sqlf = sqrt(lf);
+ if(sqlf != x->cur_lf)
+ {
+ x->end_lf = sqlf;
+ x->counter_lf = x->ticks;
+ x->delta_lf = exp(log(sqlf/x->cur_lf)*x->rcp_ticks);
+ x->event_mask |= 2;/*set event_mask_bit 1 = 1*/
+ }
+}
+
+static void sighml_shelf_ft1(t_sighml_shelf *x, t_floatarg ll)
+{
+ float lg = exp(0.057564627325 * ll);
+
+ if(lg != x->cur_lg)
+ {
+ x->end_lg = lg;
+ x->counter_lg = x->ticks;
+ x->delta_lg = exp(log(lg/x->cur_lg)*x->rcp_ticks);
+ x->event_mask |= 1;/*set event_mask_bit 0 = 1*/
+ }
+}
+
+static void sighml_shelf_print(t_sighml_shelf *x)
+{
+// post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
+ x->x_at[0].a_w.w_float = x->b1;
+ x->x_at[1].a_w.w_float = x->b2;
+ x->x_at[2].a_w.w_float = x->a0;
+ x->x_at[3].a_w.w_float = x->a1;
+ x->x_at[4].a_w.w_float = x->a2;
+ outlet_list(x->x_debug_outlet, &s_list, 5, x->x_at);
+}
+
+static void sighml_shelf_dsp(t_sighml_shelf *x, t_signal **sp)
+{
+ int i, n=(int)sp[0]->s_n;
+
+ x->sr = 3.14159265358979323846f / (float)(sp[0]->s_sr);
+ x->ticks_per_interpol_time = 0.001f * (float)(sp[0]->s_sr) / (float)n;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ if(n&7)
+ dsp_add(sighml_shelf_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ else
+ dsp_add(sighml_shelf_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+}
+
+static void *sighml_shelf_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_sighml_shelf *x = (t_sighml_shelf *)pd_new(sighml_shelf_class);
+ int i;
+ float lf=200.0f, hf=2000.0f, ll=0.0f, ml=0.0f, hl=0.0f, interpol=0.0f;
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft3"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft5"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft6"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
+ x->x_msi = 0;
+
+ x->x_at[0].a_type = A_FLOAT;
+ x->x_at[1].a_type = A_FLOAT;
+ x->x_at[2].a_type = A_FLOAT;
+ x->x_at[3].a_type = A_FLOAT;
+ x->x_at[4].a_type = A_FLOAT;
+
+ x->event_mask = 2;
+ x->counter_lg = 0;
+ x->counter_lf = 1;
+ x->counter_mg = 0;
+ x->counter_hf = 0;
+ x->counter_hg = 0;
+ x->delta_lg = 0.0f;
+ x->delta_lf = 0.0f;
+ x->delta_mg = 0.0f;
+ x->delta_hf = 0.0f;
+ x->delta_hg = 0.0f;
+ x->interpol_time = 0.0f;
+ x->wn1 = 0.0f;
+ x->wn2 = 0.0f;
+ x->a0 = 0.0f;
+ x->a1 = 0.0f;
+ x->a2 = 0.0f;
+ x->b1 = 0.0f;
+ x->b2 = 0.0f;
+ x->sr = 3.14159265358979323846f / 44100.0f;
+ if((argc == 6)&&IS_A_FLOAT(argv,5)&&IS_A_FLOAT(argv,4)&&IS_A_FLOAT(argv,3)
+ &&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,0))
+ {
+ ll = (float)atom_getfloatarg(0, argc, argv);
+ lf = (float)atom_getfloatarg(1, argc, argv);
+ ml = (float)atom_getfloatarg(2, argc, argv);
+ hf = (float)atom_getfloatarg(3, argc, argv);
+ hl = (float)atom_getfloatarg(4, argc, argv);
+ interpol = (float)atom_getfloatarg(5, argc, argv);
+ }
+ x->cur_lg = exp(0.057564627325 * ll);
+ x->cur_mg = exp(0.057564627325 * ml);
+ x->cur_hg = exp(0.057564627325 * hl);
+ if(lf <= 0.0f)
+ lf = 0.000001f;
+ if(hf <= 0.0f)
+ hf = 0.000001f;
+ x->cur_lf = sqrt(lf);
+ x->cur_hf = sqrt(hf);
+ if(interpol < 0.0f)
+ interpol = 0.0f;
+ x->interpol_time = interpol;
+ x->ticks_per_interpol_time = 0.5f;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ x->end_lf = x->cur_lf;
+ x->end_hf = x->cur_hf;
+ x->end_lg = x->cur_lg;
+ x->end_mg = x->cur_mg;
+ x->end_hg = x->cur_hg;
+ return(x);
+}
+
+void sighml_shelf_setup(void)
+{
+ sighml_shelf_class = class_new(gensym("hml_shelf~"), (t_newmethod)sighml_shelf_new,
+ 0, sizeof(t_sighml_shelf), 0, A_GIMME, 0);
+ CLASS_MAINSIGNALIN(sighml_shelf_class, t_sighml_shelf, x_msi);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_dsp, gensym("dsp"), 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft3, gensym("ft3"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft4, gensym("ft4"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft5, gensym("ft5"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_ft6, gensym("ft6"), A_FLOAT, 0);
+ class_addmethod(sighml_shelf_class, (t_method)sighml_shelf_print, gensym("print"), 0);
+ class_sethelpsymbol(sighml_shelf_class, gensym("iemhelp/help-hml_shelf~"));
+}
diff --git a/src/iemlib1/sigiem_cot4.c b/src/iemlib1/sigiem_cot4.c
new file mode 100644
index 0000000..b0990d9
--- /dev/null
+++ b/src/iemlib1/sigiem_cot4.c
@@ -0,0 +1,176 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------------------------ iem_cot4~ ----------------------------- */
+
+float *iem_cot4_table_cos=(float *)0L;
+float *iem_cot4_table_sin=(float *)0L;
+
+static t_class *sigiem_cot4_class;
+
+typedef struct _sigiem_cot4
+{
+ t_object x_obj;
+ float x_sr;
+ float x_msi;
+} t_sigiem_cot4;
+
+static t_int *sigiem_cot4_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_float norm_freq;
+ t_float hout;
+ t_sigiem_cot4 *x = (t_sigiem_cot4 *)(w[3]);
+ t_float sr=x->x_sr;
+ int n = (int)(w[4]);
+ float *ctab = iem_cot4_table_cos, *stab = iem_cot4_table_sin;
+ float *caddr, *saddr, cf1, cf2, sf1, sf2, frac;
+ double dphase;
+ int normhipart;
+ int32 mytfi;
+ union tabfudge tf;
+
+ tf.tf_d = UNITBIT32;
+ normhipart = tf.tf_i[HIOFFSET];
+
+#if 0 /* this is the readable version of the code. */
+ while (n--)
+ {
+ norm_freq = *in * sr;
+ if(norm_freq < 0.0001f)
+ norm_freq = 0.0001f;
+ else if(norm_freq > 0.9f)
+ norm_freq = 0.9f;
+ dphase = (double)(norm_freq * (float)(COSTABSIZE)) + UNITBIT32;
+ tf.tf_d = dphase;
+ mytfi = tf.tf_i[HIOFFSET] & (COSTABSIZE-1);
+ saddr = stab + (mytfi);
+ caddr = ctab + (mytfi);
+ tf.tf_i[HIOFFSET] = normhipart;
+ frac = tf.tf_d - UNITBIT32;
+ sf1 = saddr[0];
+ sf2 = saddr[1];
+ cf1 = caddr[0];
+ cf2 = caddr[1];
+ in++;
+ *out++ = (cf1 + frac * (cf2 - cf1))/(sf1 + frac * (sf2 - sf1));
+ }
+#endif
+#if 1 /* this is the same, unwrapped by hand. prolog beg*/
+ n /= 4;
+ norm_freq = *in * sr;
+ if(norm_freq < 0.0001f)
+ norm_freq = 0.0001f;
+ else if(norm_freq > 0.9f)
+ norm_freq = 0.9f;
+ dphase = (double)(norm_freq * (float)(COSTABSIZE)) + UNITBIT32;
+ tf.tf_d = dphase;
+ mytfi = tf.tf_i[HIOFFSET] & (COSTABSIZE-1);
+ saddr = stab + (mytfi);
+ caddr = ctab + (mytfi);
+ tf.tf_i[HIOFFSET] = normhipart;
+ in += 4; /*prolog end*/
+ while (--n)
+ {
+ norm_freq = *in * sr;
+ if(norm_freq < 0.0001f)
+ norm_freq = 0.0001f;
+ else if(norm_freq > 0.9f)
+ norm_freq = 0.9f;
+ dphase = (double)(norm_freq * (float)(COSTABSIZE)) + UNITBIT32;
+ frac = tf.tf_d - UNITBIT32;
+ tf.tf_d = dphase;
+ sf1 = saddr[0];
+ sf2 = saddr[1];
+ cf1 = caddr[0];
+ cf2 = caddr[1];
+ mytfi = tf.tf_i[HIOFFSET] & (COSTABSIZE-1);
+ saddr = stab + (mytfi);
+ caddr = ctab + (mytfi);
+ hout = (cf1 + frac * (cf2 - cf1))/(sf1 + frac * (sf2 - sf1));
+ *out++ = hout;
+ *out++ = hout;
+ *out++ = hout;
+ *out++ = hout;
+ in += 4;
+ tf.tf_i[HIOFFSET] = normhipart;
+ }/*epilog beg*/
+ frac = tf.tf_d - UNITBIT32;
+ sf1 = saddr[0];
+ sf2 = saddr[1];
+ cf1 = caddr[0];
+ cf2 = caddr[1];
+ hout = (cf1 + frac * (cf2 - cf1))/(sf1 + frac * (sf2 - sf1));
+ *out++ = hout;
+ *out++ = hout;
+ *out++ = hout;
+ *out++ = hout;
+ /*epilog end*/
+#endif
+ return (w+5);
+}
+
+static void sigiem_cot4_dsp(t_sigiem_cot4 *x, t_signal **sp)
+{
+ x->x_sr = 2.0f / (float)sp[0]->s_sr;
+ dsp_add(sigiem_cot4_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void sigiem_cot4_maketable(void)
+{
+ int i;
+ float *fp, phase, fff, phsinc = 0.5*3.141592653 / ((float)COSTABSIZE);
+ union tabfudge tf;
+
+ if(!iem_cot4_table_sin)
+ {
+ iem_cot4_table_sin = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_cot4_table_sin, phase=0; i--; fp++, phase+=phsinc)
+ *fp = sin(phase);
+ }
+ if(!iem_cot4_table_cos)
+ {
+ iem_cot4_table_cos = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_cot4_table_cos, phase=0; i--; fp++, phase+=phsinc)
+ *fp = cos(phase);
+ }
+ tf.tf_d = UNITBIT32 + 0.5;
+ if((unsigned)tf.tf_i[LOWOFFSET] != 0x80000000)
+ bug("iem_cot4~: unexpected machine alignment");
+}
+
+static void *sigiem_cot4_new(void)
+{
+ t_sigiem_cot4 *x = (t_sigiem_cot4 *)pd_new(sigiem_cot4_class);
+
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_msi = 0;
+ return (x);
+}
+
+void sigiem_cot4_setup(void)
+{
+ sigiem_cot4_class = class_new(gensym("iem_cot4~"), (t_newmethod)sigiem_cot4_new, 0,
+ sizeof(t_sigiem_cot4), 0, 0);
+ class_addcreator((t_newmethod)sigiem_cot4_new, gensym("iem_cot~"), 0);
+ CLASS_MAINSIGNALIN(sigiem_cot4_class, t_sigiem_cot4, x_msi);
+ class_addmethod(sigiem_cot4_class, (t_method)sigiem_cot4_dsp, gensym("dsp"), 0);
+ sigiem_cot4_maketable();
+ class_sethelpsymbol(sigiem_cot4_class, gensym("iemhelp/help-iem_cot4~"));
+}
+
diff --git a/src/iemlib1/sigiem_delay.c b/src/iemlib1/sigiem_delay.c
new file mode 100644
index 0000000..56afbf3
--- /dev/null
+++ b/src/iemlib1/sigiem_delay.c
@@ -0,0 +1,208 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil (c) IEM KUG Graz Austria 2002 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* -------------------------- sigiem_delay~ ------------------------------ */
+static t_class *sigiem_delay_class;
+
+#define IEMDELAY_DEF_VEC_SIZE 64
+
+typedef struct _sigiem_delay
+{
+ t_object x_obj;
+ int x_mallocsize;
+ t_float x_max_delay_ms;
+ t_float x_current_delay_ms;
+ t_float *x_begmem1;
+ t_float *x_begmem2;
+ int x_writeindex;
+ int x_blocksize;
+ int x_delay_samples;
+ t_float x_sr;
+ t_float x_msi;
+} t_sigiem_delay;
+
+static void sigiem_delay_cur_del(t_sigiem_delay *x, t_floatarg f)
+{
+ if(f < 0.0f)
+ f = 0.0f;
+ else if(f > x->x_max_delay_ms)
+ f = x->x_max_delay_ms;
+ x->x_current_delay_ms = f;
+ x->x_delay_samples = (int)(0.001f*x->x_sr * f + 0.5f);
+}
+
+static t_int *sigiem_delay_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_sigiem_delay *x = (t_sigiem_delay *)(w[3]);
+ int n=(int)(w[4]);
+ int writeindex = x->x_writeindex;
+ t_float *vec1, *vec2, *vec3;
+
+ vec1 = x->x_begmem1 + writeindex;
+ vec2 = x->x_begmem2 + writeindex;
+ vec3 = x->x_begmem2 + writeindex - x->x_delay_samples;
+ writeindex += n;
+ while(n--)
+ {
+ *vec1++ = *vec2++ = *in++;
+ *out++ = *vec3++;
+ }
+ if(writeindex >= x->x_mallocsize)
+ {
+ writeindex -= x->x_mallocsize;
+ }
+ x->x_writeindex = writeindex;
+ return(w+5);
+}
+
+static t_int *sigiem_delay_perf8(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_sigiem_delay *x = (t_sigiem_delay *)(w[3]);
+ int i, n=(int)(w[4]);
+ int writeindex = x->x_writeindex;
+ t_float *vec1, *vec2;
+
+ vec1 = x->x_begmem1 + writeindex;
+ vec2 = x->x_begmem2 + writeindex;
+ for(i=0; i<n; i+=8)
+ {
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ *vec1++ = *vec2++ = *in++;
+ }
+
+ vec2 = x->x_begmem2 + writeindex - x->x_delay_samples;
+ for(i=0; i<n; i+=8)
+ {
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ *out++ = *vec2++;
+ }
+
+ writeindex += n;
+ if(writeindex >= x->x_mallocsize)
+ {
+ writeindex -= x->x_mallocsize;
+ }
+ x->x_writeindex = writeindex;
+ return(w+5);
+}
+
+static void sigiem_delay_dsp(t_sigiem_delay *x, t_signal **sp)
+{
+ int blocksize = sp[0]->s_n, i;
+
+ if(!x->x_blocksize)/*first time*/
+ {
+ int nsamps = x->x_max_delay_ms * (t_float)sp[0]->s_sr * 0.001f;
+
+ if(nsamps < 1)
+ nsamps = 1;
+ nsamps += ((- nsamps) & (blocksize - 1));
+ nsamps += blocksize;
+ x->x_mallocsize = nsamps;
+ x->x_begmem1 = (t_float *)getbytes(2 * x->x_mallocsize * sizeof(t_float));
+ x->x_begmem2 = x->x_begmem1 + x->x_mallocsize;
+ post("beginn = %x", (unsigned long)x->x_begmem1);
+ x->x_writeindex = blocksize;
+ x->x_sr = (t_float)sp[0]->s_sr;
+ x->x_blocksize = blocksize;
+ x->x_delay_samples = (int)(0.001f*x->x_sr * x->x_current_delay_ms + 0.5f);
+ }
+ else if((x->x_blocksize != blocksize) || ((t_float)sp[0]->s_sr != x->x_sr))
+ {
+ int nsamps = x->x_max_delay_ms * (t_float)sp[0]->s_sr * 0.001f;
+
+ if(nsamps < 1)
+ nsamps = 1;
+ nsamps += ((- nsamps) & (blocksize - 1));
+ nsamps += blocksize;
+
+ x->x_begmem1 = (t_float *)resizebytes(x->x_begmem1, 2*x->x_mallocsize*sizeof(t_float), 2*nsamps*sizeof(t_float));
+ x->x_mallocsize = nsamps;
+ x->x_begmem2 = x->x_begmem1 + x->x_mallocsize;
+ post("beginn = %x", (unsigned long)x->x_begmem1);
+ if(x->x_writeindex >= nsamps)
+ x->x_writeindex -= nsamps;
+ x->x_sr = (t_float)sp[0]->s_sr;
+ x->x_blocksize = blocksize;
+ x->x_delay_samples = (int)(0.001f*x->x_sr * x->x_current_delay_ms + 0.5f);
+ }
+
+ if(blocksize&7)
+ dsp_add(sigiem_delay_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, blocksize);
+ else
+ dsp_add(sigiem_delay_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, x, blocksize);
+}
+
+static void *sigiem_delay_new(t_floatarg max_delay_ms, t_floatarg current_delay_ms)
+{
+ t_sigiem_delay *x = (t_sigiem_delay *)pd_new(sigiem_delay_class);
+ int nsamps;
+
+ if(max_delay_ms < 2.0f)
+ max_delay_ms = 2.0f;
+ x->x_max_delay_ms = max_delay_ms;
+ if(current_delay_ms < 0.0f)
+ current_delay_ms = 0.0f;
+ else if(current_delay_ms > max_delay_ms)
+ current_delay_ms = max_delay_ms;
+ x->x_current_delay_ms = current_delay_ms;
+ nsamps = max_delay_ms * sys_getsr() * 0.001f;
+ if(nsamps < 1)
+ nsamps = 1;
+ nsamps += ((- nsamps) & (IEMDELAY_DEF_VEC_SIZE - 1));
+ nsamps += IEMDELAY_DEF_VEC_SIZE;
+ x->x_mallocsize = nsamps;
+ x->x_begmem1 = (t_float *)getbytes(2 * x->x_mallocsize * sizeof(t_float));
+ x->x_begmem2 = x->x_begmem1 + x->x_mallocsize;
+ x->x_writeindex = IEMDELAY_DEF_VEC_SIZE;
+ x->x_blocksize = 0;
+ x->x_sr = 0.0f;
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0.0f;
+ return (x);
+}
+
+static void sigiem_delay_free(t_sigiem_delay *x)
+{
+ freebytes(x->x_begmem1, 2 * x->x_mallocsize * sizeof(t_float));
+}
+
+void sigiem_delay_setup(void)
+{
+ sigiem_delay_class = class_new(gensym("iem_delay~"), (t_newmethod)sigiem_delay_new, (t_method)sigiem_delay_free,
+ sizeof(t_sigiem_delay), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigiem_delay_class, t_sigiem_delay, x_msi);
+ class_addmethod(sigiem_delay_class, (t_method)sigiem_delay_dsp, gensym("dsp"), 0);
+ class_addmethod(sigiem_delay_class, (t_method)sigiem_delay_cur_del, gensym("ft1"), A_FLOAT, 0);
+}
diff --git a/src/iemlib1/sigiem_pow4.c b/src/iemlib1/sigiem_pow4.c
new file mode 100644
index 0000000..ae5334c
--- /dev/null
+++ b/src/iemlib1/sigiem_pow4.c
@@ -0,0 +1,86 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ------------------------ iem_pow4~ ----------------------------- */
+
+static t_class *sigiem_pow4_class;
+
+typedef struct _sigiem_pow4
+{
+ t_object x_obj;
+ float x_exp;
+ float x_msi;
+} t_sigiem_pow4;
+
+static void sigiem_pow4_ft1(t_sigiem_pow4 *x, t_floatarg f)
+{
+ x->x_exp = f;
+}
+
+static t_int *sigiem_pow4_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_sigiem_pow4 *x = (t_sigiem_pow4 *)(w[3]);
+ t_float y=x->x_exp;
+ t_float f, g;
+ int n = (int)(w[4])/4;
+
+ while (n--)
+ {
+ f = *in;
+ if(f < 0.01f)
+ f = 0.01f;
+ else if(f > 1000.0f)
+ f = 1000.0f;
+ g = log(f);
+ f = exp(g*y);
+ *out++ = f;
+ *out++ = f;
+ *out++ = f;
+ *out++ = f;
+ in += 4;
+ }
+ return (w+5);
+}
+
+static void sigiem_pow4_dsp(t_sigiem_pow4 *x, t_signal **sp)
+{
+ dsp_add(sigiem_pow4_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigiem_pow4_new(t_floatarg f)
+{
+ t_sigiem_pow4 *x = (t_sigiem_pow4 *)pd_new(sigiem_pow4_class);
+
+ x->x_exp = f;
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_msi = 0;
+ return (x);
+}
+
+void sigiem_pow4_setup(void)
+{
+ sigiem_pow4_class = class_new(gensym("iem_pow4~"), (t_newmethod)sigiem_pow4_new, 0,
+ sizeof(t_sigiem_pow4), 0, A_DEFFLOAT, 0);
+ class_addcreator((t_newmethod)sigiem_pow4_new, gensym("icot~"), 0);
+ CLASS_MAINSIGNALIN(sigiem_pow4_class, t_sigiem_pow4, x_msi);
+ class_addmethod(sigiem_pow4_class, (t_method)sigiem_pow4_dsp, gensym("dsp"), 0);
+ class_addmethod(sigiem_pow4_class, (t_method)sigiem_pow4_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_sethelpsymbol(sigiem_pow4_class, gensym("iemhelp/help-iem_pow4~"));
+}
diff --git a/src/iemlib1/sigiem_sqrt4.c b/src/iemlib1/sigiem_sqrt4.c
new file mode 100644
index 0000000..49d9982
--- /dev/null
+++ b/src/iemlib1/sigiem_sqrt4.c
@@ -0,0 +1,117 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#define IEMSQRT4TAB1SIZE 256
+#define IEMSQRT4TAB2SIZE 1024
+
+/* ------------------------ iem_sqrt4~ ----------------------------- */
+
+float *iem_sqrt4_exptab=(float *)0L;
+float *iem_sqrt4_mantissatab=(float *)0L;
+
+static t_class *sigiem_sqrt4_class;
+
+typedef struct _sigiem_sqrt4
+{
+ t_object x_obj;
+ float x_msi;
+} t_sigiem_sqrt4;
+
+static t_int *sigiem_sqrt4_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_int n = (t_int)(w[3])/4;
+
+ while(n--)
+ {
+ float f = *in;
+ float g, h;
+ long l = *(long *)(in);
+
+ if(f < 0.0f)
+ {
+ *out++ = 0.0f;
+ *out++ = 0.0f;
+ *out++ = 0.0f;
+ *out++ = 0.0f;
+ }
+ else
+ {
+ g = iem_sqrt4_exptab[(l >> 23) & 0xff] * iem_sqrt4_mantissatab[(l >> 13) & 0x3ff];
+ h = f * (1.5f * g - 0.5f * g * g * g * f);
+ *out++ = h;
+ *out++ = h;
+ *out++ = h;
+ *out++ = h;
+ }
+ in += 4;
+ }
+ return(w+4);
+}
+
+static void sigiem_sqrt4_dsp(t_sigiem_sqrt4 *x, t_signal **sp)
+{
+ dsp_add(sigiem_sqrt4_perform, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+static void sigiem_sqrt4_maketable(void)
+{
+ int i;
+ float f;
+ long l;
+
+ if(!iem_sqrt4_exptab)
+ {
+ iem_sqrt4_exptab = (float *)getbytes(sizeof(float) * IEMSQRT4TAB1SIZE);
+ for(i=0; i<IEMSQRT4TAB1SIZE; i++)
+ {
+ l = (i ? (i == IEMSQRT4TAB1SIZE-1 ? IEMSQRT4TAB1SIZE-2 : i) : 1)<< 23;
+ *(long *)(&f) = l;
+ iem_sqrt4_exptab[i] = 1.0f/sqrt(f);
+ }
+ }
+ if(!iem_sqrt4_mantissatab)
+ {
+ iem_sqrt4_mantissatab = (float *)getbytes(sizeof(float) * IEMSQRT4TAB2SIZE);
+ for(i=0; i<IEMSQRT4TAB2SIZE; i++)
+ {
+ f = 1.0f + (1.0f/(float)IEMSQRT4TAB2SIZE) * (float)i;
+ iem_sqrt4_mantissatab[i] = 1.0f/sqrt(f);
+ }
+ }
+}
+
+static void *sigiem_sqrt4_new(void)
+{
+ t_sigiem_sqrt4 *x = (t_sigiem_sqrt4 *)pd_new(sigiem_sqrt4_class);
+
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_msi = 0;
+ return (x);
+}
+
+void sigiem_sqrt4_setup(void)
+{
+ sigiem_sqrt4_class = class_new(gensym("iem_sqrt4~"), (t_newmethod)sigiem_sqrt4_new, 0,
+ sizeof(t_sigiem_sqrt4), 0, 0);
+ CLASS_MAINSIGNALIN(sigiem_sqrt4_class, t_sigiem_sqrt4, x_msi);
+ class_addmethod(sigiem_sqrt4_class, (t_method)sigiem_sqrt4_dsp, gensym("dsp"), 0);
+ sigiem_sqrt4_maketable();
+ class_sethelpsymbol(sigiem_sqrt4_class, gensym("iemhelp/help-iem_sqrt4~"));
+}
+
diff --git a/src/iemlib1/siglp1_t.c b/src/iemlib1/siglp1_t.c
new file mode 100644
index 0000000..060d988
--- /dev/null
+++ b/src/iemlib1/siglp1_t.c
@@ -0,0 +1,219 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* -- lp1_t~ - slow dynamic lowpass-filter 1. order with tau input --- */
+
+typedef struct siglp1_t
+{
+ t_object x_obj;
+ float yn1;
+ float c0;
+ float c1;
+ float sr;
+ float cur_t;
+ float delta_t;
+ float end_t;
+ float ticks_per_interpol_time;
+ float rcp_ticks;
+ float interpol_time;
+ int ticks;
+ int counter_t;
+ float x_msi;
+} t_siglp1_t;
+
+t_class *siglp1_t_class;
+
+static void siglp1_t_dsp_tick(t_siglp1_t *x)
+{
+ if(x->counter_t)
+ {
+ if(x->counter_t <= 1)
+ {
+ x->cur_t = x->end_t;
+ x->counter_t = 0;
+ }
+ else
+ {
+ x->counter_t--;
+ x->cur_t += x->delta_t;
+ }
+ if(x->cur_t == 0.0f)
+ x->c1 = 0.0f;
+ else
+ x->c1 = exp((x->sr)/x->cur_t);
+ x->c0 = 1.0f - x->c1;
+ }
+}
+
+static t_int *siglp1_t_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_siglp1_t *x = (t_siglp1_t *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float yn0, yn1=x->yn1;
+ float c0=x->c0, c1=x->c1;
+
+ siglp1_t_dsp_tick(x);
+ for(i=0; i<n; i++)
+ {
+ yn0 = (*in++)*c0 + yn1*c1;
+ *out++ = yn0;
+ yn1 = yn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(yn1))
+ yn1 = 0.0f;
+ x->yn1 = yn1;
+ return(w+5);
+}
+
+static t_int *siglp1_t_perf8(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_siglp1_t *x = (t_siglp1_t *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float yn[9];
+ float c0=x->c0, c1=x->c1;
+
+ siglp1_t_dsp_tick(x);
+ yn[0] = x->yn1;
+ for(i=0; i<n; i+=8, in+=8, out+=8)
+ {
+ yn[1] = in[0]*c0 + yn[0]*c1;
+ out[0] = yn[1];
+ yn[2] = in[1]*c0 + yn[1]*c1;
+ out[1] = yn[2];
+ yn[3] = in[2]*c0 + yn[2]*c1;
+ out[2] = yn[3];
+ yn[4] = in[3]*c0 + yn[3]*c1;
+ out[3] = yn[4];
+ yn[5] = in[4]*c0 + yn[4]*c1;
+ out[4] = yn[5];
+ yn[6] = in[5]*c0 + yn[5]*c1;
+ out[5] = yn[6];
+ yn[7] = in[6]*c0 + yn[6]*c1;
+ out[6] = yn[7];
+ yn[8] = in[7]*c0 + yn[7]*c1;
+ out[7] = yn[8];
+ yn[0] = yn[8];
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(yn[0]))
+ yn[0] = 0.0f;
+
+ x->yn1 = yn[0];
+ return(w+5);
+}
+
+static void siglp1_t_ft2(t_siglp1_t *x, t_floatarg t)
+{
+ int i = (int)((x->ticks_per_interpol_time)*t);
+
+ x->interpol_time = t;
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+}
+
+static void siglp1_t_ft1(t_siglp1_t *x, t_floatarg time_const)
+{
+ if(time_const < 0.0f)
+ time_const = 0.0f;
+ if(time_const != x->cur_t)
+ {
+ x->end_t = time_const;
+ x->counter_t = x->ticks;
+ x->delta_t = (time_const - x->cur_t) * x->rcp_ticks;
+ }
+}
+
+static void siglp1_t_dsp(t_siglp1_t *x, t_signal **sp)
+{
+ int i, n=(int)sp[0]->s_n;
+
+ x->sr = -1000.0f / (float)(sp[0]->s_sr);
+ x->ticks_per_interpol_time = 0.001f * (float)(sp[0]->s_sr) / (float)n;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ if(x->cur_t == 0.0f)
+ x->c1 = 0.0f;
+ else
+ x->c1 = exp((x->sr)/x->cur_t);
+ x->c0 = 1.0f - x->c1;
+ if(n&7)
+ dsp_add(siglp1_t_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ else
+ dsp_add(siglp1_t_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+}
+
+static void *siglp1_t_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_siglp1_t *x = (t_siglp1_t *)pd_new(siglp1_t_class);
+ int i;
+ float time_const=0.0f, interpol=0.0f;
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0;
+ x->counter_t = 1;
+ x->delta_t = 0.0f;
+ x->interpol_time = 0.0f;
+ x->yn1 = 0.0f;
+ x->sr = -1.0f / 44.1f;
+ if((argc >= 1)&&IS_A_FLOAT(argv,0))
+ time_const = (float)atom_getfloatarg(0, argc, argv);
+ if((argc >= 2)&&IS_A_FLOAT(argv,1))
+ interpol = (float)atom_getfloatarg(1, argc, argv);
+ if(time_const < 0.0f)
+ time_const = 0.0f;
+ x->cur_t = time_const;
+ if(time_const == 0.0f)
+ x->c1 = 0.0f;
+ else
+ x->c1 = exp((x->sr)/time_const);
+ x->c0 = 1.0f - x->c1;
+ if(interpol < 0.0f)
+ interpol = 0.0f;
+ x->interpol_time = interpol;
+ x->ticks_per_interpol_time = 0.5f;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ x->end_t = x->cur_t;
+ return (x);
+}
+
+void siglp1_t_setup(void)
+{
+ siglp1_t_class = class_new(gensym("lp1_t~"), (t_newmethod)siglp1_t_new,
+ 0, sizeof(t_siglp1_t), 0, A_GIMME, 0);
+ CLASS_MAINSIGNALIN(siglp1_t_class, t_siglp1_t, x_msi);
+ class_addmethod(siglp1_t_class, (t_method)siglp1_t_dsp, gensym("dsp"), 0);
+ class_addmethod(siglp1_t_class, (t_method)siglp1_t_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(siglp1_t_class, (t_method)siglp1_t_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_sethelpsymbol(siglp1_t_class, gensym("iemhelp/help-lp1_t~"));
+}
diff --git a/src/iemlib1/sigmov_avrg_kern.c b/src/iemlib1/sigmov_avrg_kern.c
new file mode 100644
index 0000000..1c77a49
--- /dev/null
+++ b/src/iemlib1/sigmov_avrg_kern.c
@@ -0,0 +1,143 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* -- mov_avrg_kern~ - kernel for a moving-average-filter with IIR - */
+
+typedef struct sigmov_avrg_kern
+{
+ t_object x_obj;
+ double x_wn1;
+ double x_a0;
+ double x_sr;
+ double x_mstime;
+ int x_nsamps;
+ int x_counter;
+ float x_msi;
+} t_sigmov_avrg_kern;
+
+t_class *sigmov_avrg_kern_class;
+
+static t_int *sigmov_avrg_kern_perform(t_int *w)
+{
+ float *in_direct = (float *)(w[1]);
+ float *in_delayed = (float *)(w[2]);
+ float *out = (float *)(w[3]);
+ t_sigmov_avrg_kern *x = (t_sigmov_avrg_kern *)(w[4]);
+ int i, n = (int)(w[5]);
+ double wn0, wn1=x->x_wn1, a0=x->x_a0;
+
+ if(x->x_counter)
+ {
+ int counter = x->x_counter;
+
+ if(counter >= n)
+ {
+ x->x_counter = counter - n;
+ for(i=0; i<n; i++)
+ {
+ wn0 = wn1 + a0*(double)(*in_direct++);
+ *out++ = (float)wn0;
+ wn1 = wn0;
+ }
+ }
+ else
+ {
+ x->x_counter = 0;
+ for(i=0; i<counter; i++)
+ {
+ wn0 = wn1 + a0*(double)(*in_direct++);
+ *out++ = (float)wn0;
+ wn1 = wn0;
+ }
+ for(i=counter; i<n; i++)
+ {
+ wn0 = wn1 + a0*(double)(*in_direct++ - *in_delayed++);
+ *out++ = (float)wn0;
+ wn1 = wn0;
+ }
+ }
+ }
+ else
+ {
+ for(i=0; i<n; i++)
+ {
+ wn0 = wn1 + a0*(double)(*in_direct++ - *in_delayed++);
+ *out++ = (float)wn0;
+ wn1 = wn0;
+ }
+ }
+ x->x_wn1 = wn1;
+ return(w+6);
+}
+
+static void sigmov_avrg_kern_ft1(t_sigmov_avrg_kern *x, t_floatarg mstime)
+{
+ if(mstime < 0.04)
+ mstime = 0.04;
+ x->x_mstime = (double)mstime;
+ x->x_nsamps = (int)(x->x_sr * x->x_mstime);
+ x->x_counter = x->x_nsamps;
+ x->x_wn1 = 0.0;
+ x->x_a0 = 1.0/(double)(x->x_nsamps);
+}
+
+static void sigmov_avrg_kern_reset(t_sigmov_avrg_kern *x)
+{
+ x->x_counter = x->x_nsamps;
+ x->x_wn1 = 0.0;
+}
+
+static void sigmov_avrg_kern_dsp(t_sigmov_avrg_kern *x, t_signal **sp)
+{
+ x->x_sr = 0.001*(double)(sp[0]->s_sr);
+ x->x_nsamps = (int)(x->x_sr * x->x_mstime);
+ x->x_counter = x->x_nsamps;
+ x->x_wn1 = 0.0;
+ x->x_a0 = 1.0/(double)(x->x_nsamps);
+ dsp_add(sigmov_avrg_kern_perform, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigmov_avrg_kern_new(t_floatarg mstime)
+{
+ t_sigmov_avrg_kern *x = (t_sigmov_avrg_kern *)pd_new(sigmov_avrg_kern_class);
+
+ if(mstime < 0.04)
+ mstime = 0.04;
+ x->x_mstime = (double)mstime;
+ x->x_sr = 44.1;
+ x->x_nsamps = (int)(x->x_sr * x->x_mstime);
+ x->x_counter = x->x_nsamps;
+ x->x_wn1 = 0.0;
+ x->x_a0 = 1.0/(double)(x->x_nsamps);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0;
+ return(x);
+}
+
+void sigmov_avrg_kern_setup(void)
+{
+ sigmov_avrg_kern_class = class_new(gensym("mov_avrg_kern~"), (t_newmethod)sigmov_avrg_kern_new,
+ 0, sizeof(t_sigmov_avrg_kern), 0, A_FLOAT, 0);
+ CLASS_MAINSIGNALIN(sigmov_avrg_kern_class, t_sigmov_avrg_kern, x_msi);
+ class_addmethod(sigmov_avrg_kern_class, (t_method)sigmov_avrg_kern_dsp, gensym("dsp"), 0);
+ class_addmethod(sigmov_avrg_kern_class, (t_method)sigmov_avrg_kern_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sigmov_avrg_kern_class, (t_method)sigmov_avrg_kern_reset, gensym("reset"), 0);
+}
diff --git a/src/iemlib1/sigpara_bp2.c b/src/iemlib1/sigpara_bp2.c
new file mode 100644
index 0000000..871191e
--- /dev/null
+++ b/src/iemlib1/sigpara_bp2.c
@@ -0,0 +1,426 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* ---------- para_bp2~ - parametric bandpass 2. order ----------- */
+
+typedef struct sigpara_bp2
+{
+ t_object x_obj;
+ float wn1;
+ float wn2;
+ float a0;
+ float a1;
+ float a2;
+ float b1;
+ float b2;
+ float sr;
+ float cur_f;
+ float cur_l;
+ float cur_a;
+ float cur_g;
+ float delta_f;
+ float delta_a;
+ float delta_g;
+ float end_f;
+ float end_a;
+ float end_g;
+ float ticks_per_interpol_time;
+ float rcp_ticks;
+ float interpol_time;
+ int ticks;
+ int counter_f;
+ int counter_a;
+ int counter_g;
+ int event_mask;
+ void *x_debug_outlet;
+ t_atom x_at[5];
+ float x_msi;
+} t_sigpara_bp2;
+
+t_class *sigpara_bp2_class;
+
+static void sigpara_bp2_calc(t_sigpara_bp2 *x)
+{
+ float l, al, gal, l2, rcp;
+
+ l = x->cur_l;
+ l2 = l*l + 1.0;
+ al = l*x->cur_a;
+ gal = al*x->cur_g;
+ rcp = 1.0f/(al + l2);
+ x->a0 = rcp*(l2 + gal);
+ x->a1 = rcp*2.0f*(2.0f - l2);
+ x->a2 = rcp*(l2 - gal);
+ x->b1 = -x->a1;
+ x->b2 = rcp*(al - l2);
+}
+
+static void sigpara_bp2_dsp_tick(t_sigpara_bp2 *x)
+{
+ if(x->event_mask)
+ {
+ float discriminant;
+
+ if(x->counter_f)
+ {
+ float l, si, co;
+
+ if(x->counter_f <= 1)
+ {
+ x->cur_f = x->end_f;
+ x->counter_f = 0;
+ x->event_mask &= 6;/*set event_mask_bit 0 = 0*/
+ }
+ else
+ {
+ x->counter_f--;
+ x->cur_f *= x->delta_f;
+ }
+ l = x->cur_f * x->sr;
+ if(l < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(l > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(l);
+ co = cos(l);
+ x->cur_l = co/si;
+ }
+ }
+ if(x->counter_a)
+ {
+ if(x->counter_a <= 1)
+ {
+ x->cur_a = x->end_a;
+ x->counter_a = 0;
+ x->event_mask &= 5;/*set event_mask_bit 1 = 0*/
+ }
+ else
+ {
+ x->counter_a--;
+ x->cur_a *= x->delta_a;
+ }
+ }
+ if(x->counter_g)
+ {
+ if(x->counter_g <= 1)
+ {
+ x->cur_g = x->end_g;
+ x->counter_g = 0;
+ x->event_mask &= 3;/*set event_mask_bit 2 = 0*/
+ }
+ else
+ {
+ x->counter_g--;
+ x->cur_g *= x->delta_g;
+ }
+ }
+
+ sigpara_bp2_calc(x);
+
+ /* stability check */
+
+ discriminant = x->b1 * x->b1 + 4.0f * x->b2;
+ if(x->b1 <= -1.9999996f)
+ x->b1 = -1.9999996f;
+ else if(x->b1 >= 1.9999996f)
+ x->b1 = 1.9999996f;
+
+ if(x->b2 <= -0.9999998f)
+ x->b2 = -0.9999998f;
+ else if(x->b2 >= 0.9999998f)
+ x->b2 = 0.9999998f;
+
+ if(discriminant >= 0.0f)
+ {
+ if(0.9999998f - x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f - x->b1;
+ if(0.9999998f + x->b1 - x->b2 < 0.0f)
+ x->b2 = 0.9999998f + x->b1;
+ }
+ }
+}
+
+static t_int *sigpara_bp2_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigpara_bp2 *x = (t_sigpara_bp2 *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn0, wn1=x->wn1, wn2=x->wn2;
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sigpara_bp2_dsp_tick(x);
+ for(i=0; i<n; i++)
+ {
+ wn0 = *in++ + b1*wn1 + b2*wn2;
+ *out++ = a0*wn0 + a1*wn1 + a2*wn2;
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->wn1 = wn1;
+ x->wn2 = wn2;
+ return(w+5);
+}
+/* yn0 = *out;
+ xn0 = *in;
+ *************
+ yn0 = a0*xn0 + a1*xn1 + a2*xn2 + b1*yn1 + b2*yn2;
+ yn2 = yn1;
+ yn1 = yn0;
+ xn2 = xn1;
+ xn1 = xn0;
+ *************************
+ y/x = (a0 + a1*z-1 + a2*z-2)/(1 - b1*z-1 - b2*z-2);*/
+
+static t_int *sigpara_bp2_perf8(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigpara_bp2 *x = (t_sigpara_bp2 *)(w[3]);
+ int i, n = (t_int)(w[4]);
+ float wn[10];
+ float a0=x->a0, a1=x->a1, a2=x->a2;
+ float b1=x->b1, b2=x->b2;
+
+ sigpara_bp2_dsp_tick(x);
+ wn[0] = x->wn2;
+ wn[1] = x->wn1;
+ for(i=0; i<n; i+=8, in+=8, out+=8)
+ {
+ wn[2] = in[0] + b1*wn[1] + b2*wn[0];
+ out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
+ wn[3] = in[1] + b1*wn[2] + b2*wn[1];
+ out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
+ wn[4] = in[2] + b1*wn[3] + b2*wn[2];
+ out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
+ wn[5] = in[3] + b1*wn[4] + b2*wn[3];
+ out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
+ wn[6] = in[4] + b1*wn[5] + b2*wn[4];
+ out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
+ wn[7] = in[5] + b1*wn[6] + b2*wn[5];
+ out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
+ wn[8] = in[6] + b1*wn[7] + b2*wn[6];
+ out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
+ wn[9] = in[7] + b1*wn[8] + b2*wn[7];
+ out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
+ wn[0] = wn[8];
+ wn[1] = wn[9];
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn[0]))
+ wn[0] = 0.0f;
+ if(PD_BADFLOAT(wn[1]))
+ wn[1] = 0.0f;
+
+ x->wn1 = wn[1];
+ x->wn2 = wn[0];
+ return(w+5);
+}
+
+static void sigpara_bp2_ft4(t_sigpara_bp2 *x, t_floatarg t)
+{
+ int i = (int)((x->ticks_per_interpol_time)*t);
+
+ x->interpol_time = t;
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+}
+
+static void sigpara_bp2_ft3(t_sigpara_bp2 *x, t_floatarg l)
+{
+ float g = exp(0.11512925465 * l);
+
+ if(g != x->cur_g)
+ {
+ x->end_g = g;
+ x->counter_g = x->ticks;
+ x->delta_g = exp(log(g/x->cur_g)*x->rcp_ticks);
+ x->event_mask |= 4;/*set event_mask_bit 2 = 1*/
+ }
+}
+
+static void sigpara_bp2_ft2(t_sigpara_bp2 *x, t_floatarg q)
+{
+ float a;
+
+ if(q <= 0.0f)
+ q = 0.000001f;
+ a = 1.0f/q;
+ if(a != x->cur_a)
+ {
+ x->end_a = a;
+ x->counter_a = x->ticks;
+ x->delta_a = exp(log(a/x->cur_a)*x->rcp_ticks);
+ x->event_mask |= 2;/*set event_mask_bit 1 = 1*/
+ }
+}
+
+static void sigpara_bp2_ft1(t_sigpara_bp2 *x, t_floatarg f)
+{
+ if(f <= 0.0f)
+ f = 0.000001f;
+ if(f != x->cur_f)
+ {
+ x->end_f = f;
+ x->counter_f = x->ticks;
+ x->delta_f = exp(log(f/x->cur_f)*x->rcp_ticks);
+ x->event_mask |= 1;/*set event_mask_bit 0 = 1*/
+ }
+}
+
+static void sigpara_bp2_print(t_sigpara_bp2 *x)
+{
+// post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
+ x->x_at[0].a_w.w_float = x->b1;
+ x->x_at[1].a_w.w_float = x->b2;
+ x->x_at[2].a_w.w_float = x->a0;
+ x->x_at[3].a_w.w_float = x->a1;
+ x->x_at[4].a_w.w_float = x->a2;
+ outlet_list(x->x_debug_outlet, &s_list, 5, x->x_at); post("fb1 = %g, fb2 = %g, ff1 = %g, ff2 = %g, ff3 = %g", x->b1, x->b2, x->a0, x->a1, x->a2);
+}
+
+static void sigpara_bp2_dsp(t_sigpara_bp2 *x, t_signal **sp)
+{
+ float si, co, f;
+ int i, n=(int)sp[0]->s_n;
+
+ x->sr = 3.14159265358979323846f / (float)(sp[0]->s_sr);
+ x->ticks_per_interpol_time = 0.001f * (float)(sp[0]->s_sr) / (float)n;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ f = x->cur_f * x->sr;
+ if(f < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(f > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(f);
+ co = cos(f);
+ x->cur_l = co/si;
+ }
+ if(n&7)
+ dsp_add(sigpara_bp2_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+ else
+ dsp_add(sigpara_bp2_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, x, n);
+}
+
+static void *sigpara_bp2_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_sigpara_bp2 *x = (t_sigpara_bp2 *)pd_new(sigpara_bp2_class);
+ int i;
+ float si, co, f=0.0, q=1.0, l=0.0, interpol=0.0;
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft3"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_debug_outlet = outlet_new(&x->x_obj, &s_list);
+ x->x_msi = 0;
+
+ x->x_at[0].a_type = A_FLOAT;
+ x->x_at[1].a_type = A_FLOAT;
+ x->x_at[2].a_type = A_FLOAT;
+ x->x_at[3].a_type = A_FLOAT;
+ x->x_at[4].a_type = A_FLOAT;
+
+ x->event_mask = 1;
+ x->counter_f = 1;
+ x->counter_a = 0;
+ x->counter_g = 0;
+ x->delta_f = 0.0f;
+ x->delta_a = 0.0f;
+ x->delta_g = 0.0f;
+ x->interpol_time = 500.0f;
+ x->wn1 = 0.0;
+ x->wn2 = 0.0;
+ x->a0 = 0.0;
+ x->a1 = 0.0;
+ x->a2 = 0.0;
+ x->b1 = 0.0;
+ x->b2 = 0.0;
+ x->sr = 3.14159265358979323846f / 44100.0f;
+ x->cur_a = 1.0;
+ if((argc == 4)&&IS_A_FLOAT(argv,3)&&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,0))
+ {
+ f = (float)atom_getfloatarg(0, argc, argv);
+ q = (float)atom_getfloatarg(1, argc, argv);
+ l = (float)atom_getfloatarg(2, argc, argv);
+ interpol = (float)atom_getfloatarg(3, argc, argv);
+ }
+ if(f <= 0.0f)
+ f = 0.000001f;
+ x->cur_f = f;
+ f *= x->sr;
+ if(f < 1.0e-20f)
+ x->cur_l = 1.0e20f;
+ else if(f > 1.57079632f)
+ x->cur_l = 0.0f;
+ else
+ {
+ si = sin(f);
+ co = cos(f);
+ x->cur_l = co/si;
+ }
+ if(q <= 0.0f)
+ q = 0.000001f;
+ x->cur_a = 1.0f/q;
+ x->cur_g = exp(0.11512925465 * l);
+ if(interpol <= 0.0f)
+ interpol = 0.0f;
+ x->interpol_time = interpol;
+ x->ticks_per_interpol_time = 0.5f;
+ i = (int)((x->ticks_per_interpol_time)*(x->interpol_time));
+ if(i <= 0)
+ i = 1;
+ x->ticks = i;
+ x->rcp_ticks = 1.0f / (float)i;
+ x->end_f = x->cur_f;
+ x->end_a = x->cur_a;
+ x->end_g = x->cur_g;
+ return(x);
+}
+
+void sigpara_bp2_setup(void)
+{
+ sigpara_bp2_class = class_new(gensym("para_bp2~"), (t_newmethod)sigpara_bp2_new,
+ 0, sizeof(t_sigpara_bp2), 0, A_GIMME, 0);
+ CLASS_MAINSIGNALIN(sigpara_bp2_class, t_sigpara_bp2, x_msi);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_dsp, gensym("dsp"), 0);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_ft3, gensym("ft3"), A_FLOAT, 0);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_ft4, gensym("ft4"), A_FLOAT, 0);
+ class_addmethod(sigpara_bp2_class, (t_method)sigpara_bp2_print, gensym("print"), 0);
+ class_sethelpsymbol(sigpara_bp2_class, gensym("iemhelp/help-para_bp2~"));
+}
diff --git a/src/iemlib1/sigpeakenv.c b/src/iemlib1/sigpeakenv.c
new file mode 100644
index 0000000..a16638e
--- /dev/null
+++ b/src/iemlib1/sigpeakenv.c
@@ -0,0 +1,102 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- peakenv~ - simple peak-envelope-converter. ----------------- */
+
+typedef struct sigpeakenv
+{
+ t_object x_obj;
+ float x_sr;
+ float x_old_peak;
+ float x_c1;
+ float x_releasetime;
+ float x_msi;
+} t_sigpeakenv;
+
+t_class *sigpeakenv_class;
+
+static void sigpeakenv_reset(t_sigpeakenv *x)
+{
+ x->x_old_peak = 0.0f;
+}
+
+static void sigpeakenv_ft1(t_sigpeakenv *x, t_floatarg f)/* release-time in ms */
+{
+ if(f < 0.0f)
+ f = 0.0f;
+ x->x_releasetime = f;
+ x->x_c1 = exp(-1.0/(x->x_sr*0.001*x->x_releasetime));
+}
+
+static t_int *sigpeakenv_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[2]);
+ t_sigpeakenv *x = (t_sigpeakenv *)(w[3]);
+ int n = (int)(w[4]);
+ float peak = x->x_old_peak;
+ float c1 = x->x_c1;
+ float absolute;
+ int i;
+
+ for(i=0; i<n; i++)
+ {
+ absolute = fabs(*in++);
+ peak *= c1;
+ if(absolute > peak)
+ peak = absolute;
+ *out++ = peak;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(peak))
+ peak = 0.0f;
+ x->x_old_peak = peak;
+ return(w+5);
+}
+
+static void sigpeakenv_dsp(t_sigpeakenv *x, t_signal **sp)
+{
+ x->x_sr = (float)sp[0]->s_sr;
+ sigpeakenv_ft1(x, x->x_releasetime);
+ dsp_add(sigpeakenv_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigpeakenv_new(t_floatarg f)
+{
+ t_sigpeakenv *x = (t_sigpeakenv *)pd_new(sigpeakenv_class);
+
+ if(f <= 0.0f)
+ f = 0.0f;
+ x->x_sr = 44100.0f;
+ sigpeakenv_ft1(x, f);
+ x->x_old_peak = 0.0f;
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0;
+ return(x);
+}
+
+void sigpeakenv_setup(void)
+{
+ sigpeakenv_class = class_new(gensym("peakenv~"), (t_newmethod)sigpeakenv_new,
+ 0, sizeof(t_sigpeakenv), 0, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigpeakenv_class, t_sigpeakenv, x_msi);
+ class_addmethod(sigpeakenv_class, (t_method)sigpeakenv_dsp, gensym("dsp"), 0);
+ class_addmethod(sigpeakenv_class, (t_method)sigpeakenv_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(sigpeakenv_class, (t_method)sigpeakenv_reset, gensym("reset"), 0);
+ class_sethelpsymbol(sigpeakenv_class, gensym("iemhelp/help-peakenv~"));
+}
diff --git a/src/iemlib1/sigprvu.c b/src/iemlib1/sigprvu.c
new file mode 100644
index 0000000..bb4b72a
--- /dev/null
+++ b/src/iemlib1/sigprvu.c
@@ -0,0 +1,282 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- prvu~ - simple peak&rms-vu-meter. ----------------- */
+
+typedef struct sigprvu
+{
+ t_object x_obj;
+ t_atom x_at[3];
+ void *x_clock_metro;
+ int x_metro_time;
+ void *x_clock_hold;
+ int x_hold_time;
+ float x_cur_peak;
+ float x_old_peak;
+ float x_hold_peak;
+ int x_hold;
+ float x_sum_rms;
+ float x_old_rms;
+ float x_rcp;
+ float x_sr;
+ float x_threshold_over;
+ int x_overflow_counter;
+ float x_release_time;
+ float x_c1;
+ int x_started;
+ float x_msi;
+} t_sigprvu;
+
+t_class *sigprvu_class;
+static void sigprvu_tick_metro(t_sigprvu *x);
+static void sigprvu_tick_hold(t_sigprvu *x);
+
+static void sigprvu_reset(t_sigprvu *x)
+{
+ x->x_at[0].a_w.w_float = -99.9f;
+ x->x_at[1].a_w.w_float = -99.9f;
+ x->x_at[2].a_w.w_float = 0.0f;
+ outlet_list(x->x_obj.ob_outlet, &s_list, 3, x->x_at);
+ x->x_overflow_counter = 0;
+ x->x_cur_peak = 0.0f;
+ x->x_old_peak = 0.0f;
+ x->x_hold_peak = 0.0f;
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = 0.0f;
+ x->x_hold = 0;
+ clock_unset(x->x_clock_hold);
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigprvu_stop(t_sigprvu *x)
+{
+ clock_unset(x->x_clock_metro);
+ x->x_started = 0;
+}
+
+static void sigprvu_start(t_sigprvu *x)
+{
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+ x->x_started = 1;
+}
+
+static void sigprvu_float(t_sigprvu *x, t_floatarg f)
+{
+ if(f == 0.0)
+ {
+ clock_unset(x->x_clock_metro);
+ x->x_started = 0;
+ }
+ else
+ {
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+ x->x_started = 1;
+ }
+}
+
+static void sigprvu_t_release(t_sigprvu *x, t_floatarg release_time)
+{
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ x->x_release_time = release_time;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+}
+
+static void sigprvu_t_metro(t_sigprvu *x, t_floatarg metro_time)
+{
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ x->x_metro_time = (int)metro_time;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+}
+
+static void sigprvu_t_hold(t_sigprvu *x, t_floatarg hold_time)
+{
+ if(hold_time <= 20.0f)
+ hold_time = 20.0f;
+ x->x_hold_time = (int)hold_time;
+}
+
+static void sigprvu_threshold(t_sigprvu *x, t_floatarg thresh)
+{
+ x->x_threshold_over = thresh;
+}
+
+static t_int *sigprvu_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ t_sigprvu *x = (t_sigprvu *)(w[2]);
+ int n = (int)(w[3]);
+ float peak = x->x_cur_peak, pow, sum=x->x_sum_rms;
+ int i;
+
+ if(x->x_started)
+ {
+ for(i=0; i<n; i++)
+ {
+ pow = in[i]*in[i];
+ if(pow > peak)
+ peak = pow;
+ sum += pow;
+ }
+ x->x_cur_peak = peak;
+ x->x_sum_rms = sum;
+ }
+ return(w+4);
+}
+
+static void sigprvu_dsp(t_sigprvu *x, t_signal **sp)
+{
+ x->x_sr = 0.001*(float)sp[0]->s_sr;
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+ dsp_add(sigprvu_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigprvu_tick_hold(t_sigprvu *x)
+{
+ x->x_hold = 0;
+ x->x_hold_peak = x->x_old_peak;
+}
+
+static void sigprvu_tick_metro(t_sigprvu *x)
+{
+ float dbr, dbp, cur_rms, c1=x->x_c1;
+
+ x->x_old_peak *= c1;
+ /* NAN protect */
+ if(PD_BADFLOAT(x->x_old_peak))
+ x->x_old_peak = 0.0f;
+
+ if(x->x_cur_peak > x->x_old_peak)
+ x->x_old_peak = x->x_cur_peak;
+ if(x->x_old_peak > x->x_hold_peak)
+ {
+ x->x_hold = 1;
+ x->x_hold_peak = x->x_old_peak;
+ clock_delay(x->x_clock_hold, x->x_hold_time);
+ }
+ if(!x->x_hold)
+ x->x_hold_peak = x->x_old_peak;
+ if(x->x_hold_peak <= 0.0000000001f)
+ dbp = -99.9f;
+ else if(x->x_hold_peak > 1000000.0f)
+ {
+ dbp = 60.0f;
+ x->x_hold_peak = 1000000.0f;
+ x->x_old_peak = 1000000.0f;
+ }
+ else
+ dbp = 4.3429448195f*log(x->x_hold_peak);
+ x->x_cur_peak = 0.0f;
+ if(dbp >= x->x_threshold_over)
+ x->x_overflow_counter++;
+ x->x_at[1].a_w.w_float = dbp;
+ x->x_at[2].a_w.w_float = (float)x->x_overflow_counter;
+
+ cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
+ /* NAN protect */
+ if(PD_BADFLOAT(cur_rms))
+ cur_rms = 0.0f;
+
+ if(cur_rms <= 0.0000000001f)
+ dbr = -99.9f;
+ else if(cur_rms > 1000000.0f)
+ {
+ dbr = 60.0f;
+ x->x_old_rms = 1000000.0f;
+ }
+ else
+ dbr = 4.3429448195f*log(cur_rms);
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = cur_rms;
+ x->x_at[0].a_w.w_float = dbr;
+ outlet_list(x->x_obj.ob_outlet, &s_list, 3, x->x_at);
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigprvu_ff(t_sigprvu *x)
+{
+ clock_free(x->x_clock_metro);
+ clock_free(x->x_clock_hold);
+}
+
+static void *sigprvu_new(t_floatarg metro_time, t_floatarg hold_time,
+ t_floatarg release_time, t_floatarg threshold)
+{
+ t_sigprvu *x;
+ float t;
+ int i;
+
+ x = (t_sigprvu *)pd_new(sigprvu_class);
+ if(metro_time <= 0.0f)
+ metro_time = 300.0f;
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ if(release_time <= 0.0f)
+ release_time = 300.0f;
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ if(hold_time <= 0.0f)
+ hold_time = 1000.0f;
+ if(hold_time <= 20.0f)
+ hold_time = 20.0f;
+ if(threshold == 0.0f)
+ threshold = -0.01f;
+ x->x_metro_time = (int)metro_time;
+ x->x_release_time = release_time;
+ x->x_hold_time = (int)hold_time;
+ x->x_threshold_over = threshold;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+ x->x_cur_peak = 0.0f;
+ x->x_old_peak = 0.0f;
+ x->x_hold_peak = 0.0f;
+ x->x_hold = 0;
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = 0.0f;
+ x->x_sr = 44.1f;
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+ x->x_overflow_counter = 0;
+ x->x_clock_metro = clock_new(x, (t_method)sigprvu_tick_metro);
+ x->x_clock_hold = clock_new(x, (t_method)sigprvu_tick_hold);
+ x->x_started = 1;
+ outlet_new(&x->x_obj, &s_list);
+ x->x_at[0].a_type = A_FLOAT;
+ x->x_at[1].a_type = A_FLOAT;
+ x->x_at[2].a_type = A_FLOAT;
+ x->x_msi = 0.0f;
+ return(x);
+}
+
+void sigprvu_setup(void)
+{
+ sigprvu_class = class_new(gensym("prvu~"), (t_newmethod)sigprvu_new,
+ (t_method)sigprvu_ff, sizeof(t_sigprvu), 0,
+ A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigprvu_class, t_sigprvu, x_msi);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_dsp, gensym("dsp"), 0);
+ class_addfloat(sigprvu_class, sigprvu_float);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_reset, gensym("reset"), 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_start, gensym("start"), 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_stop, gensym("stop"), 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_t_release, gensym("t_release"), A_FLOAT, 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_t_metro, gensym("t_metro"), A_FLOAT, 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_t_hold, gensym("t_hold"), A_FLOAT, 0);
+ class_addmethod(sigprvu_class, (t_method)sigprvu_threshold, gensym("threshold"), A_FLOAT, 0);
+ class_sethelpsymbol(sigprvu_class, gensym("iemhelp/help-prvu~"));
+}
diff --git a/src/iemlib1/sigpvu.c b/src/iemlib1/sigpvu.c
new file mode 100644
index 0000000..5dd4ea4
--- /dev/null
+++ b/src/iemlib1/sigpvu.c
@@ -0,0 +1,206 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- pvu~ - simple peak-vu-meter. ----------------- */
+
+typedef struct sigpvu
+{
+ t_object x_obj;
+ void *x_outlet_meter;
+ void *x_outlet_over;
+ void *x_clock;
+ float x_cur_peak;
+ float x_old_peak;
+ float x_threshold_over;
+ float x_c1;
+ int x_metro_time;
+ float x_release_time;
+ int x_overflow_counter;
+ int x_started;
+ float x_msi;
+} t_sigpvu;
+
+t_class *sigpvu_class;
+static void sigpvu_tick(t_sigpvu *x);
+
+static void sigpvu_reset(t_sigpvu *x)
+{
+ outlet_float(x->x_outlet_over, (t_float)0);
+ outlet_float(x->x_outlet_meter, -199.9);
+ x->x_overflow_counter = 0;
+ x->x_cur_peak = 0.0f;
+ x->x_old_peak = 0.0f;
+ clock_delay(x->x_clock, x->x_metro_time);
+}
+
+static void sigpvu_stop(t_sigpvu *x)
+{
+ clock_unset(x->x_clock);
+ x->x_started = 0;
+}
+
+static void sigpvu_start(t_sigpvu *x)
+{
+ clock_delay(x->x_clock, x->x_metro_time);
+ x->x_started = 1;
+}
+
+static void sigpvu_float(t_sigpvu *x, t_floatarg f)
+{
+ if(f == 0.0)
+ {
+ clock_unset(x->x_clock);
+ x->x_started = 0;
+ }
+ else
+ {
+ clock_delay(x->x_clock, x->x_metro_time);
+ x->x_started = 1;
+ }
+}
+
+static void sigpvu_t_release(t_sigpvu *x, t_floatarg release_time)
+{
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ x->x_release_time = release_time;
+ x->x_c1 = exp(-(float)x->x_metro_time/(float)release_time);
+}
+
+static void sigpvu_t_metro(t_sigpvu *x, t_floatarg metro_time)
+{
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ x->x_metro_time = (int)metro_time;
+ x->x_c1 = exp(-(float)metro_time/(float)x->x_release_time);
+}
+
+static void sigpvu_threshold(t_sigpvu *x, t_floatarg thresh)
+{
+ x->x_threshold_over = thresh;
+}
+
+static t_int *sigpvu_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ t_sigpvu *x = (t_sigpvu *)(w[2]);
+ int n = (int)(w[3]);
+ float peak = x->x_cur_peak;
+ float absolute;
+ int i;
+
+ if(x->x_started)
+ {
+ for(i=0; i<n; i++)
+ {
+ absolute = fabs(*in++);
+ if(absolute > peak)
+ peak = absolute;
+ }
+ x->x_cur_peak = peak;
+ }
+ return(w+4);
+}
+
+static void sigpvu_dsp(t_sigpvu *x, t_signal **sp)
+{
+ dsp_add(sigpvu_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+ clock_delay(x->x_clock, x->x_metro_time);
+}
+
+static void sigpvu_tick(t_sigpvu *x)
+{
+ float db;
+ int i;
+
+ x->x_old_peak *= x->x_c1;
+ /* NAN protect */
+ if(PD_BADFLOAT(x->x_old_peak))
+ x->x_old_peak = 0.0f;
+
+ if(x->x_cur_peak > x->x_old_peak)
+ x->x_old_peak = x->x_cur_peak;
+ if(x->x_old_peak <= 0.0000000001f)
+ db = -199.9f;
+ else if(x->x_old_peak > 1000000.0f)
+ {
+ db = 120.0f;
+ x->x_old_peak = 1000000.0f;
+ }
+ else
+ db = 8.6858896381f*log(x->x_old_peak);
+ if(db >= x->x_threshold_over)
+ {
+ x->x_overflow_counter++;
+ outlet_float(x->x_outlet_over, (t_float)x->x_overflow_counter);
+ }
+ outlet_float(x->x_outlet_meter, db);
+ x->x_cur_peak = 0.0f;
+ clock_delay(x->x_clock, x->x_metro_time);
+}
+
+static void *sigpvu_new(t_floatarg metro_time, t_floatarg release_time, t_floatarg threshold)
+{
+ t_sigpvu *x;
+ float t;
+
+ x = (t_sigpvu *)pd_new(sigpvu_class);
+ if(metro_time <= 0.0f)
+ metro_time = 300.0f;
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ if(release_time <= 0.0f)
+ release_time = 300.0f;
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ if(threshold == 0.0f)
+ threshold = -0.01f;
+ x->x_threshold_over = threshold;
+ x->x_overflow_counter = 0;
+ x->x_metro_time = (int)metro_time;
+ x->x_release_time = release_time;
+ x->x_c1 = exp(-(float)metro_time/(float)release_time);
+ x->x_cur_peak = 0.0f;
+ x->x_old_peak = 0.0f;
+ x->x_clock = clock_new(x, (t_method)sigpvu_tick);
+ x->x_outlet_meter = outlet_new(&x->x_obj, &s_float);/* left */
+ x->x_outlet_over = outlet_new(&x->x_obj, &s_float); /* right */
+ x->x_started = 1;
+ x->x_msi = 0;
+ return(x);
+}
+
+static void sigpvu_ff(t_sigpvu *x)
+{
+ clock_free(x->x_clock);
+}
+
+void sigpvu_setup(void )
+{
+ sigpvu_class = class_new(gensym("pvu~"), (t_newmethod)sigpvu_new,
+ (t_method)sigpvu_ff, sizeof(t_sigpvu), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigpvu_class, t_sigpvu, x_msi);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_dsp, gensym("dsp"), 0);
+ class_addfloat(sigpvu_class, sigpvu_float);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_reset, gensym("reset"), 0);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_start, gensym("start"), 0);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_stop, gensym("stop"), 0);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_t_release, gensym("t_release"), A_FLOAT, 0);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_t_metro, gensym("t_metro"), A_FLOAT, 0);
+ class_addmethod(sigpvu_class, (t_method)sigpvu_threshold, gensym("threshold"), A_FLOAT, 0);
+ class_sethelpsymbol(sigpvu_class, gensym("iemhelp/help-pvu~"));
+}
diff --git a/src/iemlib1/sigrvu.c b/src/iemlib1/sigrvu.c
new file mode 100644
index 0000000..70b9cd7
--- /dev/null
+++ b/src/iemlib1/sigrvu.c
@@ -0,0 +1,187 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- rvu~ - simple peak&rms-vu-meter. ----------------- */
+
+typedef struct sigrvu
+{
+ t_object x_obj;
+ void *x_clock_metro;
+ int x_metro_time;
+ float x_sum_rms;
+ float x_old_rms;
+ float x_rcp;
+ float x_sr;
+ float x_release_time;
+ float x_c1;
+ int x_started;
+ float x_msi;
+} t_sigrvu;
+
+t_class *sigrvu_class;
+static void sigrvu_tick_metro(t_sigrvu *x);
+
+static void sigrvu_reset(t_sigrvu *x)
+{
+ outlet_float(x->x_obj.ob_outlet, -99.9f);
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = 0.0f;
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigrvu_stop(t_sigrvu *x)
+{
+ clock_unset(x->x_clock_metro);
+ x->x_started = 0;
+}
+
+static void sigrvu_start(t_sigrvu *x)
+{
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+ x->x_started = 1;
+}
+
+static void sigrvu_float(t_sigrvu *x, t_floatarg f)
+{
+ if(f == 0.0)
+ {
+ clock_unset(x->x_clock_metro);
+ x->x_started = 0;
+ }
+ else
+ {
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+ x->x_started = 1;
+ }
+}
+
+static void sigrvu_t_release(t_sigrvu *x, t_floatarg release_time)
+{
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ x->x_release_time = release_time;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+}
+
+static void sigrvu_t_metro(t_sigrvu *x, t_floatarg metro_time)
+{
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ x->x_metro_time = (int)metro_time;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+}
+
+static t_int *sigrvu_perform(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ t_sigrvu *x = (t_sigrvu *)(w[2]);
+ int n = (int)(w[3]);
+ float pow, sum=x->x_sum_rms;
+ int i;
+
+ if(x->x_started)
+ {
+ for(i=0; i<n; i++)
+ {
+ sum += in[i]*in[i];
+ }
+ x->x_sum_rms = sum;
+ }
+ return(w+4);
+}
+
+static void sigrvu_dsp(t_sigrvu *x, t_signal **sp)
+{
+ x->x_sr = 0.001*(float)sp[0]->s_sr;
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+ dsp_add(sigrvu_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigrvu_tick_metro(t_sigrvu *x)
+{
+ float dbr, cur_rms, c1=x->x_c1;
+
+ cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
+ /* NAN protect */
+ if(PD_BADFLOAT(cur_rms))
+ cur_rms = 0.0f;
+
+ if(cur_rms <= 0.0000000001f)
+ dbr = -99.9f;
+ else if(cur_rms > 1000000.0f)
+ {
+ dbr = 60.0f;
+ x->x_old_rms = 1000000.0f;
+ }
+ else
+ dbr = 4.3429448195f*log(cur_rms);
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = cur_rms;
+ outlet_float(x->x_obj.ob_outlet, dbr);
+ clock_delay(x->x_clock_metro, x->x_metro_time);
+}
+
+static void sigrvu_ff(t_sigrvu *x)
+{
+ clock_free(x->x_clock_metro);
+}
+
+static void *sigrvu_new(t_floatarg metro_time, t_floatarg release_time)
+{
+ t_sigrvu *x=(t_sigrvu *)pd_new(sigrvu_class);
+ float t;
+ int i;
+
+ if(metro_time <= 0.0f)
+ metro_time = 300.0f;
+ if(metro_time <= 20.0f)
+ metro_time = 20.0f;
+ if(release_time <= 0.0f)
+ release_time = 300.0f;
+ if(release_time <= 20.0f)
+ release_time = 20.0f;
+ x->x_metro_time = (int)metro_time;
+ x->x_release_time = release_time;
+ x->x_c1 = exp(-2.0*(float)x->x_metro_time/x->x_release_time);
+ x->x_sum_rms = 0.0f;
+ x->x_old_rms = 0.0f;
+ x->x_sr = 44.1f;
+ x->x_rcp = 1.0f/(x->x_sr*(float)x->x_metro_time);
+ x->x_clock_metro = clock_new(x, (t_method)sigrvu_tick_metro);
+ x->x_started = 1;
+ outlet_new(&x->x_obj, &s_float);
+ x->x_msi = 0.0f;
+ return(x);
+}
+
+void sigrvu_setup(void)
+{
+ sigrvu_class = class_new(gensym("rvu~"), (t_newmethod)sigrvu_new,
+ (t_method)sigrvu_ff, sizeof(t_sigrvu), 0,
+ A_DEFFLOAT, A_DEFFLOAT, 0);
+ CLASS_MAINSIGNALIN(sigrvu_class, t_sigrvu, x_msi);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_dsp, gensym("dsp"), 0);
+ class_addfloat(sigrvu_class, sigrvu_float);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_reset, gensym("reset"), 0);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_start, gensym("start"), 0);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_stop, gensym("stop"), 0);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_t_release, gensym("t_release"), A_FLOAT, 0);
+ class_addmethod(sigrvu_class, (t_method)sigrvu_t_metro, gensym("t_metro"), A_FLOAT, 0);
+ class_sethelpsymbol(sigrvu_class, gensym("iemhelp/help-rvu~"));
+}
diff --git a/src/iemlib1/sigsin_phase.c b/src/iemlib1/sigsin_phase.c
new file mode 100644
index 0000000..0594962
--- /dev/null
+++ b/src/iemlib1/sigsin_phase.c
@@ -0,0 +1,129 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* --- sin_phase~ - output the phase-difference between 2 sinewaves in samples (sig) ---- */
+
+typedef struct sigsin_phase
+{
+ t_object x_obj;
+ float x_prev1;
+ float x_prev2;
+ float x_cur_out;
+ int x_counter1;
+ int x_counter2;
+ int x_state1;
+ int x_state2;
+ float x_msi;
+} t_sigsin_phase;
+
+t_class *sigsin_phase_class;
+
+static t_int *sigsin_phase_perform(t_int *w)
+{
+ float *in1 = (float *)(w[1]);
+ float *in2 = (float *)(w[2]);
+ float *out = (float *)(w[3]);
+ t_sigsin_phase *x = (t_sigsin_phase *)(w[4]);
+ int i, n = (t_int)(w[5]);
+ float prev1=x->x_prev1;
+ float prev2=x->x_prev2;
+ float cur_out=x->x_cur_out;
+ int counter1=x->x_counter1;
+ int counter2=x->x_counter2;
+ int state1=x->x_state1;
+ int state2=x->x_state2;
+
+ for(i=0; i<n; i++)
+ {
+ if((in1[i] >= 0.0f) && (prev1 < 0.0f))
+ {
+ state1 = 1;
+ counter1 = 0;
+ }
+ else if((in1[i] < 0.0f) && (prev1 >= 0.0f))
+ {
+ state2 = 1;
+ counter2 = 0;
+ }
+
+ if((in2[i] >= 0.0f) && (prev2 < 0.0f))
+ {
+ state1 = 0;
+ cur_out = (float)(counter1);
+ counter1 = 0;
+ }
+ else if((in2[i] < 0.0f) && (prev2 >= 0.0f))
+ {
+ state2 = 0;
+ cur_out = (float)(counter2);
+ counter2 = 0;
+ }
+
+ if(state1)
+ counter1++;
+ if(state2)
+ counter2++;
+
+ prev1 = in1[i];
+ prev2 = in2[i];
+ out[i] = cur_out;
+ }
+
+ x->x_prev1 = prev1;
+ x->x_prev2 = prev2;
+ x->x_cur_out = cur_out;
+ x->x_counter1 = counter1;
+ x->x_counter2 = counter2;
+ x->x_state1 = state1;
+ x->x_state2 = state2;
+
+ return(w+6);
+}
+
+static void sigsin_phase_dsp(t_sigsin_phase *x, t_signal **sp)
+{
+ dsp_add(sigsin_phase_perform, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigsin_phase_new(void)
+{
+ t_sigsin_phase *x = (t_sigsin_phase *)pd_new(sigsin_phase_class);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ outlet_new(&x->x_obj, &s_signal);
+
+ x->x_prev1 = 0.0f;
+ x->x_prev2 = 0.0f;
+ x->x_cur_out = 0.0f;
+ x->x_counter1 = 0;
+ x->x_counter2 = 0;
+ x->x_state1 = 0;
+ x->x_state2 = 0;
+ x->x_msi = 0;
+
+ return (x);
+}
+
+void sigsin_phase_setup(void)
+{
+ sigsin_phase_class = class_new(gensym("sin_phase~"), (t_newmethod)sigsin_phase_new,
+ 0, sizeof(t_sigsin_phase), 0, 0);
+ CLASS_MAINSIGNALIN(sigsin_phase_class, t_sigsin_phase, x_msi);
+ class_addmethod(sigsin_phase_class, (t_method)sigsin_phase_dsp, gensym("dsp"), 0);
+ class_sethelpsymbol(sigsin_phase_class, gensym("iemhelp/help-sin_phase~"));
+}
diff --git a/src/iemlib1/sigvcf_filter.c b/src/iemlib1/sigvcf_filter.c
new file mode 100644
index 0000000..ec14306
--- /dev/null
+++ b/src/iemlib1/sigvcf_filter.c
@@ -0,0 +1,334 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------- vcf_filter~ - slow dynamic vcf_filter 1. and 2. order ----------- */
+
+typedef struct sigvcf_filter
+{
+ t_object x_obj;
+ float x_wn1;
+ float x_wn2;
+ float x_msi;
+ char x_filtname[6];
+} t_sigvcf_filter;
+
+t_class *sigvcf_filter_class;
+
+static t_int *sigvcf_filter_perform_snafu(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *out = (float *)(w[4]);
+ int n = (t_int)(w[6]);
+
+ while(n--)
+ *out++ = *in++;
+ return(w+7);
+}
+
+/*
+lp2
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+bp2
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*al*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+rbp2
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*l*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+hp2
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 - 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+*/
+
+static t_int *sigvcf_filter_perform_lp2(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *lp = (float *)(w[2]);
+ float *q = (float *)(w[3]);
+ float *out = (float *)(w[4]);
+ t_sigvcf_filter *x = (t_sigvcf_filter *)(w[5]);
+ int i, n = (t_int)(w[6]);
+ float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+ float l, al, l2, rcp;
+
+ for(i=0; i<n; i+=4)
+ {
+ l = lp[i];
+ if(q[i] < 0.000001)
+ al = 1000000.0*l;
+ else if(q[i] > 1000000.0)
+ al = 0.000001*l;
+ else
+ al = l/q[i];
+ l2 = l*l + 1.0f;
+ rcp = 1.0f/(al + l2);
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*(wn0 + 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->x_wn1 = wn1;
+ x->x_wn2 = wn2;
+ return(w+7);
+}
+
+static t_int *sigvcf_filter_perform_bp2(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *lp = (float *)(w[2]);
+ float *q = (float *)(w[3]);
+ float *out = (float *)(w[4]);
+ t_sigvcf_filter *x = (t_sigvcf_filter *)(w[5]);
+ int i, n = (t_int)(w[6]);
+ float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+ float l, al, l2, rcp;
+
+ for(i=0; i<n; i+=4)
+ {
+ l = lp[i];
+ if(q[i] < 0.000001)
+ al = 1000000.0*l;
+ else if(q[i] > 1000000.0)
+ al = 0.000001*l;
+ else
+ al = l/q[i];
+ l2 = l*l + 1.0f;
+ rcp = 1.0f/(al + l2);
+
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*al*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*al*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*al*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*al*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->x_wn1 = wn1;
+ x->x_wn2 = wn2;
+ return(w+7);
+}
+
+static t_int *sigvcf_filter_perform_rbp2(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *lp = (float *)(w[2]);
+ float *q = (float *)(w[3]);
+ float *out = (float *)(w[4]);
+ t_sigvcf_filter *x = (t_sigvcf_filter *)(w[5]);
+ int i, n = (t_int)(w[6]);
+ float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+ float al, l, l2, rcp;
+
+ for(i=0; i<n; i+=4)
+ {
+ l = lp[i];
+ if(q[i] < 0.000001)
+ al = 1000000.0*l;
+ else if(q[i] > 1000000.0)
+ al = 0.000001*l;
+ else
+ al = l/q[i];
+ l2 = l*l + 1.0f;
+ rcp = 1.0f/(al + l2);
+
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*l*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*l*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*l*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = rcp*l*(wn0 - wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->x_wn1 = wn1;
+ x->x_wn2 = wn2;
+ return(w+7);
+}
+
+static t_int *sigvcf_filter_perform_hp2(t_int *w)
+{
+ float *in = (float *)(w[1]);
+ float *lp = (float *)(w[2]);
+ float *q = (float *)(w[3]);
+ float *out = (float *)(w[4]);
+ t_sigvcf_filter *x = (t_sigvcf_filter *)(w[5]);
+ int i, n = (t_int)(w[6]);
+ float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
+ float l, al, l2, rcp, forw;
+
+ for(i=0; i<n; i+=4)
+ {
+ l = lp[i];
+ if(q[i] < 0.000001)
+ al = 1000000.0*l;
+ else if(q[i] > 1000000.0)
+ al = 0.000001*l;
+ else
+ al = l/q[i];
+ l2 = l*l + 1.0f;
+ rcp = 1.0f/(al + l2);
+ forw = rcp * (l2 - 1.0f);
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+
+ wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
+ *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
+ wn2 = wn1;
+ wn1 = wn0;
+ }
+ /* NAN protect */
+ if(PD_BADFLOAT(wn2))
+ wn2 = 0.0f;
+ if(PD_BADFLOAT(wn1))
+ wn1 = 0.0f;
+
+ x->x_wn1 = wn1;
+ x->x_wn2 = wn2;
+ return(w+7);
+}
+
+static void sigvcf_filter_dsp(t_sigvcf_filter *x, t_signal **sp)
+{
+ if(!strcmp(x->x_filtname,"bp2"))
+ dsp_add(sigvcf_filter_perform_bp2, 6, sp[0]->s_vec, sp[1]->s_vec,
+ sp[2]->s_vec, sp[3]->s_vec, x, sp[0]->s_n);
+ else if(!strcmp(x->x_filtname,"rbp2"))
+ dsp_add(sigvcf_filter_perform_rbp2, 6, sp[0]->s_vec, sp[1]->s_vec,
+ sp[2]->s_vec, sp[3]->s_vec, x, sp[0]->s_n);
+ else if(!strcmp(x->x_filtname,"lp2"))
+ dsp_add(sigvcf_filter_perform_lp2, 6, sp[0]->s_vec, sp[1]->s_vec,
+ sp[2]->s_vec, sp[3]->s_vec, x, sp[0]->s_n);
+ else if(!strcmp(x->x_filtname,"hp2"))
+ dsp_add(sigvcf_filter_perform_hp2, 6, sp[0]->s_vec, sp[1]->s_vec,
+ sp[2]->s_vec, sp[3]->s_vec, x, sp[0]->s_n);
+ else
+ {
+ dsp_add(sigvcf_filter_perform_snafu, 6, sp[0]->s_vec, sp[1]->s_vec,
+ sp[2]->s_vec, sp[3]->s_vec, x, sp[0]->s_n);
+ post("vcf_filter~-Error: 1. initial-arguments: <sym> kind: lp2, bp2, rbp2, hp2!");
+ }
+}
+
+static void *sigvcf_filter_new(t_symbol *filt_typ)
+{
+ t_sigvcf_filter *x = (t_sigvcf_filter *)pd_new(sigvcf_filter_class);
+ char *c;
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_msi = 0;
+ x->x_wn1 = 0.0;
+ x->x_wn2 = 0.0;
+ c = (char *)filt_typ->s_name;
+ c[5] = 0;
+ strcpy(x->x_filtname, c);
+ return(x);
+}
+
+void sigvcf_filter_setup(void)
+{
+ sigvcf_filter_class = class_new(gensym("vcf_filter~"), (t_newmethod)sigvcf_filter_new,
+ 0, sizeof(t_sigvcf_filter), 0, A_DEFSYM, 0);
+ CLASS_MAINSIGNALIN(sigvcf_filter_class, t_sigvcf_filter, x_msi);
+ class_addmethod(sigvcf_filter_class, (t_method)sigvcf_filter_dsp, gensym("dsp"), 0);
+ class_sethelpsymbol(sigvcf_filter_class, gensym("iemhelp/help-vcf_filter~"));
+}
diff --git a/src/iemlib1/soundfile_info.c b/src/iemlib1/soundfile_info.c
new file mode 100644
index 0000000..f7cbf6b
--- /dev/null
+++ b/src/iemlib1/soundfile_info.c
@@ -0,0 +1,261 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+#define SFI_HEADER_SAMPLERATE 0
+#define SFI_HEADER_FILENAME 1
+#define SFI_HEADER_MULTICHANNEL_FILE_LENGTH 2
+#define SFI_HEADER_HEADERBYTES 3
+#define SFI_HEADER_CHANNELS 4
+#define SFI_HEADER_BYTES_PER_SAMPLE 5
+#define SFI_HEADER_ENDINESS 6
+
+#define SFI_HEADER_SIZE 7
+
+
+
+/* -------------------- soundfile_info ------------------------------- */
+
+static t_class *soundfile_info_class;
+
+typedef struct _soundfile_info
+{
+ t_object x_obj;
+ long *x_begmem;
+ int x_size;
+ t_atom x_atheader[SFI_HEADER_SIZE];
+ t_canvas *x_canvas;
+ void *x_list_out;
+} t_soundfile_info;
+
+static short soundfile_info_str2short(char *cvec)
+{
+ short s=0;
+ unsigned char *uc=(unsigned char *)cvec;
+
+ s += (short)(*uc);
+ s += (short)(*(uc+1)*256);
+ return(s);
+}
+
+static long soundfile_info_str2long(char *cvec)
+{
+ long l=0;
+ unsigned char *uc=(unsigned char *)cvec;
+
+ l += (long)(*uc);
+ l += (long)(*(uc+1)*256);
+ l += (long)(*(uc+2)*65536);
+ l += (long)(*(uc+3)*16777216);
+ return(l);
+}
+
+static void soundfile_info_read(t_soundfile_info *x, t_symbol *filename)
+{
+ char completefilename[400];
+ int i, n, n2, n4, filesize, read_chars, header_size=0, ch, bps, sr;
+ FILE *fh;
+ t_atom *at;
+ char *cvec;
+ long ll;
+ short ss;
+
+ if(filename->s_name[0] == '/')/*make complete path + filename*/
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else if(((filename->s_name[0] >= 'A')&&(filename->s_name[0] <= 'Z')||
+ (filename->s_name[0] >= 'a')&&(filename->s_name[0] <= 'z'))&&
+ (filename->s_name[1] == ':')&&(filename->s_name[2] == '/'))
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else
+ {
+ strcpy(completefilename, canvas_getdir(x->x_canvas)->s_name);
+ strcat(completefilename, "/");
+ strcat(completefilename, filename->s_name);
+ }
+
+ fh = fopen(completefilename,"rb");
+ if(!fh)
+ {
+ post("soundfile_info_read: cannot open %s !!\n", completefilename);
+ }
+ else
+ {
+ n = x->x_size;
+ n2 = sizeof(short) * x->x_size;
+ n4 = sizeof(long) * x->x_size;
+ fseek(fh, 0, SEEK_END);
+ filesize = ftell(fh);
+ fseek(fh,0,SEEK_SET);
+ read_chars = (int)fread(x->x_begmem, sizeof(char), n4, fh) /2;
+ fclose(fh);
+// post("read chars = %d", read_chars);
+ cvec = (char *)x->x_begmem;
+ if(read_chars > 4)
+ {
+ if(strncmp(cvec, "RIFF", 4))
+ {
+ post("soundfile_info_read-error: %s is no RIFF-WAVE-file", completefilename);
+ goto soundfile_info_end;
+ }
+ header_size += 8;
+ cvec += 8;
+ if(strncmp(cvec, "WAVE", 4))
+ {
+ post("soundfile_info_read-error: %s is no RIFF-WAVE-file", completefilename);
+ goto soundfile_info_end;
+ }
+ header_size += 4;
+ cvec += 4;
+
+ for(i=header_size/2; i<read_chars; i++)
+ {
+ if(!strncmp(cvec, "fmt ", 4))
+ goto soundfile_info_fmt;
+ header_size += 2;
+ cvec += 2;
+ }
+ post("soundfile_info_read-error: %s has at begin no format-chunk", completefilename);
+ goto soundfile_info_end;
+
+soundfile_info_fmt:
+ header_size += 4;
+ cvec += 4;
+ ll = soundfile_info_str2long(cvec);
+ if(ll != 16)
+ {
+ post("soundfile_info_read-error: %s has a format-chunk not equal to 16", completefilename);
+ goto soundfile_info_end;
+ }
+ header_size += 4;
+ cvec += 4;
+ ss = soundfile_info_str2short(cvec);
+ /* format */
+ if(ss != 1) /* PCM = 1 */
+ {
+ post("soundfile_info_read-error: %s is not PCM-format coded", completefilename);
+ goto soundfile_info_end;
+ }
+ header_size += 2;
+ cvec += 2;
+ ss = soundfile_info_str2short(cvec);
+ /* channels */
+ if((ss < 1) || (ss > 100))
+ {
+ post("soundfile_info_read-error: %s has no common channel-number", completefilename);
+ goto soundfile_info_end;
+ }
+ SETFLOAT(x->x_atheader+SFI_HEADER_CHANNELS, (float)ss);
+ ch = ss;
+ header_size += 2;
+ cvec += 2;
+ ll = soundfile_info_str2long(cvec);
+ /* samplerate */
+ if((ll > 400000) || (ll < 200))
+ {
+ post("soundfile_info_read-error: %s has no common samplerate", completefilename);
+ goto soundfile_info_end;
+ }
+ SETFLOAT(x->x_atheader+SFI_HEADER_SAMPLERATE, (float)ll);
+ sr = ll;
+ header_size += 4;
+ cvec += 4;
+
+ header_size += 4; /* bytes_per_sec */
+ cvec += 4;
+ ss = soundfile_info_str2short(cvec);
+
+ /* bytes_per_sample */
+ if((ss < 1) || (ss > 100))
+ {
+ post("soundfile_info_read-error: %s has no common number of bytes per sample", completefilename);
+ goto soundfile_info_end;
+ }
+ SETFLOAT(x->x_atheader+SFI_HEADER_BYTES_PER_SAMPLE, (float)(ss/ch));
+ bps = ss;
+ header_size += 2;
+ cvec += 2;
+
+ header_size += 2; /* bits_per_sample */
+ cvec += 2;
+
+ for(i=header_size/2; i<read_chars; i++)
+ {
+ if(!strncmp(cvec, "data", 4))
+ goto soundfile_info_data;
+ header_size += 2;
+ cvec += 2;
+ }
+ post("soundfile_info_read-error: %s has at begin no data-chunk", completefilename);
+ goto soundfile_info_end;
+
+soundfile_info_data:
+ header_size += 8;
+ cvec += 8;
+
+ SETFLOAT(x->x_atheader+SFI_HEADER_HEADERBYTES, (float)header_size);
+
+ filesize -= header_size;
+ filesize /= bps;
+ SETFLOAT(x->x_atheader+SFI_HEADER_MULTICHANNEL_FILE_LENGTH, (float)filesize);
+ SETSYMBOL(x->x_atheader+SFI_HEADER_ENDINESS, gensym("l"));
+ SETSYMBOL(x->x_atheader+SFI_HEADER_FILENAME, gensym(completefilename));
+
+/* post("ch = %d", ss);
+ post("sr = %d", ll);
+ post("bps = %d", ss/ch);
+ post("head = %d", header_size);
+ post("len = %d", filesize);*/
+
+ outlet_list(x->x_list_out, &s_list, SFI_HEADER_SIZE, x->x_atheader);
+
+
+soundfile_info_end:
+
+ ;
+ }
+ }
+}
+
+static void soundfile_info_free(t_soundfile_info *x)
+{
+ freebytes(x->x_begmem, x->x_size * sizeof(long));
+}
+
+static void *soundfile_info_new(void)
+{
+ t_soundfile_info *x = (t_soundfile_info *)pd_new(soundfile_info_class);
+
+ x->x_size = 10000;
+ x->x_begmem = (long *)getbytes(x->x_size * sizeof(long));
+ x->x_list_out = outlet_new(&x->x_obj, &s_list);
+ x->x_canvas = canvas_getcurrent();
+ return (x);
+}
+
+/* ---------------- global setup function -------------------- */
+
+void soundfile_info_setup(void)
+{
+ soundfile_info_class = class_new(gensym("soundfile_info"), (t_newmethod)soundfile_info_new,
+ (t_method)soundfile_info_free, sizeof(t_soundfile_info), 0, 0);
+ class_addmethod(soundfile_info_class, (t_method)soundfile_info_read, gensym("read"), A_SYMBOL, 0);
+ class_sethelpsymbol(soundfile_info_class, gensym("iemhelp/help-soundfile_info"));
+}
+
diff --git a/src/iemlib1/split.c b/src/iemlib1/split.c
new file mode 100644
index 0000000..0a3bcff
--- /dev/null
+++ b/src/iemlib1/split.c
@@ -0,0 +1,54 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* --------------------------- split ----------------------------- */
+
+typedef struct _split
+{
+ t_object x_obj;
+ t_outlet *x_out_less;
+ t_outlet *x_out_greater_equal;
+ float x_threshold;
+} t_split;
+
+static t_class *split_class;
+
+static void split_float(t_split *x, t_float f)
+{
+ if(f < x->x_threshold)
+ outlet_float(x->x_out_less, f);
+ else
+ outlet_float(x->x_out_greater_equal, f);
+}
+
+static void *split_new(t_floatarg f)
+{
+ t_split *x = (t_split *)pd_new(split_class);
+ floatinlet_new(&x->x_obj, &x->x_threshold);
+ x->x_out_less = outlet_new(&x->x_obj, &s_float);
+ x->x_out_greater_equal = outlet_new(&x->x_obj, &s_float);
+ x->x_threshold = f;
+ return (x);
+}
+
+void split_setup(void)
+{
+ split_class = class_new(gensym("split"), (t_newmethod)split_new, 0,
+ sizeof(t_split), 0, A_DEFFLOAT, 0);
+ class_addfloat(split_class, split_float);
+ class_sethelpsymbol(split_class, gensym("iemhelp/help-split"));
+} \ No newline at end of file
diff --git a/src/iemlib1/v2db.c b/src/iemlib1/v2db.c
new file mode 100644
index 0000000..b3e342d
--- /dev/null
+++ b/src/iemlib1/v2db.c
@@ -0,0 +1,45 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ---------------- v2db - value to dB converter. ----------------- */
+
+static t_class *v2db_class;
+
+float v2db(float f)
+{
+ return (f <= 0 ? -199.9 : 8.6858896381*log(f));
+}
+
+static void v2db_float(t_object *x, t_float f)
+{
+ outlet_float(x->ob_outlet, v2db(f));
+}
+
+static void *v2db_new(void)
+{
+ t_object *x = (t_object *)pd_new(v2db_class);
+ outlet_new(x, &s_float);
+ return (x);
+}
+
+void v2db_setup(void)
+{
+ v2db_class = class_new(gensym("v2db"), v2db_new, 0,
+ sizeof(t_object), 0, 0);
+ class_addfloat(v2db_class, (t_method)v2db_float);
+ class_sethelpsymbol(v2db_class, gensym("iemhelp/help-v2db"));
+}
diff --git a/src/iemlib2/add2_comma.c b/src/iemlib2/add2_comma.c
new file mode 100644
index 0000000..62ee45f
--- /dev/null
+++ b/src/iemlib2/add2_comma.c
@@ -0,0 +1,123 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ add2_comma ---------------------------- */
+static t_class *add2_comma_class;
+
+typedef struct _add2_comma
+{
+ t_object x_obj;
+ int x_size;
+ t_atom *x_at;
+ t_symbol *x_sym;
+ t_atomtype x_type;
+} t_add2_comma;
+
+static void add2_comma_bang(t_add2_comma *x)
+{
+ SETCOMMA(x->x_at);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, x->x_at);
+}
+
+static void add2_comma_float(t_add2_comma *x, t_float f)
+{
+ SETCOMMA(x->x_at);
+ SETFLOAT(x->x_at+1, f);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 2, x->x_at);
+}
+
+static void add2_comma_symbol(t_add2_comma *x, t_symbol *s)
+{
+ SETCOMMA(x->x_at);
+ SETSYMBOL(x->x_at+1, s);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 2, x->x_at);
+}
+
+/*static void add2_comma_pointer(t_add2_comma *x, t_gpointer *gp)
+{
+ if(!x->x_at)
+ {
+ x->x_n = 1;
+ x->x_at = (t_atom *)getbytes(sizeof(t_atom));
+ }
+ x->x_ac = 1;
+ SETPOINTER(x->x_at, gp);
+ x->x_sym = &s_pointer;
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}*/
+
+static void add2_comma_list(t_add2_comma *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i;
+
+ if((ac+1) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), (ac+2)*sizeof(t_atom));
+ x->x_size = ac+2;
+ }
+ SETCOMMA(x->x_at);
+ for(i=1; i<=ac; i++)
+ x->x_at[i] = av[i-1];
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, ac+1, x->x_at);
+}
+
+static void add2_comma_anything(t_add2_comma *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i;
+
+ if((ac+2) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), (ac+3)*sizeof(t_atom));
+ x->x_size = ac+3;
+ }
+ SETCOMMA(x->x_at);
+ SETSYMBOL(x->x_at+1, s);
+ for(i=1; i<=ac; i++)
+ x->x_at[i+1] = av[i-1];
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, ac+2, x->x_at);
+}
+
+static void add2_comma_free(t_add2_comma *x)
+{
+ if(x->x_at)
+ freebytes(x->x_at, x->x_size * sizeof(t_atom));
+}
+
+static void *add2_comma_new(void)
+{
+ t_add2_comma *x = (t_add2_comma *)pd_new(add2_comma_class);
+
+ x->x_size = 10;
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ x->x_sym = gensym("add2");
+ outlet_new(&x->x_obj, &s_list);
+ return(x);
+}
+
+void add2_comma_setup(void)
+{
+ add2_comma_class = class_new(gensym("add2_comma"), (t_newmethod)add2_comma_new,
+ (t_method)add2_comma_free, sizeof(t_add2_comma), 0, 0);
+ class_addbang(add2_comma_class, (t_method)add2_comma_bang);
+ class_addanything(add2_comma_class, add2_comma_anything);
+ class_addlist(add2_comma_class, add2_comma_list);
+ /*class_addpointer(add2_comma_class, add2_comma_pointer);*/
+ class_addfloat(add2_comma_class, (t_method)add2_comma_float);
+ class_addsymbol(add2_comma_class, add2_comma_symbol);
+ class_sethelpsymbol(add2_comma_class, gensym("iemhelp/help-add2_comma"));
+}
+
diff --git a/src/iemlib2/bpe.c b/src/iemlib2/bpe.c
new file mode 100644
index 0000000..c011424
--- /dev/null
+++ b/src/iemlib2/bpe.c
@@ -0,0 +1,125 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ bpe ---------------------------- */
+static t_class *bpe_class;
+
+typedef struct _bpe
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ int x_maxnum;
+ int x_curnum;
+ int x_curindex;
+ t_atom *x_beg;
+ void *x_out_val;
+ void *x_out_time;
+ void *x_out_finished;
+} t_bpe;
+
+static void bpe_stop(t_bpe *x)
+{
+ clock_unset(x->x_clock);
+}
+
+static void bpe_tick(t_bpe *x)
+{
+ t_atom *vec = x->x_beg;
+ float val, time;
+
+ if(x->x_curindex >= x->x_curnum)
+ {
+ bpe_stop(x);
+ outlet_bang(x->x_out_finished);
+ }
+ else
+ {
+ vec += x->x_curindex;
+ val = atom_getfloat(vec++);
+ time = atom_getfloat(vec);
+ outlet_float(x->x_out_time, time);
+ outlet_float(x->x_out_val, val);
+ x->x_curindex += 2;
+ clock_delay(x->x_clock, time);
+ }
+}
+
+static void bpe_bang(t_bpe *x)
+{
+ t_atom *vec = x->x_beg;
+ float val, time;
+
+ if(x->x_curnum)
+ {
+ x->x_curindex = 2;
+ val = atom_getfloat(vec++);
+ time = atom_getfloat(vec);
+ outlet_float(x->x_out_time, time);
+ outlet_float(x->x_out_val, val);
+ clock_delay(x->x_clock, time);
+ }
+}
+
+static void bpe_list(t_bpe *x, t_symbol *s, int ac, t_atom *av)
+{
+ int n = ac & 0xfffffffe, i;
+ t_atom *vec = x->x_beg;
+ if(n > x->x_maxnum)
+ {
+ freebytes(x->x_beg, x->x_maxnum*sizeof(t_atom));
+ x->x_maxnum = 2 + n;
+ x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom));
+ vec = x->x_beg;
+ }
+ x->x_curnum = n;
+ for(i=0; i<n; i++)
+ {
+ *vec++ = *av++;
+ }
+}
+
+static void bpe_free(t_bpe *x)
+{
+ freebytes(x->x_beg, x->x_maxnum*sizeof(t_atom));
+ clock_free(x->x_clock);
+}
+
+static void *bpe_new(void)
+{
+ t_bpe *x = (t_bpe *)pd_new(bpe_class);
+
+ x->x_curindex = 0;
+ x->x_maxnum = 20;
+ x->x_curnum = 0;
+ x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom));
+ x->x_clock = clock_new(x, (t_method)bpe_tick);
+ x->x_out_val = outlet_new(&x->x_obj, &s_float);
+ x->x_out_time = outlet_new(&x->x_obj, &s_float);
+ x->x_out_finished = outlet_new(&x->x_obj, &s_bang);
+ return (x);
+}
+
+void bpe_setup(void)
+{
+ bpe_class = class_new(gensym("bpe"), (t_newmethod)bpe_new,
+ (t_method)bpe_free, sizeof(t_bpe), 0, 0);
+ class_addmethod(bpe_class, (t_method)bpe_stop, gensym("stop"), 0);
+ class_addbang(bpe_class, bpe_bang);
+ class_addlist(bpe_class, (t_method)bpe_list);
+ class_sethelpsymbol(bpe_class, gensym("iemhelp/help-bpe"));
+}
+
diff --git a/src/iemlib2/dollarg.c b/src/iemlib2/dollarg.c
new file mode 100644
index 0000000..253c0ff
--- /dev/null
+++ b/src/iemlib2/dollarg.c
@@ -0,0 +1,113 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+/* ------------------------ dollarg ---------------------------- */
+
+static t_class *dollarg_class;
+
+typedef struct _dollarg
+{
+ t_object x_obj;
+ void *x_outlet_ac;
+ t_atom *x_at;
+ int x_ac;
+} t_dollarg;
+
+static void dollarg_float(t_dollarg *x, t_floatarg f)
+{
+ int i = (int)f;
+
+ if(!i)
+ {
+ outlet_float(x->x_outlet_ac, x->x_ac);
+ if(x->x_ac)
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac, x->x_at);
+ }
+ else if(i > 0)
+ {
+ if(i <= x->x_ac)
+ {
+ outlet_float(x->x_outlet_ac, i);
+ if(IS_A_FLOAT(x->x_at, i-1))
+ outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(i-1, x->x_ac, x->x_at));
+ else if(IS_A_SYMBOL(x->x_at, i-1))
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(i-1, x->x_ac, x->x_at));
+ }
+ else
+ outlet_float(x->x_outlet_ac, 0);
+ }
+ else
+ {
+ int j = x->x_ac + i;
+
+ if(j >= 0)
+ {
+ outlet_float(x->x_outlet_ac, j+1);
+ if(IS_A_FLOAT(x->x_at, j))
+ outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(j, x->x_ac, x->x_at));
+ else if(IS_A_SYMBOL(x->x_at, j))
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(j, x->x_ac, x->x_at));
+ }
+ else
+ outlet_float(x->x_outlet_ac, 0);
+ }
+}
+
+static void dollarg_bang(t_dollarg *x)
+{
+ dollarg_float(x, 0.0f);
+}
+
+static void dollarg_free(t_dollarg *x)
+{
+ if(x->x_ac)
+ freebytes(x->x_at, x->x_ac * sizeof(t_atom));
+}
+
+static void *dollarg_new(void)
+{
+ t_dollarg *x = (t_dollarg *)pd_new(dollarg_class);
+ t_glist *glist=(t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int pargc;
+ t_atom *pargv, *at;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&pargc, &pargv);
+ canvas_unsetcurrent(canvas);
+ x->x_at = (t_atom *)getbytes(pargc*sizeof(t_atom));
+ x->x_ac = pargc;
+ at = x->x_at;
+ while(pargc--)
+ *at++ = *pargv++;
+ outlet_new(&x->x_obj, &s_list);
+ x->x_outlet_ac = outlet_new(&x->x_obj, &s_float);
+ return (x);
+}
+
+void dollarg_setup(void)
+{
+ dollarg_class = class_new(gensym("dollarg"), (t_newmethod)dollarg_new,
+ (t_method)dollarg_free, sizeof(t_dollarg), 0, 0);
+ class_addcreator((t_newmethod)dollarg_new, gensym("$n"), 0);
+ class_addbang(dollarg_class, (t_method)dollarg_bang);
+ class_addfloat(dollarg_class, (t_method)dollarg_float);
+ class_sethelpsymbol(dollarg_class, gensym("iemhelp/help-dollarg"));
+}
diff --git a/src/iemlib2/exp_inc.c b/src/iemlib2/exp_inc.c
new file mode 100644
index 0000000..065937f
--- /dev/null
+++ b/src/iemlib2/exp_inc.c
@@ -0,0 +1,138 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ exp_inc ---------------------------- */
+static t_class *exp_inc_class;
+
+typedef struct _exp_inc
+{
+ t_object x_obj;
+ float x_initialval;
+ float x_currentval;
+ float x_mulfactor;
+ float x_addincrement;
+ float x_min;
+ float x_max;
+} t_exp_inc;
+
+static void exp_inc_bang(t_exp_inc *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_currentval);
+ x->x_currentval = x->x_currentval * x->x_mulfactor + x->x_addincrement;
+ if(x->x_currentval < x->x_min)
+ x->x_currentval = x->x_min;
+ if(x->x_currentval > x->x_max)
+ x->x_currentval = x->x_max;
+}
+
+static void exp_inc_reset(t_exp_inc *x)
+{
+ x->x_currentval = x->x_initialval;
+ if(x->x_currentval < x->x_min)
+ x->x_currentval = x->x_min;
+ if(x->x_currentval > x->x_max)
+ x->x_currentval = x->x_max;
+}
+
+static void exp_inc_float(t_exp_inc *x, t_floatarg f)
+{
+ x->x_initialval = (float)f;
+ x->x_currentval = x->x_initialval;
+ if(x->x_currentval < x->x_min)
+ x->x_currentval = x->x_min;
+ if(x->x_currentval > x->x_max)
+ x->x_currentval = x->x_max;
+}
+
+static void exp_inc_ft1(t_exp_inc *x, t_floatarg f)
+{
+ x->x_mulfactor = 1.0 + 0.01*(float)f;
+}
+
+static void exp_inc_ft2(t_exp_inc *x, t_floatarg f)
+{
+ x->x_addincrement = (float)f;
+}
+
+static void exp_inc_ft3(t_exp_inc *x, t_floatarg f)
+{
+ x->x_min = (float)f;
+ if(x->x_currentval < x->x_min)
+ x->x_currentval = x->x_min;
+}
+
+static void exp_inc_ft4(t_exp_inc *x, t_floatarg f)
+{
+ x->x_max = (float)f;
+ if(x->x_currentval > x->x_max)
+ x->x_currentval = x->x_max;
+}
+
+static void exp_inc_list(t_exp_inc *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac == 5)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)&&IS_A_FLOAT(av,2)
+ &&IS_A_FLOAT(av,3)&&IS_A_FLOAT(av,4))
+ {
+ exp_inc_ft4(x, atom_getfloatarg(4, ac, av));
+ exp_inc_ft3(x, atom_getfloatarg(3, ac, av));
+ exp_inc_ft2(x, atom_getfloatarg(2, ac, av));
+ exp_inc_ft1(x, atom_getfloatarg(1, ac, av));
+ exp_inc_float(x, atom_getfloatarg(0, ac, av));
+ }
+}
+
+static void *exp_inc_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_exp_inc *x = (t_exp_inc *)pd_new(exp_inc_class);
+
+ x->x_currentval = 10.0;
+ x->x_mulfactor = 1.0;
+ x->x_addincrement = 0.0;
+ x->x_min = 0.0;
+ x->x_max = 1000.0;
+ if((ac == 5)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)&&IS_A_FLOAT(av,2)
+ &&IS_A_FLOAT(av,3)&&IS_A_FLOAT(av,4))
+ {
+ exp_inc_ft4(x, atom_getfloatarg(4, ac, av));
+ exp_inc_ft3(x, atom_getfloatarg(3, ac, av));
+ exp_inc_ft2(x, atom_getfloatarg(2, ac, av));
+ exp_inc_ft1(x, atom_getfloatarg(1, ac, av));
+ exp_inc_float(x, atom_getfloatarg(0, ac, av));
+ }
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft2"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft3"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft4"));
+ return (x);
+}
+
+void exp_inc_setup(void)
+{
+ exp_inc_class = class_new(gensym("exp_inc"), (t_newmethod)exp_inc_new,
+ 0, sizeof(t_exp_inc), 0, A_GIMME, 0);
+ class_addbang(exp_inc_class, exp_inc_bang);
+ class_addlist(exp_inc_class, (t_method)exp_inc_list);
+ class_addmethod(exp_inc_class, (t_method)exp_inc_reset, gensym("reset"), 0);
+ class_addfloat(exp_inc_class, (t_method)exp_inc_float);
+ class_addmethod(exp_inc_class, (t_method)exp_inc_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_addmethod(exp_inc_class, (t_method)exp_inc_ft2, gensym("ft2"), A_FLOAT, 0);
+ class_addmethod(exp_inc_class, (t_method)exp_inc_ft3, gensym("ft3"), A_FLOAT, 0);
+ class_addmethod(exp_inc_class, (t_method)exp_inc_ft4, gensym("ft4"), A_FLOAT, 0);
+ class_sethelpsymbol(exp_inc_class, gensym("iemhelp/help-exp_inc"));
+}
+
diff --git a/src/iemlib2/float24.c b/src/iemlib2/float24.c
new file mode 100644
index 0000000..3923482
--- /dev/null
+++ b/src/iemlib2/float24.c
@@ -0,0 +1,83 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ---- float24 - float=int or list of float=symbol concaternat to int=float ----- */
+
+typedef struct _float24
+{
+ t_object x_obj;
+ float x_arg;
+} t_float24;
+
+static t_class *float24_class;
+
+static float float24_calc_sum(int argc, t_atom *argv)
+{
+ int i;
+ char str[1000], buf[100];
+
+ str[0] = 0;
+ for(i=0; i<argc; i++)
+ {
+ if(IS_A_FLOAT(argv, i))
+ {
+ sprintf(buf, "%g", (float)atom_getfloatarg(i, argc, argv));
+ strcat(str, buf);
+ }
+ }
+ return(atof(str));
+}
+
+static void float24_bang(t_float24 *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_arg);
+}
+
+static void float24_float(t_float24 *x, t_float f)
+{
+ x->x_arg = f;
+ float24_bang(x);
+}
+
+static void float24_list(t_float24 *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(argc > 0)
+ x->x_arg = float24_calc_sum(argc, argv);
+ float24_bang(x);
+}
+
+static void *float24_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_float24 *x = (t_float24 *)pd_new(float24_class);
+
+ outlet_new(&x->x_obj, &s_float);
+ x->x_arg = 0.0f;
+ if(argc > 0)
+ x->x_arg = float24_calc_sum(argc, argv);
+ return (x);
+}
+
+void float24_setup(void)
+{
+ float24_class = class_new(gensym("float24"), (t_newmethod)float24_new, 0,
+ sizeof(t_float24), 0, A_GIMME, 0);
+ class_addcreator((t_newmethod)float24_new, gensym("f24"), A_GIMME, 0);
+ class_addbang(float24_class, (t_method)float24_bang);
+ class_addfloat(float24_class, (t_method)float24_float);
+ class_addlist(float24_class, (t_method)float24_list);
+ class_sethelpsymbol(float24_class, gensym("iemhelp/help-float24"));
+}
diff --git a/src/iemlib2/iem_anything_kernel.c b/src/iemlib2/iem_anything_kernel.c
new file mode 100644
index 0000000..11fee81
--- /dev/null
+++ b/src/iemlib2/iem_anything_kernel.c
@@ -0,0 +1,148 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+/* ------------------------ iem_anything_kernel ---------------------------- */
+static t_class *iem_anything_kernel_class;
+
+typedef struct _iem_anything_kernel
+{
+ t_object x_obj;
+ int x_inlet_select;
+ int x_size;
+ int x_ac;
+ t_atom *x_at;
+ t_symbol *x_sym;
+} t_iem_anything_kernel;
+
+static void iem_anything_kernel_atcopy(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void iem_anything_kernel_inlet_select(t_iem_anything_kernel *x, t_floatarg in_sel_01)
+{
+ x->x_inlet_select = (int)in_sel_01;
+}
+
+static void iem_anything_kernel_anything(t_iem_anything_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac == 0)&&(s == &s_bang))
+ {
+ if(x->x_inlet_select)
+ {
+ x->x_ac = ac;
+ x->x_sym = s;
+ }
+ else
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac, x->x_at);
+ }
+ else
+ {
+ if(ac > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), ac*sizeof(t_atom));
+ x->x_size = ac;
+ }
+ x->x_ac = ac;
+ x->x_sym = s;
+ iem_anything_kernel_atcopy(av, x->x_at, ac);
+ if(!x->x_inlet_select)
+ outlet_anything(x->x_obj.ob_outlet, s, ac, av);
+ }
+}
+
+static void iem_anything_kernel_free(t_iem_anything_kernel *x)
+{
+ if(x->x_at)
+ freebytes(x->x_at, x->x_size * sizeof(t_atom));
+}
+
+static void *iem_anything_kernel_new(void)
+{
+ t_iem_anything_kernel *x = (t_iem_anything_kernel *)pd_new(iem_anything_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ if(!ac)
+ {
+ x->x_sym = &s_bang;
+ x->x_size = 10;
+ x->x_ac = 0;
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ }
+ else if(ac == 1)
+ {
+ x->x_size = 10;
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_sym = atom_getsymbol(av);
+ x->x_ac = 0;
+ }
+ else
+ {
+ x->x_sym = &s_list;
+ x->x_ac = 1;
+ x->x_at[0] = *av;
+ }
+ }
+ else /* ac > 1 */
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_sym = atom_getsymbol(av++);
+ ac--;
+ }
+ else
+ x->x_sym = &s_list;
+ if(ac < 10)
+ x->x_size = 10;
+ else
+ x->x_size = ac;
+ x->x_ac = ac;
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ iem_anything_kernel_atcopy(av, x->x_at, ac);
+ }
+ x->x_inlet_select = 1;
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void iem_anything_kernel_setup(void)
+{
+ char str[2];
+
+ str[0] = 1;/*inlet-sym = "\0x01"*/
+ str[1] = 0;
+ iem_anything_kernel_class = class_new(gensym("iem_anything_kernel"),
+ (t_newmethod)iem_anything_kernel_new, (t_method)iem_anything_kernel_free,
+ sizeof(t_iem_anything_kernel), 0, 0);
+ class_addmethod(iem_anything_kernel_class, (t_method)iem_anything_kernel_inlet_select, gensym(str), A_FLOAT, 0);
+ class_addanything(iem_anything_kernel_class, iem_anything_kernel_anything);
+ class_sethelpsymbol(iem_anything_kernel_class, gensym("iemhelp/help-iem_anything"));
+}
+
diff --git a/src/iemlib2/iem_append_kernel.c b/src/iemlib2/iem_append_kernel.c
new file mode 100644
index 0000000..2c67872
--- /dev/null
+++ b/src/iemlib2/iem_append_kernel.c
@@ -0,0 +1,351 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+
+/* ------------------------ iem_append_kernel ---------------------------- */
+static t_class *iem_append_kernel_class;
+
+typedef struct _iem_append_kernel
+{
+ t_object x_obj;
+ int x_inlet_select;
+ int x_size12;
+ int x_size2;
+ int x_ac1;
+ int x_ac2;
+ t_atom *x_at12;
+ t_atom *x_at2;
+ t_symbol *x_sym1;
+ t_symbol *x_sym2;
+ t_atomtype x_type1;
+ t_atomtype x_type2;
+} t_iem_append_kernel;
+
+static void iem_append_kernel_atcopy(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void iem_append_kernel_merge(t_iem_append_kernel *x, int off)
+{
+ if((x->x_ac1+x->x_ac2+1) > x->x_size12)
+ {
+ x->x_at12 = (t_atom *)resizebytes(x->x_at12, x->x_size12*sizeof(t_atom), 2*(x->x_ac1+x->x_ac2+1)*sizeof(t_atom));
+ x->x_size12 = 2*(x->x_ac1+x->x_ac2+1);
+ }
+ if(off)
+ SETSYMBOL(x->x_at12 + x->x_ac1, x->x_sym2);
+ iem_append_kernel_atcopy(x->x_at2, x->x_at12 + x->x_ac1 + off, x->x_ac2);
+}
+
+static void iem_append_kernel_out(t_iem_append_kernel *x)
+{
+ int off=0;
+
+ if(x->x_type1 == A_GIMME)
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ iem_append_kernel_merge(x, off);
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac1+x->x_ac2+off, x->x_at12);
+ }
+ else if(x->x_type1 == A_COMMA)
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ iem_append_kernel_merge(x, off);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym1, x->x_ac1+x->x_ac2+off, x->x_at12);
+ }
+ else if(x->x_type1 == A_NULL)/*depends on 2.part*/
+ {
+ iem_append_kernel_merge(x, 0);
+ if(x->x_type2 == A_GIMME)
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac2, x->x_at12);
+ else if(x->x_type2 == A_COMMA)
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym2, x->x_ac2, x->x_at12);
+ else if(x->x_type2 == A_FLOAT)
+ outlet_float(x->x_obj.ob_outlet, atom_getfloat(x->x_at12));
+ else if(x->x_type2 == A_SYMBOL)
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbol(x->x_at12));
+ else if(x->x_type2 == A_NULL)
+ outlet_bang(x->x_obj.ob_outlet);
+ else if(x->x_type2 == A_POINTER)
+ outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at12->a_w.w_gpointer);
+ }
+ else
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ iem_append_kernel_merge(x, off);
+ if(x->x_type2 == A_NULL)
+ {
+ if(x->x_type1 == A_FLOAT)
+ outlet_float(x->x_obj.ob_outlet, atom_getfloat(x->x_at12));
+ else if(x->x_type1 == A_SYMBOL)
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbol(x->x_at12));
+ else if(x->x_type1 == A_POINTER)
+ outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at12->a_w.w_gpointer);
+ }
+ else
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac1+x->x_ac2+off, x->x_at12);
+ }
+}
+
+static void iem_append_kernel_inlet_select(t_iem_append_kernel *x, t_floatarg fin_sel_01)
+{
+ x->x_inlet_select = (int)fin_sel_01;
+}
+
+static void iem_append_kernel_bang(t_iem_append_kernel *x)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 0;
+ x->x_type2 = A_NULL;
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 0;
+ x->x_type1 = A_NULL;
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_float(t_iem_append_kernel *x, t_float f)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_FLOAT;
+ SETFLOAT(x->x_at2, f);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_FLOAT;
+ SETFLOAT(x->x_at12, f);
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_symbol(t_iem_append_kernel *x, t_symbol *s)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_SYMBOL;
+ SETSYMBOL(x->x_at2, s);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_SYMBOL;
+ SETSYMBOL(x->x_at12, s);
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_pointer(t_iem_append_kernel *x, t_gpointer *gp)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_POINTER;
+ SETPOINTER(x->x_at2, gp);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_POINTER;
+ SETPOINTER(x->x_at12, gp);
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_list(t_iem_append_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if(ac > x->x_size2)
+ {
+ x->x_at2 = (t_atom *)resizebytes(x->x_at2, x->x_size2*sizeof(t_atom), 2*ac*sizeof(t_atom));
+ x->x_size2 = 2*ac;
+ }
+ x->x_ac2 = ac;
+ x->x_type2 = A_GIMME;
+ x->x_sym2 = &s_list;
+ iem_append_kernel_atcopy(av, x->x_at2, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((x->x_size2+ac) > x->x_size12)
+ {
+ x->x_at12 = (t_atom *)resizebytes(x->x_at12, x->x_size12*sizeof(t_atom), 2*(x->x_size2+ac)*sizeof(t_atom));
+ x->x_size12 = 2*(x->x_size2+ac);
+ }
+ x->x_ac1 = ac;
+ x->x_type1 = A_GIMME;
+ iem_append_kernel_atcopy(av, x->x_at12, ac);
+ x->x_sym1 = &s_list;
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_anything(t_iem_append_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if((ac+1) > x->x_size2)
+ {
+ x->x_at2 = (t_atom *)resizebytes(x->x_at2, x->x_size2*sizeof(t_atom), 2*ac*sizeof(t_atom));
+ x->x_size2 = 2*ac;
+ }
+ x->x_ac2 = ac;
+ x->x_type2 = A_COMMA;
+ x->x_sym2 = s;
+ iem_append_kernel_atcopy(av, x->x_at2, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((x->x_size2+ac+1) > x->x_size12)
+ {
+ x->x_at12 = (t_atom *)resizebytes(x->x_at12, x->x_size12*sizeof(t_atom), 2*(x->x_size2+ac+1)*sizeof(t_atom));
+ x->x_size12 = 2*(x->x_size2+ac+1);
+ }
+ x->x_ac1 = ac;
+ x->x_type1 = A_COMMA;
+ iem_append_kernel_atcopy(av, x->x_at12, ac);
+ x->x_sym1 = s;
+ iem_append_kernel_out(x);
+ }
+}
+
+static void iem_append_kernel_free(t_iem_append_kernel *x)
+{
+ if(x->x_at12)
+ freebytes(x->x_at12, x->x_size12 * sizeof(t_atom));
+ if(x->x_at2)
+ freebytes(x->x_at2, x->x_size2 * sizeof(t_atom));
+}
+
+static void *iem_append_kernel_new(void)
+{
+ t_iem_append_kernel *x = (t_iem_append_kernel *)pd_new(iem_append_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ x->x_type1 = A_NULL;
+ x->x_sym1 = &s_list;
+ x->x_size2 = 10;
+ if(ac > 5)
+ x->x_size2 = 2*ac;
+ x->x_at2 = (t_atom *)getbytes(x->x_size2 * sizeof(t_atom));
+ x->x_size12 = x->x_size2 + 10;
+ x->x_at12 = (t_atom *)getbytes(x->x_size12 * sizeof(t_atom));
+ x->x_ac1 = 0;
+ x->x_inlet_select = 1;
+ if(ac <= 0)
+ {
+ x->x_type2 = A_NULL;
+ x->x_ac2 = 0;
+ x->x_sym2 = &s_list;
+ }
+ else
+ {
+ if(IS_A_FLOAT(av, 0))
+ {
+ if(ac == 1)
+ iem_append_kernel_float(x, atom_getfloat(av));
+ else
+ iem_append_kernel_list(x, &s_list, ac, av);
+ }
+ else if(IS_A_SYMBOL(av, 0))
+ {
+ t_symbol *xsym=atom_getsymbol(av);
+
+ if(xsym == gensym("symbol"))
+ {
+ if(ac > 1)
+ iem_append_kernel_symbol(x, atom_getsymbol(av+1));
+ else
+ iem_append_kernel_symbol(x, gensym(""));
+ }
+ else if(xsym == gensym("float"))
+ {
+ if(ac > 1)
+ {
+ if(IS_A_FLOAT(av, 1))
+ iem_append_kernel_float(x, atom_getfloat(av+1));
+ else
+ iem_append_kernel_float(x, 0.0f);
+ }
+ else
+ iem_append_kernel_float(x, 0.0f);
+ }
+ else if(xsym == gensym("list"))
+ {
+ iem_append_kernel_list(x, &s_list, ac-1, av+1);
+ }
+ else
+ {
+ iem_append_kernel_anything(x, xsym, ac-1, av+1);
+ }
+ }
+ }
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void iem_append_kernel_setup(void)
+{
+ char str[2];
+
+ str[0] = 1;
+ str[1] = 0;
+ iem_append_kernel_class = class_new(gensym("iem_append_kernel"),
+ (t_newmethod)iem_append_kernel_new, (t_method)iem_append_kernel_free,
+ sizeof(t_iem_append_kernel), 0, 0);
+ class_addbang(iem_append_kernel_class, (t_method)iem_append_kernel_bang);
+ class_addpointer(iem_append_kernel_class, iem_append_kernel_pointer);
+ class_addfloat(iem_append_kernel_class, (t_method)iem_append_kernel_float);
+ class_addsymbol(iem_append_kernel_class, iem_append_kernel_symbol);
+ class_addlist(iem_append_kernel_class, iem_append_kernel_list);
+ class_addmethod(iem_append_kernel_class, (t_method)iem_append_kernel_inlet_select, gensym(str), A_FLOAT, 0);
+ class_addanything(iem_append_kernel_class, iem_append_kernel_anything);
+ class_sethelpsymbol(iem_append_kernel_class, gensym("iemhelp/help-merge_any"));
+}
diff --git a/src/iemlib2/iem_i_route.c b/src/iemlib2/iem_i_route.c
new file mode 100644
index 0000000..48855e6
--- /dev/null
+++ b/src/iemlib2/iem_i_route.c
@@ -0,0 +1,111 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- iem_i_route ------------------------------ */
+/* routes a list beginning with a float to an outlet, which are defined by
+ first- , last- index and offset-index */
+
+static t_class *iem_i_route_class;
+
+typedef struct _iem_i_route
+{
+ t_object x_obj;
+ int x_first_element;
+ int x_last_element;
+ t_outlet **x_out;
+} t_iem_i_route;
+
+static void iem_i_route_list(t_iem_i_route *x, t_symbol *sel, int argc, t_atom *argv)
+{
+ t_outlet **out;
+ int first, last, i;
+
+ if(!argc)
+ return;
+ i = (int)atom_getintarg(0, argc, argv);
+ first = x->x_first_element;
+ last = x->x_last_element;
+ out = x->x_out;
+ if((i >= first)&&(i <= last))
+ {
+ out += i - first;
+ if(argc >= 3)
+ {
+ if(IS_A_FLOAT(argv,1))
+ outlet_list(*out, &s_list, argc-1, argv+1);
+ else if(IS_A_SYMBOL(argv,1))
+ outlet_anything(*out, atom_getsymbolarg(1, argc, argv), argc-2, argv+2);
+ }
+ else if(argc >= 2)
+ {
+ if(IS_A_FLOAT(argv,1))
+ outlet_float(*out, (float)atom_getfloatarg(1, argc, argv));
+ else if(IS_A_SYMBOL(argv,1))
+ outlet_anything(*out, atom_getsymbolarg(1, argc, argv), 0, argv+2);
+ }
+ else
+ outlet_bang(*out);
+ }
+ else
+ {
+ out += last - first + 1;
+ outlet_list(*out, &s_list, argc, argv);
+ }
+}
+
+static void iem_i_route_free(t_iem_i_route *x)
+{
+ freebytes(x->x_out, (x->x_last_element-x->x_first_element+2) * sizeof(t_outlet *));
+}
+
+static void *iem_i_route_new(t_symbol *s, int argc, t_atom *argv)
+{
+ int n, i;
+ t_outlet **out;
+ t_iem_i_route *x = (t_iem_i_route *)pd_new(iem_i_route_class);
+
+ if((argc >= 2)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1))
+ {
+ x->x_first_element = (int)atom_getintarg(0, argc, argv);
+ x->x_last_element = (int)atom_getintarg(1, argc, argv);
+ if((argc >= 3)&&IS_A_FLOAT(argv,2))
+ {
+ i = (int)atom_getintarg(2, argc, argv);
+ x->x_first_element += i;
+ x->x_last_element += i;
+ }
+ x->x_out = (t_outlet **)getbytes((x->x_last_element-x->x_first_element+2) * sizeof(t_outlet *));
+ n = x->x_last_element - x->x_first_element + 2;
+ for(i=0, out=x->x_out; i<n; i++, out++)
+ *out = outlet_new(&x->x_obj, &s_list);
+ return (x);
+ }
+ else
+ {
+ post("iem_i_route-ERROR: needs 3 floats!!");
+ return(0);
+ }
+}
+
+void iem_i_route_setup(void)
+{
+ iem_i_route_class = class_new(gensym("iem_i_route"), (t_newmethod)iem_i_route_new,
+ (t_method)iem_i_route_free, sizeof(t_iem_i_route), 0, A_GIMME, 0);
+ class_addcreator((t_newmethod)iem_i_route_new, gensym("iiroute"), A_GIMME, 0);
+ class_addlist(iem_i_route_class, iem_i_route_list);
+ class_sethelpsymbol(iem_i_route_class, gensym("iemhelp/help-iem_i_route"));
+}
diff --git a/src/iemlib2/iem_pbank_csv.c b/src/iemlib2/iem_pbank_csv.c
new file mode 100644
index 0000000..d426d2d
--- /dev/null
+++ b/src/iemlib2/iem_pbank_csv.c
@@ -0,0 +1,801 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+
+/* -------------------- iem_pbank_csv ------------------------------- */
+
+/* read and write method needs 2 symbols,
+ 1. symbol is a filename,
+ 2. symbol is a 3 character descriptor
+
+ 1.char: 'b'...for blank as ITEM_SEPARATOR (" ")
+ 1.char: 'c'...for comma as ITEM_SEPARATOR (",")
+ 1.char: 's'...for semicolon as ITEM_SEPARATOR (";")
+ 1.char: 't'...for tabulator as ITEM_SEPARATOR (" " = 0x09)
+
+ 2.char: 'b'...for blank,return as END_OF_LINE (" \n")
+ 2.char: 'r'...for return-only as END_OF_LINE ("\n")
+ 2.char: 's'...for semicolon,return as END_OF_LINE (";\n")
+
+ 3.char: 'l'...for linux RETURN (0x0A)
+ 3.char: 'w'...for windows RETURN (0x0D,0x0A)
+ 3.char: 'm'...for mac RETURN (0x0D)
+
+
+
+ change: recall + offset + number
+ */
+
+static t_class *iem_pbank_csv_class;
+
+typedef struct _iem_pbank_csv
+{
+ t_object x_obj;
+ int x_nr_para;
+ int x_nr_line;
+ int x_line;
+ t_atom *x_atbegmem;
+ t_atom *x_atbegbuf;
+ t_atom *x_atbegout;
+ t_canvas *x_canvas;
+ void *x_list_out;
+ void *x_offset_list_out;
+} t_iem_pbank_csv;
+
+static void iem_pbank_csv_write(t_iem_pbank_csv *x, t_symbol *filename, t_symbol *format)
+{
+ char completefilename[400], eol[4], sep, mode[4], string[200];
+ int size, p, l, nrl=x->x_nr_line, nrp=x->x_nr_para;
+ int state, max=nrl*nrp, org_size, eollen;
+ FILE *fh;
+ t_atom *ap=x->x_atbegmem;
+ char formattext[100];
+
+ strcpy(mode, "bsl"); /*blank-separator, semicolon-return-eol, linux_return*/
+ sep = ' ';
+ eol[0] = ';';
+ eol[1] = 0x0a;
+ eol[2] = 0;
+ if(filename->s_name[0] == '/')
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else if(((filename->s_name[0] >= 'A')&&(filename->s_name[0] <= 'Z')||
+ (filename->s_name[0] >= 'a')&&(filename->s_name[0] <= 'z'))&&
+ (filename->s_name[1] == ':')&&(filename->s_name[2] == '/'))
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else
+ {
+ strcpy(completefilename, canvas_getdir(x->x_canvas)->s_name);
+ strcat(completefilename, "/");
+ strcat(completefilename, filename->s_name);
+ }
+
+ fh = fopen(completefilename,"wb");
+ if(!fh)
+ {
+ post("iem_pbank_csv_write: cannot create %s !!\n", completefilename);
+ }
+ else
+ {
+ if(strlen(format->s_name) >= 3)
+ {
+ for(p=0; p<3; p++)
+ {
+ if((format->s_name[p] >= 'A')&&(format->s_name[p] <= 'Z'))
+ format->s_name[p] += 'a' - 'A';
+ }
+ if((format->s_name[0] == 'b')||(format->s_name[0] == 'c')||(format->s_name[0] == 's')||(format->s_name[0] == 't'))
+ mode[0] = format->s_name[0];
+ if((format->s_name[1] == 'b')||(format->s_name[1] == 'r')||(format->s_name[1] == 's'))
+ mode[1] = format->s_name[1];
+ if((format->s_name[2] == 'l')||(format->s_name[2] == 'w')||(format->s_name[2] == 'm'))
+ mode[2] = format->s_name[2];
+ }
+ else
+ post("iem_pbank_csv_write: use default format %s !!\n", mode);
+
+ if(mode[0] == 'b')
+ {
+ sep = ' ';
+ strcpy(formattext, "item-separator = BLANK; ");
+ }
+ else if(mode[0] == 'c')
+ {
+ sep = ',';
+ strcpy(formattext, "item-separator = COMMA; ");
+ }
+ else if(mode[0] == 's')
+ {
+ sep = ';';
+ strcpy(formattext, "item-separator = SEMICOLON; ");
+ }
+ else if(mode[0] == 't')
+ {
+ sep = 0x09;
+ strcpy(formattext, "item-separator = TABULATOR; ");
+ }
+
+ eollen = 1;
+ if(mode[1] == 'b')
+ {
+ eol[0] = ' ';
+ strcat(formattext, "end_of_line_terminator = BLANK-RETURN in ");
+ }
+ else if(mode[1] == 'r')
+ {
+ eollen = 0;
+ strcat(formattext, "end_of_line_terminator = RETURN in ");
+ }
+ else if(mode[1] == 's')
+ {
+ eol[0] = ';';
+ strcat(formattext, "end_of_line_terminator = SEMICOLON-RETURN in ");
+ }
+
+ if(mode[2] == 'l')
+ {
+ eol[eollen++] = 0x0a;
+ strcat(formattext, "LINUX-Format.");
+ }
+ else if(mode[2] == 'w')
+ {
+ eol[eollen++] = 0x0d;
+ eol[eollen++] = 0x0a;
+ strcat(formattext, "WINDOWS-Format.");
+ }
+ else if(mode[2] == 'm')
+ {
+ eol[eollen++] = 0x0d;
+ strcat(formattext, "MACINTOSH-Format.");
+ }
+ eol[eollen] = 0;
+
+ ap = x->x_atbegmem;
+ for(l=0; l<nrl; l++)
+ {
+ for(p=1; p<nrp; p++)
+ {
+ if(IS_A_FLOAT(ap, 0))
+ fprintf(fh, "%g%c", ap->a_w.w_float, sep);
+ else if(IS_A_SYMBOL(ap, 0))
+ fprintf(fh, "%s%c", ap->a_w.w_symbol->s_name, sep);
+ ap++;
+ }
+ if(IS_A_FLOAT(ap, 0))
+ fprintf(fh, "%g%s", ap->a_w.w_float, eol);
+ else if(IS_A_SYMBOL(ap, 0))
+ fprintf(fh, "%s%s", ap->a_w.w_symbol->s_name, eol);
+ ap++;
+ }
+ fclose(fh);
+ post("iem_pbank_csv: wrote %d parameters x %d lines to file:\n%s\nwith following format:\n%s\n", nrp, nrl, completefilename, formattext);
+ }
+}
+
+int iem_pbank_csv_text2atom(char *text, int text_size, t_atom **at_beg,
+ int *nalloc, char sep, char eol)
+{
+ char buf[MAXPDSTRING+1], *bufp, *ebuf = buf+MAXPDSTRING;
+ const char *textp = text, *etext = text + text_size;
+ int natom = 0;
+ t_atom *ap = *at_beg;
+ float f;
+
+ while(1)
+ {
+ int type;
+
+ if(textp == etext)
+ break;
+ if(*textp == eol)
+ {
+ SETSEMI(ap);
+ textp++;
+ }
+ else if(*textp == sep)
+ {
+ SETCOMMA(ap);
+ textp++;
+ }
+ else
+ {
+ char c;
+ int flst = 0, slash = 0, lastslash = 0;
+ int firstslash = (*textp == '\\');
+
+ bufp = buf;
+ do
+ {
+ c = *bufp = *textp++;
+ lastslash = slash;
+ slash = (c == '\\');
+
+ if (flst >= 0)
+ {
+ int digit = (c >= '0' && c <= '9'),
+ dot = (c == '.'), minus = (c == '-'),
+ plusminus = (minus || (c == '+')),
+ expon = (c == 'e' || c == 'E');
+ if (flst == 0) /* beginning */
+ {
+ if (minus) flst = 1;
+ else if (digit) flst = 2;
+ else if (dot) flst = 3;
+ else flst = -1;
+ }
+ else if (flst == 1) /* got minus */
+ {
+ if (digit) flst = 2;
+ else if (dot) flst = 3;
+ else flst = -1;
+ }
+ else if (flst == 2) /* got digits */
+ {
+ if (dot) flst = 4;
+ else if (expon) flst = 6;
+ else if (!digit) flst = -1;
+ }
+ else if (flst == 3) /* got '.' without digits */
+ {
+ if (digit) flst = 5;
+ else flst = -1;
+ }
+ else if (flst == 4) /* got '.' after digits */
+ {
+ if (digit) flst = 5;
+ else if (expon) flst = 6;
+ else flst = -1;
+ }
+ else if (flst == 5) /* got digits after . */
+ {
+ if (expon) flst = 6;
+ else if (!digit) flst = -1;
+ }
+ else if (flst == 6) /* got 'e' */
+ {
+ if (plusminus) flst = 7;
+ else if (digit) flst = 8;
+ else flst = -1;
+ }
+ else if (flst == 7) /* got plus or minus */
+ {
+ if (digit) flst = 8;
+ else flst = -1;
+ }
+ else if (flst == 8) /* got digits */
+ {
+ if (!digit) flst = -1;
+ }
+ }
+ if (!slash) bufp++;
+ }
+ while (textp != etext && bufp != ebuf && *textp != ' ' &&
+ (slash || (*textp != sep && *textp != eol)));
+ *bufp = 0;
+
+ if(*buf == '$' && buf[1] >= '0' && buf[1] <= '9' && !firstslash)
+ {
+ for (bufp = buf+2; *bufp; bufp++)
+ if (*bufp < '0' || *bufp > '9')
+ {
+ SETDOLLSYM(ap, gensym(buf+1));
+ goto iem_pbank_csv_didit;
+ }
+ SETDOLLAR(ap, atoi(buf+1));
+ iem_pbank_csv_didit: ;
+ }
+ else
+ {
+ if(flst == 2 || flst == 4 || flst == 5 || flst == 8)
+ {
+ f = atof(buf);
+ if((f < 1.0e-20)&&(f > -1.0e-20))
+ f = 0.0;
+ SETFLOAT(ap, f);
+ }
+ else
+ SETSYMBOL(ap, gensym(buf));
+ }
+ }
+
+ ap++;
+ natom++;
+ if(natom == *nalloc)
+ {
+ *at_beg = t_resizebytes(*at_beg, *nalloc * sizeof(t_atom),
+ *nalloc * (2*sizeof(t_atom)));
+ *nalloc = *nalloc * 2;
+ ap = *at_beg + natom;
+ }
+ if(textp == etext)
+ break;
+ }
+ return(natom);
+}
+
+/*static char myq(t_atom *a, int off)
+{
+ char c='0';
+
+ if(IS_A_SEMI(a,off))
+ c = 's';
+ else if(IS_A_COMMA(a,off))
+ c = 'c';
+ else if(IS_A_FLOAT(a,off))
+ c = 'f';
+ else if(IS_A_SYMBOL(a,off))
+ c = 'y';
+ return(c);
+} */
+
+static void iem_pbank_csv_read(t_iem_pbank_csv *x, t_symbol *filename, t_symbol *format)
+{
+ char completefilename[400], eol[4], sep, mode[4], *txbuf1, *txbuf2, *txvec_src, *txvec_dst;
+ int size, p, l, i, j, nrl=x->x_nr_line, nrp=x->x_nr_para, atlen=0;
+ int txlen, txalloc, hat_alloc, max, eollen;
+ FILE *fh;
+ t_atom *ap, *hap, *at;
+ char formattext[100];
+
+ strcpy(mode, "bsl"); /*blank-separator, semicolon-return-eol, linux_return*/
+ sep = ' ';
+ eol[0] = ';';
+ eol[1] = 0x0a;
+ eol[2] = 0;
+ if(filename->s_name[0] == '/')/*make complete path + filename*/
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else if(((filename->s_name[0] >= 'A')&&(filename->s_name[0] <= 'Z')||
+ (filename->s_name[0] >= 'a')&&(filename->s_name[0] <= 'z'))&&
+ (filename->s_name[1] == ':')&&(filename->s_name[2] == '/'))
+ {
+ strcpy(completefilename, filename->s_name);
+ }
+ else
+ {
+ strcpy(completefilename, canvas_getdir(x->x_canvas)->s_name);
+ strcat(completefilename, "/");
+ strcat(completefilename, filename->s_name);
+ }
+
+ fh = fopen(completefilename,"rb");
+ if(!fh)
+ {
+ post("iem_pbank_csv_read: cannot open %s !!\n", completefilename);
+ }
+ else
+ {
+ if(strlen(format->s_name) >= 3)
+ {
+ for(p=0; p<3; p++)
+ {
+ if((format->s_name[p] >= 'A')&&(format->s_name[p] <= 'Z'))
+ format->s_name[p] += 'a' - 'A';
+ }
+ if((format->s_name[0] == 'b')||(format->s_name[0] == 'c')||(format->s_name[0] == 's')||(format->s_name[0] == 't'))
+ mode[0] = format->s_name[0];
+ if((format->s_name[1] == 'b')||(format->s_name[1] == 'r')||(format->s_name[1] == 's'))
+ mode[1] = format->s_name[1];
+ if((format->s_name[2] == 'l')||(format->s_name[2] == 'w')||(format->s_name[2] == 'm'))
+ mode[2] = format->s_name[2];
+ }
+ else
+ post("iem_pbank_csv_read: use default format %s !!\n", mode);
+ if(mode[0] == 'b')
+ {
+ sep = ' ';
+ strcpy(formattext, "item-separator = BLANK; ");
+ }
+ else if(mode[0] == 'c')
+ {
+ sep = ',';
+ strcpy(formattext, "item-separator = COMMA; ");
+ }
+ else if(mode[0] == 's')
+ {
+ sep = ';';
+ strcpy(formattext, "item-separator = SEMICOLON; ");
+ }
+ else if(mode[0] == 't')
+ {
+ sep = 0x09;
+ strcpy(formattext, "item-separator = TABULATOR; ");
+ }
+
+ eollen = 1;
+ if(mode[1] == 'b')
+ {
+ eol[0] = ' ';
+ strcat(formattext, "end_of_line_terminator = BLANK-RETURN in ");
+ }
+ else if(mode[1] == 'r')
+ {
+ eollen = 0;
+ strcat(formattext, "end_of_line_terminator = RETURN in ");
+ }
+ else if(mode[1] == 's')
+ {
+ eol[0] = ';';
+ strcat(formattext, "end_of_line_terminator = SEMICOLON-RETURN in ");
+ }
+
+ if(mode[2] == 'l')
+ {
+ eol[eollen++] = 0x0a;
+ strcat(formattext, "LINUX-Format.");
+ }
+ else if(mode[2] == 'w')
+ {
+ eol[eollen++] = 0x0d;
+ eol[eollen++] = 0x0a;
+ strcat(formattext, "WINDOWS-Format.");
+ }
+ else if(mode[2] == 'm')
+ {
+ eol[eollen++] = 0x0d;
+ strcat(formattext, "MACINTOSH-Format.");
+ }
+ eol[eollen] = 0;
+
+ fseek(fh, 0, SEEK_END);
+ txalloc = ftell(fh);
+ fseek(fh,0,SEEK_SET);
+ txbuf1 = (char *)getbytes(2 * txalloc * sizeof(char));
+ txbuf2 = (char *)getbytes(2 * txalloc * sizeof(char));
+ fread(txbuf1, sizeof(char), txalloc, fh);
+ fclose(fh);
+
+ txvec_src = txbuf1;
+ txvec_dst = txbuf2;
+ p = 0;
+ for(l=0; l<txalloc; l++)
+ {
+ if(!strncmp(txvec_src, eol, eollen)) /* replace eol by 0x0a */
+ {
+ txvec_src += eollen;
+ l += eollen - 1;
+ *txvec_dst++ = 0x0a;
+ p++;
+ }
+ else if(*txvec_src == sep) /* replace sep by ; */
+ {
+ txvec_src++;
+ *txvec_dst++ = ';';
+ p++;
+ }
+ else if((*txvec_src == '\r')||(*txvec_src == '\n')||(*txvec_src == '\t')) /* remove '\n'-returns */
+ txvec_src++;
+ else /* copy the same char */
+ {
+ *txvec_dst++ = *txvec_src++;
+ p++;
+ }
+ }
+ txlen = p;
+
+ txvec_src = txbuf2;
+ txvec_dst = txbuf1;
+ p = 0;
+ for(l=0; l<txlen; l++)
+ {
+ if((*txvec_src == ';')&&(txvec_src[1] == ';')) /* fill between 2 sep a zero */
+ {
+ *txvec_dst++ = *txvec_src++;
+ *txvec_dst++ = '0';
+ p += 2;
+ }
+ else if((*txvec_src == ';')&&(txvec_src[1] == 0x0a)) /* fill between sep and eol a zero */
+ {
+ *txvec_dst++ = *txvec_src++;
+ *txvec_dst++ = '0';
+ p += 2;
+ }
+ else if((*txvec_src == 0x0a)&&(txvec_src[1] == ';')) /* fill between eol and sep a zero */
+ {
+ *txvec_dst++ = *txvec_src++;
+ *txvec_dst++ = '0';
+ p += 2;
+ }
+ else if(*txvec_src == ',') /* replace a comma by a dot */
+ {
+ *txvec_dst++ = '.';
+ txvec_src++;
+ p++;
+ }
+ else /* copy the same char */
+ {
+ *txvec_dst++ = *txvec_src++;
+ p++;
+ }
+ }
+ txlen = p;
+
+ /* strncpy(txbuf2, txbuf1, txlen);
+ txbuf2[txlen] = 0;
+ post("\n\n%s\n\n", txbuf2); */
+
+ hat_alloc = 200;
+ hap = t_getbytes(hat_alloc * sizeof(t_atom));
+
+ atlen = iem_pbank_csv_text2atom(txbuf1, txlen, &hap, &hat_alloc, ';', 0x0a);
+
+ /* ap = hap;
+ i = atlen;
+ while(i >= 20)
+ {
+ post("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",myq(ap,0),myq(ap,1),myq(ap,2),myq(ap,3),myq(ap,4),myq(ap,5),myq(ap,6),myq(ap,7),myq(ap,8),myq(ap,9),myq(ap,10),myq(ap,11),myq(ap,12),myq(ap,13),myq(ap,14),myq(ap,15),myq(ap,16),myq(ap,17),myq(ap,18),myq(ap,19));
+ ap += 20;
+ i -= 20;
+ } */
+
+ at = x->x_atbegmem;
+ for(l=0; l<nrl; l++)/*reset all*/
+ {
+ for(p=0; p<nrp; p++)
+ {
+ SETFLOAT(at, 0.0f);
+ at++;
+ }
+ }
+
+ at = x->x_atbegmem;
+ ap = hap;
+ nrp++;
+ i = 0; /* atom-counter */
+ j = 0;
+ for(l=0; l<nrl; l++)/* nrl line times */
+ {
+ for(p=1; p<=nrp;)
+ {
+ if((p == nrp) && !(IS_A_SEMI(ap,0)))
+ {
+ /*post("too long");*/
+ while(!(IS_A_SEMI(ap,0)))
+ {
+ ap++;
+ atlen--;
+ /*post("ignore");*/
+ j++;
+ if(atlen <= 0)
+ {
+ goto iem_pbank_csv_end;
+ }
+ }
+ }
+ else
+ {
+ if(IS_A_FLOAT(ap,0))
+ {
+ SETFLOAT(at, ap->a_w.w_float);
+ /*post("float");*/
+ p++;
+ i++;
+ at++;
+ }
+ else if(IS_A_SYMBOL(ap,0))
+ {
+ SETSYMBOL(at, ap->a_w.w_symbol);
+ /*post("sym");*/
+ p++;
+ i++;
+ at++;
+ }
+ else if(IS_A_SEMI(ap,0))
+ {
+ /*post("semi");*/
+ for(; p<nrp;)
+ {
+ SETFLOAT(at,0.0);
+ /*post("zero");*/
+ p++;
+ i++;
+ at++;
+ }
+ p=nrp + 1;
+ }
+ ap++;
+ atlen--;
+ j++;
+ }
+ if(atlen <= 0)
+ {
+ goto iem_pbank_csv_end;
+ }
+ }
+ }
+
+iem_pbank_csv_end:
+
+
+ freebytes(hap, hat_alloc * sizeof(t_atom));
+ freebytes(txbuf1, 2 * txalloc * sizeof(char));
+ freebytes(txbuf2, 2 * txalloc * sizeof(char));
+ post("iem_pbank_csv: read %d parameters x %d lines from file:\n%s\nwith following format:\n%s\n", nrp-1, nrl, completefilename, formattext);
+ }
+}
+
+static void iem_pbank_csv_recall(t_iem_pbank_csv *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, n, beg=0, nrp=x->x_nr_para;
+ t_atom *atbuf=x->x_atbegbuf, *atmem=x->x_atbegmem;
+ t_atom *atout=x->x_atbegout;
+
+ if(ac >= 2)
+ nrp = atom_getintarg(1, ac, av);
+ if(ac >= 1)
+ beg = atom_getintarg(0, ac, av);
+ if(beg < 0)
+ beg = 0;
+ else if(beg >= x->x_nr_para)
+ beg = x->x_nr_para - 1;
+ if(nrp < 0)
+ nrp = 0;
+ else if((beg+nrp) > x->x_nr_para)
+ nrp = x->x_nr_para - beg;
+ atmem += x->x_nr_para * x->x_line + beg;
+ atbuf += beg;
+ SETFLOAT(atout, (float)beg);
+ atout++;
+ for(i=0; i<nrp; i++)
+ {
+ *atbuf++ = *atmem;
+ *atout++ = *atmem++;
+ }
+ outlet_list(x->x_offset_list_out, &s_list, nrp+1, x->x_atbegout);
+ outlet_list(x->x_list_out, &s_list, nrp, x->x_atbegout+1);
+}
+
+static void iem_pbank_csv_bang(t_iem_pbank_csv *x)
+{
+ int i, nrp=x->x_nr_para;
+ t_atom *atbuf=x->x_atbegbuf;
+ t_atom *atout=x->x_atbegout;
+
+ SETFLOAT(atout, 0.0f);
+ atout++;
+ for(i=0; i<nrp; i++)
+ *atout++ = *atbuf++;
+ outlet_list(x->x_offset_list_out, &s_list, nrp+1, x->x_atbegout);
+ outlet_list(x->x_list_out, &s_list, nrp, x->x_atbegout+1);
+}
+
+static void iem_pbank_csv_store(t_iem_pbank_csv *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, beg=0, nrp=x->x_nr_para;
+ t_atom *atbuf=x->x_atbegbuf, *atmem=x->x_atbegmem;
+
+ if(ac >= 2)
+ nrp = atom_getintarg(1, ac, av);
+ if(ac >= 1)
+ beg = atom_getintarg(0, ac, av);
+ if(beg < 0)
+ beg = 0;
+ else if(beg >= x->x_nr_para)
+ beg = x->x_nr_para - 1;
+ if(nrp < 0)
+ nrp = 0;
+ else if((beg+nrp) > x->x_nr_para)
+ nrp = x->x_nr_para - beg;
+ atmem += x->x_nr_para * x->x_line;
+ atmem += beg;
+ atbuf += beg;
+ for(i=0; i<nrp; i++)
+ *atmem++ = *atbuf++;
+}
+
+static void iem_pbank_csv_list(t_iem_pbank_csv *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(ac >= 2)
+ {
+ int para_index = atom_getintarg(0, ac, av);
+
+ if(para_index >= 0)
+ {
+ if((para_index+ac-1) <= x->x_nr_para)
+ {
+ int i;
+
+ for(i=1; i<ac; i++)
+ {
+ x->x_atbegbuf[para_index] = av[i];
+ para_index++;
+ }
+ }
+ }
+ }
+}
+
+static void iem_pbank_csv_ft1(t_iem_pbank_csv *x, t_float fline_nr)
+{
+ int line = (int)fline_nr;
+
+ if(line < 0)
+ line = 0;
+ else if(line >= x->x_nr_line)
+ line = x->x_nr_line - 1;
+ x->x_line = line;
+}
+
+static void iem_pbank_csv_free(t_iem_pbank_csv *x)
+{
+ freebytes(x->x_atbegmem, x->x_nr_para * x->x_nr_line * sizeof(t_atom));
+ freebytes(x->x_atbegbuf, x->x_nr_para * sizeof(t_atom));
+ freebytes(x->x_atbegout, (x->x_nr_para+1) * sizeof(t_atom));
+}
+
+static void *iem_pbank_csv_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_iem_pbank_csv *x = (t_iem_pbank_csv *)pd_new(iem_pbank_csv_class);
+ int nrpp=0, nrp=10, nrl=10, p, l, i;
+ t_atom *ap;
+
+ if((ac >= 1) && IS_A_FLOAT(av,0))
+ nrp = atom_getintarg(0, ac, av);
+ if((ac >= 2) && IS_A_FLOAT(av,1))
+ nrl = atom_getintarg(1, ac, av);
+ if(nrp <= 0)
+ nrp = 10;
+ if(nrl <= 0)
+ nrl = 10;
+ x->x_line = 0;
+ x->x_nr_para = nrp;
+ x->x_nr_line = nrl;
+ x->x_atbegmem = (t_atom *)getbytes(x->x_nr_para * x->x_nr_line * sizeof(t_atom));
+ x->x_atbegbuf = (t_atom *)getbytes(x->x_nr_para * sizeof(t_atom));
+ x->x_atbegout = (t_atom *)getbytes((x->x_nr_para+1) * sizeof(t_atom));
+ ap = x->x_atbegmem;
+ for(l=0; l<nrl; l++)
+ {
+ for(p=0; p<nrp; p++)
+ {
+ SETFLOAT(ap, 0.0f);
+ ap++;
+ }
+ }
+ ap = x->x_atbegbuf;
+ for(p=0; p<nrp; p++)
+ {
+ SETFLOAT(ap, 0.0f);
+ ap++;
+ }
+ x->x_list_out = outlet_new(&x->x_obj, &s_list); /*left out*/
+ x->x_offset_list_out = outlet_new(&x->x_obj, &s_list); /*right out*/
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ x->x_canvas = canvas_getcurrent();
+ return (x);
+}
+
+/* ---------------- global setup function -------------------- */
+
+void iem_pbank_csv_setup(void )
+{
+ iem_pbank_csv_class = class_new(gensym("iem_pbank_csv"), (t_newmethod)iem_pbank_csv_new,
+ (t_method)iem_pbank_csv_free, sizeof(t_iem_pbank_csv), 0, A_GIMME, 0);
+ class_addmethod(iem_pbank_csv_class, (t_method)iem_pbank_csv_recall, gensym("recall"), A_GIMME, 0);
+ class_addmethod(iem_pbank_csv_class, (t_method)iem_pbank_csv_store, gensym("store"), A_GIMME, 0);
+ class_addmethod(iem_pbank_csv_class, (t_method)iem_pbank_csv_read, gensym("read"), A_SYMBOL, A_DEFSYM, 0);
+ class_addmethod(iem_pbank_csv_class, (t_method)iem_pbank_csv_write, gensym("write"), A_SYMBOL, A_DEFSYM, 0);
+ class_addlist(iem_pbank_csv_class, iem_pbank_csv_list);
+ class_addbang(iem_pbank_csv_class, iem_pbank_csv_bang);
+ class_addmethod(iem_pbank_csv_class, (t_method)iem_pbank_csv_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_sethelpsymbol(iem_pbank_csv_class, gensym("iemhelp/help-iem_pbank_csv"));
+}
+
diff --git a/src/iemlib2/iem_prepend_kernel.c b/src/iemlib2/iem_prepend_kernel.c
new file mode 100644
index 0000000..5147107
--- /dev/null
+++ b/src/iemlib2/iem_prepend_kernel.c
@@ -0,0 +1,259 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+
+/* ------------------------ iem_prepend_kernel ---------------------------- */
+static t_class *iem_prepend_kernel_class;
+
+typedef struct _iem_prepend_kernel
+{
+ t_object x_obj;
+ int x_inlet_select;
+ int x_size;
+ int x_ac;
+ t_atom *x_at;
+ t_symbol *x_sym;
+ t_atomtype x_type;
+} t_iem_prepend_kernel;
+
+static void iem_prepend_kernel_atcopy(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void iem_prepend_kernel_inlet_select(t_iem_prepend_kernel *x, t_floatarg fin_sel_01)
+{
+ x->x_inlet_select = (int)fin_sel_01;
+}
+
+static void iem_prepend_kernel_bang(t_iem_prepend_kernel *x)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac = 0;
+ x->x_type = A_NULL;
+ x->x_sym = &s_bang;
+ }
+ else /* if 1st inlet */
+ {
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac, x->x_at);
+ }
+}
+
+static void iem_prepend_kernel_float(t_iem_prepend_kernel *x, t_float f)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac = 1;
+ x->x_type = A_FLOAT;
+ SETFLOAT(x->x_at, f);
+ x->x_sym = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ if(x->x_type == A_NULL)
+ {
+ outlet_float(x->x_obj.ob_outlet, f);
+ }
+ else
+ {
+ SETFLOAT(x->x_at+x->x_ac, f);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+ }
+ }
+}
+
+static void iem_prepend_kernel_symbol(t_iem_prepend_kernel *x, t_symbol *s)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac = 1;
+ x->x_type = A_SYMBOL;
+ SETSYMBOL(x->x_at, s);
+ x->x_sym = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ if(x->x_type == A_NULL)
+ {
+ outlet_symbol(x->x_obj.ob_outlet, s);
+ }
+ else
+ {
+ SETSYMBOL(x->x_at+x->x_ac, s);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+ }
+ }
+}
+
+static void iem_prepend_kernel_pointer(t_iem_prepend_kernel *x, t_gpointer *gp)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac = 1;
+ x->x_type = A_POINTER;
+ SETPOINTER(x->x_at, gp);
+ x->x_sym = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ if(x->x_type == A_NULL)
+ {
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+ }
+ else
+ {
+ SETPOINTER(x->x_at+x->x_ac, gp);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+ }
+ }
+}
+
+static void iem_prepend_kernel_list(t_iem_prepend_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if((ac+10) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), 2*(ac+10)*sizeof(t_atom));
+ x->x_size = 2*(ac+10);
+ }
+ x->x_ac = ac;
+ x->x_type = A_GIMME;
+ x->x_sym = &s_list;
+ iem_prepend_kernel_atcopy(av, x->x_at, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((ac+x->x_ac+1) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), 2*(ac+x->x_ac+1)*sizeof(t_atom));
+ x->x_size = 2*(ac+x->x_ac+1);
+ }
+ if(x->x_type == A_NULL)
+ {
+ outlet_anything(x->x_obj.ob_outlet, &s_list, ac, av);
+ }
+ else
+ {
+ iem_prepend_kernel_atcopy(av, x->x_at + x->x_ac, ac);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+ac, x->x_at);
+ }
+ }
+}
+
+static void iem_prepend_kernel_anything(t_iem_prepend_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if((ac+10) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), 2*(ac+10)*sizeof(t_atom));
+ x->x_size = 2*(ac+10);
+ }
+ x->x_ac = ac;
+ x->x_type = A_COMMA;
+ x->x_sym = s;
+ iem_prepend_kernel_atcopy(av, x->x_at, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((ac+x->x_ac+1) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), 2*(ac+x->x_ac+1)*sizeof(t_atom));
+ x->x_size = 2*(ac+x->x_ac+1);
+ }
+ if(x->x_type == A_NULL)
+ {
+ outlet_anything(x->x_obj.ob_outlet, s, ac, av);
+ }
+ else
+ {
+ SETSYMBOL(x->x_at + x->x_ac, s);
+ iem_prepend_kernel_atcopy(av, x->x_at+x->x_ac+1, ac);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+ac+1, x->x_at);
+ }
+ }
+}
+
+static void iem_prepend_kernel_free(t_iem_prepend_kernel *x)
+{
+ if(x->x_at)
+ freebytes(x->x_at, x->x_size * sizeof(t_atom));
+}
+
+static void *iem_prepend_kernel_new(void)
+{
+ t_iem_prepend_kernel *x = (t_iem_prepend_kernel *)pd_new(iem_prepend_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ x->x_size = 30;
+ if(ac > 5)
+ x->x_size = 2*(ac+10);
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ x->x_inlet_select = 1;
+ if(ac <= 0)
+ {
+ x->x_type = A_NULL;
+ x->x_ac = 0;
+ x->x_sym = &s_bang;
+ }
+ else
+ {
+ if(IS_A_FLOAT(av, 0))
+ {
+ iem_prepend_kernel_list(x, &s_list, ac, av);
+ }
+ else if(IS_A_SYMBOL(av, 0))
+ {
+ iem_prepend_kernel_anything(x, atom_getsymbol(av), ac-1, av+1);
+ }
+ }
+ outlet_new(&x->x_obj, &s_list);
+ return(x);
+}
+
+void iem_prepend_kernel_setup(void)
+{
+ char str[2];
+
+ str[0] = 1;
+ str[1] = 0;
+ iem_prepend_kernel_class = class_new(gensym("iem_prepend_kernel"),
+ (t_newmethod)iem_prepend_kernel_new, (t_method)iem_prepend_kernel_free,
+ sizeof(t_iem_prepend_kernel), 0, 0);
+ class_addbang(iem_prepend_kernel_class, (t_method)iem_prepend_kernel_bang);
+ class_addpointer(iem_prepend_kernel_class, iem_prepend_kernel_pointer);
+ class_addfloat(iem_prepend_kernel_class, (t_method)iem_prepend_kernel_float);
+ class_addsymbol(iem_prepend_kernel_class, iem_prepend_kernel_symbol);
+ class_addlist(iem_prepend_kernel_class, iem_prepend_kernel_list);
+ class_addmethod(iem_prepend_kernel_class, (t_method)iem_prepend_kernel_inlet_select, gensym(str), A_FLOAT, 0);
+ class_addanything(iem_prepend_kernel_class, iem_prepend_kernel_anything);
+ class_sethelpsymbol(iem_prepend_kernel_class, gensym("iemhelp/help-merge_any"));
+}
diff --git a/src/iemlib2/iem_receive_kernel.c b/src/iemlib2/iem_receive_kernel.c
new file mode 100644
index 0000000..4ff3c76
--- /dev/null
+++ b/src/iemlib2/iem_receive_kernel.c
@@ -0,0 +1,155 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+/* ------------------------ iem_receive_kernel ---------------------------- */
+
+static t_class *iem_receive_kernel_class;
+
+typedef struct _iem_receive_kernel
+{
+ t_object x_obj;
+ t_symbol *x_sym;
+} t_iem_receive_kernel;
+
+void iem_receive_kernel_copy_at(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void iem_receive_kernel_set_name(t_iem_receive_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if((argc > 0)&&((IS_A_SYMBOL(argv,0))||(IS_A_FLOAT(argv,0))))
+ {
+ if(x->x_sym)
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+ if(IS_A_SYMBOL(argv,0))
+ x->x_sym = atom_getsymbol(argv);
+ else if(IS_A_FLOAT(argv,0))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloat(argv));
+ x->x_sym = gensym(str);
+ }
+ pd_bind(&x->x_obj.ob_pd, x->x_sym);
+ }
+}
+
+static void iem_receive_kernel_clear(t_iem_receive_kernel *x)
+{
+ if(x->x_sym)
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+ x->x_sym = 0;
+}
+
+static void iem_receive_kernel_bang(t_iem_receive_kernel *x)
+{
+ outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void iem_receive_kernel_float(t_iem_receive_kernel *x, t_float f)
+{
+ outlet_float(x->x_obj.ob_outlet, f);
+}
+
+static void iem_receive_kernel_symbol(t_iem_receive_kernel *x, t_symbol *s)
+{
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void iem_receive_kernel_pointer(t_iem_receive_kernel *x, t_gpointer *gp)
+{
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}
+
+static void iem_receive_kernel_list(t_iem_receive_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ outlet_list(x->x_obj.ob_outlet, &s_list, argc, argv);
+}
+
+static void iem_receive_kernel_anything(t_iem_receive_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ outlet_anything(x->x_obj.ob_outlet, s, argc, argv);
+}
+
+static void iem_receive_kernel_free(t_iem_receive_kernel *x)
+{
+ if(x->x_sym)
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+static void *iem_receive_kernel_new(void)
+{
+ t_iem_receive_kernel *x = (t_iem_receive_kernel *)pd_new(iem_receive_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ if(ac > 0)
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_sym = atom_getsymbol(av);
+ pd_bind(&x->x_obj.ob_pd, x->x_sym);
+ }
+ else if(IS_A_FLOAT(av,0))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloat(av));
+ x->x_sym = gensym(str);
+ pd_bind(&x->x_obj.ob_pd, x->x_sym);
+ }
+ else
+ x->x_sym = 0;
+ }
+ else
+ x->x_sym = 0;
+
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void iem_receive_kernel_setup(void)
+{
+ char str[2];
+
+ str[1] = 0;
+ iem_receive_kernel_class = class_new(gensym("iem_receive_kernel"), (t_newmethod)iem_receive_kernel_new,
+ (t_method)iem_receive_kernel_free, sizeof(t_iem_receive_kernel), 0, 0);
+ class_addbang(iem_receive_kernel_class, iem_receive_kernel_bang);
+ class_addfloat(iem_receive_kernel_class, iem_receive_kernel_float);
+ class_addsymbol(iem_receive_kernel_class, iem_receive_kernel_symbol);
+ class_addpointer(iem_receive_kernel_class, iem_receive_kernel_pointer);
+ class_addlist(iem_receive_kernel_class, iem_receive_kernel_list);
+ class_addanything(iem_receive_kernel_class, iem_receive_kernel_anything);
+// class_addmethod(iem_receive_kernel_class, (t_method)iem_receive_kernel_set, gensym("set"), A_GIMME, 0);
+ str[0] = 1;/*inlet-sym = "\0x01"*/
+ class_addmethod(iem_receive_kernel_class, (t_method)iem_receive_kernel_set_name, gensym(str), A_GIMME, 0);
+ str[0] = 2;/*inlet-sym = "\0x02"*/
+ class_addmethod(iem_receive_kernel_class, (t_method)iem_receive_kernel_clear, gensym(str), 0);
+ class_sethelpsymbol(iem_receive_kernel_class, gensym("iemhelp/help-iem_receive"));
+}
diff --git a/src/iemlib2/iem_route.c b/src/iemlib2/iem_route.c
new file mode 100644
index 0000000..85071ae
--- /dev/null
+++ b/src/iemlib2/iem_route.c
@@ -0,0 +1,198 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- iem_route ------------------------------ */
+
+static t_class *iem_route_class;
+
+typedef struct _iem_routeelement
+{
+ t_word e_w;
+ t_outlet *e_outlet;
+} t_iem_routeelement;
+
+typedef struct _iem_route
+{
+ t_object x_obj;
+ t_atomtype x_type;
+ t_int x_nelement;
+ t_iem_routeelement *x_vec;
+ t_outlet *x_rejectout;
+} t_iem_route;
+
+static void iem_route_anything(t_iem_route *x, t_symbol *sel, int argc, t_atom *argv)
+{
+ t_iem_routeelement *e;
+ int nelement;
+
+ if(x->x_type == A_SYMBOL)
+ {
+ for(nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if(e->e_w.w_symbol == sel)
+ {
+ if(!argc)
+ outlet_bang(e->e_outlet);
+ else
+ {
+ if(argc == 1)
+ {
+ if(argv[0].a_type == A_FLOAT)
+ outlet_float(e->e_outlet, argv[0].a_w.w_float);
+ else
+ outlet_anything(e->e_outlet, argv[0].a_w.w_symbol, 0, argv+1);
+ }
+ else
+ {
+ if(argv[0].a_type == A_SYMBOL)
+ outlet_anything(e->e_outlet, argv[0].a_w.w_symbol, argc-1, argv+1);
+ else
+ outlet_list(e->e_outlet, &s_list, argc, argv);
+ }
+ }
+ return;
+ }
+ }
+ }
+ outlet_anything(x->x_rejectout, sel, argc, argv);
+}
+
+static void iem_route_list(t_iem_route *x, t_symbol *sel, int argc, t_atom *argv)
+{
+ t_iem_routeelement *e;
+ int nelement;
+
+ if (x->x_type == A_FLOAT)
+ {
+ float f;
+
+ if(!argc)
+ return;
+ f = atom_getfloat(argv);
+ for(nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if(e->e_w.w_float == f)
+ {
+ if(argc > 1 && argv[1].a_type == A_SYMBOL)
+ outlet_anything(e->e_outlet, argv[1].a_w.w_symbol, argc-2, argv+2);
+ else
+ {
+ if(argc == 1)
+ outlet_bang(e->e_outlet);
+ else if(argc == 2)
+ outlet_float(e->e_outlet, atom_getfloat(argv+1));
+ else
+ outlet_list(e->e_outlet, &s_list, argc-1, argv+1);
+ }
+ return;
+ }
+ }
+ }
+ else /* symbol arguments */
+ {
+ if(argc > 1) /* 2 or more args: treat as "list" */
+ {
+ for(nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if(e->e_w.w_symbol == &s_list)
+ {
+ if(argv[0].a_type == A_SYMBOL)
+ outlet_anything(e->e_outlet, argv[0].a_w.w_symbol, argc-1, argv+1);
+ else
+ outlet_list(e->e_outlet, &s_list, argc, argv);
+ return;
+ }
+ }
+ }
+ else if(argc == 0) /* no args: treat as "bang" */
+ {
+ for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if (e->e_w.w_symbol == &s_bang)
+ {
+ outlet_bang(e->e_outlet);
+ return;
+ }
+ }
+ }
+ else if (argv[0].a_type == A_FLOAT) /* one float arg */
+ {
+ for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if (e->e_w.w_symbol == &s_float)
+ {
+ outlet_float(e->e_outlet, argv[0].a_w.w_float);
+ return;
+ }
+ }
+ }
+ else
+ {
+ for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++)
+ {
+ if (e->e_w.w_symbol == &s_symbol)
+ {
+ outlet_symbol(e->e_outlet, argv[0].a_w.w_symbol);
+ return;
+ }
+ }
+ }
+ }
+ outlet_list(x->x_rejectout, &s_list, argc, argv);
+}
+
+
+static void iem_route_free(t_iem_route *x)
+{
+ freebytes(x->x_vec, x->x_nelement * sizeof(*x->x_vec));
+}
+
+static void *iem_route_new(t_symbol *s, int argc, t_atom *argv)
+{
+ int n;
+ t_iem_routeelement *e;
+ t_iem_route *x = (t_iem_route *)pd_new(iem_route_class);
+ t_atom a;
+ if (argc == 0)
+ {
+ argc = 1;
+ SETFLOAT(&a, 0);
+ argv = &a;
+ }
+ x->x_type = argv[0].a_type;
+ x->x_nelement = argc;
+ x->x_vec = (t_iem_routeelement *)getbytes(argc * sizeof(*x->x_vec));
+ for (n = 0, e = x->x_vec; n < argc; n++, e++)
+ {
+ e->e_outlet = outlet_new(&x->x_obj, &s_list);
+ if (x->x_type == A_FLOAT)
+ e->e_w.w_float = atom_getfloatarg(n, argc, argv);
+ else e->e_w.w_symbol = atom_getsymbolarg(n, argc, argv);
+ }
+ x->x_rejectout = outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void iem_route_setup(void)
+{
+ iem_route_class = class_new(gensym("iem_route"), (t_newmethod)iem_route_new,
+ (t_method)iem_route_free, sizeof(t_iem_route), 0, A_GIMME, 0);
+ class_addcreator((t_newmethod)iem_route_new, gensym("ir"), A_GIMME, 0);
+ class_addlist(iem_route_class, iem_route_list);
+ class_addanything(iem_route_class, iem_route_anything);
+ class_sethelpsymbol(iem_route_class, gensym("iemhelp/help-iem_route"));
+}
diff --git a/src/iemlib2/iem_sel_any.c b/src/iemlib2/iem_sel_any.c
new file mode 100644
index 0000000..e6ff7e0
--- /dev/null
+++ b/src/iemlib2/iem_sel_any.c
@@ -0,0 +1,111 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ iem_sel_any ---------------------------- */
+static t_class *iem_sel_any_class;
+
+typedef struct _iem_sel_any
+{
+ t_object x_obj;
+ int x_ac;
+ int x_max_ac;
+ t_symbol **x_any;
+ t_symbol *x_set;
+ void *x_out_any;
+ void *x_out_set_any;
+} t_iem_sel_any;
+
+
+static void iem_sel_any_float(t_iem_sel_any *x, t_float f)
+{
+ int i = (int)f;
+ t_atom at;
+
+ if(x->x_ac > 0)
+ {
+ if(i < 0)
+ i = 0;
+ if(i >= x->x_ac)
+ i = x->x_ac - 1;
+ SETSYMBOL(&at, x->x_any[i]);
+ outlet_anything(x->x_out_any, x->x_any[i], 0, 0);
+ outlet_anything(x->x_out_set_any, x->x_set, 1, &at);
+ }
+}
+
+static void iem_sel_any_add(t_iem_sel_any *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac >= 2) && (IS_A_FLOAT(av, 0)))
+ {
+ int i = (int)atom_getintarg(0, ac, av);
+
+ if((i >= 0) && (i < x->x_max_ac))
+ {
+ if(IS_A_SYMBOL(av, 1))
+ x->x_any[i] = atom_getsymbolarg(1, ac, av);
+ else if(IS_A_FLOAT(av, 1))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloatarg(1, ac, av));
+ x->x_any[i] = gensym(str);
+ }
+ if(i >= x->x_ac)
+ x->x_ac = i+1;
+ }
+ }
+}
+
+static void iem_sel_any_clear(t_iem_sel_any *x)
+{
+ x->x_ac = 0;
+}
+
+static void iem_sel_any_free(t_iem_sel_any *x)
+{
+ freebytes(x->x_any, x->x_max_ac * sizeof(t_symbol *));
+}
+
+static void *iem_sel_any_new(t_float fmax)
+{
+ t_iem_sel_any *x = (t_iem_sel_any *)pd_new(iem_sel_any_class);
+ int i;
+ t_symbol *default_sym=gensym("no_entry");
+
+ if(fmax <= 0.0)
+ fmax = 10.0;
+ x->x_max_ac = (int)fmax;
+ x->x_any = (t_symbol **)getbytes(x->x_max_ac * sizeof(t_symbol *));
+ x->x_ac = 0;
+ x->x_set = gensym("set");
+ for(i=0; i<x->x_max_ac; i++)
+ x->x_any[i] = default_sym;
+ x->x_out_set_any = outlet_new(&x->x_obj, &s_list);
+ x->x_out_any = outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void iem_sel_any_setup(void)
+{
+ iem_sel_any_class = class_new(gensym("iem_sel_any"), (t_newmethod)iem_sel_any_new,
+ (t_method)iem_sel_any_free, sizeof(t_iem_sel_any), 0, A_DEFFLOAT, 0);
+ class_addmethod(iem_sel_any_class, (t_method)iem_sel_any_add, gensym("add"), A_GIMME, 0);
+ class_addmethod(iem_sel_any_class, (t_method)iem_sel_any_clear, gensym("clear"), 0);
+ class_addfloat(iem_sel_any_class, (t_method)iem_sel_any_float);
+ class_sethelpsymbol(iem_sel_any_class, gensym("iemhelp/help-iem_sel_any"));
+}
+
diff --git a/src/iemlib2/iem_send_kernel.c b/src/iemlib2/iem_send_kernel.c
new file mode 100644
index 0000000..62adec7
--- /dev/null
+++ b/src/iemlib2/iem_send_kernel.c
@@ -0,0 +1,140 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+
+/* -------------------- iem_send_kernel ------------------------------ */
+
+static t_class *iem_send_kernel_class;
+
+typedef struct _iem_send_kernel
+{
+ t_object x_obj;
+ t_symbol *x_sym;
+} t_iem_send_kernel;
+
+static void iem_send_kernel_set_name(t_iem_send_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if((argc > 0)&&((IS_A_SYMBOL(argv,0))||(IS_A_FLOAT(argv,0))))
+ {
+ if(IS_A_SYMBOL(argv,0))
+ x->x_sym = atom_getsymbol(argv);
+ else if(IS_A_FLOAT(argv,0))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloat(argv));
+ x->x_sym = gensym(str);
+ }
+ }
+}
+
+static void iem_send_kernel_clear(t_iem_send_kernel *x)
+{
+ x->x_sym = 0;
+}
+
+static void iem_send_kernel_bang(t_iem_send_kernel *x)
+{
+ if(x->x_sym->s_thing)
+ pd_bang(x->x_sym->s_thing);
+}
+
+static void iem_send_kernel_float(t_iem_send_kernel *x, t_float f)
+{
+ if(x->x_sym->s_thing)
+ pd_float(x->x_sym->s_thing, f);
+}
+
+static void iem_send_kernel_symbol(t_iem_send_kernel *x, t_symbol *s)
+{
+ if(x->x_sym->s_thing)
+ pd_symbol(x->x_sym->s_thing, s);
+}
+
+static void iem_send_kernel_pointer(t_iem_send_kernel *x, t_gpointer *gp)
+{
+ if(x->x_sym->s_thing)
+ pd_pointer(x->x_sym->s_thing, gp);
+}
+
+static void iem_send_kernel_list(t_iem_send_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(x->x_sym->s_thing)
+ pd_list(x->x_sym->s_thing, s, argc, argv);
+}
+
+static void iem_send_kernel_anything(t_iem_send_kernel *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(x->x_sym->s_thing)
+ typedmess(x->x_sym->s_thing, s, argc, argv);
+}
+
+static void *iem_send_kernel_new(void)
+{
+ t_iem_send_kernel *x = (t_iem_send_kernel *)pd_new(iem_send_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ if(ac > 0)
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_sym = atom_getsymbol(av);
+ }
+ else if(IS_A_FLOAT(av,0))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloat(av));
+ x->x_sym = gensym(str);
+ }
+ else
+ x->x_sym = 0;
+ }
+ else
+ x->x_sym = 0;
+ return (x);
+}
+
+void iem_send_kernel_setup(void)
+{
+ char str[2];
+
+ str[1] = 0;
+ iem_send_kernel_class = class_new(gensym("iem_send_kernel"), (t_newmethod)iem_send_kernel_new, 0,
+ sizeof(t_iem_send_kernel), 0, 0);
+ class_addcreator((t_newmethod)iem_send_kernel_new, gensym("s"), A_DEFSYM, 0);
+ class_addbang(iem_send_kernel_class, iem_send_kernel_bang);
+ class_addfloat(iem_send_kernel_class, iem_send_kernel_float);
+ class_addsymbol(iem_send_kernel_class, iem_send_kernel_symbol);
+ class_addpointer(iem_send_kernel_class, iem_send_kernel_pointer);
+ class_addlist(iem_send_kernel_class, iem_send_kernel_list);
+ class_addanything(iem_send_kernel_class, iem_send_kernel_anything);
+ str[0] = 1;/*inlet-sym = "\0x01"*/
+ class_addmethod(iem_send_kernel_class, (t_method)iem_send_kernel_set_name, gensym(str), A_GIMME, 0);
+ str[0] = 2;/*inlet-sym = "\0x02"*/
+ class_addmethod(iem_send_kernel_class, (t_method)iem_send_kernel_clear, gensym(str), 0);
+ class_sethelpsymbol(iem_send_kernel_class, gensym("iemhelp/help-iem_send"));
+}
diff --git a/src/iemlib2/iemlib.h b/src/iemlib2/iemlib.h
new file mode 100644
index 0000000..d518565
--- /dev/null
+++ b/src/iemlib2/iemlib.h
@@ -0,0 +1,98 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifndef __IEMLIB_H__
+#define __IEMLIB_H__
+
+
+#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
+#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
+#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
+#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
+#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
+#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
+#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
+
+
+#ifdef NT
+int sys_noloadbang;
+//t_symbol *iemgui_key_sym=0;
+#include <io.h>
+#else
+extern int sys_noloadbang;
+//extern t_symbol *iemgui_key_sym;
+#include <unistd.h>
+#endif
+
+#define DEFDELVS 64
+#define XTRASAMPS 4
+#define SAMPBLK 4
+
+
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#else
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#else
+#ifdef __FreeBSD__
+#include <machine/endian.h>
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif
+#ifdef __linux__
+
+#include <endian.h>
+
+#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+
+#include <sys/types.h>
+#define int32 int32_t
+
+#else
+#ifdef MACOSX
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 int /* a data type that has 32 bits */
+
+#endif /* MACOSX */
+#endif /* __linux__ */
+#endif /* MSW */
+#endif /* SGI */
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+#endif
diff --git a/src/iemlib2/iemlib2.c b/src/iemlib2/iemlib2.c
new file mode 100644
index 0000000..2875f26
--- /dev/null
+++ b/src/iemlib2/iemlib2.c
@@ -0,0 +1,121 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+/*
+#include <ctype.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifndef NT
+#include <sys/signal.h>
+#include <unistd.h>
+#endif
+
+#ifdef NT
+#include <io.h>
+#endif
+ */
+
+static t_class *iemlib2_class;
+
+static void *iemlib2_new(void)
+{
+ t_object *x = (t_object *)pd_new(iemlib2_class);
+
+ return (x);
+}
+
+void add2_comma_setup(void);
+void bpe_setup(void);
+void dollarg_setup(void);
+void exp_inc_setup(void);
+void float24_setup(void);
+void iem_anything_kernel_setup(void);
+void iem_append_kernel_setup(void);
+void iem_i_route_setup(void);
+void iem_prepend_kernel_setup(void);
+void iem_pbank_csv_setup(void);
+void iem_receive_kernel_setup(void);
+void iem_send_kernel_setup(void);
+void iem_route_setup(void);
+void iem_sel_any_setup(void);
+void init_setup(void);
+void list2send_setup(void);
+void mergefilename_setup(void);
+void modulo_counter_setup(void);
+void pre_inlet_setup(void);
+void prepend_ascii_setup(void);
+void post_netreceive_setup(void);
+void round_zero_setup(void);
+void sigfade_setup(void);
+void sigiem_blocksize_setup(void);
+void sigiem_samplerate_setup(void);
+void sigLFO_noise_setup(void);
+void sigm2f_setup(void);
+void speedlim_setup(void);
+void splitfilename_setup(void);
+void stripfilename_setup(void);
+void toggle_mess_setup(void);
+void transf_fader_setup(void);
+void unsymbol_setup(void);
+void wrap_setup(void);
+
+/* ------------------------ setup routine ------------------------- */
+
+void iemlib2_setup(void)
+{
+ iemlib2_class = class_new(gensym("iemlib2"), iemlib2_new, 0,
+ sizeof(t_object), CLASS_NOINLET, 0);
+
+ add2_comma_setup();
+ bpe_setup();
+ dollarg_setup();
+ exp_inc_setup();
+ float24_setup();
+ iem_anything_kernel_setup();
+ iem_append_kernel_setup();
+ iem_i_route_setup();
+ iem_pbank_csv_setup();
+ iem_prepend_kernel_setup();
+ iem_receive_kernel_setup();
+ iem_send_kernel_setup();
+ iem_route_setup();
+ iem_sel_any_setup();
+ init_setup();
+ list2send_setup();
+ mergefilename_setup();
+ modulo_counter_setup();
+ pre_inlet_setup();
+ prepend_ascii_setup();
+ post_netreceive_setup();
+ round_zero_setup();
+ sigfade_setup();
+ sigiem_blocksize_setup();
+ sigiem_samplerate_setup();
+ sigLFO_noise_setup();
+ sigm2f_setup();
+ speedlim_setup();
+ splitfilename_setup();
+ stripfilename_setup();
+ toggle_mess_setup();
+ transf_fader_setup();
+ unsymbol_setup();
+ wrap_setup();
+
+ post("iemlib2 (R-1.15) library loaded!");
+}
diff --git a/src/iemlib2/iemlib2.dsp b/src/iemlib2/iemlib2.dsp
new file mode 100644
index 0000000..d8c2966
--- /dev/null
+++ b/src/iemlib2/iemlib2.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iemlib2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iemlib2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "iemlib2.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "iemlib2.mak" CFG="iemlib2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "iemlib2 - Win32 Release" (basierend auf "Win32 (x86) External Target")
+!MESSAGE "iemlib2 - Win32 Debug" (basierend auf "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "iemlib2 - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iemlib2.exe"
+# PROP Bsc_Name "iemlib2.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "iemlib2 - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iemlib2.exe"
+# PROP Bsc_Name "iemlib2.bsc"
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "iemlib2 - Win32 Release"
+# Name "iemlib2 - Win32 Debug"
+
+!IF "$(CFG)" == "iemlib2 - Win32 Release"
+
+!ELSEIF "$(CFG)" == "iemlib2 - Win32 Debug"
+
+!ENDIF
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/src/iemlib2/iemlib2.dsw b/src/iemlib2/iemlib2.dsw
new file mode 100644
index 0000000..2226931
--- /dev/null
+++ b/src/iemlib2/iemlib2.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iemlib2"=.\iemlib2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/iemlib2/init.c b/src/iemlib2/init.c
new file mode 100644
index 0000000..e7ab93b
--- /dev/null
+++ b/src/iemlib2/init.c
@@ -0,0 +1,203 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ init ---------------------------- */
+static t_class *init_class;
+
+typedef struct _init
+{
+ t_object x_obj;
+ int x_n;
+ int x_ac;
+ t_atom *x_at;
+ t_symbol *x_sym;
+ t_atomtype x_type;
+} t_init;
+
+static void init_bang(t_init *x)
+{
+ if(x->x_type == A_FLOAT)
+ outlet_float(x->x_obj.ob_outlet, atom_getfloat(x->x_at));
+ else if(x->x_type == A_SYMBOL)
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbol(x->x_at));
+ else if(x->x_type == A_NULL)
+ outlet_bang(x->x_obj.ob_outlet);
+ else if(x->x_type == A_COMMA)
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac, x->x_at);
+ else if(x->x_type == A_GIMME)
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac, x->x_at);
+ else if(x->x_type == A_POINTER)
+ outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at->a_w.w_gpointer);
+}
+
+static void init_loadbang(t_init *x)
+{
+ if(!sys_noloadbang)
+ init_bang(x);
+}
+
+static void init_float(t_init *x, t_float f)
+{
+ x->x_ac = 1;
+ SETFLOAT(x->x_at, f);
+ x->x_sym = &s_float;
+ x->x_type = A_FLOAT;
+ outlet_float(x->x_obj.ob_outlet, f);
+}
+
+static void init_symbol(t_init *x, t_symbol *s)
+{
+ x->x_ac = 1;
+ SETSYMBOL(x->x_at, s);
+ x->x_sym = &s_symbol;
+ x->x_type = A_SYMBOL;
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void init_pointer(t_init *x, t_gpointer *gp)
+{
+ x->x_ac = 1;
+ SETPOINTER(x->x_at, gp);
+ x->x_sym = &s_pointer;
+ x->x_type = A_POINTER;
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}
+
+static void init_list(t_init *x, t_symbol *s, int ac, t_atom *av)
+{
+ t_atom *at;
+
+ if(ac > x->x_n)
+ {
+ if(x->x_at)
+ freebytes(x->x_at, x->x_n * sizeof(t_atom));
+ x->x_n = ac;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ }
+ x->x_ac = ac;
+ x->x_sym = &s_list;
+ at = x->x_at;
+ while(ac--)
+ *at++ = *av++;
+ x->x_type = A_GIMME;
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac, x->x_at);
+}
+
+static void init_anything(t_init *x, t_symbol *s, int ac, t_atom *av)
+{
+ t_atom *at;
+
+ if(ac > x->x_n)
+ {
+ if(x->x_at)
+ freebytes(x->x_at, x->x_n * sizeof(t_atom));
+ x->x_n = ac;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ }
+ x->x_ac = ac;
+ x->x_sym = s;
+ at = x->x_at;
+ while(ac--)
+ *at++ = *av++;
+ x->x_type = A_COMMA;
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac, x->x_at);
+}
+
+static void init_free(t_init *x)
+{
+ if(x->x_at)
+ freebytes(x->x_at, x->x_n * sizeof(t_atom));
+}
+
+static void *init_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_init *x = (t_init *)pd_new(init_class);
+ int i;
+
+ x->x_type = A_NULL;
+ if(!ac)
+ {
+ x->x_type = A_NULL;
+ x->x_sym = &s_bang;
+ x->x_n = 1;
+ x->x_ac = 0;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ }
+ else if(ac == 1)
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_type = A_COMMA;
+ x->x_sym = atom_getsymbol(av);
+ x->x_n = 1;
+ x->x_ac = 0;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ }
+ else
+ {
+ if(IS_A_FLOAT(av,0))
+ {
+ x->x_type = A_FLOAT;
+ x->x_sym = &s_float;
+ }
+ else if(IS_A_POINTER(av,0))
+ {
+ x->x_type = A_POINTER;
+ x->x_sym = &s_pointer;
+ }
+ x->x_n = x->x_ac = 1;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ x->x_at[0] = *av;
+ }
+ }
+ else
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_type = A_COMMA;/*for anything*/
+ x->x_sym = atom_getsymbol(av++);
+ ac--;
+ }
+ else
+ {
+ x->x_type = A_GIMME;
+ x->x_sym = &s_list;
+ }
+ x->x_n = x->x_ac = ac;
+ x->x_at = (t_atom *)getbytes(x->x_n * sizeof(t_atom));
+ for(i=0; i<ac; i++)
+ x->x_at[i] = *av++;
+ }
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void init_setup(void)
+{
+ init_class = class_new(gensym("init"), (t_newmethod)init_new,
+ (t_method)init_free, sizeof(t_init), 0, A_GIMME, 0);
+ class_addcreator((t_newmethod)init_new, gensym("ii"), A_GIMME, 0);
+ class_addmethod(init_class, (t_method)init_loadbang, gensym("loadbang"), 0);
+ class_addbang(init_class, (t_method)init_bang);
+ class_addanything(init_class, init_anything);
+ class_addlist(init_class, init_list);
+ class_addpointer(init_class, init_pointer);
+ class_addfloat(init_class, (t_method)init_float);
+ class_addsymbol(init_class, init_symbol);
+ class_sethelpsymbol(init_class, gensym("iemhelp/help-init"));
+}
+
diff --git a/src/iemlib2/list2send.c b/src/iemlib2/list2send.c
new file mode 100644
index 0000000..eb956d1
--- /dev/null
+++ b/src/iemlib2/list2send.c
@@ -0,0 +1,246 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ list2send ---------------------------- */
+static t_class *list2send_class;
+
+typedef struct _list2send
+{
+ t_object x_obj;
+ int x_max;
+ char *x_snd_able;
+ t_symbol **x_send_entries;
+ t_symbol *x_set;
+} t_list2send;
+
+static void list2send_list(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac >= 2) && (IS_A_FLOAT(av,0)))
+ {
+ int identifier_index = (int)atom_getintarg(0, ac, av);
+
+ if(identifier_index < x->x_max)
+ {
+ if(x->x_snd_able[identifier_index])
+ {
+ t_symbol *sender = x->x_send_entries[identifier_index];
+
+ if(sender->s_thing)
+ {
+ if(ac == 2)
+ {
+ if(IS_A_FLOAT(av, 1))
+ pd_float(sender->s_thing, atom_getfloatarg(1, ac, av));
+ else if(IS_A_SYMBOL(av, 1))
+ pd_symbol(sender->s_thing, atom_getsymbolarg(1, ac, av));
+ }
+ else
+ pd_list(sender->s_thing, &s_list, ac-1, av+1);
+ }
+ }
+ }
+ }
+}
+
+static void list2send_set(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac >= 2) && (IS_A_FLOAT(av,0)))
+ {
+ int identifier_index = (int)atom_getintarg(0, ac, av);
+
+ if(identifier_index < x->x_max)
+ {
+ if(x->x_snd_able[identifier_index])
+ {
+ t_symbol *sender = x->x_send_entries[identifier_index];
+
+ if(sender->s_thing)
+ typedmess(sender->s_thing, s, ac-1, av+1);
+ }
+ }
+ }
+}
+
+static void list2send_all(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, n=x->x_max;
+
+ if(ac == n)
+ {
+ for(i=n-1; i>=0; i--)/*change*/
+ {
+ if(x->x_snd_able[i])
+ {
+ t_symbol *sender = x->x_send_entries[i];
+
+ if(sender->s_thing)
+ {
+ if(IS_A_FLOAT(av, i))
+ pd_float(sender->s_thing, atom_getfloatarg(i, ac, av));
+ else if(IS_A_SYMBOL(av, i))
+ pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av));
+ }
+ }
+ }
+ }
+}
+
+static void list2send_set_all(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, n=x->x_max;
+
+ if(ac == n)
+ {
+ for(i=n-1; i>=0; i--)/*change*/
+ {
+ if(x->x_snd_able[i])
+ {
+ t_symbol *sender = x->x_send_entries[i];
+
+ if(sender->s_thing)
+ typedmess(sender->s_thing, x->x_set, 1, av+i);
+ }
+ }
+ }
+}
+
+static void list2send_from(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ int n=x->x_max;
+
+ if(ac >= 1)
+ {
+ int i, j, beg=(int)atom_getintarg(0, ac, av);
+
+ if((beg + ac - 1) <= n)
+ {
+ for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/
+ {
+ if(x->x_snd_able[j])
+ {
+ t_symbol *sender = x->x_send_entries[j];
+
+ if(sender->s_thing)
+ {
+ if(IS_A_FLOAT(av, i))
+ pd_float(sender->s_thing, atom_getfloatarg(i, ac, av));
+ else if(IS_A_SYMBOL(av, i))
+ pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av));
+ }
+ }
+ }
+ }
+ }
+}
+
+static void list2send_set_from(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ int n=x->x_max;
+
+ if(ac >= 1)
+ {
+ int i, j, beg=(int)atom_getintarg(0, ac, av);
+
+ if((beg + ac - 1) <= n)
+ {
+ for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/
+ {
+ if(x->x_snd_able[j])
+ {
+ t_symbol *sender = x->x_send_entries[j];
+
+ if(sender->s_thing)
+ typedmess(sender->s_thing, x->x_set, 1, av+i);
+ }
+ }
+ }
+ }
+}
+
+static void list2send_add(t_list2send *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(ac == 2)
+ {
+ int identifier_index = (int)atom_getintarg(0, ac, av);
+
+ if(identifier_index < x->x_max)
+ {
+ if(IS_A_SYMBOL(av, 1))
+ {
+ x->x_send_entries[identifier_index] = atom_getsymbolarg(1, ac, av);
+ x->x_snd_able[identifier_index] = 1;
+ }
+ else if(IS_A_FLOAT(av, 1))
+ {
+ char str[100];
+
+ sprintf(str, "%g", atom_getfloatarg(1, ac, av));
+ x->x_send_entries[identifier_index] = gensym(str);
+ x->x_snd_able[identifier_index] = 1;
+ }
+ }
+ }
+}
+
+static void list2send_clear(t_list2send *x)
+{
+ int i, n=x->x_max;
+
+ for(i=0; i<n; i++)
+ {
+ if(x->x_snd_able[i])
+ x->x_snd_able[i] = 0;
+ }
+}
+
+static void list2send_free(t_list2send *x)
+{
+ freebytes(x->x_snd_able, x->x_max * sizeof(char));
+ freebytes(x->x_send_entries, x->x_max * sizeof(t_symbol *));
+}
+
+static void *list2send_new(t_float fmax)
+{
+ t_list2send *x = (t_list2send *)pd_new(list2send_class);
+ int i, max = (int)fmax;
+ t_atom *ap;
+
+ if(max <= 0)
+ max = 80;
+ x->x_max = max;
+ x->x_snd_able = (char *)getbytes(max * sizeof(char));
+ x->x_send_entries = (t_symbol **)getbytes(max * sizeof(t_symbol *));
+ for(i=0; i<max; i++)
+ x->x_snd_able[i] = 0;
+ x->x_set = gensym("set");
+ return (x);
+}
+
+void list2send_setup(void)
+{
+ list2send_class = class_new(gensym("list2send"), (t_newmethod)list2send_new,
+ (t_method)list2send_free, sizeof(t_list2send), 0, A_DEFFLOAT, 0);
+ class_addlist(list2send_class, list2send_list);
+ class_addmethod(list2send_class, (t_method)list2send_add, gensym("add"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_set, gensym("set"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_all, gensym("all"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_set_all, gensym("set_all"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_from, gensym("from"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_set_from, gensym("set_from"), A_GIMME, 0);
+ class_addmethod(list2send_class, (t_method)list2send_clear, gensym("clear"), 0);
+ class_sethelpsymbol(list2send_class, gensym("iemhelp/help-list2send"));
+}
diff --git a/src/iemlib2/makefile b/src/iemlib2/makefile
new file mode 100644
index 0000000..d44bf58
--- /dev/null
+++ b/src/iemlib2/makefile
@@ -0,0 +1,82 @@
+current: all
+
+.SUFFIXES: .pd_linux
+
+INCLUDE = -I. -I/usr/local/src/pd/src
+
+LDFLAGS = -export-dynamic -shared
+LIB = -ldl -lm -lpthread
+
+#select either the DBG and OPT compiler flags below:
+
+CFLAGS = -DPD -DUNIX -Wall -W -Werror -Wno-unused \
+ -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer \
+ -DDL_OPEN
+
+SYSTEM = $(shell uname -m)
+
+# the sources
+
+SRC = add2_comma.c \
+ bpe.c \
+ dollarg.c \
+ exp_inc.c \
+ float24.c \
+ iem_anything_kernel.c \
+ iem_append_kernel.c \
+ iem_i_route.c \
+ iem_pbank_csv.c \
+ iem_prepend_kernel.c \
+ iem_receive_kernel.c \
+ iem_route.c \
+ iem_sel_any.c \
+ iem_send_kernel.c \
+ init.c \
+ list2send.c \
+ mergefilename.c \
+ modulo_counter.c \
+ post_netreceive.c \
+ pre_inlet.c \
+ prepend_ascii.c \
+ round_zero.c \
+ sigfade.c \
+ sigiem_blocksize.c \
+ sigiem_samplerate.c \
+ sigLFO_noise.c \
+ sigm2f.c \
+ speedlim.c \
+ splitfilename.c \
+ stripfilename.c \
+ toggle_mess.c \
+ transf_fader.c \
+ unsymbol.c \
+ wrap.c \
+ iemlib2.c
+
+TARGET = iemlib2.pd_linux
+
+
+OBJ = $(SRC:.c=.o)
+
+#
+# ------------------ targets ------------------------------------
+#
+
+clean:
+ rm ../../lib/$(TARGET)
+ rm *.o
+
+all: $(OBJ)
+ @echo :: $(OBJ)
+ ld $(LDFLAGS) -o $(TARGET) *.o $(LIB)
+ strip --strip-unneeded $(TARGET)
+ mv $(TARGET) ../../lib
+ rm *.o
+
+$(OBJ) : %.o : %.c
+ touch $*.c
+ cc $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c
+
+
+
+
diff --git a/src/iemlib2/makefile_win b/src/iemlib2/makefile_win
new file mode 100644
index 0000000..21e5678
--- /dev/null
+++ b/src/iemlib2/makefile_win
@@ -0,0 +1,71 @@
+
+all: ..\..\lib\iemlib2.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+ $(VIS_CPP_PATH)\lib\libc.lib \
+ $(VIS_CPP_PATH)\lib\oldnames.lib \
+ $(VIS_CPP_PATH)\lib\kernel32.lib \
+ $(VIS_CPP_PATH)\lib\wsock32.lib \
+ $(VIS_CPP_PATH)\lib\winmm.lib \
+ $(PD_INST_PATH)\bin\pthreadVC.lib \
+ $(PD_INST_PATH)\bin\pd.lib
+
+
+SRC = add2_comma.c \
+ bpe.c \
+ dollarg.c \
+ exp_inc.c \
+ float24.c \
+ iem_anything_kernel.c \
+ iem_append_kernel.c \
+ iem_i_route.c \
+ iem_pbank_csv.c \
+ iem_prepend_kernel.c \
+ iem_receive_kernel.c \
+ iem_route.c \
+ iem_sel_any.c \
+ iem_send_kernel.c \
+ init.c \
+ list2send.c \
+ mergefilename.c \
+ modulo_counter.c \
+ post_netreceive.c \
+ pre_inlet.c \
+ prepend_ascii.c \
+ round_zero.c \
+ sigfade.c \
+ sigiem_blocksize.c \
+ sigiem_samplerate.c \
+ sigLFO_noise.c \
+ sigm2f.c \
+ speedlim.c \
+ splitfilename.c \
+ stripfilename.c \
+ toggle_mess.c \
+ transf_fader.c \
+ unsymbol.c \
+ wrap.c \
+ iemlib2.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+ cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\..\lib\iemlib2.dll: $(OBJ)
+ link $(PD_WIN_L_FLAGS) /dll /export:iemlib2_setup \
+ /out:..\..\lib\iemlib2.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+ del *.obj
diff --git a/src/iemlib2/mergefilename.c b/src/iemlib2/mergefilename.c
new file mode 100644
index 0000000..7fe134b
--- /dev/null
+++ b/src/iemlib2/mergefilename.c
@@ -0,0 +1,229 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- mergefilename ------------------------------ */
+
+static t_class *mergefilename_class;
+
+typedef struct _mergefilename
+{
+ t_object x_obj;
+ char x_sep[2];
+} t_mergefilename;
+
+static void mergefilename_separator(t_mergefilename *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(ac > 0)
+ {
+ if(IS_A_SYMBOL(av, 0))
+ {
+ if(strlen(av->a_w.w_symbol->s_name) == 1)
+ x->x_sep[0] = av->a_w.w_symbol->s_name[0];
+ else if(!strcmp(av->a_w.w_symbol->s_name, "backslash"))
+ x->x_sep[0] = '\\';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "slash"))
+ x->x_sep[0] = '/';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "blank"))
+ x->x_sep[0] = ' ';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "space"))
+ x->x_sep[0] = ' ';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "dollar"))
+ x->x_sep[0] = '$';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "comma"))
+ x->x_sep[0] = ',';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "semi"))
+ x->x_sep[0] = ';';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "leftbrace"))
+ x->x_sep[0] = '{';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "rightbrace"))
+ x->x_sep[0] = '}';
+ else
+ x->x_sep[0] = 0;
+ }
+ else if(IS_A_FLOAT(av, 0))
+ {
+ int i;
+ float f=fabs(av->a_w.w_float);
+
+ while(f >= 10.0)
+ f *= 0.1;
+ i = (int)f;
+ x->x_sep[0] = (char)i + '0';
+ }
+ }
+ else
+ x->x_sep[0] = 0;
+}
+
+static void mergefilename_float(t_mergefilename *x, t_floatarg f)
+{
+ char fbuf[30];
+
+ fbuf[0] = 0;
+ sprintf(fbuf, "%g", f);
+ outlet_symbol(x->x_obj.ob_outlet, gensym(fbuf));
+}
+
+static void mergefilename_symbol(t_mergefilename *x, t_symbol *s)
+{
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void mergefilename_list(t_mergefilename *x, t_symbol *s, int ac, t_atom *av)
+{
+ char *cbeg, fbuf[30];
+ int size=400, i, len, cursize=0;
+
+ cbeg = (char *)getbytes(size * sizeof(char));
+ cbeg[0] = 0;
+ if(ac > 0)
+ {
+ if(IS_A_SYMBOL(av, 0))
+ {
+ len = strlen(av->a_w.w_symbol->s_name);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, av->a_w.w_symbol->s_name);
+ cursize += len;
+ }
+ else if(IS_A_FLOAT(av, 0))
+ {
+ sprintf(fbuf, "%g", av->a_w.w_float);
+ len = strlen(fbuf);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, fbuf);
+ cursize += len;
+ }
+ }
+
+ if(ac > 1)
+ {
+ for(i=1; i<ac; i++)
+ {
+ av++;
+ strcat(cbeg, x->x_sep);
+ if(IS_A_SYMBOL(av, 0))
+ {
+ len = strlen(av->a_w.w_symbol->s_name);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, av->a_w.w_symbol->s_name);
+ cursize += len;
+ }
+ else if(IS_A_FLOAT(av, 0))
+ {
+ sprintf(fbuf, "%g", av->a_w.w_float);
+ len = strlen(fbuf);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, fbuf);
+ cursize += len;
+ }
+ }
+ }
+ outlet_symbol(x->x_obj.ob_outlet, gensym(cbeg));
+ freebytes(cbeg, size * sizeof(char));
+}
+
+static void mergefilename_anything(t_mergefilename *x, t_symbol *s, int ac, t_atom *av)
+{
+ char *cbeg, fbuf[30];
+ int size=400, i, len, cursize=0;
+
+ cbeg = (char *)getbytes(size * sizeof(char));
+ cbeg[0] = 0;
+ len = strlen(s->s_name);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, s->s_name);
+ cursize += len;
+ if(ac > 0)
+ {
+ for(i=0; i<ac; i++)
+ {
+ strcat(cbeg, x->x_sep);
+ if(IS_A_SYMBOL(av, 0))
+ {
+ len = strlen(av->a_w.w_symbol->s_name);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, av->a_w.w_symbol->s_name);
+ cursize += len;
+ }
+ else if(IS_A_FLOAT(av, 0))
+ {
+ sprintf(fbuf, "%g", av->a_w.w_float);
+ len = strlen(fbuf);
+ if((len + cursize) >= (size-1))
+ {
+ cbeg = (char *)resizebytes(cbeg, size*sizeof(char), 2*(len + cursize)*sizeof(char));
+ size = 2*(len + cursize);
+ }
+ strcat(cbeg, fbuf);
+ cursize += len;
+ }
+ av++;
+ }
+ }
+ outlet_symbol(x->x_obj.ob_outlet, gensym(cbeg));
+ freebytes(cbeg, size * sizeof(char));
+}
+
+static void *mergefilename_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_mergefilename *x = (t_mergefilename *)pd_new(mergefilename_class);
+
+ x->x_sep[0] = 0;
+ x->x_sep[1] = 0;
+ if(ac > 0)
+ mergefilename_separator(x, s, ac, av);
+ outlet_new(&x->x_obj, &s_symbol);
+ return (x);
+}
+
+void mergefilename_setup(void)
+{
+ mergefilename_class = class_new(gensym("mergefilename"), (t_newmethod)mergefilename_new,
+ 0, sizeof(t_mergefilename), 0, A_GIMME, 0);
+ class_addmethod(mergefilename_class, (t_method)mergefilename_separator, gensym("separator"), A_GIMME, 0);
+ class_addmethod(mergefilename_class, (t_method)mergefilename_separator, gensym("sep"), A_GIMME, 0);
+ class_addfloat(mergefilename_class, mergefilename_float);
+ class_addsymbol(mergefilename_class, mergefilename_symbol);
+ class_addlist(mergefilename_class, mergefilename_list);
+ class_addanything(mergefilename_class, mergefilename_anything);
+ class_sethelpsymbol(mergefilename_class, gensym("iemhelp/help-mergefilename"));
+}
diff --git a/src/iemlib2/modulo_counter.c b/src/iemlib2/modulo_counter.c
new file mode 100644
index 0000000..3c072e2
--- /dev/null
+++ b/src/iemlib2/modulo_counter.c
@@ -0,0 +1,90 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ---------------- modulo-counter. ----------------- */
+
+static t_class *modulo_counter_class;
+
+typedef struct _modulo_counter
+{
+ t_object x_obj;
+ int x_max;
+ int x_cur;
+} t_modulo_counter;
+
+static void modulo_counter_bang(t_modulo_counter *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_cur++);
+ x->x_cur = x->x_cur % x->x_max;
+}
+
+static void modulo_counter_float(t_modulo_counter *x, t_float max)
+{
+ int i = (int)max;
+
+ if(i < 1)
+ i = 1;
+ if(x->x_cur >= i)
+ x->x_cur = i - 1;
+ x->x_max = i;
+}
+
+static void modulo_counter_ft1(t_modulo_counter *x, t_float set_init)
+{
+ int i = (int)set_init;
+
+ if(i < 0)
+ i = 0;
+ if(i >= x->x_max)
+ i = x->x_max - 1;
+ x->x_cur = i;
+}
+
+static void *modulo_counter_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_modulo_counter *x = (t_modulo_counter *)pd_new(modulo_counter_class);
+ int max = 1, cur = 0;
+
+ if((ac > 0) && IS_A_FLOAT(av, 0))
+ max = atom_getintarg(0, ac, av);
+ if((ac > 1) && IS_A_FLOAT(av, 1))
+ cur = atom_getintarg(1, ac, av);
+ if(max < 1)
+ x->x_max = 1;
+ else
+ x->x_max = max;
+ if(cur < 0)
+ cur = 0;
+ if(cur >= x->x_max)
+ cur = x->x_max - 1;
+ x->x_cur = cur;
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ return (x);
+}
+
+void modulo_counter_setup(void)
+{
+ modulo_counter_class = class_new(gensym("modulo_counter"),
+ (t_newmethod)modulo_counter_new, 0,
+ sizeof(t_modulo_counter), 0, A_GIMME, 0);
+ class_addbang(modulo_counter_class, (t_method)modulo_counter_bang);
+ class_addfloat(modulo_counter_class, (t_method)modulo_counter_float);
+ class_addmethod(modulo_counter_class, (t_method)modulo_counter_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_sethelpsymbol(modulo_counter_class, gensym("iemhelp/help-modulo_counter"));
+}
diff --git a/src/iemlib2/post_netreceive.c b/src/iemlib2/post_netreceive.c
new file mode 100644
index 0000000..1d42c3d
--- /dev/null
+++ b/src/iemlib2/post_netreceive.c
@@ -0,0 +1,243 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ post_netreceive ---------------------------- */
+static t_class *post_netreceive_class;
+
+typedef struct _post_netreceive
+{
+ t_object x_obj;
+ int x_max_send_entries;
+ int x_min_send_entries;
+ char *x_snd_able;
+ t_symbol **x_send_entries;
+ t_symbol **x_plus_entries;
+ t_symbol *x_set;
+ t_atom x_at[2];
+ t_atom *x_atbuf;
+ t_symbol *x_send;
+ t_symbol *x_setall;
+} t_post_netreceive;
+
+static void post_netreceive_list(t_post_netreceive *x, t_symbol *s, int ac, t_atom *av)
+{
+ int identifier_index = (int)atom_getintarg(0, ac, av);
+ t_symbol *sender=0;
+
+ if((identifier_index >= x->x_min_send_entries) && (identifier_index < x->x_max_send_entries))
+ {
+ if(x->x_snd_able[identifier_index] == 1)
+ {
+ sender = x->x_send_entries[identifier_index];
+ if(sender->s_thing)
+ {
+ if(ac == 2)
+ pd_float(sender->s_thing, atom_getfloatarg(1, ac, av));
+ else
+ pd_list(sender->s_thing, &s_list, ac-1, av+1);
+ }
+ }
+ else if(x->x_snd_able[identifier_index] == 2)
+ {
+ sender = x->x_send_entries[identifier_index];
+ if(sender->s_thing)
+ {
+ typedmess(sender->s_thing, x->x_plus_entries[identifier_index], ac-1, av+1);
+ }
+ }
+ if(IS_A_FLOAT(av,1))
+ SETFLOAT(x->x_atbuf+identifier_index+1, atom_getfloatarg(1, ac, av));
+ else if(IS_A_SYMBOL(av,1))
+ SETSYMBOL(x->x_atbuf+identifier_index+1, atom_getsymbolarg(1, ac, av));
+ }
+}
+
+/*static void post_netreceive_set_item_name(t_post_netreceive *x, t_symbol *snd, t_float findex)
+{
+ int index = (int)findex;
+
+ if((index >= 0) && (index < x->x_max_send_entries))
+ {
+ x->x_send_entries[index] = snd;
+ x->x_snd_able[index] = 1;
+ }
+}*/
+
+static void post_netreceive_set_item_name(t_post_netreceive *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(ac == 2)
+ {
+ int identifier_index = (int)atom_getintarg(1, ac, av);
+
+ if((identifier_index >= x->x_min_send_entries) && (identifier_index < x->x_max_send_entries))
+ {
+ x->x_send_entries[identifier_index] = atom_getsymbolarg(0, ac, av);
+ x->x_snd_able[identifier_index] = 1;
+ }
+ }
+ else if(ac >= 3)
+ {
+ int identifier_index = (int)atom_getintarg(2, ac, av);
+
+ if((identifier_index >= 0) && (identifier_index < x->x_max_send_entries))
+ {
+ x->x_send_entries[identifier_index] = atom_getsymbolarg(1, ac, av);
+ x->x_snd_able[identifier_index] = 2;
+ x->x_plus_entries[identifier_index] = atom_getsymbolarg(0, ac, av);
+ }
+ }
+}
+
+static void post_netreceive_all_parameters(t_post_netreceive *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, min = x->x_min_send_entries, max = x->x_max_send_entries;
+ t_symbol *sendname=0;
+
+ if(min > ac)
+ min = ac;
+ if(max > ac)
+ max = ac;
+ for(i=min; i<max; i++)
+ {
+ if(x->x_snd_able[i] == 1)
+ {
+ sendname = x->x_send_entries[i];
+ if(sendname->s_thing)
+ {
+ pd_float(sendname->s_thing, atom_getfloatarg(i, ac, av));
+ }
+ }
+ else if(x->x_snd_able[i] == 2)
+ {
+ sendname = x->x_send_entries[i];
+ if(sendname->s_thing)
+ {
+ typedmess(sendname->s_thing, x->x_plus_entries[i], 1, av+i);
+ }
+ }
+ if(IS_A_FLOAT(av,i))
+ SETFLOAT(x->x_atbuf+i+1, atom_getfloatarg(i, ac, av));
+ else if(IS_A_SYMBOL(av,i))
+ SETSYMBOL(x->x_atbuf+i+1, atom_getsymbolarg(i, ac, av));
+ }
+}
+
+static void post_netreceive_set_all_parameters(t_post_netreceive *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i, min = x->x_min_send_entries, max = x->x_max_send_entries;
+ t_symbol *sendname;
+
+ if(min > ac)
+ min = ac;
+ if(max > ac)
+ max = ac;
+ for(i=min; i<max; i++)
+ {
+ if(x->x_snd_able[i])
+ {
+ sendname = x->x_send_entries[i];
+ if(sendname->s_thing)
+ {
+ typedmess(sendname->s_thing, x->x_set, 1, av+i);
+ }
+ }
+ }
+}
+
+static void post_netreceive_clear(t_post_netreceive *x)
+{
+ int i, max = x->x_max_send_entries;
+
+ for(i=0; i<max; i++)
+ {
+ if(x->x_snd_able[i])
+ {
+ x->x_snd_able[i] = 0;
+ }
+ }
+}
+
+static void post_netreceive_fetch_all_parameters(t_post_netreceive *x, t_float nr_sended_para)
+{
+ int nrsp=(int)nr_sended_para;
+ t_atom *ap=x->x_atbuf+x->x_min_send_entries;
+
+ if(nrsp <= 0)
+ nrsp = 1;
+ if(nrsp > (x->x_max_send_entries - x->x_min_send_entries))
+ nrsp = (x->x_max_send_entries - x->x_min_send_entries);
+ outlet_anything(x->x_obj.ob_outlet, x->x_send, nrsp+1, x->x_atbuf);
+}
+
+static void post_netreceive_free(t_post_netreceive *x)
+{
+ freebytes(x->x_snd_able, x->x_max_send_entries * sizeof(char));
+ freebytes(x->x_send_entries, x->x_max_send_entries * sizeof(t_symbol *));
+ freebytes(x->x_atbuf, (x->x_max_send_entries+2) * sizeof(t_atom));
+ freebytes(x->x_plus_entries, x->x_max_send_entries * sizeof(t_symbol *));
+}
+
+static void *post_netreceive_new(t_float fmin, t_float fmax)
+{
+ t_post_netreceive *x = (t_post_netreceive *)pd_new(post_netreceive_class);
+ int i, min = (int)fmin, max = (int)fmax;
+ t_atom *ap;
+
+ if(min < 0)
+ min = 0;
+ if(max <= 0)
+ max = 80;
+ x->x_min_send_entries = min;
+ x->x_max_send_entries = max;
+ x->x_atbuf = (t_atom *)getbytes((x->x_max_send_entries+2) * sizeof(t_atom));
+ x->x_snd_able = (char *)getbytes(x->x_max_send_entries * sizeof(char));
+ x->x_send_entries = (t_symbol **)getbytes(x->x_max_send_entries * sizeof(t_symbol *));
+ x->x_plus_entries = (t_symbol **)getbytes(x->x_max_send_entries * sizeof(t_symbol *));
+ x->x_set = gensym("set");
+ x->x_setall = gensym("set_all_parameters");
+ x->x_send = gensym("send");
+ ap = x->x_atbuf;
+ SETSYMBOL(ap, x->x_setall);
+ ap++;
+ for(i=1; i<=max; i++)
+ {
+ SETFLOAT(ap, 0.0);
+ ap++;
+ }
+ for(i=0; i<max; i++)
+ {
+ x->x_snd_able[i] = 0;
+ x->x_plus_entries[i] = x->x_set;
+ }
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void post_netreceive_setup(void)
+{
+ post_netreceive_class = class_new(gensym("post_netreceive"), (t_newmethod)post_netreceive_new,
+ (t_method)post_netreceive_free, sizeof(t_post_netreceive), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addlist(post_netreceive_class, post_netreceive_list);
+ class_addmethod(post_netreceive_class, (t_method)post_netreceive_set_item_name, gensym("set_item_name"), A_GIMME, 0);
+ class_addmethod(post_netreceive_class, (t_method)post_netreceive_all_parameters, gensym("all_parameters"), A_GIMME, 0);
+ class_addmethod(post_netreceive_class, (t_method)post_netreceive_set_all_parameters, gensym("set_all_parameters"), A_GIMME, 0);
+ class_addmethod(post_netreceive_class, (t_method)post_netreceive_fetch_all_parameters, gensym("fetch_all_parameters"), A_DEFFLOAT, 0);
+ class_addmethod(post_netreceive_class, (t_method)post_netreceive_clear, gensym("clear"), 0);
+ class_sethelpsymbol(post_netreceive_class, gensym("iemhelp/help-post_netreceive"));
+}
+
diff --git a/src/iemlib2/pre_inlet.c b/src/iemlib2/pre_inlet.c
new file mode 100644
index 0000000..dd0b440
--- /dev/null
+++ b/src/iemlib2/pre_inlet.c
@@ -0,0 +1,94 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ pre_inlet ---------------------------- */
+static t_class *pre_inlet_class;
+
+typedef struct _pre_inlet
+{
+ t_object x_obj;
+ t_atom x_at;
+ t_symbol *x_sym;
+} t_pre_inlet;
+
+static void pre_inlet_bang(t_pre_inlet *x)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void pre_inlet_float(t_pre_inlet *x, t_float f)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_float(x->x_obj.ob_outlet, f);
+}
+
+static void pre_inlet_symbol(t_pre_inlet *x, t_symbol *s)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void pre_inlet_pointer(t_pre_inlet *x, t_gpointer *gp)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}
+
+static void pre_inlet_list(t_pre_inlet *x, t_symbol *s, int ac, t_atom *av)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_list(x->x_obj.ob_outlet, s, ac, av);
+}
+
+static void pre_inlet_anything(t_pre_inlet *x, t_symbol *s, int ac, t_atom *av)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, 1, &x->x_at);
+ outlet_anything(x->x_obj.ob_outlet, s, ac, av);
+}
+
+static void pre_inlet_free(t_pre_inlet *x)
+{
+}
+
+static void *pre_inlet_new(t_floatarg fsym, t_floatarg finlet)
+{
+ t_pre_inlet *x = (t_pre_inlet *)pd_new(pre_inlet_class);
+ char str[2];
+
+ SETFLOAT(&x->x_at, finlet);
+ str[0] = (char)((int)(fsym)&0xff);
+ str[1] = 0;
+ x->x_sym = gensym(str);
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void pre_inlet_setup(void)
+{
+ pre_inlet_class = class_new(gensym("pre_inlet"), (t_newmethod)pre_inlet_new,
+ (t_method)pre_inlet_free, sizeof(t_pre_inlet), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addbang(pre_inlet_class, (t_method)pre_inlet_bang);
+ class_addfloat(pre_inlet_class, (t_method)pre_inlet_float);
+ class_addsymbol(pre_inlet_class, pre_inlet_symbol);
+ class_addpointer(pre_inlet_class, pre_inlet_pointer);
+ class_addlist(pre_inlet_class, pre_inlet_list);
+ class_addanything(pre_inlet_class, pre_inlet_anything);
+ class_sethelpsymbol(pre_inlet_class, gensym("iemhelp/help-pre_inlet"));
+}
+
diff --git a/src/iemlib2/prepend_ascii.c b/src/iemlib2/prepend_ascii.c
new file mode 100644
index 0000000..7541ff9
--- /dev/null
+++ b/src/iemlib2/prepend_ascii.c
@@ -0,0 +1,127 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ prepend_ascii ---------------------------- */
+static t_class *prepend_ascii_class;
+
+typedef struct _prepend_ascii
+{
+ t_object x_obj;
+ t_atom *x_at;
+ int x_size;
+ int x_ac;
+ t_symbol *x_sym;
+} t_prepend_ascii;
+
+static void prepend_ascii_atcopy(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void prepend_ascii_bang(t_prepend_ascii *x)
+{
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac, x->x_at);
+}
+
+static void prepend_ascii_float(t_prepend_ascii *x, t_float f)
+{
+ SETFLOAT(x->x_at+x->x_ac, f);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+}
+
+static void prepend_ascii_symbol(t_prepend_ascii *x, t_symbol *s)
+{
+ SETSYMBOL(x->x_at+x->x_ac, s);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+}
+
+static void prepend_ascii_pointer(t_prepend_ascii *x, t_gpointer *gp)
+{
+ SETPOINTER(x->x_at+x->x_ac, gp);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, x->x_ac+1, x->x_at);
+}
+
+static void prepend_ascii_list(t_prepend_ascii *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac+x->x_ac) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), (ac+x->x_ac)*sizeof(t_atom));
+ x->x_size = (ac+x->x_ac);
+ }
+ prepend_ascii_atcopy(av, x->x_at+x->x_ac, ac);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, ac+x->x_ac, x->x_at);
+}
+
+static void prepend_ascii_anything(t_prepend_ascii *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac+x->x_ac+1) > x->x_size)
+ {
+ x->x_at = (t_atom *)resizebytes(x->x_at, x->x_size*sizeof(t_atom), (ac+x->x_ac+1)*sizeof(t_atom));
+ x->x_size = (ac+x->x_ac+1);
+ }
+ SETSYMBOL(x->x_at+x->x_ac, s);
+ prepend_ascii_atcopy(av, x->x_at+x->x_ac+1, ac);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym, ac+x->x_ac+1, x->x_at);
+}
+
+static void prepend_ascii_free(t_prepend_ascii *x)
+{
+ if(x->x_at)
+ freebytes(x->x_at, x->x_size * sizeof(t_atom));
+}
+
+static void *prepend_ascii_new(t_symbol *s, int ac, t_atom *av)
+{
+ if((ac <= 0) || (!IS_A_FLOAT(av,0)))
+ {
+ post("ERROR: prepend_ascii need a float between 1 and 255 as 1. arg. !!!");
+ return(0);
+ }
+ else
+ {
+ t_prepend_ascii *x = (t_prepend_ascii *)pd_new(prepend_ascii_class);
+ char str[2];
+ int i;
+
+ x->x_size = 10 + ac;
+ x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
+ str[0] = (char)((int)(atom_getfloatarg(0,ac,av))&0xff);
+ str[1] = 0;
+ x->x_sym = gensym(str);
+ x->x_ac = ac - 1;
+ for(i=1; i<ac; i++)
+ x->x_at[i-1] = av[i];
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+ }
+}
+
+void prepend_ascii_setup(void)
+{
+ prepend_ascii_class = class_new(gensym("prepend_ascii"), (t_newmethod)prepend_ascii_new,
+ (t_method)prepend_ascii_free, sizeof(t_prepend_ascii), 0, A_GIMME, 0);
+ class_addbang(prepend_ascii_class, (t_method)prepend_ascii_bang);
+ class_addfloat(prepend_ascii_class, (t_method)prepend_ascii_float);
+ class_addsymbol(prepend_ascii_class, prepend_ascii_symbol);
+ class_addpointer(prepend_ascii_class, prepend_ascii_pointer);
+ class_addlist(prepend_ascii_class, prepend_ascii_list);
+ class_addanything(prepend_ascii_class, prepend_ascii_anything);
+ class_sethelpsymbol(prepend_ascii_class, gensym("iemhelp/help-prepend_ascii"));
+}
+
diff --git a/src/iemlib2/prepend_kernel.c b/src/iemlib2/prepend_kernel.c
new file mode 100644
index 0000000..d66c7be
--- /dev/null
+++ b/src/iemlib2/prepend_kernel.c
@@ -0,0 +1,351 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+
+/* ------------------------ prepend_kernel ---------------------------- */
+static t_class *prepend_kernel_class;
+
+typedef struct _prepend_kernel
+{
+ t_object x_obj;
+ int x_inlet_select;
+ int x_size12;
+ int x_size2;
+ int x_ac1;
+ int x_ac2;
+ t_atom *x_at12;
+ t_atom *x_at2;
+ t_symbol *x_sym1;
+ t_symbol *x_sym2;
+ t_atomtype x_type1;
+ t_atomtype x_type2;
+} t_prepend_kernel;
+
+static void prepend_kernel_atcopy(t_atom *src, t_atom *dst, int n)
+{
+ while(n--)
+ *dst++ = *src++;
+}
+
+static void prepend_kernel_merge(t_prepend_kernel *x, int off)
+{
+ if((x->x_ac1+x->x_ac2) > x->x_size1)
+ {
+ x->x_at1 = (t_atom *)resizebytes(x->x_at1, x->x_size1*sizeof(t_atom), 2*(x->x_ac1+x->x_ac2)*sizeof(t_atom));
+ x->x_size1 = 2*(x->x_ac1+x->x_ac2);
+ }
+ if(off)
+ SETSYMBOL(x->x_at1 + x->x_ac1, x->x_sym2);
+ prepend_kernel_atcopy(x->x_at2, x->x_at1 + x->x_ac1 + off, x->x_ac2);
+}
+
+static void prepend_kernel_out(t_prepend_kernel *x)
+{
+ int off=0;
+
+ if(x->x_type1 == A_GIMME)
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ prepend_kernel_merge(x, off);
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac1+x->x_ac2+off, x->x_at1);
+ }
+ else if(x->x_type1 == A_COMMA)
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ prepend_kernel_merge(x, off);
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym1, x->x_ac1+x->x_ac2+off, x->x_at1);
+ }
+ else if(x->x_type1 == A_NULL)/*depends on 2.part*/
+ {
+ prepend_kernel_merge(x, 0);
+ if(x->x_type2 == A_GIMME)
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac2, x->x_at1);
+ else if(x->x_type2 == A_COMMA)
+ outlet_anything(x->x_obj.ob_outlet, x->x_sym2, x->x_ac2, x->x_at1);
+ else if(x->x_type2 == A_FLOAT)
+ outlet_float(x->x_obj.ob_outlet, atom_getfloat(x->x_at1));
+ else if(x->x_type2 == A_SYMBOL)
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbol(x->x_at1));
+ else if(x->x_type2 == A_NULL)
+ outlet_bang(x->x_obj.ob_outlet);
+ else if(x->x_type2 == A_POINTER)
+ outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at1->a_w.w_gpointer);
+ }
+ else
+ {
+ if(x->x_type2 == A_COMMA)
+ off = 1;
+ else
+ off = 0;
+ prepend_kernel_merge(x, off);
+ if(x->x_type2 == A_NULL)
+ {
+ if(x->x_type1 == A_FLOAT)
+ outlet_float(x->x_obj.ob_outlet, atom_getfloat(x->x_at1));
+ else if(x->x_type1 == A_SYMBOL)
+ outlet_symbol(x->x_obj.ob_outlet, atom_getsymbol(x->x_at1));
+ else if(x->x_type1 == A_POINTER)
+ outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at1->a_w.w_gpointer);
+ }
+ else
+ outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac1+x->x_ac2+off, x->x_at1);
+ }
+}
+
+static void prepend_kernel_inlet_select(t_prepend_kernel *x, t_floatarg fin_sel_01)
+{
+ x->x_inlet_select = (int)fin_sel_01;
+}
+
+static void prepend_kernel_bang(t_prepend_kernel *x)
+{
+ if(!x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 0;
+ x->x_type2 = A_NULL;
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 0;
+ x->x_type1 = A_NULL;
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_float(t_prepend_kernel *x, t_float f)
+{
+ if(!x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_FLOAT;
+ SETFLOAT(x->x_at2, f);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_FLOAT;
+ SETFLOAT(x->x_at1, f);
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_symbol(t_prepend_kernel *x, t_symbol *s)
+{
+ if(!x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_SYMBOL;
+ SETSYMBOL(x->x_at2, s);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_SYMBOL;
+ SETSYMBOL(x->x_at12, s);
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_pointer(t_prepend_kernel *x, t_gpointer *gp)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ x->x_ac2 = 1;
+ x->x_type2 = A_POINTER;
+ SETPOINTER(x->x_at2, gp);
+ x->x_sym2 = &s_list;
+ }
+ else /* if 1st inlet */
+ {
+ x->x_ac1 = 1;
+ x->x_type1 = A_POINTER;
+ SETPOINTER(x->x_at12, gp);
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_list(t_prepend_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if(ac > x->x_size2)
+ {
+ x->x_at2 = (t_atom *)resizebytes(x->x_at2, x->x_size2*sizeof(t_atom), 2*ac*sizeof(t_atom));
+ x->x_size2 = 2*ac;
+ }
+ x->x_ac2 = ac;
+ x->x_type2 = A_GIMME;
+ x->x_sym2 = &s_list;
+ prepend_kernel_atcopy(av, x->x_at2, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((x->x_ac1+ac) > x->x_size12)
+ {
+ x->x_at12 = (t_atom *)resizebytes(x->x_at12, x->x_size12*sizeof(t_atom), 2*(x->x_ac1+ac)*sizeof(t_atom));
+ x->x_size12 = 2*(x->x_ac1+ac);
+ }
+ x->x_ac1 = ac;
+ x->x_type1 = A_GIMME;
+ prepend_kernel_atcopy(av, x->x_at12, ac);
+ x->x_sym1 = &s_list;
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_anything(t_prepend_kernel *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(x->x_inlet_select) /* if 2nd inlet */
+ {
+ if((ac+1) > x->x_size2)
+ {
+ x->x_at2 = (t_atom *)resizebytes(x->x_at2, x->x_size2*sizeof(t_atom), 2*ac*sizeof(t_atom));
+ x->x_size2 = 2*ac;
+ }
+ SETSYMBOL(x->x_at2, s);
+ x->x_ac2 = ac;
+ x->x_type2 = A_COMMA;
+ x->x_sym2 = s;
+ prepend_kernel_atcopy(av, x->x_at2, ac);
+ }
+ else /* if 1st inlet */
+ {
+ if((x->x_ac1+ac) > x->x_size12)
+ {
+ x->x_at12 = (t_atom *)resizebytes(x->x_at12, x->x_size12*sizeof(t_atom), (2*x->x_ac1+ac)*sizeof(t_atom));
+ x->x_size12 = (2*x->x_ac1+ac);
+ }
+ x->x_ac1 = ac;
+ x->x_type1 = A_COMMA;
+ prepend_kernel_atcopy(av, x->x_at12, ac);
+ x->x_sym1 = s;
+ prepend_kernel_out(x);
+ }
+}
+
+static void prepend_kernel_free(t_prepend_kernel *x)
+{
+ if(x->x_at1)
+ freebytes(x->x_at1, x->x_size1 * sizeof(t_atom));
+}
+
+static void *prepend_kernel_new(void)
+{
+ t_prepend_kernel *x = (t_prepend_kernel *)pd_new(prepend_kernel_class);
+ t_glist *glist = (t_glist *)canvas_getcurrent();
+ t_canvas *canvas=glist_getcanvas(glist);
+ int ac=0;
+ t_atom *av;
+
+ x->x_type2 = A_NULL;
+ x->x_sym2 = &s_list;
+ x->x_ac2 = 0;
+
+ canvas_setcurrent(canvas);
+ canvas_getargs(&ac, &av);
+ canvas_unsetcurrent(canvas);
+
+ x->x_type1 = A_NULL;
+ if(!ac)
+ {
+ x->x_type1 = A_NULL;
+ x->x_sym1 = &s_bang;
+ x->x_size1 = 10;
+ x->x_ac1 = 0;
+ x->x_at1 = (t_atom *)getbytes(x->x_size1 * sizeof(t_atom));
+ }
+ else if(ac == 1)
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_type1 = A_COMMA;
+ x->x_sym1 = atom_getsymbol(av);
+ x->x_size1 = 10;
+ x->x_ac1 = 0;
+ x->x_at1 = (t_atom *)getbytes(x->x_size1 * sizeof(t_atom));
+ }
+ else
+ {
+ if(IS_A_FLOAT(av,0))
+ {
+ x->x_type1 = A_FLOAT;
+ x->x_sym1 = &s_float;
+ }
+ else if(IS_A_POINTER(av,0))
+ {
+ x->x_type1 = A_POINTER;
+ x->x_sym1 = &s_pointer;
+ }
+ x->x_size1 = 11;
+ x->x_ac1 = 1;
+ x->x_at1 = (t_atom *)getbytes(x->x_size1 * sizeof(t_atom));
+ x->x_at1[0] = *av;
+ }
+ }
+ else /* ac > 1 */
+ {
+ if(IS_A_SYMBOL(av,0))
+ {
+ x->x_type1 = A_COMMA;/*for anything*/
+ x->x_sym1 = atom_getsymbol(av++);
+ ac--;
+ }
+ else
+ {
+ x->x_type1 = A_GIMME;
+ x->x_sym1 = &s_list;
+ }
+ x->x_size1 = ac + 10;
+ x->x_ac1 = ac;
+ x->x_at1 = (t_atom *)getbytes(x->x_size1 * sizeof(t_atom));
+ prepend_kernel_atcopy(av, x->x_at1, ac);
+ }
+
+ x->x_inlet_select = 1;
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void prepend_kernel_setup(void)
+{
+ char str[2];
+
+ str[0] = 1;
+ str[1] = 0;
+ prepend_kernel_class = class_new(gensym("prepend_kernel"),
+ (t_newmethod)prepend_kernel_new, (t_method)prepend_kernel_free,
+ sizeof(t_prepend_kernel), 0, 0);
+ class_addbang(prepend_kernel_class, (t_method)prepend_kernel_bang);
+ class_addpointer(prepend_kernel_class, prepend_kernel_pointer);
+ class_addfloat(prepend_kernel_class, (t_method)prepend_kernel_float);
+ class_addsymbol(prepend_kernel_class, prepend_kernel_symbol);
+ class_addlist(prepend_kernel_class, prepend_kernel_list);
+ class_addmethod(prepend_kernel_class, (t_method)prepend_kernel_inlet_select, gensym(str), A_FLOAT, 0);
+ class_addanything(prepend_kernel_class, prepend_kernel_anything);
+ class_sethelpsymbol(prepend_kernel_class, gensym("iemhelp/help-merge_any"));
+}
+
diff --git a/src/iemlib2/round_zero.c b/src/iemlib2/round_zero.c
new file mode 100644
index 0000000..b37afb4
--- /dev/null
+++ b/src/iemlib2/round_zero.c
@@ -0,0 +1,67 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* ------------------------ round_zero ---------------------------- */
+static t_class *round_zero_class;
+
+typedef struct _round_zero
+{
+ t_object x_obj;
+ t_float x_bound;
+} t_round_zero;
+
+static void round_zero_anything(t_round_zero *x, t_symbol *s, int ac, t_atom *av)
+{
+ int i;
+ t_float f, bound=x->x_bound;
+
+ for(i=0; i<ac; i++)
+ {
+ if(IS_A_FLOAT(av, i))
+ {
+ f = atom_getfloatarg(i, ac, av);
+ if((f <= bound)&&(f >= -bound))
+ {
+ f = 0.0f;
+ SETFLOAT(av+i, f);
+ }
+ }
+ }
+ outlet_anything(x->x_obj.ob_outlet, s, ac, av);
+}
+
+static void *round_zero_new(t_floatarg bound)
+{
+ t_round_zero *x = (t_round_zero *)pd_new(round_zero_class);
+
+ if(bound < 0.0f)
+ x->x_bound = -bound;
+ else
+ x->x_bound = bound;
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void round_zero_setup(void)
+{
+ round_zero_class = class_new(gensym("round_zero"), (t_newmethod)round_zero_new,
+ 0, sizeof(t_round_zero), 0, A_DEFFLOAT, 0);
+ class_addanything(round_zero_class, round_zero_anything);
+ class_sethelpsymbol(round_zero_class, gensym("iemhelp/help-round_zero"));
+}
+
diff --git a/src/iemlib2/sigLFO_noise.c b/src/iemlib2/sigLFO_noise.c
new file mode 100644
index 0000000..3714f5a
--- /dev/null
+++ b/src/iemlib2/sigLFO_noise.c
@@ -0,0 +1,129 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ LFO_noise~ ----------------------------- */
+
+static t_class *sigLFO_noise_class;
+
+typedef struct _sigLFO_noise
+{
+ t_object x_obj;
+ double x_range;
+ double x_rcp_range;
+ unsigned int x_state;
+ float x_fact;
+ float x_incr;
+ float x_y1;
+ float x_y2;
+ float x_phase;
+} t_sigLFO_noise;
+
+static int sigLFO_noise_makeseed(void)
+{
+ static unsigned int sigLFO_noise_nextseed = 1489853723;
+
+ sigLFO_noise_nextseed = sigLFO_noise_nextseed * 435898247 + 938284287;
+ return(sigLFO_noise_nextseed & 0x7fffffff);
+}
+
+static float sigLFO_noise_new_rand(t_sigLFO_noise *x)
+{
+ unsigned int state = x->x_state;
+ double new_val, range = x->x_range;
+
+ x->x_state = state = state * 472940017 + 832416023;
+ new_val = range * ((double)state) * (1./4294967296.);
+ if(new_val >= range)
+ new_val = range-1;
+ new_val -= 32767.0;
+ return(new_val*(1.0/32767.0));
+}
+
+static void *sigLFO_noise_new(t_float freq)
+{
+ t_sigLFO_noise *x = (t_sigLFO_noise *)pd_new(sigLFO_noise_class);
+
+ x->x_range = 65535.0;
+ x->x_rcp_range = (double)x->x_range * (1.0/4294967296.0);
+ x->x_state = sigLFO_noise_makeseed();
+ x->x_fact = 2. / 44100.0;
+ x->x_incr = freq * x->x_fact;
+ if(x->x_incr < 0.0)
+ x->x_incr = 0.0;
+ else if(x->x_incr > 0.1)
+ x->x_incr = 0.1;
+ x->x_y1 = sigLFO_noise_new_rand(x);
+ x->x_y2 = sigLFO_noise_new_rand(x);
+ x->x_phase = 0.0;
+ outlet_new(&x->x_obj, gensym("signal"));
+ return (x);
+}
+
+static t_int *sigLFO_noise_perform(t_int *w)
+{
+ t_float *out = (t_float *)(w[1]);
+ t_sigLFO_noise *x = (t_sigLFO_noise *)(w[2]);
+ int n = (int)(w[3]);
+ float phase = x->x_phase;
+ float x_y1 = x->x_y1;
+ float x_y2 = x->x_y2;
+ float incr = x->x_incr;
+
+ while(n--)
+ {
+ if(phase > 1.0)
+ {
+ x_y1 = x_y2;
+ x_y2 = sigLFO_noise_new_rand(x);
+ phase -= 1.0;
+ }
+ *out++ = (x_y2 - x_y1) * phase + x_y1;
+ phase += incr;
+ }
+ x->x_phase = phase;
+ x->x_y1 = x_y1;
+ x->x_y2 = x_y2;
+ return (w+4);
+}
+
+static void sigLFO_noise_float(t_sigLFO_noise *x, t_float freq)
+{
+ x->x_incr = freq * x->x_fact;
+ if(x->x_incr < 0.0)
+ x->x_incr = 0.0;
+ else if(x->x_incr > 0.1)
+ x->x_incr = 0.1;
+}
+
+static void sigLFO_noise_dsp(t_sigLFO_noise *x, t_signal **sp)
+{
+ x->x_fact = 2. / sp[0]->s_sr;
+ dsp_add(sigLFO_noise_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
+}
+
+void sigLFO_noise_setup(void)
+{
+ sigLFO_noise_class = class_new(gensym("LFO_noise~"),
+ (t_newmethod)sigLFO_noise_new, 0,
+ sizeof(t_sigLFO_noise), 0, A_DEFFLOAT, 0);
+ class_addmethod(sigLFO_noise_class, (t_method)sigLFO_noise_dsp,
+ gensym("dsp"), 0);
+ class_addfloat(sigLFO_noise_class, (t_method)sigLFO_noise_float);
+ class_sethelpsymbol(sigLFO_noise_class, gensym("iemhelp/help-LFO_noise~"));
+}
+
diff --git a/src/iemlib2/sigfade.c b/src/iemlib2/sigfade.c
new file mode 100644
index 0000000..d63f363
--- /dev/null
+++ b/src/iemlib2/sigfade.c
@@ -0,0 +1,183 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ fade~ ----------------------------- */
+
+float *iem_fade_table_lin=(float *)0L;
+float *iem_fade_table_linsqrt=(float *)0L;
+float *iem_fade_table_sqrt=(float *)0L;
+float *iem_fade_table_sin=(float *)0L;
+float *iem_fade_table_sinhann=(float *)0L;
+float *iem_fade_table_hann=(float *)0L;
+
+static t_class *sigfade_class;
+
+typedef struct _sigfade
+{
+ t_object x_obj;
+ float *x_table;
+ float x_f;
+} t_sigfade;
+
+static void sigfade_set(t_sigfade *x, t_symbol *s)
+{
+ if(!strcmp(s->s_name, "_lin"))
+ x->x_table = iem_fade_table_lin;
+ else if(!strcmp(s->s_name, "_linsqrt"))
+ x->x_table = iem_fade_table_linsqrt;
+ else if(!strcmp(s->s_name, "_sqrt"))
+ x->x_table = iem_fade_table_sqrt;
+ else if(!strcmp(s->s_name, "_sin"))
+ x->x_table = iem_fade_table_sin;
+ else if(!strcmp(s->s_name, "_sinhann"))
+ x->x_table = iem_fade_table_sinhann;
+ else if(!strcmp(s->s_name, "_hann"))
+ x->x_table = iem_fade_table_hann;
+}
+
+static void *sigfade_new(t_symbol *s)
+{
+ t_sigfade *x = (t_sigfade *)pd_new(sigfade_class);
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_f = 0;
+ x->x_table = iem_fade_table_lin;
+ sigfade_set(x, s);
+ return (x);
+}
+
+static t_int *sigfade_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_sigfade *x = (t_sigfade *)(w[3]);
+ int n = (int)(w[4]);
+ float *tab = x->x_table, *addr, f1, f2, frac;
+ double dphase;
+ int normhipart;
+ union tabfudge tf;
+
+ tf.tf_d = UNITBIT32;
+ normhipart = tf.tf_i[HIOFFSET];
+
+#if 0 /* this is the readable version of the code. */
+ while (n--)
+ {
+ dphase = (double)(*in++ * (float)(COSTABSIZE) * 0.99999) + UNITBIT32;
+ tf.tf_d = dphase;
+ addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
+ tf.tf_i[HIOFFSET] = normhipart;
+ frac = tf.tf_d - UNITBIT32;
+ f1 = addr[0];
+ f2 = addr[1];
+ *out++ = f1 + frac * (f2 - f1);
+ }
+#endif
+#if 1 /* this is the same, unwrapped by hand. */
+ dphase = (double)(*in++ * (float)(COSTABSIZE) * 0.99999) + UNITBIT32;
+ tf.tf_d = dphase;
+ addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
+ tf.tf_i[HIOFFSET] = normhipart;
+ while (--n)
+ {
+ dphase = (double)(*in++ * (float)(COSTABSIZE) * 0.99999) + UNITBIT32;
+ frac = tf.tf_d - UNITBIT32;
+ tf.tf_d = dphase;
+ f1 = addr[0];
+ f2 = addr[1];
+ addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
+ *out++ = f1 + frac * (f2 - f1);
+ tf.tf_i[HIOFFSET] = normhipart;
+ }
+ frac = tf.tf_d - UNITBIT32;
+ f1 = addr[0];
+ f2 = addr[1];
+ *out++ = f1 + frac * (f2 - f1);
+#endif
+ return (w+5);
+}
+
+static void sigfade_dsp(t_sigfade *x, t_signal **sp)
+{
+ dsp_add(sigfade_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void sigfade_maketable(void)
+{
+ int i;
+ float *fp, phase, fff,phsinc = 0.5*3.141592653 / ((float)COSTABSIZE*0.99999);
+ union tabfudge tf;
+
+ if(!iem_fade_table_sin)
+ {
+ iem_fade_table_sin = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_sin, phase=0; i--; fp++, phase+=phsinc)
+ *fp = sin(phase);
+ }
+ if(!iem_fade_table_sinhann)
+ {
+ iem_fade_table_sinhann = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_sinhann, phase=0; i--; fp++, phase+=phsinc)
+ {
+ fff = sin(phase);
+ *fp = fff*sqrt(fff);
+ }
+ }
+ if(!iem_fade_table_hann)
+ {
+ iem_fade_table_hann = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_hann, phase=0; i--; fp++, phase+=phsinc)
+ {
+ fff = sin(phase);
+ *fp = fff*fff;
+ }
+ }
+ phsinc = 1.0 / ((float)COSTABSIZE*0.99999);
+ if(!iem_fade_table_lin)
+ {
+ iem_fade_table_lin = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_lin, phase=0; i--; fp++, phase+=phsinc)
+ *fp = phase;
+ }
+ if(!iem_fade_table_linsqrt)
+ {
+ iem_fade_table_linsqrt = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_linsqrt, phase=0; i--; fp++, phase+=phsinc)
+ *fp = pow(phase, 0.75);
+ }
+ if(!iem_fade_table_sqrt)
+ {
+ iem_fade_table_sqrt = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
+ for(i=COSTABSIZE+1, fp=iem_fade_table_sqrt, phase=0; i--; fp++, phase+=phsinc)
+ *fp = sqrt(phase);
+ }
+ tf.tf_d = UNITBIT32 + 0.5;
+ if((unsigned)tf.tf_i[LOWOFFSET] != 0x80000000)
+ bug("fade~: unexpected machine alignment");
+}
+
+void sigfade_setup(void)
+{
+ sigfade_class = class_new(gensym("fade~"), (t_newmethod)sigfade_new, 0,
+ sizeof(t_sigfade), 0, A_DEFSYM, 0);
+ CLASS_MAINSIGNALIN(sigfade_class, t_sigfade, x_f);
+ class_addmethod(sigfade_class, (t_method)sigfade_dsp, gensym("dsp"), 0);
+ class_addmethod(sigfade_class, (t_method)sigfade_set, gensym("set"), A_DEFSYM, 0);
+ class_sethelpsymbol(sigfade_class, gensym("iemhelp/help-fade~"));
+ sigfade_maketable();
+}
+
diff --git a/src/iemlib2/sigiem_blocksize.c b/src/iemlib2/sigiem_blocksize.c
new file mode 100644
index 0000000..1f8d016
--- /dev/null
+++ b/src/iemlib2/sigiem_blocksize.c
@@ -0,0 +1,61 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+
+/* ------------------------ iem_blocksize~ ----------------------------- */
+
+static t_class *sigiem_blocksize_class;
+
+typedef struct _sigiem_blocksize
+{
+ t_object x_obj;
+ t_float x_blocksize;
+ t_clock *x_clock;
+ t_float x_f;
+} t_sigiem_blocksize;
+
+static void sigiem_blocksize_out(t_sigiem_blocksize *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_blocksize);
+}
+
+static void sigiem_blocksize_free(t_sigiem_blocksize *x)
+{
+ clock_free(x->x_clock);
+}
+
+static void *sigiem_blocksize_new(t_symbol *s)
+{
+ t_sigiem_blocksize *x = (t_sigiem_blocksize *)pd_new(sigiem_blocksize_class);
+ x->x_clock = clock_new(x, (t_method)sigiem_blocksize_out);
+ outlet_new(&x->x_obj, &s_float);
+ x->x_blocksize = 64.0f;
+ x->x_f = 0.0f;
+ return (x);
+}
+
+static void sigiem_blocksize_dsp(t_sigiem_blocksize *x, t_signal **sp)
+{
+ x->x_blocksize = (t_float)(sp[0]->s_n);
+ clock_delay(x->x_clock, 0.0f);
+}
+
+void sigiem_blocksize_setup(void)
+{
+ sigiem_blocksize_class = class_new(gensym("iem_blocksize~"), (t_newmethod)sigiem_blocksize_new,
+ (t_method)sigiem_blocksize_free, sizeof(t_sigiem_blocksize), 0, 0);
+ CLASS_MAINSIGNALIN(sigiem_blocksize_class, t_sigiem_blocksize, x_f);
+ class_addmethod(sigiem_blocksize_class, (t_method)sigiem_blocksize_dsp, gensym("dsp"), 0);
+}
+
diff --git a/src/iemlib2/sigiem_samplerate.c b/src/iemlib2/sigiem_samplerate.c
new file mode 100644
index 0000000..fee7f5c
--- /dev/null
+++ b/src/iemlib2/sigiem_samplerate.c
@@ -0,0 +1,61 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+
+/* ------------------------ iem_samplerate~ ----------------------------- */
+
+static t_class *sigiem_samplerate_class;
+
+typedef struct _sigiem_samplerate
+{
+ t_object x_obj;
+ t_float x_samplerate;
+ t_clock *x_clock;
+ t_float x_f;
+} t_sigiem_samplerate;
+
+static void sigiem_samplerate_out(t_sigiem_samplerate *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_samplerate);
+}
+
+static void sigiem_samplerate_free(t_sigiem_samplerate *x)
+{
+ clock_free(x->x_clock);
+}
+
+static void *sigiem_samplerate_new(t_symbol *s)
+{
+ t_sigiem_samplerate *x = (t_sigiem_samplerate *)pd_new(sigiem_samplerate_class);
+ x->x_clock = clock_new(x, (t_method)sigiem_samplerate_out);
+ outlet_new(&x->x_obj, &s_float);
+ x->x_samplerate = 44100.0f;
+ x->x_f = 0.0f;
+ return (x);
+}
+
+static void sigiem_samplerate_dsp(t_sigiem_samplerate *x, t_signal **sp)
+{
+ x->x_samplerate = (t_float)(sp[0]->s_sr);
+ clock_delay(x->x_clock, 0.0f);
+}
+
+void sigiem_samplerate_setup(void)
+{
+ sigiem_samplerate_class = class_new(gensym("iem_samplerate~"), (t_newmethod)sigiem_samplerate_new,
+ (t_method)sigiem_samplerate_free, sizeof(t_sigiem_samplerate), 0, 0);
+ CLASS_MAINSIGNALIN(sigiem_samplerate_class, t_sigiem_samplerate, x_f);
+ class_addmethod(sigiem_samplerate_class, (t_method)sigiem_samplerate_dsp, gensym("dsp"), 0);
+}
+
diff --git a/src/iemlib2/sigm2f.c b/src/iemlib2/sigm2f.c
new file mode 100644
index 0000000..f623905
--- /dev/null
+++ b/src/iemlib2/sigm2f.c
@@ -0,0 +1,127 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ m2f~ ----------------------------- */
+
+#define M2FTABSIZE 2048
+
+float *iem_m2f_table=(float *)0L;
+
+static t_class *sigm2f_class;
+
+typedef struct _sigm2f
+{
+ t_object x_obj;
+ float x_msi;
+} t_sigm2f;
+
+static void *sigm2f_new(void)
+{
+ t_sigm2f *x = (t_sigm2f *)pd_new(sigm2f_class);
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_msi = 0;
+ return (x);
+}
+
+static t_int *sigm2f_perform(t_int *w)
+{
+ t_float *in = (t_float *)(w[1]);
+ t_float *out = (t_float *)(w[2]);
+ t_sigm2f *x = (t_sigm2f *)(w[3]);
+ int n = (int)(w[4]);
+ float *tab = iem_m2f_table, *addr, f1, f2, frac, iinn;
+ double dphase;
+ int normhipart;
+ union tabfudge tf;
+
+ tf.tf_d = UNITBIT32;
+ normhipart = tf.tf_i[HIOFFSET];
+
+#if 0 /* this is the readable version of the code. */
+ while (n--)
+ {
+ iinn = (*in++)*10.0+670.0;
+ dphase = (double)iinn + UNITBIT32;
+ tf.tf_d = dphase;
+ addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
+ tf.tf_i[HIOFFSET] = normhipart;
+ frac = tf.tf_d - UNITBIT32;
+ f1 = addr[0];
+ f2 = addr[1];
+ *out++ = f1 + frac * (f2 - f1);
+ }
+#endif
+#if 1 /* this is the same, unwrapped by hand. */
+ iinn = (*in++)*10.0+670.0;
+ dphase = (double)iinn + UNITBIT32;
+ tf.tf_d = dphase;
+ addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
+ tf.tf_i[HIOFFSET] = normhipart;
+ while (--n)
+ {
+ iinn = (*in++)*10.0+670.0;
+ dphase = (double)iinn + UNITBIT32;
+ frac = tf.tf_d - UNITBIT32;
+ tf.tf_d = dphase;
+ f1 = addr[0];
+ f2 = addr[1];
+ addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
+ *out++ = f1 + frac * (f2 - f1);
+ tf.tf_i[HIOFFSET] = normhipart;
+ }
+ frac = tf.tf_d - UNITBIT32;
+ f1 = addr[0];
+ f2 = addr[1];
+ *out++ = f1 + frac * (f2 - f1);
+#endif
+ return (w+5);
+}
+
+static void sigm2f_dsp(t_sigm2f *x, t_signal **sp)
+{
+ dsp_add(sigm2f_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
+}
+
+static void sigm2f_maketable(void)
+{
+ union tabfudge tf;
+
+ if(!iem_m2f_table)
+ {
+ int i;
+ float *fp, midi, refexp=440.0*exp(-5.75*log(2.0));
+
+ iem_m2f_table = (float *)getbytes(sizeof(float) * (M2FTABSIZE+1));
+ for(i=0, fp=iem_m2f_table, midi=-67.0; i<=M2FTABSIZE; i++, fp++, midi+=0.1)
+ *fp = refexp * exp(0.057762265047 * midi);
+ }
+ tf.tf_d = UNITBIT32 + 0.5;
+ if((unsigned)tf.tf_i[LOWOFFSET] != 0x80000000)
+ bug("m2f~: unexpected machine alignment");
+}
+
+void sigm2f_setup(void)
+{
+ sigm2f_class = class_new(gensym("m2f~"), (t_newmethod)sigm2f_new, 0,
+ sizeof(t_sigm2f), 0, 0);
+ CLASS_MAINSIGNALIN(sigm2f_class, t_sigm2f, x_msi);
+ class_addmethod(sigm2f_class, (t_method)sigm2f_dsp, gensym("dsp"), 0);
+ sigm2f_maketable();
+ class_sethelpsymbol(sigm2f_class, gensym("iemhelp/help-m2f~"));
+}
+
diff --git a/src/iemlib2/speedlim.c b/src/iemlib2/speedlim.c
new file mode 100644
index 0000000..023835a
--- /dev/null
+++ b/src/iemlib2/speedlim.c
@@ -0,0 +1,107 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ speedlim ---------------------------- */
+static t_class *speedlim_class;
+
+typedef struct _speedlim
+{
+ t_object x_obj;
+ t_clock *x_clock;
+ float x_delay;
+ int x_output_is_locked;
+ int x_there_was_n_event;
+ float x_curval;
+ float x_lastout;
+} t_speedlim;
+
+static void speedlim_stop(t_speedlim *x)
+{
+ x->x_output_is_locked = 0;
+ x->x_there_was_n_event = 0;
+ clock_unset(x->x_clock);
+}
+
+static void speedlim_tick(t_speedlim *x)
+{
+ if(x->x_there_was_n_event)
+ {
+ x->x_output_is_locked = 1;
+ x->x_there_was_n_event = 0;
+ outlet_float(x->x_obj.ob_outlet, x->x_curval);
+ clock_delay(x->x_clock, x->x_delay);
+ }
+ else
+ {
+ x->x_output_is_locked = 0;
+ x->x_there_was_n_event = 0;
+ }
+}
+
+static void speedlim_float(t_speedlim *x, t_float val)
+{
+ x->x_curval = val;
+ if(!x->x_output_is_locked)
+ {
+ x->x_output_is_locked = 1;
+ x->x_there_was_n_event = 0;
+ outlet_float(x->x_obj.ob_outlet, x->x_curval);
+ clock_delay(x->x_clock, x->x_delay);
+ }
+ else
+ x->x_there_was_n_event = 1;
+}
+
+static void speedlim_ft1(t_speedlim *x, t_float delay)
+{
+ if(delay < 0.0)
+ delay = 0.0;
+ x->x_delay = delay;
+}
+
+static void speedlim_free(t_speedlim *x)
+{
+ clock_free(x->x_clock);
+}
+
+static void *speedlim_new(t_float delay)
+{
+ t_speedlim *x = (t_speedlim *)pd_new(speedlim_class);
+
+ if(delay < 0.0)
+ delay = 0.0;
+ x->x_delay = delay;
+ x->x_curval = 0.0f;
+ x->x_output_is_locked = 0;
+ x->x_there_was_n_event = 0;
+ x->x_clock = clock_new(x, (t_method)speedlim_tick);
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ return (x);
+}
+
+void speedlim_setup(void)
+{
+ speedlim_class = class_new(gensym("speedlim"), (t_newmethod)speedlim_new,
+ (t_method)speedlim_free, sizeof(t_speedlim), 0, A_DEFFLOAT, 0);
+ class_addmethod(speedlim_class, (t_method)speedlim_stop, gensym("stop"), 0);
+ class_addfloat(speedlim_class, (t_method)speedlim_float);
+ class_addmethod(speedlim_class, (t_method)speedlim_ft1, gensym("ft1"), A_FLOAT, 0);
+ class_sethelpsymbol(speedlim_class, gensym("iemhelp/help-speedlim"));
+}
+
diff --git a/src/iemlib2/splitfilename.c b/src/iemlib2/splitfilename.c
new file mode 100644
index 0000000..485b214
--- /dev/null
+++ b/src/iemlib2/splitfilename.c
@@ -0,0 +1,142 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- splitfilename ------------------------------ */
+
+static t_class *splitfilename_class;
+
+typedef struct _splitfilename
+{
+ t_object x_obj;
+ char x_sep[2];
+ void *x_outpath;
+ void *x_outfile;
+} t_splitfilename;
+
+static void splitfilename_separator(t_splitfilename *x, t_symbol *s, int ac, t_atom *av)
+{
+ if(ac > 0)
+ {
+ if(IS_A_SYMBOL(av, 0))
+ {
+ if(strlen(av->a_w.w_symbol->s_name) == 1)
+ x->x_sep[0] = av->a_w.w_symbol->s_name[0];
+ else if(!strcmp(av->a_w.w_symbol->s_name, "backslash"))
+ x->x_sep[0] = '\\';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "slash"))
+ x->x_sep[0] = '/';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "blank"))
+ x->x_sep[0] = ' ';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "space"))
+ x->x_sep[0] = ' ';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "dollar"))
+ x->x_sep[0] = '$';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "comma"))
+ x->x_sep[0] = ',';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "semi"))
+ x->x_sep[0] = ';';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "leftbrace"))
+ x->x_sep[0] = '{';
+ else if(!strcmp(av->a_w.w_symbol->s_name, "rightbrace"))
+ x->x_sep[0] = '}';
+ else
+ x->x_sep[0] = '/';
+ }
+ else if(IS_A_FLOAT(av, 0))
+ {
+ int i;
+ float f=fabs(av->a_w.w_float);
+
+ while(f >= 10.0)
+ f *= 0.1;
+ i = (int)f;
+ x->x_sep[0] = (char)i + '0';
+ }
+ }
+ else
+ x->x_sep[0] = 0;
+}
+
+static void splitfilename_symbol(t_splitfilename *x, t_symbol *s)
+{
+ int len = strlen(s->s_name);
+
+ if(len)
+ {
+ if(x->x_sep[0] != 0)
+ {
+ char *str_path = (char *)getbytes(len*sizeof(char));
+ char *str_file = (char *)getbytes(len*sizeof(char));
+ char *cpp, *cpf;
+
+ strcpy(str_path, s->s_name);
+ strcpy(str_file, s->s_name);
+ cpp = strrchr(str_path, x->x_sep[0]);
+ cpf = strrchr(str_file, x->x_sep[0]);
+ if(((int)cpp - (int)str_path) < 0)
+ {
+ outlet_symbol(x->x_outfile, gensym(str_file));
+ outlet_symbol(x->x_outpath, &s_);
+ }
+ else if(((int)cpp - (int)str_path) >= len)
+ {
+ outlet_symbol(x->x_outfile, &s_);
+ outlet_symbol(x->x_outpath, gensym(str_path));
+ }
+ else
+ {
+ *cpp = 0;
+ cpf++;
+ outlet_symbol(x->x_outfile, gensym(cpf));
+ outlet_symbol(x->x_outpath, gensym(str_path));
+ }
+ freebytes(str_file, len*sizeof(char));
+ freebytes(str_path, len*sizeof(char));
+ }
+ else
+ {
+ outlet_symbol(x->x_outfile, &s_);
+ outlet_symbol(x->x_outpath, s);
+ }
+ }
+}
+
+static void *splitfilename_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_splitfilename *x = (t_splitfilename *)pd_new(splitfilename_class);
+
+ x->x_sep[0] = 0;
+ x->x_sep[1] = 0;
+ if(ac == 0)
+ x->x_sep[0] = '/';
+ else
+ splitfilename_separator(x, s, ac, av);
+ x->x_outpath = outlet_new(&x->x_obj, &s_symbol);
+ x->x_outfile = outlet_new(&x->x_obj, &s_symbol);
+ return (x);
+}
+
+void splitfilename_setup(void)
+{
+ splitfilename_class = class_new(gensym("splitfilename"), (t_newmethod)splitfilename_new,
+ 0, sizeof(t_splitfilename), 0, A_GIMME, 0);
+ class_addsymbol(splitfilename_class, splitfilename_symbol);
+ class_addmethod(splitfilename_class, (t_method)splitfilename_separator, gensym("separator"), A_GIMME, 0);
+ class_addmethod(splitfilename_class, (t_method)splitfilename_separator, gensym("sep"), A_GIMME, 0);
+ class_sethelpsymbol(splitfilename_class, gensym("iemhelp/help-splitfilename"));
+}
diff --git a/src/iemlib2/stripfilename.c b/src/iemlib2/stripfilename.c
new file mode 100644
index 0000000..d229086
--- /dev/null
+++ b/src/iemlib2/stripfilename.c
@@ -0,0 +1,81 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- stripfilename ------------------------------ */
+
+static t_class *stripfilename_class;
+
+typedef struct _stripfilename
+{
+ t_object x_obj;
+ int x_nr_char;
+} t_stripfilename;
+
+static void stripfilename_symbol(t_stripfilename *x, t_symbol *s)
+{
+ if(x->x_nr_char < 0)
+ {
+ int len = strlen(s->s_name);
+ char *str=(char *)getbytes((len+2)*sizeof(char));
+ int i=len + x->x_nr_char;
+
+ strcpy(str, s->s_name);
+ if(i < 0)
+ i = 0;
+ str[i] = 0;
+ outlet_symbol(x->x_obj.ob_outlet, gensym(str));
+ freebytes(str, (len+2)*sizeof(char));
+ }
+ else if(x->x_nr_char > 0)
+ {
+ int len = strlen(s->s_name);
+ char *str=(char *)getbytes((len+2)*sizeof(char));
+ int i=x->x_nr_char;
+
+ strcpy(str, s->s_name);
+ if(i > len)
+ i = len;
+ outlet_symbol(x->x_obj.ob_outlet, gensym(str+i));
+ freebytes(str, (len+2)*sizeof(char));
+ }
+ else
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void stripfilename_set(t_stripfilename *x, t_floatarg nr_char)
+{
+ x->x_nr_char = (int)nr_char;
+}
+
+static void *stripfilename_new(t_floatarg nr_char)
+{
+ t_stripfilename *x = (t_stripfilename *)pd_new(stripfilename_class);
+
+ stripfilename_set(x, nr_char);
+ outlet_new(&x->x_obj, &s_symbol);
+ return (x);
+}
+
+void stripfilename_setup(void)
+{
+ stripfilename_class = class_new(gensym("stripfilename"), (t_newmethod)stripfilename_new,
+ 0, sizeof(t_stripfilename), 0, A_DEFFLOAT, 0);
+ class_addsymbol(stripfilename_class, stripfilename_symbol);
+ class_addmethod(stripfilename_class, (t_method)stripfilename_set, gensym("set"), A_FLOAT, 0);
+ class_sethelpsymbol(stripfilename_class, gensym("iemhelp/help-stripfilename"));
+}
diff --git a/src/iemlib2/toggle_mess.c b/src/iemlib2/toggle_mess.c
new file mode 100644
index 0000000..b8cb569
--- /dev/null
+++ b/src/iemlib2/toggle_mess.c
@@ -0,0 +1,119 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ------------------------ toggle_mess ---------------------------- */
+static t_class *toggle_mess_class;
+
+typedef struct _toggle_mess
+{
+ t_object x_obj;
+ int x_index;
+ int x_ac;
+ t_atom *x_at;
+ void *x_out_mid_sym;
+ void *x_out_rght_flt;
+ t_symbol *x_set;
+} t_toggle_mess;
+
+static void toggle_mess_bang(t_toggle_mess *x)
+{
+ int i = x->x_index;
+
+ outlet_float(x->x_out_rght_flt, (float)i);
+ if(IS_A_FLOAT(x->x_at, i))
+ outlet_float(x->x_out_mid_sym, atom_getfloat(&x->x_at[i]));
+ else
+ outlet_anything(x->x_out_mid_sym, atom_getsymbol(&x->x_at[i]), 0, x->x_at);
+ outlet_anything(x->x_obj.ob_outlet, x->x_set, 1, &x->x_at[i]);
+}
+
+static void toggle_mess_float(t_toggle_mess *x, t_float f)
+{
+ x->x_index++;
+ if(x->x_index >= x->x_ac)
+ x->x_index = 0;
+ toggle_mess_bang(x);
+}
+
+static void toggle_mess_set(t_toggle_mess *x, t_symbol *s, int ac, t_atom *av)
+{
+ if((ac >= 1) && (IS_A_FLOAT(av, 0)))
+ {
+ int x_index = (int)atom_getint(av);
+
+ if(x_index < 0)
+ x_index = 0;
+ else if(x_index >= x->x_ac)
+ x_index = x->x_ac;
+ x->x_index = x_index;
+ outlet_anything(x->x_obj.ob_outlet, x->x_set, 1, &x->x_at[x_index]);
+ }
+ else
+ toggle_mess_float(x, 0);
+}
+
+static void toggle_mess_symbol(t_toggle_mess *x, t_symbol *s)
+{
+ toggle_mess_float(x, 0);
+}
+
+static void toggle_mess_anything(t_toggle_mess *x, t_symbol *s, int ac, t_atom *av)
+{
+ toggle_mess_float(x, 0);
+}
+
+static void toggle_mess_free(t_toggle_mess *x)
+{
+ freebytes(x->x_at, x->x_ac * sizeof(t_atom));
+}
+
+static void *toggle_mess_new(t_symbol *s, int ac, t_atom *av)
+{
+ t_toggle_mess *x = (t_toggle_mess *)pd_new(toggle_mess_class);
+ int i;
+
+ if(!ac)
+ {
+ post("toggle_mess-ERROR: must have at least one argument!");
+ x->x_at = (t_atom *)0;
+ return(0);
+ }
+ x->x_ac = ac;
+ x->x_at = (t_atom *)getbytes(ac * sizeof(t_atom));
+ for(i=0; i<ac; i++)
+ x->x_at[i] = *av++;
+ x->x_index = 0;
+ x->x_set = gensym("set");
+ outlet_new(&x->x_obj, &s_list);
+ x->x_out_mid_sym = outlet_new(&x->x_obj, &s_list);
+ x->x_out_rght_flt = outlet_new(&x->x_obj, &s_float);
+ return(x);
+}
+
+void toggle_mess_setup(void)
+{
+ toggle_mess_class = class_new(gensym("toggle_mess"), (t_newmethod)toggle_mess_new,
+ (t_method)toggle_mess_free, sizeof(t_toggle_mess), 0, A_GIMME, 0);
+ class_addcreator((t_newmethod)toggle_mess_new, gensym("tm"), A_GIMME, 0);
+ class_addbang(toggle_mess_class, (t_method)toggle_mess_bang);
+ class_addmethod(toggle_mess_class, (t_method)toggle_mess_set, gensym("set"), A_GIMME, 0);
+ class_addfloat(toggle_mess_class, (t_method)toggle_mess_float);
+ class_addsymbol(toggle_mess_class, toggle_mess_symbol);
+ class_addanything(toggle_mess_class, toggle_mess_anything);
+ class_sethelpsymbol(toggle_mess_class, gensym("iemhelp/help-toggle_mess"));
+}
diff --git a/src/iemlib2/transf_fader.c b/src/iemlib2/transf_fader.c
new file mode 100644
index 0000000..e2988d6
--- /dev/null
+++ b/src/iemlib2/transf_fader.c
@@ -0,0 +1,153 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* -------------------------- transf_fader ------------------------------ */
+
+typedef struct _transf_fader
+{
+ t_object x_obj;
+ int x_size;
+ int x_message;
+ float *x_array;
+} t_transf_fader;
+
+static t_class *transf_fader_class;
+
+static void transf_fader_pairs(t_transf_fader *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(argc >= 4)
+ {
+ int i, j, k, ac=argc/2;
+ int n=1000;
+ int i_prev=0;
+ int first=1;
+ int i_delta;
+ float val_delta;
+ float delta;
+ float val_prev=0.0f;
+ float val=0.0f;
+ float *vec=x->x_array;
+ float fad_in, fad_out;
+
+ for(j=0; j<n; j++)
+ {
+ vec[j] = -123456.0f;
+ }
+
+ for(j=0; j<ac; j++)
+ {
+ fad_in = atom_getfloat(argv++);
+ while(fad_in < 0.0f)
+ fad_in = 0.0f;
+ while(fad_in > 1000.0f)
+ fad_in = 1000.0f;
+
+ fad_out = atom_getfloat(argv++);
+ while(fad_out < -123455.0f)
+ fad_out = -123455.0f;
+
+ i = (int)fad_in;
+ vec[i] = fad_out;
+ }
+
+ for(j=0; j<n; j++)
+ {
+ if(vec[j] > -123456.0f)
+ {
+ if(first)
+ {
+ first = 0;
+ i_prev = j;
+ val_prev = vec[j];
+ }
+ else
+ {
+ i = j;
+ val = vec[j];
+ i_delta = i - i_prev;
+ val_delta = val - val_prev;
+ if(i_delta > 1)
+ {
+ delta = val_delta / (float)i_delta;
+ for(k=i_prev+1; k<i; k++)
+ {
+ vec[k] = val_prev + delta*(float)(k - i_prev);
+ }
+ }
+ i_prev = i;
+ val_prev = val;
+ }
+ }
+ }
+ }
+ else
+ {
+ if(x->x_message)
+ post("transf_fader-ERROR: less than 2 pairs make no sense");
+ }
+}
+
+static void transf_fader_float(t_transf_fader *x, t_floatarg fad_in)
+{
+ float fad_out;
+ float *vec=x->x_array;
+ float fract;
+ int i;
+
+ while(fad_in < 0.0f)
+ fad_in = 0.0f;
+ while(fad_in > 999.0f)
+ fad_in = 999.0f;
+
+ i = (int)fad_in;
+ fract = fad_in - (float)i;
+ fad_out = vec[i] + fract*(vec[i+1] - vec[i]);
+ if(fad_out > -123455.0f)
+ outlet_float(x->x_obj.ob_outlet, fad_out);
+}
+
+static void transf_fader_free(t_transf_fader *x)
+{
+ freebytes(x->x_array, x->x_size * sizeof(float));
+}
+
+static void *transf_fader_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_transf_fader *x = (t_transf_fader *)pd_new(transf_fader_class);
+ int i, n;
+
+ x->x_size = 1001;
+ x->x_message = 0;
+ x->x_array = (float *)getbytes(x->x_size * sizeof(float));
+ n = x->x_size;
+ for(i=0; i<n; i++)
+ x->x_array[i] = -123456.0f;
+ transf_fader_pairs(x, gensym("pairs"), argc, argv);
+ x->x_message = 1;
+ outlet_new(&x->x_obj, &s_float);
+ return (x);
+}
+
+void transf_fader_setup(void)
+{
+ transf_fader_class = class_new(gensym("transf_fader"), (t_newmethod)transf_fader_new, (t_method)transf_fader_free,
+ sizeof(t_transf_fader), 0, A_GIMME, 0);
+ class_addfloat(transf_fader_class, (t_method)transf_fader_float);
+ class_addmethod(transf_fader_class, (t_method)transf_fader_pairs, gensym("pairs"), A_GIMME, 0);
+ class_sethelpsymbol(transf_fader_class, gensym("iemhelp/help-transf_fader"));
+}
diff --git a/src/iemlib2/unsymbol.c b/src/iemlib2/unsymbol.c
new file mode 100644
index 0000000..b617836
--- /dev/null
+++ b/src/iemlib2/unsymbol.c
@@ -0,0 +1,49 @@
+/* Copyright (c) 1997-2003 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* -------------------------- unsymbol ------------------------------ */
+
+static t_class *unsymbol_class;
+
+typedef struct _unsymbol
+{
+ t_object x_obj;
+ t_atom x_at;
+} t_unsymbol;
+
+static void unsymbol_symbol(t_unsymbol *x, t_symbol *s)
+{
+ outlet_anything(x->x_obj.ob_outlet, s, 0, &(x->x_at));
+}
+
+static void *unsymbol_new(void)
+{
+ t_unsymbol *x = (t_unsymbol *)pd_new(unsymbol_class);
+
+ outlet_new(&x->x_obj, &s_list);
+ return (x);
+}
+
+void unsymbol_setup(void)
+{
+ unsymbol_class = class_new(gensym("unsymbol"), (t_newmethod)unsymbol_new,
+ 0, sizeof(t_unsymbol), 0, 0);
+ class_addcreator((t_newmethod)unsymbol_new, gensym("unsym"), 0);
+ class_addsymbol(unsymbol_class, unsymbol_symbol);
+ class_sethelpsymbol(unsymbol_class, gensym("iemhelp/help-unsymbol"));
+}
diff --git a/src/iemlib2/wrap.c b/src/iemlib2/wrap.c
new file mode 100644
index 0000000..b594998
--- /dev/null
+++ b/src/iemlib2/wrap.c
@@ -0,0 +1,69 @@
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
+
+#ifdef NT
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4305 )
+#endif
+
+#include "m_pd.h"
+#include "iemlib.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+/* ---- wrap - float=int or list of float=symbol concaternat to int=float ----- */
+
+
+
+typedef struct _wrap
+{
+ t_object x_obj;
+ float x_f;
+} t_wrap;
+
+static t_class *wrap_class;
+
+static void wrap_bang(t_wrap *x)
+{
+ outlet_float(x->x_obj.ob_outlet, x->x_f);
+}
+
+static void wrap_float(t_wrap *x, t_float f)
+{
+ int i=(int)f;
+
+ if(f > 0.0)
+ x->x_f = f - (float)i;
+ else
+ x->x_f = f - (float)(i - 1);
+ wrap_bang(x);
+}
+
+static void wrap_list(t_wrap *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if((argc > 0) && (IS_A_FLOAT(argv, 0)))
+ wrap_float(x, atom_getfloat(argv));
+}
+
+static void *wrap_new(void)
+{
+ t_wrap *x = (t_wrap *)pd_new(wrap_class);
+
+ outlet_new(&x->x_obj, &s_float);
+ x->x_f = 0.0;
+ return (x);
+}
+
+void wrap_setup(void)
+{
+ wrap_class = class_new(gensym("wrap"), (t_newmethod)wrap_new, 0,
+ sizeof(t_wrap), 0, 0);
+ class_addbang(wrap_class, (t_method)wrap_bang);
+ class_addfloat(wrap_class, (t_method)wrap_float);
+ class_addlist(wrap_class, (t_method)wrap_list);
+ class_sethelpsymbol(wrap_class, gensym("iemhelp/help-wrap"));
+}
diff --git a/start_pd36 b/start_pd36
new file mode 100755
index 0000000..1a35687
--- /dev/null
+++ b/start_pd36
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+/usr/local/bin/pd -r 44100 -channels 2 -audiobuf 400 -audiodev 1 -nomidi \
+-path lib -path iemabs \
+-lib iemlib1 -lib iemlib2 -lib iem_mp3 -lib iem_t3_lib
diff --git a/start_pd36_inst b/start_pd36_inst
new file mode 100755
index 0000000..592880b
--- /dev/null
+++ b/start_pd36_inst
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+/usr/local/bin/pd -r 44100 -channels 2 -audiobuf 400 -audiodev 1 -nomidi \
+-path /usr/local/lib/pd/externs -path /usr/local/lib/pd/iemabs \
+-lib iemlib1 -lib iemlib2 -lib iem_mp3 -lib iem_t3_lib