From f50b0bb6d68567afac0d59b65609ecb2b921d669 Mon Sep 17 00:00:00 2001
From: Sojourner Truth <jon.w.wilkes@gmail.com>
Date: Sun, 7 Aug 2016 17:07:36 -0400
Subject: [PATCH] move rjlib into externals, add new fluid~ lib to externals

---
 externals/Makefile                            |   41 +-
 externals/fluid~/LICENSE                      |   16 +
 externals/fluid~/Makefile.pdlibbuilder        | 1207 +++++++++++++++++
 externals/fluid~/README                       |    9 +
 externals/fluid~/ezdac~.pd                    |   32 +
 externals/fluid~/fluid.gen.txt                |   61 +
 externals/fluid~/fluid.gen2sym.pd             |   55 +
 externals/fluid~/fluid.pd                     |  123 ++
 externals/fluid~/fluid~-help.pd               |  200 +++
 externals/fluid~/fluid~.c                     |  254 ++++
 externals/fluid~/makefile                     |   11 +
 externals/fluid~/simple_onthego_synth.pd      |   39 +
 {l2ork_addons => externals}/rjlib/Makefile    |    0
 {l2ork_addons => externals}/rjlib/README      |    0
 .../rjlib/abs/reverb-echo.pd                  |    0
 .../rjlib/accelerate.pd                       |    0
 .../rjlib/analysepitch.pd                     |    0
 .../rjlib/analysesimpleonset.pd               |    0
 {l2ork_addons => externals}/rjlib/hilbert~.pd |    0
 {l2ork_addons => externals}/rjlib/playback.pd |    0
 {l2ork_addons => externals}/rjlib/recorder.pd |    0
 {l2ork_addons => externals}/rjlib/reverb.pd   |    0
 .../rjlib/rj/OVERVIEW.pd                      |    0
 {l2ork_addons => externals}/rjlib/rj/c.txt    |    0
 .../rjlib/rj/c_adsr-help.pd                   |    0
 .../rjlib/rj/c_adsr.pd                        |    0
 .../rjlib/rj/c_adsrj-help.pd                  |    0
 .../rjlib/rj/c_adsrj.pd                       |    0
 .../rjlib/rj/c_mphasor-help.pd                |    0
 .../rjlib/rj/c_mphasor.pd                     |    0
 .../rjlib/rj/c_multimetro-help.pd             |    0
 .../rjlib/rj/c_multimetro.pd                  |    0
 .../rjlib/rj/c_xfade-help.pd                  |    0
 .../rjlib/rj/c_xfade.pd                       |    0
 {l2ork_addons => externals}/rjlib/rj/e.txt    |    0
 .../rjlib/rj/e_alias-help.pd                  |    0
 .../rjlib/rj/e_alias.pd                       |    0
 .../rjlib/rj/e_chorus-help.pd                 |    0
 .../rjlib/rj/e_chorus.pd                      |    0
 .../rjlib/rj/e_chorusr-help.pd                |    0
 .../rjlib/rj/e_chorusr.pd                     |    0
 .../rjlib/rj/e_fbdelay-help.pd                |    0
 .../rjlib/rj/e_fbdelay.pd                     |    0
 .../rjlib/rj/e_fbdelay2.pd                    |    0
 .../rjlib/rj/e_freqshift-help.pd              |    0
 .../rjlib/rj/e_freqshift.pd                   |    0
 .../rjlib/rj/e_pan-help.pd                    |    0
 {l2ork_addons => externals}/rjlib/rj/e_pan.pd |    0
 .../rjlib/rj/e_phaser-help.pd                 |    0
 .../rjlib/rj/e_phaser.pd                      |    0
 .../rjlib/rj/e_pingpong-help.pd               |    0
 .../rjlib/rj/e_pingpong.pd                    |    0
 .../rjlib/rj/e_pitchshift-help.pd             |    0
 .../rjlib/rj/e_pitchshift.pd                  |    0
 .../rjlib/rj/e_reslop-help.pd                 |    0
 .../rjlib/rj/e_reslop.pd                      |    0
 .../rjlib/rj/e_reverb-help.pd                 |    0
 .../rjlib/rj/e_reverb.pd                      |    0
 .../rjlib/rj/e_softclip-help.pd               |    0
 .../rjlib/rj/e_softclip.pd                    |    0
 .../rjlib/rj/e_vocoder-help.pd                |    0
 .../rjlib/rj/e_vocoder.pd                     |    0
 {l2ork_addons => externals}/rjlib/rj/jon~.pd  |    0
 {l2ork_addons => externals}/rjlib/rj/m.txt    |    0
 .../rjlib/rj/m_bpm2ms-help.pd                 |    0
 .../rjlib/rj/m_bpm2ms.pd                      |    0
 .../rjlib/rj/m_scale-help.pd                  |    0
 .../rjlib/rj/m_scale.pd                       |    0
 .../rjlib/rj/m_speedlimit-help.pd             |    0
 .../rjlib/rj/m_speedlimit.pd                  |    0
 .../rjlib/rj/rjdispatch-help.pd               |    0
 .../rjlib/rj/rjdispatch.pd                    |    0
 .../rjlib/rj/rjloader-help.pd                 |    0
 .../rjlib/rj/rjloader.pd                      |    0
 {l2ork_addons => externals}/rjlib/rj/s.txt    |    0
 .../rjlib/rj/s_blsaw-help.pd                  |    0
 .../rjlib/rj/s_blsaw.pd                       |    0
 .../rjlib/rj/s_blsquare-help.pd               |    0
 .../rjlib/rj/s_blsquare.pd                    |    0
 .../rjlib/rj/s_buzz-help.pd                   |    0
 .../rjlib/rj/s_buzz.pd                        |    0
 .../rjlib/rj/s_fplaytable.pd                  |    0
 .../rjlib/rj/s_fplaytable2.pd                 |    0
 .../rjlib/rj/s_guitar-help.pd                 |    0
 .../rjlib/rj/s_guitar.pd                      |    0
 .../rjlib/rj/s_looper-help.pd                 |    0
 .../rjlib/rj/s_looper.pd                      |    0
 .../rjlib/rj/s_playtable-help.pd              |    0
 .../rjlib/rj/s_playtable.pd                   |    0
 .../rjlib/rj/s_playtable2-help.pd             |    0
 .../rjlib/rj/s_playtable2.pd                  |    0
 .../rjlib/rj/s_rhodey-help.pd                 |    0
 .../rjlib/rj/s_rhodey.pd                      |    0
 {l2ork_addons => externals}/rjlib/rj/sssad.pd |    0
 {l2ork_addons => externals}/rjlib/rj/u.txt    |    0
 .../rjlib/rj/u_fade-help.pd                   |    0
 .../rjlib/rj/u_fade.pd                        |    0
 .../rjlib/rj/u_record-help.pd                 |    0
 .../rjlib/rj/u_record.pd                      |    0
 .../rjlib/rj/u_samplebank-help.pd             |    0
 .../rjlib/rj/u_samplebank.pd                  |    0
 .../rjlib/rj/u_samplebank2-help.pd            |    0
 .../rjlib/rj/u_samplebank2.pd                 |    0
 .../rjlib/rj/u_splicetrans-help.pd            |    0
 .../rjlib/rj/u_splicetrans.pd                 |    0
 .../rjlib/rj/u_stereo-help.pd                 |    0
 .../rjlib/rj/u_stereo.pd                      |    0
 .../rjlib/rjXYZshake-help.pd                  |    0
 .../rjlib/rjXYZshake.pd                       |    0
 {l2ork_addons => externals}/rjlib/rj_fft.pd   |    0
 .../rjlib/rjdispatch-help.pd                  |    0
 .../rjlib/rjdispatch.pd                       |    0
 .../rjlib/rjloader-help.pd                    |    0
 {l2ork_addons => externals}/rjlib/rjloader.pd |    0
 .../rjlib/rjsave-ex-help.pd                   |    0
 .../rjlib/rjsave-ex.pd                        |    0
 .../rjlib/soundinput.pd                       |    0
 .../rjlib/soundoutput.pd                      |    0
 .../rjlib/src/makefile                        |    0
 .../rjlib/src/makefile_mingw                  |    0
 .../rjlib/src/rj_accum-help.pd                |    0
 .../rjlib/src/rj_accum.c                      |    0
 .../rjlib/src/rj_barkflux_accum~-help.pd      |    0
 .../rjlib/src/rj_barkflux_accum~.c            |    0
 .../rjlib/src/rj_centroid~-help.pd            |    0
 .../rjlib/src/rj_centroid~.c                  |    0
 .../rjlib/src/rj_senergy~-help.pd             |    0
 .../rjlib/src/rj_senergy~.c                   |    0
 .../rjlib/src/rj_zcr~-help.pd                 |    0
 .../rjlib/src/rj_zcr~.c                       |    0
 {l2ork_addons => externals}/rjlib/sssad.pd    |    0
 {l2ork_addons => externals}/rjlib/touch.pd    |    0
 l2ork_addons/tar_em_up.sh                     |    2 -
 133 files changed, 2039 insertions(+), 11 deletions(-)
 create mode 100644 externals/fluid~/LICENSE
 create mode 100644 externals/fluid~/Makefile.pdlibbuilder
 create mode 100644 externals/fluid~/README
 create mode 100644 externals/fluid~/ezdac~.pd
 create mode 100644 externals/fluid~/fluid.gen.txt
 create mode 100644 externals/fluid~/fluid.gen2sym.pd
 create mode 100644 externals/fluid~/fluid.pd
 create mode 100644 externals/fluid~/fluid~-help.pd
 create mode 100644 externals/fluid~/fluid~.c
 create mode 100755 externals/fluid~/makefile
 create mode 100644 externals/fluid~/simple_onthego_synth.pd
 rename {l2ork_addons => externals}/rjlib/Makefile (100%)
 rename {l2ork_addons => externals}/rjlib/README (100%)
 rename {l2ork_addons => externals}/rjlib/abs/reverb-echo.pd (100%)
 rename {l2ork_addons => externals}/rjlib/accelerate.pd (100%)
 rename {l2ork_addons => externals}/rjlib/analysepitch.pd (100%)
 rename {l2ork_addons => externals}/rjlib/analysesimpleonset.pd (100%)
 rename {l2ork_addons => externals}/rjlib/hilbert~.pd (100%)
 rename {l2ork_addons => externals}/rjlib/playback.pd (100%)
 rename {l2ork_addons => externals}/rjlib/recorder.pd (100%)
 rename {l2ork_addons => externals}/rjlib/reverb.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/OVERVIEW.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c.txt (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_adsr-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_adsr.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_adsrj-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_adsrj.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_mphasor-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_mphasor.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_multimetro-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_multimetro.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_xfade-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/c_xfade.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e.txt (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_alias-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_alias.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_chorus-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_chorus.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_chorusr-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_chorusr.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay2.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_freqshift-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_freqshift.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pan-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pan.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_phaser-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_phaser.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pingpong-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pingpong.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pitchshift-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_pitchshift.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_reslop-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_reslop.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_reverb-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_reverb.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_softclip-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_softclip.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_vocoder-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/e_vocoder.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/jon~.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m.txt (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_bpm2ms-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_bpm2ms.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_scale-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_scale.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_speedlimit-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/m_speedlimit.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/rjdispatch-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/rjdispatch.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/rjloader-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/rjloader.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s.txt (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_blsaw-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_blsaw.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_blsquare-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_blsquare.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_buzz-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_buzz.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_fplaytable.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_fplaytable2.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_guitar-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_guitar.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_looper-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_looper.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_playtable-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_playtable.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_playtable2-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_playtable2.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_rhodey-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/s_rhodey.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/sssad.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u.txt (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_fade-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_fade.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_record-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_record.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_samplebank-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_samplebank.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_samplebank2-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_samplebank2.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_splicetrans-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_splicetrans.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_stereo-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj/u_stereo.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjXYZshake-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjXYZshake.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rj_fft.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjdispatch-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjdispatch.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjloader-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjloader.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjsave-ex-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/rjsave-ex.pd (100%)
 rename {l2ork_addons => externals}/rjlib/soundinput.pd (100%)
 rename {l2ork_addons => externals}/rjlib/soundoutput.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/makefile (100%)
 rename {l2ork_addons => externals}/rjlib/src/makefile_mingw (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_accum-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_accum.c (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_barkflux_accum~-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_barkflux_accum~.c (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_centroid~-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_centroid~.c (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_senergy~-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_senergy~.c (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_zcr~-help.pd (100%)
 rename {l2ork_addons => externals}/rjlib/src/rj_zcr~.c (100%)
 rename {l2ork_addons => externals}/rjlib/sssad.pd (100%)
 rename {l2ork_addons => externals}/rjlib/touch.pd (100%)

diff --git a/externals/Makefile b/externals/Makefile
index 93922a2fc..34188f878 100644
--- a/externals/Makefile
+++ b/externals/Makefile
@@ -128,7 +128,7 @@ CXXFLAGS = $(CFLAGS)
 #
 # WARNING!  this MUST be all on one line because the automatic package
 # building scripts rely on it being that way.
-LIB_TARGETS = adaptive arraysize autotune bassemu boids bsaylor comport creb cxc cyclone disis earplug ekext ext13 fftease freeverb ggee hcs iem_ambi iem_bin_ambi iemlib iemgui iemguts iem_adaptfilt iemmatrix iemxmlrpc iem_delay iem_roomsim iem_spec2 iem_tab jasch_lib loaders-hexloader loaders-libdir lyonpotpourri mapping markex maxlib mjlib moocow moonlib motex mrpeach oscx pan pdcontainer pddp pdogg plugin pmpd rtcmix sigpack smlib tof unauthorized vbap windowing zexy flext
+LIB_TARGETS = adaptive arraysize autotune bassemu boids bsaylor comport creb cxc cyclone disis earplug ekext ext13 fftease fluid freeverb ggee hcs iem_ambi iem_bin_ambi iemlib iemgui iemguts iem_adaptfilt iemmatrix iemxmlrpc iem_delay iem_roomsim iem_spec2 iem_tab jasch_lib loaders-hexloader loaders-libdir lyonpotpourri mapping markex maxlib mjlib moocow moonlib motex mrpeach oscx pan pdcontainer pddp pdogg plugin pmpd rjlib rtcmix sigpack smlib tof unauthorized vbap windowing zexy flext
 
 # DISABLED: flatgui
 
@@ -448,6 +448,8 @@ cyclone_clean:
 #------------------------------------------------------------------------------#
 # DISIS
 disis:
+	cd $(externals_src)/disis/cwiid && aclocal && autoconf && \
+		./configure --with-python=python2 && make
 	make -C $(externals_src)/disis PD_PATH=$(pd_src)
 
 disis_install:
@@ -456,6 +458,7 @@ disis_install:
 		install
 
 disis_clean:
+	make -C $(externals_src)/disis/cwiid clean
 	make -C $(externals_src)/disis clean
 
 #------------------------------------------------------------------------------#
@@ -534,9 +537,9 @@ flext:
 	./build.sh pd gcc install
 
 	#fluid~
-	cd footils/fluid && \
-	../../grill/trunk/flext/build.sh pd gcc build && \
-	../../grill/trunk/flext/build.sh pd gcc build
+#	cd footils/fluid && \
+#	../../grill/trunk/flext/build.sh pd gcc build && \
+#	../../grill/trunk/flext/build.sh pd gcc build
 
 	#disis_munger~
 	cd ../l2ork_addons/disis_munger && \
@@ -548,9 +551,9 @@ flext_install:
 	# so we only install statically linked externals
 
 	#fluid~
-	cd footils/fluid && \
-	install -D pd-linux/release-multi/fluid~.pd_linux $(DESTDIR)$(objectsdir)/flext/fluid~.pd_linux && \
-	install -D pd/* $(DESTDIR)$(objectsdir)/flext/
+#	cd footils/fluid && \
+#	install -D pd-linux/release-multi/fluid~.pd_linux $(DESTDIR)$(objectsdir)/flext/fluid~.pd_linux && \
+#	install -D pd/* $(DESTDIR)$(objectsdir)/flext/
 
 	#disis_munger~
 	cd ../l2ork_addons/disis_munger && \
@@ -563,8 +566,8 @@ flext_clean:
 	./build.sh pd gcc clean
 
 	#fluid~
-	cd footils/fluid && \
-	../../grill/trunk/flext/build.sh pd gcc clean
+#	cd footils/fluid && \
+#	../../grill/trunk/flext/build.sh pd gcc clean
 
 	#fluid~
 	cd ../l2ork_addons/disis_munger && \
@@ -596,7 +599,17 @@ flib_clean:
 	-rm -f -- $(externals_src)/postlude/flib/*/*.bak
 	-rm -f -- $(externals_src)/postlude/flib/*/*.*~
 
+#------------------------------------------------------------------------------#
+# FLUID~
+
+fluid:
+	make -C $(externals_src)/fluid~ PD_PATH=$(pd_src)
+
+fluid_install:
+	make -C $(externals_src)/fluid~ DESTDIR="$(DESTDIR)" \
+		objectsdir="$(objectsdir)" install
 
+fluid_clean: make -C $(externals_src)/fluid~ clean
 
 #------------------------------------------------------------------------------#
 # FRANKENSTEIN
@@ -1625,6 +1638,16 @@ postlude_clean:
 	-rm -f -- $(externals_src)/postlude/*/*.bak
 	-rm -f -- $(externals_src)/postlude/*/*.*~
 
+#------------------------------------------------------------------------------#
+# RJLIB
+
+rjlib:
+
+rjlib_install:
+	install -d $(DESTDIR)$(objectsdir)/rjlib
+	cp -rf $(externals_src)/rjlib/* $(DESTDIR)/$(objectsdir)/rjlib
+
+rjlib_clean:
 
 #------------------------------------------------------------------------------#
 # RTCMIX~
diff --git a/externals/fluid~/LICENSE b/externals/fluid~/LICENSE
new file mode 100644
index 000000000..73edbfcb9
--- /dev/null
+++ b/externals/fluid~/LICENSE
@@ -0,0 +1,16 @@
+Copyright:  Frank Barknecht , 2003
+            Jonathan Wilkes, 2016
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
diff --git a/externals/fluid~/Makefile.pdlibbuilder b/externals/fluid~/Makefile.pdlibbuilder
new file mode 100644
index 000000000..bb02fe103
--- /dev/null
+++ b/externals/fluid~/Makefile.pdlibbuilder
@@ -0,0 +1,1207 @@
+# Makefile.pdlibbuilder dated 2016-06-26
+
+version = 0.2.5
+
+# Helper makefile for Pure Data external libraries.
+# Written by Katja Vetter March-June 2015 for the public domain. No warranties.
+# Inspired by Hans Christoph Steiner's Makefile Template and Stephan Beal's
+# ShakeNMake.
+#
+# GNU make version >= 3.81 required.
+#
+#
+#=== characteristics ===========================================================
+#
+#
+# - defines build settings based on autodetected OS and architecture
+# - defines rules to build Pd class- or lib executables from C or C++ sources
+# - defines rules for libdir installation
+# - defines convenience targets for developer and user
+# - evaluates implicit dependencies for non-clean builds
+#
+#
+#=== basic usage ===============================================================
+#
+#
+# In your Makefile, define your Pd lib name and class files, and include
+# Makefile.pdlibbuilder at the end of the Makefile. Like so:
+#
+#    ________________________________________________________________________
+#
+#     # Makefile for mylib
+#
+#     lib.name = mylib
+#
+#     class.sources = myclass1.c myclass2.c
+#
+#     datafiles = myclass1-help.pd myclass2-help.pd README.txt LICENSE.txt
+#
+#     include Makefile.pdlibbuilder
+#    ________________________________________________________________________
+#
+#
+# For files in class.sources it is assumed that class basename == source file
+# basename. The default target builds all classes as individual executables
+# with Pd's default extension for the platform. For anything more than the
+# most basic usage, continue reading.
+#
+#
+#=== list of Makefile.pdlibbuilder API variables ===============================
+#
+#
+# Variables available for definition in your library Makefile:
+#
+# - lib.name
+# - lib.setup.sources
+# - class.sources
+# - common.sources
+# - shared.sources
+# - <classname>.class.sources
+# - <classname>.class.ldflags
+# - <classname>.class.ldlibs
+# - cflags
+# - ldflags
+# - ldlibs
+# - datafiles
+# - datadirs
+# - makefiles
+# - makefiledirs
+# - externalsdir
+#
+# Optional multiline defines evaluated per operating system:
+#
+# - forLinux
+# - forDarwin
+# - forWindows
+#
+#
+# Variables avaialable for (re)definition via command arguments:
+#
+# - pdbinpath (Windows only)
+# - pdincludepath
+# - DESTDIR
+# - prefix
+# - libdir
+# - pkglibdir
+# - CPPFLAGS
+# - CFLAGS
+# - LDFLAGS
+# - CC
+# - CXX
+# - INSTALL
+# - INSTALL_PROGRAM
+# - INSTALL_DATA
+# - INSTALL_DIR
+#
+# Variables available for your makefile or as command argument:
+#
+# - objectsdir
+# - make-lib-executable
+# - suppress-wunused
+#
+#
+#=== descriptions of Makefile.pdlibbuilder API variables =======================
+#
+#
+# lib.name: 
+# Name of the library directory as it will be installed / distributed. Also the
+# name of the lib executable in the case where all classes are linked into
+# a single binary.
+#
+# lib.setup.sources:
+# Source file(s) (C or C++) which must be compiled only when linking all classes
+# into a single lib binary.
+#
+# class.sources:
+# All sources files (C or C++) for which the condition holds that 
+# class name == source file basename.
+#
+# <classname>.class.sources:
+# Source file(s) (C or C++) specific to class <classname>. Use this for
+# multiple-source classes or when class name != source file basename.
+#
+# common.sources:
+# Source file(s) which must be statically linked to each class in the library.
+#
+# shared.sources:
+# Source file(s) (C or C++) to build a shared dynamic link lib, to be linked
+# with all class executables.
+#
+# cflags, ldflags, ldlibs:
+# Define cflags (preprocessor&compiler), ldflags (linker) and ldlibs (dynamic
+# link libs) for the whole library. These flags are added to platform-specific
+# flags defined by Makefile.pdlibbuilder.
+#
+# <classname>.class.ldflags and <classname>.class.ldlibs: 
+# Define ldflags resp. ldlibs specific to class <classname>. These flags are
+# added to platform-specific flags defined by Makefile.pdlibbuilder, and flags
+# defined in your Makefile for the whole library. Note: cflags can not be
+# defined per class in the current implementation.
+#
+# datafiles and datadirs: 
+# All extra files you want to include in binary distributions of the
+# library: abstractions and help patches, example patches, meta patch, readme
+# and license texts, manuals, sound files, etcetera. Use 'datafiles' for all
+# files that should go into your lib rootdir and 'datadirs' for complete
+# directories you want to copy from source to distribution.
+#
+# externalsdir: 
+# Relative path to directory 'externals' in the context of pd-extended SVN, or
+# any other centralized build layout for multiple libraries. Default value
+# is '..', meaning the direct parent. The value is used in search paths for 
+# pd core components (header files, and executable in the case of Windows).
+#
+# forLinux, forDarwin, forWindows:
+# Shorthand for 'variable definitions for Linux only' etc. Use like:
+#    define forLinux
+#      cflags += -DLINUX
+#      class.sources += linuxthing.c
+#    endef
+#
+# makefiles and makefiledirs: 
+# Extra makefiles or directories with makefiles that should be made in sub-make
+# processes.
+#
+# pdbinpath:
+# For Windows only. Directory where pd.dll can be found for linking.
+#
+# pdincludepath:
+# Directory where Pd API m_pd.h can be found, and other Pd header files.
+#
+# DESTDIR, prefix, libdir:
+# Components of the path for installation as conventionally used on Linux.
+#
+# pkglibdir:
+# Base path for installation of Pd library directories. Default is specified
+# per OS, see section about paths below.
+#
+# objectsdir:
+# Alias of pkglibdir. Can be defined in your makefile to enable project-
+# dependent relative install locations.
+#
+# CPPFLAGS:
+# Preprocessor flags which are not strictly required for building.
+#
+# CFLAGS:
+# Compiler flags which are not strictly required for building. Compiler flags
+# defined by Makefile.pdlibbuilder for warning, optimization and architecture
+# specification are overriden by CFLAGS.
+#
+# LDFLAGS:
+# Linker flags which are not strictly required for building. Linker flags
+# defined by Makefile.pdlibbuilder for architecture specification are overriden
+# by LDFLAGS.
+#
+# CC and CXX:
+# C and C++ compiler programs as defined in your build environment.
+#
+# INSTALL, INSTALL_PROGRAM, INSTALL_DATA, INSTALL_DIR:
+# Definitions of install program, may be overriden via command argument.
+#
+# make-lib-executable:
+# When this variable is defined 'yes' in your makefile or as command argument,
+# Makefile.pdlibbuilder will try to build all classes into a single library
+# executable (but it will force exit if lib.setup.sources is undefined).
+# If your makefile defines 'make-lib-executable=yes' as the library default,
+# this can still be overriden with 'make-lib-executable=no' as command argument 
+# to build individual class executables (the Makefile.pdlibbuilder default.)
+#
+# suppress-wunused:
+# When this variable is defined ('yes' or any other value), -Wunused-variable,
+# -Wunused-parameter, -Wunused-value and -Wunused-function are suppressed,
+# but the other warnings from -Wall are retained.
+#
+#
+#=== paths =====================================================================
+#
+#
+# Source files in directories other than current working directory must be
+# prefixed with their relative path. Do not rely on VPATH or vpath.
+# Object (.o) files are built in the directory of their source files.
+# Executables are built in current working directory. 
+#
+# Variable 'pdincludepath' stores a location where m_pd.h is expected to reside.
+# Locations where Makefile.pdlibbuilder tries to find it, in order of priority:
+#
+# any OS:   $(externalsdir)../pd/src
+#
+# Linux:    /usr/include/pdextended
+#           /usr/include/pd
+#
+# OSX:      /Applications/Pd-extended.app/Contents/Resources/include/pdextended
+#           /Applications/Pd.app/Contents/Resources/src
+#
+# Windows:  %PROGRAMFILES%/pd/include/pdextended
+#           %PROGRAMFILES%/pd/src
+#
+# The path for installation of all library components is constructed as:
+#
+# installpath := $(DESTDIR)$(objectsdir)/$(lib.name)
+#
+# Default for 'objectsdir' is defined per platform and follows this convention:
+# https://puredata.info/docs/faq/how-do-i-install-externals-and-help-files
+#
+# Linux:    /usr/local/lib/pd-externals
+# OSX:      ~/Library/Pd
+# Windows:  %APPDATA%/Pd
+#
+# The rationale for not installing to ~/pd-externals by default on Linux
+# is that some people share the home dir between 32 and 64 bit installations.
+#
+#
+#=== targets ===================================================================
+#
+#
+# all: build $(executables) plus optional post target
+# post: target to build after $(executables)
+# alldebug: build all with -g option turned on for debug symbols
+# <classname>: force clean build of an individual class
+# <sourcefile>.pre: make preprocessor output file in current working directory
+# <sourcefile>.lst: make asm/source output file in current working directory
+#
+# install: install executables and data files
+# clean: remove build products from source tree
+#
+# help: print help text
+# vars: print makefile variables
+# allvars: print all variables
+# depend: print generated prerequisites
+# coffee: dummy target
+#
+# Variable $(executables) expands to class executables plus optional shared lib,
+# or alternatively to single lib executable when make-lib-executable=true.
+# Targets pre and post can be defined by library makefile. Make sure to include
+# Makefile.pdlibbuilder first so default target all will not be redefined.
+#
+#
+#=== Pd-extended libdir concept ================================================
+#
+#
+# For libdir layout as conceived by Hans-Christoph Steiner, see:
+#
+# https://puredata.info/docs/developer/Libdir
+#
+# Files README.txt, LICENSE.txt and <lib.name>-meta.pd are part of the libdir
+# convention. Help patches for each class and abstraction are supposed to be
+# available. Makefile.pdlibbuilder does not force the presence of these files
+# however. It does not automatically include such files in libdir installations.
+# Data files you want to include in distributions must be defined explicitly in
+# your Makefile.
+#
+#
+#=== Makefile.pdlibbuilder syntax conventions ==================================
+#
+#
+# Makefile.pdlibbuilder variable names are lower case. Default make variables,
+# environment variables, and standard user variables (CC, CXX, CFLAGS, DESTDIR)
+# are upper case. Use target 'allvars' to print all variables and their values.
+#
+# 'Fields' in data variables are separated by dots, like in 'foo.class.sources'.
+# Words in variables expressing a function or command are separated by dashes, 
+# like in 'make-lib-executable'.
+#
+#
+#=== useful make options =======================================================
+#
+#
+# Use 'make -d <target>' to print debug details of the make process.
+# Use 'make -p <target>' to print make's database.
+#
+#
+#=== TODO ======================================================================
+#
+#
+# - decide whether to use -static-libgcc or shared dll in MinGW
+# - cygwin support
+# - android support
+# - Windows 64 bit support
+# - figure out how to handle '$' in filenames
+# - add makefile template targets dpkg-source dist libdir distclean tags?
+#
+#
+#=== end of documentation sections =============================================
+#
+# 
+################################################################################
+################################################################################
+################################################################################
+
+
+# GNU make version 3.81 (2006) or higher is required because of the following:
+# - function 'info'
+# - variable '.DEFAULT_GOAL'
+
+# force exit when make version is < 3.81
+ifneq ($(firstword $(sort 3.81 $(MAKE_VERSION))), 3.81)
+  $(error GNU make version 3.81 or higher is required)
+endif
+
+# Relative path to externals root dir in multi-lib source tree like 
+# pd-extended SVN. Default is parent of current working directory. May be
+# defined differently in including makefile. This variable is used to probe for
+# paths.
+externalsdir ?= ..
+
+# variable you can use to check if Makefile.pdlibbuilder is already included
+Makefile.pdlibbuilder = true
+
+
+################################################################################
+### variables: library name and version ########################################
+################################################################################
+
+
+# strip possibles spaces from lib.name, they mess up calculated file names
+lib.name := $(strip $(lib.name))
+
+# if meta file exists, check library version 
+metafile := $(wildcard $(lib.name)-meta.pd)
+
+ifdef metafile
+  lib.version := $(shell sed -n \
+    's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
+    $(metafile))
+endif
+
+
+################################################################################
+### variables: files ###########################################################
+################################################################################
+
+
+#=== sources ===================================================================
+
+
+# (re)define <classname>.class.sources using file names in class.sources
+
+define add-class-source
+$(notdir $(basename $v)).class.sources += $v
+endef
+
+$(foreach v, $(class.sources), $(eval $(add-class-source)))
+
+# derive class names from <classname>.class.sources variables
+sourcevariables := $(filter %.class.sources, $(.VARIABLES))
+classes := $(basename $(basename $(sourcevariables)))
+
+# accumulate all source files specified in makefile
+classes.sources := $(sort $(foreach v, $(sourcevariables), $($v)))
+all.sources := $(classes.sources) $(lib.setup.sources) \
+  $(shared.sources) $(common.sources)
+
+
+#=== object files ==============================================================
+
+
+# construct object filenames from all C and C++ source file names
+classes.objects := $(addsuffix .o, $(basename $(classes.sources)))
+common.objects := $(addsuffix .o, $(basename $(common.sources)))
+shared.objects := $(addsuffix .o, $(basename $(shared.sources)))
+lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources)))
+all.objects = $(classes.objects) $(common.objects) $(shared.objects) \
+  $(lib.setup.objects)
+
+
+#=== executables ===============================================================
+
+
+# use recursive variables here because executable extension is not yet known
+
+# construct class executable names from class names
+classes.executables = $(addsuffix .$(extension), $(classes))
+
+# construct shared lib executable name if shared sources are defined
+ifdef shared.sources
+  shared.lib = lib$(lib.name).$(shared.extension)
+else
+  shared.lib =
+endif
+
+
+################################################################################
+### variables per platform #####################################################
+################################################################################
+
+
+#=== flags per architecture ====================================================
+
+
+# Set architecture-dependent cflags, mainly for Linux. For Mac and Windows, 
+# arch.c.flags are overriden below.
+
+machine := $(shell uname -m)
+
+# Raspberry Pi 1st generation
+ifeq ($(machine), armv6l)
+  arch.c.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard
+endif
+
+# Beagle, Udoo, RPi2 etc.
+ifeq ($(machine), armv7l)
+  arch.c.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard
+endif
+
+# Intel 32 bit, build with SSE and SSE2 instructions
+ifeq ($(findstring $(machine), i386 i686), $(machine))
+  arch.c.flags = -march=pentium4 -mfpmath=sse -msse -msse2
+endif
+
+# Intel/AMD 64 bit, build with SSE, SSE2 and SSE3 instructions
+ifeq ($(findstring $(machine), ia64 x86_64), $(machine))
+  arch.c.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 
+endif
+
+
+#=== operating system ==========================================================
+
+
+# The following systems are defined: Linux, Darwin, Windows. GNU and
+# GNU/kFreeBSD are treated as Linux to get the same options. System-specific
+# multiline defines (optionally set in library makefile) are conditionally
+# evaluated here.
+
+uname := $(shell uname)
+
+ifeq ($(findstring $(uname), Linux GNU GNU/kFreeBSD), $(uname))
+  system = Linux
+  $(eval $(forLinux))
+endif
+
+ifeq ($(uname), Darwin)
+  system = Darwin
+  $(eval $(forDarwin))
+endif
+
+ifeq ($(findstring MINGW, $(uname)), MINGW)
+  system = Windows
+  $(eval $(forWindows))
+endif
+
+# TODO: Cygwin, Android
+
+
+#=== flags and paths for Linux =================================================
+
+
+ifeq ($(system), Linux)
+  prefix = /usr/local
+  libdir := $(prefix)/lib
+  pkglibdir = $(libdir)/pd-externals
+  pdincludepath := $(firstword $(wildcard \
+    $(externalsdir)/../pd/src \
+    /usr/include/pdextended \
+    /usr/include/pd))
+  extension = pd_linux
+  cpp.flags := -DUNIX
+  c.flags := -fpic
+  c.ldflags := -rdynamic -shared -fpic -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags
+  c.ldlibs := -lc -lm
+  cxx.flags := -fpic -fcheck-new
+  cxx.ldflags := -rdynamic -shared -fpic -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags
+  cxx.ldlibs := -lc -lm -lstdc++
+  shared.extension = so
+  shared.ldflags := -rdynamic -fpic -shared -Wl,-soname,$(shared.lib)
+  stripflags = --strip-unneeded -R .note -R .comment
+endif
+
+
+#=== flags and paths for Darwin ================================================
+
+
+# On OSX we try to build fat binaries by default. It is assumed that OSX i386
+# can build for ppc and OSX x86_64 can't. TODO: try to refine this condition.
+# LLVM-clang doesn't support -fcheck-new, therefore this flag is omitted for
+# OSX x86_64.
+
+ifeq ($(system), Darwin)
+  pkglibdir = $(HOME)/Library/Pd
+  pdincludepath := $(firstword $(wildcard \
+    $(externalsdir)/../pd/src \
+    /Applications/Pd-extended*.app/Contents/Resources/include/pdextended \
+    /Applications/Pd*.app/Contents/Resources/src))
+  extension = pd_darwin
+  cpp.flags := -DUNIX -DMACOSX -I /sw/include
+  c.flags := 
+  c.ldflags := -undefined suppress -flat_namespace -bundle
+  c.ldlibs := -lc
+  cxx.ldflags := -undefined suppress -flat_namespace -bundle
+  cxx.ldlibs := -lc
+  shared.extension = dylib
+  shared.ldflags = -dynamiclib -undefined dynamic_lookup \
+    -install_name @loader_path/$(shared.lib) \
+    -compatibility_version 1 -current_version 1.0
+  stripflags = -x
+  ifeq ($(machine), i386)
+    cxx.flags := -fcheck-new
+    arch.c.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
+    arch.ld.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
+  endif
+  ifeq ($(machine), x86_64)
+    arch.c.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5
+    arch.ld.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5
+  endif
+endif
+
+
+#=== flags and paths for Windows ===============================================
+
+
+# Standard paths on Windows contain spaces, and GNU make functions treat such
+# paths as lists, with unintended effects. Therefore we must use shell function
+# ls instead of make's wildcard, and probe for each standard path individually.
+# Using double quotes around paths with spaces is obligatory. Since some path
+# variables are assembled or re-expanded later, great care must be taken to put
+# quotes at appropriate points throughout the makefile. Thanks, Bill.
+
+# paths for 32-bit executables on 64-bit Windows aren't yet defined here (TODO)
+ifeq ($(system), Windows)
+  pkglibdir := $(APPDATA)/Pd
+  pdbinpath := $(wildcard $(externalsdir)/../pd/bin)
+  pdincludepath := $(wildcard $(externalsdir)/../pd/src)
+  ifndef pdbinpath
+    pdbinpath := $(shell ls -d "$(PROGRAMFILES)/pd/bin")
+  endif
+  ifndef pdincludepath
+    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/include/pdextended")
+  endif
+  ifndef pdincludepath
+    pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/src")
+  endif
+endif
+
+# On Windows we build 32 bit by default to match Pd(-extended) binary 
+# distributions. This may change in the future.
+# TODO: decide whether -mms-bitfields should be specified.
+ifeq ($(system), Windows)
+  extension = dll
+  CC = gcc
+  CXX = g++
+  arch.c.flags := -march=pentium4 -msse -msse2 -mfpmath=sse
+  cpp.flags := -DMSW -DNT
+  c.flags :=
+  c.ldflags := -static-libgcc -shared \
+    -Wl,--enable-auto-import "$(pdbinpath)/pd.dll"
+  c.ldlibs :=
+  cxx.flags := -fcheck-new
+  cxx.ldflags := -static-libstdc++ -shared \
+    -Wl,--enable-auto-import "$(pdbinpath)/pd.dll"
+  cxx.ldlibs :=
+  shared.extension = dll
+  shared.ldflags := -static-libgcc -shared "$(pdbinpath)/pd.dll"
+  stripflags = --strip-unneeded -R .note -R .comment
+endif
+
+
+#=== paths =====================================================================
+
+
+# Default pkglibdir is specified above per operating system. It is aliased as 
+# 'objectsdir' to retain compatibility with pd-extended template. Assignment
+# operator '?=' is used to enable a project-relative path definition in the
+# including makefile.
+objectsdir ?= $(pkglibdir)
+
+# base path where all components of the lib will be installed by default
+installpath := $(DESTDIR)$(objectsdir)/$(lib.name)
+
+# check if pdincludepath contains spaces (as is often the case on Windows)
+# if so, store the path so we can later do checks with it
+pdincludepathwithspaces := $(if $(word 2, $(pdincludepath)), $(pdincludepath))
+
+
+#=== accumulated build flags ===================================================
+
+
+# From GNU make docs: 'Users expect to be able to specify CFLAGS freely
+# themselves.' So we use CFLAGS to define options which  are not strictly
+# required for compilation: optimizations, architecture specifications, and 
+# warnings. CFLAGS can be safely overriden using a make command argument.
+# Variables cflags, ldflags and ldlibs may be defined in including makefile.
+
+optimization.flags = -O3 -ffast-math -funroll-loops -fomit-frame-pointer
+warn.flags = -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing
+
+# suppress -Wunused-variable & Co if you don't want to clutter a build log
+ifdef suppress-wunused
+  warn.flags += $(addprefix -Wno-unused-, function parameter value variable)
+endif
+
+CFLAGS = $(warn.flags) $(optimization.flags) $(arch.c.flags)
+
+# preprocessor flags
+cpp.flags += -DPD -I "$(pdincludepath)" $(CPPFLAGS)
+
+# architecture specifications for linker are overridable by LDFLAGS
+LDFLAGS := $(arch.ld.flags)
+
+# now add the same ld flags to shared dynamic lib
+shared.ldflags := $(shared.ldflags) $(LDFLAGS)
+
+# accumulated flags for C compiler / linker
+c.flags := $(cpp.flags) $(c.flags) $(cflags) $(CFLAGS)
+c.ldflags := $(c.ldflags) $(ldflags) $(LDFLAGS)
+c.ldlibs := $(c.ldlibs) $(ldlibs)
+
+# accumulated flags for C++ compiler / linker
+cxx.flags := $(cpp.flags) $(cxx.flags) $(cflags) $(CFLAGS)
+cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS)
+cxx.ldlibs := $(cxx.ldlibs) $(ldlibs)
+
+
+################################################################################
+### variables: tools ###########################################################
+################################################################################
+
+
+# aliases so we can later define 'compile-$1' and set 'c' or 'cxx' as argument
+compile-c := $(CC)
+compile-cxx := $(CXX)
+
+
+################################################################################
+### checks #####################################################################
+################################################################################
+
+
+# At this point most variables are defined. Now do some checks and info's
+# before rules begin.
+
+# 'forward declaration' of default target, needed to do checks
+all:
+
+# To avoid unpredictable results, make sure the default target is not redefined
+# by including makefile. 
+ifneq ($(.DEFAULT_GOAL), all)
+  $(error Default target must be 'all'.)
+endif
+
+# find out which target(s) will be made
+ifdef MAKECMDGOALS
+  goals := $(MAKECMDGOALS)
+else
+  goals := all
+endif
+
+# store path to Pd API m_pd.h if it is found
+ifdef pdincludepath
+  mpdh := $(shell ls "$(pdincludepath)/m_pd.h")
+endif
+
+# print Makefile.pdlibbuilder version
+$(info ++++ info: using Makefile.pdlibbuilder version $(version))
+
+# when making target all, check if m_pd.h is found and print info about it
+ifeq ($(goals), all)
+  $(if $(mpdh), \
+    $(info ++++ info: using Pd API $(mpdh)), \
+    $(warning Where is Pd API m_pd.h? Do 'make help' for info.))
+endif
+
+# print target info
+$(info ++++ info: making target $(goals) $(if $(lib.name),in lib $(lib.name)))
+
+# when installing, print installpath info
+$(if $(filter install install-lib, $(goals)), $(info ++++ info: \
+  installpath is '$(installpath)'))
+
+
+#=== define executables ========================================================
+
+
+# By default we build class executables, and optionally a shared dynamic link
+# lib. When make-lib-executable=yes we build all classes into a single lib
+# executable, on the condition that variable lib.setup.sources is defined.
+
+ifeq ($(make-lib-executable),yes)
+  $(if $(lib.setup.sources), ,\
+    $(error Can not build library blob because lib.setup.sources is undefined))
+  executables := $(lib.name).$(extension)
+else
+  executables := $(classes.executables) $(shared.lib)
+endif
+
+
+################################################################################
+### rules: special targets #####################################################
+################################################################################
+
+
+# Disable built-in rules. If some target can't be built with the specified
+# rules, it should not be built at all.
+MAKEFLAGS += --no-builtin-rules
+
+.PRECIOUS:
+.SUFFIXES:
+.PHONY: all post build-lib \
+        $(classes) $(makefiledirs) $(makefiles) \
+        install install-executables install-datafiles install-datadirs \
+        force clean vars allvars depend help
+
+
+################################################################################
+### rules: build targets #######################################################
+################################################################################
+
+
+# Target all forces the build of targets [$(executables) post] in
+# deterministic order. Target $(executables) builds class executables plus 
+# optional shared lib or alternatively a single lib executable when 
+# make-lib-executable=true. Target post is optionally defined by
+# library makefile.
+
+all: post
+post: $(executables)
+
+all:
+	$(info ++++info: target all in lib $(lib.name) completed)
+
+# build all with -g option turned on for debug symbols
+alldebug: c.flags += -g
+alldebug: cxx.flags += -g
+alldebug: all
+
+
+#=== class executable ==========================================================
+
+
+# recipe for linking objects in class executable
+# argument $1 = compiler type (c or cxx)
+# argument $2 = class basename
+define link-class
+  $(compile-$1) \
+  $($1.ldflags) $($2.class.ldflags) \
+  -o $2.$(extension) \
+  $(addsuffix .o, $(basename $($2.class.sources))) \
+  $(addsuffix .o, $(basename $(common.sources))) \
+  $($1.ldlibs) $($2.class.ldlibs) $(shared.lib)
+endef
+
+# general rule for linking object files in class executable
+%.$(extension): $(shared.lib)
+	$(info ++++ info: linking objects in $@ for lib $(lib.name))
+	$(if $(filter %.cc %.cpp, $($*.class.sources)), \
+        $(call link-class,cxx,$*), \
+        $(call link-class,c,$*))
+
+
+#=== library blob ==============================================================
+
+
+# build all classes into single executable
+build-lib: $(lib.name).$(extension)
+	$(info ++++ info: library blob $(lib.name).$(extension) completed)
+
+# recipe for linking objects in lib executable
+# argument $1 = compiler type (c or cxx)
+define link-lib
+  $(compile-$1) \
+  $($1.ldflags) $(lib.ldflags) \
+  -o $(lib.name).$(extension) $(all.objects) \
+  $($1.ldlibs) $(lib.ldlibs)
+endef
+
+# rule for linking objects in lib executable
+# declared conditionally to avoid name clashes
+ifeq ($(make-lib-executable),yes)
+$(lib.name).$(extension): $(all.objects)
+	$(if $(filter %.cc %.cpp, $(all.sources)), \
+        $(call link-lib,cxx), \
+        $(call link-lib,c))
+endif
+
+
+#=== shared dynamic lib ========================================================
+
+
+# recipe for linking objects in shared executable
+# argument $1 = compiler type (c or cxx)
+define link-shared
+  $(compile-$1) \
+  $(shared.ldflags) \
+  -o lib$(lib.name).$(shared.extension) $(shared.objects) \
+  $($1.ldlibs) $(shared.ldlibs)
+endef
+
+# rule for linking objects in shared executable
+# build recipe is in macro 'link-shared'
+lib$(lib.name).$(shared.extension): $(shared.objects)
+	$(info ++++ info: linking objects in shared lib $@)
+	$(if $(filter %.cc %.cpp, $(shared.sources)), \
+        $(call link-shared,cxx), \
+        $(call link-shared,c))
+
+
+#=== object files ==============================================================
+
+
+# recipe to make .o file from source
+# argument $1 is compiler type (c or cxx)
+define make-object-file
+  $(info ++++ info: making $@ in lib $(lib.name))
+  $(compile-$1) \
+  $($1.flags) \
+  -o $@ -c $<
+endef
+
+# Three rules to create .o files. These are double colon 'terminal' rules,
+# meaning they are the last in a rules chain.
+
+%.o:: %.c
+	$(call make-object-file,c)
+
+%.o:: %.cc
+	$(call make-object-file,cxx)
+
+%.o:: %.cpp
+	$(call make-object-file,cxx)
+
+
+#=== explicit prerequisites for class executables ==============================
+
+
+# For class executables, prerequisite rules are declared in run time. Target
+# 'depend' prints these rules for debugging purposes.
+
+# declare explicit prerequisites rule like 'class: class.extension'
+# argument $v is class basename
+define declare-class-target
+$v: $v.$(extension)
+endef
+
+# declare explicit prerequisites rule like 'class.extension: object1.o object2.o'
+# argument $v is class basename
+define declare-class-executable-target
+$v.$(extension): $(addsuffix .o, $(basename $($v.class.sources))) \
+  $(addsuffix .o, $(basename $(common.sources)))
+endef
+
+# evaluate explicit prerequisite rules for all classes
+$(foreach v, $(classes), $(eval $(declare-class-target)))
+$(foreach v, $(classes), $(eval $(declare-class-executable-target)))
+
+
+#=== implicit prerequisites for class executables ==============================
+
+
+# Evaluating implicit prerequisites (header files) with help from the
+# preprocessor is 'expensive' so this is done conditionally and selectively.
+# Note that it is also possible to trigger a build via install targets, in
+# which case implicit prerequisites are not checked.
+
+# When the Pd include path contains spaces it will mess up the implicit
+# prerequisites rules. Also it is known that multiple arch flags are
+# incompatible with preprocessor option -MM on OSX <= 10.5. Dependency
+# tracking must be disabled in those cases.
+
+oldfat := $(and $(filter ppc i386, $(machine)), \
+          $(filter-out 0 1, $(words $(filter -arch, $(c.flags)))))
+
+disable-dependency-tracking := $(strip $(pdincludepathwithspaces) $(oldfat))
+
+ifndef disable-dependency-tracking
+  must-build-everything := $(filter all, $(goals))
+  must-build-class := $(filter $(classes), $(goals))
+  must-build-sources := $(foreach v, $(must-build-class), $($v.class.sources))
+endif
+
+# declare implicit prerequisites rule like 'object.o: header1.h header2.h ...'
+# argument $1 is input source file(s)
+# dir is explicitly added because option -MM strips it by default
+define declare-object-target
+$(dir $1)$(filter %.o: %.h, $(shell $(CPP) $(c.flags) -MM $1)) $(MAKEFILE_LIST)
+endef
+
+# evaluate implicit prerequisite rules when rebuilding everything
+ifdef must-build-everything
+  $(if $(wildcard $(all.objects)), \
+  $(info ++++ info: evaluating implicit prerequisites in lib $(lib.name).....) \
+  $(foreach v, $(all.sources), $(eval $(call declare-object-target, $v))))
+endif
+
+# evaluate implicit prerequisite rules when selectively building classes
+ifdef must-build-class
+  $(foreach v, $(must-build-sources), \
+  $(eval $(call declare-object-target, $v)))
+  $(foreach v, $(shared.sources), \
+  $(eval $(call declare-object-target, $v)))
+endif
+
+
+################################################################################
+### rules: preprocessor and assembly files #####################################
+################################################################################
+
+
+# Preprocessor and assembly output files for bug tracing etc. They are not part
+# of the build processes for executables. By default these files are created in
+# the current working directory. Dependency tracking is not performed, the build
+# is forced instead to make sure it's up to date.
+
+force:
+
+
+#=== preprocessor file =========================================================
+
+
+# make preprocessor output file with extension .pre
+# argument $1 = compiler type (c or cxx)
+define make-preprocessor-file
+  $(info ++++ info: making preprocessor output file $(notdir $*.pre) \
+  in current working directory)
+  $(compile-$1) -E $< $(c.flags) $($1.flags) -o $(notdir $*.pre)
+endef
+
+%.pre:: %.c force
+	$(call make-preprocessor-file,c)
+
+%.pre:: %.cc force
+	$(call make-preprocessor-file,cxx)
+
+%.pre:: %.cpp force 
+	$(call make-preprocessor-file,cxx)
+
+
+#=== assembly file =============================================================
+
+
+# make C / assembly interleaved output file with extension .lst
+# argument $1 = compiler type (c or cxx)
+define make-assembly-file
+  $(info ++++ info: making assembly output file $(notdir $*.lst) \
+  in current working directory)
+  $(compile-$1) \
+  -c -Wa,-a,-ad -fverbose-asm \
+  $($1.flags) \
+  $< > $(notdir $*.lst)
+endef
+
+%.lst:: %.c force
+	$(call make-assembly-file,c)
+
+%.lst:: %.cc force
+	$(call make-assembly-file,cxx)
+
+%.lst:: %.cpp force
+	$(call make-assembly-file,cxx)
+
+
+################################################################################
+### rules: installation targets ################################################
+################################################################################
+
+
+# Install targets depend on successful exit status of target all because nothing
+# must be installed in case of a build error.
+
+
+# -p = preserve time stamps
+# -m = set permission mode (as in chmod)
+# -d = create all components of specified directories
+INSTALL = install
+INSTALL_PROGRAM := $(INSTALL) -p -m 644
+INSTALL_DATA := $(INSTALL) -p -m 644
+INSTALL_DIR := $(INSTALL) -m 755 -d
+
+# strip spaces from file names
+executables := $(strip $(executables))
+datafiles := $(strip $(datafiles))
+datadirs := $(strip $(datadirs))
+
+# Do not make any install sub-target with empty variable definition because the
+# install program would exit with an error.
+install: $(if $(executables), install-executables)
+install: $(if $(datafiles), install-datafiles)
+install: $(if $(datadirs), install-datadirs)
+
+install-executables: all
+	$(INSTALL_DIR) -v "$(installpath)"
+	$(INSTALL_PROGRAM) $(executables) "$(installpath)"
+	$(info ++++ info: executables of lib $(lib.name) installed \
+        from $(CURDIR) to $(installpath))
+
+install-datafiles: all
+	$(INSTALL_DIR) -v "$(installpath)"
+	$(INSTALL_DATA) $(datafiles) "$(installpath)"
+	$(info ++++ info: data files of lib $(lib.name) installed \
+        from $(CURDIR) to $(installpath))
+
+install-datadirs: all
+	$(foreach v, $(datadirs), $(INSTALL_DIR) "$(installpath)/$v";)
+	$(foreach v, $(datadirs), \
+        $(INSTALL_DATA) $(wildcard $v/*) "$(installpath)/$v";)
+	$(info ++++ info: data directories of lib $(lib.name) installed \
+        from $(CURDIR) to $(installpath))
+
+
+################################################################################
+### rules: distribution targets ################################################
+################################################################################
+
+
+# TODO
+# These targets are implemented in Makefile Template, but I have to figure out
+# how to do it under the not-so-strict conditions of Makefile.pdlibbuilder.
+
+# make source package
+dist:
+	@echo "target dist not yet implemented"
+
+# make Debian source package
+dpkg-source:
+	@echo "target dpkg-source not yet implemented"
+
+$(ORIGDIR):
+
+$(DISTDIR):
+
+
+################################################################################
+### rules: clean targets #######################################################
+################################################################################
+
+
+# delete build products from build tree
+clean:
+	rm -f $(all.objects)
+	rm -f $(classes.executables) $(lib.name).$(extension) $(shared.lib)
+	rm -f *.pre *.lst
+
+# remove distribution directories and tarballs from build tree
+distclean: clean
+	@echo "target distclean not yet implemented"
+
+
+################################################################################
+### rules: submake targets #####################################################
+################################################################################
+
+
+# Iterate over sub-makefiles or makefiles in other directories.
+
+# When 'continue-make=yes' is set, sub-makes will report 'true' to the parent
+# process regardless of their real exit status. This prevents the parent make
+# from being aborted by a sub-make error. Useful when you want to quickly find
+# out which sub-makes from a large set will succeed.
+ifeq ($(continue-make),yes)
+  continue = || true
+endif
+
+# These targets will trigger sub-make processes for entries in 'makefiledirs'
+# and 'makefiles'.
+all alldebug install clean distclean dist dkpg-source: \
+        $(makefiledirs) $(makefiles)
+
+# this expands to identical rules for each entry in 'makefiledirs'
+$(makefiledirs):
+	$(MAKE) --directory=$@ $(MAKECMDGOALS) $(continue)
+
+# this expands to identical rules for each entry in 'makefiles'
+$(makefiles):
+	$(MAKE) --directory=$(dir $@) --makefile=$(notdir $@) $(MAKECMDGOALS) $(continue)
+
+
+################################################################################
+### rules: convenience targets #################################################
+################################################################################
+
+
+#=== show variables ============================================================
+
+
+# Several 'function' macro's cause errors when expanded within a rule or without
+# proper arguments. Variables which are set with the define directive are only
+# shown by name for that reason.
+functions = \
+add-class-source \
+declare-class-target \
+declare-class-executable-target \
+declare-object-target \
+link-class \
+link-lib \
+link-shared \
+make-object-file \
+make-preprocessor-file \
+make-assembly-file
+
+
+# show variables from makefiles
+vars:
+	$(info ++++ info: showing makefile variables:)
+	$(foreach v,\
+        $(sort $(filter-out $(functions) functions, $(.VARIABLES))),\
+        $(if $(filter file, $(origin $v)),\
+        $(info variable $v = $($v))))
+	$(foreach v, $(functions), $(info 'function' name: $v))
+	@echo
+
+# show all variables
+allvars:
+	$(info ++++ info: showing default, automatic and makefile variables:)
+	$(foreach v, \
+        $(sort $(filter-out $(functions) functions, $(.VARIABLES))), \
+        $(info variable ($(origin $v)) $v = $($v)))
+	$(foreach v, $(functions), $(info 'function' name: $v))
+	@echo
+
+
+#=== show dependencies =========================================================
+
+
+# show generated prerequisites rules
+depend:
+	$(info ++++ info: generated prerequisite rules)
+	$(foreach v, $(classes), $(info $(declare-class-target)))
+	$(foreach v, $(classes), $(info $(declare-class-executable-target)))
+	$(foreach v, $(all.sources), $(info $(call declare-object-target, $v)))
+	@echo
+
+
+#=== show help text ============================================================
+
+
+# brief info about targets and paths
+
+ifdef mpdh
+  mpdhinfo := $(mpdh)
+else
+  mpdhinfo := m_pd.h was not found. Is Pd(-extended) installed?
+endif
+
+help:
+	@echo
+	@echo "  Main targets:"
+	@echo "    all:     build executables (default target)"
+	@echo "    install: install all components of the library"
+	@echo "    vars:    print makefile variables for troubleshooting"
+	@echo "    allvars: print all variables for troubleshooting"
+	@echo "    help:    print this help text"
+	@echo
+	@echo "  Pd API m_pd.h:"
+	@echo "    $(mpdhinfo)"
+	@echo "  You may specify your preferred Pd include path as argument to"
+	@echo "  the make command, like 'pdincludepath=path/to/pd/src'."
+	@echo
+	@echo "  Path for installation of your libdir(s):"
+	@echo "    $(objectsdir)"
+	@echo "  Alternatively you may specify your path for installation as argument"
+	@echo "  to the make command, like 'objectsdir=path/to/pd-externals'."
+	@echo
+	@echo "  Default paths are listed in the doc sections in Makefile.pdlibbuilder."
+	@echo
+
+
+#=== dummy target ==============================================================
+
+
+coffee:
+	@echo "Makefile.pdlibbuilder: Can not make coffee. Sorry."
+
+
+################################################################################
+### end of rules sections ######################################################
+################################################################################
+
+
+# for syntax highlighting in vim and github
+# vim: set filetype=make:
+
diff --git a/externals/fluid~/README b/externals/fluid~/README
new file mode 100644
index 000000000..bdcf2f0ad
--- /dev/null
+++ b/externals/fluid~/README
@@ -0,0 +1,9 @@
+ fluid~ - soundfont external for Pd
+ orchestra in a box  by fbar@footils.org 
+
+ported to Pd's C API by Jonathan Wilkes
+
+fluid~ is an external build around the free fluidsynth soundfont synthesizer
+available on www.fluidsynth.org Soundfonts collect digitally sampled
+instruments. fluid~ converts Pd or (x)Max to a fullblown orchestra with just a
+single external.
diff --git a/externals/fluid~/ezdac~.pd b/externals/fluid~/ezdac~.pd
new file mode 100644
index 000000000..22f4cd536
--- /dev/null
+++ b/externals/fluid~/ezdac~.pd
@@ -0,0 +1,32 @@
+#N canvas 304 280 450 300 10;
+#X obj 224 205 dac~;
+#X obj 224 32 inlet~;
+#X obj 259 60 inlet~;
+#X obj 318 69 tgl 16 0 \$0-d \$0-d DSP 0 -6 1728 8 -260818 -123526
+-33289 0 1;
+#X msg 318 93 \; pd dsp \$1;
+#X obj 69 186 hsl 64 16 0 1 0 0 \$0-v \$0-v volume -2 -6 1728 8 -260818
+-123526 -1 0 1;
+#X obj 269 108 r \$0-v;
+#X obj 262 206 outlet~;
+#X obj 166 206 outlet~;
+#X obj 357 28 r pd;
+#X obj 357 52 route dsp;
+#X obj 269 155 line~;
+#X msg 269 132 \$1 10;
+#X obj 259 180 *~;
+#X obj 224 180 *~;
+#X connect 1 0 14 0;
+#X connect 2 0 13 0;
+#X connect 3 0 4 0;
+#X connect 6 0 12 0;
+#X connect 9 0 10 0;
+#X connect 10 0 3 0;
+#X connect 11 0 13 1;
+#X connect 11 0 14 1;
+#X connect 12 0 11 0;
+#X connect 13 0 0 1;
+#X connect 13 0 7 0;
+#X connect 14 0 0 0;
+#X connect 14 0 8 0;
+#X coords 0 0 1 1 90 55 1;
diff --git a/externals/fluid~/fluid.gen.txt b/externals/fluid~/fluid.gen.txt
new file mode 100644
index 000000000..6d8f42105
--- /dev/null
+++ b/externals/fluid~/fluid.gen.txt
@@ -0,0 +1,61 @@
+startaddrofs
+endaddrofs
+startloopaddrofs
+endloopaddrofs
+startaddrcoarseofs
+modlfotopitch
+viblfotopitch
+modenvtopitch
+filterfc
+filterq
+modlfotofilterfc
+modenvtofilterfc
+endaddrcoarseofs
+modlfotovol
+unused1
+chorussend
+reverbsend
+pan
+unused2
+unused3
+unused4
+modlfodelay
+modlfofreq
+viblfodelay
+viblfofreq
+modenvdelay
+modenvattack
+modenvhold
+modenvdecay
+modenvsustain
+modenvrelease
+keytomodenvhold
+keytomodenvdecay
+volenvdelay
+volenvattack
+volenvhold
+volenvdecay
+volenvsustain
+volenvrelease
+keytovolenvhold
+keytovolenvdecay
+instrument
+reserved1
+keyrange
+velrange
+startloopaddrcoarseofs
+keynum
+velocity
+attenuation
+reserved2
+endloopaddrcoarseofs
+coarsetune
+finetune
+sampleid
+samplemode
+reserved3
+scaletune
+exclusiveclass
+overriderootkey
+pitch
+last 
diff --git a/externals/fluid~/fluid.gen2sym.pd b/externals/fluid~/fluid.gen2sym.pd
new file mode 100644
index 000000000..7b47b41f9
--- /dev/null
+++ b/externals/fluid~/fluid.gen2sym.pd
@@ -0,0 +1,55 @@
+#N canvas 398 411 737 434 10;
+#X msg 301 123 read fluid.gen.txt cr;
+#X obj 301 96 loadbang;
+#X obj 193 372 outlet;
+#X obj 116 30 inlet gen_number;
+#X msg 193 138 rewind;
+#X obj 78 157 until;
+#X obj 193 254 textfile;
+#X obj 193 317 spigot;
+#X msg 320 277 0;
+#X msg 269 279 1;
+#X obj 116 91 t f b b b f;
+#X obj 78 187 i 0;
+#X obj 108 189 + 1;
+#X obj 78 112 f;
+#X msg 118 157 0;
+#X obj 77 207 t b f;
+#X obj 269 255 select 0;
+#X obj 78 134 + 1;
+#X text 268 38 inlet: Number of generator;
+#X text 270 56 outlet: Name of generator;
+#X text 18 253 Count to inlet num + 1;
+#X text 340 254 only open on inlet num;
+#X obj 193 346 symbol;
+#X text 261 343 we're only interested in syms;
+#X text 52 47 change if neccessary;
+#X obj 116 62 clip 0 60;
+#X text 296 150 fluid.gen.txt was created from the gen.h fluidsynth
+header file. All names were converted to lowercase because I hate to
+read uppercase.;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 3 0 25 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 22 0;
+#X connect 8 0 7 1;
+#X connect 9 0 7 1;
+#X connect 10 0 13 0;
+#X connect 10 2 14 0;
+#X connect 10 3 4 0;
+#X connect 10 4 16 1;
+#X connect 11 0 12 0;
+#X connect 11 0 15 0;
+#X connect 12 0 11 1;
+#X connect 13 0 17 0;
+#X connect 14 0 11 1;
+#X connect 15 0 6 0;
+#X connect 15 1 16 0;
+#X connect 16 0 9 0;
+#X connect 16 1 8 0;
+#X connect 17 0 5 0;
+#X connect 22 0 2 0;
+#X connect 25 0 10 0;
diff --git a/externals/fluid~/fluid.pd b/externals/fluid~/fluid.pd
new file mode 100644
index 000000000..53f7fbe5a
--- /dev/null
+++ b/externals/fluid~/fluid.pd
@@ -0,0 +1,123 @@
+#N canvas 243 11 1015 761 10;
+#X text 35 71 A soundfont player using If I Were You \, from www.iiwu.org
+;
+#X text 173 286 fluid~ wants channel # first: should I change this?
+;
+#X text 263 595 Program change ("prog" or "p" + chan + value);
+#X text 173 254 Note messages start with "note" \, "n" or with nothing
+(pure list input): chan + note + velocity;
+#X obj 36 34 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 0
+;
+#X obj 37 35 cnv 15 100 30 empty empty fluid~ 20 15 1 14 -257472 -66577
+0;
+#X obj 593 55 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X text 181 120 "load" soundfonts. Creation argument is possible as
+well:;
+#X obj 594 56 cnv 15 372 158 empty Notes Soundfonts 20 12 65 14 -228992
+-66577 0;
+#X msg 650 146 load /usr/lib/awe/sfbank/2gmgsmt.sf2;
+#X msg 644 126 load \$1;
+#X obj 644 104 openpanel;
+#X obj 644 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -260818 -1
+-1;
+#X obj 629 171 s \$0-iiwu;
+#X obj 375 146 fluid~ notavail.sf2;
+#X obj 593 219 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 594 220 cnv 15 372 158 empty Notes Notes 20 12 65 14 -228992
+-66577 0;
+#X obj 837 261 notein;
+#X obj 837 283 pack 0 0 0;
+#X msg 695 325 n 1 60 0;
+#X obj 640 348 s \$0-iiwu;
+#X obj 695 281 bang;
+#X msg 837 305 \$3 \$1 \$2;
+#X obj 837 327 s \$0-iiwu;
+#X obj 593 382 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X text 159 432 Controller Change: "control" or "c" or "cc" + chan
++ cc# + value;
+#X obj 594 383 cnv 15 372 158 empty Notes Controller_Change/Pitch_Bend
+20 12 65 14 -228992 -66577 0;
+#X obj 632 510 s \$0-iiwu;
+#X floatatom 632 425 5 0 0 0 - - -;
+#X msg 649 478 c 2 \$1;
+#X msg 632 444 control 1 2 \$1;
+#X obj 593 546 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 594 547 cnv 15 372 158 empty Notes Program_Change 20 12 65 14
+-228992 -66577 0;
+#X obj 703 664 s \$0-iiwu;
+#X msg 703 617 prog 1 \$1;
+#X msg 783 617 p 2 \$1;
+#X floatatom 703 587 5 0 0 0 - - -;
+#X obj 695 239 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X floatatom 783 587 5 0 0 0 - - -;
+#X floatatom 673 425 5 0 0 0 - - -;
+#X msg 695 259 note 1 60 120;
+#X obj 741 425 ctlin;
+#X msg 741 469 cc \$3 \$2 \$1;
+#X obj 741 447 pack 0 0 0;
+#X obj 856 433 bendin;
+#X obj 856 455 pack 0 0;
+#X obj 856 499 s \$0-iiwu;
+#X msg 856 477 bend \$2 \$1;
+#X text 159 464 Pitch Bend works the same: "bend" or "b" + chan + val
+;
+#X msg 857 611 bank 1 \$1;
+#X floatatom 857 592 5 0 0 0 - - -;
+#X text 857 632 bank select;
+#X obj 789 224 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 715 224 metro 1000;
+#X obj 695 303 del 500;
+#X obj 40 261 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 41 262 cnv 15 100 30 empty empty empty 20 15 1 14 -257472 -66577
+0;
+#X obj 66 269 fluid~;
+#X obj 43 342 ezdac~;
+#X obj 66 199 r \$0-iiwu;
+#X msg 66 233 help;
+#X connect 9 0 13 0;
+#X connect 10 0 13 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 2 18 2;
+#X connect 18 0 22 0;
+#X connect 19 0 20 0;
+#X connect 21 0 54 0;
+#X connect 22 0 23 0;
+#X connect 28 0 30 0;
+#X connect 29 0 27 0;
+#X connect 30 0 27 0;
+#X connect 34 0 33 0;
+#X connect 35 0 33 0;
+#X connect 36 0 34 0;
+#X connect 37 0 40 0;
+#X connect 38 0 35 0;
+#X connect 39 0 29 0;
+#X connect 40 0 20 0;
+#X connect 40 0 21 0;
+#X connect 41 0 43 0;
+#X connect 41 1 43 1;
+#X connect 41 2 43 2;
+#X connect 42 0 27 0;
+#X connect 43 0 42 0;
+#X connect 44 0 45 0;
+#X connect 44 1 45 1;
+#X connect 45 0 47 0;
+#X connect 47 0 46 0;
+#X connect 49 0 33 0;
+#X connect 50 0 49 0;
+#X connect 52 0 53 0;
+#X connect 53 0 37 0;
+#X connect 54 0 19 0;
+#X connect 57 0 58 0;
+#X connect 57 1 58 1;
+#X connect 59 0 57 0;
+#X connect 60 0 57 0;
diff --git a/externals/fluid~/fluid~-help.pd b/externals/fluid~/fluid~-help.pd
new file mode 100644
index 000000000..fdee7316e
--- /dev/null
+++ b/externals/fluid~/fluid~-help.pd
@@ -0,0 +1,200 @@
+#N canvas 79 6 1015 761 10;
+#X text 35 71 A soundfont player using If I Were You \, from www.iiwu.org
+;
+#X text 170 296 fluid~ wants channel # first: should I change this?
+;
+#X text 287 518 Program change ( prog or p + chan + value);
+#X text 170 246 Note messages start with note \, n or with nothing
+(pure list input): chan + note + velocity;
+#X obj 36 34 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 0
+;
+#X obj 37 35 cnv 15 100 30 empty empty fluid~ 20 15 1 14 -257472 -66577
+0;
+#X obj 593 18 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X text 181 120 load soundfonts. Creation argument is possible as well:
+;
+#X obj 594 19 cnv 15 372 158 empty Notes Soundfonts 20 12 1 14 -228992
+-66577 0;
+#X msg 650 109 load /usr/lib/awe/sfbank/2gmgsmt.sf2;
+#X msg 644 89 load \$1;
+#X obj 644 67 openpanel;
+#X obj 644 47 bng 15 250 50 0 empty empty empty 0 -6 0 8 -260818 -1
+-1;
+#X obj 629 134 s \$0-iiwu;
+#X obj 375 146 fluid~ notavail.sf2;
+#X obj 593 182 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 594 183 cnv 15 372 158 empty Notes Notes 20 12 1 14 -228992
+-66577 0;
+#X obj 837 224 notein;
+#X obj 837 246 pack 0 0 0;
+#X msg 695 288 n 1 60 0;
+#X obj 640 311 s \$0-iiwu;
+#X obj 695 244 bang;
+#X msg 837 268 \$3 \$1 \$2;
+#X obj 837 290 s \$0-iiwu;
+#X obj 593 345 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X text 159 413 Controller Change: control or c or cc + chan + cc#
++ value;
+#X obj 594 346 cnv 15 372 158 empty Notes Controller_Change/Pitch_Bend
+20 12 1 14 -228992 -66577 0;
+#X obj 632 473 s \$0-iiwu;
+#X floatatom 632 388 5 0 0 0 - - -;
+#X msg 649 441 c 2 \$1;
+#X msg 632 407 control 1 2 \$1;
+#X obj 593 509 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 594 510 cnv 15 372 158 empty Notes Program_Change 20 12 1 14
+-228992 -66577 0;
+#X obj 703 627 s \$0-iiwu;
+#X msg 703 580 prog 1 \$1;
+#X msg 783 580 p 2 \$1;
+#X floatatom 703 550 5 0 0 0 - - -;
+#X obj 695 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X floatatom 783 550 5 0 0 0 - - -;
+#X floatatom 673 388 5 0 0 0 - - -;
+#X msg 695 222 note 1 60 120;
+#X obj 741 388 ctlin;
+#X obj 741 410 pack 0 0 0;
+#X obj 856 396 bendin;
+#X obj 856 418 pack 0 0;
+#X obj 856 462 s \$0-iiwu;
+#X msg 856 440 bend \$2 \$1;
+#X text 159 445 Pitch Bend works the same: bend or b + chan + val;
+#X msg 857 574 bank 1 \$1;
+#X floatatom 857 555 5 0 0 0 - - -;
+#X text 857 595 bank select;
+#X obj 789 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 715 187 metro 1000;
+#X obj 40 261 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 41 262 cnv 15 100 30 empty empty empty 20 15 1 14 -257472 -66577
+0;
+#X obj 43 342 ezdac~;
+#X obj 66 199 r \$0-iiwu;
+#X msg 66 233 help;
+#X msg 146 217 init /usr/lib/awe/sfbank/2gmgsmt.sf2;
+#X obj 66 269 fluid~;
+#X text 145 185 init [soundfont] can (re)initialize fluid~ for example
+to adapt to new samplerates.;
+#X msg 741 432 cc \$3 \$2 \$1;
+#X obj 203 617 cnv 15 302 110 empty empty empty 20 12 1 14 -1 -66577
+0;
+#X obj 204 618 cnv 15 300 108 empty Notes generators 20 12 1 14 -228992
+-66577 0;
+#X msg 231 682 gen 1 \$2 \$1;
+#X obj 231 704 s \$0-iiwu;
+#X floatatom 289 642 5 0 60 0 - - -;
+#X floatatom 231 642 5 0 0 0 - - -;
+#X obj 231 662 pack 0 17;
+#X text 78 607 gen 17 is "pan".;
+#X text 78 594 Setting generators like for example:;
+#X obj 695 266 del 1000;
+#X symbolatom 343 684 20 0 0 0 - - -;
+#X obj 343 656 fluid.gen2sym;
+#X text 345 700 a little helper;
+#N canvas 402 274 605 444 dust 0;
+#X obj 119 135 del 10;
+#X obj 119 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X floatatom 386 66 5 0 0 1 dustiness - -;
+#X floatatom 386 164 5 0 0 1 note_range - -;
+#X floatatom 387 198 5 0 0 1 note_center - -;
+#X obj 237 417 s \$0-iiwu;
+#X obj 387 242 / 2;
+#X floatatom 387 223 5 0 0 1 pan_mod - -;
+#X msg 237 281 gen 1 17 \$1;
+#X obj 237 237 random 100;
+#X obj 237 259 - 50;
+#X obj 119 273 pack 0 0;
+#X obj 119 63 metro;
+#X obj 126 339 pack 0 0;
+#X msg 126 371 note 1 \$1 \$2;
+#X obj 119 251 makenote 100 2;
+#X obj 119 212 + 60;
+#X obj 119 178 random 24;
+#X obj 198 80 random 150;
+#X obj 119 301 poly 8 1;
+#X obj 198 108 t f f;
+#X text 98 11 Inspired by Hans-Christoph Steiner and Derek Holzer;
+#X text 15 11 __Dust__;
+#X connect 0 0 9 0;
+#X connect 0 0 17 0;
+#X connect 1 0 12 0;
+#X connect 2 0 18 1;
+#X connect 3 0 17 1;
+#X connect 4 0 16 1;
+#X connect 6 0 10 1;
+#X connect 7 0 6 0;
+#X connect 7 0 9 1;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 19 0;
+#X connect 12 0 0 0;
+#X connect 12 0 18 0;
+#X connect 13 0 14 0;
+#X connect 14 0 5 0;
+#X connect 15 0 11 0;
+#X connect 15 1 11 1;
+#X connect 16 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 1 13 0;
+#X connect 19 2 13 1;
+#X connect 20 0 0 1;
+#X restore 709 715 pd dust;
+#X text 601 716 A composition:;
+#X msg 705 87 load /home/ico/Downloads/Soundfonts/jRhodes3.sf2;
+#X connect 9 0 13 0;
+#X connect 10 0 13 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 17 2 18 2;
+#X connect 18 0 22 0;
+#X connect 19 0 20 0;
+#X connect 21 0 71 0;
+#X connect 22 0 23 0;
+#X connect 28 0 30 0;
+#X connect 29 0 27 0;
+#X connect 30 0 27 0;
+#X connect 34 0 33 0;
+#X connect 35 0 33 0;
+#X connect 36 0 34 0;
+#X connect 37 0 40 0;
+#X connect 38 0 35 0;
+#X connect 39 0 29 0;
+#X connect 40 0 20 0;
+#X connect 40 0 21 0;
+#X connect 41 0 42 0;
+#X connect 41 1 42 1;
+#X connect 41 2 42 2;
+#X connect 42 0 61 0;
+#X connect 43 0 44 0;
+#X connect 43 1 44 1;
+#X connect 44 0 46 0;
+#X connect 46 0 45 0;
+#X connect 48 0 33 0;
+#X connect 49 0 48 0;
+#X connect 51 0 52 0;
+#X connect 52 0 37 0;
+#X connect 56 0 59 0;
+#X connect 57 0 59 0;
+#X connect 58 0 59 0;
+#X connect 59 0 55 0;
+#X connect 59 1 55 1;
+#X connect 61 0 27 0;
+#X connect 64 0 65 0;
+#X connect 66 0 68 1;
+#X connect 66 0 73 0;
+#X connect 67 0 68 0;
+#X connect 68 0 64 0;
+#X connect 71 0 19 0;
+#X connect 73 0 72 0;
+#X connect 77 0 13 0;
diff --git a/externals/fluid~/fluid~.c b/externals/fluid~/fluid~.c
new file mode 100644
index 000000000..3a81a7d1b
--- /dev/null
+++ b/externals/fluid~/fluid~.c
@@ -0,0 +1,254 @@
+#include <fluidsynth.h>
+
+#include "m_pd.h"
+ 
+static t_class *fluid_tilde_class;
+ 
+typedef struct _fluid_tilde {
+    t_object x_obj;
+    fluid_synth_t *x_synth;
+    fluid_settings_t *x_settings;
+    t_outlet *x_out_left;
+    t_outlet *x_out_right;
+} t_fluid_tilde;
+ 
+t_int *fluid_tilde_perform(t_int *w)
+{
+    t_fluid_tilde *x = (t_fluid_tilde *)(w[1]);
+    t_sample *left = (t_sample *)(w[2]);
+    t_sample *right = (t_sample *)(w[3]);
+    int n = (int)(w[4]);
+
+    //while (n--) *out++ = (*in1++)*(1-f_pan)+(*in2++)*f_pan;
+    fluid_synth_write_float(x->x_synth, n, left, 0, 1, right, 0, 1);
+ 
+    return (w+5);
+}
+
+static void fluid_tilde_dsp(t_fluid_tilde *x, t_signal **sp)
+{
+    dsp_add(fluid_tilde_perform, 4, x,
+        sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+static void fluid_tilde_free(t_fluid_tilde *x)
+{
+    outlet_free(x->x_out_left);
+    outlet_free(x->x_out_right);
+}
+
+static void fluid_help(void)
+{
+    const char * helptext =
+        "_ __fluid~_ _  a soundfont external for Pd and Max/MSP \n"
+        "_ argument: \"/path/to/soundfont.sf\" to load on object creation\n"
+        "_ messages: \n"
+        "load /path/to/soundfont.sf2  --- Loads a Soundfont \n"
+        "note 0 0 0                   --- Play note. Arguments: \n"
+        "                                 channel-# note-#  veloc-#\n"
+        "n 0 0 0                      --- Play note, same as above\n"
+        "0 0 0                        --- Play note, same as above\n"
+        "control 0 0 0                --- set controller\n"
+        "c       0 0 0                --- set controller, shortcut\n"
+        "prog 0 0                     --- progam change, \n"
+        "                                 args: channel-# prog-#\n"
+        "p    0 0                     --- program change, shortcut\n"
+    ;
+    post("%s", helptext);
+}
+
+static void fluid_note(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 3)
+    {
+        int chan, key, vel;
+        chan = atom_getintarg(0, argc, argv);
+        key = atom_getintarg(1, argc, argv);
+        vel = atom_getintarg(2, argc, argv);
+        fluid_synth_noteon(x->x_synth, chan - 1, key, vel);
+    }
+}
+
+static void fluid_program_change(t_fluid_tilde *x, t_symbol *s, int argc,
+    t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 2)
+    {
+        int chan, prog;
+        chan = atom_getintarg(0, argc, argv);
+        prog = atom_getintarg(1, argc, argv);
+        fluid_synth_program_change(x->x_synth, chan - 1, prog);
+    }
+}
+
+static void fluid_control_change(t_fluid_tilde *x, t_symbol *s, int argc,
+    t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 3)
+    {
+        int chan, ctrl, val;
+        chan = atom_getintarg(0, argc, argv);
+        ctrl = atom_getintarg(1, argc, argv);
+        val = atom_getintarg(2, argc, argv);
+        fluid_synth_cc(x->x_synth, chan - 1, ctrl, val);
+    }
+}
+
+static void fluid_pitch_bend(t_fluid_tilde *x, t_symbol *s, int argc,
+    t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 2)
+    {
+        int chan, val;
+        chan = atom_getintarg(0, argc, argv);
+        val = atom_getintarg(1, argc, argv);
+        fluid_synth_pitch_bend(x->x_synth, chan - 1, val);
+    }
+}
+
+static void fluid_bank(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 2)
+    {
+        int chan, bank;
+        chan = atom_getintarg(0, argc, argv);
+        bank = atom_getintarg(1, argc, argv);
+        fluid_synth_bank_select(x->x_synth, chan - 1, bank);
+    }
+}
+
+static void fluid_gen(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+    if (x->x_synth == NULL) return;
+    if (argc == 3)
+    {
+        int chan, param;
+        float value;
+        chan = atom_getintarg(0, argc, argv);
+        param = atom_getintarg(1, argc, argv);
+        value = atom_getintarg(2, argc, argv);
+        fluid_synth_set_gen(x->x_synth, chan - 1, param, value);
+    }
+}
+
+static void fluid_load(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+    if (x->x_synth == NULL)
+    {
+        post("No fluidsynth");
+        return;
+    }
+    if (argc >= 1 && argv->a_type == A_SYMBOL)
+    {
+        const char* filename = atom_getsymbolarg(0, argc, argv)->s_name;
+        if (fluid_synth_sfload(x->x_synth, filename, 0) >= 0)
+        {
+            post("Loaded Soundfont: %s", filename);
+            fluid_synth_program_reset(x->x_synth);
+        }
+    }
+}
+
+static void fluid_init(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+    if (x->x_synth) delete_fluid_synth(x->x_synth);
+
+    float sr = sys_getsr();
+
+    x->x_settings = new_fluid_settings();
+
+    if (x->x_settings == NULL)
+    {
+        post("fluid~: couldn't create synth settings\n");
+    }
+    else
+    {
+        // fluid_settings_setstr(settings, "audio.driver", "float");
+        // settings:
+        fluid_settings_setnum(x->x_settings, "synth.midi-channels", 16);
+        fluid_settings_setnum(x->x_settings, "synth.polyphony", 256);
+        fluid_settings_setnum(x->x_settings, "synth.gain", 0.600000);
+        fluid_settings_setnum(x->x_settings, "synth.sample-rate", 44100.000000);
+        fluid_settings_setstr(x->x_settings, "synth.chorus.active", "no");
+        fluid_settings_setstr(x->x_settings, "synth.reverb.active", "no");
+        fluid_settings_setstr(x->x_settings, "synth.ladspa.active", "no");
+
+        if (sr != 0)
+        {
+            fluid_settings_setnum(x->x_settings, "synth.sample-rate", sr);
+        }
+        // Create fluidsynth instance:
+        x->x_synth = new_fluid_synth(x->x_settings);
+        if (x->x_synth == NULL )
+        {
+            post("fluid~: couldn't create synth\n");
+        }
+        // try to load argument as soundfont
+        fluid_load(x, gensym("load"), argc, argv);
+        //if (settings != NULL )
+        //      delete_fluid_settings(settings);
+
+        // We're done constructing:
+        if (x->x_synth)
+            post("-- fluid~ for Pd ---");
+    }
+}
+
+static void *fluid_tilde_new(t_symbol *s, int argc, t_atom *argv)
+{
+    t_fluid_tilde *x = (t_fluid_tilde *)pd_new(fluid_tilde_class);
+    x->x_out_left = outlet_new(&x->x_obj, &s_signal);
+    x->x_out_right = outlet_new(&x->x_obj, &s_signal);
+    fluid_init(x, gensym("init"), argc, argv);
+    return (void *)x;
+}
+ 
+void fluid_tilde_setup(void)
+{
+    fluid_tilde_class = class_new(gensym("fluid~"),
+        (t_newmethod)fluid_tilde_new, 0, sizeof(t_fluid_tilde),
+        CLASS_DEFAULT, A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_init, gensym("init"),
+        A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_load, gensym("load"),
+        A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_note, gensym("note"),
+        A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_program_change,
+        gensym("prog"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_control_change,
+        gensym("control"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_pitch_bend,
+        gensym("bend"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_bank, gensym("bank"),
+        A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_gen, gensym("gen"),
+        A_GIMME, 0);
+
+    // list input calls fluid_note(...)
+    class_addlist(fluid_tilde_class, (t_method)fluid_note);
+
+    // some alias shortcuts:
+    class_addmethod(fluid_tilde_class, (t_method)fluid_note, gensym("n"),
+        A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_program_change,
+        gensym("p"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_control_change,
+        gensym("c"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_control_change,
+        gensym("cc"), A_GIMME, 0);
+    class_addmethod(fluid_tilde_class, (t_method)fluid_pitch_bend, gensym("b"),
+        A_GIMME, 0);
+
+    // Simulate Flext's help message
+    class_addmethod(fluid_tilde_class, (t_method)fluid_help, gensym("help"),
+        0);
+
+    class_addmethod(fluid_tilde_class,
+        (t_method)fluid_tilde_dsp, gensym("dsp"), A_CANT, 0);
+}
diff --git a/externals/fluid~/makefile b/externals/fluid~/makefile
new file mode 100755
index 000000000..b172e9c74
--- /dev/null
+++ b/externals/fluid~/makefile
@@ -0,0 +1,11 @@
+# Makefile for mylib
+
+lib.name = fluid~
+
+class.sources = fluid~.c
+
+ldlibs = -lfluidsynth
+
+datafiles = ezdac~.pd fluid~-help.pd fluid.pd fluid.gen2sym.pd simple_onthego_synth.pd fluid.gen.txt LICENSE README 
+
+include Makefile.pdlibbuilder
diff --git a/externals/fluid~/simple_onthego_synth.pd b/externals/fluid~/simple_onthego_synth.pd
new file mode 100644
index 000000000..f4227d17e
--- /dev/null
+++ b/externals/fluid~/simple_onthego_synth.pd
@@ -0,0 +1,39 @@
+#N canvas 480 117 389 508 10;
+#X declare -lib maxlib;
+#X obj 25 197 notein;
+#X obj 25 222 + 0;
+#X obj 25 20 key;
+#X obj 25 42 sel 49 50;
+#X msg 25 64 -12;
+#X msg 50 85 12;
+#X obj 25 117 +;
+#X obj 109 134 nbx 3 88 -60 60 0 0 empty empty empty 0 -8 0 70 -262144
+-1 -1 0 256 1;
+#X obj 25 253 pack 0 0 0;
+#X msg 25 275 \$3 \$1 \$2;
+#X obj 25 296 fluid~ /home/l2orkist/Downloads/Soundfonts/jRhodes3.sf2
+;
+#X obj 26 377 l2ork_output~;
+#X obj 105 334 loadbang;
+#X obj 36 350 freeverb~;
+#X obj 105 355 t 50 1;
+#X connect 0 0 1 0;
+#X connect 0 1 8 1;
+#X connect 0 2 8 2;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 6 1;
+#X connect 7 0 1 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 13 0;
+#X connect 10 0 11 0;
+#X connect 12 0 14 0;
+#X connect 13 0 11 0;
+#X connect 14 0 11 6;
+#X connect 14 1 11 7;
diff --git a/l2ork_addons/rjlib/Makefile b/externals/rjlib/Makefile
similarity index 100%
rename from l2ork_addons/rjlib/Makefile
rename to externals/rjlib/Makefile
diff --git a/l2ork_addons/rjlib/README b/externals/rjlib/README
similarity index 100%
rename from l2ork_addons/rjlib/README
rename to externals/rjlib/README
diff --git a/l2ork_addons/rjlib/abs/reverb-echo.pd b/externals/rjlib/abs/reverb-echo.pd
similarity index 100%
rename from l2ork_addons/rjlib/abs/reverb-echo.pd
rename to externals/rjlib/abs/reverb-echo.pd
diff --git a/l2ork_addons/rjlib/accelerate.pd b/externals/rjlib/accelerate.pd
similarity index 100%
rename from l2ork_addons/rjlib/accelerate.pd
rename to externals/rjlib/accelerate.pd
diff --git a/l2ork_addons/rjlib/analysepitch.pd b/externals/rjlib/analysepitch.pd
similarity index 100%
rename from l2ork_addons/rjlib/analysepitch.pd
rename to externals/rjlib/analysepitch.pd
diff --git a/l2ork_addons/rjlib/analysesimpleonset.pd b/externals/rjlib/analysesimpleonset.pd
similarity index 100%
rename from l2ork_addons/rjlib/analysesimpleonset.pd
rename to externals/rjlib/analysesimpleonset.pd
diff --git a/l2ork_addons/rjlib/hilbert~.pd b/externals/rjlib/hilbert~.pd
similarity index 100%
rename from l2ork_addons/rjlib/hilbert~.pd
rename to externals/rjlib/hilbert~.pd
diff --git a/l2ork_addons/rjlib/playback.pd b/externals/rjlib/playback.pd
similarity index 100%
rename from l2ork_addons/rjlib/playback.pd
rename to externals/rjlib/playback.pd
diff --git a/l2ork_addons/rjlib/recorder.pd b/externals/rjlib/recorder.pd
similarity index 100%
rename from l2ork_addons/rjlib/recorder.pd
rename to externals/rjlib/recorder.pd
diff --git a/l2ork_addons/rjlib/reverb.pd b/externals/rjlib/reverb.pd
similarity index 100%
rename from l2ork_addons/rjlib/reverb.pd
rename to externals/rjlib/reverb.pd
diff --git a/l2ork_addons/rjlib/rj/OVERVIEW.pd b/externals/rjlib/rj/OVERVIEW.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/OVERVIEW.pd
rename to externals/rjlib/rj/OVERVIEW.pd
diff --git a/l2ork_addons/rjlib/rj/c.txt b/externals/rjlib/rj/c.txt
similarity index 100%
rename from l2ork_addons/rjlib/rj/c.txt
rename to externals/rjlib/rj/c.txt
diff --git a/l2ork_addons/rjlib/rj/c_adsr-help.pd b/externals/rjlib/rj/c_adsr-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_adsr-help.pd
rename to externals/rjlib/rj/c_adsr-help.pd
diff --git a/l2ork_addons/rjlib/rj/c_adsr.pd b/externals/rjlib/rj/c_adsr.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_adsr.pd
rename to externals/rjlib/rj/c_adsr.pd
diff --git a/l2ork_addons/rjlib/rj/c_adsrj-help.pd b/externals/rjlib/rj/c_adsrj-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_adsrj-help.pd
rename to externals/rjlib/rj/c_adsrj-help.pd
diff --git a/l2ork_addons/rjlib/rj/c_adsrj.pd b/externals/rjlib/rj/c_adsrj.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_adsrj.pd
rename to externals/rjlib/rj/c_adsrj.pd
diff --git a/l2ork_addons/rjlib/rj/c_mphasor-help.pd b/externals/rjlib/rj/c_mphasor-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_mphasor-help.pd
rename to externals/rjlib/rj/c_mphasor-help.pd
diff --git a/l2ork_addons/rjlib/rj/c_mphasor.pd b/externals/rjlib/rj/c_mphasor.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_mphasor.pd
rename to externals/rjlib/rj/c_mphasor.pd
diff --git a/l2ork_addons/rjlib/rj/c_multimetro-help.pd b/externals/rjlib/rj/c_multimetro-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_multimetro-help.pd
rename to externals/rjlib/rj/c_multimetro-help.pd
diff --git a/l2ork_addons/rjlib/rj/c_multimetro.pd b/externals/rjlib/rj/c_multimetro.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_multimetro.pd
rename to externals/rjlib/rj/c_multimetro.pd
diff --git a/l2ork_addons/rjlib/rj/c_xfade-help.pd b/externals/rjlib/rj/c_xfade-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_xfade-help.pd
rename to externals/rjlib/rj/c_xfade-help.pd
diff --git a/l2ork_addons/rjlib/rj/c_xfade.pd b/externals/rjlib/rj/c_xfade.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/c_xfade.pd
rename to externals/rjlib/rj/c_xfade.pd
diff --git a/l2ork_addons/rjlib/rj/e.txt b/externals/rjlib/rj/e.txt
similarity index 100%
rename from l2ork_addons/rjlib/rj/e.txt
rename to externals/rjlib/rj/e.txt
diff --git a/l2ork_addons/rjlib/rj/e_alias-help.pd b/externals/rjlib/rj/e_alias-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_alias-help.pd
rename to externals/rjlib/rj/e_alias-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_alias.pd b/externals/rjlib/rj/e_alias.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_alias.pd
rename to externals/rjlib/rj/e_alias.pd
diff --git a/l2ork_addons/rjlib/rj/e_chorus-help.pd b/externals/rjlib/rj/e_chorus-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_chorus-help.pd
rename to externals/rjlib/rj/e_chorus-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_chorus.pd b/externals/rjlib/rj/e_chorus.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_chorus.pd
rename to externals/rjlib/rj/e_chorus.pd
diff --git a/l2ork_addons/rjlib/rj/e_chorusr-help.pd b/externals/rjlib/rj/e_chorusr-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_chorusr-help.pd
rename to externals/rjlib/rj/e_chorusr-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_chorusr.pd b/externals/rjlib/rj/e_chorusr.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_chorusr.pd
rename to externals/rjlib/rj/e_chorusr.pd
diff --git a/l2ork_addons/rjlib/rj/e_fbdelay-help.pd b/externals/rjlib/rj/e_fbdelay-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_fbdelay-help.pd
rename to externals/rjlib/rj/e_fbdelay-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_fbdelay.pd b/externals/rjlib/rj/e_fbdelay.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_fbdelay.pd
rename to externals/rjlib/rj/e_fbdelay.pd
diff --git a/l2ork_addons/rjlib/rj/e_fbdelay2.pd b/externals/rjlib/rj/e_fbdelay2.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_fbdelay2.pd
rename to externals/rjlib/rj/e_fbdelay2.pd
diff --git a/l2ork_addons/rjlib/rj/e_freqshift-help.pd b/externals/rjlib/rj/e_freqshift-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_freqshift-help.pd
rename to externals/rjlib/rj/e_freqshift-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_freqshift.pd b/externals/rjlib/rj/e_freqshift.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_freqshift.pd
rename to externals/rjlib/rj/e_freqshift.pd
diff --git a/l2ork_addons/rjlib/rj/e_pan-help.pd b/externals/rjlib/rj/e_pan-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pan-help.pd
rename to externals/rjlib/rj/e_pan-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_pan.pd b/externals/rjlib/rj/e_pan.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pan.pd
rename to externals/rjlib/rj/e_pan.pd
diff --git a/l2ork_addons/rjlib/rj/e_phaser-help.pd b/externals/rjlib/rj/e_phaser-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_phaser-help.pd
rename to externals/rjlib/rj/e_phaser-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_phaser.pd b/externals/rjlib/rj/e_phaser.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_phaser.pd
rename to externals/rjlib/rj/e_phaser.pd
diff --git a/l2ork_addons/rjlib/rj/e_pingpong-help.pd b/externals/rjlib/rj/e_pingpong-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pingpong-help.pd
rename to externals/rjlib/rj/e_pingpong-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_pingpong.pd b/externals/rjlib/rj/e_pingpong.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pingpong.pd
rename to externals/rjlib/rj/e_pingpong.pd
diff --git a/l2ork_addons/rjlib/rj/e_pitchshift-help.pd b/externals/rjlib/rj/e_pitchshift-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pitchshift-help.pd
rename to externals/rjlib/rj/e_pitchshift-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_pitchshift.pd b/externals/rjlib/rj/e_pitchshift.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_pitchshift.pd
rename to externals/rjlib/rj/e_pitchshift.pd
diff --git a/l2ork_addons/rjlib/rj/e_reslop-help.pd b/externals/rjlib/rj/e_reslop-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_reslop-help.pd
rename to externals/rjlib/rj/e_reslop-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_reslop.pd b/externals/rjlib/rj/e_reslop.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_reslop.pd
rename to externals/rjlib/rj/e_reslop.pd
diff --git a/l2ork_addons/rjlib/rj/e_reverb-help.pd b/externals/rjlib/rj/e_reverb-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_reverb-help.pd
rename to externals/rjlib/rj/e_reverb-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_reverb.pd b/externals/rjlib/rj/e_reverb.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_reverb.pd
rename to externals/rjlib/rj/e_reverb.pd
diff --git a/l2ork_addons/rjlib/rj/e_softclip-help.pd b/externals/rjlib/rj/e_softclip-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_softclip-help.pd
rename to externals/rjlib/rj/e_softclip-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_softclip.pd b/externals/rjlib/rj/e_softclip.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_softclip.pd
rename to externals/rjlib/rj/e_softclip.pd
diff --git a/l2ork_addons/rjlib/rj/e_vocoder-help.pd b/externals/rjlib/rj/e_vocoder-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_vocoder-help.pd
rename to externals/rjlib/rj/e_vocoder-help.pd
diff --git a/l2ork_addons/rjlib/rj/e_vocoder.pd b/externals/rjlib/rj/e_vocoder.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/e_vocoder.pd
rename to externals/rjlib/rj/e_vocoder.pd
diff --git a/l2ork_addons/rjlib/rj/jon~.pd b/externals/rjlib/rj/jon~.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/jon~.pd
rename to externals/rjlib/rj/jon~.pd
diff --git a/l2ork_addons/rjlib/rj/m.txt b/externals/rjlib/rj/m.txt
similarity index 100%
rename from l2ork_addons/rjlib/rj/m.txt
rename to externals/rjlib/rj/m.txt
diff --git a/l2ork_addons/rjlib/rj/m_bpm2ms-help.pd b/externals/rjlib/rj/m_bpm2ms-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_bpm2ms-help.pd
rename to externals/rjlib/rj/m_bpm2ms-help.pd
diff --git a/l2ork_addons/rjlib/rj/m_bpm2ms.pd b/externals/rjlib/rj/m_bpm2ms.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_bpm2ms.pd
rename to externals/rjlib/rj/m_bpm2ms.pd
diff --git a/l2ork_addons/rjlib/rj/m_scale-help.pd b/externals/rjlib/rj/m_scale-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_scale-help.pd
rename to externals/rjlib/rj/m_scale-help.pd
diff --git a/l2ork_addons/rjlib/rj/m_scale.pd b/externals/rjlib/rj/m_scale.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_scale.pd
rename to externals/rjlib/rj/m_scale.pd
diff --git a/l2ork_addons/rjlib/rj/m_speedlimit-help.pd b/externals/rjlib/rj/m_speedlimit-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_speedlimit-help.pd
rename to externals/rjlib/rj/m_speedlimit-help.pd
diff --git a/l2ork_addons/rjlib/rj/m_speedlimit.pd b/externals/rjlib/rj/m_speedlimit.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/m_speedlimit.pd
rename to externals/rjlib/rj/m_speedlimit.pd
diff --git a/l2ork_addons/rjlib/rj/rjdispatch-help.pd b/externals/rjlib/rj/rjdispatch-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/rjdispatch-help.pd
rename to externals/rjlib/rj/rjdispatch-help.pd
diff --git a/l2ork_addons/rjlib/rj/rjdispatch.pd b/externals/rjlib/rj/rjdispatch.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/rjdispatch.pd
rename to externals/rjlib/rj/rjdispatch.pd
diff --git a/l2ork_addons/rjlib/rj/rjloader-help.pd b/externals/rjlib/rj/rjloader-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/rjloader-help.pd
rename to externals/rjlib/rj/rjloader-help.pd
diff --git a/l2ork_addons/rjlib/rj/rjloader.pd b/externals/rjlib/rj/rjloader.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/rjloader.pd
rename to externals/rjlib/rj/rjloader.pd
diff --git a/l2ork_addons/rjlib/rj/s.txt b/externals/rjlib/rj/s.txt
similarity index 100%
rename from l2ork_addons/rjlib/rj/s.txt
rename to externals/rjlib/rj/s.txt
diff --git a/l2ork_addons/rjlib/rj/s_blsaw-help.pd b/externals/rjlib/rj/s_blsaw-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_blsaw-help.pd
rename to externals/rjlib/rj/s_blsaw-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_blsaw.pd b/externals/rjlib/rj/s_blsaw.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_blsaw.pd
rename to externals/rjlib/rj/s_blsaw.pd
diff --git a/l2ork_addons/rjlib/rj/s_blsquare-help.pd b/externals/rjlib/rj/s_blsquare-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_blsquare-help.pd
rename to externals/rjlib/rj/s_blsquare-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_blsquare.pd b/externals/rjlib/rj/s_blsquare.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_blsquare.pd
rename to externals/rjlib/rj/s_blsquare.pd
diff --git a/l2ork_addons/rjlib/rj/s_buzz-help.pd b/externals/rjlib/rj/s_buzz-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_buzz-help.pd
rename to externals/rjlib/rj/s_buzz-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_buzz.pd b/externals/rjlib/rj/s_buzz.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_buzz.pd
rename to externals/rjlib/rj/s_buzz.pd
diff --git a/l2ork_addons/rjlib/rj/s_fplaytable.pd b/externals/rjlib/rj/s_fplaytable.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_fplaytable.pd
rename to externals/rjlib/rj/s_fplaytable.pd
diff --git a/l2ork_addons/rjlib/rj/s_fplaytable2.pd b/externals/rjlib/rj/s_fplaytable2.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_fplaytable2.pd
rename to externals/rjlib/rj/s_fplaytable2.pd
diff --git a/l2ork_addons/rjlib/rj/s_guitar-help.pd b/externals/rjlib/rj/s_guitar-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_guitar-help.pd
rename to externals/rjlib/rj/s_guitar-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_guitar.pd b/externals/rjlib/rj/s_guitar.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_guitar.pd
rename to externals/rjlib/rj/s_guitar.pd
diff --git a/l2ork_addons/rjlib/rj/s_looper-help.pd b/externals/rjlib/rj/s_looper-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_looper-help.pd
rename to externals/rjlib/rj/s_looper-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_looper.pd b/externals/rjlib/rj/s_looper.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_looper.pd
rename to externals/rjlib/rj/s_looper.pd
diff --git a/l2ork_addons/rjlib/rj/s_playtable-help.pd b/externals/rjlib/rj/s_playtable-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_playtable-help.pd
rename to externals/rjlib/rj/s_playtable-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_playtable.pd b/externals/rjlib/rj/s_playtable.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_playtable.pd
rename to externals/rjlib/rj/s_playtable.pd
diff --git a/l2ork_addons/rjlib/rj/s_playtable2-help.pd b/externals/rjlib/rj/s_playtable2-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_playtable2-help.pd
rename to externals/rjlib/rj/s_playtable2-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_playtable2.pd b/externals/rjlib/rj/s_playtable2.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_playtable2.pd
rename to externals/rjlib/rj/s_playtable2.pd
diff --git a/l2ork_addons/rjlib/rj/s_rhodey-help.pd b/externals/rjlib/rj/s_rhodey-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_rhodey-help.pd
rename to externals/rjlib/rj/s_rhodey-help.pd
diff --git a/l2ork_addons/rjlib/rj/s_rhodey.pd b/externals/rjlib/rj/s_rhodey.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/s_rhodey.pd
rename to externals/rjlib/rj/s_rhodey.pd
diff --git a/l2ork_addons/rjlib/rj/sssad.pd b/externals/rjlib/rj/sssad.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/sssad.pd
rename to externals/rjlib/rj/sssad.pd
diff --git a/l2ork_addons/rjlib/rj/u.txt b/externals/rjlib/rj/u.txt
similarity index 100%
rename from l2ork_addons/rjlib/rj/u.txt
rename to externals/rjlib/rj/u.txt
diff --git a/l2ork_addons/rjlib/rj/u_fade-help.pd b/externals/rjlib/rj/u_fade-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_fade-help.pd
rename to externals/rjlib/rj/u_fade-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_fade.pd b/externals/rjlib/rj/u_fade.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_fade.pd
rename to externals/rjlib/rj/u_fade.pd
diff --git a/l2ork_addons/rjlib/rj/u_record-help.pd b/externals/rjlib/rj/u_record-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_record-help.pd
rename to externals/rjlib/rj/u_record-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_record.pd b/externals/rjlib/rj/u_record.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_record.pd
rename to externals/rjlib/rj/u_record.pd
diff --git a/l2ork_addons/rjlib/rj/u_samplebank-help.pd b/externals/rjlib/rj/u_samplebank-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_samplebank-help.pd
rename to externals/rjlib/rj/u_samplebank-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_samplebank.pd b/externals/rjlib/rj/u_samplebank.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_samplebank.pd
rename to externals/rjlib/rj/u_samplebank.pd
diff --git a/l2ork_addons/rjlib/rj/u_samplebank2-help.pd b/externals/rjlib/rj/u_samplebank2-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_samplebank2-help.pd
rename to externals/rjlib/rj/u_samplebank2-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_samplebank2.pd b/externals/rjlib/rj/u_samplebank2.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_samplebank2.pd
rename to externals/rjlib/rj/u_samplebank2.pd
diff --git a/l2ork_addons/rjlib/rj/u_splicetrans-help.pd b/externals/rjlib/rj/u_splicetrans-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_splicetrans-help.pd
rename to externals/rjlib/rj/u_splicetrans-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_splicetrans.pd b/externals/rjlib/rj/u_splicetrans.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_splicetrans.pd
rename to externals/rjlib/rj/u_splicetrans.pd
diff --git a/l2ork_addons/rjlib/rj/u_stereo-help.pd b/externals/rjlib/rj/u_stereo-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_stereo-help.pd
rename to externals/rjlib/rj/u_stereo-help.pd
diff --git a/l2ork_addons/rjlib/rj/u_stereo.pd b/externals/rjlib/rj/u_stereo.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj/u_stereo.pd
rename to externals/rjlib/rj/u_stereo.pd
diff --git a/l2ork_addons/rjlib/rjXYZshake-help.pd b/externals/rjlib/rjXYZshake-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjXYZshake-help.pd
rename to externals/rjlib/rjXYZshake-help.pd
diff --git a/l2ork_addons/rjlib/rjXYZshake.pd b/externals/rjlib/rjXYZshake.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjXYZshake.pd
rename to externals/rjlib/rjXYZshake.pd
diff --git a/l2ork_addons/rjlib/rj_fft.pd b/externals/rjlib/rj_fft.pd
similarity index 100%
rename from l2ork_addons/rjlib/rj_fft.pd
rename to externals/rjlib/rj_fft.pd
diff --git a/l2ork_addons/rjlib/rjdispatch-help.pd b/externals/rjlib/rjdispatch-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjdispatch-help.pd
rename to externals/rjlib/rjdispatch-help.pd
diff --git a/l2ork_addons/rjlib/rjdispatch.pd b/externals/rjlib/rjdispatch.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjdispatch.pd
rename to externals/rjlib/rjdispatch.pd
diff --git a/l2ork_addons/rjlib/rjloader-help.pd b/externals/rjlib/rjloader-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjloader-help.pd
rename to externals/rjlib/rjloader-help.pd
diff --git a/l2ork_addons/rjlib/rjloader.pd b/externals/rjlib/rjloader.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjloader.pd
rename to externals/rjlib/rjloader.pd
diff --git a/l2ork_addons/rjlib/rjsave-ex-help.pd b/externals/rjlib/rjsave-ex-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjsave-ex-help.pd
rename to externals/rjlib/rjsave-ex-help.pd
diff --git a/l2ork_addons/rjlib/rjsave-ex.pd b/externals/rjlib/rjsave-ex.pd
similarity index 100%
rename from l2ork_addons/rjlib/rjsave-ex.pd
rename to externals/rjlib/rjsave-ex.pd
diff --git a/l2ork_addons/rjlib/soundinput.pd b/externals/rjlib/soundinput.pd
similarity index 100%
rename from l2ork_addons/rjlib/soundinput.pd
rename to externals/rjlib/soundinput.pd
diff --git a/l2ork_addons/rjlib/soundoutput.pd b/externals/rjlib/soundoutput.pd
similarity index 100%
rename from l2ork_addons/rjlib/soundoutput.pd
rename to externals/rjlib/soundoutput.pd
diff --git a/l2ork_addons/rjlib/src/makefile b/externals/rjlib/src/makefile
similarity index 100%
rename from l2ork_addons/rjlib/src/makefile
rename to externals/rjlib/src/makefile
diff --git a/l2ork_addons/rjlib/src/makefile_mingw b/externals/rjlib/src/makefile_mingw
similarity index 100%
rename from l2ork_addons/rjlib/src/makefile_mingw
rename to externals/rjlib/src/makefile_mingw
diff --git a/l2ork_addons/rjlib/src/rj_accum-help.pd b/externals/rjlib/src/rj_accum-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_accum-help.pd
rename to externals/rjlib/src/rj_accum-help.pd
diff --git a/l2ork_addons/rjlib/src/rj_accum.c b/externals/rjlib/src/rj_accum.c
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_accum.c
rename to externals/rjlib/src/rj_accum.c
diff --git a/l2ork_addons/rjlib/src/rj_barkflux_accum~-help.pd b/externals/rjlib/src/rj_barkflux_accum~-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_barkflux_accum~-help.pd
rename to externals/rjlib/src/rj_barkflux_accum~-help.pd
diff --git a/l2ork_addons/rjlib/src/rj_barkflux_accum~.c b/externals/rjlib/src/rj_barkflux_accum~.c
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_barkflux_accum~.c
rename to externals/rjlib/src/rj_barkflux_accum~.c
diff --git a/l2ork_addons/rjlib/src/rj_centroid~-help.pd b/externals/rjlib/src/rj_centroid~-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_centroid~-help.pd
rename to externals/rjlib/src/rj_centroid~-help.pd
diff --git a/l2ork_addons/rjlib/src/rj_centroid~.c b/externals/rjlib/src/rj_centroid~.c
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_centroid~.c
rename to externals/rjlib/src/rj_centroid~.c
diff --git a/l2ork_addons/rjlib/src/rj_senergy~-help.pd b/externals/rjlib/src/rj_senergy~-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_senergy~-help.pd
rename to externals/rjlib/src/rj_senergy~-help.pd
diff --git a/l2ork_addons/rjlib/src/rj_senergy~.c b/externals/rjlib/src/rj_senergy~.c
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_senergy~.c
rename to externals/rjlib/src/rj_senergy~.c
diff --git a/l2ork_addons/rjlib/src/rj_zcr~-help.pd b/externals/rjlib/src/rj_zcr~-help.pd
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_zcr~-help.pd
rename to externals/rjlib/src/rj_zcr~-help.pd
diff --git a/l2ork_addons/rjlib/src/rj_zcr~.c b/externals/rjlib/src/rj_zcr~.c
similarity index 100%
rename from l2ork_addons/rjlib/src/rj_zcr~.c
rename to externals/rjlib/src/rj_zcr~.c
diff --git a/l2ork_addons/rjlib/sssad.pd b/externals/rjlib/sssad.pd
similarity index 100%
rename from l2ork_addons/rjlib/sssad.pd
rename to externals/rjlib/sssad.pd
diff --git a/l2ork_addons/rjlib/touch.pd b/externals/rjlib/touch.pd
similarity index 100%
rename from l2ork_addons/rjlib/touch.pd
rename to externals/rjlib/touch.pd
diff --git a/l2ork_addons/tar_em_up.sh b/l2ork_addons/tar_em_up.sh
index 49b729abb..c31ac9890 100755
--- a/l2ork_addons/tar_em_up.sh
+++ b/l2ork_addons/tar_em_up.sh
@@ -292,8 +292,6 @@ then
 	cp -f array* ../../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
 	# return to l2ork_addons folder
 	cd ../../
-	# copy rjlib into the extra folder
-	cp -rf rjlib ../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra
 	# install raspberry pi externals (if applicable)
 	#if [ $rpi -eq 1 ]
 	#then
-- 
GitLab