diff options
Diffstat (limited to 'muse2/synti/organ')
| -rw-r--r-- | muse2/synti/organ/Makefile.am | 15 | ||||
| -rw-r--r-- | muse2/synti/organ/Makefile.in | 657 | ||||
| -rw-r--r-- | muse2/synti/organ/fdialogbuttons.ui | 136 | ||||
| -rw-r--r-- | muse2/synti/organ/organ.cpp | 710 | ||||
| -rw-r--r-- | muse2/synti/organ/organ.h | 198 | ||||
| -rw-r--r-- | muse2/synti/organ/organgui.cpp | 189 | ||||
| -rw-r--r-- | muse2/synti/organ/organgui.h | 43 | ||||
| -rw-r--r-- | muse2/synti/organ/organguibase.ui | 1219 | 
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> | 
