diff options
Diffstat (limited to 'muse2/plugins/freeverb')
| -rw-r--r-- | muse2/plugins/freeverb/Makefile.am | 17 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/Makefile.in | 672 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/allpass.h | 50 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/comb.h | 66 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/denormals.h | 28 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/freeverb.cpp | 166 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/readme.txt | 147 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/revmodel.cpp | 232 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/revmodel.h | 79 | ||||
| -rw-r--r-- | muse2/plugins/freeverb/tuning.h | 60 | 
10 files changed, 1517 insertions, 0 deletions
diff --git a/muse2/plugins/freeverb/Makefile.am b/muse2/plugins/freeverb/Makefile.am new file mode 100644 index 00000000..81dbec2d --- /dev/null +++ b/muse2/plugins/freeverb/Makefile.am @@ -0,0 +1,17 @@ +include $(top_srcdir)/common.am +include $(top_srcdir)/plugins/plugins-install.am + +AM_CXXFLAGS += -O3 -fno-exceptions -fno-rtti -ffast-math + +plugins_LTLIBRARIES = freeverb.la + +plugins_DATA = + +freeverb_la_SOURCES = \ +	freeverb.cpp \ +	revmodel.cpp revmodel.h \ +	allpass.h comb.h denormals.h tuning.h	 +freeverb_la_LDFLAGS = -module -avoid-version + +EXTRA_DIST = readme.txt + diff --git a/muse2/plugins/freeverb/Makefile.in b/muse2/plugins/freeverb/Makefile.in new file mode 100644 index 00000000..394c9cbd --- /dev/null +++ b/muse2/plugins/freeverb/Makefile.in @@ -0,0 +1,672 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +	$(top_srcdir)/common.am \ +	$(top_srcdir)/plugins/plugins-install.am +subdir = plugins/freeverb +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \ +	$(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \ +	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ +	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ +	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +	$(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ +    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ +    *) f=$$p;; \ +  esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ +  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ +  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ +  for p in $$list; do echo "$$p $$p"; done | \ +  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ +  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ +    if (++n[$$2] == $(am__install_max)) \ +      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ +    END { for (dir in files) print dir, files[dir] }' +am__base_list = \ +  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ +  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)" +LTLIBRARIES = $(plugins_LTLIBRARIES) +freeverb_la_LIBADD = +am_freeverb_la_OBJECTS = freeverb.lo revmodel.lo +freeverb_la_OBJECTS = $(am_freeverb_la_OBJECTS) +freeverb_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ +	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ +	$(CXXFLAGS) $(freeverb_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ +	$(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +	$(LDFLAGS) -o $@ +SOURCES = $(freeverb_la_SOURCES) +DIST_SOURCES = $(freeverb_la_SOURCES) +DATA = $(plugins_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOKSTYLE = @DOCBOOKSTYLE@ +DOCBOOKTARGETS = @DOCBOOKTARGETS@ +DOT = @DOT@ +DOTPATH = @DOTPATH@ +DOXYGEN = @DOXYGEN@ +DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@ +FST_CFLAGS = @FST_CFLAGS@ +FST_LIBS = @FST_LIBS@ +Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@ +Fluidsynth_LIBS = @Fluidsynth_LIBS@ +GIVERTCAP = @GIVERTCAP@ +GREP = @GREP@ +HAVEDOT = @HAVEDOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +JADE = @JADE@ +LASH_CFLAGS = @LASH_CFLAGS@ +LASH_LIBS = @LASH_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LO_CFLAGS = @LO_CFLAGS@ +LO_LIBS = @LO_LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MUSECXXFLAGS = @MUSECXXFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSGMLS = @NSGMLS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCH = @PCH@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIB = @PYTHON_LIB@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QTDIR_BIN = @QTDIR_BIN@ +QTDIR_INC = @QTDIR_INC@ +QT_LIBS = @QT_LIBS@ +RANLIB = @RANLIB@ +SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@ +SAMPLERATE_LIBS = @SAMPLERATE_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +STRIP = @STRIP@ +SUIDBUILD = @SUIDBUILD@ +SUIDINSTALL = @SUIDINSTALL@ +USE_SSE = @USE_SSE@ +UUID_CFLAGS = @UUID_CFLAGS@ +UUID_LIBS = @UUID_LIBS@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +have_docbook = @have_docbook@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +synth_fluid = @synth_fluid@ +synth_fluidsynth = @synth_fluidsynth@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \ +	-I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \ +	-DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -O3 -fno-exceptions \ +	-fno-rtti -ffast-math +AM_CPPFLAGS =  +MOC = $(QTDIR_BIN)/moc +#UIC = $(QTDIR_BIN)/uic3 +UIC = /usr/bin/uic3 +UIFILES = $(wildcard *.ui) +MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \ +		     if grep -q Q_OBJECT $$h; then \ +		       echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \ +		     fi; \ +		   done) + +BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) +MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h) +SUFFIXES = .ui .h.gch +pluginsdir = $(pkglibdir)/plugins +plugins_LTLIBRARIES = freeverb.la +plugins_DATA =  +freeverb_la_SOURCES = \ +	freeverb.cpp \ +	revmodel.cpp revmodel.h \ +	allpass.h comb.h denormals.h tuning.h	 + +freeverb_la_LDFLAGS = -module -avoid-version +EXTRA_DIST = readme.txt +all: $(BUILT_SOURCES) +	$(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .ui .h.gch .cpp .lo .o .obj +$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/common.am $(top_srcdir)/plugins/plugins-install.am $(am__configure_deps) +	@for dep in $?; do \ +	  case '$(am__configure_deps)' in \ +	    *$$dep*) \ +	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ +	        && { if test -f $@; then exit 0; else break; fi; }; \ +	      exit 1;; \ +	  esac; \ +	done; \ +	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/freeverb/Makefile'; \ +	$(am__cd) $(top_srcdir) && \ +	  $(AUTOMAKE) --gnu plugins/freeverb/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +	@case '$?' in \ +	  *config.status*) \ +	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +	  *) \ +	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +	esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure:  $(am__configure_deps) +	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4):  $(am__aclocal_m4_deps) +	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginsLTLIBRARIES: $(plugins_LTLIBRARIES) +	@$(NORMAL_INSTALL) +	test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" +	@list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ +	list2=; for p in $$list; do \ +	  if test -f $$p; then \ +	    list2="$$list2 $$p"; \ +	  else :; fi; \ +	done; \ +	test -z "$$list2" || { \ +	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pluginsdir)'"; \ +	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pluginsdir)"; \ +	} + +uninstall-pluginsLTLIBRARIES: +	@$(NORMAL_UNINSTALL) +	@list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ +	for p in $$list; do \ +	  $(am__strip_dir) \ +	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pluginsdir)/$$f'"; \ +	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pluginsdir)/$$f"; \ +	done + +clean-pluginsLTLIBRARIES: +	-test -z "$(plugins_LTLIBRARIES)" || rm -f $(plugins_LTLIBRARIES) +	@list='$(plugins_LTLIBRARIES)'; for p in $$list; do \ +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ +	  test "$$dir" != "$$p" || dir=.; \ +	  echo "rm -f \"$${dir}/so_locations\""; \ +	  rm -f "$${dir}/so_locations"; \ +	done +freeverb.la: $(freeverb_la_OBJECTS) $(freeverb_la_DEPENDENCIES)  +	$(freeverb_la_LINK) -rpath $(pluginsdir) $(freeverb_la_OBJECTS) $(freeverb_la_LIBADD) $(LIBS) + +mostlyclean-compile: +	-rm -f *.$(OBJEXT) + +distclean-compile: +	-rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freeverb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/revmodel.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: +	-rm -f *.lo + +clean-libtool: +	-rm -rf .libs _libs +install-pluginsDATA: $(plugins_DATA) +	@$(NORMAL_INSTALL) +	test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" +	@list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ +	for p in $$list; do \ +	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ +	  echo "$$d$$p"; \ +	done | $(am__base_list) | \ +	while read files; do \ +	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pluginsdir)'"; \ +	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pluginsdir)" || exit $$?; \ +	done + +uninstall-pluginsDATA: +	@$(NORMAL_UNINSTALL) +	@list='$(plugins_DATA)'; test -n "$(pluginsdir)" || list=; \ +	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ +	test -n "$$files" || exit 0; \ +	echo " ( cd '$(DESTDIR)$(pluginsdir)' && rm -f" $$files ")"; \ +	cd "$(DESTDIR)$(pluginsdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	mkid -fID $$unique +tags: TAGS + +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ +		$(TAGS_FILES) $(LISP) +	set x; \ +	here=`pwd`; \ +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	shift; \ +	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ +	  test -n "$$unique" || unique=$$empty_fix; \ +	  if test $$# -gt 0; then \ +	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +	      "$$@" $$unique; \ +	  else \ +	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +	      $$unique; \ +	  fi; \ +	fi +ctags: CTAGS +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ +		$(TAGS_FILES) $(LISP) +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ +	unique=`for i in $$list; do \ +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +	  done | \ +	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +	      END { if (nonempty) { for (i in files) print i; }; }'`; \ +	test -z "$(CTAGS_ARGS)$$unique" \ +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +	     $$unique + +GTAGS: +	here=`$(am__cd) $(top_builddir) && pwd` \ +	  && $(am__cd) $(top_srcdir) \ +	  && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) +	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +	list='$(DISTFILES)'; \ +	  dist_files=`for file in $$list; do echo $$file; done | \ +	  sed -e "s|^$$srcdirstrip/||;t" \ +	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ +	case $$dist_files in \ +	  */*) $(MKDIR_P) `echo "$$dist_files" | \ +			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ +			   sort -u` ;; \ +	esac; \ +	for file in $$dist_files; do \ +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +	  if test -d $$d/$$file; then \ +	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ +	    if test -d "$(distdir)/$$file"; then \ +	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +	    fi; \ +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ +	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +	    fi; \ +	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ +	  else \ +	    test -f "$(distdir)/$$file" \ +	    || cp -p $$d/$$file "$(distdir)/$$file" \ +	    || exit 1; \ +	  fi; \ +	done +check-am: all-am +check: $(BUILT_SOURCES) +	$(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: +	for dir in "$(DESTDIR)$(pluginsdir)" "$(DESTDIR)$(pluginsdir)"; do \ +	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \ +	done +install: $(BUILT_SOURCES) +	$(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +	  `test -z '$(STRIP)' || \ +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: +	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: +	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: +	@echo "This command is intended for maintainers to use" +	@echo "it deletes files that may require special tools to rebuild." +	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginsLTLIBRARIES \ +	mostlyclean-am + +distclean: distclean-am +	-rm -rf ./$(DEPDIR) +	-rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ +	distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginsDATA install-pluginsLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am +	-rm -rf ./$(DEPDIR) +	-rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +	mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ +	clean-libtool clean-pluginsLTLIBRARIES ctags distclean \ +	distclean-compile distclean-generic distclean-libtool \ +	distclean-tags distdir dvi dvi-am html html-am info info-am \ +	install install-am install-data install-data-am install-dvi \ +	install-dvi-am install-exec install-exec-am install-html \ +	install-html-am install-info install-info-am install-man \ +	install-pdf install-pdf-am install-pluginsDATA \ +	install-pluginsLTLIBRARIES install-ps install-ps-am \ +	install-strip installcheck installcheck-am installdirs \ +	maintainer-clean maintainer-clean-generic mostlyclean \ +	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ +	pdf pdf-am ps ps-am tags uninstall uninstall-am \ +	uninstall-pluginsDATA uninstall-pluginsLTLIBRARIES + + +de: +	@for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done + +nde: +	@for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done + +.ui.o: %.h +	$(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui +	$(MOC) $*.h >> $*.cpp +	$(CXXCOMPILE) -c $*.cpp -o $*.o +	$(RM) $*.cpp moc_$*.cpp moc_$*.o + +.ui.lo: %.h +	$(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui +	$(MOC) $*.h >> $*.cpp +	$(LTCXXCOMPILE) -c $*.cpp -o $*.lo +	$(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o + +moc_%.cpp: %.h +	$(MOC) $< -o $@ + +%.h: %.ui +	$(UIC)  -o $@ $< +#	$(UIC) -L $(top_srcdir)/muse/widgets -o $@ $< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/muse2/plugins/freeverb/allpass.h b/muse2/plugins/freeverb/allpass.h new file mode 100644 index 00000000..4eb1c1a0 --- /dev/null +++ b/muse2/plugins/freeverb/allpass.h @@ -0,0 +1,50 @@ +// Allpass filter declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _allpass_ +#define _allpass_ +#include "denormals.h" + +//--------------------------------------------------------- +//   allpass +//--------------------------------------------------------- + +class allpass +      { +	float	feedback; +	float	*buffer; +	int bufsize; +	int bufidx; + +   public: +      allpass() { bufidx = 0; } +	void	setbuffer(float *buf, int size) { +      	buffer = buf; +	      bufsize = size; +            } +      float process(float input) { +	      float bufout = buffer[bufidx]; +      	undenormalise(bufout); +	      float output = -input + bufout; +      	buffer[bufidx] = input + (bufout*feedback); +            if (++bufidx >= bufsize) +                  bufidx = 0; +//            bufidx = ++bufidx % bufsize; +      	return output; +            } +	void	mute() { +      	for (int i=0; i<bufsize; i++) +	      	buffer[i]=0; +            } +	void	setfeedback(float val)  { feedback = val; } +	float	getfeedback()           { return feedback; } +      }; + + +// Big to inline - but crucial for speed + + +#endif//_allpass diff --git a/muse2/plugins/freeverb/comb.h b/muse2/plugins/freeverb/comb.h new file mode 100644 index 00000000..d2e0f871 --- /dev/null +++ b/muse2/plugins/freeverb/comb.h @@ -0,0 +1,66 @@ +// Comb filter class declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _comb_ +#define _comb_ + +#include "denormals.h" + + +//--------------------------------------------------------- +//   comb +//--------------------------------------------------------- + +class comb +      { +	float	feedback; +	float	filterstore; +	float	damp1; +	float	damp2; +	float	*buffer; +	int bufsize; +	int bufidx; + +public: +      comb() { +	      filterstore = 0; +	      bufidx = 0; +            } +	void	setbuffer(float *buf, int size) { +	      buffer = buf; +	      bufsize = size; +            } +      float process(float input) { +      	float output = buffer[bufidx]; +	      undenormalise(output); +      	filterstore = (output*damp2) + (filterstore*damp1); +	      undenormalise(filterstore); +      	buffer[bufidx] = input + (filterstore*feedback); +            if (++bufidx >= bufsize) +                  bufidx = 0; +//            bufidx = ++bufidx % bufsize; +      	return output; +            } +	void	mute() { +      	for (int i=0; i<bufsize; i++) +	      	buffer[i]=0; +            } +	void	setdamp(float val) { +	      damp1 = val; +	      damp2 = 1-val; +            } +	float	getdamp()              { return damp1; } +	void	setfeedback(float val) { feedback = val; } +	float	getfeedback()          { return feedback; } +      }; + + +// Big to inline - but crucial for speed + + +#endif //_comb_ + +//ends diff --git a/muse2/plugins/freeverb/denormals.h b/muse2/plugins/freeverb/denormals.h new file mode 100644 index 00000000..d18412b4 --- /dev/null +++ b/muse2/plugins/freeverb/denormals.h @@ -0,0 +1,28 @@ +// Macro for killing denormalled numbers +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// Based on IS_DENORMAL macro by Jon Watte +// This code is public domain + +#ifndef _denormals_ +#define _denormals_ + +// this does not work with at least gcc3.3 and -O2: +// #define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f +// +// from Laurent de Soras Paper: Denormal numbers in floating point +//    signal processing applications +// (ws) + +#define undenormalise(sample)       \ +      {                             \ +      float anti_denormal = 1e-18;  \ +      sample += anti_denormal;      \ +      sample -= anti_denormal;      \ +      } + +#endif//_denormals_ + +//ends + diff --git a/muse2/plugins/freeverb/freeverb.cpp b/muse2/plugins/freeverb/freeverb.cpp new file mode 100644 index 00000000..0385e887 --- /dev/null +++ b/muse2/plugins/freeverb/freeverb.cpp @@ -0,0 +1,166 @@ +//========================================================= +//  MusE +//  Linux Music Editor +//    $Id: freeverb.cpp,v 1.1.1.1 2003/10/27 18:57:03 wschweer Exp $ +//  (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "revmodel.h" + +//--------------------------------------------------------- +//   instantiateFreeverb +//    Construct a new plugin instance. +//--------------------------------------------------------- + +LADSPA_Handle instantiate(const LADSPA_Descriptor* /*Descriptor*/, +   unsigned long /* samplerate*/) +      { +      return new Revmodel; +      } + +//--------------------------------------------------------- +//   connectPortToFreeverb +//    Connect a port to a data location. +//--------------------------------------------------------- + +void connect(LADSPA_Handle Instance, unsigned long port, +   LADSPA_Data* data) +      { +      ((Revmodel *)Instance)->port[port] = data; +      } + +//--------------------------------------------------------- +//   activate +//--------------------------------------------------------- + +void activate(LADSPA_Handle instance) +      { +      ((Revmodel *)instance)->activate(); +      } + +//--------------------------------------------------------- +//   deactivate +//--------------------------------------------------------- + +void deactivate(LADSPA_Handle /*Instance*/) +      { +      } + +//--------------------------------------------------------- +//   runFreeverb +//--------------------------------------------------------- + +void run(LADSPA_Handle Instance, unsigned long n) +      { +      ((Revmodel*)Instance)->processreplace(n); +      } + +//--------------------------------------------------------- +//   runAddingFreeverb +//    *ADD* the output to the output buffer. +//--------------------------------------------------------- + +void runAdding(LADSPA_Handle Instance, unsigned long n) +      { +      ((Revmodel*)Instance)->processmix(n); +      } + +//--------------------------------------------------------- +//   setFreeverbRunAddingGain +//--------------------------------------------------------- + +void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/) +      { +//      ((Freeverb *)Instance)->m_fRunAddingGain = Gain; +      } + +//--------------------------------------------------------- +//   cleanupFreeverb +//--------------------------------------------------------- + +void cleanup(LADSPA_Handle Instance) +      { +      delete (Revmodel *)Instance; +      } + +static const char* portNames[] = { +      "Input (Left)", +      "Input (Right)", +      "Output (Left)", +      "Output (Right)", +      "Room Size", +      "Damping", +      "Wet Level", +      }; + +LADSPA_PortDescriptor portDescriptors[] = { +      LADSPA_PORT_INPUT  | LADSPA_PORT_AUDIO, +      LADSPA_PORT_INPUT  | LADSPA_PORT_AUDIO, +      LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, +      LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, +      LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL, +      LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL, +      LADSPA_PORT_INPUT  | LADSPA_PORT_CONTROL, +      }; + +LADSPA_PortRangeHint portRangeHints[] = { +      { 0, 0.0, 0.0 }, +      { 0, 0.0, 0.0 }, +      { 0, 0.0, 0.0 }, +      { 0, 0.0, 0.0 }, +      { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW,  0.0, 1.0 }, +      { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC, 0.0, 1.0 }, +      { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC, 0.0, 1.0 }, +      }; + +LADSPA_Descriptor descriptor = { +      1050, +      "freeverb1", +      LADSPA_PROPERTY_HARD_RT_CAPABLE, +      "Freeverb", +      "Werner Schweer", +      "None", +      7, +      portDescriptors, +      portNames, +      portRangeHints, +      0,                // impl. data +      instantiate, +      connect, +      activate, +      run, +      runAdding, +      setGain, +      deactivate, +      cleanup +      }; + +//--------------------------------------------------------- +//   _init +//    called automatically when the plugin library is first +//    loaded. +//--------------------------------------------------------- + +void _init() +      { +      } + +//--------------------------------------------------------- +//   _fini +//    called automatically when the library is unloaded. +//--------------------------------------------------------- + +void _fini() +      { +      } + +//--------------------------------------------------------- +//   ladspa_descriptor +//    Return a descriptor of the requested plugin type. +//--------------------------------------------------------- + +const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) +      { +      return (i == 0) ? &descriptor : 0; +      } + diff --git a/muse2/plugins/freeverb/readme.txt b/muse2/plugins/freeverb/readme.txt new file mode 100644 index 00000000..2c1349a3 --- /dev/null +++ b/muse2/plugins/freeverb/readme.txt @@ -0,0 +1,147 @@ +readme from original freeverb-source: +============================================== + + +Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain +----------------------------------------------------------------------- + +Written by Jezar at Dreampoint - http://www.dreampoint.co.uk + + +Introduction +------------ + +Hello. + +I'll try to keep this "readme" reasonably small. +There are few things in the world that I hate more than long "readme" files. +Except "coding conventions" - but more on that later... + +In this zip file you will find two folders of C++ source code: + +"Components" - Contains files that should clean-compile +      ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary +      to make ANY changes to these files to get them to compile, except to make +      up for inadequacies of certain compilers. These files create three classes +      - a comb filter, an allpass filter, and a reverb model made up of a number +      of instances of the filters, with some features to control the filters at +      a macro level. You will need to link these classes into another program that +      interfaces with them. The files in the components drawer are completely +      independant, and can be built without dependancies on anything else. +      Because of the simple interface, it should be possible to interface +      these files to any system - VST, DirectX, anything - without changing +      them AT ALL. + +"FreeverbVST" - Contains a Steinberg VST implementation of this version of +      Freeverb, using the components in (surprise) the components folder. +      It was built on a PC but may compile properly for the Macintosh with +      no problems. I don't know - I don't have a Macintosh. If you've +      figured out how to compile the examples in the Steinberg VST +      Development Kit, then you should easilly figure out how to bring the +      files into a project and get it working in a few minutes. It should +      be very simple. + +Note that this version of Freeverb doesn't contain predelay, or any EQ. +I thought that might make it difficult to understand the "reverb" part of +the code. Once you figure out how Freeverb works, you should find it trivial +to add such features with little CPU overhead. + +Also, the code in this version of Freeverb has been optimised. This has changed +the sound *slightly*, but not significantly compared to how much processing +power it saves. + +Finally, note that there is also a built copy of this version of Freeverb called +"Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for +the Mac or anything else, then you'll need to build it yourself from the code. + + +Technical Explanation +--------------------- + +Freeverb is a simple implementation of the standard Schroeder/Moorer reverb +model. I guess the only reason why it sounds better than other reverbs, +is simply because I spent a long while doing listening tests in order to create +the values found in "tuning.h". It uses 8 comb filters on both the left and right +channels), and you might possibly be able to get away with less if CPU power +is a serious constraint for you. It then feeds the result of the reverb through +4 allpass filters on both the left and right channels. These "smooth" the sound. +Adding more than four allpasses doesn't seem to add anything significant +to the sound, and if you use less, the sound gets a bit "grainy". +The filters on the right channel are slightly detuned compared to the left channel +in order to create a stereo effect. + +Hopefully, you should find the code in the components drawer a model of +brevity and clarity. Notice that I don't use any "coding conventions". +Personally, I think that coding conventions suck. They are meant to make +the code "clearer", but they inevitably do the complete opposite, making +the code completely unfathomable. Anyone whose done Windows programming +with its - frankly stupid - "Hungarian notation" will know exactly what +I mean. Coding conventions typically promote issues that are irrelevant +up to the status of appearing supremely important. It may have helped back +people in the days when compilers where somewhat feeble in their type-safety, +but not in the new millenium with advanced C++ compilers. + +Imagine if we rewrote the English language to conform to coding conventions. +After all, The arguments should be just as valid for the English language as +they are for a computer language. For example, we could put a lower-case "n" +in front of every noun, a lower-case "p" in front of a persons name, +a lower-case "v" in front of every verb, and a lower-case "a" in front +of every adjective. Can you imagine what the English language would look like? +All in the name of "clarity". It's just as stupid to do this for computer +code as it would be to do it for the English language. I hope that the +code for Freeverb in the components drawer demonstrates this, and helps start +a movement back towards sanity in coding practices. + + +Background +---------- + +Why is the Freeverb code now public domain? Simple. I only intended to create +Freeverb to provide me and my friends with studio-quality reverb for free. +I never intended to make any money out of it. However, I simply do not have the +time to develop it any further. I'm working on a "concept album" at the moment, +and I'll never finish it if I spend any more time programming. + +In any case, I make more far money as a contract programmer - making Mobile +Internet products - than I ever could writing plugins, so it simply doesn't +make financial sense for me to spend any more time on it. + +Rather than give Freeverb to any particular individual or organisation +to profit from it, I've decided to give it away to the internet community +at large, so that quality, FREE (or at the very least, low-cost) reverbs can +be developed for all platforms. + +Feel free to use the source code for Freeverb in any of your own products, +whether they are also available for free, or even if they are commercial - +I really don't mind. You may do with the code whatever you wish. If you use +it in a product (whether commercial or not), it would be very nice of you, +if you were to send me a copy of your product - although I appreciate that +this isn't always possible in all circumstances. + +HOWEVER, please don't bug me with questions about how to use this code. +I gave away Freeverb because I don't have time to maintain it. That means +I *certainly* don't have time to answer questions about the source code, so +please don't email questions to me. I *will* ignore them. If you can't figure +the code for Freeverb out - then find somebody who can. I hope that either +way, you enjoy experimenting with it. + + +Disclaimer +---------- + +This software and source code is given away for free, without any warranties +of any kind. It has been given away to the internet community as a free gift, +so please treat it in the same spirit. + + +I hope this code is useful and interesting to you all! +I hope you have lots of fun experimenting with it and make good products! + +Very best regards, +Jezar. +Technology Consultant +Dreampoint Design and Engineering +http://www.dreampoint.co.uk + + +//ends diff --git a/muse2/plugins/freeverb/revmodel.cpp b/muse2/plugins/freeverb/revmodel.cpp new file mode 100644 index 00000000..c72ee22b --- /dev/null +++ b/muse2/plugins/freeverb/revmodel.cpp @@ -0,0 +1,232 @@ +// Reverb model implementation +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#include <stdio.h> +#include "revmodel.h" + +//--------------------------------------------------------- +//   Revmodel +//--------------------------------------------------------- + +Revmodel::Revmodel() +      { +	// Tie the components to their buffers +	combL[0].setbuffer(bufcombL1,combtuningL1); +	combR[0].setbuffer(bufcombR1,combtuningR1); +	combL[1].setbuffer(bufcombL2,combtuningL2); +	combR[1].setbuffer(bufcombR2,combtuningR2); +	combL[2].setbuffer(bufcombL3,combtuningL3); +	combR[2].setbuffer(bufcombR3,combtuningR3); +	combL[3].setbuffer(bufcombL4,combtuningL4); +	combR[3].setbuffer(bufcombR4,combtuningR4); +	combL[4].setbuffer(bufcombL5,combtuningL5); +	combR[4].setbuffer(bufcombR5,combtuningR5); +	combL[5].setbuffer(bufcombL6,combtuningL6); +	combR[5].setbuffer(bufcombR6,combtuningR6); +	combL[6].setbuffer(bufcombL7,combtuningL7); +	combR[6].setbuffer(bufcombR7,combtuningR7); +	combL[7].setbuffer(bufcombL8,combtuningL8); +	combR[7].setbuffer(bufcombR8,combtuningR8); +	allpassL[0].setbuffer(bufallpassL1,allpasstuningL1); +	allpassR[0].setbuffer(bufallpassR1,allpasstuningR1); +	allpassL[1].setbuffer(bufallpassL2,allpasstuningL2); +	allpassR[1].setbuffer(bufallpassR2,allpasstuningR2); +	allpassL[2].setbuffer(bufallpassL3,allpasstuningL3); +	allpassR[2].setbuffer(bufallpassR3,allpasstuningR3); +	allpassL[3].setbuffer(bufallpassL4,allpasstuningL4); +	allpassR[3].setbuffer(bufallpassR4,allpasstuningR4); + +	// Set default values +	allpassL[0].setfeedback(0.5f); +	allpassR[0].setfeedback(0.5f); +	allpassL[1].setfeedback(0.5f); +	allpassR[1].setfeedback(0.5f); +	allpassL[2].setfeedback(0.5f); +	allpassR[2].setfeedback(0.5f); +	allpassL[3].setfeedback(0.5f); +	allpassR[3].setfeedback(0.5f); + +      param[0] = initialroom; +      param[1] = initialdamp; +      param[2] = initialwet; + +	setroomsize(initialroom); +	setdamp(initialdamp); +	setwidth(initialwidth); +	setmode(initialmode); + +	// Buffer will be full of rubbish - so we MUST mute them + +	for (int i = 0; i < numcombs; i++) { +		combL[i].mute(); +		combR[i].mute(); +            } +	for (int i=0;i<numallpasses;i++) { +		allpassL[i].mute(); +		allpassR[i].mute(); +            } +      } + +//--------------------------------------------------------- +//   activate +//--------------------------------------------------------- + +void Revmodel::activate() +      { +      *port[4] = param[0]; +      *port[5] = param[1]; +      *port[6] = param[2]; +      } + +//--------------------------------------------------------- +//   processreplace +//--------------------------------------------------------- + +void Revmodel::processreplace(long n) +      { +      if (param[0] != *port[4]) { +            param[0] = *port[4]; +            setroomsize(param[0]); +            } +      if (param[1] != *port[5]) { +            param[1] = *port[5]; +            setdamp(param[1]); +            } + +      float wet  = (1.0f - *port[6]) * scalewet; +      float dry  = *port[6] * scaledry; +	float wet1 = wet * (width/2 + 0.5f); +	float wet2 = wet * ((1-width)/2); + +	for (int i = 0; i < n; ++i) { +		float outL  = 0; +		float outR  = 0; +		float input = (port[0][i] + port[1][i]) * gain; + +		// Accumulate comb filters in parallel +		for (int k = 0; k < numcombs; k++) { +			outL += combL[k].process(input); +			outR += combR[k].process(input); +		      } + +		// Feed through allpasses in series +		for (int k=0; k < numallpasses; k++) { +			outL = allpassL[k].process(outL); +			outR = allpassR[k].process(outR); +		      } + +		// Calculate output REPLACING anything already there +		port[2][i] = outL*wet1 + outR*wet2 + port[0][i]*dry; +		port[3][i] = outR*wet1 + outL*wet2 + port[1][i]*dry; +	      } +      } + +void Revmodel::processmix(long n) +      { +      if (param[0] != *port[4]) { +            param[0] = *port[4]; +            setroomsize(param[0]); +            } +      if (param[1] != *port[5]) { +            param[1] = *port[5]; +            setdamp(param[1]); +            } + +      float wet  = (1.0f - *port[6]) * scalewet; +      float dry  = *port[6] * scaledry; +	float wet1 = wet * (width/2 + 0.5f); +	float wet2 = wet * ((1-width)/2); + +	for (int i = 0; i < n; ++i) { +		float outL  = 0; +		float outR  = 0; +		float input = (port[0][i] + port[1][i]) * gain; + +		// Accumulate comb filters in parallel +		for (int k = 0; k < numcombs; k++) { +			outL += combL[k].process(input); +			outR += combR[k].process(input); +		      } + +		// Feed through allpasses in series +		for (int k=0; k < numallpasses; k++) { +			outL = allpassL[k].process(outL); +			outR = allpassR[k].process(outR); +		      } + +		// Calculate output REPLACING anything already there +		port[2][i] += outL*wet1 + outR*wet2 + port[0][i]*dry; +		port[3][i] += outR*wet1 + outL*wet2 + port[1][i]*dry; +	      } +      } + +//--------------------------------------------------------- +//   update +//    Recalculate internal values after parameter change +//--------------------------------------------------------- + +void Revmodel::update() +      { +	if (mode >= freezemode) { +		roomsize1 = 1; +		damp1     = 0; +		gain      = muted; +            } +	else { +            roomsize1 = roomsize; +		damp1     = damp; +		gain      = fixedgain; +            } + +	for (int i = 0; i < numcombs; i++) { +		combL[i].setfeedback(roomsize1); +		combR[i].setfeedback(roomsize1); +            } + +	for (int i = 0; i < numcombs; i++) { +		combL[i].setdamp(damp1); +		combR[i].setdamp(damp1); +            } +      } + +// The following get/set functions are not inlined, because +// speed is never an issue when calling them, and also +// because as you develop the reverb model, you may +// wish to take dynamic action when they are called. + +void Revmodel::setroomsize(float value) +      { +	roomsize = (value*scaleroom) + offsetroom; +	update(); +      } + +float Revmodel::getroomsize() +      { +	return (roomsize-offsetroom)/scaleroom; +      } + +void Revmodel::setdamp(float value) +      { +	damp = value*scaledamp; +	update(); +      } + +void Revmodel::setwidth(float value) +      { +	width = value; +	update(); +      } + +void Revmodel::setmode(float value) +      { +	mode = value; +	update(); +      } + +float Revmodel::getmode() +      { +	return (mode >= freezemode) ? 1 : 0; +      } diff --git a/muse2/plugins/freeverb/revmodel.h b/muse2/plugins/freeverb/revmodel.h new file mode 100644 index 00000000..bfa1f0b3 --- /dev/null +++ b/muse2/plugins/freeverb/revmodel.h @@ -0,0 +1,79 @@ +// Reverb model declaration +// +// Written by Jezar at Dreampoint, June 2000 +// http://www.dreampoint.co.uk +// This code is public domain + +#ifndef _revmodel_ +#define _revmodel_ + +#include "comb.h" +#include "allpass.h" +#include "tuning.h" +#include "../../muse/ladspa.h" + +//--------------------------------------------------------- +//   Revmodel +//--------------------------------------------------------- + +class Revmodel { +      float	gain; +      float	roomsize,roomsize1; +      float	damp,damp1; +      float	width; +      float	mode; + +      // Comb filters +      comb combL[numcombs]; +      comb combR[numcombs]; + +      // Allpass filters +      allpass allpassL[numallpasses]; +      allpass allpassR[numallpasses]; + +      // Buffers for the combs +      float	bufcombL1[combtuningL1]; +      float	bufcombR1[combtuningR1]; +      float	bufcombL2[combtuningL2]; +      float	bufcombR2[combtuningR2]; +      float	bufcombL3[combtuningL3]; +      float	bufcombR3[combtuningR3]; +      float	bufcombL4[combtuningL4]; +      float	bufcombR4[combtuningR4]; +      float	bufcombL5[combtuningL5]; +      float	bufcombR5[combtuningR5]; +      float	bufcombL6[combtuningL6]; +      float	bufcombR6[combtuningR6]; +      float	bufcombL7[combtuningL7]; +      float	bufcombR7[combtuningR7]; +      float	bufcombL8[combtuningL8]; +      float	bufcombR8[combtuningR8]; + +      // Buffers for the allpasses +      float	bufallpassL1[allpasstuningL1]; +      float	bufallpassR1[allpasstuningR1]; +      float	bufallpassL2[allpasstuningL2]; +      float	bufallpassR2[allpasstuningR2]; +      float	bufallpassL3[allpasstuningL3]; +      float	bufallpassR3[allpasstuningR3]; +      float	bufallpassL4[allpasstuningL4]; +      float	bufallpassR4[allpasstuningR4]; +      void update(); + +   public: +      LADSPA_Data* port[7]; +      float param[3]; + +      Revmodel(); +	void	processmix(long numsamples); +	void	processreplace(long numsamples); +	void	setroomsize(float value); +	float	getroomsize(); +	void	setdamp(float value); +	void	setwidth(float value); +	void	setmode(float value); +	float	getmode(); +      void activate(); +      }; + +#endif diff --git a/muse2/plugins/freeverb/tuning.h b/muse2/plugins/freeverb/tuning.h new file mode 100644 index 00000000..ced89252 --- /dev/null +++ b/muse2/plugins/freeverb/tuning.h @@ -0,0 +1,60 @@ +// Reverb model tuning values
 +//
 +// Written by Jezar at Dreampoint, June 2000
 +// http://www.dreampoint.co.uk
 +// This code is public domain
 +
 +#ifndef _tuning_
 +#define _tuning_
 +
 +const int	numcombs		= 8;
 +const int	numallpasses	= 4;
 +const float	muted			= 0;
 +const float	fixedgain		= 0.015f;
 +const float scalewet		= 3;
 +const float scaledry		= 2;
 +const float scaledamp		= 0.4f;
 +const float scaleroom		= 0.28f;
 +const float offsetroom		= 0.7f;
 +const float initialroom		= 0.5f;
 +const float initialdamp		= 0.5f;
 +const float initialwet		= 1/scalewet;
 +const float initialdry		= 0;
 +const float initialwidth	= 1;
 +const float initialmode		= 0;
 +const float freezemode		= 0.5f;
 +const int	stereospread	= 23;
 +
 +// These values assume 44.1KHz sample rate
 +// they will probably be OK for 48KHz sample rate
 +// but would need scaling for 96KHz (or other) sample rates.
 +// The values were obtained by listening tests.
 +const int combtuningL1		= 1116;
 +const int combtuningR1		= 1116+stereospread;
 +const int combtuningL2		= 1188;
 +const int combtuningR2		= 1188+stereospread;
 +const int combtuningL3		= 1277;
 +const int combtuningR3		= 1277+stereospread;
 +const int combtuningL4		= 1356;
 +const int combtuningR4		= 1356+stereospread;
 +const int combtuningL5		= 1422;
 +const int combtuningR5		= 1422+stereospread;
 +const int combtuningL6		= 1491;
 +const int combtuningR6		= 1491+stereospread;
 +const int combtuningL7		= 1557;
 +const int combtuningR7		= 1557+stereospread;
 +const int combtuningL8		= 1617;
 +const int combtuningR8		= 1617+stereospread;
 +const int allpasstuningL1	= 556;
 +const int allpasstuningR1	= 556+stereospread;
 +const int allpasstuningL2	= 441;
 +const int allpasstuningR2	= 441+stereospread;
 +const int allpasstuningL3	= 341;
 +const int allpasstuningR3	= 341+stereospread;
 +const int allpasstuningL4	= 225;
 +const int allpasstuningR4	= 225+stereospread;
 +
 +#endif//_tuning_
 +
 +//ends
 +
  | 
