summaryrefslogtreecommitdiff
path: root/muse2/synti/organ
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/synti/organ')
-rw-r--r--muse2/synti/organ/Makefile.am15
-rw-r--r--muse2/synti/organ/Makefile.in657
-rw-r--r--muse2/synti/organ/fdialogbuttons.ui136
-rw-r--r--muse2/synti/organ/organ.cpp710
-rw-r--r--muse2/synti/organ/organ.h198
-rw-r--r--muse2/synti/organ/organgui.cpp189
-rw-r--r--muse2/synti/organ/organgui.h43
-rw-r--r--muse2/synti/organ/organguibase.ui1219
8 files changed, 3167 insertions, 0 deletions
diff --git a/muse2/synti/organ/Makefile.am b/muse2/synti/organ/Makefile.am
new file mode 100644
index 00000000..83f5800e
--- /dev/null
+++ b/muse2/synti/organ/Makefile.am
@@ -0,0 +1,15 @@
+include $(top_srcdir)/common.am
+include $(top_srcdir)/synti/synti-install.am
+
+AM_CXXFLAGS += -O3 -ffast-math -fno-exceptions
+
+synthi_LTLIBRARIES = organ.la
+
+organ_la_SOURCES = organ.cpp organ.h organgui.cpp organgui.h \
+ organguibase.ui \
+ $(top_srcdir)/muse/xml.cpp
+
+nodist_organ_la_SOURCES = moc_organgui.cpp
+
+organ_la_LIBADD = ../libsynti/libsynti.la
+organ_la_LDFLAGS = -module -avoid-version
diff --git a/muse2/synti/organ/Makefile.in b/muse2/synti/organ/Makefile.in
new file mode 100644
index 00000000..93f56ac5
--- /dev/null
+++ b/muse2/synti/organ/Makefile.in
@@ -0,0 +1,657 @@
+# 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)/synti/synti-install.am
+subdir = synti/organ
+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)$(synthidir)"
+LTLIBRARIES = $(synthi_LTLIBRARIES)
+organ_la_DEPENDENCIES = ../libsynti/libsynti.la
+am_organ_la_OBJECTS = organ.lo organgui.lo organguibase.lo xml.lo
+nodist_organ_la_OBJECTS = moc_organgui.lo
+organ_la_OBJECTS = $(am_organ_la_OBJECTS) $(nodist_organ_la_OBJECTS)
+organ_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(organ_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 = $(organ_la_SOURCES) $(nodist_organ_la_SOURCES)
+DIST_SOURCES = $(organ_la_SOURCES)
+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 -ffast-math \
+ -fno-exceptions
+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
+synthidir = $(pkglibdir)/synthi
+synthi_LTLIBRARIES = organ.la
+organ_la_SOURCES = organ.cpp organ.h organgui.cpp organgui.h \
+ organguibase.ui \
+ $(top_srcdir)/muse/xml.cpp
+
+nodist_organ_la_SOURCES = moc_organgui.cpp
+organ_la_LIBADD = ../libsynti/libsynti.la
+organ_la_LDFLAGS = -module -avoid-version
+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)/synti/synti-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 synti/organ/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu synti/organ/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-synthiLTLIBRARIES: $(synthi_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(synthidir)" || $(MKDIR_P) "$(DESTDIR)$(synthidir)"
+ @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || 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)$(synthidir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(synthidir)"; \
+ }
+
+uninstall-synthiLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(synthi_LTLIBRARIES)'; test -n "$(synthidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(synthidir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(synthidir)/$$f"; \
+ done
+
+clean-synthiLTLIBRARIES:
+ -test -z "$(synthi_LTLIBRARIES)" || rm -f $(synthi_LTLIBRARIES)
+ @list='$(synthi_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
+organ.la: $(organ_la_OBJECTS) $(organ_la_DEPENDENCIES)
+ $(organ_la_LINK) -rpath $(synthidir) $(organ_la_OBJECTS) $(organ_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moc_organgui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/organ.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/organgui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.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 $@ $<
+
+xml.lo: $(top_srcdir)/muse/xml.cpp
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT xml.lo -MD -MP -MF $(DEPDIR)/xml.Tpo -c -o xml.lo `test -f '$(top_srcdir)/muse/xml.cpp' || echo '$(srcdir)/'`$(top_srcdir)/muse/xml.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xml.Tpo $(DEPDIR)/xml.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/muse/xml.cpp' object='xml.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o xml.lo `test -f '$(top_srcdir)/muse/xml.cpp' || echo '$(srcdir)/'`$(top_srcdir)/muse/xml.cpp
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+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)
+installdirs:
+ for dir in "$(DESTDIR)$(synthidir)"; 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-synthiLTLIBRARIES \
+ 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-synthiLTLIBRARIES
+
+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-synthiLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-synthiLTLIBRARIES 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-ps install-ps-am \
+ install-strip install-synthiLTLIBRARIES 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-synthiLTLIBRARIES
+
+
+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/synti/organ/fdialogbuttons.ui b/muse2/synti/organ/fdialogbuttons.ui
new file mode 100644
index 00000000..f1ad496b
--- /dev/null
+++ b/muse2/synti/organ/fdialogbuttons.ui
@@ -0,0 +1,136 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>FileDialogButtons</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>FileDialogButtons</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>27</x>
+ <y>0</y>
+ <width>69</width>
+ <height>368</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>globalButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>Global</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>userButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>User</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>projectButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image2</pixmap>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>Project</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="5310">789cad965b73e2481285dffb57383adf3a3672102021c5c63ed86e5ff10ddfdaee89794824617cc137c0b789fdef9bca3ca5a66dd8d999d9aec6e673294f9dcaca4af8e5cbd2d9c1eed2975f3e8d2732b9cc97f2a13c2e7d29a6a3d1ebafbffdebf74f9f5bed25fd1f7592a5e6e77f7cfadc9b2ce54b7b77b765054c0ad4b07fc603e77623918ae919dceeb48c6f9ce322ed572c6bc669236fa4363f74aee34fc039e213e7b8d1f1f86770ec4ca7ce699cc7c6b715478d6a98bf6fceaae7f1afceaae7fa54b3eb75c0716af3528033677e724e63c98d6f03f7db16ff669c467964fbe307e7a0cfd760e8f30518faf252b3fb49c1c81fad3bd7eb413fcdc0bbce595c783eba15371bd530fd3be7b8403e2681b17e59b3af97392711ce6f1038f3f5cec0b1b3907327ca2c3ff4cd390d7e1ec1c1ef8e731615565fc2c6599279bcdc80839ff3c0d0ffee1cd6e3041c637e2fb0f87ad760e8d37e60ccaf3987f3a51c5cf40be3c2398be07f195cc0ff65c5ad28f895dcb913f2d500073f17e0e0e725b0cfcb2db8c0f30735fbf3abce6904ee83437e2370f0df7456ffc6fc1d1c637ec559e23231be0397d8df57e32abfae0faed72b9db3701fef9d453c9e5a15b7a376a31d99de15b80dbe700ee72702ceb05ecf39cbe0bf012e7c3d3e77ee377d3d3e0becfb61d7135dcffa8d74c1a9331d3a4b04ff78be8eb7f38f9b7123b6e648c7ce69a8f7d839f823ab87583a05fc6f39a7387f8e9c25cefdf901589cc5f493661225b61eef394be9f3bce3dc4ffc7eb1f5af44d250cfd6af3a2d41bd72d3393c2f47c6fd4e86fe543aa791f7031a3bd7fafb6001ef82437d98bfb4d509fde4c039e8c92e38f43fcc6bbcfbb1fca77d9d773f4330fa21df81433fb0fac9da29f22b1bce59b86fe03cd443e004bc06467d8aed2fcbb3507f3be0d08f9e9cfb09ea6dd339c4f33a18f9a0ed8aa52d11cee3158cf397a1731fe74947ce7989fb3732ce05fd487a60c1e74f0a2e31df770e7a72edacfb77bf5bce45e2fa62fefb6d29bd3e64dbb9df44bd5c8213f0917311ee430f9c94beff17b060be6d5c68bcd76b0e1667590797b82f783e477dc92a18f9e43767d5777e059703df8fed2f8f75ff1ebfe29c37715e31389c5fcbb928a187e7cba6b3587fcf0b7ddefd4ec1b89fbc0d0ef771e21ce27939b0fbe33138815fdb4f11e7a87fce9c0b9c978cc1b87f34710ef1fc0816e8399745a8ef6370a8cf1370a8cfa97389f313fb3e512605ea4f46ce25ce5beec1a81fb6ef5f651d4f0c0ee773050ef93d0c0cff53e741c8cf6acd03d3db0427ce6ceb0f923abeeb5cc73f83437e6ec08278fbbc1a0c6abd1138ccf7c103e7dee4ef8f1f3a4c61fc1d1d16eeebc8b9f86b6adee779c0173ce44bbe32b5cb3faf663ad77cc323be35b53b55b9ffe8ed8f766d3a0ffcc8639ef054a39fde790b6ab9be7f5eec137e5ef895df789957f4b5aa11b3de46a6f0555f237bdf5fa8f3c06bbcce1bbcc95baa3851b59fbd6d43ed4ab52ac5aeef748ece0eeff21eeff381aaad73cfbc4dd4d9211fa952ae4ac77cc2a7aa52a9dd7f74643adff88ccff93b373852b5a6a9b9b796aa0dd4519b63554ab8c329677c42fcde91dd27e27312ea534e0595dca0c18cb7095dd0902ee94ab50674adaf1b1af131ddcef34377744f0f9a8f5b7aacd482371af3064d684a4ff44c2fea6cd9f296d02bbdcdcb332dd30aadd2575aa3075ad7517b536707b4c12fb4a9ce5e788526fa7b8bb6a93bd7cf0eedd21eedd381aaf52b35f3e66a3d3ab47d6ed291664df346c7f3fdd0099dd2373aa373fa4e0d555b7de72da2e66cde5467ae1f6a519b624aa8432965c242ea6def83b728e44d64417efcaeebc7a5e4fab54e3ff664b0c09b9d825c2cf2a32a23ab53ad7e19566a7c31e3ed5ddee472be1fb9b29b53d5bcd6aad65897bb72ed6af3bcc9cd423fa32ad655886524a3aa66f59dedf4a7bcedcbaddc2dcccfacca3d9fca833cf0b13cca587fdebbda0f6f32a9fcfcdc41e0e73eb429f752a9e8c8746ccb54a6d59d9227fda6f5aca7f022af959f1f9dad1a9e9fca039fba8a7b511f631d6f3aa6b22c2b36a6aab62a5f7583337e6674d678a84f3d9a8f937a4795974a656a1aebda3d72ce644336e56abe9ff09eaa3da882bdc6418563f5b3255b9ceb8e87b2ad7fefcef7e3990a7f911d5ddd7dd45e54675db3bfab2ac7b2b7c8cfecf9d56afbbabee7055e2a15cddd81f4febb9fd9fe56eff44a63b7b4db1fcba179a954a61ffdcc7e2e7f1cb5b7a91ca8d6b6eea8a73f8fdefb09f5335fe3839a768b4a855e7ff6f3a30e17f999ebed48f6a52b1bc1cfecbdf8638d0f797ba7f2bffb79ffb9f77efcdfbe47fdfb9f9ffe03facd42d6</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="6766">789ca5975b6fe3381285dffb57045d6f8305c7b22d59c2621f724f3acefd9ec53e5451729cc4cecdcec51eec7fdf12eb50dd71328b01a6d5eef617528787c56291f9fdb7a58b83dda5df7eff3699f2f4c62ff9213f2ffd56be8cc7b37fffe75f7f7cfbdee92ee9df76d65b6a7fffc7b7ef87d325bfb4f7705fd52033056a853f353bff91e571a15d167879818f1678eb23d3cd47f6bcd03f5d685f188fb617fc650bbcf0bea3059e80bb60ccafdbca38bcff00ee1ad33a38ef75423bfc77bdb1bb0e9cab401edaafc0b931d978799614dd309fb2e6a4957413f3eb8cd3566efab7e0d4988b8625b4b371a317d62bc955cfc67f037b3019a785bdef9ec025f4dbc6596a7a220dfbd0de0117c674615c24651af8129c96964f6b35b75bf513f812dc35e66363d50be3f1a6712f61e32d701cff2cb2b54bf0df2eda79bb08fc0ef6c67c641ce7c31be0127c62dc4b301fb437e39d46869f6d70c9d63f31cea3dff786ed7d17d987f8f00f702ad67f075c406f16d9da690c2ec178bf282dbe84f73931e6bb9a3b49db7792b0be73e34e0bfc6edcc3fab987c8e69f4ec125e633336efce0fdc6cf7ec365e07be3223176393845fbd498d9fcba90bf9da2e33bb67e43e3187f3a308ee369290bacfac60370d4ef820bf08b3157182f33963638ecbf6ed2f15d8bcfd0b8db32e66570d7584e1bb6fa7067dcc40f1cf5b91f98637f26700ebe007b7062dc4b6c7f720ec67e778571515a3ed1833123bfe8d658da5516faf7c019fcecd69cb6bb3e0dc59f578cd39631ad19e7d80fe2c171bde7c6cd780e9c22bfaf1b0ef197d7c0daddea1fdf1aa7451ae6eb2b70694ccfc6717c2e8de37afba09fb5637ef395719664369f7be31eea1b57c605f297bbc68dff3618fea9886cf5cc87fa9e713b9e278971dc4fbc6f9c15382f9ec1a5311f1ae7a8cf740dc6fee337e3c60f812b8b9f3b35d67c0aedee18ccc612ea41afd3f83b02e33c932e3837e655e35e62e7157be3e8873ac645ac87adc8a8070fc6ccf0cbc692c1ef5964f83d0157f01bf2bd27d18ff48c7b45cfceb33eb834a663e302f597f6c0b15ebe81637d38379636fc41bf8957783fef34fbf7c4b817cf3fb4e709f8058cf397968d8bb8df47c68cfca4141ceb91180bea8f84fd934b1ef7f30d38e6abf5175d7f8bdfb9b18ff56a1b8cfd2cc15fd14d53cb47d930d6fd60fba934cee379971a17311fb7c0381fdd8571a31ff2a5f09a4e61fffa2118f7159e1a17b15e9f83633e3d1a4bdbe221d79131bf1fc6beb27a25a13e71b7c0f923236346fe490e8ef970682c6cf94768f7b1deef44867e889f266fdc2f0538c5fd686adc4b911febc63a9ed5c30acc38df6fc01518fd7ddcaf7de312f5d887fd2ddd66fc65e322deef2e8da31e0d2323bf33638da7cdbf0267e015e33243fd8fcc95ad678897946981fbe9c038beef6e1bb6fdfc0c66637e32f6583fb907637f91f92bcb98afadc8f0b30b861fb70aae8c7d384f74394af81b1b0bf6034f8ce3f8ae03cec07bc651cfbd1a576dccdffa975981fb76dbb840fde1b9b1473da30118f9252d30ea33f78ce37c19ed31fefc08c67d8739b2b5d32638fadd378e7edd5ae481f53f0367689f46b67609f7a532cd13dca7cec129ee2f3bc6d1bf4b22235ff17e19f3771d8c7a4ebb60ec27ba328e7ee9090c7f7412d9fcb91730c36fa83f655514767ecb99b130f6fbb1711cdfdd356cf33f04c7f80ec1d8fffc6a1cfdf1081cfdad82e18762ff0afec2fa549967db1fb2d2b0c5af6d1ce3e106c655ccf72e38e6c35a64d3e731388e7f04c6f8d46f7810f42e8d07311f7cc3a15d42fe5495afcc9f373fcd7cdd0c1ceb41098ef977651cf5dc1b380387f365d08cef46e0389f8386adff3d98e12fecdfc120f6779b0d5bff3118fd5d051e181f4efffef3958e237dd889f37f47c795aed267a05ad77f5deda38e1bea9b4377e36edd9d6a8d82da5ff2b6a053bab1bb770feed13da9da73501b07b54954d33ed7fa5950fee467ea5edcab7bd3f7dfa1760bb5996a4d5431ce9adcdc2d47b54f7e56dcaa3eaf6e0d6a3fbdadabd286dbd4d9daa7527d725ba6f4c9cfb6fba19f1dd777bb6ecfed2f783b7087aa36523d539ca9d251adf4c9cfb13b71a7eecc9dbb8ba0567b9bba4b77e55aaa74eb12556abb8e7ae9aad64c63953af9c24fe67a2e77854e9f8849a0b6eb5ec9bb472aa9a281cef081ae69a8ee06aa36a11be717fdd02dddd188c674ef727a20a7de76e951d5faf454c78a9e43ac1ec3f7897e3fd499a9a3453f34a5177aa5377aa7993ef734776bb44ce42e68c5edd32aadd13a6dd084362d6eb4a57eb6ddf2273f3f6887fab44b7baab24f07744847740c6fe7b4a2ef5fd1099daafa99c6ada2730dc0679d215dd0a58eba4957d4a284dafafd883ac15d9752caa8a7ce728d97c5edfe2b3f1a65a2821d937e2bf5f625f4a4de8ed8d38c4bb743f50d6c400f7c1de256afe9e5577e34f3c9cd9878c8377ccb773c5237ab3ce67b7ee047d57be26775f66eab50afa99bfe999fa032e129bf04a5575519f1b89e9dfeffc6ef3c0b71abe759abf579fa859f32a8cc799957f4b30aa5913e6bfa59e70ddee42dde56b51fbc533bd3587de1075efabccb7bfae9f37e503a085e5ef9908ff8984ff8549fb3a036e3f3cf7ea0b2cc177ce90634d4ff97f9aa56d2bdaeb5486768de5a7a1f6f732778d3bbf8473fb58abe5b7bc934dbb53270163c45a5faa9f8807b9c73214e486f9722fea39fa0b215bdd85b7a0fad7ef134d29f697d9481bb936b19ca8ddcaadaddaf7e546522a3e0e5267889cf8caa0f9e0ef992e732d6d9cf55ed5ed51e7ef5238fbab19fdc5c9e752f8f6522537991d7109501bfc89b3cc9bbeeebb17e067c2963dda7cfee407f6bb8e1be8c7efa9199d6a25475e6ba7b2bd5589615590d4a033a97354467139f912a1dc85cbd27aab3fe6b7c5449dc5c73bcf6b3219bb225dbf2c37434c72d364d45951d8d82aa48ffa31f64e15c7683ce9eeccb811cca51ada33f23ad7b2378d990e3e025d37f4fa492d38f7e4c077ef6e44cce55e722fa914bb99256ed4573611254d48b54aef37ffd24fa7b4e4775bad18fa492d5e78c5ca9b3035df97a463734909eeae47fea2791c23b4f36afe0476f705a83532fdefb9257f4be3452957e9d2b5ff9d19c4afcc05ffba1acfaa1bff13ab2fe2c8ce7bcaec4b2a9e919a1154a7aba960f9ff797f6a3af1e49ed64a99fb0ae516d124e6bb4ffd4b12cf242db1f1fed75f4f12cff552db6ff5a37acfdd3f327778da67768fffedf7f7efb1f6c86991b</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="7960">789ca5975b6f23bd0d86eff75704cbbb0f853e7b3ce3cca0e845cee7f339452f486a1c3b8ee338cec929fadf2b8baf6693ec6ed1a2eb75902792382f298ae2fcf9c7c2e5e1dec21f7f7e9b3ef1d34017b4cf8f0b7ff8e7d168f6f77ffced9fdfbe77f285f83f5bc8beffe5db77c70bbab03fbeaf23d007387afa382201a815ff459e8273633f0697ad32f22358db367e63dc6e19eb22386fc7f9ba0b2ec1b760055f1967da69cf594ae34e0b3c036b6efc6e9cb78cfd6dc31cf58f1377230b81736385fdbcb4f9da4a5cc4b0c963e2c5ce9c6937711959f6c06ae3ba6f5c1485d93b00fb6eb4a787c6ddb63ddf33b8809ef7c4b07794d89ea7c7608f71dfb0445e365e6c83ef1297c6237081f17b7005fb0f892b8dbc02f6551e19f12c93bd0eb8b271b9007bb6f5abc655053e492c3e32f68359cc3ef28f6b2da23df823ac71be9c1b6bd7c77167f956860db67c74c629ff780a46bef1997127b7fd65b35736f9700d2e6dffbcc5a32c5ac8074e8c78ed812bdb5fb2fd2fbb6d367fdae0b49fb38663fce80d5cd97c4fe0b49f9971d83f5bbf04ae107ff8cb05e2a9e0dae2a5d02b6cf1e2a8afddcacaac8a9c19a7f3451d70d9b1f115e374bef80d9c9bbfbc0546fecbd438c5872f12233fba60e4335f82e18f3c833d783fb1e5a3887117f9270789cd3e5f810b8b277be3d2fb58df288f1cf61ff5a4679cfc9327e302f9efdec0c87f9e1987e7d9f803b8c0f876c3a6f72531f4ec80715e286b38cee777309e27be61b3a789cd9e1c361cc7a9655cb56dbfa90d2eeae83f6fce396bcd3f91af8d17db76feb805867e1e2686fe257085f9b5710850b4efe3fe6755ae382fce38ed17ed1937f6efc0c87f6e83bde5339d1a976df8b798d8c6f9105cc07e99d8e6f37262ab279418f588d6139b3fb49618f31fc01efe8e1ab6e7ef1a576dcc3f36e6b6c59b8ec088bf8bfbdb69a7f3a6a760e42375c16ae74f26c68ba827ee159cf4f71343ff1518f9412fc625f6972a70f26f150cff682531c6cf8c1bff361a8efebb128cfa43e3c498ffd8b08dc37f66cb1717f3b953257fb5366ecee300ac568fb930eea6fbeacd38dd675224b6f8c82e18e7839f8d9b7c39496cfafd109ccea3334efe39db9f4a32d493257017fb1bcf6bde4efd89eb1b277f740aceaddf904db082178dd37eba7be366ffce8d537cf9be618bef045c81312e99e993b8bf3977f07cafe0d4ffbc1a37faaec118a7020cbd3c36ae3cf2a14a8cfbe6c198518f9cf9c75243cf99b1e27e12acd7dad847fd4596a7fb7704467de135e3743f73175c18d38e71897aad4370aa9f4789115f67cc88aff48d7dddeb468efd65c1a9bfe31770857e41c0de98a6c60cffc8f4b3b0d9e3f8fc6e16fa41d37f0b2e8ce5d538c58f27e0daf28fc958bac6b264ec918f3e3eaf1bf4587fc303e3d47f721f5c818fc198ef319efa3b1a346cf5e73531ea91e9e1a487637d5deca47e954be3d09f1abf82d11f111b4b17f97496b88ef1722760e407c77c5a94d4eff209b842ff7409463fc537c615f2416a63c9709e188cfd72a789f1fc6363cd8c05f63cc6394f8c7c89f5b5ec34fd7517ecf1feb0665ca2bf932118fd919f188778583e9e1ad719f227d6e332f867f5ccd7c6a93f770330fa2bb765ac697fa2bd2a4ffd3d57c625fa197933aed05fd12118e324c6c99ebb488c7e63d538e9551bd712f7bfae83d1dfe89a71da1fadc0c837d900a77ee8c1986babcf921ba7fd74e7c66182d5eb589f43394be7ffd2b8c2fd2aeb60f423726fcc697cc758707fb11a6b3a8f9218f52df637ac15ee233d07e3bcf01e38f56fd7c68c7e47b6c1b5b1db35f6c83f7799d8e2eb30df77917f27c635f643637f2b79857ae707c68cfb45b6c005c67be01aef671363c9502f6b7017fdd1a371f37eb663dce889fd65381ee97d65079cf6efca38d8b7fbd883bb186f8319ebb7c058ef603fc5839ec0a9de1e18f7b25e2f8ec77aab453a5f9a8319bc01c6fba8be182bf24b7b60acf74f60bcafba7d638f7ca0cdc4d82fd8ab713fbba5c4a68f61afc67cee356ce31de3e48f8bf1519feaa716e0a4e7168cf74337310efed8fc3e18eba503c67a1d24b6fca303e3e49f5b4e8cf86e1937feed2586de2730f2c3ad341cc735d6575fa47aaf9bc69a21bf7230f24dc660d46f7d06633d0d8d3dd613ecfb94af6bc6499f8fe7d7d78af32e1918e79d7ac61efda01b82533d3c04633d5d1827ffdc2a98c15760c44f8e8d7b291ef17cd7dde6fcaf83d3fd7800c6fee899718df97407c67c7a4e8cfdba04e3f90ee34d7ec5f35dd7a9bf701918f5d56d8253becf8cd3fe93e9af1b7b31bf7add66ff7b609c577764dc4bf5edba615b7f07c67a52708a67ccff5e2fc5571fc1c9bf9971636f039cf667044ef66a70cff8e8c9d1fffb8d7639fcf6f12be1a3f39f5ffefe1fbebfd0e35d1d3ebd60e7a6b1f63fea71fdb0b2ef06eed60d83adbb68edbfd2f645cf5ccbc8ddbbb17b08d626ee31f2dcdab4b1e6834eff55e74f7a9edcb37b899ebd066b6f8db6919b055bd3b03e792deefd87ce9ff42cb965b7127eaebab5b8e287b6f5606916feb2816fed36a335f9a59e2db71dbe3b6ed7edb9fd60edb3b60377186cdd057547317eb364e9273dc7eec49dba3377ee2e82b5cba8edca5d8795ada0ab1d5465aee3f2a0a513fe568458cd2dfdaca7eb165de92a7244c4ee8204da5e48dd983cd5d4a31bead3806e69e87a741763265ff5d088ee694c0f34a1479a924bdae8899ee925587a8db11acfe346c15382675ff5d03b2dd132add02aadd13a6d34da8436698bb6698776698ff6e9c0e24687bfd17344c77442a77416ac9c076b1fb59dbb1dba7033baa4abb0032b216e355dff464f8bda945187722aa84b8b545215acadccb5b1630a2f6be1ba747b885bfd1b3da105e49a3adce31beef3806f79c8773ca275be376d3ce6079e3471bbfe8d9e293ff2949ff8995f829d57d7e7379ef13b2fd1292f236e2bc153c4cd5dfd56cf4ad0b2ca6bbc1eec6c849f9bbcc5dbbcc34b3c4c719b6be3dd79dcdc25effd4a0fef072d077c18ec1cf1319ff0695074c6e77cc1977c45195f738bdb3fb4b1fc4a0f67414b27f4cd057779914baedc802b7e09d3c8bd09f34c4434f47d8d36a97fd623bdb916b991be0ce476ee950ce5ce0d6424f732960799c8a34cc3e7499ee5c5b4c9abbc7dd42333798f71c965499665850a59953559970dba964dd9926d19cf4f81ecc8aeecc9be4c83b6033994a38f7a829563399153390b5acee5c2d532e613b9940db90a16aee54d5ad20e5d6bc70d6948b3d01117c15a37685bfca8474aa9d429857e4a54d58733337207721f4e62ed265a075df7e14ce5d4d35e7887b991b1f6dda60e8236faa8476f7518bab03b1de9bd8ef5412721be7d7da49b501d863a75037da25a9fb517be2f2e97b69bd030e8ddd6d7f084460f4ff54d67faae4bbaac2bbaaa6b61df37622d2ddc86d61ae2a41bfa12b46c062d5b41e376f8dbb65bd757ddf9a06757f7745f0ff4508ff4584ff434a8398b76c2990e7eade9795895eb46d8b7a8452f82e675bdfcacc7895ee9b5b6b41d2c65dad13ca8b77a379adbe10d3aa4dbd08f375a829503edca954e3feab1df74514b68aadc443a340bb5ae0edffefc66e013bafdac2558e97dd5631fefb4e5c9b36c6911aa67c89750c7d7bd8d86d95e75932bb3e2bd744287f8ea7b5ff5444b37734dbeaffde0d97ab81b7ae1fcc8874fb026d75efc403a41d1fd673de80ce287a7fed60f754b327f17f228f3a34f76ec13ee087f1f3cbdfe9c3fa83d49d3d83ff8c97c9743fe0e3eade7afda4ccbd7f3de587af453ff143c9bf0dac7955fe77dfc7ca987bf98f1c1caa71ee3f3d8f77ffdf5dbbf01849f9bad</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/synti/organ/organ.cpp b/muse2/synti/organ/organ.cpp
new file mode 100644
index 00000000..a1788a6c
--- /dev/null
+++ b/muse2/synti/organ/organ.cpp
@@ -0,0 +1,710 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: organ.cpp,v 1.15.2.8 2009/12/06 10:05:00 terminator356 Exp $
+//
+// Parts of this file taken from:
+// Organ - Additive Organ Synthesizer Voice
+// Copyright (c) 1999, 2000 David A. Bartold
+//
+// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include <stdio.h>
+
+#include "muse/midi.h"
+#include "libsynti/mpevent.h"
+
+#include "organ.h"
+#include "organgui.h"
+
+//#define ORGAN_DEBUG
+
+SynthCtrl Organ::synthCtrl[] = {
+ { "harm0", HARM0, 0 },
+ { "harm1", HARM1, 0 },
+ { "harm2", HARM2, 0 },
+ { "harm3", HARM3, 0 },
+ { "harm4", HARM4, 0 },
+ { "harm5", HARM5, 0 },
+ { "attackLo", ATTACK_LO, 20 },
+ { "decayLo", DECAY_LO, 20 },
+ { "sustainLo", SUSTAIN_LO, 0 },
+ { "releaseLo", RELEASE_LO, 20 },
+ { "attackHi", ATTACK_HI, 10 },
+ { "decayHi", DECAY_HI, 10 },
+ { "sustainHi", SUSTAIN_HI, 0 },
+ { "releaseHi", RELEASE_HI, 10 },
+ { "brass", BRASS, 1 },
+ { "flute", FLUTE, 1 },
+ { "reed", REED, 1 },
+ { "velocity", VELO, 0 },
+ // next controller not send as init data
+ { "volume", CTRL_VOLUME, 100 },
+ };
+
+static int NUM_CONTROLLER = sizeof(Organ::synthCtrl)/sizeof(*(Organ::synthCtrl));
+static int NUM_INIT_CONTROLLER = NUM_CONTROLLER - 1;
+
+float* Organ::sine_table;
+float* Organ::g_triangle_table;
+float* Organ::g_pulse_table;
+int Organ::useCount = 0;
+double Organ::cb2amp_tab[MAX_ATTENUATION];
+unsigned Organ::freq256[128];
+
+//---------------------------------------------------------
+// cb2amp
+// convert centibel to amplification (0 - 96dB)
+//---------------------------------------------------------
+
+double Organ::cb2amp(int cb)
+ {
+ if (cb < 0)
+ return 1.0;
+ if (cb >= MAX_ATTENUATION)
+ return 0.0;
+ return cb2amp_tab[cb];
+ }
+
+//---------------------------------------------------------
+// Organ
+//---------------------------------------------------------
+
+Organ::Organ(int sr)
+ : Mess(1)
+ {
+ idata = new int[NUM_CONTROLLER];
+ setSampleRate(sr);
+ gui = 0;
+
+ ++useCount;
+ if (useCount > 1)
+ return;
+
+ // centibels to amplitude conversion
+ for (int i = 0; i < MAX_ATTENUATION; i++)
+ cb2amp_tab[i] = pow(10.0, double(i) / -200.0);
+
+ for (int i = 0; i < 128; ++i) {
+ double freq = 8.176 * exp(double(i)*log(2.0)/12.0);
+ freq256[i] = (int) (freq * ((double) RESOLUTION) / sr * 256.0);
+ }
+ int size = RESOLUTION;
+ int half = size / 2;
+ int slope = size / 10;
+ int i;
+
+ // Initialize sine table.
+ sine_table = new float[size];
+ for (i = 0; i < size; i++)
+ sine_table[i] = sin ((i * 2.0 * M_PI) / size) / 6.0;
+
+ // Initialize triangle table.
+ g_triangle_table = new float[size];
+ for (i = 0; i < half; i++)
+ g_triangle_table[i] = (4.0 / size * i - 1.0) / 6.0;
+ for (; i < size; i++)
+ g_triangle_table[i] = (4.0 / size * (size - i) - 1.0) / 6.0;
+
+ // Initialize pulse table.
+ g_pulse_table = new float[size];
+ for (i = 0; i < slope; i++)
+ g_pulse_table[i] = (((double) -i) / slope) / 6.0;
+ for (; i < half - slope; i++)
+ g_pulse_table[i] = -1.0 / 6.0;
+ for (; i < half + slope; i++)
+ g_pulse_table[i] = (((double) i - half) / slope) / 6.0;
+ for (; i < size - slope; i++)
+ g_pulse_table[i] = 1.0 / 6.0;
+ for (; i < size; i++)
+ g_pulse_table[i] = (((double) size - i) / slope) / 6.0;
+ }
+
+//---------------------------------------------------------
+// ~Organ
+//---------------------------------------------------------
+
+Organ::~Organ()
+ {
+ if (gui)
+ delete gui;
+ delete idata;
+ --useCount;
+ if (useCount == 0) {
+ delete[] g_pulse_table;
+ delete[] g_triangle_table;
+ delete[] sine_table;
+ }
+ }
+
+//---------------------------------------------------------
+// table_pos
+//---------------------------------------------------------
+
+static inline float table_pos (float* table, unsigned long freq_256, unsigned *accum)
+ {
+ *accum += freq_256;
+ while (*accum >= RESOLUTION * 256)
+ *accum -= RESOLUTION * 256;
+ return table[*accum >> 8];
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+bool Organ::init(const char* name)
+ {
+ gui = new OrganGui;
+ gui->setCaption(QString(name));
+ gui->show();
+
+ for (int i = 0; i < NUM_CONTROLLER; ++i)
+ setController(0, synthCtrl[i].num, synthCtrl[i].val);
+
+ for (int i = 0; i < VOICES; ++i)
+ voices[i].isOn = false;
+ return false;
+ }
+
+//---------------------------------------------------------
+// processMessages
+// Called from host always, even if output path is unconnected.
+//---------------------------------------------------------
+
+void Organ::processMessages()
+{
+ //Process messages from the gui
+ //
+ // get and process all pending events from the
+ // synthesizer GUI
+ //
+ while (gui->fifoSize())
+ {
+ MidiPlayEvent ev = gui->readEvent();
+ if (ev.type() == ME_CONTROLLER)
+ {
+ // process local?
+ setController(ev.dataA(), ev.dataB());
+ sendEvent(ev);
+ }
+ else
+ printf("Organ::process(): unknown event\n");
+ }
+}
+
+//---------------------------------------------------------
+// process
+// Called from host, ONLY if output path is connected.
+//---------------------------------------------------------
+
+void Organ::process(float** ports, int offset, int sampleCount)
+ {
+ /*
+ //
+ // get and process all pending events from the
+ // synthesizer GUI
+ //
+ while (gui->fifoSize()) {
+ MidiPlayEvent ev = gui->readEvent();
+ if (ev.type() == ME_CONTROLLER) {
+ // process local?
+ setController(ev.dataA(), ev.dataB());
+ sendEvent(ev);
+ }
+ else
+ printf("Organ::process(): unknown event\n");
+ }
+ */
+
+ float* buffer = *ports + offset;
+ for (int i = 0; i < VOICES; ++i) {
+ Voice* v = &voices[i];
+ if (!v->isOn)
+ continue;
+ double vol = velo ? v->velocity : 1.0;
+ vol *= volume;
+
+ unsigned freq_256 = freq256[v->pitch];
+ unsigned* harm0_accum = &(v->harm0_accum);
+ unsigned* harm1_accum = &(v->harm1_accum);
+ unsigned* harm2_accum = &(v->harm2_accum);
+ unsigned* harm3_accum = &(v->harm3_accum);
+ unsigned* harm4_accum = &(v->harm4_accum);
+ unsigned* harm5_accum = &(v->harm5_accum);
+
+ unsigned long freq_256_harm2, freq_256_harm3;
+ unsigned long freq_256_harm4, freq_256_harm5;
+
+ float* reed_table = reed ? g_pulse_table : sine_table;
+ float* flute_table = flute ? g_triangle_table : sine_table;
+
+ unsigned freq_256_harm0 = freq_256 / 2;
+ unsigned freq_256_harm1 = freq_256;
+
+ if (brass) {
+ freq_256_harm2 = freq_256 * 2;
+ freq_256_harm3 = freq_256_harm2 * 2;
+ freq_256_harm4 = freq_256_harm3 * 2;
+ freq_256_harm5 = freq_256_harm4 * 2;
+ for (int i = 0; i < sampleCount; i++) {
+ int a1=0, a2=0; //prevent compiler warning: unitialized usage of vars a1 & a2
+ switch(v->state1) {
+ case ATTACK:
+ if (v->envL1.step(&a1))
+ break;
+ v->state1 = DECAY;
+ case DECAY:
+ if (v->envL2.step(&a1))
+ break;
+ v->state1 = SUSTAIN;
+ case SUSTAIN:
+ a1 = sustain0;
+ break;
+ case RELEASE:
+ if (v->envL3.step(&a1))
+ break;
+ v->state1 = OFF;
+ a1 = MAX_ATTENUATION;
+ break;
+ }
+ switch(v->state2) {
+ case ATTACK:
+ if (v->envH1.step(&a2))
+ break;
+ v->state2 = DECAY;
+ case DECAY:
+ if (v->envH2.step(&a2))
+ break;
+ v->state2 = SUSTAIN;
+ case SUSTAIN:
+ a2 = sustain1;
+ break;
+ case RELEASE:
+ if (v->envH3.step(&a2))
+ break;
+ v->state2 = OFF;
+ a1 = MAX_ATTENUATION;
+ break;
+ }
+ if (v->state1 == OFF && v->state2 == OFF) {
+ v->isOn = false;
+ break;
+ }
+ buffer[i] +=
+ (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0
+ + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1
+ + table_pos (reed_table, freq_256_harm2, harm2_accum) * harm2)
+ * cb2amp(a1) * vol
+ + (table_pos (sine_table, freq_256_harm3, harm3_accum) * harm3
+ + table_pos (flute_table, freq_256_harm4, harm4_accum) * harm4
+ + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5)
+ * cb2amp(a2) * vol;
+ }
+ }
+ else {
+ freq_256_harm2 = freq_256 * 3 / 2;
+ freq_256_harm3 = freq_256 * 2;
+ freq_256_harm4 = freq_256 * 3;
+ freq_256_harm5 = freq_256_harm3 * 2;
+ for (int i = 0; i < sampleCount; i++) {
+ int a1=0, a2=0;//prevent compiler warning: unitialized usage of vars a1 & a2
+ switch(v->state1) {
+ case ATTACK:
+ if (v->envL1.step(&a1))
+ break;
+ v->state1 = DECAY;
+ case DECAY:
+ if (v->envL2.step(&a1))
+ break;
+ v->state1 = SUSTAIN;
+ case SUSTAIN:
+ a1 = sustain0;
+ break;
+ case RELEASE:
+ if (v->envL3.step(&a1))
+ break;
+ v->state1 = OFF;
+ a1 = MAX_ATTENUATION;
+ break;
+ }
+ switch(v->state2) {
+ case ATTACK:
+ if (v->envH1.step(&a2))
+ break;
+ v->state2 = DECAY;
+ case DECAY:
+ if (v->envH2.step(&a2))
+ break;
+ v->state2 = SUSTAIN;
+ case SUSTAIN:
+ a2 = sustain1;
+ break;
+ case RELEASE:
+ if (v->envH3.step(&a2))
+ break;
+ v->state2 = OFF;
+ a1 = MAX_ATTENUATION;
+ break;
+ }
+ if (v->state1 == OFF && v->state2 == OFF) {
+ v->isOn = false;
+ break;
+ }
+ buffer[i] +=
+ (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0
+ + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1
+ + table_pos (sine_table, freq_256_harm2, harm2_accum) * harm2)
+ * cb2amp(a1) * vol
+ + (table_pos (reed_table, freq_256_harm3, harm3_accum) * harm3
+ + table_pos (sine_table, freq_256_harm4, harm4_accum) * harm4
+ + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5)
+ * cb2amp(a2) * vol;
+ }
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// playNote
+//---------------------------------------------------------
+
+bool Organ::playNote(int channel, int pitch, int velo)
+ {
+ if (velo == 0) {
+ noteoff(channel, pitch);
+ return false;
+ }
+ for (int i = 0; i < VOICES; ++i) {
+ if (voices[i].isOn)
+ continue;
+ voices[i].isOn = true;
+ voices[i].pitch = pitch;
+ voices[i].channel = channel;
+ // velo is never 0
+ voices[i].velocity = cb2amp(int(200 * log10((127.0 * 127)/(velo*velo))));
+ voices[i].state1 = ATTACK;
+ voices[i].state2 = ATTACK;
+ voices[i].envL1.set(attack0, MAX_ATTENUATION, 0);
+ voices[i].envL2.set(decay0, MAX_ATTENUATION, sustain0);
+ voices[i].envL3.set(release0, sustain0, MAX_ATTENUATION);
+
+ voices[i].envH1.set(attack1, MAX_ATTENUATION, 0);
+ voices[i].envH2.set(decay1, MAX_ATTENUATION, sustain1);
+ voices[i].envH3.set(release1, sustain1, MAX_ATTENUATION);
+
+ voices[i].harm0_accum = 0;
+ voices[i].harm1_accum = 0;
+ voices[i].harm2_accum = 0;
+ voices[i].harm3_accum = 0;
+ voices[i].harm4_accum = 0;
+ voices[i].harm5_accum = 0;
+ return false;
+ }
+ printf("organ: voices overflow!\n");
+ return false;
+ }
+
+//---------------------------------------------------------
+// noteoff
+//---------------------------------------------------------
+
+void Organ::noteoff(int channel, int pitch)
+ {
+ bool found = false;
+ for (int i = 0; i < VOICES; ++i) {
+ if (voices[i].isOn && (voices[i].pitch == pitch)
+ && (voices[i].channel == channel)) {
+ found = true;
+ voices[i].state1 = RELEASE;
+ voices[i].state2 = RELEASE;
+ }
+ }
+ if (!found)
+ printf("Organ: noteoff %d:%d not found\n", channel, pitch);
+ }
+
+//---------------------------------------------------------
+// setController
+//---------------------------------------------------------
+
+void Organ::setController(int ctrl, int data)
+ {
+ int sr = sampleRate();
+
+ // Changed By T356.
+ // Because of muse's auto-bias controllers, some of these negative-range
+ // controls need to apply the auto-bias correction.
+
+ switch (ctrl) {
+ case HARM0:
+ //harm0 = cb2amp(-data);
+ harm0 = cb2amp(-data + 8192);
+ break;
+ case HARM1:
+ //harm1 = cb2amp(-data);
+ harm1 = cb2amp(-data + 8192);
+ break;
+ case HARM2:
+ //harm2 = cb2amp(-data);
+ harm2 = cb2amp(-data + 8192);
+ break;
+ case HARM3:
+ //harm3 = cb2amp(-data);
+ harm3 = cb2amp(-data + 8192);
+ break;
+ case HARM4:
+ //harm4 = cb2amp(-data);
+ harm4 = cb2amp(-data + 8192);
+ break;
+ case HARM5:
+ //harm5 = cb2amp(-data);
+ harm5 = cb2amp(-data + 8192);
+ break;
+ case ATTACK_LO: // maxval -> 500msec
+ attack0 = (data * sr) / 1000;
+ break;
+ case DECAY_LO: // maxval -> 5000msec
+ decay0 = (data * sr) / 1000;
+ break;
+ case SUSTAIN_LO:
+ //sustain0 = -data;
+ sustain0 = -data + 8192;
+ break;
+ case RELEASE_LO:
+ release0 = (data * sr) / 1000;
+ break;
+ case ATTACK_HI:
+ attack1 = (data * sr) / 1000;
+ break;
+ case DECAY_HI:
+ decay1 = (data * sr) / 1000;
+ break;
+ case SUSTAIN_HI:
+ //sustain1 = -data;
+ sustain1 = -data + 8192;
+ break;
+ case RELEASE_HI:
+ release1 = (data * sr) / 1000;
+ break;
+ case BRASS:
+ brass = data;
+ break;
+ case FLUTE:
+ flute = data;
+ break;
+ case REED:
+ reed = data;
+ break;
+ case VELO:
+ velo = data;
+ break;
+ case CTRL_VOLUME:
+ data &= 0x7f;
+ volume = data == 0 ? 0.0 : cb2amp(int(200 * log10((127.0 * 127)/(data*data))));
+ break;
+ case CTRL_ALL_SOUNDS_OFF:
+ for (int i = 0; i < VOICES; ++i)
+ voices[i].isOn = false;
+ break;
+ case CTRL_RESET_ALL_CTRL:
+ for (int i = 0; i < NUM_CONTROLLER; ++i)
+ setController(0, synthCtrl[i].num, synthCtrl[i].val);
+ break;
+ default:
+ fprintf(stderr, "Organ:set unknown Ctrl 0x%x to 0x%x\n", ctrl, data);
+ return;
+ }
+ for (int i = 0; i < NUM_CONTROLLER; ++i) {
+ if (synthCtrl[i].num == ctrl) {
+ synthCtrl[i].val = data;
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// setController
+//---------------------------------------------------------
+
+bool Organ::setController(int channel, int ctrl, int data)
+ {
+ setController(ctrl, data);
+
+ switch (ctrl) {
+ case HARM0:
+ case HARM1:
+ case HARM2:
+ case HARM3:
+ case HARM4:
+ case HARM5:
+ case ATTACK_LO:
+ case DECAY_LO:
+ case SUSTAIN_LO:
+ case RELEASE_LO:
+ case ATTACK_HI:
+ case DECAY_HI:
+ case SUSTAIN_HI:
+ case RELEASE_HI:
+ case BRASS:
+ case FLUTE:
+ case REED:
+ case VELO:
+ {
+ MidiPlayEvent ev(0, 0, channel, ME_CONTROLLER, ctrl, data);
+ #ifdef ORGAN_DEBUG
+ fprintf(stderr, "OrganGui:setController before gui->writeEvent ctrl:%d data:%d\n", ctrl, data);
+ #endif
+
+ gui->writeEvent(ev);
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// sysex
+//---------------------------------------------------------
+
+bool Organ::sysex(int n, const unsigned char* data)
+ {
+ #ifdef ORGAN_DEBUG
+ printf("Organ: sysex\n");
+ #endif
+ if (unsigned(n) != (NUM_INIT_CONTROLLER * sizeof(int))) {
+ printf("Organ: unknown sysex\n");
+ return false;
+ }
+ int* s = (int*) data;
+ for (int i = 0; i < NUM_INIT_CONTROLLER; ++i) {
+ int val = *s++;
+ #ifdef ORGAN_DEBUG
+ printf("Organ: sysex before setController num:%d val:%d\n", synthCtrl[i].num, val);
+ #endif
+ setController(0, synthCtrl[i].num, val);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// getInitData
+//---------------------------------------------------------
+
+void Organ::getInitData(int* n, const unsigned char**p) const
+ {
+ int* d = idata;
+ for (int i = 0; i < NUM_INIT_CONTROLLER; ++i)
+ *d++ = synthCtrl[i].val;
+ *n = NUM_INIT_CONTROLLER * sizeof(int); // sizeof(idata);
+ *p = (unsigned char*)idata;
+ }
+
+//---------------------------------------------------------
+// MESS
+//---------------------------------------------------------
+
+//---------------------------------------------------------
+// getControllerInfo
+//---------------------------------------------------------
+
+int Organ::getControllerInfo(int id, const char** name, int* controller,
+ int* min, int* max, int* initval) const
+ {
+ if (id >= NUM_CONTROLLER)
+ return 0;
+ *controller = synthCtrl[id].num;
+ *name = synthCtrl[id].name;
+ *initval = synthCtrl[id].val;
+
+ if(synthCtrl[id].num == CTRL_VOLUME)
+ {
+ *min = 0;
+ *max = 127;
+ }
+ else
+ gui->getControllerMinMax(id,min,max);
+
+ //*min = 0;
+ //*max = 128*128-1;
+ return ++id;
+ }
+
+//---------------------------------------------------------
+// guiVisible
+//---------------------------------------------------------
+
+bool Organ::guiVisible() const
+ {
+ return gui->isVisible();
+ }
+
+//---------------------------------------------------------
+// showGui
+//---------------------------------------------------------
+
+void Organ::showGui(bool val)
+ {
+ gui->setShown(val);
+ }
+
+//---------------------------------------------------------
+// getGeometry
+//---------------------------------------------------------
+
+void Organ::getGeometry(int* x, int* y, int* w, int* h) const
+ {
+ QPoint pos(gui->pos());
+ QSize size(gui->size());
+ *x = pos.x();
+ *y = pos.y();
+ *w = size.width();
+ *h = size.height();
+ }
+
+//---------------------------------------------------------
+// setGeometry
+//---------------------------------------------------------
+
+void Organ::setGeometry(int x, int y, int w, int h)
+ {
+ gui->resize(QSize(w, h));
+ gui->move(QPoint(x, y));
+ }
+
+//---------------------------------------------------------
+// instantiate
+// construct a new synthesizer instance
+//---------------------------------------------------------
+
+static Mess* instantiate(int sr, QWidget*, QString* projectPathPtr, const char* name)
+ {
+ Organ* synth = new Organ(sr);
+ if (synth->init(name)) {
+ delete synth;
+ synth = 0;
+ }
+ return synth;
+ }
+
+//---------------------------------------------------------
+// msynth_descriptor
+// Return a descriptor of the requested plugin type.
+//---------------------------------------------------------
+
+extern "C" {
+ static MESS descriptor = {
+ "Organ",
+ "Organ based on David A. Bartold's LADSPA plugin",
+ "0.1", // version string
+ MESS_MAJOR_VERSION, MESS_MINOR_VERSION,
+ instantiate,
+ };
+
+ const MESS* mess_descriptor() { return &descriptor; }
+ }
+
diff --git a/muse2/synti/organ/organ.h b/muse2/synti/organ/organ.h
new file mode 100644
index 00000000..308646e1
--- /dev/null
+++ b/muse2/synti/organ/organ.h
@@ -0,0 +1,198 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: organ.h,v 1.5.2.3 2009/11/19 04:20:33 terminator356 Exp $
+//
+// Parts of this file taken from:
+// Organ - Additive Organ Synthesizer Voice
+// Copyright (c) 1999, 2000 David A. Bartold
+//
+// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __ORGAN_H__
+#define __ORGAN_H__
+
+#include "muse/midictrl.h"
+#include "libsynti/mess.h"
+
+#define RESOLUTION (16384*2)
+#define VOICES 128 // max polyphony
+
+class OrganGui;
+
+static const int MAX_ATTENUATION = 960;
+
+enum EnvelopeState {
+ ATTACK,
+ DECAY,
+ SUSTAIN,
+ RELEASE,
+ OFF
+ };
+
+//---------------------------------------------------------
+// Envelope
+//---------------------------------------------------------
+
+struct Envelope {
+ int ticks; // len of segment
+ int error, delta, schritt;
+ int y, yinc;
+
+ void set(int t, int y1, int y2) {
+ ticks = t;
+ y = y1;
+ int dy = y2 - y1;
+ int dx = t;
+ error = -dx;
+ schritt = 2*dx;
+ if (dy < 0) {
+ yinc = -1;
+ delta = -2 * dy;
+ }
+ else {
+ yinc = 1;
+ delta = 2 * dy;
+ }
+ }
+
+ // return false on envelope end
+ bool step(int* a) {
+ *a = y;
+ if (ticks == 0)
+ return false;
+ error += delta;
+ while (error > 0) {
+ y += yinc;
+ error -= schritt;
+ }
+ --ticks;
+ return true;
+ }
+ };
+
+static const int HARM0 = 0 + CTRL_RPN14_OFFSET;
+static const int HARM1 = 1 + CTRL_RPN14_OFFSET;
+static const int HARM2 = 2 + CTRL_RPN14_OFFSET;
+static const int HARM3 = 3 + CTRL_RPN14_OFFSET;
+static const int HARM4 = 4 + CTRL_RPN14_OFFSET;
+static const int HARM5 = 5 + CTRL_RPN14_OFFSET;
+static const int ATTACK_LO = 6 + CTRL_RPN14_OFFSET;
+static const int DECAY_LO = 7 + CTRL_RPN14_OFFSET;
+static const int SUSTAIN_LO = 8 + CTRL_RPN14_OFFSET;
+static const int RELEASE_LO = 9 + CTRL_RPN14_OFFSET;
+static const int ATTACK_HI = 10 + CTRL_RPN14_OFFSET;
+static const int DECAY_HI = 11 + CTRL_RPN14_OFFSET;
+static const int SUSTAIN_HI = 12 + CTRL_RPN14_OFFSET;
+static const int RELEASE_HI = 13 + CTRL_RPN14_OFFSET;
+static const int BRASS = 14 + CTRL_RPN14_OFFSET;
+static const int FLUTE = 15 + CTRL_RPN14_OFFSET;
+static const int REED = 16 + CTRL_RPN14_OFFSET;
+static const int VELO = 17 + CTRL_RPN14_OFFSET;
+
+//---------------------------------------------------------
+// SynthCtrl
+//---------------------------------------------------------
+
+struct SynthCtrl {
+ const char* name;
+ int num;
+ int val;
+ };
+
+//---------------------------------------------------------
+// Voice
+//---------------------------------------------------------
+
+struct Voice {
+ bool isOn;
+ int pitch;
+ int channel;
+
+ double velocity;
+
+ int state1, state2;
+ Envelope envL1, envL2, envL3;
+ Envelope envH1, envH2, envH3;
+
+ unsigned harm0_accum;
+ unsigned harm1_accum;
+ unsigned harm2_accum;
+ unsigned harm3_accum;
+ unsigned harm4_accum;
+ unsigned harm5_accum;
+ };
+
+//---------------------------------------------------------
+// Preset
+//---------------------------------------------------------
+
+struct Preset {
+ char* name;
+ bool brass, flute, reed;
+ int attack0, attack1;
+ int release0, release1;
+ int decay0, decay1;
+ double harm0, harm1, harm2, harm3, harm4, harm5;
+ bool velo;
+ };
+
+//---------------------------------------------------------
+// Organ
+//---------------------------------------------------------
+
+class Organ : public Mess {
+ static int useCount;
+
+ static double cb2amp_tab[MAX_ATTENUATION];
+ static unsigned freq256[128];
+ static double cb2amp(int cb);
+
+ int* idata; // buffer for init data
+
+ bool brass, flute, reed;
+ int attack0, attack1;
+ int release0, release1;
+ int decay0, decay1; // ticks
+ int sustain0, sustain1; // centibel
+ bool velo;
+ double volume;
+
+ double harm0, harm1, harm2, harm3, harm4, harm5;
+
+ Voice voices[VOICES];
+
+ static float* sine_table;
+ static float* g_triangle_table;
+ static float* g_pulse_table;
+
+ void noteoff(int channel, int pitch);
+ void setController(int ctrl, int val);
+
+
+ OrganGui* gui;
+
+ public:
+ virtual void processMessages();
+ virtual void process(float**, int, int);
+ virtual bool playNote(int channel, int pitch, int velo);
+ virtual bool setController(int channel, int ctrl, int val);
+
+ virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;
+ virtual void getInitData(int*, const unsigned char**) const;
+
+ virtual bool guiVisible() const;
+ virtual void showGui(bool);
+ virtual bool hasGui() const { return true; }
+ virtual void getGeometry(int* x, int* y, int* w, int* h) const;
+ virtual void setGeometry(int x, int y, int w, int h);
+ virtual bool sysex(int, const unsigned char*);
+ static SynthCtrl synthCtrl[];
+ Organ(int sampleRate);
+ ~Organ();
+ bool init(const char* name);
+ };
+
+#endif
+
diff --git a/muse2/synti/organ/organgui.cpp b/muse2/synti/organ/organgui.cpp
new file mode 100644
index 00000000..2f68b655
--- /dev/null
+++ b/muse2/synti/organ/organgui.cpp
@@ -0,0 +1,189 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: organgui.cpp,v 1.16.2.3 2009/11/16 04:30:46 terminator356 Exp $
+//
+// This is a simple GUI implemented with QT for
+// organ software synthesizer.
+//
+// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <list>
+
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qsocketnotifier.h>
+#include <q3listbox.h>
+#include <qtoolbutton.h>
+#include <qlineedit.h>
+#include <q3filedialog.h>
+#include <qspinbox.h>
+#include <qsignalmapper.h>
+
+#include "organgui.h"
+#include "muse/midi.h"
+#include "muse/midictrl.h"
+
+//#define ORGANGUI_DEBUG
+
+//---------------------------------------------------------
+// OrganGui
+//---------------------------------------------------------
+
+OrganGui::OrganGui()
+ : OrganGuiBase(0, "organgui", Qt::WType_TopLevel), MessGui()
+ {
+ QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read);
+ connect(s, SIGNAL(activated(int)), SLOT(readMessage(int)));
+
+ dctrl[0] = SynthGuiCtrl(p1, lcd1, SynthGuiCtrl::SLIDER);
+ dctrl[1] = SynthGuiCtrl(p2, lcd2, SynthGuiCtrl::SLIDER);
+ dctrl[2] = SynthGuiCtrl(p3, lcd3, SynthGuiCtrl::SLIDER);
+ dctrl[3] = SynthGuiCtrl(p4, lcd4, SynthGuiCtrl::SLIDER);
+ dctrl[4] = SynthGuiCtrl(p5, lcd5, SynthGuiCtrl::SLIDER);
+ dctrl[5] = SynthGuiCtrl(p6, lcd6, SynthGuiCtrl::SLIDER);
+ dctrl[6] = SynthGuiCtrl(p7, lcd7, SynthGuiCtrl::SLIDER);
+ dctrl[7] = SynthGuiCtrl(p8, lcd8, SynthGuiCtrl::SLIDER);
+ dctrl[8] = SynthGuiCtrl(p9, lcd9, SynthGuiCtrl::SLIDER);
+ dctrl[9] = SynthGuiCtrl(p10, lcd10, SynthGuiCtrl::SLIDER);
+ dctrl[10] = SynthGuiCtrl(p11, lcd11, SynthGuiCtrl::SLIDER);
+ dctrl[11] = SynthGuiCtrl(p12, lcd12, SynthGuiCtrl::SLIDER);
+ dctrl[12] = SynthGuiCtrl(p13, lcd13, SynthGuiCtrl::SLIDER);
+ dctrl[13] = SynthGuiCtrl(p14, lcd14, SynthGuiCtrl::SLIDER);
+ dctrl[14] = SynthGuiCtrl(sw1, 0, SynthGuiCtrl::SWITCH);
+ dctrl[15] = SynthGuiCtrl(sw3, 0, SynthGuiCtrl::SWITCH);
+ dctrl[16] = SynthGuiCtrl(sw2, 0, SynthGuiCtrl::SWITCH);
+ dctrl[17] = SynthGuiCtrl(sw4, 0, SynthGuiCtrl::SWITCH);
+
+ map = new QSignalMapper(this);
+ for (int i = 0; i < NUM_GUI_CONTROLLER; ++i) {
+ map->setMapping(dctrl[i].editor, i);
+ if (dctrl[i].type == SynthGuiCtrl::SLIDER)
+ connect((QSlider*)(dctrl[i].editor), SIGNAL(valueChanged(int)), map, SLOT(map()));
+ else if (dctrl[i].type == SynthGuiCtrl::SWITCH)
+ connect((QCheckBox*)(dctrl[i].editor), SIGNAL(toggled(bool)), map, SLOT(map()));
+ }
+ connect(map, SIGNAL(mapped(int)), this, SLOT(ctrlChanged(int)));
+
+ // work around for probable QT/WM interaction bug.
+ // for certain window managers, e.g xfce, this window is
+ // is displayed although not specifically set to show();
+ // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others)
+ show();
+ hide();
+ }
+
+//---------------------------------------------------------
+// ctrlChanged
+//---------------------------------------------------------
+
+void OrganGui::ctrlChanged(int idx)
+ {
+ SynthGuiCtrl* ctrl = &dctrl[idx];
+ int val = 0;
+ if (ctrl->type == SynthGuiCtrl::SLIDER) {
+ QSlider* slider = (QSlider*)(ctrl->editor);
+ val = slider->value();
+ // By T356. Apply auto-bias center value.
+ if(slider->minValue() < 0)
+ val += 8192;
+ }
+ else if (ctrl->type == SynthGuiCtrl::SWITCH) {
+ val = ((QCheckBox*)(ctrl->editor))->isChecked();
+ }
+ sendController(0, idx + CTRL_RPN14_OFFSET, val);
+ }
+
+//---------------------------------------------------------
+// getControllerInfo
+// return min max values for controllers
+//---------------------------------------------------------
+int OrganGui::getControllerMinMax(int id, int* min, int* max) const
+ {
+ if (id >= NUM_GUI_CONTROLLER)
+ return 0;
+
+ const SynthGuiCtrl* ctrl = (const SynthGuiCtrl*)&dctrl[id];
+ //int val = 0;
+ if (ctrl->type == SynthGuiCtrl::SLIDER) {
+ QSlider* slider = (QSlider*)(ctrl->editor);
+ *max = slider->maxValue();
+ *min = slider->minValue();
+ //val = (slider->value() * 16383 + max/2) / max;
+
+ //val = 16383 + 1/2
+ }
+ else if (ctrl->type == SynthGuiCtrl::SWITCH) {
+ //val = ((QCheckBox*)(ctrl->editor))->isOn();
+ *min=0;
+ *max=1;
+ }
+ return ++id;
+ }
+
+//---------------------------------------------------------
+// setParam
+// set param in gui
+//---------------------------------------------------------
+
+void OrganGui::setParam(int param, int val)
+ {
+ #ifdef ORGANGUI_DEBUG
+ fprintf(stderr, "OrganGui:setParam param:%d val:%d\n", param, val);
+ #endif
+
+ param &= 0xfff;
+ if (param >= int(sizeof(dctrl)/sizeof(*dctrl))) {
+ fprintf(stderr, "OrganGui: set unknown Ctrl 0x%x to 0x%x\n", param, val);
+ return;
+ }
+ SynthGuiCtrl* ctrl = &dctrl[param];
+ ctrl->editor->blockSignals(true);
+ if (ctrl->type == SynthGuiCtrl::SLIDER) {
+ QSlider* slider = (QSlider*)(ctrl->editor);
+// int max = slider->maxValue();
+// if(val < 0) val = (val * max + 8191) / 16383 - 1;
+// else val = (val * max + 8191) / 16383;
+
+ // By T356. Apply auto-bias center value.
+ if(slider->minValue() < 0)
+ val -= 8192;
+
+ #ifdef ORGANGUI_DEBUG
+ fprintf(stderr, "OrganGui:setParam setting slider val:%d\n", val);
+ #endif
+
+ slider->setValue(val);
+ if (ctrl->label)
+ ((QSpinBox*)(ctrl->label))->setValue(val);
+ }
+ else if (ctrl->type == SynthGuiCtrl::SWITCH) {
+ ((QCheckBox*)(ctrl->editor))->setChecked(val);
+ }
+ ctrl->editor->blockSignals(false);
+ }
+
+//---------------------------------------------------------
+// processEvent
+//---------------------------------------------------------
+
+void OrganGui::processEvent(const MidiPlayEvent& ev)
+ {
+ if (ev.type() == ME_CONTROLLER)
+ setParam(ev.dataA(), ev.dataB());
+ else
+ printf("OrganGui::illegal event type received\n");
+ }
+
+//---------------------------------------------------------
+// readMessage
+//---------------------------------------------------------
+
+void OrganGui::readMessage(int)
+ {
+ MessGui::readMessage();
+ }
+
diff --git a/muse2/synti/organ/organgui.h b/muse2/synti/organ/organgui.h
new file mode 100644
index 00000000..9f133de7
--- /dev/null
+++ b/muse2/synti/organ/organgui.h
@@ -0,0 +1,43 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: organgui.h,v 1.6.2.1 2005/12/29 23:33:50 spamatica Exp $
+//
+// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __ORGANGUI_H__
+#define __ORGANGUI_H__
+
+#include "organguibase.h"
+#include "organ.h"
+#include "libsynti/gui.h"
+#include "libsynti/mpevent.h"
+
+class QSignalMapper;
+
+#define NUM_GUI_CONTROLLER 18
+
+//---------------------------------------------------------
+// OrganGui
+//---------------------------------------------------------
+
+class OrganGui : public OrganGuiBase, public MessGui {
+ Q_OBJECT
+
+ QSignalMapper* map;
+ SynthGuiCtrl dctrl[NUM_GUI_CONTROLLER];
+ void setParam(int, int);
+
+ private slots:
+ void ctrlChanged(int idx);
+ void readMessage(int);
+
+ public:
+ virtual void processEvent(const MidiPlayEvent&);
+ int getControllerMinMax(int id, int* min, int* max) const;
+ OrganGui();
+ };
+
+#endif
+
diff --git a/muse2/synti/organ/organguibase.ui b/muse2/synti/organ/organguibase.ui
new file mode 100644
index 00000000..1a87fee8
--- /dev/null
+++ b/muse2/synti/organ/organguibase.ui
@@ -0,0 +1,1219 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>OrganGuiBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>OrganGuiBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>534</width>
+ <height>366</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>198</red>
+ <green>205</green>
+ <blue>220</blue>
+ </color>
+ </property>
+ <property name="caption">
+ <string>MusE: Organ</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>4</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Drawbars</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>16'</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>4'</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>2 2/3'</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>2'</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>5 1/3'</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>8'</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="2">
+ <property name="name">
+ <cstring>p2</cstring>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>170</red>
+ <green>85</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="2" column="2">
+ <property name="name">
+ <cstring>p3</cstring>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="3" column="2">
+ <property name="name">
+ <cstring>p4</cstring>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="4" column="2">
+ <property name="name">
+ <cstring>p5</cstring>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="5" column="2">
+ <property name="name">
+ <cstring>p6</cstring>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="2">
+ <property name="name">
+ <cstring>p1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>170</red>
+ <green>85</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>lcd1</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>lcd2</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>lcd3</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>lcd4</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>lcd5</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="5" column="1">
+ <property name="name">
+ <cstring>lcd6</cstring>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Envelope Hi</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel14</cstring>
+ </property>
+ <property name="text">
+ <string>Release</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="text">
+ <string>Sustain</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="text">
+ <string>Decay</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Attack</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="4" column="2">
+ <property name="name">
+ <cstring>p14</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>50</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="2" column="2">
+ <property name="name">
+ <cstring>p13</cstring>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="2">
+ <property name="name">
+ <cstring>p12</cstring>
+ </property>
+ <property name="maxValue">
+ <number>5000</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>lcd11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="2">
+ <property name="name">
+ <cstring>p11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>50</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>lcd12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>5000</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>lcd13</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>cB</string>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>lcd14</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Envelope Lo</string>
+ </property>
+ <property name="alignment">
+ <set>AlignLeft</set>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Attack</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>Decay</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Sustain</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Release</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="2">
+ <property name="name">
+ <cstring>p7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>50</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="2">
+ <property name="name">
+ <cstring>p8</cstring>
+ </property>
+ <property name="maxValue">
+ <number>5000</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="2" column="2">
+ <property name="name">
+ <cstring>p9</cstring>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="3" column="2">
+ <property name="name">
+ <cstring>p10</cstring>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ <property name="tickInterval">
+ <number>50</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>lcd7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>lcd8</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>5000</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>lcd9</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>cB</string>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-960</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>lcd10</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>500</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>198</red>
+ <green>205</green>
+ <blue>220</blue>
+ </color>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>48</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>O-1</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Oscillator</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sw1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Brass</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sw2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Reed</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sw3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Flute</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sw4</cstring>
+ </property>
+ <property name="text">
+ <string>Velocity</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>p11</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd11</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p12</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd12</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p13</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd13</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p14</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd14</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p7</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd7</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p8</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd8</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p9</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd9</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p10</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd10</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p1</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd1</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p2</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd2</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p3</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd3</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p4</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd4</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p5</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd5</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>p6</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lcd6</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd1</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p1</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd2</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p2</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd3</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p3</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd4</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p4</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd5</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p5</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd6</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p6</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd7</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p7</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd8</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p8</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd9</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p9</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd10</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p10</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd11</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p11</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd12</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p12</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd13</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p13</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>lcd14</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>p14</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>p1</tabstop>
+ <tabstop>p3</tabstop>
+ <tabstop>p2</tabstop>
+ <tabstop>p4</tabstop>
+ <tabstop>p5</tabstop>
+ <tabstop>p6</tabstop>
+ <tabstop>p7</tabstop>
+ <tabstop>p8</tabstop>
+ <tabstop>p9</tabstop>
+ <tabstop>p10</tabstop>
+ <tabstop>p11</tabstop>
+ <tabstop>p12</tabstop>
+ <tabstop>p13</tabstop>
+ <tabstop>p14</tabstop>
+ <tabstop>sw1</tabstop>
+ <tabstop>sw2</tabstop>
+ <tabstop>sw3</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>